1.多维软件视图:
按阶段划分:构造时/运行时视图
按动态性划分:时刻/阶段视图
按构造对象的层次划分:代码/构件视图
2. 软件构造的五个关键质量目标
易理解性、可维护性和适应性、复用性、健壮性、性能
3.多维视图:
3.1Build-time (构造阶段):
Code-level view:源码、类结构;代码变化:代码的逻辑组织
Component-level view:文件、目录、包、库、静态链接、测试项;配置项、版本:代码的物理组织
moment view:源码、类结构;文件、目录、包、库、静态链接、测试项:特定时刻的软件形态
Period view:代码变化;配置项、版本:软件形态随时间 的变化
3.1.1Build-time, moment, and code-level view:词汇层面:源代码、语法层面:抽象语法树、语义层面:类图
3.1.2Build-time, period, and code-level view:代码变化
3.1.3Build-time, moment, and component-level view:源代码被物理组织成文件,这些文件进一步按目录组织,文件被封装到包中、类库、静态链接、
3.1.4Build-time, period, and component-level view:配置项以及版本
这里我们需要知道软件配置管理SCM和版本控制系统VCS:
我们要知道软件配置管理可以追踪和控制软件的变化,而软件配置项SCI是软件中发生变化的基本单元(例如:文件)。基线指的是软件持续变化过程中的“稳定时刻”(例如:对外发布的版本)。CMDB是配置管理数据库存储软件的各配置项随时间发生变化的信息 +基线。
版本为软件的任一特定时刻(Moment)的形态指 派一个唯一的编号,作为“身份标识”。古老的版本控制方法是通过复制文件并修改文件名。我们有三种VCS:(1)本地版本控制系统: 仓库存储于开发者本地机器 无法共享和协作;(2)集中式版本控制系统:仓库存储于独立的服务器, 支持多开发者之间的协作;(3)分布式版本控制系 统:仓库存储于独 立的服务器+每个开 发者的本地机器。
我们要学会使用Git作为版本控制管理工具,要熟悉一些命令:
git add/mv/rm : workingspace->storing
git commit : storing->local repository
git commit -a : workingspace->local repository
git reset<file> : storing->workingspace
git reset<commit> : local repository->workingspace
git push : local repository->remote repository
git fetch : remote repository->local repository
git clone/pull : remote repository->workingspace
每一个文件都属于以下三种状态之一:已修改、已缓存、已提交。在版本之间的演化关系图中,每个commit指向一个父亲,多个 commit指向同一个父亲表示分支,一个commit 指向两个父亲表示合并,Head指向当前的commit。
传统VCS存储版本之间的变化是代码行的变化,Git存储发生变化的是文件而非代码行, 不变化的文件不重复存储。
git创建一个新的分支:git checkout –b 分支名
git控制权回到某个分支:git checkout 分支名
git合并某个分支:git merge 分支名
3.2Runtime Views:运行时:程序被载入目标机器,开始执行
Code-level view:代码层面:逻辑实体在内存中的呈现
Component-level view:构件层面:物理实体在物理硬件环境中的呈现
Moment view:逻辑/物理实体 在内存/硬件环境中特定时刻形态
Period view:逻辑/物理实体在内存/ 硬件环境中的形态随时间的变化
动态链接:库文件不会在构建阶段被加入可执行软件,仅仅做出标记;程序运行时,根据标记装载库至内存;发布软件时,将程序所依赖的所有动态库都复制给用户.
3.2.1Run-time, moment, and code-level view:代码快照图:描述程序运行时内存 里变量层面的状态,Memory dump (内存信息转储)
3.2.2Run-time, period and code-level view:执行跟踪,用日志方式记录程序执行的调用次序,代码层面。
3.2.3Run-time, moment, and component-level view:UML的部署图
3.2.4Run-time,period, and component-level view:事件日志:系统层面
4.质量指标:
外部质量因素影响用户,内部质量因素影响软件本身和它的开发者,外部质量取决于内部质量。
4.1 外部质量指标:
正确性:最重要的质量指标(一定要按照事先约定的spec),要防御式编程、进行调试与测试。
健壮性:针对异常情况的处理,健壮性是对正确性的补充。
鲁棒性:未被specification覆盖的情况即为“异常情况”
可扩展性、可复用性、兼容性、性能、可移植性、易用性、多功能性、及时性······