1.软件的多维度视图
1.1构建时视图
Code-level view:源码、类结构;代码变化
表示代码的逻辑组织
Component-level view:文件、目录、包、库、静态链接、测试项;配置项、版本
表示代码的物理组织
Moment view:源码、类结构;文件、目录、包、库、静态链接、测试项
表现源码和组件在特定时刻的软件形态
Period view:代码变化;配置项、版本
表现软件形态随时间的变化
1.2运行时视图
Code-level view:代码快照、内存转储;堆栈轨迹、并发线程
逻辑实体在内存中如何呈现
Component-level view:包、库、动态链接、数据库、网络、硬件;事件日志、多进程、分布式程序
物理实体在物理硬件环境中如何呈现
Moment view:代码快照、内存转储;包、库、动态链接、数据库、网络、硬件
逻辑/物理实体在内存/硬件环境中特定时刻的形态
Period view:堆栈轨迹、并发线程;事件日志、多进程、分布式程序
逻辑/物理实体在内存/硬件环境中的形态随时间的变化
1.3视图之间的转换
2.软件的质量因素
2.1外部质量因素
可被用户感知的因素,如软件速度、易用性;影响用户
1.正确性 Correctness
i. 遵守规格说明书
ii. 分层:从底层到顶层,都要正确
iii. 设法测试
2.鲁棒性 Robustness
健壮性:对异常情况做出适当反映
异常取决于规格说明,是其没有涉及的部分
3.易扩展性 Extendibility
易于调整、适应变化(软件是易变的)
改变的多少(与规模密切相关、越大越难以扩展)
Decentralization 离散化:模块自治性越强,变化时对其余模块影响越小
4.复用性 Reusability
利用已有的、复用性好的程序,开发成本少
相似的模式、利用共性
模块化
5.兼容性 Compatibility
软件元素融合
关键:标准化
6.效率 Efficiency
对硬件资源尽可能少的需求
与其他存在矛盾
7.可移植性 Portability
便于将软件产品移植到各种环境
8.易用性 Ease of use
用户:轻松掌握使用、包括安装、运行、GUI等
9.功能性
(冲突)过多新功能 --> 损失一致性(兼容性)、影响易用性
先实现主要功能、提高质量,再丰富功能
10.时效性 Timeliness
2.2内部质量因素
作为软件产品的质量,如代码可读性;影响软件本身和它的开发者
外部质量取决于内部质量。
1.LOC
lines of code
2.Cyclomatic Complexity 圈复杂度
衡量一个模块判定结构的复杂程度
3.Architecture-related factors
Coupling 耦合度 --> 低
Cohesion 内聚度 --> 高
矛盾
4.可读性
5.易理解性
6.清晰 Clearness
7.复杂度
8.大小 Size
3.软件测试
3.1测试和调试的区别
测试:发现是否存在错误
调试:识别错误根源,消除错误
3.2静态/动态
动态测试可能在程序完全编写完成前就用于测试代码的特定节