CN106557413A - 基于代码覆盖率获取测试用例的方法和设备 - Google Patents

基于代码覆盖率获取测试用例的方法和设备 Download PDF

Info

Publication number
CN106557413A
CN106557413A CN201510622723.XA CN201510622723A CN106557413A CN 106557413 A CN106557413 A CN 106557413A CN 201510622723 A CN201510622723 A CN 201510622723A CN 106557413 A CN106557413 A CN 106557413A
Authority
CN
China
Prior art keywords
test case
source code
change
code
filename
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201510622723.XA
Other languages
English (en)
Inventor
徐斌
李越
王永景
孙磊
徐志斌
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
EMC Corp
Original Assignee
EMC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by EMC Corp filed Critical EMC Corp
Priority to CN201510622723.XA priority Critical patent/CN106557413A/zh
Priority to US15/271,347 priority patent/US10372594B2/en
Publication of CN106557413A publication Critical patent/CN106557413A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3676Test management for coverage analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/368Test management for test version control, e.g. updating test cases to a new software version
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3692Test management for test results analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本公开的实施例公开了基于代码覆盖率获取测试用例的方法和设备。该方法包括:根据代码覆盖率建立源代码与测试用例之间的映射关系;以及在所述源代码变化时,根据所述映射关系获取针对所述变化的测试用例。该设备包括:建立装置,用于根据代码覆盖率建立源代码与测试用例之间的映射关系;以及获取装置,用于在所述源代码变化时,根据所述映射关系获取针对所述变化的测试用例。本公开的实施例通过这样的方法和设备可以取得尽量少的测试用例以覆盖所改变的源代码。

Description

