吉林大学学报(工学版) ›› 2020, Vol. 50 ›› Issue (1): 262-267.doi: 10.13229/j.cnki.jdxbgxb20181246

• 计算机科学与技术 • 上一篇    

面向编译器测试的部分求值静态输入确定方法

刘磊(),瓮杰,郭德贵()   

  1. 吉林大学 计算机科学与技术学院,长春 130012
  • 收稿日期:2018-12-19 出版日期:2020-01-01 发布日期:2020-02-06
  • 通讯作者: 郭德贵 E-mail:liulei@jlu.edu.cn;guodg@jlu.edu.cn
  • 作者简介:刘磊(1960-),男,教授,博士生导师. 研究方向:软件理论与技术.E-mail:liulei@jlu.edu.cn
  • 基金资助:
    国家重点研发计划项目(2017YFB1003103)

Static input determination method in partial evaluation for compiler test

Lei LIU(),Jie WENG,De-gui GUO()   

  1. College of Computer Science and Technology, Jilin University, Changchun 130012, China
  • Received:2018-12-19 Online:2020-01-01 Published:2020-02-06
  • Contact: De-gui GUO E-mail:liulei@jlu.edu.cn;guodg@jlu.edu.cn

摘要:

在编译器测试中,基于部分求值技术的编译器测试方法在部分求值阶段时,必须由测试人员对具体的测试用例进行分析,然后手动指定程序中的一些变量作为静态输入,这种依赖人工手动指定的策略具有一定的盲目性,而且无法使测试过程自动化进行。为了解决这一问题,提出了一种基于变量依赖关系的源程序静态输入及其取值的确定方法,使基于部分求值技术的编译器测试框架的测试过程得以自动化进行,从而提高了测试效率。实验结果证明了本文方法的可行性。

关键词: 计算机软件, 编译器测试, 部分求值, 静态输入, 程序静态分析

Abstract:

The validation method based on partial evaluation is a novel and effect method to validate compilers. However, in this method the static inputs and their values are specified by hand in the partial evaluation stage, which possesses blindly and limits the framework to run automatically. This paper solves this limitation by proposing an automatic method, which is based on variable dependency, to specify the static inputs and their values. The validation framework can work automatically shipped with this method, therefore improve the efficiency of testing. Results of the experiment show that this method is applicable and effect.

Key words: computer software, compiler test, partial evaluation, static input, program static analysis

中图分类号: 

  • TP311

图1

基于部分求值技术的编译器测试框架"

图2

一个源程序"

图3

c=0时对应的剩余程序"

图4

源程序p1"

图5

源程序p1的控制流图"

图6

收敛后的ref集合"

图7

剩余程序r"

