并发程序:
  并发程序是指包含多个并发执行流程的程序. 这
些执行流程可以同时执行,并在执行过程中相互通信.

变异测试:
  变异测试是一种面向缺陷的软件测试方法,变异测试
通过对被测程序注入特定类型的缺陷,评估测试数据的缺陷检测能力。

变异算子:
对被测程序进行微小改动时,依据的修改规则叫做变异算子。

第1节介绍了一些基本概念及本文研究与已有研究的不同

第2节阐述了与并发程序和变异测试技术相关的知识

第3节从变异实施、变异测试准则、测试数据生成等 3 方面,综述并发程序变异测试的研究进展

第4节讨论需要进一步研究的问题

一、引言

Jia 等 ------ 从计算开销约减、等价变异体检测、变异测试应用、实验评价,以及变异测试工具等方面,综述了变异测试的研究成果。

陈翔等 ------ 从原理分析、测试数据生成,以及回归测试等角度,对Jia等的工作进行了补充。

Offutt ------ 回顾了变异测试的发展历程,阐述了当时的研究状况,预期了未来的研究动向,从变异算子的理论研究、变异测试与软件开发过程的集成等方面,提出未来可能的研究切入点。

Madeyski 等 ------ 综述了解决等价变异体问题的研究成果。

Souza 等和 Silva 等 ------ 系统回顾了基于变异的测试数据技术和搜索方法在变异测试的应用。

Belli 等 ------ 综述了基于模型的变异测试进展,即变异测试在有向图、事件序列图,以及有限状态机和状态图的应用。

Nguyen 等 ------ 分析了变异测试在变异体数量、揭露真实缺陷,以及等价变异体等 3 个方面的局限性,讨论了高阶变异解决这些问题的优势和存在的问题。

苏等 ------ 讨论并发缺陷之间的关系,从缺陷暴露、检测和规避等方面,对已有工作进行了综述。

Bianchi 等 ------ 回顾了已有并发测试技术,并进行分类和对比,分析每种方法的优缺点。

Melo 等 ------ 从实证研究的角度,对并发程序测试的相关工作进行了总结和分类。

Pizzoleto 等 ------ 综述了降低变异测试代价的技术和标准。

Kintis 等 ------ 对比了 3 个 Java 变异测试工具MUJAVA、PIT和 MAJOR 的缺陷检测能力,使用的变异算子主要针对算术、逻辑和关系运算等,并没有针对并发特性和并发程序变异测试进行讨论。

Arora 等 ------ 从覆盖测试、基于模型的测试,以及变异测试等多个角度,综述了并发程序的研究成果。

本文 ------ 从并发程序的并发、通信,以及交互等特点出发,分别针对不同类型的并发程序,阐述变异体产生约减选择充分性准则,以及测试数据生成等方面的研究成果。

二、并发程序与变异测试

1. 并发程序

  • 分布存储
    分布存储并发程序的每个执行流程拥有独立的存储器,不存在共享存储器。
  • 共享存储
    共享存储并发程序的所有执行流程除了具有独立存储器之外,还有共享存储单元,多个执行流程基于不同的存储形式,使用一定的消息传递方式交互。

2. 变异操作

图2展示了一个典型的变异实施操作. 对P的赋值语句“a = a + 10”实施变异操作,将操作符“+ ”改变为“- ”生成变异体 P’,对应的变异算子属于算数运算符替代 AOR(Arithmetic Operator Replacement)。

变异得分 = k / (m - m’)

m: P的变异体个数, 即P’的个数

m’: 等价变异体个数

k: 测试数据集杀死的变异体数

注:

  • 等价变异体
    在所有输入下,P’与 P 的输出都相同,则称 P’为等价变异体。
  • 变异体被杀死
    使用某一测试数据运行 P 及其变异体,如果两个程序的输出结果不同, 称变异体被杀死。

3. 变异测试技术用于并发程序与串行程序不同


变异测试最早应用于串行程序。King 等针对Fortan77提出包含AOR在内的22个变异算子全面考虑了串行执行流程,如表 1 所列。

当变异测试技术用于并发程序时,主要有以下 2点与串行程序不同:

(1)适用于串行程序的变异算子体现被测程序的计算错误、逻辑错误和控制错误等,覆盖程序的串行执行流程; 并发程序变异测试除了考虑这些因素之外还要设计与并发执行相关的变异算子,以模拟多流程并发和交互缺陷;

(2)变异体被杀死的表现并发与串行不同。对于串行程序而言,使用某一测试数据运行原程序及其变异体,如果两个程序的输出结果不同, 称变异体被杀死。但是对并发而言,在同一测试数据下,原程序和变异体一次相同的运行结果并不说明该测试数据不能杀死变异体;同理,在同一测试数据下,原程序和变异体一次不同的运行结果并不说明该测试数据能够杀死变异体。

