CN105404585B - 获取代码覆盖率的方法及装置 - Google Patents

获取代码覆盖率的方法及装置 Download PDF

Info

Publication number
CN105404585B
CN105404585B CN201510864686.3A CN201510864686A CN105404585B CN 105404585 B CN105404585 B CN 105404585B CN 201510864686 A CN201510864686 A CN 201510864686A CN 105404585 B CN105404585 B CN 105404585B
Authority
CN
China
Prior art keywords
app
code
coverage information
code coverage
compiling
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.)
Active
Application number
CN201510864686.3A
Other languages
English (en)
Other versions
CN105404585A (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 CN201510864686.3A priority Critical patent/CN105404585B/zh
Publication of CN105404585A publication Critical patent/CN105404585A/zh
Application granted granted Critical
Publication of CN105404585B publication Critical patent/CN105404585B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/3676Test management for coverage 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)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种获取代码覆盖率的方法及装置,属于通信领域。所述方法包括:测试设备获取m个应用程序APP的编译结果和编译号;所述测试设备获取用户配置的所述m个APP中的每个APP的测试用例;所述测试设备根据所述每个APP的测试用例分别对所述每个编译结果进行测试,并生成第一代码覆盖信息文件;所述测试设备向服务器发送所述第一代码覆盖信息文件,使所述服务器根据所述第一代码覆盖信息文件计算代码覆盖率;解决了在多用户、多台测试设备或多个版本APP并行交叉测试情况下不能准确获取有效的代码覆盖率的问题;达到了提高获取代码覆盖率方便性和提高测试人员工作效率的效果。

Description

