一种用于白盒测试覆盖率计算可视化的测试装置及方法
技术领域
本发明涉及一种可视化装置及方法,主要用于软件测试,具体涉及一种用于白盒测试覆盖率计算可视化的测试装置及方法。
背景技术
在软件测试过程中,由于测试人员执行黑盒测试,无法知道程序内部运行的结构和情况,而开发人员也并不清楚测试用例具体对应的程序执行逻辑,而测试人员也不清楚如何完成充分的测试。特别对于单元测试这种白盒测试,大量代码的测试覆盖率需要大量的核对工作,才能确定哪些代码被测试覆盖,哪些代码没有被覆盖到,这种没有工具提供支持的白盒测试,导致开发时产生的很多低级错误使开发人员对于版本质量失去信心也会给测试工作带来非常大的障碍。使得测试的效率和质量得不到保障,甚至为后的软件应用过程埋下巨大隐患。
发明内容
本发明所解决的技术问题:现有技术中的白盒测试工作量庞大,导致测试效率低下。
本发明提供如下技术方案:一种用于白盒测试覆盖率计算可视化的测试装置,包括源码分块装置和覆盖率计算可视化呈现装置,所述源码分块装置用于分析并获取待测试程序中的代码块,在待测试程序的所述代码块中添加用于标识程序逻辑结构的块标识,生成一个用于描述程序中代码块逻辑结构的块编码表,所述覆盖率计算可视化呈现装置包括代码插桩模块、覆盖率关联模块、覆盖率计算呈现模块,所述代码插桩模块在源码分块装置处理后的程序代码块中植入探针,所述探针在程序运行时能够生成记录有探针所在代码块的标识的测试信息,所述覆盖率关联模块根据测试信息中的代码块标识信息建立源码测试路径执行的信息表,所述覆盖率计算呈现模块对覆盖率的计算方法和视图进行呈现。
作为本发明的进一步改进,所述用于白盒测试覆盖率计算可视化的测试装置还包括根据所述代码块之间的关系基于源码风格无关算法将所述代码块进行整体性布图并呈现的逻辑呈现装置。
作为本发明的进一步说明,所述源码分块装置包括词法分析模块、类型分类模块、结构标识模块、结构校正模块。词法分析模块用于对待测试程序的字符流进行扫描然后识别单词和语句,并将程序语句标记为分支语句、顺序语句。分支语句中包括函数和控制语句的开始结束处,以及控制语句的判断条件处;顺序语句是一组没有分支语句的连续代码段。类型分类模块用于根据词法分析模块输出的语句类型,将程序代码分割成多个代码块,所述代码块包括顺序块和分支块,其中:所述顺序块是一组没有分支判断的连续代码语句,所述分支块是分支判断语句的节点,用于源码的可视化,即源码控制流程图。流程图需要通过图形来描述源码的控制结构,所以需要标识哪些块是分支块,这样才能绘制出完备充分的源码控制流程图。结构标识模块用于分析所述类型分类模块输出的顺序块以及分支块在程序代码中的逻辑位置,在块结构代码中添加用于表示程序代码逻辑结构的标识。标识是自定义的一组常量,是块编码的一部分,用于标识源代码的结构,分别在程序(函数)的开始处;控制语句的开始处;控制语句体;程序(函数)的结束处(即连接处)进行标识,其特点是通过易于理解的标识来表示程序代码的逻辑结构,将源代码分块进行编码,以数字化的形式存储于数据库中,并为源码结构可视化提供数据支撑。结构校正模块,校正结构标识模块分析得到的所述块结构逻辑位置,生成描述程序逻辑结构的块编码表。结构校正模块主要用于对一些特殊段和特殊的语句(如:break等)的校正,使所生成的块既准确又尽可能少,提高后期处理的效率,最终得到代码的块编码表。块编码表是为了描述程序的逻辑结构,用来表述类、函数、全局变量、静态变量的结构关系和实现对程序的动态绑定,以数字化的形式存储于数据库中,并为源码结构可视化提供数据支撑。
作为本发明的进一步说明,所述类型分类模块包括中间类型存储单元、中间类型合并单元、顺序块确认单元、分支块确认单元。中间类型存储单元用于存储中间类型语句。中间类型就是不确定的块类型,在下一个控制语句块生成之前来改造其类型。中间类型合并单元在词法分析模块输出的语句是非分支语句,将该语句与中间类型存储单元中的中间类型语句合并。顺序块确认单元,若中间类型存储单元中的中间类型语句不为空,并且词法分析模块输出的语句是非分支语句,则将该中间类型语句标记为一个顺序块,并清空中间类型存储单元;分支块确认单元,若词法分析模块输出的语句是分支语句,则将该语句标记为一个分支块。
作为本发明的进一步说明,所述覆盖率计算可视化呈现装置包括代码插桩模块、覆盖率关联模块、覆盖率计算呈现模块。代码插桩模块,在源码分块装置处理后的程序代码块中植入探针,所述探针在程序运行时能够生成记录有探针所在代码块的标识的测试信息;覆盖率关联模块,根据测试信息中的代码块标识信息建立源码测试路径执行的信息表;覆盖率计算呈现模块,呈现9种覆盖率说明以及计算方法。
作为本发明的进一步说明,上述9种覆盖率说明以及计算方法如下:
1)SC0:基本段语句覆盖,如果程序的所有可见段(程序块)至少被执行一次,则该段程序的SC0覆盖率达到了100%。
SC0=至少执行一次的可见段数目/可见段的数目*100%
2)SC1:标准段测试覆盖,如果程序的所有顶端不可见段至少被执行一次并且满足SC0 100%覆盖,则该程序的一组测试用例满足SC1 100%覆盖。
SC1=(至少执行过一次的可见段+基本不可见段的数目)/(可见段+基本不可见段的总数)*100%
3)SC1+:增强标准段测试覆盖,如果程序的所有低端循环边界不可见段至少被执行一次并且满足SC1 100%覆盖,则该程序的一组测试用例满足SC1+100%。
SC1+=(至少执行过一次的可见段+所有不可见段的数目)/(可见段+所有不可见段的总数)*100%
4)True:条件真覆盖。
True=条件结果为真的数目/条件数量
5)False:条件假覆盖。
False=条件结果为假的数目/条件数量
6)Both:条件真假都覆盖。
Both=条件结果真假都执行过的数目/条件的数量
7)Branch:分支覆盖(又称判定覆盖),使得程序中每个判定的取真分支和取假分支至少经历一次,即判断的真假均曾被满足。
Branch=判定结果真假都执行过的数目/判定的数量
8)C/DC:条件/判定覆盖。
C/DC=条件以及判定结果真假都执行过的数目/条件和判定的总数量
9)MC/DC:修正条件判定覆盖
MC/DC准则依据是每个判定中的每个条件的真假执行情况都单独影响整个判定的真假执行结果。
MC/DC=满足了MC/DC准则的条件判定表达式个数/程序中条件判定表达式的总个数。技术实现:遍历函数过滤出条件判定块,数量记为j,同时查找实时监控统计表中该判定的子条件以及判定和每个子条件执行结果,遍历每个子条件根据判定执行结果来判断当前判定是否“真假”都被该子条件单独影响。如果满足则累加满足MC/DC覆盖的条件个数i。MC/DC=i/j。
一种使用上述用于白盒测试覆盖率计算可视化的测试装置用于白盒测试覆盖率的测试方法,包括如下步骤:
——源码分块步骤,分析并获取待测试程序中的代码块,在待测试程序的所述代码块中添加用于标识程序逻辑结构的块标识,生成一个用于描述程序中代码块逻辑结构的块编码表;
——覆盖率计算可视化呈现步骤,在源码分块装置处理后的程序代码块中植入探针,所述探针在程序运行时能够生成记录有探针所在代码块的标识的测试信息,覆盖率关联模块根据测试信息中的代码块标识信息建立源码测试路径执行的信息表,覆盖率计算呈现模块呈现测试覆盖率的计算方法和视图。
作为对上述方法的进一步改进,所述方法还包括根据所述代码块之间的关系基于源码风格无关算法将所述代码块进行整体性布图并呈现的逻辑呈现步骤。
作为对上述方法的进一步说明,所述源码分块步骤包括词法分析步骤,类型分类步骤,结构标识步骤,结构校正步骤。其中,词法分析步骤,对待测试程序的字符流进行扫描然后识别单词和语句,并将程序语句标记为分支语句、顺序语句;类型分类步骤,根据词法分析步骤输出的语句类型,将程序代码分割成多个代码块,所述代码块包括顺序块和分支块,其中:所述顺序块是一组没有分支判断的连续代码语句,所述分支块是分支判断语句的节点;结构标识步骤,分析所述类型分类步骤输出的顺序块以及分支块在程序代码中的逻辑位置,在块结构代码中添加用于表示程序代码逻辑结构的标识;结构校正步骤,校正结构标识步骤分析得到的所述块结构逻辑位置,生成描述程序逻辑结构的块编码表。
作为对上述方法的进一步说明,所述类型分类步骤包括中间类型存储子步骤,中间类型合并子步骤,顺序块确认子步骤,分支块确认子步骤。其中,中间类型存储子步骤内容为:存储中间类型语句;中间类型合并子步骤内容为:若词法分析步骤输出的语句是非分支语句和非结束语句,则将该语句与中间类型存储步骤中的中间类型语句合并;顺序块确认子步骤内容为:若中间类型存储单元中的中间类型语句不为空,并且词法分析步骤输出的语句是非分支语句,则将该中间类型语句标记为一个顺序块,并清空中间类型存储单元;分支块确认子步骤内容为:若中间类型存储单元中的中间类型语句为空,并且词法分析步骤输出的语句是分支语句,则将该语句标记为一个分支块。
作为对上述方法的进一步说明,所述覆盖率计算可视化呈现步骤包括代码插桩步骤,覆盖率关联步骤,覆盖率计算呈现步骤。其中,代码插桩步骤的内容为:在源码分块装置处理后的程序代码块中植入探针,所述探针在程序运行时能够生成记录有探针所在代码块的标识的测试信息;覆盖率关联步骤的内容为:根据测试信息中的代码块标识信息建立源码测试路径执行的信息表;覆盖率计算呈现步骤内容为:呈现覆盖率的计算方法和视图。
本发明具有如下有益的技术效果:1.覆盖率学习:让用户通过计算可视化图示自行判断软件计算的正确性,并深度理解各种覆盖率的计算过程2.测试充分度:通过可视化分析让质量人员充分评估测试的有效性和程度,并引导开发和测试一同补充测试用例。
附图说明
下面结合附图对本发明做进一步的说明:
图1为本发明一种用于白盒测试覆盖率计算可视化的测试装置的结构框图;
图2为本发明所述可视界面的框图。
图中符号说明:
10-源码显示框;
20-覆盖率种类显示框;
30-覆盖率计算公式和计算结果显示框;
40-覆盖到块的数量显示框;
50-应统计块的数量显示框。
具体实施方式
如图1所示,一种用于白盒测试覆盖率计算可视化的测试装置,包括:源码分块装置、覆盖率计算可视化呈现装置。
源码分块装置用于分析并获取待测试程序中的代码块,在待测试程序的代码块中添加用于标识程序逻辑结构的块标识,生成一个用于描述程序中代码块逻辑结构的块编码表。该源码分块装置包括:
词法分析模块,对待测试程序的字符流进行扫描然后识别单词和语句,并将程序语句标记为分支语句、顺序语句;
类型分类模块,根据词法分析模块输出的语句类型,将程序代码分割成多个代码块,代码块包括顺序块和分支块,其中:顺序块是一组没有分支判断的连续代码语句,分支块是分支判断语句的节点。该分类模块进一步包括:中间类型存储单元、中间类型合并单元、顺序块确认单元、分支块确认单元。中间类型存储单元用于存储中间类型语句;中间类型合并单元当词法分析模块输出的语句是非分支语句,将该语句与中间类型存储单元中的中间类型语句合并;顺序块确认单元当中间类型存储单元中的中间类型语句不为空,并且词法分析模块输出的语句是非分支语句,将该中间类型语句标记为一个顺序块,并清空中间类型存储单元;分支块确认词法分析模块输出的语句是分支语句,将该语句标记为一个分支块。
结构标识模块,分析类型分类模块输出的顺序块以及分支块在程序代码中的逻辑位置,在块结构代码中添加用于表示程序代码逻辑结构的标识;
结构校正模块,校正结构标识模块分析得到的块结构逻辑位置,生成描述程序逻辑结构的块编码表。
所述覆盖率计算可视化呈现装置包括代码插桩模块、覆盖率关联模块、覆盖率计算呈现模块。代码插桩模块,在源码分块装置处理后的程序代码块中植入探针,所述探针在程序运行时能够生成记录有探针所在代码块的标识的测试信息;覆盖率关联模块,根据测试信息中的代码块标识信息建立源码测试路径执行的信息表;覆盖率计算呈现模块,呈现覆盖率的计算方法和视图。
如图2所示,上述覆盖率计算呈现模块采用ListView界面中融合展示。ListView可展示9种源码覆盖率情况,9种覆盖率说明以及计算方法如下:
1)SC0:基本段语句覆盖,如果程序的所有可见段(程序块)至少被执行一次,则该段程序的SC0覆盖率达到了100%。SC0=至少执行一次的可见段数目/可见段的数目*100%。
2)SC1:标准段测试覆盖,如果程序的所有顶端不可见段至少被执行一次并且满足SC0 100%覆盖,则该程序的一组测试用例满足SC1 100%覆盖。SC1=(至少执行过一次的可见段+基本不可见段的数目)/(可见段+基本不可见段的总数)*100%。
3)SC1+:增强标准段测试覆盖,如果程序的所有低端循环边界不可见段至少被执行一次并且满足SC1 100%覆盖,则该程序的一组测试用例满足SC1+100%。SC1+=(至少执行过一次的可见段+所有不可见段的数目)/(可见段+所有不可见段的总数)*100%。
4)True:条件真覆盖。True=条件结果为真的数目/条件数量。
5)False:条件假覆盖。False=条件结果为假的数目/条件数量。
6)Both:条件真假都覆盖。Both=条件结果真假都执行过的数目/条件的数量。
7)Branch:分支覆盖(又称判定覆盖),使得程序中每个判定的取真分支和取假分支至少经历一次,即判断的真假均曾被满足。Branch=判定结果真假都执行过的数目/判定的数量。
8)C/DC:条件/判定覆盖。C/DC=条件以及判定结果真假都执行过的数目/条件和判定的总数量。
9)MC/DC:修正条件判定覆盖。MC/DC准则依据是每个判定中的每个条件的真假执行情况都单独影响整个判定的真假执行结果。MC/DC=满足了MC/DC准则的条件判定表达式个数/程序中条件判定表达式的总个数。技术实现:遍历函数过滤出条件判定块,数量记为j,同时查找实时监控统计表中该判定的子条件以及判定和每个子条件执行结果,遍历每个子条件根据判定执行结果来判断当前判定是否“真假”都被该子条件单独影响。如果满足则累加满足MC/DC覆盖的条件个数i。MC/DC=i/j。
所述ListView界面每次可融合展示的内容包括:覆盖率种类、覆盖率(包括计算公式、计算结果)、覆盖到块的数量、应统计块的数量、源码显示框10。其中,源码显示框10中显示的源码包括覆盖的源码和未覆盖的源码,所述覆盖的源码以块为单位用绿色背景展示,所述未覆盖的源码以块为单位用蓝色背景表示。
作为一种优化,还可以在本实施方式中增加逻辑呈现装置,该装置可以根据所述代码块之间的关系基于源码风格无关算法将所述代码块进行整体性布图并呈现的逻辑呈现装置。
采用以上结构后,该实施方式可以实现以下功能:
1、覆盖率学习
让用户通过计算可视化图示自行判断软件计算的正确性,并深度理解各种覆盖率的计算过程,测试人员不需要理解每一种测试覆盖率的计算方法,只需要设计不同的测试用例,达到最大测试覆盖率即可。
2、测试充分度
该技术引导开发和测试合作完成核心关键模块100%覆盖率测试,让开发人员和测试人员都可以看到程序内部的每一句代码是否都有执行,重点模块是否用例充分以及是否存在漏测,这样就可以有效的引导开发和测试人员可以一起对用例进行增补的评估,直到达到充分的覆盖率。
3、减少单元测试工作量
单元测试通常是测试进入专业测试人员接管的前提条件以及准入标准,开发人员做单元测试的覆盖率过程中,计算覆盖率是一个非常枯燥和容易出错的过程,要人工对代码进行控制块区分,记录覆盖情况、执行次数等等大量的工作,并且这一切都是记录,过程不可视且重现难度大,该技术针对以上问题,自动化的实现上述过程,直接呈现可视化的覆盖率测试过程和结果,让单元测试的工作人员更集中精力设计实现覆盖率达到100%的测试用例。
采用上述结构后,利用本实施方式进行覆盖率计算可视化的方法包括:
源码分块步骤,分析并获取待测试程序中的代码块,在待测试程序的代码块中添加用于标识程序逻辑结构的块标识,生成一个用于描述程序中代码块逻辑结构的块编码表;该源码分块步骤包括:词法分析步骤,对待测试程序的字符流进行扫描然后识别单词和语句,并将程序语句标记为分支语句、非分支语句和结束语句;类型分类步骤,根据词法分析步骤输出的语句类型,将程序代码分割成多个代码块,代码块包括顺序块和分支块,其中:顺序块是一组没有分支判断的连续代码语句,分支块是分支判断语句的节点;其中,类型分类步骤包括:中间类型存储子步骤,存储中间类型语句;中间类型合并子步骤,若词法分析步骤输出的语句是非分支语句,则将该语句与中间类型存储步骤中的中间类型语句合并;顺序块确认子步骤,若中间类型存储单元中的中间类型语句不为空,并且词法分析步骤输出的语句是非分支语句,则将该中间类型语句标记为一个顺序块,并清空中间类型存储单元;分支块确认子步骤,若词法分析步骤输出的语句是分支语句,则将该语句标记为一个分支块;结构标识步骤,分析类型分类步骤输出的顺序块以及分支块在程序代码中的逻辑位置,在块结构代码中添加用于表示程序代码逻辑结构的标识;结构校正步骤,校正结构标识步骤分析得到的块结构逻辑位置,生成描述程序逻辑结构的块编码表。
覆盖率计算可视化呈现步骤包括:代码插桩步骤,在源码分块装置处理后的程序代码块中植入探针,所述探针在程序运行时能够生成记录有探针所在代码块的标识的测试信息;覆盖率关联步骤,根据测试信息中的代码块标识信息建立源码测试路径执行的信息表;覆盖率计算呈现步骤,即通过ListView界面融合展示9种源码覆盖率情况。
以上内容仅为本发明的较佳实施方式,对于本领域的普通技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,本说明书内容不应理解为对本发明的限制。