【原因】
并发程序的执行,不仅与程序输入有关,还与流程交互顺序有关. 相同的程序输入,不同的流程交互顺序可能导致不同的序输出结果. 因此,对并发程序而言,判断变异体能否被某一测试数据杀死,不再是比较变异体和原程序的输出是否相同,而是需要比较变异体和原程序的两个输出集合是否相同,这是并发程序变异测试执行代价高的关键原因。

三、并发程序变异测试

1. 变异实施

2. 变异测试充分性准则

杀死变异体的测试数据需要满足的 3 个条件:

  • 可达性
    测试数据能够到达变异出现的位置
  • 必要性
    测试数据能够使程序在变异位置的状态发生改变
  • 充分性
    意味着状态改变能导致程序输出不同

【强变异】

判断变异体能否被某一测试数据杀死需要比较变异体和原程序的两个输出集合是否相同。

【弱变异】

假设 P 由多个元素组成,对 P 的某一元素实施变异得到变异体 P’,基于某一测试数据运行 P 和 P’;如果程序 P 在该元素处的执行与 P’不同,则称该测试数据杀死变异体。

二者区别:
变异体是否被杀死的依据不再是原程序和变异体的输出是否不同,而是二者在变异元素处的中间状态是否不同。 也就是说,测试数据仅需要考虑可达性必要性,充分性不再是必须满足的条件

【固定变异测试】

介于强变异和弱变异之间的一种中间策略,适用于交互式开发环境,能够独立运行部分代码片段。与其它两种方法相比,固定变异测试考虑程序的多个元素,而不仅仅是弱变异测试准则着重的一个元素; 可以只运行部分程序,不需要执行强变异准则要求的整个程序; 能够综合考虑被测程序和变异代码段在各阶段的运行结果。

假设对 P 的某一元素实施变异,得到变异体 P’,那么固定变异测试的核心在于,比较源程序和变异体从该元素到程序结束之间的状态

强变异和弱变异准则可以看作固定变异策略的两个特例。

变异元素处比较程序状态时,固定变异------弱变异

程序运行结束时比较源程序和变异体的运行结果,固定变异------强变异

3. 变异测试数据生成

(一) 传统方法

Carver ------ 基于多次运行产生流程交互顺序,使用输入和流程交互顺序。

Gligoric ------ 变异测试工具MuTMuT,将变异测试分为两个阶段,第一阶段执行原程序,收集相关信息; 第二阶段利用第一阶段收集的信息,减少状态搜索空间,加快寻找杀死变异体的流程交互顺序的速度。 【弊端】MuTMuT 在前期收集可用信息时,需要的计算和存储代价较大. 此外,虽然能够处理并发变异,但无法使用并发变异算子自动生成变异体。

Canizares ------ 通过对分布式环境模拟,规避分布式程序的不确定性执行,并使用随机方法生成变异测试数据。
随机测试:随机生成测试数据,验证生成的数据是否能够杀死变异体。

【总结】 虽然传统方法缓解了不确定性对并发程序变异测试的影响,降低了程序或变异体的执行代价,但并没有充分利用程序知识,无法引导性的生成有效的测试输入或线程交互顺序。

(二)基于启发式方法的变异测试数据生成

【基于搜索的方法】
Silva ------ 将 Java 程序的流程交互顺序集合编码为进化个体,使用变异得分评价进化个体的优劣,还设计了符合个体编码形式的交叉和变异操作,基于生成的流程交互顺序集合,测试数据能够达到很高的变异得分。

Cao 等 ------ 组合符号执行和进化方法生成测试数据。首先,使用符号执行方法生成弱异测试数据; 然后,使用进化方法搜索从变异点到输出点的最优路径,使生成的测试用例符合强变异测试准则。

Nilsson 等 ------ 针对实时系统的多任务并发特性,利用遗传算法生 成变异测试数据。

Ghiduk 等 ------ 使用变异得分作为适应度函数,生成杀死高阶并发变异算子的测试数据。

Palomo-Lozano 等 ------ 使用整数线性规划,寻找具有最小执行代价的变异测试数据集。

【基于模型的方法】
Takagi 等 ------ 将并发程序建模为位置转换网,对库所变迁网实
施变异,提出了包含变异体生成、测试用例生成,以及变异分析器的测试框架。

Nilsson 等 ------ 借助模型检查器,生成变异测试数据。

四、需要进一步研究的问题

  1. 为了提高变异体产生的效率,选择部分有代表性的变异算子,从而减少变异体数量是非常有必要的。已有的方法主要面向向 Java 程序或 C /C ++ 程序. 对于其它类型的并发程序,仍缺乏相关的研究.
  2. 够利用变异分支占优度约减变异体。 沿着该思路,展开其它类型并发程序的弱变异测试研究,分析变异分支的相关性,提出弱变异测试的低代价约减策略。
  3. 克服不确定性对并发程序变异测试的影响可以采用多次运行或确定执行的方式,这增加了变异测试的代价。针对降低变异测试的代价已有一些方法,但是这些方法主要适用于串行程序。如何降低并发程序变异测试的执行代价和高效判定等价变异体。
  4. 并行技术是优化变异测试过程,改善测试效率的重要手段. 虽然有变异测试工具提供了并行化机制,以并行产生同阶变异体,但没有进一步讨论并行系统的负载均衡。 结合已有的变异测试优化技术,提出合理的负载均衡策略,以降低并发程序变异测试的执行代价。

