当前位置: 首页 > 软件库 > 开发工具 > PHP开发工具 >

Infection

PHP 突变测试框架
授权协议 BSD 3.0
开发语言 PHP
所属分类 开发工具、 PHP开发工具
软件类型 开源软件
地区 不详
投 递 者 章学义
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

Infection 是一个基于 AST(抽象语法树)突变的PHP 突变 (Mutation ) 测试库。它用作 CLI 工具,可以从项目的根目录执行

突变测试是一种基于故障的测试技术,它提供了一种突变评分指标 (MSI)的测试标准。MSI 可用于衡量测试集在检测故障能力方面的有效性。Infection 提供如下测试功能:

  • 运行测试套件,以查看是否所有测试都通过
  • 使用一组预定义的变异器(变异运算符)来变异源代码
  • 对于每个突变体(经过一次更改的修改代码),Infection 会进行新的测试(覆盖已更改代码)
  • 分析测试是否失败
  • 收集被杀死、逃脱的突变体、错误和超时的结果

假设你有一个带有 hasErrors() 方法的 Form 类,

// Form.php
public function hasErrors(): bool
{
    return count($this->errors) > 0;
}

Infection 会产生以下突变体:

边界条件突变:

public function hasErrors(): bool
{
-    return count($this->errors) > 0;
+    return count($this->errors) >= 0;
}

条件协商突变

public function hasErrors(): bool
{
-    return count($this->errors) > 0;
+    return count($this->errors) < 0;
}

整数 0- 1,1 -0 突变

public function hasErrors(): bool
{
-    return count($this->errors) > 0;
+    return count($this->errors) > 1;
}

突变评分指标(MSI)

Metrics:
    Mutation Score Indicator (MSI): 47%
    Mutation Code Coverage: 67%
    Covered Code MSI: 70%

这个例子报告了一些测试分数:

突变评分指标 (MSI)

MSI 为 47%。这意味着所有生成的突变中有 47% 被检测到(即杀死、超时或致命错误)。MSI 是主要的突变测试指标。鉴于代码覆盖率为 67%,存在 20% 的差异,因此在此示例中代码覆盖率是一个糟糕的质量度量。

计算公式:

TotalDefeatedMutants = KilledCount + TimedOutCount + ErrorCount;

MSI = (TotalDefeatedMutants / TotalMutantsCount) * 100;

突变代码覆盖率

MCC 为 67%。正常来说,它应该跟正常代码的覆盖率在同一范围内。

计算公式:

TotalCoveredByTestsMutants = TotalMutantsCount - NotCoveredByTestsCount;

CoveredRate = (TotalCoveredByTestsMutants / TotalMutantsCount) * 100;

覆盖代码变异评分指标

被测试覆盖的代码的 MSI 为70%(忽略未测试的代码),这个数据展示了测试的实际效果。

计算公式:

TotalCoveredByTestsMutants = TotalMutantsCount - NotCoveredByTestsCount; 
TotalDefeatedMutants = KilledCount + TimedOutCount + ErrorCount;

