关于软件测试用例生成技术相关研究总结

来源:互联网 发布:md5加密 java代码 编辑:程序博客网 时间:2024/06/07 22:47

缘起

自跟陈翔老师做软件测试中测试用例自动生成的方面的研究,已经过了一年了。在这一年里,看了很多东西,也学习了很多,最大的收获是眼界开阔了很多,从对学术研究一窍不通,到渐渐步入门中窥探了几分,虽入门不深,确受益匪浅。其中最大的决定莫过于将windows系统格了装Ubuntu,老实说,自己从来没这么霸气的用换操作系统来和过去划清界限,并没有鄙视window的意思,只是觉得Linux下更适合程序员和学术研究。

还有一个月多一点就要毕业了,想去上海找份Rails程序员的工作,在全心全意投入rails的学习前,我想将软件测试中做的工作总结一下,记录一些只言片语。

正文

1. 研究方法

关于如何做研究,我的指导老师的写的PPT很不错:科研指南

关于如何阅读论文和如何写论文,一些资料如下:

1.周志华-如何做写论文

2.如何阅读论文

3.一位研究生导师心目中理想的论文

软件测试相关的书籍:Paul AmmannJeff Offut的《Introduction to Software Testing》不错,书不厚。此外,Jeff Offut本人值得关注,此人搞了一辈子软件测试,他的Homepage:。http://cs.gmu.edu/~offutt/

研究过程遇到的一些NB的人物的主页

信息科学中Kolmogorov复杂度的相关人物:G J Chaitin Ray Solomonoff A.H. Kolmogorov 

计算复杂度的开山祖师:Stephen A. Cook Richard M. Karp 

数据挖掘的牛人:Dr. Jian Pei 

软件测试的大神(个人不完全统计):Michael Ernst Darko Marinov Jeff Offutt Willem Visser Saswat Anand Gordon Fraser Tao Xie Raul Santelices 

Prof. Eric Bodden, Ph.D. Laurie Hendren Ian H. Witten Harry Xu's Homepage  Sai Zhang's homepage 

当然,在论文An orchestrated survey of methodologies for automated software test case generation中的出现的作者都是软件测试领域的泰斗之类的人物。

关于论文检索系统,主要使用IEEE Xplore  Springer CiteSeerX JSTOR ScienceDirect(Elsevier) arXiv.org e-Print archive 以及ACM的检索系统和 中国知网 (备注:就个人的短暂的研究经验而言,google学术搜索可以应付大多数问题,无论是中文的还是英文的)

计算机科学的人物检索系统:dblp(德国某大学开发的,可以用于了解一些计算机科学与技术中NB的人物的工具,涉及论文,会议和期刊)

2. 软件测试相关

关于软件测试用例生成的研究,20132月的一篇综述:An orchestrated survey of methodologies for automated software test case generation 中介绍的相当不错,其中介绍了四种主流关于测试用例生成技术的综述:符号执行(symbolic execution),基于模型的测试(Model-based Test),组合测试,随机测试中的自适应随机测试和基于搜索的测试。当然还有其他的一些技术没有介绍,但也很有名,比如变异测试,模糊测试,混合技术测试之流的。

在这些测试其中,文献调研过自适应随机测试,花了一周看论文感觉尽是在说理论,没找到什么实际的应用的例子,或者说我没能明白关于输入空间的含义;研究符号执行了一段时间,主要是JPF及其扩展JPF-SE;对一些随机测试和系统测试混合技术也做了一些研究,这主要涉及RandoopPalusRecGen。我是在一个大学生创新项目下做关于这些研究,并将这些写成了一个技术报告,交到学院里估计也不会有人看,地址:http://pan.baidu.com/s/1eQtGJ66 (备注,好像泄露的我的真实姓名了,没错,我就是叫夏健--一个不太好听的名字)

2.1. 相关的工具

2.1.1. 探索过的工具

  • artgen:一个基于Randoop的测试用例生成工具
  • recgen:一个基于Randoop的测试用例生成工具
  • palus:一个基于Randoop的并组合动态和静态分析测试用例生成工具
  • Randoop:基于随机测试的序列生成的测试生成工具
  • jcrasher:基于随机测试的序列生成的测试生成工具
  • jpfjavapathfinder,显式模型检查工具,与软件测试用例生成相关的是它的一个扩展,jpf-se
  • mujavajeff offut开发的变异测试工具
  • emma,codecover,cobertura都是代码插桩工具
  • findbugscheckstylepmd都是代码静态检查工具。