基于代码覆盖率获取测试用例的方法和设备
技术领域
本公开的实施例涉及软件测试领域,特别涉及一种基于代码覆盖率获取测试用例的方法。
背景技术
软件测试是指在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。测试用例(Test Case)是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。
在软件测试领域,经常需要采用测试用例对源代码进行测试,当开发人员改变源代码(例如在函数中添加行、修改行或删除行,或者在类中增加函数或删除函数)时,测试人员往往需要运行所有的测试用例以覆盖所改变的源代码,然而,在源代码的改变并不多时,这种运行所有测试用例的方式并非必要。而且,在源代码较为复杂和/或测试用例较多时,由于需要运行所有的测试用例,因此会非常耗时,效率也较低。
发明内容
本公开的实施例是为解决以上所提及的技术问题而提出的新的技术方案,本公开的实施例可以取得尽量少的测试用例以覆盖所改变的源代码。
本公开的一个方面提供了一种基于代码覆盖率获取测试用例的方法,包括:
根据代码覆盖率建立源代码与测试用例之间的映射关系;以及
在所述源代码变化时,根据所述映射关系获取针对所述变化的测试用例。
根据本公开的一个实施例,根据代码覆盖率建立源代码与测试用例之间的映射关系包括:
利用代码覆盖率工具生成在所述源代码上运行所述测试用例之后的运行报告;以及
根据所述运行报告,获得所述源代码与所述测试用例之间的映射关系。
根据本公开的一个实施例,利用代码覆盖率工具生成在所述源代码上运行所述测试用例之后的运行报告包括:
在所述源代码上运行每个测试用例之后,利用所述代码覆盖率工具生成针对每个测试用例的运行报告。
根据本公开的一个实施例,根据所述运行报告,获得所述源代码与所述测试用例之间的映射关系包括:
根据所述运行报告,建立所述测试用例与所述源代码中行号、函数名、类名和文件名之间的映射关系表。
根据本公开的一个实施例,根据所述运行报告建立所述测试用例与所述源代码中行号、函数名、类名和文件名之间的映射关系表包括:
针对运行每个测试用例后生成的运行报告进行信息抽取,以获得每个测试用例与所述源代码中相应的行号、函数名、类名和文件名之间的映射关系表。
根据本公开的一个实施例,针对运行每个测试用例后生成的运行报告进行信息抽取,以获得每个测试用例与所述源代码中相应的行号、函数名、类名和文件名之间的映射关系表包括:
读取所述运行报告,以获得所述源代码的行号、函数名、类名和文件名;以及
将所述测试用例、所获得的行号、函数名、类名、文件名存储到数据库的映射关系表中。
根据本公开的一个实施例,根据代码覆盖率建立源代码与测试用例之间的映射关系包括:
针对所述源代码执行测试用例储存库中的所有测试用例以获得所述代码覆盖率。
根据本公开的一个实施例,针对所述源代码执行测试用例储存库中的所有测试用例以获得所述代码覆盖率包括:
在所有测试用例未覆盖全部源代码时,针对未覆盖的源代码添加新的测试用例到所述测试用例储存库中。
根据本公开的一个实施例,根据代码覆盖率建立源代码与测试用例之间的映射关系包括:
将所述映射关系存储在利用统一建模语言建模的数据库中。
根据本公开的一个实施例,根据所述映射关系获取针对所述变化的测试用例包括:
获取所述源代码变化时的变更集。
根据本公开的一个实施例,获取所述源代码变化时的变更集包括:
利用比较工具获取所述源代码变化时相对于先前存储的源代码之间的变更集。
根据本公开的一个实施例,根据所述映射关系获取针对所述变化的测试用例包括:
分析所述变更集以获取针对所述变化的测试用例。
根据本公开的一个实施例,分析所述变更集以获取针对所述变化的测试用例包括:
在所述变化发生在函数中时,根据所述映射关系获取映射到所述函数中的第一测试用例。
根据本公开的一个实施例,在所述变化发生在函数中时,根据所述映射关系获取映射到所述函数中的第一测试用例包括:
根据所述变更集获得所述源代码发生变化的文件名和行号;
利用所述文件名和行号查找所述源代码与测试用例之间建立的映射关系表,以获得发生变化的函数名和类名;以及
在所述映射关系表中查找与所述文件名、所述函数名和所述类名同时对应的测试用例名,以获得所述第一测试用例。
根据本公开的一个实施例,分析所述变更集以获取针对所述变化的测试用例包括:
在所述变化发生在类中时,根据所述映射关系获取映射到所述类中的第二测试用例。
根据本公开的一个实施例,在所述变化发生在类中时,根据所述映射关系获取映射到所述类中的第二测试用例包括:
根据所述变更集获得所述源代码发生变化的文件名和行号;
利用所述文件名和行号查找所述源代码与测试用例之间建立的映射关系表,以获得发生变化的类名;以及
在所述映射关系表中查找与所述文件名和所述类名同时对应的测试用例名,以获得所述第二测试用例。
根据本公开的一个实施例,还包括:
运行所述第一测试用例和所述第二测试用例之间的并集。
本公开的一个方面提供了一种基于代码覆盖率获取测试用例的设备,包括:
建立装置,用于根据代码覆盖率建立源代码与测试用例之间的映射关系;以及
获取装置,用于在所述源代码变化时,根据所述映射关系获取针对所述变化的测试用例。
根据本公开的一个实施例,所述建立装置包括:
用于利用代码覆盖率工具生成在所述源代码上运行所述测试用例之后的运行报告的装置;以及
用于根据所述运行报告,获得所述源代码与所述测试用例之间的映射关系的装置。
根据本公开的一个实施例,用于利用代码覆盖率工具生成在所述源代码上运行所述测试用例之后的运行报告的装置包括:
用于在所述源代码上运行每个测试用例之后,利用所述代码覆盖率工具生成针对每个测试用例的运行报告的装置。
根据本公开的一个实施例,用于根据所述运行报告,获得所述源代码与所述测试用例之间的映射关系的装置包括:
用于根据所述运行报告,建立所述测试用例与所述源代码中行号、函数名、类名和文件名之间的映射关系表的装置。
根据本公开的一个实施例,用于根据所述运行报告建立所述测试用例与所述源代码中行号、函数名、类名和文件名之间的映射关系表的装置包括:
用于针对运行每个测试用例后生成的运行报告进行信息抽取,以获得每个测试用例与所述源代码中相应的行号、函数名、类名和文件名之间的映射关系表的装置。
根据本公开的一个实施例,用于针对运行每个测试用例后生成的运行报告进行信息抽取,以获得每个测试用例与所述源代码中相应的行号、函数名、类名和文件名之间的映射关系表的装置包括:
用于读取所述运行报告,以获得所述源代码的行号、函数名、类名和文件名的装置;以及
用于将所述测试用例、所获得的行号、函数名、类名、文件名存储到数据库的映射关系表中的装置。
根据本公开的一个实施例,所述建立装置包括:
用于针对所述源代码执行测试用例储存库中的所有测试用例以获得所述代码覆盖率的装置。
根据本公开的一个实施例,用于针对所述源代码执行测试用例储存库中的所有测试用例以获得所述代码覆盖率的装置包括:
用于在所有测试用例未覆盖全部源代码时,针对未覆盖的源代码添加新的测试用例到所述测试用例储存库中的装置。
根据本公开的一个实施例,所述建立装置包括:
用于将所述映射关系存储在利用统一建模语言建模的数据库中的装置。
根据本公开的一个实施例,所述获取装置包括:
用于获取所述源代码变化时的变更集的装置。
根据本公开的一个实施例,用于获取所述源代码变化时的变更集的装置包括:
用于利用比较工具获取所述源代码变化时相对于先前存储的源代码之间的变更集的装置。
根据本公开的一个实施例,所述获取装置包括:
用于分析所述变更集以获取针对所述变化的测试用例的装置。
根据本公开的一个实施例,用于分析所述变更集以获取针对所述变化的测试用例的装置包括:
用于在所述变化发生在函数中时,根据所述映射关系获取映射到所述函数中的第一测试用例的装置。
根据本公开的一个实施例,用于在所述变化发生在函数中时,根据所述映射关系获取映射到所述函数中的第一测试用例的装置包括:
用于根据所述变更集获得所述源代码发生变化的文件名和行号的装置;
用于利用所述文件名和行号查找所述源代码与测试用例之间建立的映射关系表,以获得发生变化的函数名和类名的装置;以及
用于在所述映射关系表中查找与所述文件名、所述函数名和所述类名同时对应的测试用例名,以获得所述第一测试用例的装置。
根据本公开的一个实施例,用于分析所述变更集以获取针对所述变化的测试用例的装置包括:
用于在所述变化发生在类中时,根据所述映射关系获取映射到所述类中的第二测试用例的装置。
根据本公开的一个实施例,用于在所述变化发生在类中时,根据所述映射关系获取映射到所述类中的第二测试用例的装置包括:
用于根据所述变更集获得所述源代码发生变化的文件名和行号的装置;
用于利用所述文件名和行号查找所述源代码与测试用例之间建立的映射关系表,以获得发生变化的类名的装置;以及
用于在所述映射关系表中查找与所述文件名和所述类名同时对应的测试用例名,以获得所述第二测试用例的装置。
根据本公开的一个实施例,还包括:
用于运行所述第一测试用例和所述第二测试用例之间的并集的装置。
本公开的一个方面提供了一种计算机程序产品,包括具体化于其中的计算机可读程序指令,所述计算机可读程序指令在由处理器执行时,引起所述处理器执行以上所述的方法。
在本公开的实施例中,由于可以根据所述代码覆盖率建立源代码与测试用例之间的映射关系,因此在所述源代码变化时,可以根据所述映射关系获取针对所述变化的测试用例,而不需要针对全部的源代码运行所有的测试用例。通过只针对源代码的变化取得相应的测试用例,从而可以取得尽量少的测试用例以覆盖所改变的源代码。
附图说明
现将仅通过示例的方式,参考所附附图对本公开的实施例进行描述,其中:
图1是根据本公开的一个实施例的基于代码覆盖率获取测试用例的方法的示意性流程图;
图2是根据本公开的一个实施例的根据所述代码覆盖率建立源代码与测试用例之间的映射关系的示意性流程图;
图3是根据本公开的一个实施例的源代码的示例性示意图;
图4是利用代码覆盖率工具生成在图3的源代码上运行测试用例之后的XML格式的运行报告的示例性示意图;
图5是根据本公开的另一实施例的源代码的示例性示意图;
图6是利用代码覆盖率工具生成在图5的源代码上运行测试用例之后的HTML格式的运行报告的示例性示意图;
图7是根据本公开的另一个实施例的根据所述代码覆盖率建立源代码与测试用例之间的映射关系的示意性流程图;
图8是根据本公开的一个实施例的将所建立的映射关系存储在利用统一建模语言建模的数据库中的示意图;
图9是根据本公开的一个实施例的在源代码变化时,根据所述映射关系获取针对所述变化的测试用例的示意图;
图10是根据本公开的一个实施例的在源代码变化时,根据所述映射关系获取针对所述变化的测试用例的示意图;
图11是根据本公开的一个实施例的源代码的示例性示意图;
图12是图11中源代码的函数发生变化时的示例性示意图;
图13是利用比较工具对图11和图12的代码进行比较后获得的变更集的示例性示意图;
图14是利用比较工具将图13的变更集导出为文本文件的示例性示意图;
图15是图11中源代码的类发生变化时的示例性示意图;
图16是利用比较工具对图11和图15的代码进行比较后获得的变更集的示例性示意图;
图17是利用比较工具将图16的变更集导出为文本文件的示例性示意图;
图18是图5中源代码的函数发生变化时的示例性示意图;
图19是利用比较工具对图5和图18的代码进行比较后获得的变更集的示例性示意图;
图20中根据本公开的另一实施例的源代码的示例性示意图;
图21是图20中源代码的类发生变化时的示例性示意图;
图22是利用比较工具对图20和图21的代码进行比较后获得的变更集的示例性示意图;以及
图23是根据本公开的一个实施例的基于代码覆盖率获取测试用例的设备的结构示意图。
具体实施方式
现将结合附图对本公开的实施例进行具体的描述。应当注意的是,附图中对相似的部件或者功能组件可能使用同样的数字标示。所附附图仅仅旨在说明本公开的实施例。本领域的技术人员可以在不偏离本公开精神和保护范围的基础上从下述描述得到替代的实施方式。
如图1所示,其图示了根据本公开的一个实施例的基于代码覆盖率获取测试用例的方法的示意性流程图。在步骤101,根据代码覆盖率建立源代码与测试用例之间的映射关系。在步骤102中,在所述源代码变化时,根据所述映射关系获取针对所述变化的测试用例。
例如,由于可以根据代码覆盖率建立源代码与测试用例之间的映射关系,因此在所述源代码变化时,可以根据所述映射关系获取针对所述变化的测试用例,而不需要针对全部的源代码运行所有的测试用例,从而可以只通过针对源代码的变化取得相应的测试用例,以便取得尽量少的测试用例来覆盖所改变的源代码。
如图2所示,其图示了根据本公开的一个实施例的根据所述代码覆盖率建立源代码与测试用例之间的映射关系的示意性流程图。在步骤201,利用代码覆盖率工具生成在所述源代码上运行所述测试用例之后的运行报告。在步骤202,根据所述运行报告,获得所述源代码与所述测试用例之间的映射关系。
例如,代码覆盖率工具可以采用opencover工具或者simplecov工具等。例如,运行报告可以是利用opencover工具生成的XML(可扩展标记语言)格式的运行报告,也可以是利用simplecov工具生成的HTML(超文本标记语言)格式的运行报告。
例如,如图4所示,其示例性图示了在图3所示的源代码上运行测试用例后生成的XML格式的运行报告。其中图3所示的源代码示出了第24行(Line 24)到第35行(Line 35)的代码的示例。
例如,如图6所示,其示例性图示了在图5所示的源代码上运行测试用例后生成的HTML格式的运行报告。其中图5所示的源代码示出了第1行(Line 1)到第6行(Line 6)的代码的示例。
根据本公开的一个实施例,利用代码覆盖率工具生成在所述源代码上运行所述测试用例之后的运行报告包括:在所述源代码上运行每个测试用例之后,利用所述代码覆盖率工具生成针对每个测试用例的运行报告。
例如,针对每个测试用例,在源代码上运行每个测试用例,然后利用代码覆盖率工具生成针对每个测试用例的运行报告,以便后续根据该运行报告建立所述源代码与所述测试用例之间的映射关系,这样当运行所有测试用例之后,就可以建立所有测试用例与源代码之间的映射关系。
根据本公开的一个实施例,根据所述运行报告,获得所述源代码与所述测试用例之间的映射关系包括:根据所述运行报告,建立所述测试用例与所述源代码中行号、函数名、类名和文件名之间的映射关系表。
例如,假设图4中是在图3所示源代码上运行第M个测试用例TestcaseM(比如M=1,也即测试用例名(CaseName)为测试用例1(Testcase1))后生成的XML格式的报告,其中,根据该报告可以获知第M个测试用例覆盖的类名(ClassName)有ClassN,该示例中N=1,也即覆盖“Class1”;第M个测试用例覆盖的函数(也称为方法,method)名(FunctionName)有FunctionP,该示例中P=1,也即覆盖Function1,另外,vc的值表示访问的次数,sl的值表示对应的行号(LineNumber),fileid的值对应于文件的uid(唯一标识符),也即测试用例能够覆盖的文件名(FileName)有FileQ,该示例中Q=2,也即覆盖File2。此时,通过解析这个XML格式的报告(例如report.xml),就可以得到第M个测试用例(该示例中是测试用例1)和源代码(也即行号、函数名、类名和文件名)之间的映射关系。
例如,假设图6中是在图5所示源代码上运行第M’个测试用例(比如M’=1,也即测试用例名(CaseName)为测试用例1(Testcase1))后生成的HTML格式的报告,其中,Covered代表line(行)被覆盖,Missed代表line(行)没被覆盖,Never代表是空行、注释、end关键字等,data-linenumber是行号(LineNumber)。Div中的h3是文件名,<code>的值中的def标记了函数名(如HelloWorld),class标记了类名(如class1),class和method都是以“end”结尾。此时,通过解析这个HTML格式的报告(例如report.html),就可以得到第M’个测试用例(该示例中是测试用例1)和源代码(也即行号、函数名、类名和文件名)之间的映射关系。
根据本公开的一个实施例,根据所述运行报告建立所述测试用例与所述源代码中行号、函数名、类名和文件名之间的映射关系表包括:针对运行每个测试用例后生成的运行报告进行信息抽取,以获得每个测试用例与所述源代码中相应的行号、函数名、类名和文件名之间的映射关系表。
例如,如图4和图6所示,运行报告中一般都含有运行的测试用例所覆盖的行号、函数名、类名和文件名,因此对这样的运行报告进行信息抽取,可以获得每个测试用例与所述源代码中相应的行号、函数名、类名和文件名之间的映射关系,例如映射关系表(可以存储在数据库中)。当运行所有的测试用例之后,就可以获得所有测试用例与所述源代码中相应的行号、函数名、类名和文件名之间的映射关系(例如映射关系表)。
根据本公开的一个实施例,针对运行每个测试用例后生成的运行报告进行信息抽取,以获得每个测试用例与所述源代码中相应的行号、函数名、类名和文件名之间的映射关系表包括:读取所述运行报告,以获得所述源代码的行号、函数名、类名和文件名;以及将所述测试用例、所获得的行号、函数名、类名、文件名存储到数据库的映射关系表中。
例如,根据图4中的XML格式的报告获得测试用例1和源代码之间的映射关系表可以通过以下过程来实现:
1.读取report.xml获得根节点
XElement root=XElement.Parse(“report.xml”);
2.利用根节点得到文件名和uid的对应关系,保存在htFileObj对象里,后面要使用
例如针对图4中的以下报告部分:
可以采用以下伪代码得到文件名和uid的对应关系:
3.利用根节点得到class的名字(也即类名),后面要使用
例如针对图4中的以下报告部分:
<Class>
<FullName>Class1</FullName>
可以采用以下伪代码得到类名(例如,Class1):
className=root.Element("Class").Element("FullName").value
4.遍历类中的函数,获得函数名,行号,fileid等,然后保存测试用例名(例如testcase1)、行号、函数名,类名和文件名到数据库中
例如针对图4中的函数(method)可以采用以下伪代码获得函数名,行号,fileid等:
通过以上过程所建立的测试用例1和源代码之间的映射关系(例如映射关系表)例如可以是以下表1的形式:
表1
表1中,因为Testcase1没有覆盖行号32,33,34,所以是空的。根据以上的XML格式的报告可以看出,运行测试用例1(Testcase1)时行号为26-28的代码被该测试用例所覆盖,而行号为32-34的代码没有被覆盖,其中行号为26-28的代码对应的函数名是Function1,对应的类名是Class1,对应的文件名是File2。此外,尽管Testcase1没有覆盖行号32,33,34,但根据以上的XML格式的报告还可以看出,行号为32-34的源代码,其对应的函数名为Function2,对应的类名是Class1,对应的文件名是File2,此时也可以将这样的对应关系存储在映射关系表中。当针对源代码运行每个测试用例(比如运行M个测试用例,测试用例名为Testcase1,Testcase2……TestcaseM)时,每个测试用例都可以建立这样的映射关系(例如与行号sl、函数名FunctionP、类名ClassN和文件名FileQ对应的映射关系表),此时当所有的测试用例运行完毕之后,就可以在所有的测试用例与源代码之间建立相应的映射关系(例如映射关系表)。
根据本公开的一个实施例,根据代码覆盖率建立源代码与测试用例之间的映射关系包括:针对所述源代码执行测试用例储存库中的所有测试用例以获得所述代码覆盖率。
例如,在图7中的步骤703中运行存储在测试用例储存库中的所有测试用例,以获得针对源代码的代码覆盖率,比如:每次运行一个测试用例,得到该测试用例对应的代码覆盖率结果(例如:运行报告),然后将此结果先保存起来,等到所有测试用例运行完毕,得到所有测试用例对应的代码覆盖率结果,这些已经保存的代码覆盖率结果可以后续在图7中的步骤706中用这些代码覆盖率结果建立源代码与测试用例之间的映射关系并且将建立的映射关系存储到数据库中。
例如,在图7中的步骤703之前可以设置步骤702,其中,在步骤702中判断是否为休息日:如果是休息日,则执行步骤703来运行所有的测试用例;如果不是休息日,则等待休息日的到来;也即根据所述代码覆盖率建立源代码与测试用例之间的映射关系在休息日进行。这是因为运行测试用例,特别是针对源代码和测试用例都较多的情况,其过程非常耗时,如果在工作日进行,则势必会对源代码的正常开发工作产生影响,因此选择在休息日进行,可以用空闲的时间完成建立映射关系的过程。
例如,在图7中的步骤702之前可以设置步骤701,其中,在步骤701中初始化调度器,从而方便调度例如线程来执行测试用例的运行过程。
根据本公开的一个实施例,针对所述源代码执行测试用例储存库中的所有测试用例以获得所述代码覆盖率包括:在所有测试用例未覆盖全部源代码时,针对未覆盖的源代码添加新的测试用例到所述测试用例储存库中。
例如,在图7的步骤704中,判断是否所有测试用例覆盖了全部源代码,如果否,则在图7的步骤705中,需要(例如在工作日)添加新的测试用例到所述测试用例储存库中,以便后续建立更完备的源代码与测试用例之间的映射关系。但应理解的是,即使源代码与测试用例之间的映射关系并不完备(或不完美),也仍然能够利用已建立的映射关系来获取能够获得的测试用例,并不影响本公开的具体实施,例如可以查找已建立的映射关系表来针对源代码的变化获取相应的测试用例。
根据本公开的一个实施例,根据代码覆盖率建立源代码与测试用例之间的映射关系包括:将所述映射关系存储在利用统一建模语言建模的数据库中。该数据库仅是示例,本公开并不限制于此。
例如,如图8所示为将所建立的映射关系存储在利用统一建模语言建模的数据库中的示意图,其中“1”表示对应关系中的1个,“*”表示对应关系中的多个。例如“行(Line)”与“测试用例(Testcase)”之间是多对多的对应关系;“行(Line)”与“文件(File)”是多对一的对应关系;“行(Line)”与“类(Class)”是多对一的对应关系;“行(Line)”与“函数(Function)”是多对一的对应关系;“文件(File)”与“类(Class)”是多对多的对应关系;“函数(Function)”与“类(Class)”是多对一的对应关系。通过这种关系,可以在数据库中存储根据代码覆盖率所建立的源代码与测试用例之间的映射关系。
例如,将所述映射关系存储在利用统一建模语言建模的数据库中包括:根据代码覆盖率结果,将测试用例与源代码之间的映射关系更新到存储该映射关系的数据库中。比如,在图7的步骤706中,更新数据库的方式可以是:首先,清空上一次休息日更新的数据库(例如上一次休息日存储所有测试用例和源代码之间的映射关系的数据库),然后根据在图7的步骤703中保存的所有测试用例对应的代码覆盖率结果,建立相应的测试用例与源代码之间的映射关系,并将建立的映射关系存储到数据库,例如:可以对每个测试用例对应的代码覆盖率结果进行解析,建立该测试用例与源代码之间的映射关系表,然后将建立的映射关系表存储到数据库;当所有测试用例对应的代码覆盖率结果都解析完后,就可以得到本次休息日的存储所有测试用例与源代码之间的映射关系表的数据库。
继续参照图1,在步骤101中建立映射关系之后,可以在步骤102中根据所述映射关系获取针对所述变化的测试用例,如图9所示,其图示了根据所述映射关系获取针对所述变化的测试用例的示意性流程图,如图10所示,其图示了根据一个实施例的根据所述映射关系获取针对所述变化的测试用例的示意性流程图。
根据本公开的一个实施例,根据所述映射关系获取针对所述变化的测试用例包括:获取所述源代码变化时的变更集(如图9所示的步骤901)。
例如,可以在图10的步骤1003中,可以判断源代码是否发生变化,在源代码变化时(经常发生在源代码的开发过程中),例如对源代码进行相应的修改时,可以获取这样的变更信息,比如使用相应的比较工具来获取所述源代码变化时的变更集。
例如,在图10的步骤1003之前可以设置步骤1002,在步骤1002中可以判断是否在工作日,如果是工作日,则判断源代码是否发生变化并获取相应的变更集;如果不是工作日,则一般源代码不会有相应的变化,此时需要等待工作日的到来。这是由于代码开发工作一般都是在工作日进行,因此通过这样的判断,可以提高本公开中方法的运行效率,也节省了资源和成本。
例如,在图10的步骤1002之前可以设置步骤1001,在步骤1001中初始化源代码储存库中的监视器,所述源代码储存库存储所述源代码。通过初始化源代码储存库中的监视器,可以执行对源代码的实时监视。
根据本公开的一个实施例,获取所述源代码变化时的变更集包括:利用比较工具获取所述源代码变化时相对于先前存储的源代码之间的变更集。
例如,使用比较工具(例如DiffMerge工具,或者BeyondCompare工具)进行比较,可以得到当前版本的源代码与存储在数据库里的先前版本的源代码之间的变更集,将这样的变更集导出到例如文本文件或XML文件中,然后分析此文本文件或XML文件,可以方便后续获取需要运行的对应的测试用例。
根据本公开的一个实施例,根据所述映射关系获取针对所述变化的测试用例包括:分析所述变更集以获取针对所述变化的测试用例(如图9所示的步骤902)。
例如,可以在图10的步骤1004中,可以分析变更集,从而获知源代码的变化发生在函数和/或类中,从而针对性的获取相应的测试用例。
根据本公开的一个实施例,分析所述变更集以获取针对所述变化的测试用例包括:在所述变化发生在函数中时,根据所述映射关系获取映射到所述函数中的第一测试用例。
例如,所述函数中的变化包括在所述函数中进行以下各项中的至少一项:添加行、修改行和删除行。例如,在图10的步骤1005中,可以判断源代码的变化是否发生在函数中,如果是,则执行步骤1006获取映射到所述函数中的第一测试用例,如果否,则执行步骤1007。
根据本公开的一个实施例,在所述变化发生在函数中时,根据所述映射关系获取映射到所述函数中的第一测试用例包括:根据所述变更集获得所述源代码发生变化的文件名和行号;利用所述文件名和行号查找所述源代码与测试用例之间建立的映射关系表,以获得发生变化的函数名和类名;以及在所述映射关系表中查找与所述文件名、所述函数名和所述类名同时对应的测试用例名,以获得所述第一测试用例。
获得第一测试用例的第一个示例
假设先前的源代码(例如存储在File1中)是图11的形式,针对该源代码运行4个测试用例(Testcase1,Testcase2,Testcase3和Testcase4),这4个测试用例与源代码之间建立的映射关系表例如为下表2的形式:
表2
测试用例名 行号 函数名 类名 文件名
Testcase1 4 Function1 class1 File1
Testcase1 5 Function1 class1 File1
Testcase1 6 Function1 class1 File1
Testcase1 7 Function1 class1 File1
Testcase2 4 Function1 class1 File1
Testcase2 5 Function1 class1 File1
Testcase2 6 Function1 class1 File1
Testcase2 7 Function1 class1 File1
Testcase3 10 Function2 class1 File1
Testcase3 11 Function2 class1 File1
Testcase3 12 Function2 class1 File1
Testcase3 13 Function2 class1 File1
Testcase4 19 Function5 class2 File1
Testcase4 20 Function5 class2 File1
Testcase4 21 Function5 class2 File1
Testcase4 22 Function5 class2 File1
如果图11中的class1的源代码变为图12的形式,也即在函数Function1中添加了一行代码i++,则可以利用下面的过程来获得第一测试用例:
1.利用比较工具(例如DiffMerge工具)获得变更集(如图13所示),并将该变更集导出到例如文本文件中(如图14所示);
2.通过分析此文本文件,可以得出:当前的源代码中,文件File1(即FileName=File1)第5行(即LineNumber=5)后面代码发生了变化,也即添加了一行代码i++;
3.利用LineNumber=5,FileName=File1到上面的表2的映射关系中查找相应的记录(此例中能查到),从而获知代码发生变化的函数名是Function1,类名是class1;
4.在表2中获取与文件名File1、函数名Function1和类名class1同时对应的测试用例名,该示例中通过表2可以知道,与代码变化相对应的测试用例是Testcase1和Testcase2(也即第一测试用例)。
这里的Testcase1和Testcase2也即第一测试用例,运行这两个测试用例就可以针对源代码的变化(该示例中是函数发生变化)进行相应的测试,而不需要运行所有的测试用例(例如表2中的Testcase1、Testcase2、Testcase3和Testcase4),从而提高了测试效率,也即可以取得尽量少的测试用例以覆盖所改变的源代码。
获得第一测试用例的第二个示例
与第一个示例类似,假设先前的源代码(例如存储在File1中)是图5的形式并建立了相应的映射关系表(此处省略),如果图5中的源代码变为图18的形式,也即在函数HelloWorld里增加了一行putsabc,则可以利用下面的过程来获得第一测试用例:
1.利用比较工具(例如Beyond Compare工具)获得变更集,并将该变更集导出到例如XML文件中,如图19所示;
2.通过分析此文本文件,可以得出:当前的源代码中,文件File1(即FileName=File1)第4行增加了“puts abc”(图19中方框所示);
3.利用LineNumber=4,FileName=File1到已建立的映射关系表中查找相应的记录,从而获知代码发生变化的函数名(HelloWorld)和类名(class1);
4.在已建立的映射关系表中获取与文件名File1、函数名HelloWorld和类名class1同时对应的测试用例名,也即第一测试用例。
根据本公开的一个实施例,分析所述变更集以获取针对所述变化的测试用例包括:在所述变化发生在类中时,根据所述映射关系获取映射到所述类中的第二测试用例。
例如,所述类中的变化包括在所述类中添加和/或删除函数。例如,可以在图10的步骤1007中判断源代码的变化是否发生在类中,如果是,则执行步骤1008获取映射到所述类中的第二测试用例。例如,在图10的步骤1007中,也可以先判断函数是否发生变化,在判断源代码的变化没有发生在函数中之后,再判断源代码的变化是否发生在类中,如果是,则执行步骤1008获取映射到所述类中的第二测试用例。
根据本公开的一个实施例,在所述变化发生在类中时,根据所述映射关系获取映射到所述类中的第二测试用例包括:根据所述变更集获得所述源代码发生变化的文件名和行号;利用所述文件名和行号查找所述源代码与测试用例之间建立的映射关系表,以获得发生变化的类名;以及在所述映射关系表中查找与所述文件名和所述类名同时对应的测试用例名,以获得所述第二测试用例。
获得第二测试用例的第一个例子
继续以上这对图11的源代码的示例,如果当前class1的源代码是如图15的形式,也即在类class1里添加了一个函数Function3,则可以利用下面的过程来获得第二测试用例:
1.利用比较工具(例如DiffMerge工具)获得变更集(如图16所示),并将该变更集导出到例如文本文件中(如图17所示);
2.通过分析此文本文件,可以得出:当前的源代码中,文件File1(即FileName=File1)第8行(即LineNumber=8)后面添加了一个函数名为Function3的函数(而函数Function1和Function2本身实际上并未发生变化);
3.利用LineNumber=8,FileName=File1到上面的表2的映射关系中查找相应的记录,从而获知代码发生变化的类名(此例中未查找到);此例中由于未查找到,但例如可以通过以下方式获取类名,也即通过查询表2可以获知,文件File1(FileName=File1)第8行(LineNumber=8)在文件File1的类class1中起始行第4行和结束行第13行之间,因此可以获得代码发生变化的类名是class1;
4.在表2中获取与文件名File1和类名class1同时对应的测试用例名,该示例中通过表2可以知道,与代码变化相对应的测试用例是Testcase1、Testcase2和Testcase3(也即第二测试用例)。
这里运行所获得的第二测试用例就可以针对源代码的变化(该示例中是类发生变化)进行相应的测试,而不需要运行所有的测试用例(例如表2中的Testcase1、Testcase2、Testcase3和Testcase4),从而提高了测试效率,也即可以取得尽量少的测试用例以覆盖所改变的源代码。
获得第二测试用例的第二个例子
与第一个例子类似,假设先前的源代码(例如存储在File1中)是图20的形式并建立了相应的映射关系表(此处省略),如果图20中的源代码变为图21的形式,也即在类class1里增加了一个函数HelloWorld2,则可以利用下面的过程来获得第二测试用例:
1.利用比较工具(例如Beyond Compare工具)获得变更集,并将该变更集导出到例如XML文件中,如图22所示;
2.通过分析此XML文件,可以得出:当前的源代码中,文件File1(即FileName=File1)第6-9行增加了函数“HelloWorld2”(如图22方框所示);
3.利用LineNumber=6,FileName=File1到已建立的映射关系表中查找相应的记录,从而获知代码发生变化的类名(class1);
4.在已建立的映射关系表中获取与文件名File1和类名class1同时对应的测试用例名,也即第二测试用例。
根据本公开的一个实施例,还包括:运行所述第一测试用例和所述第二测试用例之间的并集。
例如,在图10的步骤1009中,可以将针对函数发生变化而获取的第一测试用例,与针对类发生变化而获取的第二测试用例,合并起来,然后将并集中的测试用例在源代码上运行,从而覆盖源代码的所有变化,提高了软件测试的效率,也即可以取得尽量少的测试用例以覆盖所改变的源代码。
如图23所示,本公开的实施例还提供了一种基于代码覆盖率获取测试用例的设备,包括:建立装置2301,用于根据代码覆盖率建立源代码与测试用例之间的映射关系;以及获取装置2302,用于在所述源代码变化时,根据所述映射关系获取针对所述变化的测试用例。
根据本公开的一个实施例,建立装置2301包括:用于利用代码覆盖率工具生成在所述源代码上运行所述测试用例之后的运行报告的装置;以及用于根据所述运行报告,获得所述源代码与所述测试用例之间的映射关系的装置。
根据本公开的一个实施例,用于利用代码覆盖率工具生成在所述源代码上运行所述测试用例之后的运行报告的装置包括:用于在所述源代码上运行每个测试用例之后,利用所述代码覆盖率工具生成针对每个测试用例的运行报告的装置。
根据本公开的一个实施例,用于根据所述运行报告,获得所述源代码与所述测试用例之间的映射关系的装置包括:用于根据所述运行报告,建立所述测试用例与所述源代码中行号、函数名、类名和文件名之间的映射关系表的装置。
根据本公开的一个实施例,用于根据所述运行报告建立所述测试用例与所述源代码中行号、函数名、类名和文件名之间的映射关系表的装置包括:用于针对运行每个测试用例后生成的运行报告进行信息抽取,以获得每个测试用例与所述源代码中相应的行号、函数名、类名和文件名之间的映射关系表的装置。
根据本公开的一个实施例,用于针对运行每个测试用例后生成的运行报告进行信息抽取,以获得每个测试用例与所述源代码中相应的行号、函数名、类名和文件名之间的映射关系表的装置包括:用于读取所述运行报告,以获得所述源代码的行号、函数名、类名和文件名的装置;以及用于将所述测试用例、所获得的行号、函数名、类名、文件名存储到数据库的映射关系表中的装置。
根据本公开的一个实施例,建立装置2301包括:用于针对所述源代码执行测试用例储存库中的所有测试用例以获得所述代码覆盖率的装置。
根据本公开的一个实施例,用于针对所述源代码执行测试用例储存库中的所有测试用例以获得所述代码覆盖率的装置包括:用于在所有测试用例未覆盖全部源代码时,针对未覆盖的源代码添加新的测试用例到所述测试用例储存库中的装置。
根据本公开的一个实施例,建立装置2301包括:用于将所述映射关系存储在利用统一建模语言建模的数据库中的装置。
根据本公开的一个实施例,获取装置2302包括:用于获取所述源代码变化时的变更集的装置。
根据本公开的一个实施例,用于获取所述源代码变化时的变更集的装置包括:用于利用比较工具获取所述源代码变化时相对于先前存储的源代码之间的变更集的装置。
根据本公开的一个实施例,获取装置2302包括:用于分析所述变更集以获取针对所述变化的测试用例的装置。
根据本公开的一个实施例,用于分析所述变更集以获取针对所述变化的测试用例的装置包括:用于在所述变化发生在函数中时,根据所述映射关系获取映射到所述函数中的第一测试用例的装置。
根据本公开的一个实施例,用于在所述变化发生在函数中时,根据所述映射关系获取映射到所述函数中的第一测试用例的装置包括:用于根据所述变更集获得所述源代码发生变化的文件名和行号的装置;用于利用所述文件名和行号查找所述源代码与测试用例之间建立的映射关系表,以获得发生变化的函数名和类名的装置;以及用于在所述映射关系表中查找与所述文件名、所述函数名和所述类名同时对应的测试用例名,以获得所述第一测试用例的装置。
根据本公开的一个实施例,用于分析所述变更集以获取针对所述变化的测试用例的装置包括:用于在所述变化发生在类中时,根据所述映射关系获取映射到所述类中的第二测试用例的装置。
根据本公开的一个实施例,用于在所述变化发生在类中时,根据所述映射关系获取映射到所述类中的第二测试用例的装置包括:用于根据所述变更集获得所述源代码发生变化的文件名和行号的装置;用于利用所述文件名和行号查找所述源代码与测试用例之间建立的映射关系表,以获得发生变化的类名的装置;以及用于在所述映射关系表中查找与所述文件名和所述类名同时对应的测试用例名,以获得所述第二测试用例的装置。
根据本公开的一个实施例,还包括:用于运行所述第一测试用例和所述第二测试用例之间的并集的装置。
应当理解,本公开的以上设备和装置可以通过硬件、软件或者软件和硬件的结合来实现。其中,硬件部分可以利用专用逻辑来实现;软件部分则可以存储在存储器中,由适当的指令执行***,例如微处理器或者专用设计硬件来执行。本领域的普通技术人员可以理解上述的方法和***可以使用计算机可执行指令和/或包含在处理器控制代码中来实现,例如在诸如磁盘、CD或DVD-ROM的载体介质、诸如只读存储器(固件)的可编程的存储器或者诸如光学或电子信号载体的数据载体上提供了这样的代码。本公开的实施例的设备和装置不仅可以由诸如超大规模集成电路或门阵列、诸如逻辑芯片、晶体管等的半导体、或者诸如现场可编程门阵列、可编程逻辑设备等的可编程硬件设备的硬件电路实现,也可以用例如由各种类型的处理器所执行的软件实现,还可以由上述硬件电路和软件的结合(例如固件)来实现。
应当注意,尽管在上文的详细描述中提及了设备的若干装置或子装置,但是这种划分仅仅是示例性而非强制性的。实际上,根据本公开的实施例,上文描述的两个或更多装置的特征和功能可以在一个装置中具体化。反之,上文描述的一个装置的特征和功能可以进一步划分为由多个装置来具体化。
本公开还提供了一种计算机程序产品,包括具体化于其中的计算机可读程序指令,所述计算机可读程序指令在由处理器执行时,引起所述处理器执行以上所述的方法。
通过以上描述和相关附图中所给出的教导,这里所给出的本公开的许多修改形式和其它实施方式将被本公开相关领域的技术人员所意识到。因此,所要理解的是,本公开的实施方式并不局限于所公开的具体实施方式,并且修改形式和其它实施方式意在包括在本公开的范围之内。此外,虽然以上描述和相关附图在部件和/或功能的某些示例组合形式的背景下对示例实施方式进行了描述,但是应当意识到的是,可以由备选实施方式提供部件和/或功能的不同组合形式而并不背离本公开的范围。就这点而言,例如,与以上明确描述的有所不同的部件和/或功能的其它组合形式也被预期处于本公开的范围之内。虽然这里采用了具体术语,但是它们仅以一般且描述性的含义所使用而并非意在进行限制。

