CN103823756A - 一种运行被测程序的方法和调度器 - Google Patents
一种运行被测程序的方法和调度器 Download PDFInfo
- Publication number
- CN103823756A CN103823756A CN201410080037.XA CN201410080037A CN103823756A CN 103823756 A CN103823756 A CN 103823756A CN 201410080037 A CN201410080037 A CN 201410080037A CN 103823756 A CN103823756 A CN 103823756A
- Authority
- CN
- China
- Prior art keywords
- scheduler
- tested program
- thread
- program code
- test assignment
- 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
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种运行被测程序的方法和调度器,调度器根据调用指令接收测试任务参数及被测试的程序代码,调度器按照接收的测试任务参数执行所述被测试的程序代码。应用本发明实施例提供的测试方法和调度器,利用调度器建立线程,由线程执行被测程序,可使被测程序的代码内容与调度器的内容相对独立,所以调度器可以测试任意的被测程序代码,并且用户可以为调度器指定测试任务的参数,减少了测试任务的成本。
Description
技术领域
本发明涉及计算机数据处理技术,具体涉及一种运行被测程序的方法和调度器。
背景技术
程序测试是一种用来鉴定计算机程序的正确性、完整性、安全性和质量的过程。测试的过程是在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估。
而对一个程序进行测试的过程一般需要多次重复地进行,即多次、重复地运行同一程序,这样才能有效地发现该程序存在的问题。
现有的测试方法是采用多线程技术对目标软件进行测试。测试时,首先针对目标软件创建多线程,然后利用创建的多线程并发执行被测程序(即目标软件)。
现有技术中,由于测试任务不同,需要针对每个被测程序单独制定一种并发测试流程,增加了测试成本。
发明内容
本发明实施例提供一种运行被测程序的方法和调度器,以减少程序测试成本。
本发明实施例提供的一种运行被测程序的方法,包括:
调度器根据调用指令接收测试任务参数及被测试的程序代码;
所述调度器按照接收的所述测试任务参数执行所述被测试的程序代码。
本发明实施例提供的一种运行被测程序的调度器,包括:
参数接收单元,用于根据调用指令接收测试任务参数及被测试的程序代码;
执行单元,用于按照接收的所述测试任务参数执行所述被测试的程序代码。
本发明实施例提供的测试方法和调度器,通过调度器根据调用指令接收测试任务参数及被测试的程序代码,使得被测程序的代码内容与调度器的代码内容相对独立,从而可以通过调度器可以运行任意的被测程序代码实现对任意的被测程序代码的测试,避免了现有技术中针对每个被测程序单独制定一种并发测试流程导致的测试时间长效率低的问题,减少了测试任务的成本,提高了测试效率。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1是本发明实施例提供的运行被测程序的方法的流程图;
图2是本发明实施例提供的运行被测程序的方法中调度器执行被测程序的流程图;
图3是本发明实施例提供的运行被测程序的调度器的结构示意图;
图4是本发明实施例提供的一个优选的运行被测程序的方法的流程图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部内容。
图1是本发明实施例提供的运行被测程序的方法的流程图。
如图1所示,本发明实施例提供的运行被测程序的方法,包括:
步骤11,调度器根据调用指令接收测试任务参数及被测试的程序代码。
其中,调度器可以是利用领域特定语言的方式(即Domain SpecificLanguage,简称DSL)编写的带有接口的应用程序,调度器主要用于创建线程,由创建出的线程来执行被测程序。调度器允许用户根据需要设置一些测试任务参数,例如创建的线程数量、执行被测程序的次数等,调度器接收用户设置的参数以及被测程序,接收被测程序的方式可以是用户将被测程序的代码、脚本写入调度器代码的特定位置,或者是调度器通过接口调用被测程序或脚本。测试人员测试不同的被测程序时,只需要提供不同的被测程序代码和更改简单的参数,并不需要测试人员深入了解并发技术的代码内容或原理。其中,并发技术是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。本发明实施例利用调度器实现了并发执行被测程序的功能。步骤12,所述调度器按照接收的所述测试任务参数执行所述被测试的程序代码。
当调度器接收到上述创建的线程数量、执行被测程序的次数等参数后,则根据参数指示的数量执行被测程序的代码。
在本发明实施例提供的测试方法中,通过调度器根据调用指令接收测试任务参数及被测试的程序代码,使得被测程序的代码内容与调度器的代码内容相对独立,从而可以通过调度器可以运行任意的被测程序代码实现对任意的被测程序代码的测试,避免了现有技术中针对每个被测程序单独制定一种并发测试流程导致的测试时间长效率低的问题,减少了测试任务的成本,提高了测试效率。示例性的,本发明实施例提供的运行被测程序的方法中,所述调度器按照接收的所述测试任务参数执行所述被测试的程序代码,可如图2所示,包括:
步骤21,所述调度器根据所述测试任务参数指示的线程创建数量创建至少一个工作线程。
其中,工作线程是指程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针,寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被***独立调度和分派的基本单位。在单个程序中同时运行多个线程完成不同的工作,称为多线程。调度器可以利用Java语言的多线程技术创建或定义多线程。
步骤22,控制所述的至少一个工作线程根据所述测试任务参数指示的执行次数执行所述被测试的程序代码。
创建了工作线程后,工作线程即可以单独执行属于自己的任务,例如执行测试任务时,每个工作线程都可以独立的执行同一个被测程序代码。本发明实施例提供的被测程序运行方法可以利用多线程技术来执行被测试的程序,实现了并发执行,进一步提高的测试效率。
示例性的,当所述调度器建立多个所述工作线程时,控制所述所有工作线程分别根据所述测试任务参数指示的执行次数同时开始执行所述被测试的程序代码。
其中,当有多个工作线程执行被测程序时,本发明实施例提供的被测程序运行方法的调度器令所有的工作线程同时开始执行同一个被测程序,可以是当所有工作线程被创建完成后就同时开始执行被测程序。本方法可以得知执行测试任务的开始时间,便于计算测试任务的耗时,可以进一步地提高测试任务的效率。
示例性的,控制所述所有工作线程分别根据所述测试任务参数指示的执行次数同时开始执行所述被测试的程序代码之后,本发明实施例提供的运行被测程序的方法还可包括:
所述调度器记录所述所有工作线程执行所述被测试的程序代码所用的时间。
上述实施例中调度器使多个工作线程同时开始执行测试任务,而所有工作线程不一定同时完成测试任务,所以在本实施例中调度器还可以计算执行测试任务的耗时,可以是将最后一个完成测试任务的线程的完成时间作为整个调度器执行测试任务的完成时间。通过本实施例提供的方法,可以计算出测试任务的耗时,反映出被测程序可能存在的问题。
示例性的,本实施例提供的运行被测程序的方法还包括:
所述调度器接收所述被测试的程序代码在执行过程中产生的信息。
其中,被测程序可以是带有输出结果的业务程序,调度器可以接收被测程序在执行过程中输出的结果信息,也可以是被测程序执行过程的产生的中间量信息等,可以进一步反映出被测程序可能存在的问题。
图3是本发明实施例提供的运行被测程序的调度器的结构示意图。
如图3所示,本发明实施例提供的运行被测程序的调度器,包括:参数接收单元31和执行单元32。
所述参数接收单元31用于根据调用指令接收测试任务参数及被测试的程序代码。
所述执行单元32用于按照接收的所述测试任务参数执行所述被测试的程序代码。
示例性的,所述执行单元32包括:
线程创建子单元,用于根据所述测试任务参数指示的线程创建数量创建至少一个工作线程。
程序执行子单元,用于控制所述的至少一个线程根据所述测试任务参数指示的执行次数执行所述被测试的程序代码。
示例性的,所述程序执行子单元具体用于当所述线程创建子单元建立多个所述工作线程时,控制所述所有工作线程分别根据所述测试任务参数指示的执行次数同时开始执行所述被测试的程序代码。
示例性的,本发明实施例提供的运行被测程序的调度器还包括:
计时单元,用于在所述程序执行子单元控制所述所有工作线程分别根据所述测试任务参数指示的执行次数同时开始执行所述被测试的程序代码之后,记录所述所有工作线程执行所述被测试的程序代码所用的时间。
示例性的,本发明实施例提供的运行被测程序的调度器还包括:
回执接收单元,用于接收所述被测试的程序代码在执行过程中产生的信息。
上述实施例中提供的调度器可以通过如图4所示的步骤401来创建:
步骤401,创建调度器。调度器的编程写法基于DSL模式,对于使用JAVA语言开发的被测程序是可以通用的,JAVA语言是由SUN公司推出的面向对象程序设计语言。
除调度器的主程序外,还包括创建启动屏障、结束屏障和线程池。其中主程序可用于调度器的启动,也可用于调用启动屏障、结束屏障和线程池,还可用于创建工作线程。
调度器创建完成后还包括设置参数等准备工作,如图4所示的步骤402和步骤403:
步骤402中,指定任务执行的参数,如并发线程数,执行次数等。该参数可由用户在界面中设定。
步骤403中,指定要执行的业务方法。例如通过用户通过计算机上显示的程序测试界面或对话窗口选择被测程序。
完成上述准备工作后,即可通过调度器实现对被测程序的执行测试。
如图4所示,步骤404中,启动调度器,然后等待执行结果。通过计算机启动调度器时,计算机会向调度器发送调用指令,调度器根据调用指令启动并接收指定的任务执行参数及被测程序。
步骤405中,调用启动屏障。一个工作线程被创建完成后可以生成一个启动标识,启动屏障用于检测启动标识的生成。当启动屏障检测到n个启动标识时说明有n个工作线程已经被建立。启动屏障会将检测到的启动标识的数量上报给主程序,主程序根据启动屏障上报的启动标识的数量判断建立的线程是否已达到要求建立的线程数量(即启动标识的数量等于要求建立的线程数量),如果是,则主程序控制建立的工作线程执行被测程序;否则,继续等待,直到启动屏障上报的启动标识的数量达到要求建立的线程数量。
步骤406中,调用结束屏障。由于一个工作线程运行完被测程序后可以生成一个结束标识,结束屏障用于检测该结束标识的生成。当检测到该结束标识时则认定对应的线程已经完成了执行任务。;
步骤407中,调度器的主程序调用线程池,利用创建的线程池建立工作线程。
步骤408中,调度器的主程序向线程池添加需要执行的任务,即被测试的程序内容。线程池中创建的工作线程执行任务(即运行被测试的程序),并向调度器的主程序返回执行回执。
步骤409中,调度器的主程序创建添加的任务的空白回执,以填充在添加到线程池的任务被工作线程执行的过程中或执行完成后产生的运行信息。
步骤410中,调度器的主程序通过启动屏障检查启动标识的数量,并根据启动标识的数量判断线程池是否完成工作线程的创建,如果是,则执行步骤411;否则继续通过启动屏障检查启动标识的数量,直到线程池完成工作线程的创建启,以便于所有工作线程在同一时刻开始执行任务。
步骤411中,调度器的主程序控制所有创建的工作线程开始执行任务,并记录任务开始时间。
步骤412中,调度器的主程序检查结束标识。当所有线程都带有结束标识时,则表示所有线程都完成了测试任务,并记录任务结束时间,以计算任务运行时间;否则,调度器的主程序继续检查结束标识,直到所有线程都带有结束标识。
其中,计算任务运行时间,可以计算每个线程执行任务的耗时,也可以将最后一个完成测试任务的线程的执行时间作为总的测试任务耗时。
上述工作线程执行任务过程中产生的运行信息和执行任务完成后产生的运行结果信息中的至少一种信息,可反馈到调度器的主程序,调度器的主程序将工作线程反馈的上述至少一种信息填充到上述空白回执中,以供测试人员判断被测试程序中存在的错误。
进一步地,还可包括步骤413,打印耗时和执行结果。
本实施例提供的方法,用户只需要关注步骤401-步骤404即可,并且写出上述步骤401-步骤404只需一行代码,其余步骤属本发明内的调度器的内部工作流程。本发明实施例提供的被测程序运行方法简化了测试用例的代码量,一般可减少30%-70%的测试代码;同时本方法做了OOP(Object OrientedProgramming,面向对象程序设计)的封装,方便用户使用,让用户在不需要深入了解线程、锁、并发等概念的情况下也可以方便的写出并发测试用例,只关注自己的业务测试代码即可。
上述仅为本发明的较佳实施例及所运用技术原理。本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (10)
1.一种运行被测程序的方法,其特征在于,包括:
调度器根据调用指令接收测试任务参数及被测试的程序代码;
所述调度器按照接收的所述测试任务参数执行所述被测试的程序代码。
2.根据权利要求1所述的方法,其特征在于,所述调度器按照接收的所述测试任务参数执行所述被测试的程序代码,包括:
所述调度器根据所述测试任务参数指示的线程创建数量创建至少一个工作线程;
控制所述的至少一个线程根据所述测试任务参数指示的执行次数执行所述被测试的程序代码。
3.根据权利要求2所述的方法,其特征在于,
当所述调度器建立多个所述工作线程时,控制所述所有工作线程分别根据所述测试任务参数指示的执行次数同时开始执行所述被测试的程序代码。
4.根据权利要求3所述的方法,其特征在于,控制所述所有工作线程分别根据所述测试任务参数指示的执行次数同时开始执行所述被测试的程序代码之后,还包括:
所述调度器记录所述所有工作线程执行所述被测试的程序代码所用的时间。
5.根据权利要求1-4任一项所述的方法,其特征在于,还包括:
所述调度器接收所述被测试的程序代码在执行过程中产生的信息。
6.一种运行被测程序的调度器,其特征在于,包括:
参数接收单元,用于根据调用指令接收测试任务参数及被测试的程序代码;
执行单元,用于按照接收的所述测试任务参数执行所述被测试的程序代码。
7.根据权利要求6所述的调度器,其特征在于,所述执行单元包括:
线程创建子单元,用于根据所述测试任务参数指示的线程创建数量创建至少一个工作线程;
程序执行子单元,用于控制所述的至少一个线程根据所述测试任务参数指示的执行次数执行所述被测试的程序代码。
8.根据权利要求7所述的调度器,其特征在于,所述程序执行子单元具体用于当所述线程创建子单元建立多个所述工作线程时,控制所述所有工作线程分别根据所述测试任务参数指示的执行次数同时开始执行所述被测试的程序代码。
9.根据权利要求8所述的调度器,其特征在于,还包括:
计时单元,用于在所述程序执行子单元控制所述所有工作线程分别根据所述测试任务参数指示的执行次数同时开始执行所述被测试的程序代码之后,记录所述所有工作线程执行所述被测试的程序代码所用的时间。
10.根据权利要求6-9任一项所述的调度器,其特征在于,还包括:
回执接收单元,用于接收所述被测试的程序代码在执行过程中产生的信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410080037.XA CN103823756A (zh) | 2014-03-06 | 2014-03-06 | 一种运行被测程序的方法和调度器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410080037.XA CN103823756A (zh) | 2014-03-06 | 2014-03-06 | 一种运行被测程序的方法和调度器 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103823756A true CN103823756A (zh) | 2014-05-28 |
Family
ID=50758837
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410080037.XA Pending CN103823756A (zh) | 2014-03-06 | 2014-03-06 | 一种运行被测程序的方法和调度器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103823756A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109634853A (zh) * | 2018-11-30 | 2019-04-16 | 平安科技(深圳)有限公司 | 数据测试方法、***、电子装置及计算机可读存储介质 |
CN111666217A (zh) * | 2020-06-05 | 2020-09-15 | 百度在线网络技术(北京)有限公司 | 用于测试代码的方法和装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1553336A (zh) * | 2003-05-30 | 2004-12-08 | 中兴通讯股份有限公司 | 一种测试用软件计时方法 |
CN1855068A (zh) * | 2005-04-29 | 2006-11-01 | 华为技术有限公司 | 测试多线程软件并发冲突的方法 |
CN102710832A (zh) * | 2012-04-21 | 2012-10-03 | 北京迈凯互动网络科技有限公司 | 移动应用测试方法和*** |
US20120272097A1 (en) * | 2011-04-25 | 2012-10-25 | Hon Hai Precision Industry Co., Ltd. | Testing device for redundant array of independent disks |
-
2014
- 2014-03-06 CN CN201410080037.XA patent/CN103823756A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1553336A (zh) * | 2003-05-30 | 2004-12-08 | 中兴通讯股份有限公司 | 一种测试用软件计时方法 |
CN1855068A (zh) * | 2005-04-29 | 2006-11-01 | 华为技术有限公司 | 测试多线程软件并发冲突的方法 |
US20120272097A1 (en) * | 2011-04-25 | 2012-10-25 | Hon Hai Precision Industry Co., Ltd. | Testing device for redundant array of independent disks |
CN102710832A (zh) * | 2012-04-21 | 2012-10-03 | 北京迈凯互动网络科技有限公司 | 移动应用测试方法和*** |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109634853A (zh) * | 2018-11-30 | 2019-04-16 | 平安科技(深圳)有限公司 | 数据测试方法、***、电子装置及计算机可读存储介质 |
CN111666217A (zh) * | 2020-06-05 | 2020-09-15 | 百度在线网络技术(北京)有限公司 | 用于测试代码的方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4950454B2 (ja) | テスト自動化のスタック階層化 | |
US9032361B2 (en) | Agile unit and regression testing framework for domain specific languages | |
US9465726B2 (en) | Abstract layer for automatic user interface testing | |
Fonseca et al. | A multi-dag model for real-time parallel applications with conditional execution | |
US9152389B2 (en) | Trace generating unit, system, and program of the same | |
US20120324454A1 (en) | Control Flow Graph Driven Operating System | |
Houssam-Eddine et al. | The hpc-dag task model for heterogeneous real-time systems | |
CN104407973A (zh) | 一种自动化单元测试的实现方法及装置 | |
CN105094851A (zh) | 一种基于Git随时发布代码的实现方法 | |
US9063778B2 (en) | Fair stateless model checking | |
KR101264615B1 (ko) | 게임 서버의 작업 파일 실행 장치 및 방법 | |
US8418148B2 (en) | Thread execution analyzer | |
KR20140091711A (ko) | 테스트 블록의 동시실행을 제어하는 단순화된 컨피규레이션을 지원하는 테스트 시스템 | |
CN105302717A (zh) | 一种大数据平台的检测方法及装置 | |
CN109491916A (zh) | 一种操作***的测试方法、装置、设备、***和介质 | |
CN102063286A (zh) | 程序流控制 | |
Melani et al. | A static scheduling approach to enable safety-critical OpenMP applications | |
Sun et al. | A weak simulation relation for real-time schedulability analysis of global fixed priority scheduling using linear hybrid automata | |
CN102789401B (zh) | 基于柔性测试技术的测试流程控制方法和装置 | |
Budimlić et al. | The design and implementation of the habanero-java parallel programming language | |
CN102193863A (zh) | 一种多点触控操作的实现方法及装置 | |
CN103823756A (zh) | 一种运行被测程序的方法和调度器 | |
CN109656868B (zh) | 一种cpu与gpu之间的内存数据转移方法 | |
Brinkmann et al. | Temanejo–a debugger for task based parallel programming models | |
Li et al. | TACO: A scalable framework for timing analysis and code optimization of synchronous programs |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20140528 |
|
RJ01 | Rejection of invention patent application after publication |