绪论
课程目标
深入学习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)质量属性之间的权衡
重要的四个属性:
- 正确性和健壮性:可靠性
系统的软件构造方法、形式化的软件规格说明、在开发过程中自动检查、更好的语言机制、一致性检查工具
- 可扩展性和复用性:模块化
五大质量目标
- 优雅漂亮的代码:易于理解
- 设计与重用:开发成本低
- 复杂性低:易于改变和扩展
- 健壮性和正确性
- 性能和效率
如有错误,还请多多指教~