软件缺陷定位方法及系统的制作方法

文档序号:6437844阅读:219来源:国知局
专利名称:软件缺陷定位方法及系统的制作方法
技术领域
本申请涉及软件测试技术领域,特别是涉及一种软件缺陷定位方法及系统。
背景技术
在目前的软件测试过程中,测试人员在发现软件缺陷后,常用的方法是,下载服务器的异常日志信息,分析出错的代码行号及错误提示信息等,但由于测试人员一般不熟悉由开发人员编码的代码,所以这些信息并不足以令测试人员快速地找到缺陷产生根源在哪,这无疑会增加缺陷定位的时间。目前一种常见的软件缺陷定位方法为采用Eclipse中的异常堆栈信息功能,这些异常堆栈信息包含软件运行过程中经过的每个类、每个方法等信息。这样可以查找到出现异常的类或者方法,一定程度上可以缩小范围,减少缺陷定位的时间。但是因为每个类和每个方法中出现异常的代码可能只有一小部分,仍然会有大量的代码行需要排查,这样的缺陷定位仍然会花费较长的时间。

发明内容
本申请的目的在于,提供一种软件缺陷定位方法及系统,以解决软件缺陷难以定位的问题。为了解决上述问题,本申请公开了一种软件缺陷定位方法,包括以下步骤:从运行目标软件的客户端内存中获取目标软件测试过程中的覆盖率信息,所述覆盖率信息包括各行代码的运行情况和根据运行情况对各行代码所进行的标记;根据所述覆盖率信息中的运行情况和标记确定被运行过的代码;返回所有被运行过的代码,以从所述被运行过的代码中查询并定位软件缺陷。进一步地,所述获取目标软件测试过程中运行目标软件的客户端内存中的覆盖率信息包括:通过与客户端的交互直接读取运行目标软件的客户端内存中的覆盖率信息;或从运行目标软件的客户端内存中下载覆盖率信息到目标软件所在的客户端,然后上传到服务器中。进一步地,所述方法还包括:采用嵌入目标软件中的代码记录测试过程中的覆盖率信息,并存入运行目标软件的客户端内存中。进一步地,所述方法还包括:在嵌入目标软件中的代码开始记录新的覆盖率信息之前,清空运行目标软件的客户端内存中的覆盖率信息。进一步地,所述方法还包括:嵌入目标软件中的代码使用静态数组来记录各行代码运行情况并进行标记。进一步地,所述根据所述覆盖率信息确定被运行过的代码包括:
根据各行代码的标记对代码进行汇总;将具有表示被运行过标记的代码集中在一起。进一步地,所述返回所有被运行过的代码包括:返回包含有被运行过的代码所在的代码块。进一步地,所述方法还包括:将测试过程中的覆盖率信息添加到目标软件的操作记录中。进一步地,所述方法还包括:对记录完整测试过程的覆盖率信息进行标记。为了解决上述问题,本申请还提供了一种软件缺陷定位系统,包括:信息获取模块,用于获取目标软件测试过程中运行目标软件的客户端内存中的覆盖率信息,所述覆盖率信息包括各行代码的运行情况和根据运行情况对各行代码所进行的标记;代码确定模块,用于根据所述覆盖率信息确定被运行过的代码;返回模块,用于返回所有被运行过的代码,以从所述被运行过的代码中查询并定位软件缺陷。与现有技术相比,本申请包括以下优点:本申请的软件缺陷定位方法和系统通过在目标软件中嵌入代码来记录测试过程中的覆盖率信息,并根据覆盖率信息中的不同标记来查找到被运行过的代码,并将这些代码汇总在一起作为定位软件缺陷的目标代码,从而缩小了缺陷定位的范围。因为覆盖率信息中包含了各行代码运行情况,根据覆盖率信息就可以确定哪一行出现异常,并在哪一行进行了跳转等信息,这就可以使查找缺陷时能够精确定位到行,即使不熟悉目标软件的开发代码,也可以快速的实现缺陷的快速定位,从而节省了缺陷的查找定位过程。另外,通过在目标软件中嵌入代码的方式来实现覆盖率信息记录,可以适用于各种测试中,因为具有较好的通用性。进一步地,在返回被运行过代码所在的代码块时,对代码块中被运行过和未被运行过的代码采用不同的颜色或者标识符进行标记,也可以帮助实现快速定位和识别。当然,实施本申请的任一产品不一定需要同时达到以上所述的所有优点。