Claims (35)

1.一种基于代码覆盖率获取测试用例的方法,包括:
根据代码覆盖率建立源代码与测试用例之间的映射关系;以及
在所述源代码变化时,根据所述映射关系获取针对所述变化的测试用例。
2.根据权利要求1所述的方法,其中,根据代码覆盖率建立源代码与测试用例之间的映射关系包括:
利用代码覆盖率工具生成在所述源代码上运行所述测试用例之后的运行报告;以及
根据所述运行报告,获得所述源代码与所述测试用例之间的映射关系。
3.根据权利要求2所述的方法,其中,利用代码覆盖率工具生成在所述源代码上运行所述测试用例之后的运行报告包括:
在所述源代码上运行每个测试用例之后,利用所述代码覆盖率工具生成针对每个测试用例的运行报告。
4.根据权利要求2所述的方法,其中,根据所述运行报告,获得所述源代码与所述测试用例之间的映射关系包括:
根据所述运行报告,建立所述测试用例与所述源代码中行号、函数名、类名和文件名之间的映射关系表。
5.根据权利要求4所述的方法,其中,根据所述运行报告建立所述测试用例与所述源代码中行号、函数名、类名和文件名之间的映射关系表包括:
针对运行每个测试用例后生成的运行报告进行信息抽取,以获得每个测试用例与所述源代码中相应的行号、函数名、类名和文件名之间的映射关系表。
6.根据权利要求5所述的方法,其中,针对运行每个测试用例后生成的运行报告进行信息抽取,以获得每个测试用例与所述源代码中相应的行号、函数名、类名和文件名之间的映射关系表包括:
读取所述运行报告,以获得所述源代码的行号、函数名、类名和文件名;以及
将所述测试用例、所获得的行号、函数名、类名、文件名存储到数据库的映射关系表中。
7.根据权利要求1所述的方法,其中,根据代码覆盖率建立源代码与测试用例之间的映射关系包括:
针对所述源代码执行测试用例储存库中的所有测试用例以获得所述代码覆盖率。
8.根据权利要求7所述的方法,其中,针对所述源代码执行测试用例储存库中的所有测试用例以获得所述代码覆盖率包括:
在所有测试用例未覆盖全部源代码时,针对未覆盖的源代码添加新的测试用例到所述测试用例储存库中。
9.根据权利要求1所述的方法,其中,根据代码覆盖率建立源代码与测试用例之间的映射关系包括:
将所述映射关系存储在利用统一建模语言建模的数据库中。
10.根据权利要求1-9任一项所述的方法,其中,根据所述映射关系获取针对所述变化的测试用例包括:
获取所述源代码变化时的变更集。
11.根据权利要求10所述的方法,其中,获取所述源代码变化时的变更集包括:
利用比较工具获取所述源代码变化时相对于先前存储的源代码之间的变更集。
12.根据权利要求10所述的方法,其中,根据所述映射关系获取针对所述变化的测试用例包括:
分析所述变更集以获取针对所述变化的测试用例。
13.根据权利要求12所述的方法,其中,分析所述变更集以获取针对所述变化的测试用例包括:
在所述变化发生在函数中时,根据所述映射关系获取映射到所述函数中的第一测试用例。
14.根据权利要求13所述的方法,其中,在所述变化发生在函数中时,根据所述映射关系获取映射到所述函数中的第一测试用例包括:
根据所述变更集获得所述源代码发生变化的文件名和行号;
利用所述文件名和行号查找所述源代码与测试用例之间建立的映射关系表,以获得发生变化的函数名和类名;以及
在所述映射关系表中查找与所述文件名、所述函数名和所述类名同时对应的测试用例名,以获得所述第一测试用例。
15.根据权利要求13所述的方法,其中,分析所述变更集以获取针对所述变化的测试用例包括:
在所述变化发生在类中时,根据所述映射关系获取映射到所述类中的第二测试用例。
16.根据权利要求15所述的方法,其中,在所述变化发生在类中时,根据所述映射关系获取映射到所述类中的第二测试用例包括:
根据所述变更集获得所述源代码发生变化的文件名和行号;
利用所述文件名和行号查找所述源代码与测试用例之间建立的映射关系表,以获得发生变化的类名;以及
在所述映射关系表中查找与所述文件名和所述类名同时对应的测试用例名,以获得所述第二测试用例。
17.根据权利要求15所述的方法,还包括:
运行所述第一测试用例和所述第二测试用例之间的并集。
18.一种基于代码覆盖率获取测试用例的设备,包括:
建立装置,用于根据代码覆盖率建立源代码与测试用例之间的映射关系;以及
获取装置,用于在所述源代码变化时,根据所述映射关系获取针对所述变化的测试用例。
19.根据权利要求18所述的设备,其中,所述建立装置包括:
用于利用代码覆盖率工具生成在所述源代码上运行所述测试用例之后的运行报告的装置;以及
用于根据所述运行报告,获得所述源代码与所述测试用例之间的映射关系的装置。
20.根据权利要求19所述的设备,其中,用于利用代码覆盖率工具生成在所述源代码上运行所述测试用例之后的运行报告的装置包括:
用于在所述源代码上运行每个测试用例之后,利用所述代码覆盖率工具生成针对每个测试用例的运行报告的装置。
21.根据权利要求19所述的设备,其中,用于根据所述运行报告,获得所述源代码与所述测试用例之间的映射关系的装置包括:
用于根据所述运行报告,建立所述测试用例与所述源代码中行号、函数名、类名和文件名之间的映射关系表的装置。
22.根据权利要求21所述的设备,其中,用于根据所述运行报告建立所述测试用例与所述源代码中行号、函数名、类名和文件名之间的映射关系表的装置包括:
用于针对运行每个测试用例后生成的运行报告进行信息抽取,以获得每个测试用例与所述源代码中相应的行号、函数名、类名和文件名之间的映射关系表的装置。
23.根据权利要求22所述的设备,其中,用于针对运行每个测试用例后生成的运行报告进行信息抽取,以获得每个测试用例与所述源代码中相应的行号、函数名、类名和文件名之间的映射关系表的装置包括:
用于读取所述运行报告,以获得所述源代码的行号、函数名、类名和文件名的装置;以及
用于将所述测试用例、所获得的行号、函数名、类名、文件名存储到数据库的映射关系表中的装置。
24.根据权利要求18所述的设备,其中,所述建立装置包括:
用于针对所述源代码执行测试用例储存库中的所有测试用例以获得所述代码覆盖率的装置。
25.根据权利要求24所述的设备,其中,用于针对所述源代码执行测试用例储存库中的所有测试用例以获得所述代码覆盖率的装置包括:
用于在所有测试用例未覆盖全部源代码时,针对未覆盖的源代码添加新的测试用例到所述测试用例储存库中的装置。
26.根据权利要求18所述的设备,其中,所述建立装置包括:
用于将所述映射关系存储在利用统一建模语言建模的数据库中的装置。
27.根据权利要求18-26任一项所述的设备,其中,所述获取装置包括:
用于获取所述源代码变化时的变更集的装置。
28.根据权利要求27所述的设备,其中,用于获取所述源代码变化时的变更集的装置包括:
用于利用比较工具获取所述源代码变化时相对于先前存储的源代码之间的变更集的装置。
29.根据权利要求27所述的设备,其中,所述获取装置包括:
用于分析所述变更集以获取针对所述变化的测试用例的装置。
30.根据权利要求29所述的设备,其中,用于分析所述变更集以获取针对所述变化的测试用例的装置包括:
用于在所述变化发生在函数中时,根据所述映射关系获取映射到所述函数中的第一测试用例的装置。
31.根据权利要求30所述的设备,其中,用于在所述变化发生在函数中时,根据所述映射关系获取映射到所述函数中的第一测试用例的装置包括:
用于根据所述变更集获得所述源代码发生变化的文件名和行号的装置;
用于利用所述文件名和行号查找所述源代码与测试用例之间建立的映射关系表,以获得发生变化的函数名和类名的装置;以及
用于在所述映射关系表中查找与所述文件名、所述函数名和所述类名同时对应的测试用例名,以获得所述第一测试用例的装置。
32.根据权利要求30所述的设备,其中,用于分析所述变更集以获取针对所述变化的测试用例的装置包括:
用于在所述变化发生在类中时,根据所述映射关系获取映射到所述类中的第二测试用例的装置。
33.根据权利要求32所述的设备,其中,用于在所述变化发生在类中时,根据所述映射关系获取映射到所述类中的第二测试用例的装置包括:
用于根据所述变更集获得所述源代码发生变化的文件名和行号的装置;
用于利用所述文件名和行号查找所述源代码与测试用例之间建立的映射关系表,以获得发生变化的类名的装置;以及
用于在所述映射关系表中查找与所述文件名和所述类名同时对应的测试用例名,以获得所述第二测试用例的装置。
34.根据权利要求32所述的设备,还包括:
用于运行所述第一测试用例和所述第二测试用例之间的并集的装置。
35.一种计算机程序产品,包括具体化于其中的计算机可读程序指令,所述计算机可读程序指令在由处理器执行时,引起所述处理器执行根据权利要求1至17中任一项所述的方法。
CN201510622723.XA 2015-09-25 2015-09-25 基于代码覆盖率获取测试用例的方法和设备 Pending CN106557413A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201510622723.XA CN106557413A (zh) 2015-09-25 2015-09-25 基于代码覆盖率获取测试用例的方法和设备
US15/271,347 US10372594B2 (en) 2015-09-25 2016-09-21 Method and device for retrieving test case based on code coverage

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510622723.XA CN106557413A (zh) 2015-09-25 2015-09-25 基于代码覆盖率获取测试用例的方法和设备

