c# - C# 中的变异测试工具

标签 c# visual-studio-extensions mutation-testing

<分区>

我正在用 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 或其他 super 过时的软件/框架等。

更多信息:http://visualmutator.github.io/web/

您基本上会得到如下所示的 UI:

Tests that can be runned

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

ISD (ISK) – super /基本关键字删除

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

DMC – 委托(delegate)方法变更

运算符(operator)将一种处理委托(delegate)的方法更改为另一种具有相似签名的方法。

DEH – 事件处理变更委托(delegate)方法

运算符(operator)更改调用,在错误处理中添加或删除方法。企业管理人员,

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

运算符将对类属性的调用更改为对同一类型的另一个属性的调用。电子病历 -

异常处理程序移除

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

EHC – 异常处理变更

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

EXS——异常吞噬

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

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

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

JID——成员变量初始化删除(Field Initialization Deletion)运算符删除

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

MCI——来自另一个继承类的成员调用

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

PRV - 与其他兼容类型的引用分配

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

标准运算符:

AOR——算术运算符替换

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

LOR——逻辑运算符替换

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

LCR – 逻辑连接器替换

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

ROR——关系运算符替换

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

SOR – 移位运算符替换

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

OODL——运算符删除

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

以及它左侧的内容,在另一个中它删除了操作及其右侧的内容(例如,从 y=a+b;将有以下突变体:y=a;和 y=b;) .

SSDL——语句 block 删除

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

结果如下所示:

突变得分 Mutation score

未杀死的突变体 Not killed mutant

杀死突变体 Killed mutant

通过以下测试

Killed mutant by the following

关于c# - C# 中的变异测试工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39488572/

相关文章:

c# - Visual Studio 文本编辑器扩展

visual-studio-2015 - 停止智能感知 session 过早关闭

java - 坑突变 - if ( x !=null ) return null else throw new RuntimeException

c#如何绘制折线图

c# - 检查 StreamReader 是否有可用数据的非阻塞方式

C# 转换泛型类型(如 C++ 用户定义的转换)

c# - TransactionScope 是否隐式应用直到显式完成?

editor - 使用IVSInvisibleEditor和IVSPersistDocData,但如何释放它们?

java - 我的 PITEST 无法运行。覆盖生成minion异常退出。我需要帮助来正确配置我的 pom.xml

mutation-testing - 哪些编程语言可以支持变异测试?