图1是本申请的软件缺陷定位方法实施例一的流程图;图2是本申请的软件缺陷定位方法实施例二的流程图;图3是本申请的软件缺陷定位方法和系统在具体应用环境中实现的流程图;图4是本申请的软件缺陷定位系统实施例一的结构示意图。
具体实施例方式为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式
对本申请作进一步详细的说明。参照图1,其示出本申请的软件缺陷定位方法实施例一,包括以下步骤:步骤101,从运行目标软件的客户端内存中获取目标软件测试过程中的覆盖率信息,所述覆盖率信息包括各行代码的运行情况和根据运行情况对各行代码所进行的标记。服务器可以直接通过与客户端的交互来读取运行目标软件的客户端内存中的覆盖率信息。也可以先从运行目标软件的客户端内存中下载覆盖率信息到目标软件所在的客户端硬盘中,然后上传到服务器中。其中,下载覆盖率信息到目标软件所在的客户端硬盘后,覆盖率信息可以以临时文件的方式保存,当上传到服务器后,则可以删除,从而避免占用客户端的资源。可以预先通过插桩的方式在目标软件中嵌入对应的代码,在目标软件的测试过程中,嵌入的代码会记录目标软件各代码的运行情况,进行相应的标记,并存入目标软件内存中。当测试完成后,服务器可以从目标软件内存中获取到此次测试过程中的覆盖率信息。步骤102,根据所述覆盖率信息确定被运行过的代码。根据覆盖率信息中的运行情况和标记可以确定本次测试过程中运行了哪些类的代码,在哪一行进行了异常跳转等具体信息。其中,对测试过程中各行代码的标记可以根据该行代码被运行的情况采用不同的标记,如在被运行过和未被运行过的代码后面添加不同的标识符,或者以不同的颜色来表示是否代码是否被运行等等。通过这些标记便可以确定出被运行过的代码,并可以确定出这些代码所在的具体行数和所属类的具体位置信息,最后将这些代码根据标记的不同分别进行汇总,将具有相同标记的代码集中在一起,从而集中获取所有被运行过的代码。例如,若插桩的代码使用静态数组来记录各行代码运行情况并进行标记,如果目标软件某一行被运行了,则静态数组中对应的下标值指向的元素被置为true,否则就是原始的false。通过收集汇总在所有类中的静态数组对象,就能知道本次测试过程中运行了哪些类的代码,在哪一行出现了异常跳转。步骤103,返回所有被运行过的代码,以从所述被运行过的代码中查询并定位软件缺陷。因为对于测试过程来说,如果某一部分没有缺陷,则该部分对应的代码并不会被运行,即不会出现异常。通过标记的方式便可以排除那些肯定不会出现异常的部分,而在剩下的可能导致出现异常的部分进行排查定位,从而能快速的定位出软件缺陷。通过此种方式,可以预先排除大部分的代码行,无需测试人员从所有代码行中去查找软件缺陷,而只需要从小部分的代码行中查找软件缺陷,从而缩小了查找范围,以便能快速准确的定位软件缺陷。优选地,返回的代码可以不仅仅是所有被运行过的代码,对于某一目标软件来说,是由若干用于实现不同功能的代码块组成的,因此,还可以返回出现异常的代码所在的代码块,即如果某一代码块中只要有一行代码出现异常,则返回整个代码块,为了便于查询,可以保留整个代码块中的运行情况标记,如前所述的,可以用不同的颜色或者标识符来表示同一代码块中被运行过和未被运行过的各行代码。通过返回整个代码块的方式,可以更容易的定位目标软件中出现异常的功能模块,从而更有利于实现缺陷的定位。另外,为了对每次测试过程中的覆盖率信息进行保存,以便后续分析等处理,本申请还包括以下步骤:将测试过程中的覆盖率信息添加到目标软件的操作记录中。优选地,因为一次测试可能会因为设备故障、人为因素或者其他情况而中断,而在新的测试开始之前,运行目标软件的客户端内存中的覆盖率信息会被清空,这就可能造成覆盖率信息不完整,为了便于识别每次存入操作记录中的覆盖率信息是否完整,本申请还包括对记录完整测试过程的覆盖率信息添加标记。例如,标识为已完成状态等等。优选地,因为对同一软件可能进行多次测试,为了保证所记录的覆盖率信息的准确,还需要进行相应的处理,具体在开始记录覆盖率信息之前还包括清空运行目标软件的客户端内存中可能存在的覆盖率信息。参照图2,示出本申请的软件定位缺陷的方法实施例二,包括以下步骤:步骤201,服务器接收客户端发送的开始记录的请求后,发送指令给客户端的目标软件,以清空运行目标软件的客户端内存中的覆盖率信息。为了实现覆盖率信息的清空,可以预先在目标软件中添加相应的功能模块,在接收到清空指令后,便可以通过删除、移除或者隔离等方式清空运行目标软件的客户端内存中的覆盖率信息。在测试开始后,目标软件中嵌入的代码会自动记录此次测试过程中的覆盖率 目息。其中,用户在客户端进行开始记录的操作后,客户端会首先将命令发送给目标软件,目标软件通过http协议消息从客户端发送给服务器,其中,目标软件通过客户端发送给服务器的命令包括目标软件名称等信息,从而便于服务器识别目标软件。步骤202,服务器接收客户端发送的完成记录的请求后,从运行目标软件的客户端内存中获取此次测试过程中记录的覆盖率信息。步骤203,服务器根据此次测试过程中记录的覆盖率信息确定所有被运行的代码。步骤204,服务器端返回所述被运行的代码给客户端,以使客户端从所述被运行的代码中查询定位软件缺陷。

