软件构造 2ol9
一章
软件构造的多维度视图
- Code-level 代码的逻辑组织
- Component-level 代码的物理组织
- Moment view 指特定时刻的软件形态;
- Period view 指软件形态随时间的变化
动态链接:
库文件不会在build阶段被加入可执行软件,仅仅做出标记
程序运行时,根据标记装载库至内存
发布软件时,将程序所依赖的所有动态库都复制给用户
1.不用重新创建可执行文件,就可以把依赖库更新到更新的版本
2.操作系统可以优化内存使用,只将库的一个副本加载到内存中,然后与其他需要相同库的程序共享它
Snapshot diagram(
代码快照图:描述程序运行时内存里变量层面的状态
软件构造的质量指标
软件系统的质量指标包括:外部质量因素和内部质量因素。
外部质量因素:使用是否简易,速度性能是否优秀等,其影响到
的是用户。而内部质量因素影响到的是软件本身和开发者。
外部质量因素的种类:
(1) 正确性(correctness)。
关注有关软件是否按照预先定义 的“规约”执行。是至高无上的质量指标。
a. 在软件系统中进行分层,每一层都保证自己的正确性,同时假
设其下层是正确的。其与可复用性密切关联。
b. 测试和调试,发现不正确,消除不正确。这与健壮性密切关联
c. 防御性编程,在写程序时就确保正确性。其与健壮性相关。
d. 形式化方法:通过形式化验证发现问题。可通过形式语言
(2) 健壮性(Robustness)。针对异常情况进行处理。
-健壮性是对正确性的补充:正确性要求软件的行为要严格地符合
规约中定义的行为。而健壮性要求在出现规约定义之外情形的时
候,软件要做出恰当的反应。
在程序出现异常时,健壮性要保证程序不“崩溃”。
这就关系到后续学习的异常处理机制。
健壮性所言的“正常”与“不正常”是主观的而非客观的。
- 未被规约覆盖的情况即为“异常情况”
(3) 可扩展性(Extendibility)。
关注的是:对软件的规约进行修改,是否足够容易。
软件系统的规模越大,扩展起来越不容易。当传统的方法不足以
解决新的,变化的问题时,就要考虑对其进行扩展。
增强可扩展性的两个原则:
a. 简约主义设计(Design simplicity)。
b. 分离主义设计(Decentralization)。
(4) 可复用性(Reusability)关注的是:
关注的是:软件内容一次开发,多次使用,而适用于不同应用的能力。要从不同软件系统中发
现共性,提取共性。
(5) 兼容性(Compatibility)。
关注的是:不同软件系统之间的相互可容易的集成。一个软件系统的开发不可能实在真空中进行
的,其与其他系统一定存在交互和关联。
要保证兼容性,就要保持设计的同构性,即要进行标准化:
a. 标准化文件格式。
b. 标准化数据结构。
c. 标准化用户交互。