1.1.1 构建时视角下的软件系统
- Buid-time, moment, and code-level
代码如何在逻辑上被基本的程序块,例如函数、类、方法、接口等组织起来,以及其之间的依赖关系
词汇层面:代码;semi-structured source code
语法层面:AST,结构的嵌套等等
语义层面:类图
- Buid-time, period, and code-level
代码在时间上的变化,例如代码行的增加、删除和修改
Code churn 代码变化: Lines added, modified or deleted to a file
from one version to another.
- Buid-time, moment, and component-level
在物理上:源代码被组织为文件,文件被组织进目录;文件被包含在包中,在逻辑上也被包含在容器和子系统中;可复用的模块被组织为库。
Maven python的库
更高级的编程语言
静态和动态
- Buid-time, period, and component-level
软件系统中的实体如文件、包、容器、库随时间如何变化,或称版本如何变化。
Software Configuration Item (SCI,配置项)
其实就是最小单元 如文件 测试类
Version Control System (VSC)如git
RunTime
Run-time, moment, and code-level
快照图(snapshot diagram)、内存转储(memory dump)。主要关注软件在运行时保有的数据及其在内存中的结构
Run-time, period,and code-level
UML:顺序图(sequence diagram)(主要关注程序单元之间的交互)、运行时栈跟踪(execution stack trace)( 用日志方式记录程序执行的调用次序)。
时序图记录单元之间交互、执行跟踪通过log记录
Run-time, moment, and component-level
UML:部署图(各个组件被部署在了哪些机器上)。
Run-time, period,and component-level
事件日志从系统层面为系统管理员提供信息。每一类事件被分配唯一的“代码”来格式化输出人类能读懂的信息。
事件日志跟执行追踪
1.3.1外部质量因素
- 正确性Correctness
测试和调试:Testing and debugging
防御式编程:defensive
形式化方法:
- 健壮性
健壮性是对正确性的补充
正确性:软件的行为要严格的符合规约中定义的行为
健壮性:出现规约定义之外的情形的时候,软件要做出恰当的反应
健壮性:出现异常时不要“崩溃
- 可扩展性
scale 规模越大,扩展起来越
不容易
Design simplicity 简约主义设计
Decnetrallization分离主义设计
- 可复用性
一次开发,多次使用
- 兼容性
- 效率
性能毫无意义,除非有足够的正确性
对性能的关注要与其他质量属性进行折中
过度的优化导致软件不再适应变化和复用
- 可移植性
- 易用性
- 功能性
- 开发时间
- 可验证性、完整性、可修复性、经济性
1.3.2内部质量因素
1.代码行数和复杂度
Lines of
Code (LOC), Cyclomatic Complexity
- 低耦合,内聚
coupling, cohesion
- 可读性
Readability
- 可理解性
Understandability
- 简洁度
Clearness
- 大小
Size