参照图3,其示出本申请前述方法的一个具体实例。其中,服务器为TCC服务器,用户所在一端为客户端。如图3左边所示,在运行前,需要对目标应用进行插桩,即在目标应用中新增一个Filter,对应用的最外层框架页面的响应内容追加一小段javascript脚本程序,此脚本程序可以给当前网页增加相应用户鼠标右键事件功能,具体javascript程序如下:
权利要求
1.一种软件缺陷定位方法,其特征在于,包括以下步骤: 从运行目标软件的客户端内存中获取目标软件测试过程中的覆盖率信息,所述覆盖率信息包括各行代码的运行情况和根据运行情况对各行代码所进行的标记; 根据所述覆盖率信息中的运行情况和标记确定被运行过的代码; 返回所有被运行过的代码,以从所述被运行过的代码中查询并定位软件缺陷。
2.如权利要求1所述的软件缺陷定位方法,其特征在于,所述获取目标软件测试过程中运行目标软件的客户端内存中的覆盖率信息包括: 通过与客户端的交互直接读取运行目标软件的客户端内存中的覆盖率信息;或从运行目标软件的客户端内存中下载覆盖率信息到目标软件所在的客户端,然后上传到服务器中。
3.如权利要求1所述的软件缺陷定位方法,其特征在于,所述方法还包括: 采用嵌入目标软件中的代码记录测试过程中的覆盖率信息,并存入运行目标软件的客户端内存中。
4.如权利要求3所述的软件缺陷定位方法,其特征在于,所述方法还包括: 在嵌入目标软件中的代码开始记录新的覆盖率信息之前,清空运行目标软件的客户端内存中的覆盖率信息。
5.如权利要求3所述的软件缺陷定位方法,其特征在于,所述方法还包括: 嵌入目标软件中的代码使用静态数组来记录各行代码运行情况并进行标记。
6.如权利要求1所述的软件缺陷定位方法,其特征在于,所述根据所述覆盖率信息确定被运行过的代码包括: 根据各行代码的标记对代码进行汇总; 将具有表示被运行过标记的代码集中在一起。
7.如权利要求1所述的软件缺陷定位方法,其特征在于,所述返回所有被运行过的代码包括: 返回包含有被运行过的代码所在的代码块。
8.如权利要求1所述的软件缺陷定位方法,其特征在于,所述方法还包括: 将测试过程中的覆盖率信息添加到目标软件的操作记录中。
9.如权利要求8所述的软件缺陷定位方法,其特征在于,所述方法还包括: 对记录完整测试过程的覆盖率信息进行标记。
10.一种软件缺陷定位系统,其特征在于,包括: 信息获取模块,用于获取目标软件测试过程中运行目标软件的客户端内存中的覆盖率信息,所述覆盖率信息包括各行代码的运行情况和根据运行情况对各行代码所进行的标记; 代码确定模块,用于根据所述覆盖率信息确定被运行过的代码; 返回模块,用于返回所有被运行过的代码,以从所述被运行过的代码中查询并定位软件缺陷。
全文摘要
本申请提供了一种软件缺陷定位方法,包括以下步骤从运行目标软件的客户端内存中获取目标软件测试过程中的覆盖率信息,所述覆盖率信息包括各行代码的运行情况和根据运行情况对各行代码所进行的标记;根据所述覆盖率信息中的运行情况和标记确定被运行过的代码;返回所有被运行过的代码,以从所述被运行过的代码中查询并定位软件缺陷。本申请还提供一种实现前述方法的软件缺陷定位系统。本申请的软件缺陷定位方法及系统,能够实现软件缺陷的快速定位。
文档编号G06F11/36GK103106133SQ20111035363
公开日2013年5月15日 申请日期2011年11月9日 优先权日2011年11月9日
发明者马治国, 李国栋, 商锦波 申请人:阿里巴巴集团控股有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1