单元测试?整合测试?回归测试?验收测试?


98

有没有人可以清楚地定义这些测试级别,因为我发现在进行TDD或单元测试时很难区分。如果有人能详细说明如何以及何时实施这些措施?



Answers:


129

简要地:

单元测试 -对每个单独的代码段进行单元测试。考虑每个文件或类。

集成测试 -将多个相互影响的单元放在一起时,您需要进行集成测试,以确保将这些单元集成在一起不会引起任何错误。

回归测试 -集成(并可能修复)之后,您应该再次运行单元测试。这是回归测试,以确保进一步的更改不会破坏任何已测试的单元。您已经做过的单元测试已经产生了可以再次运行以进行回归测试的单元测试。

验收测试 -当用户/客户/企业接收功能时,他们(或您的测试部门)将进行验收测试,以确保功能满足其要求。

您可能还想调查白盒和黑盒测试。也有性能和负载测试,以及要考虑的“故障”测试。


仅供参考,在单元测试中,被测试的单元可以是各种大小。例如,您可以对一组类,单个方法甚至单个方法进行单元测试。来源:BlueJ第9.3节“ BlueJ中的单元测试”。
塞巴斯蒂安·尼尔森

114

单元测试:失败时,它会告诉您需要修复哪些代码。

集成测试:失败时,它会告诉您应用程序的各个部分无法按预期工作。

验收测试:失败时,它告诉您应用程序没有按照客户的期望进行操作。

回归测试:失败时,它会告诉您该应用程序不再具有以前的行为。


19

这是对上述每个测试及其适用时间的简单说明:

单元测试 单元测试是对独立单元(通常是类或方法)执行的,每当实现单元或单元更新完成时都应执行单元测试。

这意味着只要您编写了类/方法,修复了错误,更改了功能,它就可以运行。

集成测试 集成测试旨在测试多个单元之间的交互程度。只要单元之间建立了新的通信形式或者它们的交互性质发生了变化,就应该执行这种测试。

这意味着只要将最近编写的单元集成到系统的其余部分中,或者与其他系统交互的单元已被更新(并成功完成其单元测试),它就可以运行。

回归测试 只要在系统中进行了任何更改,都将执行回归测试,以检查是否引入了新的错误。

这意味着它将在所有补丁,升级,错误修复之后运行。回归测试可以看作是组合单元测试和集成测试的特例。

验收测试 只要与检查子系统(可能是整个系统)是否满足其整个规格有关,就执行验收测试。

这意味着它主要在完成新的可交付成果或宣布完成较大任务之前运行。将此作为您的最终检查,以确保在跑到客户/老板和宣布胜利之前,您已经完成了目标。

至少这是我学到的方式,尽管我确信还有其他反对意见。无论哪种方式,我都希望能有所帮助。


我不能真正区分回归测试和单元测试。我的意思是,每次更改/提交后,您仍然需要运行单元测试...并且它们可以捕获新代码引入的错误。对?
亲爱的

@Honey好,回归测试套件主要是部分或全部单元测试和集成测试的选择。这是一个政策问题,您要执行多少回归测试。主要区别在于,单元测试是在主动开发中完成的,而回归测试则更多地用于检查以前的项目在返回并修补它们时是否不会中断。
Agentlien '17

AFAIK实际上您不应该对方法进行单元测试。如果您测试类,则应该将其作为一个整体来对待,因此您将测试类的公共接口,而不是其实现细节。尽管您可以对独立功能进行单元测试,但这很好。
Qback

14

我会尽力:

  1. 单元测试:开发人员将编写一个以测试单个组件或类。
  2. 集成测试:更广泛的测试,其中涉及需要协作的多个组件或软件包
  3. 回归测试:对应用程序进行单个更改将迫使您重新运行所有测试并检查所有功能。
  4. 验收测试:最终用户或质量检查人员会在批准接受应用程序交付之前进行这些操作。它说:“该应用程序符合我的要求。”

14

单元测试:我的单一方法是否正常工作?(无依赖项,或嘲笑的依赖项)

集成测试:将我两个单独开发的模块放在一起时是否可以正常工作

回归测试:我是否通过更改/编写新代码破坏了一切?(每次提交都运行单元/集成测试是技术上(自动)回归测试)。在质量检查中更常用-手动或自动。

验收测试:由客户完成的测试,即他“接受”了已交付的软件


0

无法评论(声誉低:-|),所以...

@Andrejs很好地说明了与每种测试类型相关的环境之间的差异。

单元测试通常在开发人员机器上(可能在CI构建期间)运行,并模拟出对其他资源/系统的依赖性。

根据定义,集成测试必须(一定程度上)具有依赖项的可用性;其他资源和系统被调用,因此环境更具代表性。用于测试的数据可以是模拟的,也可以是真实生产数据的一小部分混淆的子集。

UAT /验收测试必须向接受软件的质量保证和业务团队代表真实的经验。因此,需要完整的集成和实际的数据量以及完整的掩盖/混淆的数据集,以提供真实的性能和最终用户体验。

其他“麻烦”也可能需要环境尽可能接近现实,以模拟生产经验,例如性能测试,安全性,...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.