CN106294109A - 获取缺陷代码的方法及装置 - Google Patents

获取缺陷代码的方法及装置 Download PDF

Info

Publication number
CN106294109A
CN106294109A CN201510283048.2A CN201510283048A CN106294109A CN 106294109 A CN106294109 A CN 106294109A CN 201510283048 A CN201510283048 A CN 201510283048A CN 106294109 A CN106294109 A CN 106294109A
Authority
CN
China
Prior art keywords
code
coverage
information
defect
tested
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.)
Granted
Application number
CN201510283048.2A
Other languages
English (en)
Other versions
CN106294109B (zh
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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201510283048.2A priority Critical patent/CN106294109B/zh
Publication of CN106294109A publication Critical patent/CN106294109A/zh
Application granted granted Critical
Publication of CN106294109B publication Critical patent/CN106294109B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种获取缺陷代码的方法及装置,属于软件测试领域。所述方法包括:通过代码覆盖率工具对被测试代码进行覆盖率测试;当所述被测试代码执行异常时,获取所述代码覆盖率工具生成的代码覆盖信息;根据所述代码覆盖信息,将所述被测试代码中被执行在异常时间之前的一段时间内的代码获取为缺陷代码。本发明通过代码覆盖率工具对被测试代码进行覆盖率测试,在被测试代码执行异常时,根据代码覆盖率工具生成的代码覆盖信息,将被测试代码中被执行在异常时间之前的一段时间内的代码获取为缺陷代码,测试人员不需要人工排查所有可能发生异常的代码,从而达到提高软件测试准确性和效率的效果。

Description

获取缺陷代码的方法及装置
技术领域
本发明涉及软件测试领域,特别涉及一种获取缺陷代码的方法及装置。
背景技术
软件测试是指在规定的条件下对软件程序进行操作,以发现程序异常,衡量软件质量,并对其是否满足设计要求进行评估的过程。
在相关的软件测试过程中,发现程序异常时,通常由测试人员进行代码的排查。比如,当被测试代码运行发生异常时,测试人员可以分析打印出的异常日志,确定可能发生异常的代码,并对所有可能发生异常的代码进行人工排查,以确定代码中的缺陷。
相关技术中,在发现程序异常时需要测试人员对所有可能发生异常的代码行进行人工排查,对测试人员的代码分析能力要求较高,导致软件测试的准确性和效率较低。
发明内容
为了解决相关技术发现程序异常时需要测试人员对所有可能发生异常的代码行进行人工排查,导致软件测试的准确性和效率较低的问题,本发明实施例提供了一种获取缺陷代码的方法及装置。所述技术方案如下:
第一方面,提供了一种获取缺陷代码的方法,所述方法包括:
通过代码覆盖率工具对被测试代码进行覆盖率测试;
当所述被测试代码执行异常时,获取所述代码覆盖率工具生成的代码覆盖信息,所述代码覆盖信息用于指示所述被测试代码中被执行的代码行;
根据所述代码覆盖信息,将所述被测试代码中被执行在异常时间之前的一段时间内的代码获取为缺陷代码,所述异常时间为所述被测试代码执行异常的时间点。
第二方面,提供了一种获取缺陷代码的装置,所述装置包括:
覆盖率测试模块,用于通过代码覆盖率工具对被测试代码进行覆盖率测试;
覆盖信息获取模块,用于当所述被测试代码执行异常时,获取所述代码覆盖率工具生成的代码覆盖信息,所述代码覆盖信息用于指示所述被测试代码中被执行的代码行;
缺陷代码获取模块,用于根据所述代码覆盖信息,将所述被测试代码中被执行在异常时间之前的一段时间内的代码获取为缺陷代码,所述异常时间为所述被测试代码执行异常的时间点。
本发明实施例提供的技术方案带来的有益效果包括:
通过代码覆盖率工具对被测试代码进行覆盖率测试,在被测试代码执行异常时,根据代码覆盖率工具生成的代码覆盖信息,将被测试代码中被执行在异常时间之前的一段时间内的代码获取为缺陷代码,该缺陷代码仅仅是发生异常的时间点之前一小段时间内执行的代码,测试人员只需要排查这部分代码即可以确定代码中存在的缺陷,不需要人工排查所有可能发生异常的代码,从而达到提高软件测试准确性和效率的效果。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一个实施例提供的获取缺陷代码的方法的流程图;
图2是本发明另一个实施例提供的获取缺陷代码的方法的流程图;
图3是本发明又一个实施例提供的获取缺陷代码的方法的流程图
图4是本发明又一个实施例提供的缺陷代码展示示意图;
图5是本发明一个实施例提供的获取缺陷代码的装置的结构方框图;
图6是本发明另一实施例提供的获取缺陷代码的装置的结构方框图;
图7是本发明一个实施例提供的终端的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
请参考图1,其示出了本发明一个实施例提供的获取缺陷代码的方法的流程图。该获取缺陷代码的方法可以应用于软件测试终端中。该获取缺陷代码的方法可以包括如下几个步骤:
步骤102,通过代码覆盖率工具对被测试代码进行覆盖率测试。
步骤104,当被测试代码执行异常时,获取代码覆盖率工具生成的代码覆盖信息,该代码覆盖信息用于指示被测试代码中被执行的代码行。
步骤106,根据上述代码覆盖信息,将被测试代码中被执行在异常时间之前的一段时间内的代码获取为缺陷代码,该异常时间为被测试代码执行异常的时间点。
综上所述,本实施例提供的获取缺陷代码的方法,通过代码覆盖率工具对被测试代码进行覆盖率测试,在被测试代码执行异常时,根据代码覆盖率工具生成的代码覆盖信息,将被测试代码中被执行在异常时间之前的一段时间内的代码获取为缺陷代码,该缺陷代码仅仅是发生异常的时间点之前一小段时间内执行的代码,测试人员只需要排查这部分代码即可以确定代码中存在的缺陷,不需要人工排查所有可能发生异常的代码,从而达到提高软件测试准确性和效率的效果。
请参考图2,其示出了本发明另一实施例提供的获取缺陷代码的方法的流程图。该获取缺陷代码的方法可以应用于软件测试终端中。该获取缺陷代码的方法可以包括如下几个步骤:
步骤201,通过代码覆盖率工具对待测试代码进行插桩编译。
代码覆盖是软件测试中的一种度量,描述程式中源代码被测试的比例和程度,所得比例称为代码覆盖率,其常常被作为衡量测试好坏的指标。
代码覆盖率可以通过代码覆盖率工具进行测量,代码覆盖率测试的步骤可以如下:
1、代码覆盖率工具在待测试代码的每一行中插入“探针”(也称为“探测仪”)。
2、被测试代码执行一测试用例的过程中,当被测试代码中的某一行代码被执行时,该行代码中插入的“探针”即输出该行代码的行信息以及执行时间。
3、代码覆盖率工具收集并存储各个“探针”输出的代码覆盖信息,后续由人工或者自动分析获得被测试代码执行测试用例时的代码覆盖率。
本发明实施例所示的方法中,测试终端对被测试代码进行测试之前,首先通过代码覆盖率工具在被测试代码中插桩。
步骤202,从测试用例列表中提取一条测试用例,由被测试代码执行该测试用例。
测试用例是指为某个特殊目标而编制的一组测试输入、执行条件以及预期结果的集合,以便测试某个程序路径,或者核实程序是否满足某个特定需求。比如,以对某一软件程序的账号登录功能进行测试为例,测试人员可以针对不同的登录情形分别设置特定的测试用例,每一条测试用例用于测试一个特定的登录情形。
步骤203,判断被测试代码执行过程中是否发生异常;若是,进入步骤204,否则,进入步骤207;
当测试终端判断出被测试代码在执行当前测试用例的过程中崩溃或者报错,或者,被测试代码执行当前测试用例的执行结果与测试人员设置的预期结果不一致,则可以认为被测试代码执行异常,此时进入步骤206。
步骤204,停止执行当前测试用例,并提取代码覆盖率工具生成的代码覆盖信息。
经过代码覆盖率工具插桩后的被测试代码在执行过程中,代码覆盖率工具会不断的收集并存储被测试代码插入的“探针”输出的代码覆盖信息,并将代码覆盖信息存储在特定文件中。
测试终端在判断出被测试代码发生异常时,立刻停止被测试代码的执行进程,并从覆盖率工具存储的特定文件中提取出代码覆盖信息。
本发明实施例中,提取代码覆盖率工具生成的代码覆盖信息的方式可以如下:
1、获取该代码覆盖率工具的标识。
其中,该代码覆盖率工具的标识可以是代码覆盖率工具的名称,可选的,还可以包括该代码覆盖率工具的版本号。
2、根据该代码覆盖率工具的标识,从预先存储的配置文件查询该代码覆盖率工具生成的代码覆盖文件的存储信息,该存储信息包括存储路径、文件名以及文件格式,该配置文件中包含该代码覆盖率工具的标识以及该存储信息之间的对应关系。
代码覆盖率工具的种类有很多,不同名称甚至不同版本的代码覆盖率工具之间,存储代码覆盖信息的路径以及存储格式都可能不一样。
比如,以第i行代码被连续执行两次时的覆盖信息为例,
代码覆盖率工具A存储的格式可以如下:
“Code line i;
Code line i;”
而另一代码覆盖率工具B存储的格式可以为:
“Code line i×2”。
由此可见,对于不同的代码覆盖率工具,需要不同的提取方法才可以提取到准确的代码覆盖信息。因此,为了兼容各种不同的代码覆盖率工具,本发明实施例可以预先存储一个配置文件,用于存储各个代码覆盖率工具的标识与该代码覆盖率工具存储代码覆盖信息时的存储路径以及文件格式等存储信息之间的对应关系。
3、根据存储信息从代码覆盖文件中提取该代码覆盖信息。
在根据代码覆盖率工具的标识确定存储信息后,可以根据存储信息中包含的存储路径确定存储代码覆盖信息的文件,并按照存储信息中的存储格式将该文件中的信息提取为执行格式的信息。
需要说明的是,上述步骤1和2可以在通过代码覆盖率工具对待测试软件的代码进行插桩编译是就执行,也可以在被测试代码执行过程中首次发生异常并需要提取代码覆盖信息时执行。上述步骤3需要在被测试代码每次发生异常时执行。
步骤205,根据该代码覆盖信息,将被测试代码中被执行在异常时间之前的一段时间内的代码获取为缺陷代码,该异常时间为被测试代码执行异常的时间点。
测试终端在获取缺陷代码时,可以确定执行时间在该异常时间之前,且满足预定条件的代码的行信息,并将被测试代码中,与满足预定条件的代码的行信息相对应的代码获取为缺陷代码。
具体的,在确定执行时间在该异常时间之前,且满足预定条件的代码的行信息时,测试终端可以确定执行时间在该异常时间之前且距离该异常时间最近的,预定行数的代码的行信息;或者,测试终端也可以确定执行时间处于该异常时间之前的预定时间段内的,各行代码的行信息。
其中,测试终端只需要提取在被测试代码发生异常的时间点之前一小段时间内执行的代码作为缺陷代码。
测试终端可以按照行数提取缺陷代码,具体的,测试终端可以根据各行代码的执行时间,确定在异常时间前最近执行的预定行数的代码的行信息,比如,在异常时间之前最近执行的100行代码的行信息,并从代码库中拉取该100行代码的行信息所对应的具体代码,将拉取到的代码作为缺陷代码。
或者,测试终端也可以按照执行时间提取缺陷代码,具体的,测试终端可以确定在异常时间之前的预定时间段内,比如,在异常时间之前的1分钟内执行的所有代码的行信息,从代码库中拉取该1分钟内执行的代码的行信息所对应的具体代码,将拉取到的代码作为缺陷代码。
步骤206,输出缺陷代码。
测试终端输出包含该缺陷代码的Bug单,测试人员只需要根据输出的Bug对该缺陷代码进行分析排查即可以确定代码中的缺陷,不需要对被测试代码中所有可能发生异常的代码进行排查,由于测试终端只提取异常时间之前一小段时间内执行的代码,提取出的缺陷代码行数较少,能够极大的提高软件测试的效率和准确性。
步骤207,判断是否存在下一条测试用例。若是,进入步骤208,否则结束。
步骤208,提取下一条测试用例,由被测试代码执行该测试用例,并返回步骤203。
综上所述,本实施例提供的获取缺陷代码的方法,通过代码覆盖率工具对被测试代码进行覆盖率测试,在被测试代码执行异常时,根据代码覆盖率工具生成的代码覆盖信息,将被测试代码中被执行在异常时间之前的一段时间内的代码获取为缺陷代码,该缺陷代码仅仅是发生异常的时间点之前一小段时间内执行的代码,测试人员只需要排查这部分代码即可以确定代码中存在的缺陷,不需要人工排查所有可能发生异常的代码,从而达到提高软件测试准确性和效率的效果。
请参考图3,其示出了本发明又一实施例提供的获取缺陷代码的方法的流程图。该获取缺陷代码的方法可以应用于软件测试终端中。该获取缺陷代码的方法可以包括如下几个步骤:
步骤301,通过代码覆盖率工具对被测试代码进行覆盖率测试。
步骤302,当被测试代码执行异常时,获取代码覆盖率工具生成的代码覆盖信息,该代码覆盖信息用于指示被测试代码中被执行的代码行。
步骤303,根据上述代码覆盖信息,将被测试代码中被执行在异常时间之前的一段时间内的代码获取为缺陷代码,该异常时间为被测试代码执行异常的时间点。
其中,上述步骤301至303的具体实现过程可以参考图2对应实施例中的步骤201至205中的描述,此处不再赘述。
步骤304,分析缺陷代码中的各行代码的执行顺序和调用关系。
步骤305,根据该执行顺序和该调用关系,对该缺陷代码中的各行代码进行可视化处理。
步骤306,输出处理后的缺陷代码。
其中,上述步骤303~305的具体过程可以如下:
1、被测试代码发生异常时,测试终端根据代码覆盖信息获取满足预定条件的代码的行信息,记为line_cov;
2、测试终端从代码库中拉取line_cov对应的具体代码,记为code_cov;
3、测试终端根据分析code_cov中各行代码的执行顺序和相互之间的调用关系,记为code_call;
4、测试终端整合line_cov和code_call。
由于根据代码覆盖信息中的代码的行信息提取出的代码仅仅是按照执行的时间顺序进行排列,并不能明确的展示各行代码之间的调用关系,另外,当某些代码先后被执行了两次或者两次以上时,提取出的缺陷代码甚至不能明确展示各行代码的执行顺序。
为了提高缺陷代码的可读性,方便测试人员进行人工排查,在本发明实施例中,获取到缺陷代码之后,在将缺陷代码输出给测试人员之前,还可以对缺陷代码进行分析,确定各行代码的执行顺序和相互之间的调用关系,并按照分析获得的执行顺序和调用关系对各行代码进行整合,比如,以图形化的方式显示缺陷代码中的各行代码的行信息,使整合后的缺陷代码展示给测试人员时,能够清晰的展示出各行代码的执行顺序和相互之间的调用关系。
比如,在对缺陷代码中的各行代码进行可视化处理时,可以根据各行代码的执行顺序和调用关系生成该缺陷代码的调用关系图,该调用关系图中包含缺陷代码中的各行代码的行信息以及各行代码的行信息各自对应的指示图形,所述指示图形用于指示各行代码的执行顺序和/或调用关系(比如,该指示图形可以是箭头)。其中,该调用关系图中的各行代码的行信息可以是指向该行信息对应的具体代码的超链接。当测试人员打开调用关系图并点击某一行代码的行信息时,即可以显示缺陷代码中,该行信息所对应的代码所属的整段代码。
可选的,在上述对各行代码进行整合时,还可以引入各行代码的执行时间整合,以便测试人员更直观的了解各行代码的执行情况。
如图4所示的调用关系展示示意图,当测试人员打开并查看可视化处理后的缺陷代码时,可以如图4进行显示该缺陷代码的调用关系图400,其中,左边的ClassName1为同一段代码410的行信息,右侧的ClassName2为另一段代码420的行信息,其中被执行的每一行代码都对应各自的执行时间,ClassName1中在code line 2在执行时调用ClassName2中的代码,调用从Fun:FunName_2开始,至code(time_m+1):return;结束,返回继续执行ClassName1中的代码,调用开始和调用结束以及代码的执行顺序均由可视化的箭头401指示。当用户点击ClassName1中的某一行代码的行信息402时,即可以显示ClassName1对应的整段代码段430,其中,在显示的代码段430中,行信息402对应的具体代码432居中显示,以便测试人员查找。通过图4所展示的调用关系图,测试人员可以更直观的了解缺陷代码的执行顺序和调用关系情况,便于测试人员对异常的原因进行分析。
综上所述,本实施例提供的获取缺陷代码的方法,通过代码覆盖率工具对被测试代码进行覆盖率测试,在被测试代码执行异常时,根据代码覆盖率工具生成的代码覆盖信息,将被测试代码中被执行在异常时间之前的一段时间内的代码获取为缺陷代码,该缺陷代码仅仅是发生异常的时间点之前一小段时间内执行的代码,测试人员只需要排查这部分代码即可以确定代码中存在的缺陷,不需要人工排查所有可能发生异常的代码,从而达到提高软件测试准确性和效率的效果。
此外,本实施例提供的获取缺陷代码的方法,在输出缺陷代码之前,还分析缺陷代码中各行代码的执行顺序和调用关系,并按照各行代码的执行顺序和调用关系对各行代码进行整合,以便测试人员更直观的了解各行代码的执行情况,便于测试人员对异常的原因进行分析。
下述为本发明装置实施例,可以用于执行本发明方法实施例。对于本发明装置实施例中未披露的细节,请参照本发明方法实施例。
请参考图5,其示出了本发明一个实施例提供的获取缺陷代码的装置的结构方框图。该获取缺陷代码的装置可以应用于测试终端中。该获取缺陷代码的装置可以包括:覆盖率测试模块501、覆盖信息获取模块502以及缺陷代码获取模块503。
所述覆盖率测试模块501,用于通过代码覆盖率工具对被测试代码进行覆盖率测试;
所述覆盖信息获取模块502,用于当所述被测试代码执行异常时,获取所述代码覆盖率工具生成的代码覆盖信息,所述代码覆盖信息用于指示所述被测试代码中被执行的代码行;
所述缺陷代码获取模块503,用于根据所述代码覆盖信息,将所述被测试代码中被执行在异常时间之前的一段时间内的代码获取为缺陷代码,所述异常时间为所述被测试代码执行异常的时间点。
综上所述,本实施例提供的获取缺陷代码的装置,通过代码覆盖率工具对被测试代码进行覆盖率测试,在被测试代码执行异常时,根据代码覆盖率工具生成的代码覆盖信息,将被测试代码中被执行在异常时间之前的一段时间内的代码获取为缺陷代码,该缺陷代码仅仅是发生异常的时间点之前一小段时间内执行的代码,测试人员只需要排查这部分代码即可以确定代码中存在的缺陷,不需要人工排查所有可能发生异常的代码,从而达到提高软件测试准确性和效率的效果。
请参考图6,其示出了本发明另一个实施例提供的获取缺陷代码的装置的结构方框图。该获取缺陷代码的装置可以应用于测试终端中。该获取缺陷代码的装置可以包括:覆盖率测试模块501、覆盖信息获取模块502以及缺陷代码获取模块503。
所述覆盖率测试模块501,用于通过代码覆盖率工具对被测试代码进行覆盖率测试;
所述覆盖信息获取模块502,用于当所述被测试代码执行异常时,获取所述代码覆盖率工具生成的代码覆盖信息,所述代码覆盖信息用于指示所述被测试代码中被执行的代码行;
所述缺陷代码获取模块503,用于根据所述代码覆盖信息,将所述被测试代码中被执行在异常时间之前的一段时间内的代码获取为缺陷代码,所述异常时间为所述被测试代码执行异常的时间点。
可选的,所述缺陷代码获取模块503,包括:
行信息确定单元503a,用于确定执行时间在所述异常时间之前,且满足预定条件的代码的行信息;
代码获取单元503b,用于将所述被测试代码中,与所述满足预定条件的代码的行信息相对应的代码获取为所述缺陷代码;
其中,所述代码覆盖信息中包含被执行的各行代码的行信息以及被执行的各行代码的执行时间。
可选的,所述行信息确定单元503a,用于确定执行时间在所述异常时间之前且距离所述异常时间最近的,预定行数的代码的行信息;
或者,
所述行信息确定单元503a,用于确定执行时间处于所述异常时间之前的预定时间段内的,各行代码的行信息。
可选的,所述装置还包括:分析模块504以及代码处理模块505;
所述分析模块504,用于分析所述缺陷代码中的各行代码的执行顺序和调用关系;
所述代码处理模块505,用于根据所述执行顺序和所述调用关系,对所述缺陷代码中的各行代码进行可视化处理。
可选的,所述代码处理模块505,用于将所述缺陷代码中的各行代码按照所述执行顺序和所述调用关系进行整合。
可选的,所述覆盖信息获取模块502,包括:
标识获取单元502a,用于获取所述代码覆盖率工具的标识;
存储信息查询单元502b,用于根据所述代码覆盖率工具的标识,从预先存储的配置文件中查询所述代码覆盖率工具生成的代码覆盖文件的存储信息,所述存储信息包括存储路径以及存储格式,所述配置文件中包含所述代码覆盖率工具的标识以及所述存储信息之间的对应关系;
覆盖信息提取单元502c,用于根据所述存储信息从所述代码覆盖文件中提取所述代码覆盖信息。
综上所述,本实施例提供的获取缺陷代码的装置,通过代码覆盖率工具对被测试代码进行覆盖率测试,在被测试代码执行异常时,根据代码覆盖率工具生成的代码覆盖信息,将被测试代码中被执行在异常时间之前的一段时间内的代码获取为缺陷代码,该缺陷代码仅仅是发生异常的时间点之前一小段时间内执行的代码,测试人员只需要排查这部分代码即可以确定代码中存在的缺陷,不需要人工排查所有可能发生异常的代码,从而达到提高软件测试准确性和效率的效果。
此外,本实施例提供的获取缺陷代码的装置,在输出缺陷代码之前,还分析缺陷代码中各行代码的执行顺序和调用关系,并按照各行代码的执行顺序和调用关系对各行代码进行整合,以便测试人员更直观的了解各行代码的执行情况,便于测试人员对异常的原因进行分析。
需要说明的是:上述实施例提供的获取缺陷代码的装置在获取缺陷代码时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的获取缺陷代码的装置与获取缺陷代码的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
请参考图7,其示出了本发明一个实施例提供的终端的结构示意图。该终端可用于实施上述实施例中提供的获取缺陷代码的方法。具体来讲:
终端700包括中央处理单元(CPU)701、包括随机存取存储器(RAM)702和只读存储器(ROM)703的系统存储器704,以及连接系统存储器704和中央处理单元701的系统总线705。所述终端700还包括帮助计算机内的各个器件之间传输信息的基本输入/输出系统(I/O系统)706,和用于存储操作系统713、应用程序712和其他程序模块715的大容量存储设备707。
所述基本输入/输出系统706包括有用于显示信息的显示器708和用于用户输入信息的诸如鼠标、键盘之类的输入设备709。其中所述显示器708和输入设备709都通过连接到系统总线705的输入输出控制器710连接到中央处理单元701。所述基本输入/输出系统706还可以包括输入输出控制器710以用于接收和处理来自键盘、鼠标、或电子触控笔等多个其他设备的输入。类似地,输入输出控制器710还提供输出到显示屏、打印机或其他类型的输出设备。
所述大容量存储设备707通过连接到系统总线705的大容量存储控制器(未示出)连接到中央处理单元701。所述大容量存储设备707及其相关联的计算机可读介质为终端700提供非易失性存储。也就是说,所述大容量存储设备707可以包括诸如硬盘或者CD-ROM驱动器之类的计算机可读介质(未示出)。
不失一般性,所述计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括RAM、ROM、EPROM、EEPROM、闪存或其他固态存储其技术,CD-ROM、DVD或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知所述计算机存储介质不局限于上述几种。上述的系统存储器704和大容量存储设备707可以统称为存储器。
根据本发明的各种实施例,所述终端700还可以通过诸如因特网等网络连接到网络上的远程计算机运行。也即终端700可以通过连接在所述系统总线705上的网络接口单元711连接到网络712,或者说,也可以使用网络接口单元711来连接到其他类型的网络或远程计算机系统(未示出)。
所述存储器还包括一个或者一个以上的程序,所述一个或者一个以上程序存储于存储器中,所述一个或者一个以上程序具有如下功能:。
通过代码覆盖率工具对被测试代码进行覆盖率测试;
当所述被测试代码执行异常时,获取所述代码覆盖率工具生成的代码覆盖信息,所述代码覆盖信息用于指示所述被测试代码中被执行的代码行;
根据所述代码覆盖信息,将所述被测试代码中被执行在异常时间之前的一段时间内的代码获取为缺陷代码,所述异常时间为所述被测试代码执行异常的时间点。
可选的,所述代码覆盖信息中包含被执行的各行代码的行信息以及被执行的各行代码的执行时间;所述根据所述代码覆盖信息,将所述被测试代码中被执行在异常时间之前的一段时间内的代码获取为缺陷代码,包括:
确定执行时间在所述异常时间之前,且满足预定条件的代码的行信息;
将所述被测试代码中,与所述满足预定条件的代码的行信息相对应的代码获取为所述缺陷代码。
可选的,所述确定执行时间在所述异常时间之前,且满足预定条件的代码的行信息,包括:
确定执行时间在所述异常时间之前且距离所述异常时间最近的,预定行数的代码的行信息;
或者,
确定执行时间处于所述异常时间之前的预定时间段内的,各行代码的行信息。
可选的,所述功能还包括:
分析所述缺陷代码中的各行代码的执行顺序和调用关系;
根据所述执行顺序和所述调用关系,对所述缺陷代码中的各行代码进行可视化处理。
可选的,所述根据所述执行顺序和所述调用关系,对所述缺陷代码中的各行代码进行可视化处理,包括:
将所述缺陷代码中的各行代码按照所述执行顺序和所述调用关系进行整合。
可选的,所述获取所述代码覆盖率工具生成的代码覆盖信息,包括:
获取所述代码覆盖率工具的标识;
根据所述代码覆盖率工具的标识,从预先存储的配置文件查询所述代码覆盖率工具生成的代码覆盖文件的存储信息,所述存储信息包括存储路径以及存储格式,所述配置文件中包含所述代码覆盖率工具的标识以及所述存储信息之间的对应关系;
根据所述存储信息从所述代码覆盖文件中提取所述代码覆盖信息。
综上所述,本实施例提供的获取缺陷代码的终端,通过代码覆盖率工具对被测试代码进行覆盖率测试,在被测试代码执行异常时,根据代码覆盖率工具生成的代码覆盖信息,将被测试代码中被执行在异常时间之前的一段时间内的代码获取为缺陷代码,该缺陷代码仅仅是发生异常的时间点之前一小段时间内执行的代码,测试人员只需要排查这部分代码即可以确定代码中存在的缺陷,不需要人工排查所有可能发生异常的代码,从而达到提高软件测试准确性和效率的效果。
应当理解的是,在本文中使用的,除非上下文清楚地支持例外情况,单数形式“一个”(“a”、“an”、“the”)旨在也包括复数形式。还应当理解的是,在本文中使用的“和/或”是指包括一个或者一个以上相关联地列出的项目的任意和所有可能组合。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (12)

1.一种获取缺陷代码的方法,其特征在于,所述方法包括:
通过代码覆盖率工具对被测试代码进行覆盖率测试;
当所述被测试代码执行异常时,获取所述代码覆盖率工具生成的代码覆盖信息,所述代码覆盖信息用于指示所述被测试代码中被执行的代码行;
根据所述代码覆盖信息,将所述被测试代码中被执行在异常时间之前的一段时间内的代码获取为缺陷代码,所述异常时间为所述被测试代码执行异常的时间点。
2.根据权利要求1所述的方法,其特征在于,所述代码覆盖信息中包含被执行的各行代码的行信息以及被执行的各行代码的执行时间;所述根据所述代码覆盖信息,将所述被测试代码中被执行在异常时间之前的一段时间内的代码获取为缺陷代码,包括:
确定执行时间在所述异常时间之前,且满足预定条件的代码的行信息;
将所述被测试代码中,与所述满足预定条件的代码的行信息相对应的代码获取为所述缺陷代码。
3.根据权利要求2所述的方法,其特征在于,所述确定执行时间在所述异常时间之前,且满足预定条件的代码的行信息,包括:
确定执行时间在所述异常时间之前且距离所述异常时间最近的,预定行数的代码的行信息;
或者,
确定执行时间处于所述异常时间之前的预定时间段内的,各行代码的行信息。
4.根据权利要求1至3任一所述的方法,其特征在于,所述方法还包括:
分析所述缺陷代码中的各行代码的执行顺序和调用关系;
根据所述执行顺序和所述调用关系,对所述缺陷代码中的各行代码进行可视化处理。
5.根据权利要求4所示的方法,其特征在于,所述根据所述执行顺序和所述调用关系,对所述缺陷代码中的各行代码进行可视化处理,包括:
根据所述执行顺序和所述调用关系生成所述缺陷代码的调用关系图,所述调用关系图中包含所述缺陷代码中的各行代码的行信息以及所述各行代码的行信息对应的指示图形,所述指示图形用于指示所述各行代码的执行顺序和/或调用关系。
6.根据权利要求1所述的方法,其特征在于,所述获取所述代码覆盖率工具生成的代码覆盖信息,包括:
获取所述代码覆盖率工具的标识;
根据所述代码覆盖率工具的标识,从预先存储的配置文件查询所述代码覆盖率工具生成的代码覆盖文件的存储信息,所述存储信息包括存储路径以及存储格式,所述配置文件中包含所述代码覆盖率工具的标识以及所述存储信息之间的对应关系;
根据所述存储信息从所述代码覆盖文件中提取所述代码覆盖信息。
7.一种获取缺陷代码的装置,其特征在于,所述装置包括:
覆盖率测试模块,用于通过代码覆盖率工具对被测试代码进行覆盖率测试;
覆盖信息获取模块,用于当所述被测试代码执行异常时,获取所述代码覆盖率工具生成的代码覆盖信息,所述代码覆盖信息用于指示所述被测试代码中被执行的代码行;
缺陷代码获取模块,用于根据所述代码覆盖信息,将所述被测试代码中被执行在异常时间之前的一段时间内的代码获取为缺陷代码,所述异常时间为所述被测试代码执行异常的时间点。
8.根据权利要求7所述的装置,其特征在于,所述缺陷代码获取模块,包括:
行信息确定单元,用于确定执行时间在所述异常时间之前,且满足预定条件的代码的行信息;
代码获取单元,用于将所述被测试代码中,与所述满足预定条件的代码的行信息相对应的代码获取为所述缺陷代码;
其中,所述代码覆盖信息中包含被执行的各行代码的行信息以及被执行的各行代码的执行时间。
9.根据权利要求8所述的装置,其特征在于,
所述行信息确定单元,用于确定执行时间在所述异常时间之前且距离所述异常时间最近的,预定行数的代码的行信息;
或者,
所述行信息确定单元,用于确定执行时间处于所述异常时间之前的预定时间段内的,各行代码的行信息。
10.根据权利要求7至9任一所述的装置,其特征在于,所述装置还包括:
分析模块,用于分析所述缺陷代码中的各行代码的执行顺序和调用关系;
代码处理模块,用于根据所述执行顺序和所述调用关系,对所述缺陷代码中的各行代码进行可视化处理。
11.根据权利要求10所示的装置,其特征在于,
所述代码处理模块,用于根据所述执行顺序和所述调用关系生成所述缺陷代码的调用关系图,所述调用关系图中包含所述缺陷代码中的各行代码的行信息以及所述各行代码的行信息对应的指示图形,所述指示图形用于指示所述各行代码的执行顺序和/或调用关系。
12.根据权利要求7所述的装置,其特征在于,所述覆盖信息获取模块,包括:
标识获取单元,用于获取所述代码覆盖率工具的标识;
存储信息查询单元,用于根据所述代码覆盖率工具的标识,从预先存储的配置文件中查询所述代码覆盖率工具生成的代码覆盖文件的存储信息,所述存储信息包括存储路径以及存储格式,所述配置文件中包含所述代码覆盖率工具的标识以及所述存储信息之间的对应关系;
覆盖信息提取单元,用于根据所述存储信息从所述代码覆盖文件中提取所述代码覆盖信息。
CN201510283048.2A 2015-05-27 2015-05-27 获取缺陷代码的方法及装置 Active CN106294109B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510283048.2A CN106294109B (zh) 2015-05-27 2015-05-27 获取缺陷代码的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510283048.2A CN106294109B (zh) 2015-05-27 2015-05-27 获取缺陷代码的方法及装置

Publications (2)

Publication Number Publication Date
CN106294109A true CN106294109A (zh) 2017-01-04
CN106294109B CN106294109B (zh) 2021-03-19

Family

ID=57635656

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510283048.2A Active CN106294109B (zh) 2015-05-27 2015-05-27 获取缺陷代码的方法及装置

Country Status (1)

Country Link
CN (1) CN106294109B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108228466A (zh) * 2018-01-26 2018-06-29 中国银行股份有限公司 代码复查方法及装置
CN110569184A (zh) * 2019-07-31 2019-12-13 重庆小雨点小额贷款有限公司 一种测试方法及终端设备
CN110765005A (zh) * 2019-09-29 2020-02-07 武汉船舶通信研究所(中国船舶重工集团公司第七二二研究所) 软件可靠性评估方法和装置
CN112015640A (zh) * 2020-08-06 2020-12-01 京东数字科技控股股份有限公司 一种软件测试方法及系统

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101872325A (zh) * 2010-06-25 2010-10-27 北京航空航天大学 一种基于谓词执行序列的软件动态缺陷定位方法
CN101901185A (zh) * 2010-06-01 2010-12-01 南京大学 一种按类组织执行轨迹的面向对象程序缺陷定位方法
US20110016356A1 (en) * 2009-07-14 2011-01-20 International Business Machines Corporation Fault detection and localization in dynamic software applications
CN103095518A (zh) * 2011-11-08 2013-05-08 阿里巴巴集团控股有限公司 覆盖率测试处理方法、装置、覆盖率测试服务器及系统
CN103106133A (zh) * 2011-11-09 2013-05-15 阿里巴巴集团控股有限公司 软件缺陷定位方法及系统
CN103257917A (zh) * 2012-02-16 2013-08-21 广州博纳信息技术有限公司 软件测评系统管理方法
WO2013121394A1 (en) * 2012-02-15 2013-08-22 Universidade Do Porto Remote debugging service
CN103309811A (zh) * 2013-06-27 2013-09-18 南京大学 一种基于测试执行记录快速定位软件代码缺陷的方法
US20130298110A1 (en) * 2012-05-02 2013-11-07 International Business Machines Corporation Software Visualization Using Code Coverage Information
CN104331361A (zh) * 2014-09-17 2015-02-04 赵明 一种用于白盒测试覆盖率计算可视化的测试装置及方法

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110016356A1 (en) * 2009-07-14 2011-01-20 International Business Machines Corporation Fault detection and localization in dynamic software applications
CN101901185A (zh) * 2010-06-01 2010-12-01 南京大学 一种按类组织执行轨迹的面向对象程序缺陷定位方法
CN101872325A (zh) * 2010-06-25 2010-10-27 北京航空航天大学 一种基于谓词执行序列的软件动态缺陷定位方法
CN103095518A (zh) * 2011-11-08 2013-05-08 阿里巴巴集团控股有限公司 覆盖率测试处理方法、装置、覆盖率测试服务器及系统
CN103106133A (zh) * 2011-11-09 2013-05-15 阿里巴巴集团控股有限公司 软件缺陷定位方法及系统
WO2013121394A1 (en) * 2012-02-15 2013-08-22 Universidade Do Porto Remote debugging service
CN103257917A (zh) * 2012-02-16 2013-08-21 广州博纳信息技术有限公司 软件测评系统管理方法
US20130298110A1 (en) * 2012-05-02 2013-11-07 International Business Machines Corporation Software Visualization Using Code Coverage Information
CN103309811A (zh) * 2013-06-27 2013-09-18 南京大学 一种基于测试执行记录快速定位软件代码缺陷的方法
CN104331361A (zh) * 2014-09-17 2015-02-04 赵明 一种用于白盒测试覆盖率计算可视化的测试装置及方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
W. ERIC WONG等: ""Effective Fault Localization using Code Coverage"", 《31ST ANNUAL INTERNATIONAL COMPUTER SOFTWARE AND APPLICATIONS CONFERENCE (COMPSAC 2007)》 *
马倩: ""基于覆盖信息的测试用例约简与缺陷定位技术"", 《中国优秀硕士学位论文全文数据库 信息科技辑》 *

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108228466A (zh) * 2018-01-26 2018-06-29 中国银行股份有限公司 代码复查方法及装置
CN110569184A (zh) * 2019-07-31 2019-12-13 重庆小雨点小额贷款有限公司 一种测试方法及终端设备
CN110765005A (zh) * 2019-09-29 2020-02-07 武汉船舶通信研究所(中国船舶重工集团公司第七二二研究所) 软件可靠性评估方法和装置
CN110765005B (zh) * 2019-09-29 2022-06-17 武汉船舶通信研究所(中国船舶重工集团公司第七二二研究所) 软件可靠性评估方法和装置
CN112015640A (zh) * 2020-08-06 2020-12-01 京东数字科技控股股份有限公司 一种软件测试方法及系统
CN112015640B (zh) * 2020-08-06 2024-04-05 京东科技控股股份有限公司 一种软件测试方法及系统

Also Published As

Publication number Publication date
CN106294109B (zh) 2021-03-19

Similar Documents

Publication Publication Date Title
CN108597494A (zh) 语音测试方法及装置
WO2021111670A1 (ja) アノテーション装置および方法
CN109949286A (zh) 用于输出信息的方法和装置
CN106294109A (zh) 获取缺陷代码的方法及装置
Brüggemann Model reduction methods for vector autoregressive processes
CN109871326A (zh) 一种脚本录制的方法和装置
CN101206570B (zh) 用于生成用户界面的方法和系统
CN109360550A (zh) 语音交互系统的测试方法、装置、设备和存储介质
KR20160122452A (ko) 비주얼 콘텐츠기반 영상 인식을 위한 딥러닝 프레임워크 및 영상 인식 방법
CN107086040A (zh) 语音识别能力测试方法和装置
CN106095866A (zh) 应用程序推荐方法、程序启动速度的优化方法和装置
CN108780048A (zh) 一种确定检测设备的方法、检测装置及可读存储介质
CN104780282A (zh) 对电话会议中的发言内容进行分类的方法和设备
CN108717519B (zh) 一种文本分类方法及装置
CN108733712A (zh) 一种问答系统评价方法和装置
CN110096445A (zh) 一种模型在环测试方法及装置
CN109473121A (zh) 语音合成质量测试方法及装置
CN109637536A (zh) 一种自动化识别语义准确性的方法及装置
EP3723030A1 (en) Technical fee automatic calculation system, technical fee automatic calculation method, and program
CN107066302B (zh) 缺陷检测方法、装置及服务终端
CN109213729A (zh) 结果驱动的案例管理
CN112465288A (zh) 用于自动地捕获技术转移知识的系统和方法
CN110399284A (zh) 一种测试用例编写与执行方法及装置
de Figueiredo et al. Generating interaction test cases for mobile phone systems from use case specifications
CN108108175A (zh) 一种用于灰度发布的方法和装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant