[发明专利]一种基于程序静态分析的Java单元测试教学反馈方法在审
申请号: | 201610294181.2 | 申请日: | 2016-04-29 |
公开(公告)号: | CN106021094A | 公开(公告)日: | 2016-10-12 |
发明(设计)人: | 陈振宇;卢依宁;刘子聪;张智轶;时清凯 | 申请(专利权)人: | 南京慕测信息科技有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G09B7/04 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 210093 江苏省南京*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明提供了一种基于程序静态分析的Java单元测试教学反馈方法,包括下列步骤:1)源程序代码静态结构分析;2)源程序测试需求的生成;3)Java单元测试用例编写;4)测试用例覆盖率数据采集;5)测试用例和覆盖率数据的汇总统计;6)源程序静态结构和覆盖率数据的可视化展现;7)单个测试用例在源程序静态结构上的执行流程展现。本发明解决了目前软件测试课程中Java单元测试教学任务难于练习难于评估的问题,提供了针对Java单元测试的编程练习以及自动化评估和可视化展现的平台,大幅提升了教学任务的练习和评估效率,有助于教师根据练习反馈改进教学内容,有助于学生根据练习反馈不断提升测试用例的编写能力。 | ||
搜索关键词: | 一种 基于 程序 静态 分析 java 单元测试 教学 反馈 方法 | ||
【主权项】:
一种基于程序静态分析的Java单元测试教学反馈方法,其特征在于,利用程序控制流分析得到源程序代码的静态结构,并根据静态结构得到代码覆盖和分支覆盖的测试需求,以实现测试用例的自动化评估;教师指定考试和练习题目,学生编写测试用例;系统采集测试用例和覆盖率数据,并进行汇总统计,最终在浏览器中展现源程序静态结构和整体覆盖率数据,以及单个测试用例在源程序静态结构上的执行流程。包括下列步骤:1)源程序代码静态结构分析,使用Soot框架对Java源程序编译后的字节码程序进行控制流分析,得到源程序的控制流数据,并将它们转成通用的数据格式存储到文件中。最后对源程序每个类的每个函数都会得到一个JSON格式文件,其中记录着源程序代码静态结构的每个节点的中间指令集,每个节点对应的源程序起止行数,以及每个节点的前驱节点和后继节点;2)源程序测试需求的生成;定义1:测试执行路径是测试用例执行到的源程序语句序列;定义2:代码覆盖是一种测试指标,指运行测试用例,使得源程序中的每个可执行语句至少执行一次;定义3:分支覆盖是一种测试指标,指运行测试用例,使得源程序中每个判断的取真分支和取假分支至少经历一次,即判断的真假值均曾被满足;定义4:测试需求是指测试指标中每个覆盖点的路径特性。给定一个测试指标C,测试指标的路径特性集合记为TR,即测试需求。给定一个测试用例集合T,它对应的测试执行路径集合记为P。当对于TR中的每个测试需求tr,在P中都能找到一条测试执行路径满足tr,我们就称测试用例T满足测试需求TR;利用步骤1)得到的源程序静态结构,生成代码覆盖和分支覆盖的测试需求;3)Java单元测试用例编写,学生在Eclipse中编写测试用例,其中待测程序(源程序)来自系统内置的练习或者教师指定的题目;4)测试用例覆盖率数据采集;定义1:代码覆盖率是指测试用例满足代码覆盖测试需求的百分率,计算公式如下:![]()
式中N为源程序静态结构Graph的所有节点,n为所有节点N的个数,p为测试用例集合中的任意一条测试执行路径,
表示存在一条测试执行路径p覆盖了节点Ni。定义2:分支覆盖率是指测试用例满足分支覆盖测试需求的百分率,计算公式如下:![]()
式中B为源程序静态结构Graph的所有分支,b为所有分支B的个数,p为测试用例集合中的任意一条测试执行路径,
表示存在一条测试执行路径p覆盖了分支Bi。利用步骤1)生成的源程序静态结构数据,采用代码插桩技术,对每个节点的对应的源程序语句进行插桩。然后利用JUnit套件将步骤3)中学生编写的单元测试用例运行在插桩后的源程序上,并收集插桩的输出信息。从插桩的输出信息中提取测试用例执行到的源程序上的节点路径,即测试执行路径,最后与步骤2)中生成的测试需求进行比较,计算测试覆盖率;5)测试用例和覆盖率数据的汇总统计;定义1:测试需求覆盖率是指对于源程序的每个测试需求,所有学生的所有测试用例对该测试需求覆盖的百分比。![]()
式中req为源程序任一测试需求,s为学生总数,ps为任一学生的任一测试执行路径,
表示存在一条测试执行路径ps覆盖了测试需求req。将步骤3)中学生编写的单元测试用例和步骤4)中得到的覆盖率数据一起提交到服务器,在服务器端对相同源程序的测试用例和覆盖率数据进行汇总统计;6)源程序静态结构和覆盖率数据的可视化展现;在步骤1)中使用Soot框架对Java源程序进行控制流分析时,指定生成的控制流数据为DOT格式文件(DOT是一种图形描述语言),然后使用Graphviz工具中的dot命令将数据文件导出成SVG格式文件(SVG是可在浏览器中使用的可伸缩矢量图形格式)。针对源程序每个类的每个函数,将每个节点对应的源程序语句,以及汇总后的每个测试需求的覆盖率数据,与SVG控制流图上的节点对应起来,最后一起在浏览器中展现;7)单个测试用例在源程序静态结构上的执行流程展现;在步骤6)中展现的图形上选择某个测试需求,从步骤5)中汇总的数据里找出所有覆盖和未覆盖该测试需求的测试用例。然后再选择一个测试用例,根据步骤4)中采集到的测试用例执行路径数据,将执行路径展现在SVG图形上。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京慕测信息科技有限公司,未经南京慕测信息科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201610294181.2/,转载请声明来源钻瓜专利网。
- 上一篇:一种语音处理的方法、装置以及系统
- 下一篇:耳道粉末药物上药装置