假设您有一个相当大的代码基(0.5mslc)和一个大型测试套件(6-7小时单线程运行时;使用不同的工具构建的单元测试和集成测试的组合)。您有一个用于代码基的建议修补程序(或diff或拉出请求),并且您希望自动运行最相关的测试。运行所有的测试都太昂贵了。做烟味测试太肤浅了。目标是找些中间的东西。通过自动选择相关测试,您可以帮助新开发人员参与TDD -并提供及时的合并前反馈(作为代码评审的一部分)。
你会用什么技术或安排来识别“相关”?(基本示例:如果修补程序修改了"src/(.*).php",则运行"phpunit test/{$1}Test.php“)。如果有的话,会想到什么现有的工具?或者需要什么新的工具?还是工具不可能提供帮助?
(对于上下文:在我的特定用例中,我使用基于LAMP的web应用程序,所以使用PHP/JS/bash的工具或技术最有用。但是,类似的问题可能会出现在任何大型应用程序/深度堆栈中,因此其他堆栈的示例可以提供洞察力。)
发布于 2014-07-17 23:57:23
有一些静态分析工具可以帮助确定“测试影响”,然后这些工具可以运行受影响的测试。
但我不禁觉得你在解决症状,而不是问题。当我在QA工作时,有一个最重要的口号帮助我成为一个开发人员:“不要信任开发人员”。即使我能确定“相关”,我也不会相信自己是正确的。我的意思是,我可以确定我的代码已经完成并且正确,为什么我需要整个测试练习?
如果你的测试太贵,那就让它们更便宜。从我使用单线程单元测试框架到现在已经有十年了。500 unit应该(慷慨地)花费5-10分钟来运行单元测试。运行单元测试,捕捉大部分问题,并为您提供足够的确定性来签入代码。
集成测试可能需要更长的时间,这取决于您的域。他们不应该花太长的时间,你不能运行他们一夜之间。在签入测试和集成测试捕获bug之间有一天的延迟时间对于大多数环境来说都足够好,尽管我仍然鼓励您使集成测试更快--或者将它们隔离到特定的集成点,消除只重复单元测试的集成点,或者将它们分发到测试场。
质量很贵。在质量上吝啬,你就能得到你所付出的。
发布于 2014-07-17 23:48:20
如果单元测试需要6-7个小时才能运行,那么就有问题了。他们最多只需要几分钟。请注意,我说应该-我知道这在现实中是多么困难。也许是时候开始模拟对象了,这样您就不会依赖于文件系统或DB或其他减慢速度的东西了。
你不想去想出哪些测试是相关的,哪些测试应该一直运行--你最终会花时间去做,而不是真正做一些重要的事情,比如完成一些事情。
发布于 2018-07-20 14:19:40
回归测试选择是您正在寻找的术语。我最近也开始考虑这个问题了。应用增量编译的原则,您可以确定哪些测试需要运行。
通过使用已经为代码覆盖率创建的算法,您可以为套件中的每个给定测试创建一个依赖文件列表。然后,通过使用版本控制(或每个文件的内容散列列表),您可以检测哪些文件已经更改,然后在您创建的依赖关系图中查找要运行的测试。
这显然存在问题,比如您的测试跨越多个不同的服务,这使得代码覆盖更加困难。
我刚刚在reddit上发布了一个关于这个话题的问题。查看它,这里
https://softwareengineering.stackexchange.com/questions/250302
复制相似问题