[软件构造笔记] 第一章 软件构造的视角和质量目标

1 软件构造的多维度视角

提纲

多维度视角

  • 按时间划分:开发/运行视角
  • 按动态划分:瞬时/周期视角
  • 按层面划分:代码/组件视角
  • 各视角的元素、关系、模型

软件构造——视图间的转换

  • ϕ\phi->代码
  • 代码->组件
  • 开发->运行
  • 瞬时->周期

学习目标

  • 软件构造三维度的各要素
  • 描述软件系统的模型
  • 软件构造是视图间的转换

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 软件构造是视图间的转换

[软件构造笔记] 第一章 软件构造的视角和质量目标

  • ϕ\phi->代码:编程、检查
  • 代码->组件:设计、编译、静态链接、包
  • 开发->运行:安装、布署、测试、调试
  • 瞬时->周期:重构、版本管理、载入、动态链接、解析、执行

2 软件构造的质量目标

提纲

软件系统的质量:

  • 外部质量 vs 内部质量
  • 重要的外部质量因素
  • 质量因素的权衡

软件构造的5个目标:

  • 易理解: 清晰的规约、注释、代码
  • 易改变: 可维护性、可扩展性
  • 开发简单: 可复用性
  • 不易出错: 鲁棒性
  • 高效: 性能

1 软件系统的质量因素

外部质量:软件的外在效果,影响用户体验
内部质量:软件的内部实现,影响软件本身和开发者编程
外部质量最重要,但高内部质量能提高外部质量

外部质量因素

  • 正确性:执行结果符合规约,是首要质量因素
  • 鲁棒性(健壮性):对异常能进行正确反应,异常指规约未涉及的情况
  • 可扩展性:要设计简单,模块化
  • 可复用性:高效复用,避免重复实现
  • 兼容性:多软件间的交互,通过标准化、协议实现兼容
  • 效率:尽可能减少对系统资源的需求
  • 可移植性:方便移植到其他软硬件环境
  • 易用性:方便用户使用
  • 功能性
  • 时效性

内部质量因素

  • 代码行数、圈复杂度
  • 高内聚、低耦合
  • 易读性
  • 复杂度
  • 规模

权衡

正确性第一!

2 软件构造的5个目标

  • 易理解性(可读性):
    [软件构造笔记] 第一章 软件构造的视角和质量目标
  • 开发简单(可复用性):
    [软件构造笔记] 第一章 软件构造的视角和质量目标
  • 易改变(可维护性):
    [软件构造笔记] 第一章 软件构造的视角和质量目标
  • 不易出错(鲁棒性):
    [软件构造笔记] 第一章 软件构造的视角和质量目标
  • 高效(性能):
    [软件构造笔记] 第一章 软件构造的视角和质量目标