获取代码覆盖率的方法及装置
技术领域
本发明涉及通信领域,特别涉及一种获取代码覆盖率的方法及装置。
背景技术
代码覆盖率是软件测试中的一种度量,其描述程序中的源代码被执行的比例和程度。目前,在软件测试领域中,技术人员需要获取程序的代码覆盖率,根据该代码覆盖率确定程序是否被完整有效地测试。
当前存在一种获取代码覆盖率的方法,包括:用户可以向服务器输入需要测试的应用程序(Application,APP)的版本号,服务器根据该版本号获取对应版本的源代码,对该源代码进行插桩编译,得到编译结果和有效行文件,有效行文件包括该源代码中有效的代码行;用户再将该编译结果安装在测试设备上,测试设备根据测试用例对该编译结果进行测试,并在测试结束后产生代码覆盖信息文件,该代码覆盖信息文件包括该源代码中被执行的代码行的行号,将该代码覆盖信息文件发送给服务器;服务器根据该代码覆盖信息文件和该有效行文件,计算代码覆盖率。
在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
现有技术方案只限于一个用户在一台测试设备上对应一个版本的APP进行测试,不能实现多用户、多台测试设备或多个版本的APP并行交叉测试。
发明内容
为了解决现有技术的问题,本发明实施例提供了一种获取代码覆盖率的方法及装置。所述技术方案如下:
第一方面,提供了一种获取代码覆盖率的方法,其特征在于,所述方法包括:
测试设备获取m个APP的编译结果和编译号,m为大于或等于1的整数,所述APP的编译结果和编译号是对所述APP的源代码进行插桩编译得到的,所述编译号用于标识所述APP的版本和所述源代码的版本;
所述测试设备获取用户配置的所述m个APP中的每个APP的测试用例;
所述测试设备根据第一APP的测试用例对第一编译结果进行测试,并获取所述第一APP的源代码中被执行的代码行的代码行覆盖信息,所述第一APP是所述m个APP中的任一APP;
将所述获取的代码行覆盖信息和所述第一APP的编译号的对应关系存储在第一代码覆盖信息文件中所述第一代码覆盖信息文件包括所述测试设备的设备标识、所述用户的用户标识、所述每个APP的编译号和所述每个APP的编译号对应的代码行覆盖信息;
所述测试设备向服务器发送所述第一代码覆盖信息文件,使所述服务器根据所述第一代码覆盖信息文件计算代码覆盖率。
第二方面,提供了一种获取代码覆盖率的方法,其特征在于,所述方法包括:
接收n个第一代码覆盖信息文件,第一代码覆盖信息文件包括设备标识、用户标识、m个APP中的每个APP的编译号和所述每个APP的编译号对应的代码行覆盖信息,m和n均为大于或等于1的整数;
获取输入条件,所述输入条件包括待分析的设备标识、用户标识和APP的编译号中的至少一个;
合并所述n个第一代码覆盖信息文件中满足所述输入条件的代码覆盖信息得到第二代码覆盖信息文件;
根据所述第二代码覆盖信息文件计算代码覆盖率。
第三方面,提供了一种获取代码覆盖率的装置,其特征在于,所述装置包括:
第一获取模块,用于获取m个APP的编译结果和编译号,m为大于或等于1的整数,所述APP的编译结果和编译号是对所述APP的源代码进行插桩编译得到的,所述编译号用于标识所述APP的版本和所述源代码的版本;
第二获取模块,用于获取用户配置的所述m个APP中的每个APP的测试用例;
测试获取子模块,用于根据第一APP的测试用例对第一编译结果进行测试,并获取所述第一APP的源代码中被执行的代码行的代码行覆盖信息,所述第一APP是所述m个APP中的任一APP;
存储子模块,用于将所述测试获取子模块获取的所述代码行覆盖信息和所述第一APP的编译号的对应关系存储在第一代码覆盖信息文件中,所述第一代码覆盖信息文件包括所述测试设备的设备标识、所述用户的用户标识、所述每个APP的编译号和所述每个APP的编译号对应的代码行覆盖信息;
发送模块,用于所述装置向服务器发送所述测试生成模块生成的所述第一代码覆盖信息文件,使所述服务器根据所述第一代码覆盖信息文件计算代码覆盖率。
第四方面,提供了一种获取代码覆盖率的装置,其特征在于,所述装置包括:
接收模块,用于接收n个第一代码覆盖信息文件,第一代码覆盖信息文件包括设备标识、用户标识、m个APP中的每个APP的编译号和所述每个APP的编译号对应的被执行代码行覆盖信息,m和n均为大于或等于1的整数;
获取模块,用于获取输入条件,所述输入条件包括待分析的设备标识、用户标识和APP的编译号中的至少一个;
合并模块,用于合并所述接收模块接收到的所述n个第一代码覆盖信息文件中满足所述获取模块获取到的所述输入条件的代码覆盖信息得到第二代码覆盖信息文件;
计算模块,用于根据所述合并模块得到的所述第二代码覆盖信息文件计算代码覆盖率。
本发明实施例提供的技术方案带来的有益效果是:
通过测试设备获取m个APP的编译结果、编译号和测试用例,并根据每个APP的测试用例对每个所述编译结果进行测试,并生成第一代码覆盖信息文件,然后向服务器发送该第一代码覆盖信息文件,使服务器根据该第一代码覆盖信息文件计算代码覆盖率;解决了在多用户、多台测试设备或多个版本APP并行交叉测试情况下不能准确获取有效的代码覆盖率的问题;达到了提高获取代码覆盖率方便性和提高测试人员工作效率的效果。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例应用的网络架构图;
图2是本发明一个实施例提供的一种获取代码覆盖率方法的流程图;
图3是本发明另一个实施例提供的一种获取代码覆盖率方法的流程图;
图4是本发明再一个实施例提供的一种获取代码覆盖率方法的流程图;
图5A本发明一个实施例提供的一种获取代码覆盖率装置的框图;
图5B本发明一个实施例提供的一种测试APP,并生成与该APP对应的第一代码覆盖信息文件装置的框图;
图6A是本发明另一个实施例提供的一种获取代码覆盖率装置的框图;
图6B是本发明一个实施例提供的一种合并n个第一代码覆盖信息文件中满足输入条件的代码覆盖信息得到第二代码覆盖信息文件装置的框图;
图6C本发明一个实施例提供的计算代码覆盖率装置的框图;
图7是本发明再一个实施例提供的一种获取代码覆盖率装置的框图;
图8是本发明一个实施例提供的电子设备的结构示意图;
图9是本发明一个实施例提供的服务器的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
参见图1,图1是本发明实施例应用的网络架构图,该网络架构可以包括至少一个服务器120和终端140。
服务器120用于存储第一代码覆盖信息文件,该第一代码覆盖信息文件可包括终端140的设备标识、执行测试的用户的用户标识、被测试的每个APP的编译号和每个APP的编译号对应的被执行代码行覆盖信息。
服务器120还可用于获取上述的设备标识、用户标识和APP的编译号等信息中的至少一个。
服务器120还可用于依照服务器120获取的至少一个信息合并第一代码覆盖信息得到第二代码覆盖信息文件,并根据该第二代码覆盖信息文件计算代码覆盖率。
终端140可用于获取服务器对APP编译后产生的编译结果和编译号。
终端140还可用于获取用户为每个APP配置的测试用例。
终端140还可用于根据上述每个APP的测试用例对每个所述编译结果进行测试,并生成第一代码覆盖信息文件,并将该第一代码覆盖信息文件发送给服务器120。
可选的,终端140可以是智能手机、平板电脑、智能电视、电子书阅读器、多媒体播放器、膝上型便携计算机和台式计算机等等。终端140与服务器120之间可以通过无线网络或者有线网络相连。
图2是本发明一个实施例提供的一种获取代码覆盖率方法的流程图,该方法包括:
在步骤201中,测试设备获取m个APP的编译结果和编译号,m为大于或等于1的整数,该APP的编译结果和编译号是对该APP的源代码进行插桩编译得到的,该编译号用于标识该APP的版本和该源代码的版本。
在步骤202中,该测试设备获取用户配置的该m个APP中的每个APP的测试用例。
在步骤203中,该测试设备根据该每个APP的测试用例对每个所述编译结果进行测试,并生成第一代码覆盖信息文件,该第一代码覆盖信息文件包括该测试设备的设备标识、该用户的用户标识、该每个APP的编译号和该每个APP的编译号对应的代码行覆盖信息。
在步骤204中,该测试设备向服务器发送该第一代码覆盖信息文件,使该服务器根据该第一代码覆盖信息文件计算代码覆盖率。
综上所述,本实施例提供的获取代码覆盖率方法,通过测试设备获取m个APP的编译结果、编译号和测试用例,并根据每个APP的测试用例对每个所述编译结果进行测试,并生成第一代码覆盖信息文件,然后向服务器发送该第一代码覆盖信息文件,使服务器根据该第一代码覆盖信息文件计算代码覆盖率;解决了在多用户、多台测试设备或多个版本APP并行交叉测试情况下不能准确获取有效的代码覆盖率的问题;达到了提高获取代码覆盖率方便性和提高测试人员工作效率的效果。
图3是本发明另一个实施例提供的一种获取代码覆盖率方法的流程图,该方法包括:
在步骤301中,接收n个第一代码覆盖信息文件,第一代码覆盖信息文件包括设备标识、用户标识、m个APP中的每个APP的编译号和该每个APP的编译号对应的代码行覆盖信息,m和n均为大于或等于1的整数。
在步骤302中,获取输入条件,该输入条件包括待分析的设备标识、用户标识和APP的编译号中的至少一个。
在步骤303中,合并该n个第一代码覆盖信息文件中满足该输入条件的代码覆盖信息得到第二代码覆盖信息文件。
在步骤304中,根据该第二代码覆盖信息文件计算代码覆盖率。
综上所述,本实施例提供的获取代码覆盖率方法,通过服务器接收n个第一代码覆盖信息文件并获取输入条件,然后合并该n个第一代码覆盖信息文件中满足该输入条件的代码覆盖信息得到第二代码覆盖信息文件,根据该第二代码覆盖信息文件计算代码覆盖率;解决了在多用户、多台测试设备或多个版本APP并行交叉测试情况下不能准确获取有效的代码覆盖率的问题;达到了提高获取代码覆盖率方便性和提高测试人员工作效率的效果。
图4是本发明再一个实施例提供的一种获取代码覆盖率方法的流程图,该方法通过服务器对待编译APP的源代码进行插桩编译,得到待测试APP的编译结果、有效行文件和编译号,并存储该编译号与该有效行文件的对应关系,测试设备获取m个APP的编译结果、编译号和测试用例,并根据每个APP的测试用例对每个所述编译结果进行测试,成第一代码覆盖信息文件,然后向服务器发送该第一代码覆盖信息文件,服务器接收n个第一代码覆盖信息文件并获取输入条件,然后合并该n个第一代码覆盖信息文件中满足该输入条件的代码覆盖信息得到第二代码覆盖信息文件,根据该第二代码覆盖信息文件和有效行文件计算代码覆盖率。参见图4,该方法包括:
在步骤401中,服务器接收待编译APP标识和APP版本号,从代码库拉取与待编译的APP标识和APP版本号对应的源代码。
待编译的APP标识和APP版本号是测试人员通过测试设备发送给服务器的,当开发出某个新版本APP时,测试人员可以向测试设备输入该APP的APP标识和需要测试的该APP版本号,测试设备将该APP的APP标识和APP版本号作为待编译的APP标识和APP版本号,并发送给服务器。
APP标识用于唯一标识一个APP,可以通过给终端中所有APP进行编号作为APP的标识,比如APP1,APP2。
代码库用于存储至少一个APP的源代码集合,该APP的源代码集合包括至少一个该APP版本对应的源代码子集合,一个该APP版本对应的源代码子集合包括该APP版本对应的至少一个源代码。
对于该APP,该APP的各APP版本对应的源代码子集合中的源代码都是技术人员开发的,具体为:技术人员在开发该APP的某个APP版本时,首先编写出该APP版本对应的第一版本的源代码,该源代码的版本为第一版本,并将第一版本的源代码存储该APP版本对应的源代码子集合中;然后对第一版本的源代码进行测试,如果测试出第一版本的源代码中存在的缺陷,再对第一版本的源代码进行修改得到第二版本的源代码,该源代码的版本为第二版本,将第二版本的源代码存储在该APP版本对应的源代码子集合中;对第二版本的源代码进行测试,重复上述过程,直到不存在缺陷的源代码作为该APP版本对应的最终源代码。所以在代码库中存在该APP版本对应的至少一个版本的源代码。
例如,对于APP1,开发人员开发APP1的3.0版本时,首先编写版本3.01对应的第一版本的源代码3.01,源代码3.01的版本为3.01,然后对3.01版本的源代码进行测试,如果测试出3.01版本的源代码中存在的缺陷,再对3.01版本的源代码进行修改得到3.02版本的源代码,该源代码的版本为3.02,将3.02版本的源代码存储在该APP版本对应的源代码子集合中;对3.02版本的源代码进行测试,重复上述过程,直到不存在缺陷的源代码,比如,3.04版本源代码,则3.04版本源代码作为该APP3.0版本对应的最终源代码。
其中,还需要说明:代码库中的每个源代码中包括该源代码属于的APP的APP标识和APP版本以及自身的源代码版本。例如,对于APP1的源代码3.01,源代码3.01中包括APP1的APP标识、APP版本3.0和源代码版本3.01。
本步骤可以为:服务器接收测试设备发送的待编译的APP标识和APP版本号,从代码库查找包括待编译的APP标识和APP版本号的源代码,从查找的源代码中获取源代码版本最新的源代码。以上述APP1和3.0版本为例,服务器接收到测试设备发送的待编译的APP标识和APP版本号分别为APP1和3.0,那么从代码库查找包括待编译的APP1和3.0版本号的源代码,从查找的源代码中获取源代码版本最新的3.04源代码。
在步骤402中,服务器对待编译APP的源代码进行插桩编译,得到待测试APP的编译结果、有效行文件和编译号。
本步骤可以为:服务器将待编译APP的源代码编译成二进制可执行代码,在编译的过程中对该源代码中的有效代码行的行号进行标记,忽略源代码中的注释行和空行等无效代码行,在编译完该源代码后,将标记的有效代码行的行号存储在有效行文件中,设置用于标识待编译APP的APP版本号和该源代码的版本号。
该二进制可执行代码即为插桩编译的编译结果,将该编译结果记为build_result。该编译结果可以被测试设备识别,可安装到测试设备上使得测试设备完成对该APP的测试。
对源代码中的有效行代码进行标记,将源代码中标记的所有的有效行代码的行号记录在同一文件中,即为有效行文件,记为linemap.txt。该有效行文件还可记录APP的版本号、源代码的版本号等信息,将有效代码行的行号、APP的版本号和源代码的版本号均称为有效代码行信息。例如,对于在步骤401中获取的待编译APP1的源代码为3.04版本源代码,对3.04版本源代码进行插桩编译,插桩编译后得到的有效行文件包括待编译APP1的版本3.0、3.04版本源代码的版本号3.04,以及有效代码行的行号1,2,3,4,5,6,7,8,……,18,19,20。设置一个编译号,该编译号与该待编译APP的版本号3.0和3.04版本源代码的版本号3.04对应,记为build_id,其内容可以为待编译APP的版本号3.0+3.04版本源代码的版本号3.04。
在步骤403中,服务器存储该编译号与该有效行文件的对应关系。
仍以上述例子为例,服务器得到待测试的APP1的编译结果build_result、有效行文件linemap.txt和编译号3.0+3.04后,存储该编译号3.0+3.04与该有效行文件linemap.txt的对应关系,以便用到时方便获取。
测试人员还可以重复上述300至302的过程,对待编译APP的其他版本或其他APP的各版本进行编译,所以在本实施例中服务器中包括多个APP的编译结果、有效行文件和编译号,记服务器中包括M个APP的编译结果、有效行文件和编译号,M为大于或等于1的整数。
对待编译APP进行编译完后,测试人员可以在测试设备上对APP进行测试,具体实现过程如下:
在步骤404中,测试设备获取m个APP的编译结果和编译号,m为大于或等于1且小于或等于M的整数。
测试人员在测试设备上输入的m个APP中的每个APP的APP标识和版本号,测试设备根据测试人员输入的每个的APP标识和版本号从服务器获取每个APP的编译结果和编译号。
仍以上述例子为例,测试人员tester_1在测试设备device_1上输入APP标识APP1和APP版本号3.0,测试设备根据该APP标识APP1和APP版本号3.0获取编译结果build_result和编译号3.0+3.04。
在步骤405中,该测试设备获取测试人员配置的该m个APP中的每个APP的测试用例。
每个APP的测试用例都测试人员配置的并输入给测试设备。相应的,本步骤可以为:测试设备获取测试人员输入的每个APP的测试用例。
仍以上述例子为例,本步骤可以:测试设备device_1接收测试人员tester_1输入的APP1的测试用例。
在步骤406中,测试设备根据每个APP的测试用例对每个所述编译结果进行测试,并生成第一代码覆盖信息文件。
其中,第一代码覆盖信息文件包括测试设备的设备标识、测试人员的用户标识、每个APP的编译号和每个APP的编译号对应的被执行代码行覆盖信息。
本步骤可以为:对m个APP中的任一个APP,为了便于说明将该APP称为第一APP,根据第一APP的测试用例对第一编译结果进行测试,并获取该第一APP的源代码中被执行的代码行的代码行覆盖信息,并每当获取到代码行覆盖信息时,将第一APP的编译号和获取的代码行覆盖信息的对应关系存储在第一代码覆盖信息文件中;对于剩下的m个APP,都按上述处理,在此不再一一说明;在处理完每个APP后,将该测试设备的设备标识、测试人员的用户标识存储在第一代码覆盖信息文件中。
可选的,将该测试设备的设备标识、测试人员的用户标识存储在第一代码覆盖信息文件的文件名中。
可选的,被执行的代码行的代码行覆盖信息可以包括被执行的代码行的行号等信息。
例如,假设APP1的2.0版本被安装到测试设备device_1上并由测试人员tester_1和tester_2进行测试,得到该被测试的APP1的源代码中被执行到的代码行的行号为:2,4,5,6,8,10,18和2,4,5,7,8,9,10,18;该APP1的3.0版本被安装到测试设备device_2上并由测试人员tester_1和tester_2进行测试,得到该被测试的APP的源代码中被执行到的代码行的行号为:2,4,5,6,8,10,15,19,20和1,2,4,5,6,8,10,15,19,20。
可选的,该第一代码覆盖信息文件的文件名包括该测试设备的设备标识和该用户的用户标识。例如,可以将测试人员tester_1和tester_2在测试设备device_1上测试得到的第一代码覆盖信息文件的文件命名分别为tester_1_device_1.txt和tester_2_device_1.txt,将测试人员tester_1和tester_2在测试设备device_2上测试得到的第一代码覆盖信息文件的文件命名为tester_1_device_2.txt和tester_2_device_2.txt等等。
所以,tester_1_device_1.txt中的内容可以为:2.0+2.01 2,4,5,6,8,10,18。
tester_2_device_1.txt中的内容可以为:2.0+2.01 2,4,5,7,8,9,10,18。
tester_1_device_2.txt中的内容可以为:3.0+3.04 2,4,5,6,8,10,15,19,20。
tester_2_device_2.txt中的内容可以为:3.0+3.04 1,2,4,5,6,8,10,15,19,20。
其中,2.0+2.01和3.0+3.04为编译号,2,4,5,6,8,10,18为该被测试的APP的源代码中被执行到的代码行的行号。
在步骤407中,该测试设备向服务器发送该第一代码覆盖信息文件。
仍以上述例子为例,该步骤可以为:测试设备device_1向服务器发送第一代码覆盖信息文件tester_1_device_1和tester_2_device_1,测试设备device_2向服务器发送第一代码覆盖信息文件tester_1_device_2和tester_2_device_2。
在本实施例中,有至少一个测试设备执行上述404至407的步骤,假设有n个测试设备,即该n个测试设备分别向服务器发送各自获取的第一代码覆盖信息文件,详细过程如下:
在步骤408中,服务器接收n个测试设备发送的第一代码覆盖信息文件。
仍以上述例子为例,服务器接收到的第一代码覆盖信息文件为tester_1_device_1,tester_2_device_1,tester_1_device_2和tester_2_device_2。
在步骤409中,服务器获取输入条件,该输入条件包括待分析的设备标识、用户标识和APP的编译号中的至少一个。
可选的,该输入条件可以为测试人员输入给服务器的,即服务器获取测试人员输入的输入条件。
输入条件是根据不同需求输入的想要分析的测试设备,测试人员和APP版本等信息中的至少一个。例如,可以输入device_1,2.0+2.01那么获取到的输入条件为device_1,2.0+2.01。
在步骤410中,服务器从该n个第一代码覆盖信息文件中选择包括该待分析的设备标识和/或用户标识的k个第一代码覆盖信息文件。
如果该n个第一代码覆盖信息文件中的每个第一代码覆盖信息文件的文件名中包括测试设备的设备标识和测试人员的用户标识,则本步骤可以为:服务器根据待分析的设备标识和/或用户标识中的至少一个信息,从n个第一代码覆盖信息文件中筛选出文件名包含有待分析的设备标识和/或用户标识的第一代码覆盖信息文件,将获取的第一代码覆盖信息文件组成文件列表,记为file_list,文件列表file_list中包括的第一代码覆盖信息文件的数目记为k。
例如,如果服务器保存的第一代码覆盖信息文件有:tester_1_device_1,tester_2_device_1,tester_1_device_2和tester_2_device_2。当服务器获取到的输入条件为为tester_1时,选择出的file_list为tester_1_device_1和tester_1_device_2;当服务器获取到的输入条件为tester_2时,选择出的file_list为tester_2_device_1和tester_2_device_2;当服务器获取到的输入条件为为device_1时,选择出的file_list为tester_1_device_1和tester_2_device_1;当服务器获取到的输入条件为tester_1,2.0+2.01时,选择出的file_list为tester_1_device_1和tester_1_device_2;当服务器获取到的输入条件为tester_2,3.0+3.04时,选择出的file_list为tester_2_device_1和tester_2_device_2。
在步骤411中,服务器从该k个第一代码覆盖信息文件中获取该待分析的APP的编译号对应的被执行代码行覆盖信息,并存储在第二代码覆盖信息文件中。
本步骤可以为:对于该k个第一代码覆盖信息文件中的任一第一代码覆盖信息文件,服务器根据待分析的APP的编译号,从该第一代码覆盖信息文件中保存的编译号与代码覆盖信息的对应关系中,获取待分析的APP的编译号对应的代码覆盖信息,将获取的代码覆盖信息存储在第二代码覆盖信息文件中;对于其个k-1个第一代码覆盖信息文件,分别执行上述操作,就不一一说明。
仍以上述例子为例,当服务器获取到的输入条件为tester_1,2.0+2.01时,该步骤可以为:从tester_1_device_1和tester_1_device_2中,获取有关2.0版本,源代码版本为2.01的代码覆盖信息,并将获取有关的代码覆盖信息合并到第二代码覆盖信息文件中,记为cov.txt。此时cov.txt的内容为2.0+2.01 2,4,5,6,8,18。
当服务器获取到的输入条件为tester_2,3.0+3.04时,该步骤可以为:从tester_2_device_1和tester_2_device_2中,获取有关3.0版本,源代码版本为3.04的代码覆盖信息,并将获取有关的代码行覆盖信息合并到第二代码覆盖信息文件中,记为cov.txt。此时cov.txt的内容为:3.0+3.04 1,2,4,5,6,7,8,9,10,15,18,19,20。
在步骤412中,服务器根据该待分析的APP的编译号,从编译号与有效行文件的对应关系中获取该待分析的APP的有效行文件,该有效行文件包括该待分析的APP中有效代码行信息。
仍以上述例子为例,当服务器获取到的编译号2.0+2.01时,该步骤可以为:从编译号与有效行文件的对应关系中获取到有效行文件,该有效行文件中的内容为:2.0+2.01 1,2,3,4,5,6,7,8,……,18,19,20。当服务器获取到的编译号3.0+3.04时,该步骤可以为:从编译号与有效行文件的对应关系中获取到有效行文件,该有效行文件中的内容为:3.0+3.04 1,2,3,4,5,6,7,8,……,18,19,20。
可选的,在获取与该编译号对应的有效行文件时,可同时获取该APP该版本源代码的有效行文件和上一版本源代码有效行文件。该源代码版本相较与该源代码上一版本只对该源代码上一版本行进了的行,为该源代码版本的差异代码行。所在行的代码为差异代码。
以上述例子中的2.0版本为例,2.01源代码版本相较与2.0源代码一版本只有2,4,5,6,8,11,13,15,18,20行进行了修改,那么上述2,4,5,6,8,11,13,15,18,20行为该源代码版本的差异代码行。所在行的代码为差异代码。
在步骤413中,服务器根据该第二代码覆盖信息文件和该有效行文件,计算代码覆盖率。
代码覆盖率用于描述程序中的源代码被执行的比例和程度,根据该代码覆盖率确定程序是否被完整有效地测试。代码覆盖率用该APP源代码中被执行到代码的行数总数与该源代码中有效行的总行数的比值来表示。
可选的,该代码覆盖率可以为整体代码覆盖率,也可以为差异代码覆盖率。整体覆盖率为该源代码版本的代码覆盖率。差异代码覆盖率为该源代码版本与该源代码上一版本的差异代码的代码覆盖率。
对于整体代码覆盖率,其计算过程具体为:根据第二代码覆盖信息文件中,确定待分析的APP中被执行的代码行,统计被执行的代码行得到第一行数,根据有效行文件确定待分析的APP中包括的有效代码行,统计确定的有效代码行得到第二行数,计算第一行数与第二行数之间的比值,得到待分析的APP的整体代码覆盖率。
对于差异代码代码覆盖率,其计算过程具体为:根据待分析的APP的编译号,确定待分析的APP的版本,根据待分析的APP的APP标识信息和版本,从代码库中该版本对应的源代码子集合,从该源代码子集合中选择最新的两个版本的源代码,计算该两个版本的源代码之间的差异信息;根据该第二代码覆盖信息文件,确定该差异信息中被执行的代码行,并统计确定的代码行得到第一行数,根据有效行文件,确定该差异信息中包括的有效代码行,并统计确定的有效代码行得到第二行数,计算第一行数与第二行数之间的比值,得到待分析的APP的差异代码覆盖率。
仍以上述例子为例,对于输入条件为tester_1,2.0+2.01时的整体覆盖率,该步骤可以为:服务器根据第二代码行覆盖信息文件中的内容:2.0+2.01 2,4,5,6,8,18和有效行文件中的内容:2.0+2.01 1,2,3,4,5,6,7,8,……,18,19,20计算代码覆盖率,具体计算为第二代码行覆盖信息文件中的行数与有效行文件中总行数的比值,也即6/20。
对于输入条件为tester_2,3.0+3.04时的整体覆盖率,该步骤可以为:服务器根据第二代码行覆盖信息文件中的内容:3.0+3.04 1,2,4,5,6,7,8,9,10,15,18,19,20和有效行文件中的内容:3.0+3.04 1,2,3,4,5,6,7,8,……,18,19,20计算代码覆盖率,具体计算为第二代码行覆盖信息文件中的行数与有效行文件中总行数的比值,也即13/20。
对于差异覆盖率,以2.0+2.01版本为例,该步骤可以为:与差异代码行数的比值,也即,8/10。
在步骤414中,服务器根据计算得到的代码覆盖率生成代码覆盖率报告。
代码覆盖率报告用于显示本次测试的代码覆盖率,记为reprot.html,当然也可以根据需要生成其它格式的文件,例如,.txt,.pdf等。
可选的,该代码覆盖率报告可以为整体代码覆盖率报告,也可为差异代码覆盖率。
代码覆盖率报告的内容可以根据不同的需求生成不同的报告,仍以上述例子为例,如果只需要生成整体代码覆盖率,则代码覆盖率报告的内容为:total,line,%:65%。如果只需要生成差异代码覆盖率,则代码覆盖率报告的内容为:diff,line,%:80%。
综上所述,本实施例提供的获取代码覆盖率方法,通过服务器对待编译APP的源代码进行插桩编译,得到待测试APP的编译结果、有效行文件和编译号,并存储该编译号与该有效行文件的对应关系,测试设备获取m个APP的编译结果、编译号和测试用例,并根据每个APP的测试用例对每个所述编译结果进行测试,成第一代码覆盖信息文件,然后向服务器发送该第一代码覆盖信息文件,服务器接收n个第一代码覆盖信息文件并获取输入条件,然后合并该n个第一代码覆盖信息文件中满足该输入条件的代码覆盖信息得到第二代码覆盖信息文件,根据该第二代码覆盖信息文件和有效行文件计算代码覆盖率解决了在多用户、多台测试设备或多个版本APP并行交叉测试情况下不能准确获取有效的代码覆盖率的问题;达到了提高获取代码覆盖率方便性和提高测试人员工作效率的效果。
下述为本发明装置实施例,可以用于执行本发明方法实施例。对于本发明装置实施例中未披露的细节,请参照本发明方法实施例。
图5A本发明一个实施例提供的一种获取代码覆盖率装置的框图,参见图5A,该装置包括:第一获取模块501、第二获取模块502、测试生成模块503和发送模块504。
第一获取模块501,用于获取m个APP的编译结果和编译号,m为大于或等于1的整数,该APP的编译结果和编译号是对该APP的源代码进行插桩编译得到的,该编译号用于标识该APP的版本和该源代码的版本。
第二获取模块502,用于获取用户配置的该m个APP中的每个APP的测试用例。
测试生成模块503,用于根据该第二获取模块502获取到的该每个APP的测试用例对该第一获取模块501获取到的每个该编译结果进行测试,并生成第一代码覆盖信息文件,该第一代码覆盖信息文件包括该测试设备的设备标识、该用户的用户标识、该每个APP的编译号和该每个APP的编译号对应的代码行覆盖信息。
发送模块504,用于该装置向服务器发送该测试生成模块503生成的该第一代码覆盖信息文件,使该服务器根据该第一代码覆盖信息文件计算代码覆盖率。
可选的,参见图5B,该测试生成模块503,包括:
测试获取子模块5031,用于根据第一APP的测试用例对第一编译结果进行测试,并获取该第一APP的源代码中被执行的代码行的代码行覆盖信息,该第一APP是该m个APP中的任一APP;
存储子模块5032,用于将该测试获取子模块5031获取的该代码行覆盖信息和该第一APP的编译号的对应关系存储在第一代码覆盖信息文件中。
可选的,该第一代码覆盖信息文件的文件名包括该测试设备的设备标识和该用户的用户标识。
综上所述,本实施例提供的获取代码覆盖率装置,通过测试设备获取m个APP的编译结果、编译号和测试用例,并根据每个APP的测试用例对每个所述编译结果进行测试,并生成第一代码覆盖信息文件,然后向服务器发送该第一代码覆盖信息文件,使服务器根据该第一代码覆盖信息文件计算代码覆盖率;解决了在多用户、多台测试设备或多个版本APP并行交叉测试情况下不能准确获取有效的代码覆盖率的问题;达到了提高获取代码覆盖率方便性和提高测试人员工作效率的效果。
图6A是本发明另一个实施例提供的一种获取代码覆盖率装置的框图,参见图6A,该装置包括:接收模块601、获取模块602、合并模块603和计算模块604。
接收模块601,用于接收n个第一代码覆盖信息文件,第一代码覆盖信息文件包括设备标识、用户标识、m个APP中的每个APP的编译号和该每个APP的编译号对应的被执行代码行覆盖信息,m和n均为大于或等于1的整数。
获取模块602,用于获取输入条件,该输入条件包括待分析的设备标识、用户标识和APP的编译号中的至少一个。
合并模块603,用于合并该接收模块601接收到的该n个第一代码覆盖信息文件中满足该获取模块602获取到的该输入条件的代码覆盖信息得到第二代码覆盖信息文件。
计算模块604,用于根据该合并模块603得到的该第二代码覆盖信息文件计算代码覆盖率。
可选的,参见图6B,该合并模块603,包括:
选择子模块6031,用于从该接收模块601接收到的该n个第一代码覆盖信息文件中选择包括该待分析的设备标识和/或用户标识的k个第一代码覆盖信息文件。
获取存储子模块6032,用于从该选择子模块6031选择到的该k个第一代码覆盖信息文件中获取该待分析的APP的编译号对应的被执行代码行覆盖信息,并存储在第二代码覆盖信息文件中。
可选的,请参见图6C,该计算模块604,包括:
获取子模块6041,用于根据该获取存储子模块获取到的该待分析的APP的编译号,从编译号与有效行文件的对应关系中获取该待分析的APP的有效行文件,该有效行文件包括该待分析的APP中有效代码行信息。
计算子模块6042,用于根据该第二代码覆盖信息文件和该有效行文件,计算代码覆盖率。
可选的,请参见见图7,该装置,还包括:
插桩编译存储模块605,用于对待测试的APP的源代码进行插桩编译,得到该待测试的APP的编译结果、有效行文件和编译号;以及存储该编译号与该有效行文件的对应关系。
可选的,该第一代码覆盖信息文件的文件名包括该设备标识和该用户标识。
综上所述,本实施例提供的获取代码覆盖率装置,通过服务器接收n个第一代码覆盖信息文件并获取输入条件,然后合并该n个第一代码覆盖信息文件中满足该输入条件的代码覆盖信息得到第二代码覆盖信息文件,根据该第二代码覆盖信息文件计算代码覆盖率;解决了在多用户、多台测试设备或多个版本APP并行交叉测试情况下不能准确获取有效的代码覆盖率的问题;达到了提高获取代码覆盖率方便性和提高测试人员工作效率的效果。
需要说明的是:上述实施例提供的获取代码覆盖率装置,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的获取代码覆盖率装置与获取代码覆盖率方法的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
请参考图8,其示出了本发明一个实施例提供的电子设备的结构示意图。该电子设备用于实施上述实施例中提供的获取代码覆盖率方法。具体来讲:
电子设备800可以包括RF(Radio Frequency,射频)电路810、包括有一个或一个以上计算机可读存储介质的存储器820、输入单元830、显示单元840、传感器850、音频电路860、WiFi(wireless fidelity,无线保真)模块870、包括有一个或者一个以上处理核心的处理器880、以及电源890等部件。本领域技术人员可以理解,图8中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
RF电路810可用于收发信息或通话过程中,信号的接收和发送,特别地,将基站的下行信息接收后,交由一个或者一个以上处理器880处理;另外,将涉及上行的数据发送给基站。通常,RF电路810包括但不限于天线、至少一个放大器、调谐器、一个或多个振荡器、用户身份模块(SIM)卡、收发信机、耦合器、LNA(Low Noise Amplifier,低噪声放大器)、双工器等。此外,RF电路810还可以通过无线通信与网络和其他设备通信。所述无线通信可以使用任一通信标准或协议,包括但不限于GSM(Global System of Mobile communicati on,全球移动通讯系统)、GPRS(General Packet Radio Service,通用分组无线服务)、CDMA(Code Division Multiple Access,码分多址)、WCDMA(Wideband Code DivisionMultiple Access,宽带码分多址)、LTE(Long Term Evolution,长期演进)、电子邮件、SMS(Short Messaging Service,短消息服务)等。
存储器820可用于存储软件程序以及模块,处理器880通过运行存储在存储器820的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器820可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据电子设备800的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器820可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器820还可以包括存储器控制器,以提供处理器880和输入单元830对存储器820的访问。
输入单元830可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。具体地,输入单元830可包括图像输入设备831以及其他输入设备832。图像输入设备831可以是摄像头,也可以是光电扫描设备。除了图像输入设备831,输入单元830还可以包括其他输入设备832。具体地,其他输入设备832可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
显示单元840可用于显示由用户输入的信息或提供给用户的信息以及电子设备800的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。显示单元840可包括显示面板841,可选的,可以采用LCD(Liquid Crystal Display,液晶显示器)、OLED(Organic Light-Emitting Diode,有机发光二极管)等形式来配置显示面板841。
电子设备800还可包括至少一种传感器850,比如光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板841的亮度,接近传感器可在电子设备800移动到耳边时,关闭显示面板841和/或背光。作为运动传感器的一种,重力加速度传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;至于电子设备800还可配置的陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。
音频电路860、扬声器861,传声器862可提供用户与电子设备800之间的音频接口。音频电路860可将接收到的音频数据转换后的电信号,传输到扬声器861,由扬声器861转换为声音信号输出;另一方面,传声器862将收集的声音信号转换为电信号,由音频电路860接收后转换为音频数据,再将音频数据输出处理器880处理后,经RF电路810以发送给比如另一电子设备,或者将音频数据输出至存储器820以便进一步处理。音频电路860还可能包括耳塞插孔,以提供外设耳机与电子设备800的通信。
WiFi属于短距离无线传输技术,电子设备800通过WiFi模块870可以帮助用户收发电子邮件、浏览网页和访问流式媒体等,它为用户提供了无线的宽带互联网访问。虽然图8示出了WiFi模块870,但是可以理解的是,其并不属于电子设备800的必须构成,完全可以根据需要在不改变发明的本质的范围内而省略。
处理器880是电子设备800的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器820内的软件程序和/或模块,以及调用存储在存储器820内的数据,执行电子设备800的各种功能和处理数据,从而对手机进行整体监控。可选的,处理器880可包括一个或多个处理核心;优选的,处理器880可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器880中。
电子设备800还包括给各个部件供电的电源890(比如电池),优选的,电源可以通过电源管理系统与处理器880逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源890还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
尽管未示出,电子设备800还可以包括蓝牙模块等,在此不再赘述。
具体在本实施例中,电子设备800还包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行。上述一个或者一个以上程序包含用于进行以下操作的指令:
测试设备获取m个应用程序APP的编译结果和编译号,m为大于或等于1的整数,所述APP的编译结果和编译号是对所述APP的源代码进行插桩编译得到的,所述编译号用于标识所述APP的版本和所述源代码的版本;
所述测试设备获取用户配置的所述m个APP中的每个APP的测试用例;
所述测试设备根据所述每个APP的测试用例对每个所述编译结果进行测试,并生成第一代码覆盖信息文件,所述第一代码覆盖信息文件包括所述测试设备的设备标识、所述用户的用户标识、所述每个APP的编译号和所述每个APP的编译号对应的代码行覆盖信息;
所述测试设备向服务器发送所述第一代码覆盖信息文件,使所述服务器根据所述第一代码覆盖信息文件计算代码覆盖率。
假设上述为第一种可能的实施方式,则在第一种可能的实施方式作为基础而提供的第二种可能的实施方式中,所述电子设备的存储器中,还包含用于执行以下操作的指令:
根据第一APP的测试用例对第一编译结果进行测试,并获取所述第一APP的源代码中被执行的代码行的代码行覆盖信息,所述第一APP是所述m个APP中的任一APP;
将所述获取的代码行覆盖信息和所述第一APP的编译号的对应关系存储在第一代码覆盖信息文件中。
图9示出了本发明一个实施例提供的服务器的结构示意图。该服务器用于实施上述实施例中提供的获取代码覆盖率方法。具体来讲:
所述服务器900包括中央处理单元(CPU)901、包括随机存取存储器(RAM)902和只读存储器(ROM)903的系统存储器904,以及连接系统存储器904和中央处理单元901的系统总线905。所述服务器900还包括帮助计算机内的各个器件之间传输信息的基本输入/输出系统(I/O系统)906,和用于存储操作系统913、应用程序914和其他程序模块915的大容量存储设备907。
所述基本输入/输出系统906包括有用于显示信息的显示器908和用于用户输入信息的诸如鼠标、键盘之类的输入设备909。其中所述显示器908和输入设备909都通过连接到系统总线905的输入输出控制器910连接到中央处理单元901。所述基本输入/输出系统906还可以包括输入输出控制器910以用于接收和处理来自键盘、鼠标、或电子触控笔等多个其他设备的输入。类似地,输入输出控制器910还提供输出到显示屏、打印机或其他类型的输出设备。
所述大容量存储设备907通过连接到系统总线905的大容量存储控制器(未示出)连接到中央处理单元901。所述大容量存储设备907及其相关联的计算机可读介质为服务器900提供非易失性存储。也就是说,所述大容量存储设备907可以包括诸如硬盘或者CD-ROM驱动器之类的计算机可读介质(未示出)。
不失一般性,所述计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括RAM、ROM、EPROM、EEPROM、闪存或其他固态存储其技术,CD-ROM、DVD或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知所述计算机存储介质不局限于上述几种。上述的系统存储器904和大容量存储设备907可以统称为存储器。
根据本发明的各种实施例,所述服务器900还可以通过诸如因特网等网络连接到网络上的远程计算机运行。也即服务器900可以通过连接在所述系统总线905上的网络接口单元911连接到网络912,或者说,也可以使用网络接口单元911来连接到其他类型的网络或远程计算机系统(未示出)。
所述存储器还包括一个或者一个以上的程序,所述一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行。上述一个或者一个以上程序包含用于进行以下操作的指令:
接收n个第一代码覆盖信息文件,第一代码覆盖信息文件包括设备标识、用户标识、m个APP中的每个APP的编译号和所述每个APP的编译号对应的代码行覆盖信息,m和n均为大于或等于1的整数;
获取输入条件,所述输入条件包括待分析的设备标识、用户标识和APP的编译号中的至少一个;
合并所述n个第一代码覆盖信息文件中满足所述输入条件的代码覆盖信息得到第二代码覆盖信息文件;
根据所述第二代码覆盖信息文件计算代码覆盖率。
假设上述为第一种可能的实施方式,则在第一种可能的实施方式作为基础而提供的第二种可能的实施方式中,所述服务器的存储器中,还包含用于执行以下操作的指令:
从所述n个第一代码覆盖信息文件中选择包括所述待分析的设备标识和/或用户标识的k个第一代码覆盖信息文件;
从所述k个第一代码覆盖信息文件中获取所述待分析的APP的编译号对应的被执行代码行覆盖信息,并存储在第二代码覆盖信息文件中。
假设上述为第一种可能的实施方式,则在第一种可能的实施方式作为基础而提供的第三种可能的实施方式中,所述服务器的存储器中,还包含用于执行以下操作的指令:
根据所述待分析的APP的编译号,从编译号与有效行文件的对应关系中获取所述待分析的APP的有效行文件,所述有效行文件包括所述待分析的APP中有效代码行信息;
根据所述第二代码覆盖信息文件和所述有效行文件,计算代码覆盖率。
假设上述为第一种可能的实施方式,则在第一种可能的实施方式作为基础而提供的第四种可能的实施方式中,所述服务器的存储器中,还包含用于执行以下操作的指令:
对待测试的APP的源代码进行插桩编译,得到所述待测试的APP的编译结果、有效行文件和编译号;以及存储所述编译号与所述有效行文件的对应关系。
应当理解的是,在本文中使用的,除非上下文清楚地支持例外情况,单数形式“一个”(“a”、“an”、“the”)旨在也包括复数形式。还应当理解的是,在本文中使用的“和/或”是指包括一个或者一个以上相关联地列出的项目的任意和所有可能组合。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (14)