【论文总结】并发程序变异测试研究综述_田甜,巩敦卫相关推荐

  1. 强化学习论文阅读笔记(一)——强化学习研究综述_高阳

    强化学习研究综述_高阳 目录 强化学习研究综述_高阳 一.与其他机器学习对比 二.分类 三.最优搜索型强化学习算法 四.经验强化型强化学习算法 五.部分感知 六.函数估计 七.多Agent强化学习 八 ...

  2. 【论文翻译】卷积神经网络研究综述

    论文题目:卷积神经网络研究综述 论文来源:卷积神经网络研究综述 翻译人:BDML@CQUT实验室 卷积神经网络研究综述 Review of Convolutional Neural Network 周 ...

  3. (五十二):多模态情感分析研究综述_张亚洲

    (五十二):多模态情感分析研究综述_张亚洲 Abstract 1 叙述式多模态情感分析 1. 1 静态多模态情感分析(文本与图像划分为静态文档) 1. 1. 1 基于机器学习的方法 1. 1. 2 基 ...

  4. 《拜占庭系统技术研究综述_范捷》笔记

    <拜占庭系统技术研究综述_范捷>笔记 文献信息:清华大学,期刊,2013,范捷 Abstract 分析了目前拜占庭系统的研究现状,并探讨了拜占庭系统的发展趋势 Conclusion 成果涌 ...

  5. 动态分区分配算法代码_【代码】巩敦卫等TEVC论文:基于区间相似度分析的协同动态区间多目标进化优化算法...

    分享代码:巩敦卫等TEVC论文:基于区间相似度分析的协同动态区间多目标进化优化算法. 说明:该代码基于Matlab2012a及Intlab5.5编写,对应文献:"Dunwei Gong, B ...

  6. visual studio 2019 HTML怎么自动生成代码_分享代码——巩敦卫等IST论文

    分享代码:巩敦卫等IST论文:A feedback-directed method of evolutionary test data generation for parallel programs ...

  7. 论文笔记--跨模态检索研究综述-2018

    论文信息: 期刊论文-跨媒体检索研究综述-2018-欧卫华 文末部分参考文献附有论文下载链接,并提供了本论文下载地址 转载本文请添加以下引用: 作者:lingpy 本文链接:https://blog. ...

  8. 【论文解读系列】MLLM研究综述

    A Survey on Multimodal Large Language Models 1 中国科大科技学院.认知智能国家重点实验室 2 腾讯优图实验室 MLLM目录 0. 摘要 1. 引言 2. ...

  9. 群体智能集群机器人研究综述

    阅读论文-<集群机器人研究综述_王伟嘉> 自然界中的生物群体通过个体自主决策和简单信息交互, 经过演化, 最终使整个群体宏观上涌现出自组织性.协作性.稳定性及对环境的适应性. 群体智能 ( ...

最新文章

  1. 聊聊nginx报错499问题
  2. 我国共招过多少博士?多少硕士?数据来了!
  3. UPS改造及终端流量监控系统
  4. Perl内置特殊变量
  5. 软考信息系统项目管理师_管理科学(运筹学)---软考高级之信息系统项目管理师033
  6. 关于PyQt5,在pycharm上的安装步骤及使用技巧
  7. 电脑遇到脱机状态怎么解除?
  8. Shell:运算命令和操作符
  9. 局域网下搭建项目管理服务器,如何低成本快速搭建局域网地图服务器
  10. 同网段的VLAN隔离
  11. Tomcat下载——tomcat7、tomcat8、tomcat9官网下载链接
  12. 实用主义学python百度网盘_麻瓜编程:实用主义学Python(5套全)(火评)
  13. 判断一个数是否为素数
  14. 网站木马修复网站漏洞修复方案
  15. WWW‘22 推荐系统论文之序列推荐篇
  16. 【node爬虫】通过高德接口爬取地址的经纬度
  17. 数据结构单向链表(C++)
  18. 阿里云ECS vpc网络与办公网内网互通
  19. 写给初学者:VB 中 ByRef 与 ByVal 参数传递方式的区别
  20. JavaScript笔记(狂神说)

热门文章

  1. USRP error:Expected FPGA compatibility number 38, but got 36
  2. Tray is not a constructor ——electron new Tray报错 『 踩坑记录 』
  3. 【经典布局】圣杯布局和双飞翼布局
  4. 系统找不到指定的路径。 (异常来自 HRESULT:0x80070003)
  5. 关于戴尔更新AWCC缓慢,无法更新的解决办法
  6. ResultSetMetaData 中的方法介绍
  7. Linux获得管理员权限
  8. 模拟农场 Farming Simulator 2019 for Mac
  9. pycharm终端运行manage.py没有反应
  10. Substrate 使用