暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
CMuJava__一个面向Java程序并发变异体生成系统-孙昌爱,耿宁,代贺鹏,顾友达.pdf
422
13页
0次
2022-05-19
免费下载
软件学报 ISSN 1000-9825, CODEN RUXUEW E-mail: jos@iscas.ac.cn
Journal of Software, 2022,33(2):397409 [doi: 10.13328/j.cnki.jos.006137] http://www.jos.org.cn
©中国科学院软件研究所版权所有. Tel: +86-10-62562563
CMuJava: 一个面向 Java 程序并发变异体生成系统
孙昌爱
1,2
,
1
,
代贺鹏
1
,
顾友达
1
1
(北京科技大学 计算机与通信工程学院, 北京 100083)
2
(计算机科学国家重点实验室(国科学院 软件研究所), 北京 100190)
通信作者: 孙昌爱, E-mail: casun@ustb.edu.cn
: 并发程序由多个共享存储空间并发执行的流程组成. 由于流程之间执行次序的不确定性, 使得并发软件
系统的测试比较困难. 变异测试是一种基于故障的软件测试技术, 广泛用于评估测试用例集的充分性和测试技术
的有效性. 将变异测试应用于并发程序的一个关键问题是, 如何高效地生成大量的模拟并发故障的变异体集合.
给出了一种并发程序的变异测试框架, 研制了一个并发变异体自动生成工具 CMuJava. 采用经验研究的方式评估
CMuJava 生成的变异体集合的正确性与充分性, 并且评估了变异体生成的效率. 实验结果表明: CMuJava 能够
准确充分地生成并发变异体集合, 极大地提高了手工变异体生成的效率.
关键词: 并发程序; 变异测试; 并发变异算子; 并发变异体; 测试工具
中图法分类号: TP311
中文引用格式: 孙昌爱, 耿宁, 代贺鹏, 顾友达. CMuJ ava: 一个面向 Java 程序并发变异体生成系统. 软件学报, 2022, 33(2):
397–409. http://www.jos.org.cn/1000-9825/6137.ht m
英文引用格式: Sun CA, Geng N, Dai HP, Gu YD. CMuJava: Concurrent Mutant Generation System for Java. Ruan Jian Xue Bao/
Journal of Software, 2022, 33(2): 397409 (in Chinese). http://www.jos.org.cn/1000-9825/6137.htm
CMuJava: Concurrent Mutant Generation System for Java
SUN Chang-Ai
1,2
, GENG Ning
1
, DAI He-Peng
1
, GU You-Da
1
1
(School of Computer and Communication Engineering, University of Science and Technolog y Beijing, Beijing 100083, China)
2
(State Key Laboratory of Co mputer S cience (Institut e of Software, Chinese Academy of S ciences), Beijing 100190, Chin a)
Abstra ct : Con current programs are composed of multiple concurrent execution flo ws, which usually share storage space in an explicit or
implicit manner. Uncertainty in the execution order of flows poses challenges for concurrent program testing. Mutation testing is a
fault-based testing technique that is widely adopted to evaluate the adequacy of test suites and th e effectiveness of test techniques. A key
issue to applying mutation testing to concurrent programs is how to efficiently derive a large number of mutants that simulate possible
concurrency-specific faults. This study proposes a mutation testing framework for concurrent programs and presents an automated
concurrent mutant generation system called CMuJava. An empirical study is conducted to evaluate the correctness and adequacy of mut ant
sets generated by CMuJava and the mutant generation efficiency of CMuJava. The experimental results show that CMuJava can not only
generate correct and adequate mutants, but also significantly improve the efficiency of manual mutant generation.
Key words: concurrent programs; mutation testing; concurrent mutation operators; concurrent mutants; testing tools
随着多核计算的日益普及, 并发程序引起了人们的广泛关注. 并发程序包含多个执行次序不确定的并发
执行的流程, 这些流程之间显式或隐式地共享存储空间
[1]
. 这些并发流程的执行次序不确定情形称为执行交
. 执行交错使得完全相同的输入的输出结果可能不相同, 从而导致并发程序的故障难以重现. 如何有效地
基金项目: 国家自然科学基金(61872039); 中国科学院软件研究所计算机科学国家重点实验室开放课题(SYSKF1803); 中央
高校基本科研业务费专项资金(FRF-GF-19-019B)
收稿时间: 2019-10-12; 修改时间: 2019-12-22; 采用时间: 2020-01-19
398
软件学报 2022 年第 33 卷第 2
检测并发程序中潜藏的故障, 提高并发程序的可靠性, 是软件测试领域的一个难题.
变异测试
[2]
是一种基于故障的软件测试技术. 针对给定的待测程序, 通过应用变异算子来生成模拟故障
的变异体, 然后采用测试用例检测这些变异体, 杀死的变异体的数量与所有非等价变异体数量的比值称为变
异得分
[3]
. 变异得分广泛用来评估测试用例集的测试充分性与测试技术的有效性. 由于存在执行交错, 并发
程序的充分性测试更加困难. 针对上述特点, 人们提出了一系列并发程序的测试技术. 例如, 锁集分析
[17]
happens-befor e
[18]
和并发变异测试
[4]
. 其中, 并发变异测试将变异测试应用到并发程序, 通过变异算子模拟并
发故障, 可以有效地提高并发程序的故障检测效率.
在实施并发变异测试时, 一个关键问题是如何生成大量模拟并发故障的并发变异体. 遗憾的是, 现有的
并发变异测试支持工具存在各种各样的局限, 例如 Para
[9]
支持 3 种并发变异算子、Comutation
[10]
不支持开源
使用. 另一方面, 众多的面向 Java 程序的变异测试工具(例如 MuJava
[5]
Javalance
[6]
Jumble
[7]
Maj or
[8]
)
尚不支持并发变异体的生成.
MuJava 是一个具有代表性的面向 Java 程序的变异测试工具
[1113]
, 但不支持并发变异体. 本文通过扩展
MuJava 设计并实现了一个并发变异体生成工具 CMuJava, 以提高并发 Java 程序的变异测试的自动化程度和
效率. 具体地,
(1) 基于 Bradbury 等人提出的并发变异算子, 运用反射、元变异、设计模式等技术开发了一个高效、
扩展的并发变异体自动生成工具 CMuJava;
(2) 以经验研究的方式评估了 CMuJava 生成并发变异体的正确性、充分性和变异体生成效率.
本文第 1 节讨论并发变异测试的基本原理. 2 节介绍研制的 CMuJava 的机理与关键技术. 3 节以经
验研究的方式评估 CMuJava 生成的并发变异体的正确性、充分性和生成效率. 4 节介绍相关研究工作.
5 节总结全文.
1 并发变异测试
在传统变异测试中, 测试人员首先应用变异算子生成变异体集
12
{, ,..., },
n
PP P

