上QQ阅读APP看书,第一时间看更新
1.2.1 按测试对象的颗粒度划分
软件系统日趋复杂,但是再复杂的软件也是由小的组件组合而成的,只有在确保小颗粒度的“零件”能正常工作的前提下,验证更大颗粒度的“整体”才有意义。
按被测试对象的颗粒度划分,测试可以大致分为三种类型:
·单元测试(Unit Testing)。
·集成测试(Integration Testing)。
·系统测试(System Testing)。
单元测试的颗粒度最小,它针对最小可测单元(通常是单个函数或者单个类)来验证代码逻辑的正确性,通常由开发工程师完成,也有一些团队中由测试工程师完成或者由工程团队合作完成。
单元测试只专注于模块单元,不关注单元之间的交互。对于单元测试,通用的测试框架通常就足够应对,工程团队一般不会针对单元测试去单独开发业务测试框架。
集成测试的颗粒度比单元测试更大,它一般针对已经通过单元测试的模块,验证它们之间的交互,确保这些单元模块可以正确地协同工作。
集成测试比较灵活,它的颗粒度可以根据项目需要做相应的设计,可大可小,可以针对少数几个紧密相关的单元模块,也可以针对一个子系统中涉及的所有模块。如果把这些模块看作一个整体的话,它有自己的“边界”,在这个边界上,它需要一些来源产生它所需要的输入,然后生成相应的输出。我们需要模拟(mock)实际系统的输入,才能在不依赖外部系统的情况下进行相对独立的集成测试,让软件模块的开发和测试得以并行进行。我们需要尽力保证模拟输入的有效性,否则集成测试就没有意义。
系统测试的颗粒度最大,它是在集成测试完成之后,测试人员模拟用户实际使用场景对软件的整体功能进行测试。在系统测试中,所有相关的功能模块都已经就位,我们可以验证软件系统是否达到了设计预期。
系统测试是从用户的角度去测试,它关注的是软件整体功能是否和设计预期相符,不关注软件的内部实现。