[发明专利]一种基于程序静态分析的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:代码覆盖率是指测试用例满足代码覆盖测试需求的百分率,计算公式如下:<mrow><msub><mi>Coverage</mi><mi>node</mi></msub><mo>=</mo><mfrac><mrow><msubsup><mi>&Sigma;</mi><mn>1</mn><mi>n</mi></msubsup><mn>1</mn><mi>i</mi><mi>f</mi><mi>f</mi><mo>{</mo><mi>p</mi><mo>|</mo><mi>p</mi><mo>&SupersetEqual;</mo><msub><mi>N</mi><mi>i</mi></msub><mo>}</mo></mrow><mi>n</mi></mfrac><mo>&times;</mo><mn>100</mn><mi>%</mi></mrow>式中N为源程序静态结构Graph的所有节点,n为所有节点N的个数,p为测试用例集合中的任意一条测试执行路径,表示存在一条测试执行路径p覆盖了节点Ni。定义2:分支覆盖率是指测试用例满足分支覆盖测试需求的百分率,计算公式如下:<mrow><msub><mi>Coverage</mi><mrow><mi>b</mi><mi>r</mi><mi>a</mi><mi>n</mi><mi>c</mi><mi>h</mi></mrow></msub><mo>=</mo><mfrac><mrow><msubsup><mi>&Sigma;</mi><mn>1</mn><mi>b</mi></msubsup><mn>1</mn><mi>i</mi><mi>f</mi><mi>f</mi><mo>{</mo><mi>p</mi><mo>|</mo><mi>p</mi><mo>&SupersetEqual;</mo><msub><mi>B</mi><mi>i</mi></msub><mo>}</mo></mrow><mi>b</mi></mfrac><mo>&times;</mo><mn>100</mn><mi>%</mi></mrow>式中B为源程序静态结构Graph的所有分支,b为所有分支B的个数,p为测试用例集合中的任意一条测试执行路径,表示存在一条测试执行路径p覆盖了分支Bi。利用步骤1)生成的源程序静态结构数据,采用代码插桩技术,对每个节点的对应的源程序语句进行插桩。然后利用JUnit套件将步骤3)中学生编写的单元测试用例运行在插桩后的源程序上,并收集插桩的输出信息。从插桩的输出信息中提取测试用例执行到的源程序上的节点路径,即测试执行路径,最后与步骤2)中生成的测试需求进行比较,计算测试覆盖率;5)测试用例和覆盖率数据的汇总统计;定义1:测试需求覆盖率是指对于源程序的每个测试需求,所有学生的所有测试用例对该测试需求覆盖的百分比。<mrow><msub><mi>Coverage</mi><mrow><mi>r</mi><mi>e</mi><mi>q</mi></mrow></msub><mo>=</mo><mfrac><mrow><msubsup><mi>&Sigma;</mi><mn>1</mn><mi>s</mi></msubsup><mn>1</mn><mi>i</mi><mi>f</mi><mi>f</mi><mo>{</mo><msub><mi>p</mi><mi>s</mi></msub><mo>|</mo><msub><mi>p</mi><mi>s</mi></msub><mo>&SupersetEqual;</mo><mi>r</mi><mi>e</mi><mi>q</mi><mo>}</mo></mrow><mi>s</mi></mfrac><mo>&times;</mo><mn>100</mn><mi>%</mi></mrow>式中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/,转载请声明来源钻瓜专利网。

×

专利文献下载

说明:

1、专利原文基于中国国家知识产权局专利说明书;

2、支持发明专利 、实用新型专利、外观设计专利(升级中);

3、专利数据每周两次同步更新,支持Adobe PDF格式;

4、内容包括专利技术的结构示意图流程工艺图技术构造图

5、已全新升级为极速版,下载速度显著提升!欢迎使用!

请您登陆后,进行下载,点击【登陆】 【注册】

关于我们 寻求报道 投稿须知 广告合作 版权声明 网站地图 友情链接 企业标识 联系我们

钻瓜专利网在线咨询

周一至周五 9:00-18:00

咨询在线客服咨询在线客服
tel code back_top