软件构造中的三维视图
(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 关注的是系统的使用情况,使用日志查看
2.软件构造的质量指标
外部质量因素
External 1: Correctness(正确性),正确就是满足spec,这是软件开发最重要的因素,一个可用的软件一定是正确的,所以首要保证软件的正确性,其他的都可以做妥协、让步,但只有这一项不可妥协。
External 2: Robustness(鲁棒性),通过抛出异常然后处理异常等方式让出错的程序恢复到正常的执行流程上。
External 3: Extendibility(易扩展性),要便于软件功能的增加/扩展(ADT、OOP、留下一个Visitor),降低未来修改软件时的成本。
External 4: Reusability(复用性),在异性之间尽可能地寻找共性,以便于未来可以直接使用现在写的这段代码。这样可以降低软件地开发成本。
External 5: Compatibility(兼容性),在不同的环境下都是可用的,不同的软件系统之间相互可容易的集成。
External 6: Efficiency(效率),不要过早的优化,性能在没有正确性保障的条件下是没有意义的。
External 7: Portability(可移植性),软件可方便的在不同的技术环境之间移植。
External 8: Ease of use(易用性),学习成本低,结构简单、清晰,易于使用。
External 9: Functionality(功能性),功能过多会导致易用性的降低。主要功能要首要提升质量。
External 10: Timeliness(时效性),软件要能够在交付时间之前完成开发交给使用者。
External 10++: Other qualities,Verifiability (可验证性),Integrity (完整性),Repairability (可修复性),Economy (经济性)。
内部质量因素
代码行数(LOC)、圈复杂度、结构:高内聚低耦合、可读性、可理解性、整洁度、大小
折中、妥协
Integrity vs. ease of use、Economy vs. functionality、Efficiency vs. portability、Efficiency vs. reusability、Economy vs. reusability、Timeliness vs. extendibility
这些质量属性之间往往不能兼得,当某一项满足的足够好的时候有可能其他项的表现极差,因而需要做权衡,使得各部分的表现都较好,在某些特定要求下也可以放弃优化其他项而做到某一项的极致,这需要靠开发者的经验积累来判断。
正确性是绝不能与其他质量因素折中的!!!
在OOP开发中,通过封装、模块化、组件、抽象、分散、错误处理、信息隐藏、框架、接口等技术来尽可能地满足上述地质量因素,提高软件的开发质量。