3

我正在研究突变测试并尝试将 Stryker 集成到我的代码库中。我的应用程序是用 React、Nodejs 编写的,目前使用 Jest 进行客户端测试,使用 Mocha 进行服务器端测试。我对此有几个问题:

  1. 以前有没有人尝试过/研究过突变测试?关于利弊,您对此有任何想法/担忧吗?

  2. 在 Stryker 框架方面,我很好奇 Stryker 是如何生成突变体的?Stryker 中是否有任何算法用于生成突变体?

任何输入将不胜感激。先感谢您。

4

2 回答 2

1
  1. 突变测试是一种以有意义的方式提高测试“覆盖率”的好工具。如果您想在自动化单元测试套件中获得更完整的回归覆盖,变异测试可以帮助您找到测试覆盖中的漏洞,这有助于发现和防止错误。但请注意:您仍然需要考虑所需的测试类型。仅仅为了杀死突变体而添加测试可能会造成破坏。通过这种方式,您的测试最终可能与您的实现过度耦合。但是,这并不会使突变测试变得糟糕,它只是意味着您必须像大多数工具一样智能地使用该工具。另一个警告是突变测试可能很慢,但由于您不必像常规测试套件那样频繁地运行突变测试,这不是一个可怕的问题。
  2. Stryker 使用特定的变异器来寻找它知道如何变异的代码。您可以在手册中找到突变器列表。如果您喜欢冒险,可以添加自己的突变器。但该算法的基本工作方式是:
    1. 将代码解析为算法可以检查的内容
    2. 寻找适合特定模板的代码
    3. 以仍应是有效语法的方式修改该代码,但以可能“错误”的方式更改行为。(最简单的例子是完全删除行为)
于 2019-10-04T17:23:41.883 回答
1

对于通用突变测试概念,我完全推荐 Pitest(Java 的 MT 实现)文档:

我前段时间也写过这个话题:https ://pedrorijo.com/blog/intro-mutation/

对于您的问题,这应该让您对现有的可能性有一个很好的了解。不确定前锋的具体细节

于 2019-10-04T16:48:57.013 回答