软件构造的多维度视图和质量目标
三个维度
Build-Time和Run-Time
Moment、Period
Code-Level,Component-Level
软件系统的质量属性
外部质量属性:
正确性:最重要的质量指标。假设软件系统被分为很多层,每一层都保证自己的正确性,同时假设其下层是正确的。可以通过测试和调试、防御式编程、形式化方法来保证正确性。
健壮性:主要是指软件能够应对规约以外的特殊情况,不会出现崩溃。这种异常情况是主观的而非客观的,也有可能随着规约范围的变大而成为正常情况。
可扩展性:越大的软件越难扩展,但是为了对应不断变化的情况,软件需要可扩展。可以通过简约主义设计、分离主义设计来保证可扩展性。
可复用性:一次开发,多次使用。
兼容性:指不同软件系统之间相互可以容易的集成。核心在于保持设计的同构性,可以规范化文件格式、数据结构以及用户接口。
性能:一个软件只有在保证正确性的情况下追求高性能才有意义。过度的优化性能可能破快可扩展性和可复用性。
可移植性:软件可以在不同的技术环境之间移植。
易用性:对于用户来说,安装、操作、监控是容易的。
功能性:指软件系统提供的可用范围。但是不要为了一昧的追求新特性而忽视了其它更重要的质量属性。
及时性:即使更新迭代软件的新版本。
可验证性:软件的正确性可以得到验证。
完整性:软件保护自己运行过程中不被非法操作影响。
内部质量属性:
内聚度、代码的可读性、代码的可理解性、耦合度
测试按照规模可以分为单元测试、集成测试、系统测试、验收测试。
还有静态测试、动态测试、回归测试、黑盒测试、白盒测试。
测试优先编程:先写规约,再写满足规约的测试代码,最后再编写代码。
黑盒测试:用于检查代码功能,不关心内部实现。主要是检查程序是否符合规约。
白盒测试:需要考虑内部实现。需要对代码的各个部分进行测试。
测试用例选择策略
划分等价类+边界数据
笛卡尔积全覆盖或覆盖每个取值至少一次
瀑布模型:线性推进、阶段划分清楚、整体推进、无迭代、管理简单、无法适应变需求增加/变化
增量过程:线性推进、增量式(多个瀑布的串行)、无迭代、比较容易适应需求的增加。
V字模型:确认与验证、是瀑布模型的扩展。
Prototyping 原型过程(迭代的):开发早期原型,持续不断的迭代直到满足用户需求,时间代价高,但开发质量也高。
Spiral螺旋模型(迭代的):多轮迭代基本遵循瀑布模式、每轮迭代都有明确的目标,遵循“原型”过程,进行严格的风险分析,方可进入下一轮迭代
敏捷开发:通过快速迭代和小规模的持续改进,以快速适应变化。每次迭代处理一个小规模增量,拥有极限的用户参与、极限的小步骤迭代、极限的确认/验证。如果说瀑布模式是鲸吞,那么敏捷开发则是蚕食。