2.1.2. 未探索的工具

写在这里的工具除了soot以外,其他的工具大概不会再去看了。

  • kieker:一个应用程序性能监视和动态软件分析框架
  • DUA-F:是一个基于SootJava程序分析和插桩工具,地址:http://www3.nd.edu/~rsanteli/duaf/
  • daikon:程序不变式检测器
  • soot:java编译器框架
  • Eclat:基于daikon的测试用例演化程序
  • tamifex:oolpsa上关于反射的研究
  • crest: c的生成用例生成程序,实现了动态和静态分析
  • jcutecutejava实现

2.2. 文档总结

总结软件测试相关文档的初步设想是,将RandoopPalus相关的资料整理翻译,将代码插桩工具做一下汇总研究,将JPFJPF-SE的资料汇总,将Directed Random Testing博士论文翻译完成。暂时能想到的就这么多,以后想到再加。

Randoop的资料主要为:Randoop Manual的翻译Randoop Developer Manual的翻译Randoop的项目灵感

Palus的资料只有User Manual,和Palus的论文翻译,由于Palus是基于Randoop的,很多都可以参考Randoop

JPF主要是安装和使用,JPFwiki实在是太长了,完善翻译的代价不菲。

Directed Random Testing博士论文实在是太长了,有点不太想翻译,虽然已经翻译了一半。

代码插桩工具调研主要涉及:EMMA, Cobetura, Codecover

如果都写成博客的话,有些不太方便,就先添加一些连接吧。

备注:以下是一些扯淡,可以跳过。

3. 真情回顾

我曾经很崇拜老师,现在依然很敬重他。老师有时在我们面前谈国内的学术研究的怪象,有时喜欢上课时讲冷笑话,偶尔挖苦一下学院里的一些老师,当做事很有条理,对学生很大方,请吃饭,报销书,指导也很用心。总的来说,他教给我很多的东西,比如:教我如何做研究,开阔了我的世界,介绍我看好书。我从他的言行举止中也学到很多,学会了从googlewikipedia中获取信息,学会了word排版,学会了vimLinux以及其他很多的东西。仔细观察比自己强的人的言行举止,从中汲取养分,带反馈的一步一步践行这些习惯,或许是个不错的学习方法。

如果,以我换操作系统为人生的分界点,老师无疑是推动其形成的关键外因。这里,我赋予这个分界点的含义不仅仅是换个软件,而是,突破原有的界限和思维方式,向新的世界迈进的。武侠小说中,高手之间的差异,往往是境界和层次的不同。当然不是给自己带名为高手帽子,只是不甘平庸,想要向着高手,向着新世界和伟大航路进发。

4. 扯淡

在研究JPF时,发现存在两个版本的JPF,一个是在sourceforge上代码库,自2006后不再更新,但用svn签出;一个是NASA软件工程实验室自建的Mercurial版本库服务器上代码库,现在依然在开发更新,并且提供的完整的在线WIkI文档。在JPF之前,我从未认真的浏览英文文档。将文档从wiki上复制到wpsdoc文档中,然后花时间认真看。由于是初次接触,花了近一周的时间来看文档以及安装使用。最后,发现Java PathFinder(简称JPF)是一个显式的模型检查器,其中用Java实现Java虚拟机(虚拟机上的虚拟机),为了研究虚拟机,特地去图书馆借了《深入Java虚拟机 第二版》(Bill Venners),觉的不错,想买的时候,发现这本书的中文版绝版了,买了一本《深入理解Java虚拟机 第二版》(周志明)代替着看,总觉得深度上不如Bill Venners的书,可能有人说我崇洋媚外,我反而觉得那些打着爱国旗号的心怀鬼胎。国人写的计算机类的书确实不如外国人,国人写书大多粗制滥造,扎堆入门级,要不就故做玄虚,看的云里雾里;要不就味同嚼蜡,摆着一副爱看不看的样子。当然,也和社会氛围有关,浮躁之风大为流行。当然,这就扯的太远的,而且包含着各种个人偏见,别介意,全当听个笑话,虽然不太好笑。

后记

总体来说,在老师的指导下,最大的收获是英语水平提高了(虽然六级依然没过),可以阅读论文和英文文档,对新的东西学习速度加快了。

原本想好好写总结的,结果写着写着就变味了,内容上还有些凌乱。不管怎么说,将软件测试总结过后就可以学习Ruby on Rails了,终于要离开软件测试研究了,想想未来,还是挺美好的。

0 0
原创粉丝点击