第一章 软件构造的多维度视图和质量目标
软件的质量标准分为内部质量因素和外部质量因素
外部质量因素课程主要关注
Correctness and robustness: reliability
Extendibility and reusability: modularity
内部质量因素体现在代码层面
正确性是最重要的且不能折中
软件构造的五个关键质量目标
1.easy to understand
2.cheap for develop 对应可复用性
3.ready for changes, easy to extend 对应可维护性
4.safe from bug 对应健壮性和正确性
5.efficient to run
软件构造:视图之间的转换
第二章 软件测试与测试优先的编程
本章主要介绍了软件测试及其分类,并给出实例便于更好的理解
主要内容是 JUnit进行自动化单元测试和测试方法中的黑盒测试
测试及其分类
一个好的测试应该是能发现错误,不冗余,多种测试方案中最好的,别太复杂也别太简单的
回归测试:一旦程序被修改,重新执行之前的所有测试
1.功能测试层级 可理解为面向哪一层级测试
单元测试 按照程序的模块单元进行测试 (验证特定代码部分功能的测试)
集成测试 创建的两个或多个类、包、组件、子系统的组合执行
系统测试 最终执行时的测试
验收测试 用户实际使用测试
2.功能测试方法分类
静态 or 动态
黑盒 or 白盒
黑盒:不考虑程序内部的逻辑结构和内部特性,对程序外部表现出来的行为的测试
······
测试:发现是否存在错误
调试:识别错误根源,消除错误
测试用例:输入+执行条件+期望结果
测试优先的编程 在编写代码之前编写测试
1.测试优先有助于更好地理解规约
2.先写测试会节省大量的调试时间
3.先于编码之前写测试用例并不会产生额外的时间
黑盒测试
:用于检查代码的功能,不关心内部实现细节
1.基于等价类划分的测试:将被测函数的输入域划分为等价类,从等价类中导出测试用例
针对每个输入数据需要满足的约束条件,划分等价类
划分出的等价类应该覆盖输入域
2.边界值分析方法 是对等价类划分方法的补充
大量的错误发生在输入域的“边界”而非中央
白盒测试 黑盒测试完全从函数spec导出测试用例,不考虑函数内部实现
白盒测试要考虑内部实现细节
代码覆盖度
已有的测试用例有多大程度覆盖了被测程序
函数覆盖 语句覆盖 分支覆盖 条件覆盖 路径覆盖
测试效果:路径覆盖>分支覆盖>语句覆盖
测试难度:路径覆盖>分支覆盖>语句覆盖
一般考虑 分支覆盖和语句覆盖就可以
测试策略(根据什么来选择测试用例)非常重要,需要在程序中显式记录下来
第三章 软件构造过程与配置管理
本章主要讲了软件构造的过程和软件构造过程的模型,包括传统模型和目前较为常见的敏捷开发
构造过程可分为线性过程和迭代过程两种
线性过程的例如瀑布模型,增量模型等
迭代:开发出来之后由用户试用/评审,发现问题反馈给
开发者,开发者修改原有的实现,继续交给用户评审
敏捷开发:通过快速迭代和小规模的持续改进,以快速适应变化。
Agile = 增量 + 迭代 每次迭代处理一个小规模增量
软件配置管理 (SCM) 和版本控制系统 (VCS)
软件配置管理:追踪和控制软件的变化
核心:版本控制和基线的确立
软件配置项:软件中发生变化的基本单元(例如:文件)
基线:软件持续变化过程中的“稳定时刻”(例如:对外发布的版本)
Git 分布式版本控制系统