一、软件构造中的三维视图
如上所示的三维度八视图是软件构造过程中的重要概念,它从时刻和时段,编译和运行,代码和构件三个软件编码的不同维度进行分析,探讨划分了其中八个视图的作用和意义。实际上软件构造的过程也就是这八个视图不断转化的过程。
(1) Build-time, moment, and code-level view 关注的是源码的组织情况,可在词汇(源码)、语法(抽象语法树)、语义(类图)三个层面分别分析。
(2) Build-time, period, and code-level view 关注的是代码的变化(Code churn代码变化)
(3) Build-time, moment, and component-level view 关注的是包/库,而且是静态链接库
(4) Build-time, period, and component-level view 关注代码的更迭,与(2)中不同的是,这个维度下更关注文件版本的变化,而不是具体语句的变化(2中关注的是哪一行代码被修改了)----VCS的引出
(5) Run-time, moment, and code-level view 关注的是程序在某个时间点内存中的情况,如代码快照图(Code Snapshot)、内存信息转储(Memory dump)。
(6) Run-time, period and code-level view 关注的是代码的执行情况,执行跟踪
(7) Run-time, moment, and component-level view 关注的也是包/库,但却是在代码执行过程中的情况,如动态链接库
(8) Run-time, period, and component-level view 关注的是系统的使用情况,使用日志查看
二、软件系统的质量指标
1. 软件系统的质量指标包括:外部质量因素和内部质量因素。外部质量因素:使用是否简易,速度性能是否优秀等,其影响到的是用户。而内部质量因素影响到的是软件本身和开发者。虽然在结果上看,只有外部质量因素重要,但外部质量因素是取决于内部质量的。
2. 外部质量因素的种类:
(1) 正确性(correctness)。关注有关软件是否按照预先定义的“规约”执行。是至高无上的质量指标。
确保正确性的方法:
a. 在软件系统中进行分层,每一层都保证自己的正确性,同时假设其下层是正确的。其与可复用性密切关联。
b. 测试和调试,发现不正确,消除不正确。这与健壮性密切关联
c. 防御性编程,在写程序时就确保正确性。其与健壮性相关。
d. 形式化方法:通过形式化验证发现问题。可通过形式语言(研究生课程)来保证这一点。
(2) 健壮性(Robustness)针对异常情况进行处理。-健壮性是对正确性的补充:正确性要求软件的行为要严格地符合规约中定义的行为。而健壮性要求在出现规约定义之外情形的时候,软件要做出恰当的反应。在程序出现异常时,健壮性要保证程序不“崩溃”。 这就关系到后续学习的异常处理机制。健壮性所言的“正常”与“不正常”是主观的而非客观的。 未被规约覆盖的情况即为“异常情况” - 所谓的"异常",取决于spec的范畴
(3) 可扩展性(Extendibility)。关注的是:对软件的规约进行修改,是否足够容易。软件系统的规模越大,扩展起来越不容易。当传统的方法不足以解决新的,变化的问题时,就要考虑对其进行扩展。增强可扩展性的两个原则:
a. 简约主义设计(Design simplicity)。
b. 分离主义设计(Decentralization)。
(4) 可复用性(Reusability)。关注的是:软件内容一次开发,多次使用,而适用于不同应用的能力。要从不同软件系统中发现共性,提取共性。
(5) 兼容性(Compatibility)。关注的是:不同软件系统之间的相互可容易的集成。一个软件系统的开发不可能实在真空中进行的,其与其他系统一定存在交互和关联。要保证兼容性,就要保持设计的同构性,即要进行标准化:
a. 标准化文件格式。
b. 标准化数据结构。
c. 标准化用户交互。
(6) 性能(Efficiency)。例如:软件系统占用的时间,空间(例如内部与外部存储,以及设备之间交流的带宽)。这些都可以度量软件系统的性能指标。
三、总结
软件系统的质量属性:
内部、外部质量因素
重要的外部质量因素
质量因素间的折中
软件构造的五个关键目标:易于理解、易于改变、开发成本低、避免BUG、高效运行