C# 中的变异测试工具

Mutation Test tools in C#

我正在用 c# 开始一个新项目,我正在寻找一个可以帮助我进行突变测试的工具。我之前用pitest在java做过突变测试,非常喜欢。 现在我正在为 C# 寻找这样的工具,我能找到的唯一工具要么在过去几年没有更新,要么仍在 alpha/beta (cream, ninjaTurtles, Nester).

是否有可用的可靠工具,可以与 2010 年之后出现的工具一起使用?

编辑: 有人可能会说这个问题与 What mutation-testing frameworks exist? [closed] 重复。只有那个问题目前已有 8 年历史,并且那里讨论的大多数工具都无法使用,因为其中大多数在过去 6 到 8 年内没有更新。

我成功使用了以下 Visual Studio 2013 扩展:VisualMutator.Net。那是因为其他变异工具需要 Visual Studio 2005 或其他超级过时的软件/框架等。

这里有更多内容:http://visualmutator.github.io/web/

你基本上会得到一个像下面这样的 UI:

TestingExample.Tests 会发生变异。可能您已经构建了项目 Project & Project.Tests 您可以访问以下 mutans 列表:

ISD (ISK) – Super/Base 关键字删除

运算符在属于继承方法的重载方法中删除了对基础class方法的调用。

DMC – 委托方法变更

操作员将一种处理委托的方法更改为另一种具有相似签名的方法。

DEH – 为事件处理更改委派的方法

操作员更改了一个调用,在错误处理中添加或删除了一个方法。 EAM,

EMM – 访问器,修改器方法更改

操作员将 class 属性 的调用更改为另一个相同类型的 属性 的调用。电子病历 -

移除异常处理程序

如果存在另一个 catch 或 finally,则运算符移除 catch 块。

EHC – 异常处理变更

运算符将 catch 块的主体更改为抛出捕获的异常。

EXS – 异常吞咽

运算符添加空块 catch(Exception e) 以便没有异常可以离开当前方法。

JTI、JTD – This关键字插入、删除

如果存在同名的局部变量,则运算符添加或删除此关键字。

JID - 成员变量初始化删除(字段初始化删除)运算符删除

用适当的值初始化 class 的字段。

MCI – 来自另一个继承人的成员调用 Class

运算符将对对象的方法调用更改为对另一个对象调用相同的方法。

PRV - 其他兼容类型的参考分配

运算符将把某个对象分配给引用更改为分配另一个兼容对象。

标准运算符:

AOR – 算术运算符替换

运算符将算术运算(+、-、*、/、%)更改为该组中的另一个。

LOR – 逻辑运算符替换

运算符将逻辑运算(&、|、^)更改为该组中的另一个。

LCR – 逻辑连接器替换

运算符将逻辑表达式中的连接符(,||)改成另一个。

ROR – 关系运算符替换

运算符将每个关系运算符(>、<、<=、>=、==、!=)更改为同一组中的另一个。

SOR – 移位运算符替换

运算符将逻辑移位 (», «) 更改为相反的移位。

OODL – 运算符删除

运算符从每个操作创建两个突变体,例如 +、-、>、<=、% 等。在一个中它删除操作

和它左边的东西,在另一个它删除操作和它右边的东西(例如,从 y=a+b;将有以下突变体:y=a;和 y=b ;).

SSDL – 语句块删除

运算符删除语句和赋值,但不删除声明(例如从 int y=15;将有以下突变:int y;)。

结果如下所示:

突变得分

未杀死变种人

杀死变种人

通过以下测试