【软件构造】课件精译(一)软件构造的多维度视图

系列前言

我校《软件构造》课程的很多内容来自像MIT、CMU这样的国外大学,可能是出于培养学生阅读英文文献能力的考虑,学校上课的课件上大多内容没有经过翻译,只有部分关键词予以解释,这给很多同学学习带来了一定困难。为了方便日后查阅,笔者计划尽可能多的对课件中的重要内容进行翻译和拓展,使其更便于阅读和学习。
当然由于水平有限,翻译错误的地方还请大家多多指正,实在翻译不好的地方也先用英文代替了,排版方面也只能不拘小节了。另外由于精力有限,更新可能比较延后,更新日期也完全不确定,有些章节也可能因为时间原因翻译的比较敷衍,至于能翻译多少章节也很难说,只能说有空时做一下这个工作。

一、本章概述

1、软件的多维视图

按照阶段:构建和运行时视图
按照 dynamics:瞬间和时间段视图
按照层面:代码和组件视图
元素、关系和模型视图

2、软件构造:在视图间转换

从∅到代码再到组件
从构建时到运行时
从瞬间到时间段

3、总结

二、本章目标

掌握软件系统三个维度中的各要素
掌握各类描述软件系统的模型
理解软件的构造就是在不同视图之间的变换

三、正文

1、软件的多维视图

什么是软件?
“软件”这个术语第一次由图灵提出,发展到现在软件的类型也比较多:
系统软件、应用软件
桌面、Web、移动和嵌入式软件
商业、个人软件
开源、专有软件
在这里插入图片描述
软件系统是由什么组成的?
这个理论也是在不断发展的:
软件=程序(代码)
软件=算法+数据结构
软件=程序+数据+文档
软件=模块(组件)+数据/控制流
(提出理论的几位大神的照片我这里就不放了
更近一步
我们来看一看“软件=程序+数据+文档”这一种理论。
程序(UI、算法、Utilities、接口、测试用例等)
数据(文件、数据库等)
文档(需求规格说明SRS, 设计规格说明SDD, 用户手册等)
++++++++++++++++++++++++++++++++++++++++++++++++++++
开发一款软件需要考虑的也很多,比如下面几个问题:
(这个比较好理解,就不翻译了
在这里插入图片描述
在这里插入图片描述
多维软件视图
在这里插入图片描述

软件系统的构建时视图

在这里插入图片描述
想法→需求→设计→代码(软件构建的核心过程和环节)→可安装性/可执行性包
代码层面视图:源代码——源代码如何通过基本的程序块逻辑地组织起来
组件层面视图:架构——源代码如何通过文件、目录、包、库和之间的依赖物理地组织在一起
某一时刻视图:源代码和组件在某一特定的时刻的状态
某一时间段视图: 它们随着时间如何演进或变化

(1)构建时,某一时刻,代码层面视图

三个内联形式:
面向词法的半结构化源代码在这里插入图片描述
面向语法的程序结构
AST:抽象语法树(用结构树来代替半结构化源代码)
在这里插入图片描述
在这里插入图片描述
面向语意的程序结构
例如:用类图(UML)在描述接口、类、属性、方法和其中的关系
基于图形或者由形式定义
在设计阶段通常是模型化的,并且将其转换为源代码
根据用于需求面向对象分析和设计的结果
在这里插入图片描述
在这里插入图片描述

(2)构建时、某一时间段、代码层面视图

构建过程中代码变动,如修改、删除、版本变化等

(3)构建时、某一时刻、组件层面视图

源代码物理地组织在被目录组织的文件中
文件被封装成包、组建和子系统
可复用模块形成类库
(含有可复用的函数)
来源:操作系统预装、语言自带、第三方、自行开发
库的链接:程序被编辑、构建和安装时,需要提供用到的类库列表。如果一个调用的函数并没有出现在开发者的源代码中,那么会在类库列表中搜索并复制类库到可执行程序中。分为静态链接和动态链接,前者在构建时类库文件复制到可执行文件中。
UML(统一建模语言)绘制的组件图
在这里插入图片描述

(4)构建时、某一时间段、组件层面视图

文件、包、组件、库随时间的变化
SCI(软件配置项)
版本
在这里插入图片描述
VCS(版本控制系统)
在这里插入图片描述
演化图
在这里插入图片描述
版本
版本控制是给计算机软件的不同状态分配唯一的名字或编号的过程
在这里插入图片描述
软件演化是指软件产生之后,由于不同的原因对其进行持续地升级过程。

软件系统的运行时视图

在这里插入图片描述
代码层面:内存中的状态与关联关系
组件层面:物理环境(操作系统、网络、硬件等)的组织形式与关联关系
运行时软件的高级概念:可执行程序、库
动态链接
不将目标文件复制到可执行程序中,而是会标注用到的类库。在运行时,加载用到的库到内存中,然后同主程序链接。部署时需要将用到的类库同程序一起部署。
优点:类库变化时不需要重新生成目标程序,多个运行中程序课共享同一类库,优化内存使用。
在这里插入图片描述
(都是ICS的东西,其实感觉没必要放上了
配置和数据文件
程序像操作系统请求例如图片、声音、软件配置文件、各种文档和数据库等,并在内存中读取。
分布式程序
例如,一个软件系统可能会使用C/S模型,包括运行在一台电脑上的服务器,以及运行在大量电脑上的客户端。在这个场景中,构建系统可以创建两个发布包,因为安装服务器程序的人不同于安装客户端程序的人。或者,可以使用相同的发布包来安装两个单独的程序。

(5)运行时、某一时刻、代码层面视图

Snapshot diagram:刻画内存中某时刻变量的状态
在这里插入图片描述
在这里插入图片描述
Memory dump:硬盘上包含着内存内容复件的文件,在进程因信号或错误中止时产生

(6)运行时、某一时间段、代码层面视图

UML描述的时序模型:程序单元间的联系
在这里插入图片描述
执行跟踪:跟踪包括用来记录程序执行信息的特殊的日志使用
在这里插入图片描述

(7)运行时,某一时刻,组件层面视图

UML描述的部署图
在这里插入图片描述

(8)运行时,某一时间段,组件层面视图

事件日志可以给系统管理员提供诊断和审查的有用信息。
每一类事件可以通过给定的独特代码来格式化并且输出人能够读懂的信息。
在这里插入图片描述
在这里插入图片描述

2、软件构造:视图间的转换

在这里插入图片描述
软件构造中的转换类型
∅→代码:编程、回顾、静态分析
代码→组件:设计、编译、静态链接、打包、安装、清理
构建时→运行时:安装/部署,Debug,单元/整体测试
某一时刻→某一时间段:重构、版本控制、加载、动态链接、解释、执行

3、总结

描述软件系统的三个维度:阶段、dynamics、层面
元素、关系、各个视图的模型
软件构造:视图间的转换

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值