1.一种获取代码覆盖率的方法,其特征在于,所述方法包括:
测试设备获取m个应用程序APP的编译结果和编译号,m为大于或等于1的整数,所述APP的编译结果和编译号是对所述APP的源代码进行插桩编译得到的,所述编译号用于标识所述APP的版本和所述源代码的版本;
所述测试设备获取用户配置的所述m个APP中的每个APP的测试用例;
所述测试设备根据第一APP的测试用例对第一编译结果进行测试,并获取所述第一APP的源代码中被执行的代码行的代码行覆盖信息,所述第一APP是所述m个APP中的任一APP;
将所述获取的代码行覆盖信息和所述第一APP的编译号的对应关系存储在第一代码覆盖信息文件中,所述第一代码覆盖信息文件包括所述测试设备的设备标识、所述用户的用户标识、所述每个APP的编译号和所述每个APP的编译号对应的代码行覆盖信息;
所述测试设备向服务器发送所述第一代码覆盖信息文件,使所述服务器根据所述第一代码覆盖信息文件计算代码覆盖率。
2.如权利要求1所述的方法,其特征在于,所述第一代码覆盖信息文件的文件名包括所述测试设备的设备标识和所述用户的用户标识。
3.一种获取代码覆盖率的方法,其特征在于,所述方法包括:
接收n个第一代码覆盖信息文件,第一代码覆盖信息文件包括设备标识、用户标识、m个APP中的每个APP的编译号和所述每个APP的编译号对应的代码行覆盖信息,m和n均为大于或等于1的整数;
获取输入条件,所述输入条件包括待分析的设备标识、用户标识和APP的编译号中的至少一个;
合并所述n个第一代码覆盖信息文件中满足所述输入条件的代码覆盖信息得到第二代码覆盖信息文件;
根据所述第二代码覆盖信息文件计算代码覆盖率。
4.如权利要求3所述的方法,其特征在于,所述合并所述n个第一代码覆盖信息文件中满足所述输入条件的代码覆盖信息得到第二代码覆盖信息文件,包括:
从所述n个第一代码覆盖信息文件中选择包括所述待分析的设备标识和/或用户标识的k个第一代码覆盖信息文件;
从所述k个第一代码覆盖信息文件中获取所述待分析的APP的编译号对应的被执行代码行覆盖信息,并存储在第二代码覆盖信息文件中。
5.如权利要求3所述的方法,其特征在于,所述根据所述第二代码覆盖信息文件计算代码覆盖率,包括:
根据所述待分析的APP的编译号,从编译号与有效行文件的对应关系中获取所述待分析的APP的有效行文件,所述有效行文件包括所述待分析的APP中有效代码行信息;
根据所述第二代码覆盖信息文件和所述有效行文件,计算代码覆盖率。
6.如权利要求5所述的方法,其特征在于,所述接收n个第一代码覆盖信息文件之前,还包括:
对待测试的APP的源代码进行插桩编译,得到所述待测试的APP的编译结果、有效行文件和编译号;以及存储所述编译号与所述有效行文件的对应关系。
7.如权利要求3至6任一项权利要求所述的方法,其特征在于,所述第一代码覆盖信息文件的文件名包括所述设备标识和所述用户标识。
8.一种获取代码覆盖率的装置,其特征在于,所述装置包括:第一获取模块、第二获取模块、测试生成模块和发送模块,所述测试生成模块包括测试获取子模块和存储子模块;
所述第一获取模块,用于获取m个应用程序APP的编译结果和编译号,m为大于或等于1的整数,所述APP的编译结果和编译号是对所述APP的源代码进行插桩编译得到的,所述编译号用于标识所述APP的版本和所述源代码的版本;
所述第二获取模块,用于获取用户配置的所述m个APP中的每个APP的测试用例;
所述测试获取子模块,用于根据第一APP的测试用例对第一编译结果进行测试,并获取所述第一APP的源代码中被执行的代码行的代码行覆盖信息,所述第一APP是所述m个APP中的任一APP;
所述存储子模块,用于将所述测试获取子模块获取的所述代码行覆盖信息和所述第一APP的编译号的对应关系存储在第一代码覆盖信息文件中,所述第一代码覆盖信息文件包括测试设备的设备标识、所述用户的用户标识、所述每个APP的编译号和所述每个APP的编译号对应的代码行覆盖信息;
所述发送模块,用于所述装置向服务器发送所述测试生成模块生成的所述第一代码覆盖信息文件,使所述服务器根据所述第一代码覆盖信息文件计算代码覆盖率。
9.如权利要求8所述的装置,其特征在于,所述第一代码覆盖信息文件的文件名包括所述测试设备的设备标识和所述用户的用户标识。
10.一种获取代码覆盖率的装置,其特征在于,所述装置包括:
接收模块,用于接收n个第一代码覆盖信息文件,第一代码覆盖信息文件包括设备标识、用户标识、m个APP中的每个APP的编译号和所述每个APP的编译号对应的被执行代码行覆盖信息,m和n均为大于或等于1的整数;
获取模块,用于获取输入条件,所述输入条件包括待分析的设备标识、用户标识和APP的编译号中的至少一个;
合并模块,用于合并所述接收模块接收到的所述n个第一代码覆盖信息文件中满足所述获取模块获取到的所述输入条件的代码覆盖信息得到第二代码覆盖信息文件;
计算模块,用于根据所述合并模块得到的所述第二代码覆盖信息文件计算代码覆盖率。
11.如权利要求10所述的装置,其特征在于,所述合并模块,包括:
选择子模块,用于从所述接收模块接收到的所述n个第一代码覆盖信息文件中选择包括所述待分析的设备标识和/或用户标识的k个第一代码覆盖信息文件;
获取存储子模块,用于从所述选择子模块选择到的所述k个第一代码覆盖信息文件中获取所述待分析的APP的编译号对应的被执行代码行覆盖信息,并存储在第二代码覆盖信息文件中。
12.如权利要求11所述的装置,其特征在于,所述计算模块,包括:
获取子模块,用于根据所述获取存储子模块获取到的所述待分析的APP的编译号,从编译号与有效行文件的对应关系中获取所述待分析的APP的有效行文件,所述有效行文件包括所述待分析的APP中有效代码行信息;
计算子模块,用于根据所述第二代码覆盖信息文件和所述有效行文件,计算代码覆盖率。
13.如权利要求12所述的装置,其特征在于,所述装置,还包括:
插桩编译存储模块,用于对待测试的APP的源代码进行插桩编译,得到所述待测试的APP的编译结果、有效行文件和编译号;以及存储所述编译号与所述有效行文件的对应关系。
14.如权利要求10至13任一项权利要求所述的装置,其特征在于,所述第一代码覆盖信息文件的文件名包括所述设备标识和所述用户标识。
CN201510864686.3A 2015-12-01 2015-12-01 获取代码覆盖率的方法及装置 Active CN105404585B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510864686.3A CN105404585B (zh) 2015-12-01 2015-12-01 获取代码覆盖率的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510864686.3A CN105404585B (zh) 2015-12-01 2015-12-01 获取代码覆盖率的方法及装置

