软件构造的多维度视图和质量目标

三个维度

Build-Time和Run-Time

Moment、Period

Code-Level,Component-Level

软件系统的质量属性

外部质量属性:

正确性:最重要的质量指标。假设软件系统被分为很多层,每一层都保证自己的正确性,同时假设其下层是正确的。可以通过测试和调试、防御式编程、形式化方法来保证正确性。

健壮性:主要是指软件能够应对规约以外的特殊情况,不会出现崩溃。这种异常情况是主观的而非客观的,也有可能随着规约范围的变大而成为正常情况。

可扩展性:越大的软件越难扩展,但是为了对应不断变化的情况,软件需要可扩展。可以通过简约主义设计、分离主义设计来保证可扩展性。

可复用性:一次开发,多次使用。

兼容性:指不同软件系统之间相互可以容易的集成。核心在于保持设计的同构性,可以规范化文件格式、数据结构以及用户接口。

性能:一个软件只有在保证正确性的情况下追求高性能才有意义。过度的优化性能可能破快可扩展性和可复用性。

可移植性:软件可以在不同的技术环境之间移植。

易用性:对于用户来说,安装、操作、监控是容易的。

功能性:指软件系统提供的可用范围。但是不要为了一昧的追求新特性而忽视了其它更重要的质量属性。

及时性:即使更新迭代软件的新版本。

可验证性:软件的正确性可以得到验证。

完整性:软件保护自己运行过程中不被非法操作影响。

内部质量属性:

内聚度、代码的可读性、代码的可理解性、耦合度

测试按照规模可以分为单元测试、集成测试、系统测试、验收测试

还有静态测试、动态测试、回归测试、黑盒测试、白盒测试。

测试优先编程:先写规约,再写满足规约的测试代码,最后再编写代码。

黑盒测试:用于检查代码功能,不关心内部实现。主要是检查程序是否符合规约。

白盒测试:需要考虑内部实现。需要对代码的各个部分进行测试。

测试用例选择策略

划分等价类+边界数据

笛卡尔积全覆盖或覆盖每个取值至少一次

瀑布模型:线性推进、阶段划分清楚、整体推进、无迭代、管理简单、无法适应变需求增加/变化

增量过程:线性推进、增量式(多个瀑布的串行)、无迭代、比较容易适应需求的增加。

V字模型:确认与验证、是瀑布模型的扩展。

Prototyping 原型过程(迭代的):开发早期原型,持续不断的迭代直到满足用户需求,时间代价高,但开发质量也高。

Spiral螺旋模型(迭代的):多轮迭代基本遵循瀑布模式、每轮迭代都有明确的目标,遵循“原型”过程,进行严格的风险分析,方可进入下一轮迭代

敏捷开发:通过快速迭代和小规模的持续改进,以快速适应变化。每次迭代处理一个小规模增量,拥有极限的用户参与、极限的小步骤迭代、极限的确认/验证。如果说瀑布模式是鲸吞,那么敏捷开发则是蚕食。