CoveredCodeMSI = (TotalDefeatedMutants / TotalCoveredByTestsMutants) * 100;

 

  • 传送门:牛客 题目描述: 题目较长,此处暂略 输入: 5 2 1 5 2 3 2 4 3 2 1 5 3 1 2 2 1 1 2 1 1 3 1 2 输出: 208333335 166666668 166666668 950000007 508333337 一道树形dp的题目,官方题解说这是一道简单题?然而我感觉这道题至少比同场次比赛的那道图论题要难,赛时对于这道题完全没有思路,感觉主要是概率贡

  • A tree is a connected graph without cycles. A rooted tree has a special vertex called the root. The parent of a vertex vv (different from root) is the previous to vv vertex on the shortest path from t

  • 传送门 一开始以为跟二叉树有关 一看到就头疼 看了题解发现跟二叉树没啥关系,看了好长时间才明白 一秒内可以做俩操作: 感染一个健康的节点 传染相邻的兄弟节点 思路 sum[i]表示以i为节点的节点个数有几个,一开始去感染最多的那个群体 为什么呢?因为这样可以给这个群体更多的彼此间互相传染的时间,在他互相传染的时间里,我们去感染其他群体如果所有的群体我们都已经感染了一个,计算在这个时间内 每个群体剩

  • Codeforces Round #781 (Div. 2) Solution 注意:是先感染后注射。 贪心: 首先注射子节点最多的子树,直到注射完所有的有子节点的子树后,再注射1号根节点(其实1号根节点可以理解为还有一个子节点的子树,0是其父节点,0不需要被感染和注射)。待所有的子树中都有被感染的节点后,每次对目前子节点最多的一个注射,然后所有子树再感染一个节点。一直模拟这个过程,直到全部节点都

  • 题目大意 给定一个 n n n节点的树,并且认定 1 1 1号节点为根。初始时,所有节点都是未感染状态,而我们的任务是感染这颗树。 每一秒中,我们依次执行以下两个操作: 如果一个节点 v v v的儿子节点中,至少有一个未感染,那么我们就可以至多再感染一个 v v v的儿子节点 感染一个任意未被感染的节点 输出最少需要多长时间感染所有节点。 题目链接 思路 观察发现,在同一个点的儿子节点是相互联系的

  • Problem - C - Codeforces 题意: 有一棵树,最开始都是健康的,每次可以感染任意一个节点和将已感染的节点的同父节点下一节点传染,问最小操作数。 题解: 一开始没啥思路,后来补题才想明白的QwQ 首先将每个节点都去感染,不用传染,肯定是最劣解(有可能是唯一解)。每一个父节点下的直接子节点看作一个集合,那么问题就变成了一个数组,每次感染一个数,每次被感染的数-1,问什么时候sum

  • 题目 题意 给出一棵以1为根节点的树,每秒可以依次,进行以下两种操作 Spreading,对于每个结点,如果他有儿子结点被感染,可以感染其另一个没有被感染的儿子结点. Injection任意选择一个结点将其感染 求感染所有结点最少需要的时间 思路 我们可以二分答案mid,问题就变成了mid秒内能否感染所有结点. 首先Injection一定用于优先感染兄弟结点比较多的结点,这样可以充分利用Sprea

  • 题目链接: 点击跳转 题意: 给你一棵树,每次你可以依次进行以下操作,1.对于一个节点,如果该节点有至少一个子树被涂色(可以理解为图着色,原译不是涂色)了,那么你可以任选他的子树上的另一个节点使其被传染(可以对多个节点操作,但每个节点的子树在一次操作只能传染一次),2.任选一个节点,使其被涂色(可以选1中操作过的子树中的节点),问最少几次操作能使整棵树都被涂色。 思路: 开始想,从大的数量开始涂色

  • 论文题目:Human Gut Microbiota Predicts Susceptibility to Vibrio cholerae Infection scholar 引用:7 页数:9 发表时间:2018.04 发表刊物:The Journal of Infectious Diseases 作者:Firas S Midani, Ana A Weil,..., Lawrence A Davi

  • Ascherio, A., and Munch, M. (2000). Epstein-Barr virus and multiple sclerosis. Epidemiology 11, 220–224. Ascherio, A., Munger, K.L., Lennette, E.T., Spiegelman, D., Hernan, M.A., Olek, M.J., Hankinson

 相关资料
  • 在为我最喜欢的突变测试框架(NinjaTurtles)编写“逐个关闭”突变测试程序的过程中,我编写了以下代码,以提供检查我的实现正确性的机会: 现在,这看起来很简单,我没有想到,在尝试变异IL中的所有文本整数常量时会出现问题。毕竟,只有3个(0、1和)。 错! 很明显,在第一次运行时,它永远不会在这个特定的情况下工作。为什么?因为将代码更改为 只给和加0(零),这显然没有效果。如果是多个集合,情况

  • 测试框架工具 Karma Intern NightWatch.js

  • 如何使用智能电子和PIT测试Android应用程序? 使用Robolectic,您可以在JVM中运行Android测试。使用PIT,您可以显示行覆盖范围并进行突变测试。对我来说,使用Eclipse插件是可以的,但没有要求。 这就是我迄今为止所尝试的: 我有一个Android项目,我们称之为MyProject。 我现在想在JVM中使用Robolectic和PIT测试MyProject。因此,我创建了

  • 我现在正处于一个艰难的项目中,其中一个重要部分被重构,并通过大量失败的测试进行了检入。 我在maven中运行PIT,但由于测试必须是绿色的,所以我已经很长时间不能运行了,但我希望至少在运行的测试上有PIT概述。 将失败测试与PIT隔离的最有效方法是什么?

  • utest 简介 utest(unit test)是 RT-Thread 开发的单元测试框架。设计 utest 的初衷是方便 RT-Thread 开发者使用统一的框架接口编写测试程序,实现单元测试、覆盖测试以及集成测试的目的。 测试用例定义 测试用例(testcase,简称 tc)是为实现特定测试目标而执行的单个测试,是包括测试输入、执行条件、测试过程和预期结果的规范,是一个有明确的结束条件和明确

  • 概述 本节主要介绍可用于组织或企业进行应用测试的典型的测试框架。它可以被看作是包含技术和任务的一个参考框架,适用于软件开发生命周期(SDLC)的各个阶段。公司和项目团队可以使用这个模式,为自己或服务供应商开发测试框架和范围测试。这个框架不应该被看作是指令性的,但作为一个灵活的做法,可以延长和变形,以适应一个组织的发展进程和文化。 本节的目的是帮助组织或企业建立一个完整的战略测试过程,而不是帮助一些

  • JUnit是一个Regression Testing Framework ,开发人员使用它来实现Java中的单元测试,并加快编程速度并提高代码质量。 JUnit Framework可以轻松地与以下任何一个集成 - Eclipse Ant Maven JUnit测试框架的特性 JUnit测试框架提供以下重要功能 - Fixtures 测试套件 测试跑步者 JUnit类 Fixtures Fixtur

  • 测试启动后,结果是测试通过,但测试框架意外退出。如何解决? 试样 测试特性 输出 配置 http://maven.apache.org/xsd/maven-4.0.0.xsd"