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;)。
结果如下所示:
突变得分
未杀死变种人
杀死变种人
通过以下测试
我正在用 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;)。
结果如下所示:
突变得分
未杀死变种人
杀死变种人
通过以下测试