1.软件构造的多维度视图
按阶段划分:构造时/运行时视图
按动态性划分:时刻/阶段(形态)视图
按构造对象的层次划分:代码(逻辑)/构件(物理)视图
2.阶段划分、各阶段活动
时刻 |
阶段 |
|||
代码 |
构件 |
代码 |
构件 |
|
编译时 |
源代码、抽象语法树、类和接口的属性、方法 |
包、文件、静态链接、库、测试用例、编译脚本 |
代码改动 |
配置项、版本控制 |
运行时 |
代码快照、堆快照 |
包、库、动态链接、配置(加载时)、数据库、中间件、硬件 |
异常栈轨迹、多线程同步、执行跟踪(代码层面) |
事件日志、多进程、分布式进程(构件、系统层面) |
过程调用图、消息图 |
3.软件质量指标
(1)外部指标(影响用户)
①正确性
按照预先定义的“规约”执行,至高无上的质量指标。
需要在软件系统的每一层保证自己的正确性,同时假设其下层是正确的。
通过测试和调试、防御式编程、形式化方法等手段保证正确性
②健壮性
针对异常情况(取决于spec的范畴)的处理,出现异常时不要“崩溃”。
出现规约定义之外的情形的时候,软件要做出恰当的反应,是对正确性的补充。
未被specification覆盖的情况即为“异常情况”
③可扩展性
对软件的规约进行修改,是否足够容易?
两种原则:简约主义设计,分离主义设计
④可复用性
发现共性,一次开发,多 次使用
不要不断重复自己写过的东西,不要重复造轮子
⑤兼容性
不同的软件系统之间相互可容易的集成
需要保证设计的同构性:
-标准统一的文件格式
-标准统一的数据结构
-标准统一的用户接口
-标准统一的访问协议
⑥性能
性能是软件系统对硬件资源尽可能少地提出要求的能力,例如处理器时间、内部和外部存储器占用的空间、通信设备中使用的带宽。
性能毫无意义,除非有足够的正确性
对性能的关注要与其他质量属性进行折中
过度的优化导致软件不再适应变化和复用
⑦可移植性
软件可方便的在不同的技术环境(硬件、操作系统)之间移植'
⑧易用性
容易学、安装、操作、监控
给用户提供详细的指南
结构简单,了解用户。
⑨功能性
功能性是系统提供的可能性的程度。
程序设计中一种不适宜的趋 势,即软件开发者增加越来越多的功能,企图跟上竞争,其结果是程 序极为复杂、不灵活、占用过多的磁盘空间
每增加一小点功能,都确保其他质量属性 不受到损失
⑩及时性
软件系统在用户需要时或之前发布的能力。
(2)内部指标(影响软件本身和它的开发者,外部质量取决于内部质量)
源代码相关因素,如代码行数(loc)、循环复杂性等
体系结构相关因素,如耦合、内聚等
可读性
可理解性
清晰度
大小
(3)指标折中
正确的软件开发过程中,开发者应该将不同质量因素之间如何做出折中的设计决策和标准明确的写下来
虽然需要折中,但“正确性”绝不能与其他质量因素折中。
最重要的几个质量因素:正确性、健壮性(可靠),复用性、可扩展性(模块化)