Publications (2)

Publication Number Publication Date
CN105404585A CN105404585A (zh) 2016-03-16
CN105404585B true CN105404585B (zh) 2018-09-04

Family

ID=55470083

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510864686.3A Active CN105404585B (zh) 2015-12-01 2015-12-01 获取代码覆盖率的方法及装置

Country Status (1)

Country Link
CN (1) CN105404585B (zh)

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106326118B (zh) * 2016-08-19 2019-03-15 东软集团股份有限公司 代码测试覆盖率确定方法和装置
CN106339317B (zh) * 2016-08-25 2019-06-25 网易(杭州)网络有限公司 覆盖率检测方法、装置和设备
CN106294183B (zh) * 2016-08-25 2019-03-08 网易(杭州)网络有限公司 覆盖率检测方法、装置和设备
CN106326124A (zh) * 2016-08-25 2017-01-11 网易(杭州)网络有限公司 覆盖率检测方法、装置和设备
CN106502901A (zh) * 2016-10-24 2017-03-15 网易(杭州)网络有限公司 覆盖率检测方法、装置和设备
CN107329888B (zh) * 2017-05-31 2019-10-18 深圳前海微众银行股份有限公司 智能合约操作码覆盖率计算方法和系统
CN109783344B (zh) * 2017-11-14 2022-02-18 中国航发商用航空发动机有限责任公司 选取覆盖所有源代码结构的最小代码子集的方法
CN110471829B (zh) * 2018-05-09 2023-07-18 阿里巴巴集团控股有限公司 软件代码测试覆盖率的检查方法及装置
CN110580214B (zh) * 2018-06-07 2023-05-05 百度在线网络技术(北京)有限公司 应用程序测试的评估方法、装置、存储介质和终端设备
CN109388566B (zh) * 2018-09-27 2022-07-29 北京城市网邻信息技术有限公司 一种代码覆盖率分析方法、装置、设备及存储介质
CN110221963A (zh) * 2019-04-29 2019-09-10 北京三快在线科技有限公司 代码覆盖率获取方法及装置
CN110245073A (zh) * 2019-05-21 2019-09-17 北京字节跳动网络技术有限公司 终端代码覆盖率监测方法、系统、介质和电子设备
CN110781071B (zh) * 2019-09-09 2022-10-14 中国平安财产保险股份有限公司 应用程序升级版本的测试方法、装置及计算机设备
CN110968507B (zh) * 2019-11-20 2023-07-25 北京创鑫旅程网络技术有限公司 覆盖率统计方法及装置
CN111090583B (zh) * 2019-11-25 2023-04-07 广州品唯软件有限公司 代码覆盖率报告的生成方法、装置和计算机设备
CN110908915B (zh) * 2019-11-27 2023-04-14 广州品唯软件有限公司 一种测试覆盖率的展示方法、装置及计算机系统
CN111124894B (zh) * 2019-12-06 2023-04-28 广州品唯软件有限公司 代码覆盖率的处理方法、装置和计算机设备
CN111008138B (zh) * 2019-12-06 2023-03-17 广州品唯软件有限公司 代码覆盖率的处理方法、装置和计算机设备
CN111078549B (zh) * 2019-12-06 2023-03-17 广州品唯软件有限公司 代码覆盖率的处理方法、装置和计算机设备
CN111078560B (zh) * 2019-12-18 2020-12-01 北京嘀嘀无限科技发展有限公司 基于流量剪枝的测试方法、装置、电子设备及存储介质
CN110888817B (zh) * 2019-12-18 2023-10-24 广州品唯软件有限公司 代码覆盖率报告的生成方法、装置和可读存储介质
CN112100055A (zh) * 2020-08-13 2020-12-18 浙江大学 一种基于代码覆盖率的灰度发布度量方法
CN112395204B (zh) * 2020-12-04 2024-04-16 京东科技信息技术有限公司 用于获取测试覆盖率的方法、系统、相关装置和介质
CN114116480A (zh) * 2021-11-26 2022-03-01 北京字节跳动网络技术有限公司 应用程序测试覆盖率的确定方法、装置、介质及设备
CN115658534B (zh) * 2022-11-04 2024-01-19 上海安般信息科技有限公司 一种基于多引擎融合的分布式模糊测试方法及装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103207828A (zh) * 2012-01-12 2013-07-17 上海盛霄云计算技术有限公司 一种代码测试方法及系统
CN104298587A (zh) * 2013-07-15 2015-01-21 腾讯科技(深圳)有限公司 一种代码覆盖测试方法、装置和系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7926114B2 (en) * 2007-05-31 2011-04-12 Microsoft Corporation Testing software applications with schema-based fuzzing

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103207828A (zh) * 2012-01-12 2013-07-17 上海盛霄云计算技术有限公司 一种代码测试方法及系统
CN104298587A (zh) * 2013-07-15 2015-01-21 腾讯科技(深圳)有限公司 一种代码覆盖测试方法、装置和系统