1 Regehr J, Chen Y, Cuoq P, et al. Test-case reduction for C compiler bugs[C]∥Proceedings of the 33rd ACM Sigplan Conference on Programming Language Design and Implementation, Beijing, China, 2012: 335-346.
2 Le V, Afshari M, Su Z. Compiler validation via equivalence modulo inputs[C]∥Proceedings of the 35th ACM SIGPLAN Conference on Programming Language Design and Implementation, Edinburgh, United Kingdom, 2014: 216-226.
3 Chen T Y. Metamorphic testing: a simple method for alleviating the test oracle problem[C]∥Proceedings of the 10th International Workshop on Automation of Software Test, Florence, Italy, 2015: 53-54.
4 Tao Q, Wu W, Zhao C, et al. An automatic testing approach for compiler based on metamorphic testing technique[C]∥Asia Pacific Software Engineering Conference, Sydney, 2010: 270-279.
5 郭德贵, 王冠成, 吕帅, 等. peC语言的部分求值器及在编译器测试中的应用[J]. 软件学报, 2017, 28(5): 1221-1232.
Guo De-gui,Wang Guan-cheng,Lv Shuai,et al. Partial evaluator for pec and its application to compiler validation[J]. Journal of Software, 2017, 28(5): 1221-1232.
6 Beckman L, Haraldson A, Ö Oskarsson. et al. A partial evaluator, and its use as a programming tool[J]. Artificial Intelligence, 1976, 7(4): 319-357.
7 Jones N D. An introduction to partial evaluation[J]. ACM Computing Surveys, 1996, 28(3): 480–503.
8 The Clang Team. Clang documentation: LibTooling[DB/OL].[2018-09-24]. http:∥clang.llvm.org/docs/LibTooling.html.
9 Aho A V, Lam M S, Sethi R, et al. Compilers: Principles, Techniques, and Tools[M]. 2nd ed. Boston: Addison-Wesley Longman Publishing Co., Inc., 2006.
10 Le V, Sun C, Su Z. Randomized stress-testing of link-time optimizers[C]∥Proceedings of the International Symposium on Software Testing and Analysis, Beijing, China, 2015: 327-337.
11 Sun C, Le V, Zhang Q, et al. Toward understanding compiler bugs in GCC and LLVM[C]∥Proceedings of the 25th International Symposium on Software Testing and Analysis, Washington,USA, 2016: 294‒305.
12 Cuoq P, Monate B, Pacalet A, et al. Testing static analyzers with randomly generated programs[C]∥Proceedings of the 4th International Conference on NASA Formal Methods, Norfolk, VA, USA, 2012: 120‒125.
13 Yang X, Chen Y, Eide E, et al. Finding and understanding bugs in C compilers[J]. ACM Sigplan Notices, 2011, 46(6): 283‒294.
[1] 马健, 樊建平, 刘峰, 李红辉. 面向对象软件系统演化模型[J]. 吉林大学学报(工学版), 2018, 48(2): 545-550.
[2] 罗养霞, 郭晔. 基于数据依赖特征的软件识别[J]. 吉林大学学报(工学版), 2017, 47(6): 1894-1902.
[3] 刘磊, 刘利娟, 吴新维, 张鹏. 基于ECPMR的编译器测试方法[J]. 吉林大学学报(工学版), 2017, 47(4): 1262-1267.
[4] 应欢, 王东辉, 武成岗, 王喆, 唐博文, 李建军. 适用于商用系统环境的低开销确定性重放技术[J]. 吉林大学学报(工学版), 2017, 47(1): 208-217.
[5] 李勇, 黄志球, 王勇, 房丙午. 基于多源数据的跨项目软件缺陷预测[J]. 吉林大学学报(工学版), 2016, 46(6): 2034-2041.
[6] 王念滨, 祝官文, 周连科, 王红卫. 支持高效路径查询的数据空间索引方法[J]. 吉林大学学报(工学版), 2016, 46(3): 911-916.
[7] 陈鹏飞, 田地, 杨光. 基于MVC架构的LIBS软件设计与实现[J]. 吉林大学学报(工学版), 2016, 46(1): 242-245.
[8] 康辉, 王家琦, 梅芳. 基于Pi演算的并行编程语言[J]. 吉林大学学报(工学版), 2016, 46(1): 235-241.
[9] 特日跟, 江晟, 李雄飞, 李军. 基于整数数据的文档压缩编码方案[J]. 吉林大学学报(工学版), 2016, 46(1): 228-234.
[10] 冯晓宁, 王卓, 张旭. 基于L-π演算的WSN路由协议形式化方法[J]. 吉林大学学报(工学版), 2015, 45(5): 1565-1571.
[11] 刘磊, 王燕燕, 申春, 李玉祥, 刘雷. Bellman-Ford算法性能可移植的GPU并行优化[J]. 吉林大学学报(工学版), 2015, 45(5): 1559-1564.
[12] 李明哲, 王劲林, 陈晓, 陈君. 基于网络处理器的流媒体应用架构模型(VPL)[J]. 吉林大学学报(工学版), 2015, 45(5): 1572-1580.
[13] 王克朝, 王甜甜, 苏小红, 马培军. 基于频繁闭合序列模式挖掘的学生程序雷同检测[J]. 吉林大学学报(工学版), 2015, 45(4): 1260-1265.
[14] 黄宏涛,王静,叶海智,黄少滨. 基于惰性切片的线性时态逻辑性质验证[J]. 吉林大学学报(工学版), 2015, 45(1): 245-251.
[15] 贺秦禄1, 李战怀1, 王乐晓1, 王瑞2. 云存储系统聚合带宽测试技术[J]. 吉林大学学报(工学版), 2014, 44(4): 1104-1111.
Viewed
Full text


Abstract

Cited

  Shared   
  Discussed   
No Suggested Reading articles found!