目录
1、软件构造中的多维视图:
(1)先要搞清楚:软件构造的对象是什么、如何刻画如何再关注:如何构造
(2)除了要搞清楚“要构造的结果是什么”,还要理解清楚“构造的结果如何才算好”
- 按阶段划分:构造时/运行时视图
- 区别在于表现的是某一时刻的软件形态,还是一段时间内的软件形态
- 按动态性划分:时刻/阶段视图
- 分别关注静态和动态时程序的表现
- 按构造对象的层次划分:代码/构件视图
- 分别从语句和整体的层面来关注程序的表现
2、视图之间的联系:
3、软件系统的质量属性:
1.外部质量与内部质量
- 外部质量因素影响用户
- 内部质量因素影响软件本身和它的开发者
- 外部质量取决于内部质量
2.外部质量因素
- 正确性(Correctness):至高无上的质量指标,按照预先定义的“规约”执行。一个可用的软件一定是正确的,所以首要保证软件的正确性,其他的都可以做妥协、让步,但只有这一项不可妥协。
- 健壮性(Robustness):是对正确性的补充,即在出现“规约”定义之外的情形的时候,软件要做出恰当的反应,通俗地说就是出现异常时不要“崩溃”。但软件的“正常”与“异常”是主观而非客观的,所谓的“异常”,取决于spec的范畴,那些未被“规约”覆盖的情况即为“异常情况”。
- 可扩展性(Extendibility):进行扩展使得程序能够应对变化。简约设计主义与分离设计主义
- 可复用性(Reusability):一次开发进行多次使用,容易发现程序的共性。
- 兼容性(Compatibility):在不同的环境下都是可用的,容易集成设计开发
- 效率(Efficiency):不要过早的优化,性能在没有正确性保障的条件下是没有意义的。“过早优化是万恶之源!”
- 可移植性(Portability):软件可方便的在不同的技术环境之间移植
- 易用性(Easy of use):学习成本低,结构简单、清晰,易于使用。
- 功能性(Functionality):功能过多会导致易用性的降低。主要功能要首要提升质量。
- 还有及时性(Timeliness)、可验证性(Verifiability)、完整性(Integrity)、可修复性(Repairability)、经济性(Economy)
3.内部质量因素:
- 代码行数(LOC)、圈复杂度、结构:高内聚低耦合、可读性、可理解性、整洁度、大小
4.折中原理:
- 正确的软件开发过程中,开发者应该将不同质量因素之间如何做出折中的设计决策和标准明确的写下来;
- 当某一项满足的足够好的时候有可能其他项的表现极差,此时需要做权衡,使得各部分的表现都较好,在某些特定要求下也可以放弃优化其他项而做到某一项的极致;
- 虽然需要折中,但“正确性”绝不能与其他质量因素折中。
- 最重要的几个质量因素:
- 正确性和健壮性:可靠性
- 可扩展性和可重用性:模块化
5.五个关键的质量指标:
- Elegant and beautiful code:代码要容易理解,通过统一变量/方法的命名标准、代码的风格、注释、包组织结构、必要时重构代码等方式让代码尽可能的容易理解。
- Design for/with reuse:ADT/OOP、接口、继承(Overload、Override)、多态、泛型、框架等技术可用于提高代码的可复用性。
- Low complexity:当复杂度较低的时候,代码就容易被扩展新的功能,所以要高内聚低耦合,遵从SOLID原则、OO设计模式、使用VCS控制代码版本
- Robustness and correctness:使用测试驱动的开发、异常处理、Assertion机制、防御式编程等技术保证程序的健壮性和正确性。
- Performance and efficiency:使用设计模式、并行/多线程等技术提升性能。