Also Published As

Publication number Publication date
CN105404585A (zh) 2016-03-16

Similar Documents

Publication Publication Date Title
CN105404585B (zh) 获取代码覆盖率的方法及装置
CN106502906B (zh) 一种测试应用程序的方法和装置
CN105828145B (zh) 互动方法及装置
CN106126411B (zh) 一种对被测程序代码进行测试的方法和装置
CN108519945A (zh) 覆盖率测试方法、装置及存储设备
CN105363201B (zh) 提示信息的显示方法及装置
CN107943683B (zh) 一种测试脚本生成方法、装置、电子设备及存储介质
CN106708554B (zh) 程序运行方法及装置
CN105320701B (zh) 功能点测试实现方式的筛选方法、装置及终端
CN104572046B (zh) 一种堆栈还原方法和计算机系统
CN107391198B (zh) 任务调度方法和装置、计算机可读存储介质、移动终端
CN105389259B (zh) 一种进行应用程序测试的方法、装置及系统
CN107103211B (zh) Sdk发送、应用发布、应用运行方法及装置
CN104965722B (zh) 一种显示信息的方法及装置
CN107622200A (zh) 应用程序的安全性检测方法及装置
CN108984064A (zh) 分屏显示方法、装置、存储介质和电子设备
CN108089977A (zh) 一种应用程序的异常处理方法、装置及移动终端
CN105740145B (zh) 定位控件中的元素的方法及装置
CN110196795A (zh) 检测移动终端应用运行状态的方法及相关装置
CN108415741A (zh) 对象序列化和反序列化方法及相关装置
CN108073495A (zh) 应用程序崩溃原因的定位方法及装置
CN107219951A (zh) 触控屏控制方法、装置、存储介质及终端设备
CN110046497A (zh) 一种函数挂钩实现方法、装置和存储介质
CN108958629A (zh) 分屏退出方法、装置、存储介质和电子设备
CN110378107A (zh) 一种安装包检测的方法及相关装置

Legal Events

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