[软件构造笔记] 第一章 软件构造的视角和质量目标
文章目录
1 软件构造的多维度视角
提纲
多维度视角
- 按时间划分:开发/运行视角
- 按动态划分:瞬时/周期视角
- 按层面划分:代码/组件视角
- 各视角的元素、关系、模型
软件构造——视图间的转换
- ->代码
- 代码->组件
- 开发->运行
- 瞬时->周期
学习目标
- 软件构造三维度的各要素
- 描述软件系统的模型
- 软件构造是视图间的转换
1 多维软件视图
软件系统=程序+数据+文档(规约等)
1 开发视角(Build-time)
开发视角关注:
- 代码层面:代码的逻辑和实现
- 组件层面:包、目录的组织,库、数据库的关联
- 瞬时层面:某时刻软件形态
- 周期层面:软件形态随时间的变化
开发-瞬时-代码视角
逻辑上程序块的组织,包含词汇、语法(如AST)、语义(如Class Diagram)
- AST
- Class Diagram
开发-周期-代码视角
关注代码的变化
开发-瞬时-组件视角
文件、包、组件、类库的管理、链接
开发-周期-组件视角
项目配置、版本管理
- VCS
- Evolution Graph
2 运行视角(Run-time)
代码层面:代码逻辑在内存中的展现
组件层面:每个模块的物理配置和运行情况
瞬时层面:某时刻程序在内存/硬件中的运行状况
周期层面:程序在内存/硬件中的变化、总性能、需求
运行阶段的重要组件:可执行程序、类库、配置文件、分布式程序
运行-瞬时-代码视角
关注内存中变量、类的状态,如Snapshot,Memory dump
- Snapshot
运行-周期-代码视角
关注运行时内存的调用情况及调用层次,如运行视图、Execution tracing
- Execution tracing
运行-瞬时-组件视角
关注模块的配置情况
运行-周期-组件视角
作事件日志,关注系统的整体运行情况
2 软件构造是视图间的转换
- ->代码:编程、检查
- 代码->组件:设计、编译、静态链接、包
- 开发->运行:安装、布署、测试、调试
- 瞬时->周期:重构、版本管理、载入、动态链接、解析、执行
2 软件构造的质量目标
提纲
软件系统的质量:
- 外部质量 vs 内部质量
- 重要的外部质量因素
- 质量因素的权衡
软件构造的5个目标:
- 易理解: 清晰的规约、注释、代码
- 易改变: 可维护性、可扩展性
- 开发简单: 可复用性
- 不易出错: 鲁棒性
- 高效: 性能
1 软件系统的质量因素
外部质量:软件的外在效果,影响用户体验
内部质量:软件的内部实现,影响软件本身和开发者编程
外部质量最重要,但高内部质量能提高外部质量
外部质量因素
- 正确性:执行结果符合规约,是首要质量因素
- 鲁棒性(健壮性):对异常能进行正确反应,异常指规约未涉及的情况
- 可扩展性:要设计简单,模块化
- 可复用性:高效复用,避免重复实现
- 兼容性:多软件间的交互,通过标准化、协议实现兼容
- 效率:尽可能减少对系统资源的需求
- 可移植性:方便移植到其他软硬件环境
- 易用性:方便用户使用
- 功能性
- 时效性
- …
内部质量因素
- 代码行数、圈复杂度
- 高内聚、低耦合
- 易读性
- 复杂度
- 规模
权衡
正确性第一!
2 软件构造的5个目标
- 易理解性(可读性):
- 开发简单(可复用性):
- 易改变(可维护性):
- 不易出错(鲁棒性):
- 高效(性能):