程序员的职业素养 读书笔记 - 第8章 测试策略
QA应该找不到任何错误
QA也是团队的一部分
QA和开发人员应该紧密协作,携手保障系统的质量。
QA在团队中要扮演的便是需要规约定义者(specifier)和特性描述者(characterizer)。
需求规约定义者
QA的任务便是和业务人员一起创建自动化验收测试,作为系统真正的需求规约文档。
业务人员编写针对正常路径(happy-path)的测试。
QA编写针对极端情况(corner)、边界状态(boundary)和异常路径(unhappy-path)的测试。
特性描述者
QA的另一项任务是遵循探索式测试的原则,描述系统运行中的真实情况,将之反馈给开发人员和业务人员。
自动化测试金字塔
单元测试
金字塔底部是单元测试,单元测试由程序员使用与系统开发相同的语言来编写,供程序员自己使用。
编写单元测试的目的是在最低层次上来定义系统。
组件测试
组件测试是验收测试的一种,它们是针对系统的各个组件而编写。
系统的组件封装了业务规则,对这些组件的测试便是对其中业务规则的验收测试。
组件测试由QA和业务人员编写,开发人员提供辅助。
集成测试
集成测试只对那些组件很多的较大型系统才有意义。它将组件装配成组,测试它们彼此之间是否能正常通信。
集成测试是编排性(choreography)测试。它们并不会测试业务规则,而是主要测试组件装配在一起时是否协调。
集成测试一般由系统架构师或主设计师来编写,用以确认系统架构层面的结构是事正确无误。
系统测试
系统测试是针对整个集成完毕的系统来运行的自动化测试,是最终的集成测试。
它们不会直接测试业务规则,而是测试系统是否已正确组装完毕,以及系统各个组成部件之间是否能正确交互。
包含吞吐率测试和性能测试。
人工探索式测试
需要人工介入、敲击键盘、盯牢屏幕的测试。它们既非自动化的测试,亦非脚本化的测试。
探索式测试是要确保系统在人工操作下表现良好,同时富有创造性地找出尽可能多的“古怪之处”。