基于智能电表操作***的线程测试方法和装置
技术领域
本申请涉及智能电表操作***领域,特别是涉及一种基于智能电表操作***的线程测试方法、装置、计算机设备和存储介质。
背景技术
随着能源互联网的不断发展,电力***的外部环境发生了前所未有的变化,传统量测体系和量测设备的性能均面临着新的需求和挑战。然而,现行的智能电表的采集频度、通信速率、数据处理能力、可靠性水平等均无法满足电力市场化环境下新增业务的需求,传统嵌入式代码单一的运行方式在大数据和人工智能快速发展的今天显得格格不入。因此,引入嵌入式操作***已经成为近年来新一代智能电表发展的重要方向。
在智能电表投入使用前或者在使用中,都需要对智能电表进行检测。目前对智能电表的检测仅仅局限于对智能电表的整体功能进行测试和检测,然而,智能电表的操作***作为支撑智能电表正常运行的重要部分,对其进行检测也是十分必要的。同时,在对智能电表操作***进行测试过程中,一项重要的测试是对智能电表操作***中的线程进行检测,线程作为操作***运算和调度的基本单位,其功能实现的正常与否则是智能电表操作***性能优劣的重要体现,而目前对于智能电表的测试没有对智能电表操作***的线程进行检测,对于新一代智能电表操作***的线程检测至今仍处于空白阶段。
因此,如何实现对智能电表操作***中的线程进行测试,成为亟需解决的问题。
发明内容
基于此,有必要针对上述技术问题,提供一种能够实现对智能电表操作***中线程进行测试的基于智能电表操作***的线程测试方法、装置、计算机设备和存储介质。
一种基于智能电表操作***的线程测试方法,应用于智能电表,所述方法包括:
获取所述智能电表的操作***中的待检测代码;所述待检测代码包括用于实现线程功能管理、线程同步管理、线程响应管理以及线程安全管理的代码;
对所述待检测代码进行线程测试,得到线程测试结果;所述线程测试包括线程功能测试、线程性能测试以及线程安全测试中的至少一种;所述线程功能测试包括针对所述线程功能管理的代码进行线程管理测试以及针对所述线程同步管理的代码进行线程同步测试中的至少一种;所述线程性能测试包括针对所述线程响应管理的代码进行响应时间测试、切换时间测试以及同步时间测试中的至少一种;所述线程安全测试包括针对所述线程安全管理的代码进行线程死锁测试;
根据所述线程测试结果,输出所述智能电表的操作***的线程测试报告。
在其中一个实施例中,对所述待检测代码进行线程测试中的所述线程功能测试,包括:
对所述针对所述线程功能管理的代码进行线程管理测试,得到线程管理测试结果;所述线程管理测试包括创建和删除测试、优先级测试以及调度测试中的至少一种;
对所述针对所述线程同步管理的代码进行线程同步测试,得到线程同步测试结果;
所述线程测试结果中包括所述线程管理测试结果以及所述线程同步测试结果。
在其中一个实施例中,对所述针对所述线程功能管理的代码进行线程管理测试中的创建和删除测试,包括:
生成第一线程;
响应于预设线程删除程序启动指令,删除所述第一线程;
判断所述第一线程是否删除成功,得到判断结果;
根据判断结果,得到所述创建和删除测试结果;
所述线程测试结果中包括所述创建和删除测试结果。
在其中一个实施例中,对所述针对所述线程功能管理的代码进行线程管理测试中的所述优先级测试,包括:
针对第二线程和第三线程,发送运行指令;所述第二线程的优先级小于所述第三线程的优先级;所述第二线程为运行中的线程,所述第三线程为待运行的线程;
获取当前运行的线程,得到优先级测试结果;
所述线程测试结果中包括所述优先级测试结果。
在其中一个实施例中,对所述针对所述线程功能管理的代码进行线程管理测试中的所述调度测试,包括:
将第四线程和第五线程调度方式设置为时间片轮方式,获取所述第四线程和所述第五线程在所述时间片轮方式下的第一运行结果;所述第四线程和所述第五线程优先级相同;所述第四线程和所述第五线程均为运行状态;
将所述第四线程和所述第五线程调度方式设置为先进先出方式,判断所述第四线程和所述第五线程在所述先进先出方式下的第二运行结果;
根据所述第一运行结果和所述第二运行结果,得到所述调度测试结果;
所述线程测试结果中包括所述调度测试结果。
在其中一个实施例中,对所述针对所述线程同步管理的代码进行线程功能测试中的所述线程同步测试,包括:
设置第六线程和第七线程互斥访问同一资源;
向所述第六线程和所述第七线程发送预设指令,分别获取所述第六线程和所述第七线程响应于所述预设指令后对所述资源的访问信息;所述预设指令包括信号量、互斥量、条件变量、读写锁和时间标志组中的至少一种;
根据所述访问信息,得到所述线程同步测试结果;
所述线程测试结果中包括所述线程同步测试结果。
在其中一个实施例中,对所述针对所述线程安全管理的代码进行线程测试中的所述线程安全测试,包括:
获取预设死锁程序;
响应于所述预设死锁程序的运行指令,获取所述待检测代码对应的线程是否能检测所述死锁程序并对所述死锁程序进行定位,得到检测结果;
根据所述检测结果,得到所述线程安全测试结果;
所述线程测试结果中包括所述线程安全测试结果;
和/或,
所述线程测试还包括:代码规范性测试;
所述代码规范性测试,包括:
对所述待检测代码进行代码规范测试、安全标准测试、代码覆盖率测试以及代码静态分析,得到所述代码规范性测试结果;
所述线程测试结果中包括所述代码规范性测试结果。
一种基于智能电表操作***的线程测试装置,应用于智能电表,所述装置包括:
获取模块,用于获取所述智能电表的操作***中的待检测代码;所述待检测代码包括用于实现线程功能管理、线程同步管理、线程响应管理以及线程安全管理的代码;
测试模块,用于对所述待检测代码进行线程测试,得到线程测试结果;所述线程测试包括线程功能测试、线程性能测试以及线程安全测试中的至少一种;所述线程功能测试包括针对所述线程功能管理的代码进行线程管理测试以及针对所述线程同步管理的代码进行线程同步测试中的至少一种;所述线程性能测试包括针对所述线程响应管理的代码进行响应时间测试、切换时间测试以及同步时间测试中的至少一种;所述线程安全测试包括针对所述线程安全管理的代码进行线程死锁测试;
输出模块,用于根据所述线程测试结果,输出所述智能电表的操作***的线程测试报告。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现如上述的基于智能电表操作***的线程测试方法。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上述的基于智能电表操作***的线程测试方法。
上述线程测试方法、装置、计算机设备和存储介质,通过获取智能电表的操作***中的实现线程相关功能的代码,作为待检测代码,再对该检测代码进行线程测试,其中线程测试包括线程功能测试、线程性能测试以及线程安全测试中的至少一种,而线程功能测试中包括线程管理测试和线程同步测试中的至少一种,线程性能测试包括响应时间测试、切换时间测试以及同步时间测试中的至少一种,线程安全测试包括线程死锁测试,最后根据线程测试结果,输出智能电表操作***的线程测试报告。相较于传统的仅对智能电表的整表性能与功能进行测试,本方案通过对智能电表中的线程相关代码进行检测,实现对智能电表操作***的线程进行测试。
附图说明
图1为一个实施例中基于智能电表操作***的线程测试方法的流程示意图;
图2为一个实施例中基于智能电表操作***的线程功能测试步骤的结构框图;
图3为一个实施例中基于智能电表操作***的线程性能测试步骤的结构框图;
图4为一个实施例中基于智能电表操作***的线程安全测试步骤的结构框图;
图5为另一个实施例中基于智能电表操作***的线程测试方法的流程示意图;
图6为一个实施例中基于智能电表操作***的线程测试装置的结构框图;
图7为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本方法可以应用于智能电表中,智能电表可以是带有操作***的,用于测量电能的仪表,其中操作***可以是嵌入式操作***,操作***可以是管理智能电表的硬件与软件资源的计算机程序,同时也是智能电表***的内核与基石;操作***需要处理如管理与配置内存、决定***资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件***等基本事务;操作***也提供一个让用户与***交互的操作界面,该操作***可以有若干代码组成,其中若干代码可以组成相应线程,线程是智能电表操作***能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。线程作为智能电表操作***运算和调度的基本单位,其功能实现的正常与否则是智能电表操作***性能优劣的重要体现。智能电表可以对操作***中的线程进行相应检测。
在一个实施例中,如图1所示,提供了一种基于智能电表操作***的线程测试方法,以该方法应用于智能电表为例进行说明,包括以下步骤:
步骤S202,获取智能电表的操作***中的待检测代码;待检测代码包括用于实现线程功能管理、线程同步管理、线程响应管理以及线程安全管理的代码。
其中,智能电表可以获取其操作***中,负责实现内核层功能实现的代码,具体可以是用于实现线程功能管理、线程同步管理、线程响应管理以及线程安全管理的代码,作为待检测代码。由于智能电表嵌入式操作***本身的分层结构特点,内核层代码的功能包括任务管理、任务间通信,例如信号量、互斥量、消息队列、条件变量和事件集;内存管理,例如内存堆和定长内存分区;软件定时器、事件管理、终端管理、异常处理、进程管理等。智能电表在获取内核层代码的基础上,可以通过头文件分析并定位函数,获取操作***线程功能的实现与控制的代码,作为待检测的代码,其中待检测代码中包括但不限于线程功能管理、线程同步管理、线程响应管理以及线程切换管理的设计源码等。
步骤S204,对待检测代码进行线程测试,得到线程测试结果;线程测试包括线程功能测试、线程性能测试以及线程安全测试中的至少一种;线程功能测试包括针对线程功能管理的代码进行线程管理测试以及针对线程同步管理的代码进行线程同步测试中的至少一种;线程性能测试包括针对线程响应管理的代码进行响应时间测试、切换时间测试以及同步时间测试中的至少一种;线程安全测试包括针对线程安全管理的代码进行线程死锁测试。
其中,智能电表对上述待检测代码进行的线程测试可以包括线程功能测试、线程性能测试以及线程安全测试中的至少一种。需要说明的是,上述线程测试还可以是至少包括上述线程功能测试、线程性能测试以及线程安全测试,即智能电表可以至少通过线程功能测试、线程性能测试以及线程安全测试的共同测试结果,得到上述线程测试结果。
如图2所示,图2为一个实施例中基于智能电表操作***的线程功能测试的结构框图。线程功能测试可以是针对线程正常功能是否可以实现的目的而进行的测试项目,线程功能测试中可以包括如图2所示的线程管理测试以及线程同步测试中的至少一种。需要说明的是,上述线程功能测试还可以是至少包括上述线程管理测试以及线程同步测试,即智能电表可以至少通过线程管理测试以及线程同步测试的共同测试结果,得到上述线程功能测试结果。其中线程管理测试可以是针对上述线程功能管理的代码进行的测试,线程同步测试可以是针对上述线程同步管理的代码进行的测试。
如图3所示,图3为一个实施例中基于智能电表操作***的线程性能测试的结构框图。线程性能测试可以是针对线程在完成特定功能时的性能优劣程度进行的测试项目,线程性能测试可以包括如图3所示的响应时间测试、切换时间测试以及同步时间测试中的至少一种。需要说明的是,上述线程性能测试还可以是至少包括上述响应时间测试、切换时间测试以及同步时间测试,即智能电表可以至少通过响应时间测试、切换时间测试以及同步时间测试的共同测试结果,得到上述线程性能测试结果。其中响应时间测试、切换时间测试以及同步时间测试可以是针对上述线程响应管理的代码进行的测试。
如图4所示,图4为一个实施例中基于智能电表操作***的线程安全测试的结构框图。线程安全测试可以是针对线程长期运行的稳定性以及异常时的反应进行的测试项目,线程安全测试可以包括如图4所示的线程死锁测试。其中线程死锁测试可以是针对上述线程安全管理的代码进行的测试。
智能电表可以对上述待检测代码进行线程相关测试,并得到相应的线程测试结果。
步骤S206,根据线程测试结果,输出智能电表的操作***的线程测试报告。
线程测试结果可以是上述智能电表完成上述线程测试后得到的测试结果。智能电表在完成上述线程测试,并得到相应的测试结果后,可以根据上述测试结果,输出智能电表的操作***对应的线程测试报告,具体地,当上述测试项目的测试过程的实施完成以后,则可以根据各个子测试项目的测试结果和预先设定的评判准则进行对比分析,进而自动化生成智能电表操作***线程测试的报告。
需要说明的是,针对上述测试项目设计中的各个子测试项目,在测试过程完成以后,测试报告可产生与之一一对应的定量测试结果。
上述线程测试方法中,通过获取智能电表的操作***中的实现线程相关功能的代码,作为待检测代码,再对该检测代码进行线程测试,其中线程测试包括线程功能测试、线程性能测试以及线程安全测试中的至少一种,而线程功能测试中包括线程管理测试和线程同步测试中的至少一种,线程性能测试包括响应时间测试、切换时间测试以及同步时间测试中的至少一种,线程安全测试包括线程死锁测试,最后根据线程测试结果,输出智能电表操作***的线程测试报告。相较于传统的仅对智能电表的整表性能与功能进行测试,本方案通过对智能电表中的线程相关代码进行检测,实现对智能电表操作***的线程进行测试。
在一个实施例中,对待检测代码进行线程测试中的线程功能测试,包括:对针对线程功能管理的代码进行线程管理测试,得到线程管理测试结果;线程管理测试包括创建和删除测试、优先级测试以及调度测试中的至少一种;对针对所述线程同步管理的代码进行线程同步测试,得到线程同步测试结果;线程测试结果中包括线程管理测试结果以及线程同步测试结果。
本实施例中,线程功能测试中可以包括线程管理测试以及线程同步测试中的至少一种。需要说明的是,上述线程功能测试还可以是至少包括上述线程管理测试以及线程同步测试,即智能电表可以至少通过线程管理测试以及线程同步测试的共同测试结果,得到上述线程功能测试结果。具体地,线程管理测试可以包括线程创建和删除测试、优先级测试以及调度测试中的至少一种,需要说明的是,线程管理测试还可以是至少包括上述线程创建和删除测试、优先级测试以及调度测试,即智能电表可以至少通过线程创建和删除测试、优先级测试以及调度测试的共同测试结果,得到线程管理测试结果。优先级测试可以包括指定线程的优先级赋值测试,调度测试可以包括指定线程的挂起或激活执行、依据线程状态的任务调度、线程状态转换、线程调度算法、同优先级线程的调度策略等测试;线程同步测试可以包括信号量相关的测试。智能电表可以通过对上述线程功能管理的代码进行线程管理测试,得到线程管理测试结果,通过对上述线程同步管理的代码进行线程同步测试,得到线程同步测试结果。其中上述线程测试结果中包括上述线程管理测试结果以及线程同步测试结果。
通过本实施例,智能电表可以通过对上述待检测代码进行线程管理相关测试以及线程同步相关测试,得到线程的功能测试结果,提高了智能电表操作***中线程测试的全面性。
在一个实施例中,对针对线程功能管理的代码进行线程管理测试中的创建和删除测试,包括:生成第一线程;响应于预设线程删除程序启动指令,删除第一线程;判断第一线程是否删除成功,得到判断结果;根据判断结果,得到创建和删除测试结果;线程测试结果中包括创建和删除测试结果。
本实施例中,第一线程可以是用于进行创建和删除测试的线程,智能电表可以响应于预设线程删除程序启动指令,删除上述第一线程,还可以对通过检测上述第一线程,判断第一线程是否删除成功,得到判断结果,从而得到上述创建和删除的测试结果,该结果可以包括在上述线程测试结果中。另外,智能电表还可以判断线程是否能实现至少包括线程赋值、挂起和激活的功能,以及支持至少三种线程状态,包括就绪、运行和阻塞。上述创建和删除测试,具体可以如下所示:
智能电表可以调用线程创建函数,创建线程thread0;线程thread0运行2秒后调用线程删除函数,删除线程thread0;调用线程创建函数,创建线程thread1;调用线程优先级设置函数,将线程thread1的优先级设置为100:调用线程挂起函数将线程thread1挂起;2秒后调用线程恢复函数将线程thread1恢复;检测上述待检测代码是否能够正确实现线程的创建和删除功能,检测上述待检测代码是否能正常实现线程赋值、挂起和激活执行的功能,确定上述待检测代码是否通过创建和删除测试。
通过本实施例,智能电表可以通过进行创建和删除测试,确定上述线程功能管理的代码是否正常,实现了对智能电表线程功能的检测,提高了智能电表检测的效率。
在一个实施例中,对针对线程功能管理的代码进行线程管理测试中的优先级测试,包括:针对第二线程和第三线程,发送运行指令;第二线程的优先级小于第三线程的优先级;第二线程为运行中的线程,第三线程为待运行的线程;获取当前运行的线程,得到优先级测试结果;线程测试结果中包括所优先级测试结果。
本实施例中,第二线程和第三线程可以是用于对上述线程功能管理的代码进行优先级测试的线程。智能电表可以向第二线程和第三线程发送运行指令,其中第二线程的优先级小于第三线程,智能电表可以将第二线程设置为运行状态,将第三线程设置为待运行状态,智能电表可以在发出运行指令后,检测当前运行的线程,从而得到优先级测试结果,该优先级测试结果可以包括在上述线程测试结果中。
具体地,优先级测试可以是智能电表调用线程创建函数,创建线程thread2和thread3;thread2首先运行且优先级小于thread3;thread2运行2秒后thread3运行;运行观察thread3是否会强制thread2运行;从而检测线程对应的待检测代码是否能够实现基于优先级的抢占模式,优先级高的线程先得到处理,从而确定上述待检测代码是否通过优先级测试。
通过本实施例,智能电表可以对上述线程功能管理的代码进行优先级测试,从而实现对智能电表进行线程测试,提高了智能电表操作***中线程测试的全面性。
在一个实施例中,对针对线程功能管理的代码进行线程管理测试中的调度测试,包括:将第四线程和第五线程调度方式设置为时间片轮方式,获取第四线程和第五线程在时间片轮方式下的第一运行结果;第四线程和第五线程优先级相同;第四线程和第五线程均为运行状态;将第四线程和第五线程调度方式设置为先进先出方式,判断第四线程和第五线程在先进先出方式下的第二运行结果;根据第一运行结果和第二运行结果,得到调度测试结果;线程测试结果中包括调度测试结果。
本实施例中,第四线程和第五线程可以是用于进行调度测试而使用的线程,其可以由智能电表生成,其中第四线程和第五线程的优先级可以相同,并且第四线程和第五线程均为运行状态。智能电表可以将第四线程和第五线程的调度方式设置为时间片轮方式,可以称为RR(Round-Robin,轮询调度)方式,并得到在该方式下的第一运行结果;还可以将第四线程和第五线程的调度方式设置为先进先出方式,得到第四线程和第五线程在先进先出方式下的第二运行结果,智能电表可以根据上述第一运行结果和第二运行结果,得到调度测试结果,该调度测试结果可以包括在上述线程测试结果中。
具体地,智能电表可以调用线程创建函数,创建线程thread4和thread5;thread4和thread5优先级相同;设置线程的调度方式为RR(Round-Robin,轮询调度);使两个线程同时运行;两个线程交替执行;设置线程的调度方式为FIFO(First Input First Output,先进先出);使两个线程运行;通过判断首先运行的线程是否会一直运行,并且线程调度时被切换的线程之间能够进行现场的保护与恢复,并支持时间片轮或先进先出调度策略,从而确定上述待检测代码是否通过调度测试。
通过本实施例,智能电表可以通过测试线程在不同调度方式下的运行结果,得到调度测试结果,实现了对智能电表的线程调度测试,从而提高了智能电表的测试的全面性。
在一个实施例中,对针对线程同步管理的代码进行线程功能测试中的线程同步测试,包括:设置第六线程和第七线程互斥访问同一资源;向第六线程和第七线程发送预设指令,分别获取第六线程和第七线程响应于预设指令后对资源的访问信息;预设指令包括信号量、互斥量、条件变量、读写锁和时间标志组中的至少一种;根据访问信息,得到线程同步测试结果;线程测试结果中包括线程同步测试结果。
本实施例中,第六线程和第七线程可以是用于进行线程同步测试的线程,第六线程和第七线程可以由智能电表生成,智能电表可以设置第六线程和第七线程互斥访问同一资源,再向第六线程和第七线程发送预设指令,其中预设指令可以包括信号量、互斥量、条件变量、读写锁和时间标志组中的至少一种,再分别获取第六线程和第七线程响应于上述预设指令后对资源的访问信息,并根据访问信息,得到线程同步测试结果,该线程同步测试结果包括在上述线程测试结果中。需要说明的是,上述预设指令还可以是至少包括信号量、互斥量、条件变量、读写锁和时间标志组,即智能电表可以对上述第六和第七线程分别发送上述信号量、互斥量、条件变量、读写锁和时间标志组,得到各自的访问信息,从而得到更准确的线程同步测试结果。
具体地,本实施例主要针对多线程***中线程的执行顺序和共享资源的互斥访问进行测试项目设计和测试过程实施。依据线程同步的方式的差异,本实施例的测试项目主要从信号量、互斥量、条件变量、读写锁、时间标志组五个方面展开,具体包括信号量、互斥量、条件变量、读写锁、时间标志组的创建和删除,非阻塞方式、限时阻塞方式和永久阻塞方式下的获取和锁定功能,同时唤醒一个或多个线程功能,避免优先级反转机制,嵌套访问,读写线程竞争时的调度策略等测试项目。智能电表可以创建两个独立的线程,控制两个线程对统一资源进行互斥访问,访问时使用预设指令做互斥管理,根据访问过程输出线程运行信息,根据运行信息判断线程是否运行正常,其中预设指令可以包括信号量、互斥量、条件变量、读写锁和时间标志组中的至少一种。
其中,信号量的测试内容可以包括:测试创建二值和计数信号量的功能,并判断能否正确创建二值和计数信号量;测试删除信号量的功能并判断能否正确删除信号量;测试对等待同一信号量的线程调度策略并判断能否对等待同一信号量的任务可以采样优先级次序或先进先出调度;测试线程以非阻塞方式锁定信号量的功能并判断当信号量未被锁定时,锁定信号量能否成功返回。测试线程以永久等待方式获取信号量的功能并判断当信号量未被锁定时,获取信号量能否成功返回,当信号量被锁定时,调用任务是否不返回,除非它成功锁定信号量或是被信号中断;测试线程以限时等待方式获取信号量的功能并判断当信号量未被锁定时,取信号量能否成功返回,当信号量被锁定时,若在指定的限时时间内没有其他线程对信号量解锁,能否将终止等待,返回错误;测试同时唤醒一个或多个等待线程的功能并判断能否解除阻塞在指定信号量上的线程。
互斥量的测试内容可以包括测试***创建、删除互斥量的功能并判断能否正确创建、删除互斥量;测试***避免优先级反转的机制并判断能否提供防止优先级反转机制;测试线程以非阻塞方式获取互斥量的功能并判断能否在当互斥量未被锁定时,锁定互斥量成功返回,否则无法锁定互斥量并返回;测试线程以永久等待方式获取互斥量的功能并判断能否在互斥量未被锁定时,获取互斥量成功返回,否则,调用任务不返回,除非它成功锁定互斥量或是被信号中断;测试线程以限时等待方式获取互斥量的功能并判断能否在互斥量未被锁定时,获取互斥量成功返回,否则,若在指定的限时时间内无法获得互斥量,将终止等待,返回错误;测试互斥量的嵌套访问并判断能否允许互斥量拥有者多次调用该互斥量;测试持有互斥量的线程删除安全并判断是否不能删除持有互斥量的线程。
条件变量的测试内容可以包括:测试创建、销毁条件变量的功能并判断能否正确创建、销毁条件变量;测试线程以永久阻塞方式等待条件变量的功能并判断能否自动阻塞调用线程,等待条件变量,直到条件变量被激活;测试线程以限时等待方式获取互斥量的功能并判断能否自动阻塞调用线程,等待指定的条件变量,直到条件变量被激活,或者等待时间达到指定的时间。
读写锁的测试内容可以包括:测试创建、删除共享读锁和互斥写锁功能并判断能否正确创建、删除读写锁;测试读写线程发生竞争时的调度策略并判断能否采用读任务优先或写任务优先调度策略。
事件标志组的测试内容可以包括:测试创建、删除事件标志组功能并判断能否正确创建、删除事件标志组;测试线程以非阻塞方式等待事件标志组的功能并判断能否在事件标志组对应的事件发生时,成功返回,否则无法获取指定事件标志并返回;测试线程以永久等待方式等待事件标志组的功能并判断能否在事件标志组对应的事件发生时,成功返回,否则,调用任务不返回,除非它成功获取指定事件标志或是被信号中断;测试线程以限时等待方式获取指定事件标志的功能并判断能否在事件标志组对应的事件发生时,成功返回,否则,若在指定的限时时间内无法获取指定事件标志,将终止等待,返回错误;测试同时唤醒一个或多个等待线程的功能并判断能否解除阻塞在指定事件标志组上的线程。
通过本实施例,智能电表可以采用多种条件对线程同步管理的代码进行测试,从而提高了智能电表操作***中线程测试的全面性。
在一个实施例中,线程性能测试可以包括针对线程响应管理的代码进行响应时间测试、切换时间测试以及同步时间测试中的至少一种。
本实施例中,智能电表可以对上述线程响应管理的代码进行性能测试,性能测试针对线程在实现特定功能的同时所表现的性能优劣进行测试项目设计与测试过程实施,包括线程响应时间测试、线程切换时间测试和线程同步时间测试等方面。需要说明的是,上述线程性能测试还可以是至少包括上述响应时间测试、切换时间测试以及同步时间测试,即智能电表可以至少通过响应时间测试、切换时间测试以及同步时间测试的共同测试结果,得到上述线程性能测试结果。
其中,线程响应时间测试可以是线程从就绪状态到线程进入运行状态所花费的时间,响应时间的长短是智能电表操作***性能的重要指标。在本部分的测试项目设计过程中,主要从有压力的线程响应时间和无压力的线程响应时间两个方面进行测试,具体地,智能电表可以通过测试用例或通过测试工具生成代码的方式获得测试结果,评价标准则可以通过测试事件与预设值的对比结果得到。
线程切换时间测试可以是CPU的控制权由运行线程主动转移到另外一个就绪线程时所花费的时间,通常线程切换时间包括保存当前运行线程上下文的时间、选择下一个线程的调度时间以及将要运行线程上下文恢复时间。在本部分的测试项目设计过程中,主要从有压力的线程切换时间和无压力的线程切换时间两个方面进行测试。具体地,智能电表可以创建两个独立的线程,在不同状态下分别进行测试;控制两个线程分别在不同的IO口输出脉冲信号;使用示波器检测IO1脉冲停止到IO2脉冲开始的时间差;将测试所得时间差与预设值进行对比,得到测试结果。当线程优先级相同时,CPU主频为aMHz的情况下,线程切换的最小耗时应低于b ms、平均耗时应低于c ms、最大耗时应低于d ms;当线程优先级不同时,CPU主频为aMHz的情况下,线程切换的最小耗时应低于e ms、平均耗时应低于f ms、最大耗时应低于g ms;需要说明的是,a~g均为测试项目设计过程中的预设值。
线程同步时间测试,可以是二进制信号量POST操作开始到二进制信号量PEND操作返回是的时间差,该指标也是影响智能电表操作***性能的重要因素。在本部分的测试项目设计过程中,主要从有压力的线程同步时间和无压力的线程同步时间两个方面进行测试。具体地,智能电表可以创建同步型二进制信号量;创建两个线程,一个用于信号量pend操作,一个用于信号量post操作;首先使线程进入pend操作,并在pend操作之下调用获取时间函数t1;另一个线程首先获得时间t0并执行post操作;计算时间t1-t0的值。在无负载,即有压力的条件下,二进制信号量POST操作开始到二进制信号量PEND操作返回的时间差应低于h ms;在慢负载,即无压力条件下,二进制信号量POST操作开始到二进制信号量PEND操作返回的时间差应低于j ms;需要说明的是,h和j均为测试项目设计过程中的预设值。
在一个实施例中,对针对线程安全管理的代码进行线程测试中的线程安全测试,包括:获取预设死锁程序;响应于预设死锁程序的运行指令,获取待检测代码对应的线程是否能检测死锁程序并对死锁程序进行定位,得到检测结果;根据检测结果,得到线程安全测试结果;线程测试结果中包括线程安全测试结果。
本实施例中,智能电表可以对上述线程安全管理的代码进行线程安全测试,安全性测试侧重于线程长期运行的稳定性与兼容性进行测试项目设计和测试过程实施,死锁程序可以是智能电表生成的死锁程序。死锁是指两个或两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去,此时称***处于死锁状态或***产生了死锁。死锁会对操作***的安全性产生巨大影响,因此为保证智能电表操作***长期安全稳定的运行,在线程安全性测试过程中,需要进行死锁检测。
具体地,智能电表可以构造死锁程序;控制代码运行;将***命令或上位机工具通过网络进行连接;查看死锁状态,输出相应的线程安全测试结果。当***能够自动检测出死锁,且***能够自动定位死锁进程与死锁临界资源时,可以确定上述线程安全管理的代码通过测试。
通过本实施例,智能电表可以通过构造死锁程序的方式实现对上述待检测代码中线程安全管理代码的测试,从而实现了线程安全的测试,提高了智能电表检测的全面性。
再一个实施例中,线程测试还包括:代码规范性测试;代码规范性测试,包括:对待检测代码进行代码规范测试、安全标准测试、代码覆盖率测试以及代码静态分析,得到代码规范性测试结果;线程测试结果中包括代码规范性测试结果。
本实施例中,智能电表还可以对上述待检测代码进行代码规范性测试,得到代码规范性测试结果,该代码规范性测试结果可以包括在上述线程测试结果中。具体地,代码规范性测试可以包括代码规范、安全标准、代码覆盖率以及代码静态分析等方面的测试。
通过本实施例,智能电表可以对上述待检测代码进行代码规范性测试,从而保证了智能电表线程的实现和控制代码的规范性,提高了智能电表运行的稳定性,也提高了智能电表操作***中线程测试的全面性。
在一个实施例中,如图5所示,图5为另一个实施例中基于智能电表操作***的线程测试方法的流程示意图。智能电表可以获取操作***中线程控制代码,并进行线程测试,其中线程测试可以包括功能测试、性能测试以及安全性测试;其中功能测试可以包括线程管理测试,例如线程创建和删除、优先级赋值、挂起和激活、装填转换和调度策略等,还可以包括线程同步测试,例如信号量测试、互斥量测试、条件变量测试、读写锁测试以及事件标志组测试等;性能测试可以包括响应时间测试、切换时间测试以及同步时间测试等,上述时间测试均可以在线程有压力和无压力的情况下分别进行;安全性测试可以包括死锁测试,例如测试当智能电表出现死锁时,对操作***各项功能和性能的检测;另外还可以包括附加测试,例如代码规范、安全标准、代码覆盖率和静态分析等测试。智能电表可以统计分析测试结果并输出相应的测试报告。
通过本实施例,通过获取智能电表的操作***中的实现线程相关功能的代码,作为待检测代码,再对该检测代码进行线程测试,其中线程测试包括线程功能测试、线程性能测试以及线程安全测试中的至少一种,而线程功能测试中包括线程管理测试和线程同步测试中的至少一种,线程性能测试包括响应时间测试、切换时间测试以及同步时间测试中的至少一种,线程安全测试包括线程死锁测试,最后根据线程测试结果,输出智能电表操作***的线程测试报告。相较于传统的仅对智能电表的整表性能与功能进行测试,本方案通过对智能电表中的线程相关代码进行检测,实现对智能电表操作***的线程进行测试。
应该理解的是,虽然图1和图5的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1和图5中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图6所示,提供了一种基于智能电表操作***的线程测试装置,包括:获取模块600、测试模块602和输出模块604,其中:
获取模块600,用于获取智能电表的操作***中的待检测代码;待检测代码包括用于实现线程功能管理、线程同步管理、线程响应管理以及线程安全管理的代码。
测试模块602,用于对待检测代码进行线程测试,得到线程测试结果;线程测试包括线程功能测试、线程性能测试以及线程安全测试中的至少一种;线程功能测试包括针对线程功能管理的代码进行线程管理测试以及针对线程同步管理的代码进行线程同步测试中的至少一种;线程性能测试包括针对线程响应管理的代码进行响应时间测试、切换时间测试以及同步时间测试中的至少一种;线程安全测试包括针对线程安全管理的代码进行线程死锁测试。
输出模块604,用于根据线程测试结果,输出智能电表的操作***的线程测试报告。
在一个实施例中,测试模块602,具体用于对针对线程功能管理的代码进行线程管理测试,得到线程管理测试结果;线程管理测试包括创建和删除测试、优先级测试以及调度测试中的至少一种;对针对所述线程同步管理的代码进行线程同步测试,得到线程同步测试结果;线程测试结果中包括线程管理测试结果以及线程同步测试结果。
在一个实施例中,测试模块602,具体用于生成第一线程;响应于预设线程删除程序启动指令,删除第一线程;判断第一线程是否删除成功,得到判断结果;根据判断结果,得到创建和删除测试结果;线程测试结果中包括创建和删除测试结果。
在一个实施例中,测试模块602,具体用于针对第二线程和第三线程,发送运行指令;第二线程的优先级小于第三线程的优先级;第二线程为运行中的线程,第三线程为待运行的线程;获取当前运行的线程,得到优先级测试结果;线程测试结果中包括优先级测试结果。
在一个实施例中,测试模块602,具体用于将第四线程和第五线程调度方式设置为时间片轮方式,获取第四线程和所述第五线程在时间片轮方式下的第一运行结果;第四线程和所述第五线程优先级相同;第四线程和第五线程均为运行状态;将第四线程和第五线程调度方式设置为先进先出方式,判断第四线程和第五线程在先进先出方式下的第二运行结果;根据第一运行结果和第二运行结果,得到调度测试结果;线程测试结果中包括调度测试结果。
在一个实施例中,测试模块602,具体用于设置第六线程和第七线程互斥访问同一资源;向第六线程和所述第七线程发送预设指令,分别获取第六线程和第七线程响应于预设指令后对资源的访问信息;预设指令包括信号量、互斥量、条件变量、读写锁和时间标志组中的至少一种;根据访问信息,得到线程同步测试结果;线程测试结果中包括线程同步测试结果。
在一个实施例中,测试模块602,具体用于获取预设死锁程序;响应于预设死锁程序的运行指令,获取待检测代码对应的线程是否能检测死锁程序并对死锁程序进行定位,得到检测结果;根据检测结果,得到线程安全测试结果;线程测试结果中包括线程安全测试结果。
在一个实施例中,测试模块602,具体用于对待检测代码进行代码规范测试、安全标准测试、代码覆盖率测试以及代码静态分析,得到代码规范性测试结果;线程测试结果中包括代码规范性测试结果。
关于线程测试装置的具体限定可以参见上文中对于线程测试方法的限定,在此不再赘述。上述线程测试装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是智能电表,其内部结构图可以如图7所示。该计算机设备包括通过***总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作***和计算机程序。该内存储器为非易失性存储介质中的操作***和计算机程序的运行提供环境。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、运营商网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种进程测试方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板等。
本领域技术人员可以理解,图7中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现如上述的基于智能电表操作***的线程测试方法。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现如上述的基于智能电表操作***的线程测试方法。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-Only Memory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。