Publications (1)

Publication Number Publication Date
CN106557413A true CN106557413A (zh) 2017-04-05

Family

ID=58415749

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510622723.XA Pending CN106557413A (zh) 2015-09-25 2015-09-25 基于代码覆盖率获取测试用例的方法和设备

Country Status (2)

Country Link
US (1) US10372594B2 (zh)
CN (1) CN106557413A (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109388566A (zh) * 2018-09-27 2019-02-26 北京城市网邻信息技术有限公司 一种代码覆盖率分析方法、装置、设备及存储介质
CN109857631A (zh) * 2018-11-02 2019-06-07 平安科技(深圳)有限公司 基于人工智能的代码覆盖率统计方法、装置、设备及存储介质
CN110442370A (zh) * 2019-07-30 2019-11-12 北京奇艺世纪科技有限公司 一种测试用例查询方法及装置
CN110574005A (zh) * 2017-02-01 2019-12-13 西门子工业软件有限责任公司 用于验证软件程序的方法和***
CN110941555A (zh) * 2019-11-26 2020-03-31 广州品唯软件有限公司 测试用例推荐方法、装置、计算机设备和存储介质
CN111221737A (zh) * 2020-01-09 2020-06-02 苏州洞察云信息技术有限公司 一种覆盖率确定方法、装置及存储介质
CN112783800A (zh) * 2021-03-19 2021-05-11 北京奇艺世纪科技有限公司 一种测试用例筛选方法及装置
CN113626325A (zh) * 2021-08-05 2021-11-09 杭州遥望网络科技有限公司 一种代码迭代更新中的接口测试方法、装置及设备

Families Citing this family (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10210076B2 (en) 2016-09-26 2019-02-19 International Business Machines Corporation White box testing
CN109308254B (zh) * 2017-07-28 2022-06-03 阿里巴巴集团控股有限公司 一种测试方法、装置及测试设备
US10162740B1 (en) * 2017-11-07 2018-12-25 Fmr Llc Automated intelligent execution of computer software test cases
CN110196801B (zh) * 2018-02-24 2022-11-11 武汉斗鱼网络科技有限公司 一种基于代码覆盖率的测试方法及装置
US10430319B1 (en) * 2018-05-04 2019-10-01 Fmr Llc Systems and methods for automatic software testing
CN109491919B (zh) * 2018-11-28 2021-10-26 中电科西北集团有限公司 一种软件测试方法及测试平台
US11010282B2 (en) 2019-01-24 2021-05-18 International Business Machines Corporation Fault detection and localization using combinatorial test design techniques while adhering to architectural restrictions
US11010285B2 (en) 2019-01-24 2021-05-18 International Business Machines Corporation Fault detection and localization to generate failing test cases using combinatorial test design techniques
US11099975B2 (en) 2019-01-24 2021-08-24 International Business Machines Corporation Test space analysis across multiple combinatoric models
US11263116B2 (en) 2019-01-24 2022-03-01 International Business Machines Corporation Champion test case generation
US11106567B2 (en) 2019-01-24 2021-08-31 International Business Machines Corporation Combinatoric set completion through unique test case generation
CN110069414B (zh) * 2019-04-25 2023-05-30 浙江吉利控股集团有限公司 回归测试方法及***
US10970197B2 (en) 2019-06-13 2021-04-06 International Business Machines Corporation Breakpoint value-based version control
US11422924B2 (en) 2019-06-13 2022-08-23 International Business Machines Corporation Customizable test set selection using code flow trees
US10970195B2 (en) 2019-06-13 2021-04-06 International Business Machines Corporation Reduction of test infrastructure
US11232020B2 (en) 2019-06-13 2022-01-25 International Business Machines Corporation Fault detection using breakpoint value-based fingerprints of failing regression test cases
US10963366B2 (en) 2019-06-13 2021-03-30 International Business Machines Corporation Regression test fingerprints based on breakpoint values
US11036624B2 (en) 2019-06-13 2021-06-15 International Business Machines Corporation Self healing software utilizing regression test fingerprints
US10990510B2 (en) 2019-06-13 2021-04-27 International Business Machines Corporation Associating attribute seeds of regression test cases with breakpoint value-based fingerprints
CN110413506B (zh) * 2019-06-19 2023-02-03 平安普惠企业管理有限公司 测试用例推荐方法、装置、设备及存储介质
CN110716870B (zh) * 2019-09-23 2023-01-31 中国建设银行股份有限公司 服务的自动化测试方法及装置
CN110659293B (zh) * 2019-09-24 2022-02-11 支付宝(杭州)信息技术有限公司 基于变更代码的数据表确定方法以及装置
CN113094252B (zh) * 2019-12-23 2023-09-29 腾讯科技(深圳)有限公司 测试用例生成方法、装置、计算机设备及存储介质
CN113220560A (zh) * 2020-01-21 2021-08-06 百度在线网络技术(北京)有限公司 一种代码测试方法、装置、电子设备及存储介质
CN111400164B (zh) * 2020-02-07 2023-05-26 浙江口碑网络技术有限公司 一种软件测试方法及装置
WO2022022838A1 (en) * 2020-07-31 2022-02-03 Telefonaktiebolaget Lm Ericsson (Publ) Machine-learning based software testing technique
CN112256556A (zh) * 2020-09-11 2021-01-22 上海汇付数据服务有限公司 利用测试用例进行的测试方法及测试装置
CN113094283A (zh) * 2021-04-29 2021-07-09 平安国际智慧城市科技股份有限公司 一种数据获取方法、装置、设备及存储介质
US20230004484A1 (en) * 2021-06-30 2023-01-05 Fmr Llc Systems and Methods for Impact-Centric Source Code Testing Based on Historical Execution Analysis
CN114490424A (zh) * 2022-02-24 2022-05-13 北京启明星辰信息安全技术有限公司 自动化测试方法及装置
CN114880242B (zh) * 2022-06-08 2023-01-13 北京百度网讯科技有限公司 测试用例的提取方法、装置、设备和介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103034582A (zh) * 2011-09-28 2013-04-10 腾讯科技(深圳)有限公司 定位回归用例的方法和***
US20130111267A1 (en) * 2011-11-01 2013-05-02 International Business Machines Corporation Optimizing regression testing based on code coverage analysis
CN103176895A (zh) * 2011-12-22 2013-06-26 阿里巴巴集团控股有限公司 一种回归测试方法和***
CN104657256A (zh) * 2013-11-19 2015-05-27 阿里巴巴集团控股有限公司 一种收集用例与代码之间映射关系的方法和装置

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100228804A1 (en) * 2009-03-04 2010-09-09 Yahoo! Inc. Constructing image captchas utilizing private information of the images
US10089217B2 (en) * 2014-09-23 2018-10-02 Red Hat, Inc. Identification of software test cases
US9703690B2 (en) * 2015-01-22 2017-07-11 International Business Machines Corporation Determining test case efficiency
US9720813B2 (en) * 2015-08-13 2017-08-01 Ca, Inc. Method and apparatus for recommending regression tests

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103034582A (zh) * 2011-09-28 2013-04-10 腾讯科技(深圳)有限公司 定位回归用例的方法和***
US20130111267A1 (en) * 2011-11-01 2013-05-02 International Business Machines Corporation Optimizing regression testing based on code coverage analysis
CN103176895A (zh) * 2011-12-22 2013-06-26 阿里巴巴集团控股有限公司 一种回归测试方法和***
CN104657256A (zh) * 2013-11-19 2015-05-27 阿里巴巴集团控股有限公司 一种收集用例与代码之间映射关系的方法和装置

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110574005A (zh) * 2017-02-01 2019-12-13 西门子工业软件有限责任公司 用于验证软件程序的方法和***
US10929108B2 (en) 2017-02-01 2021-02-23 Siemens Industry Software Nv Methods and systems for verifying a software program
CN109388566A (zh) * 2018-09-27 2019-02-26 北京城市网邻信息技术有限公司 一种代码覆盖率分析方法、装置、设备及存储介质
CN109857631A (zh) * 2018-11-02 2019-06-07 平安科技(深圳)有限公司 基于人工智能的代码覆盖率统计方法、装置、设备及存储介质
CN110442370A (zh) * 2019-07-30 2019-11-12 北京奇艺世纪科技有限公司 一种测试用例查询方法及装置
CN110941555A (zh) * 2019-11-26 2020-03-31 广州品唯软件有限公司 测试用例推荐方法、装置、计算机设备和存储介质
CN111221737A (zh) * 2020-01-09 2020-06-02 苏州洞察云信息技术有限公司 一种覆盖率确定方法、装置及存储介质
CN111221737B (zh) * 2020-01-09 2023-11-14 苏州洞察云信息技术有限公司 一种覆盖率确定方法、装置及存储介质
CN112783800A (zh) * 2021-03-19 2021-05-11 北京奇艺世纪科技有限公司 一种测试用例筛选方法及装置
CN112783800B (zh) * 2021-03-19 2023-09-05 北京奇艺世纪科技有限公司 一种测试用例筛选方法及装置
CN113626325A (zh) * 2021-08-05 2021-11-09 杭州遥望网络科技有限公司 一种代码迭代更新中的接口测试方法、装置及设备

Also Published As

Publication number Publication date
US10372594B2 (en) 2019-08-06
US20170132119A1 (en) 2017-05-11

Similar Documents

Publication Publication Date Title
CN106557413A (zh) 基于代码覆盖率获取测试用例的方法和设备
US10901709B2 (en) Partitioning based migration of systems to container and microservice based platforms
Xu et al. Detecting large-scale system problems by mining console logs
Xiao et al. Precise identification of problems for structural test generation
Dallmeier et al. Mining object behavior with ADABU
US9098635B2 (en) Method and system for testing and analyzing user interfaces
US8359584B2 (en) Debugging from a call graph
Mariani et al. Dynamic detection of cots component incompatibility
US8904358B1 (en) Methods, systems, and articles of manufacture for synchronizing software verification flows
Hoschele et al. Mining input grammars with AUTOGRAM
CN102023861A (zh) 测试脚本及测试套件生成的方法和***
EP2975527A2 (en) A method for tracing computer software
Haller et al. Mempick: High-level data structure detection in c/c++ binaries
US9304893B1 (en) Integrated software development and test case management system
US11436133B2 (en) Comparable user interface object identifications
CN108710571A (zh) 一种生成自动化测试代码的方法和装置
Xu System problem detection by mining console logs
Haller et al. Scalable data structure detection and classification for C/C++ binaries
CN106293687B (zh) 一种打包流程的控制方法,及装置
EP2713277B1 (en) Latent defect identification
EP2972880B1 (en) Kernel functionality checker
Lavoie et al. A case study of TTCN-3 test scripts clone analysis in an industrial telecommunication setting
JP2009087353A (ja) 公開異種分散型アプリケーションから非公開同種非分散型アプリケーションを生成するシステム及び方法
Eichinger et al. Software-bug localization with graph mining
Dalton et al. A toolkit for visualizing the runtime behavior of TinyOS applications

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
TA01 Transfer of patent application right

Effective date of registration: 20200417

Address after: Massachusetts, USA

Applicant after: EMC IP Holding Company LLC

Address before: Ma Sazhusaizhou

Applicant before: EMC Corp.

TA01 Transfer of patent application right
RJ01 Rejection of invention patent application after publication

Application publication date: 20170405

RJ01 Rejection of invention patent application after publication