软件构造的多维度视图和质量目标
软件的多维度视图
- 按阶段划分:构造时/运行时视图
- 按动态性划分:时刻/阶段视图
- 按构造对象的层次划分:代码/构件视图
编译时视图
- 代码的逻辑组织
- 代码的物理组织
- 特定时刻的软件形态
- 软件形态随时间的变化
编译时-时刻-代码级
- 词汇层面:Lexical-oriented source code
- 语法层面:Syntax-oriented program structure: e.g., Abstract Syntax Tree (AST)
- 语义层面:Semantics-oriented program structure: e.g., Class Diagram
编译时-时间段-代码级
- Code churn:定义为从一个版本到另一个版本的文件中增加、修改或删除的行数。
编译时-时刻-组件级
- Files, packages, components and sub-systems, libraries
- Static linking:库被拷贝进入代码形成整体,执行的时候无需提供库文件
编译时-时间段-组件级
- Software Configuration Item (SCI,配置项)
- Version (版本)
- Version Control System (VCS)
- Software versioning is the process of assigning either unique
version names or unique version numbers to unique states of
computer software.
运行时视图
- 运行时:程序被载入目标机器,开始执行
- 代码层面:逻辑实体在内存中如何呈现?
- 构件层面:物理实体在物理硬件环境中如何呈现?
- Moment view: how do programs behave in a specific time 逻辑/物理实体在内存/硬件环境中特定时刻的形态如何?
- Period view: how do they behave along with time 逻辑/物理实体在内存/硬件环境中的形态随时间如何变化?
运行时-时刻-代码级
- Snapshot diagram: 侧重于目标计算机内存中的变量级执行状态。
- 代码快照图:描述程序运行时内存里变量层面的状态
- Memory dump (内存信息转储):硬盘上的一个文件,包含一个进程的内存内容的副本,当一个进程被某些类型的内部错误或信号中止时产生。
运行时-时间段-代码级
- Sequence diagram in UML: interactions among program units (objects)
- Execution tracing 执行跟踪:用日志方式记录程序执行的调用次序
运行时-时刻-组件级
- Deployment diagram in UML
运行时-时间段-组件级
- 事件日志:系统层面
课程重点
视图的转化
软件构造质量目标
软件构造的五个关键质量目标
- Easy to understand: elegant and beautiful code / understandability
- Ready for change: maintainability and adaptability
- Cheap for develop: design for/with reuse: reusability
- Safe from bugs: robustness
- Efficient to run: performance
外部质量因素
- Correctness(正确性):最重要的质量指标
-
- 测试和调试:发现不正确、消除不正确
-
- 防御式编程:在写程序的时候就确保正确性
-
- 形式化方法:通过形式化验证发现问题
- Robustness(健壮性):针对异常情况的处理
-
- 健壮性是对正确性的补充
- Extendibility(可扩展性):对软件的规约进行修改,是否足够容易?
-
- 简约主义设计
-
- 分离主义设计
- Reusability(可复用性):一次开发,多次使用
-
- 发现共性
- Efficiency(性能)
-
- 对性能的关注要与其他质量属性进行折中
-
- 过度的优化导致软件不再适应变化和复用
- Timeliness(及时性)
内部质量因素
- Readability
- Understandability
- Clearness
- Size