软件构造一

绪论

课程目标

  • 深入学习ADT和OOP

  • 掌握面向关键质量目标:

​ 可理解性、可维护性、可复用性、健壮性、时空性能

  • 了解代码重构和面向更复杂软件系统的高级构造技术

软件构造基础

软件构造的多维度视角

大纲:
  • 软件系统多维度视角
    • 分阶段:构建视图和运行时视图
    • 动态:时刻和周期视图
    • 按级别:代码和组件视图
    • 每个视图的元素、关系、模型
  • 软件构造:不同视图间的转换
    • $\empty \Rightarrow $ 代码
    • 代码 $\Rightarrow$ 组件
    • 构建时 $\Rightarrow$ 运行时
    • 时刻 $\Rightarrow$ 周期

本节重点

  • 掌握软件系统三个维度中的各要素
  • 掌握各类描述软件系统的模型
  • 理解软件的构造就是在不同视图之间的变换
多维软件视图

  • Moment view: what do source code and component look like in a specific time
  • Period view: how do they evolve/change along with time-
1)Built-time Views

Built-time(软件构造的核心过程和环节):

​ idea $\Rightarrow$ requirement $\Rightarrow $ design $\Rightarrow $code $\Rightarrow $ installable / executable package

Code-level view: source code (源代码)

Component-level view: architecture (体系结构)

  • Build-time, moment, and code-level view

    • 在逻辑上代码是如何通过基本程序块组织的

    • 三种相互关联的形式:面向词法、面向语法、面向语义

  • Build-time, period, and code-level view

  • Build-time, moment, and component-level view

    • 源代码被物理的组织成文件,这些文件进一步由目录组织
    • 文件被封装成包、组件和子系统
    • 可复用模块形成类库

    a、库的来源:OS自装、语言自带、第三方、自行开发

    b、库集成的方法:

    ​ 静态链接:将类库文件复制到可执行文件中,成为可执行文件的一部分

    ​ 动态链接:类库变化时,不需要重新生成可执行程序;多个运行中程序可共享同一类库,优化内存使用

  • Build-time, period, and component-level view

2)Runtime Views

a、可执行程序

​ 完全转化为CPU能识别的机器码

​ 源代码被加载入内存进行解释执行

​ 程序被编译成字节码形式,运行时需要由解析器转化成机器码或者解释执行/JVM

​ 在执行时编译为字节码解释执行(Perl/Python)

b、配置和数据文件

​ 任何较大的程序都使用外部数据源,程序调用操作系统来请求将数据读入内存

c、分布式程序

  • Run-time, moment, and code-level view:内存转储

  • Run-time, period and code-level view:UML中的序列图$\Rightarrow $执行追踪

  • Run-time, moment, and component-level view:UML分布(配置)图

  • Run-time, period, and component-level view:事件日志
视图变换

转换类型:

$\empty \Rightarrow$代码、代码$\Rightarrow$组件、构建时$\Rightarrow$运行时、时刻$\Rightarrow$时期

小结
  • 描述软件系统的三个维度:

    • 按阶段划分:构建时和运行时
    • 按动态划分:时刻和时期
    • 按级别划分:代码和组件
  • 元素、关系以及每个视图的模型

  • 软件构造:视图转换:

    $\empty \Rightarrow$代码、代码$\Rightarrow$组件、构建时$\Rightarrow$运行时、时刻$\Rightarrow$时期

质量目标

大纲
  • 软件系统的质量目标
    • 外部和内部因素
    • 重要的外部质量因素
    • 质量因素之间的权衡
  • 五大质量目标
    • 易于理解
    • 随时准备变更:可维护性和适应性
    • 开发成本低
    • 安全性:健壮性
    • 高效运行:性能
质量特征

外部和内部质量因素

1)外部质量因素
  • 正确性:正确是首要品质

  • 健壮性:软件系统对异常情况作出适当反应的能力(判断异常取决于程序的规格说明)

  • 可扩展性:易于调整以适应变化(同规模相关,越大越难以扩展)
    • 简单的体系结构总是比复杂的体系更容易适 应变化。
    • 模块自治性越强,变化时对其余模块影响越小
  • 复用性
  • 兼容性:标准化是解决兼容性问题的关键
  • 效率:可移植性:指便于将软件产品转移到各种硬件和软件环境
  • 易用性:包括安装、运行和监控的容易度
  • 功能
  • 时态性
  • 可验证性、完整性(软件系统保护其各组件(程序和数据)免受未经授权的访问和修改的能力)、可修行、经济性(同及时向相伴)
2)内部质量因素
  • 源代码相关的因素如行代码,圈复杂度(用来衡量一个模块判定结构的复杂程度),,
  • 设计中追求高内聚和低耦合
  • 可读性、可理解性和清晰度、复杂性、大小
  • 内部质量因素常作为外部质量因素的部分度量
3)质量属性之间的权衡
  • 重要的四个属性:

    • 正确性和健壮性:可靠性

    ​ 系统的软件构造方法、形式化的软件规格说明、在开发过程中自动检查、更好的语言机制、一致性检查工具

    • 可扩展性和复用性:模块化
五大质量目标
  • 优雅漂亮的代码:易于理解

  • 设计与重用:开发成本低

  • 复杂性低:易于改变和扩展

  • 健壮性和正确性

  • 性能和效率

如有错误,还请多多指教~