每个变异体模拟待测程
可能存在的一个故障. 对于给定的测试用例集 T, 在原始程序 P 和变异体
(1,2,...,)
i
Pi n
上执行 T 中所有的测
试用例. 如果存在某个测试用例 tT 使得 P
i
P
的输出不同, 则称变异体
i
P
杀死”; 如果不存在一个测试
用例使得 P
i
P
输出不同, 则称
i
P
P 的等价变异体. 通过公式(1)计算变异得分, 评估测试用例集 T 的充分
性和测试技术的有效性:
|(,)|
( , ) 100%
||| ()|
killed M T
MS M T
M eqv M

(1)
其中, MS(M,T)表示变异得分, |killed(M,T)|表示可杀死变异体的数量, |M|表示所有变异体的数量, |eqv(M)|表示
等价变异体的数量.
与传统变异测试不同, 并发变异测试是对程序中特有的并发机制应用变异算子生成并发变异体, 模拟并
发故障类型. 传统变异测试定义为 5 元组 E=(P,S,D,L,A)
[19]
, 其中, P 是原始程序; S 是规格说明; D 是测试用例
; L=(l
1
,l
2
,…,l
n
), l
i
(i=1,2,…,n)表示 P 中语句的位置; A=(A
1
,A
2
,…,A
n
), A
i
(i=1,2,…,n)表示位置 l
i
处可应用的变异
算子集合, |A
i
|是变异算子的数量. 通过扩展传统变异测试模型, 本文给出的并发变异的测试模型如下: E=(P,
S,D,L,C,A), 其中, P 是原始并发程序; S 是规格说明; D 是测试用例集; L=(l
1
,l
2
,…,l
n
), l
i
(i=1,2,…,n)表示 P 中语句
的位置; C=(c
1
,c
2
,…,c
n
), c
i
(i=1,2,…,n)表示 P 中并发机制的位置; A=(A
1
,A
2
,…,A
n
), A
i
(i=1,2,…,n)是位置 c
i
的可应
用的并发变异算子集合, |A
i
|是变异算子的数量.
1 描述了并发变异测试的流程, 主要步骤如下.
分析原始并发程序中所有的并发机制;
选择合适的并发变异算子, 生成并发变异体集合;
识别等价并发变异体, 并予以删除;
of 13
免费下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