CN102591780B - 一种设备驱动软件测试方法和测试系统 - Google Patents
一种设备驱动软件测试方法和测试系统 Download PDFInfo
- Publication number
- CN102591780B CN102591780B CN201210009946.5A CN201210009946A CN102591780B CN 102591780 B CN102591780 B CN 102591780B CN 201210009946 A CN201210009946 A CN 201210009946A CN 102591780 B CN102591780 B CN 102591780B
- Authority
- CN
- China
- Prior art keywords
- state
- equipment
- instruction
- test
- 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.)
- Active
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种设备驱动软件测试方法和测试系统,该测试方法根据被测设备的设备状态图,通过智能分析程序对设备状态进行基于各个状态、各条指令和各个指令组成的流程或回路的分析,从而从指令、状态和流程或回路等三个技术角度,设计了该设备的完整测试库;通过对被测驱动程序分析其指令构成特点,以及各接口函数之间的关系,从测试库中调取相应的测试案例,组成该被测驱动的测试脚本,利用自动化测试平台完成测试。根据本发明提出的一种设备驱动软件测试方法,所提供的设备状态图,保证了设备驱动测试的充分性;为测试人员设计开发软件虚拟设备,使用软件虚拟设备来模拟的硬件设备功能,实现了快速的全软件自动化测试,提供了更为真实可靠地虚拟测试手段。
Description
技术领域
本发明涉及一种软件测试方法和测试系统,尤其是涉及一种设备驱动软件的测试方法和测试系统。
背景技术
常见的设备驱动程序测试方法,基本上是测试人员根据对设备驱动接口说明文档的理解和设备操作经验,编写出一个或几个测试工具进行设备驱动程序的测试。或者根据设备驱动接口说明文档给出的参考流程图,编写出一个或几个工具,调用几个设备驱动接口,进行设备驱动接口的集成测试和压力测试。这种测试方法,并没有解决设备的整个指令集、状态集和流程集的快速充分测试和自动化测试。另外,由于测试过程中人为介入的因素很多,对测试人员的经验依赖强,因为这种测试既浪费时间,又带有盲目性。
现有一些测试技术和方法,虽已有对应用软件进行自动化脚本测试的方案,但是这些方案不能简单的嫁接到设备驱动的测试上。尤其是对设备驱动测试的状态测试充分性、指令测试充分性、执行回路测试充分性(流程组合测试充分性),难以直接实现,也难以做到测试用例覆盖的全面性。另有一些软件单元测试,虽谈及构造被测单元所需要的参数,但是并没有对参数的构造方法做设计论述,更没有对构造参数时是否实现了测试案例的充分性做技术上的设计和论述。还有一些测试方法对设置测试探测点做了研究,但仍难以实现对软件模块运行到探测点时其状态做全面周到分析,从而让测试过程中模仿出探测点出现的各种程序执行结果,从而并没有实现该探测点测试用例的充分性。
发明内容
本发明目的是提供一种设备驱动软件测试方法和测试系统,从设备的各条指令、设备的各个状态和各个执行指令的流程等三个技术角度,实现对设备驱动的充分测试。
本发明提供了一种设备驱动软件测试方法,包括步骤:
(1)根据被测试设备的功能,整理和完成设备状态图,所述设备状态图为有向图,图中的节点为设备的稳定状态,图的有向线条表示设备执行一个指令进行状态迁移的过程,设备执行一条指令,可从一个稳定状态,迁移到另一稳定状态,前一个稳定状态为前续状态,后一个稳定状态为后续状态;
(2)对所述设备状态图进行分析,归纳出被测试设备可能出现的所有状态、指令和流程,形成该设备的自动化测试脚本,从而得到被测试驱动程序的设备测试库;
(3)根据所述设备状态图开发出可模仿被测试设备硬件功能的虚拟设备;
(4)对被测试驱动程序进行分析,获取所有驱动接口函数,以及各驱动接口函数包含的指令及其顺序,以及驱动接口输入、输出参数的取值范围;
(5)根据对所述设备状态图的分析结果,以及被测试驱动程序的分析结果,利用所述虚拟设备完成被测试驱动程序的测试。
进一步,所述设备的稳定状态是由被测试设备各部件所处的状态、设备执行指令的返回码以及设备是否达到稳定状态三者共同确定的。
进一步,所述步骤(5)包括:
51)利用虚拟设备对被测试驱动接口进行充分的基于指令的白盒测试;
52)利用虚拟设备对被测试驱动接口进行充分的基于状态的黑盒测试;
53)利用虚拟设备对被测试驱动接口构成俄流程或回路进行充分的基于流程或回路的压力测试。
进一步,所述步骤(51)包括如下步骤:
511)对被测试驱动接口进行指令分析,判断该驱动接口是单指令接口还是多指令接口;
512)根据驱动接口指令类型,获取对设备状态图进行的基于指令的分析结果,得到每一个指令的所有的有向对,即该指令执行过程所经历的每一个前续状态和后续状态构成的有序对;
513)根据每一个指令的有向对,自动调整虚拟设备到相应状态,对与该指令相关的所有有向对,依次进行测试。
进一步,所述步骤(52)包括:
521)获取对设备状态图进行的基于状态的分析结果,对于某种状态,当对虚拟设备进行测试时,当虚拟设备处于其每一个前续状态时,执行对应的指令,是否能够成功到达该状态,从而实现对被测试设备在该状态的到达路径的充分测试;
522)获取所有驱动接口函数的指令包含情况,分析各指令执行后各设备状态参数,每一个单指令驱动接口在进行一次测试时,在调用指令前的输入参数,对应于哪一设备状态;执行指令后,所返回的各参数是否为该状态的参数范围,设备是否到达了该状态,从而完成对被测试设备在该状态到达路径的充分测试;
523)获取所有驱动接口函数的指令包含情况,分析各指令执行前各设备状态参数,每一个单指令驱动接口在进行一次测试时,在调用指令后的输出参数,对应于哪一设备状态;执行指令前,所输入的各参数是否为该状态的参数范围,设备是否到达了该状态,从而完成对被测试设备在该状态出发路径的充分测试。
进一步,所述步骤(53)具体包括如下步骤:
531)获取对设备状态图进行的基于流程的分析结果,得到被测试设备的所有流程或回路的指令序列;
532)分析所有驱动接口函数的指令包含情况,根据流程或回路的指令序列进行匹配,从而得到被测驱动的由接口函数构成的流程或回路;
533)对每一个流程或回路,根据被测试驱动的接口序列,设定虚拟设备的状态循环,完成该状态回路的压力测试。
本发明还提供了一种设备驱动软件测试系统,包括:
设备状态图输入模块,用于接收设备状态图输入,所述设备状态图记录被测试设备所有能够处于稳定状态的一个有向图,图中的节点为设备的稳定状态,图的有向线条表示设备执行一个指令进行状态迁移的过程;设备执行一条指令,可从一个稳定状态即前续状态,迁移到另一稳定状态即后续状态;
状态图分析模块,用于对所述设备状态图输入模块接收的设备状态图进行节点、有向线、回路的分析处理;
驱动程序输入模块,是本发明测试平台为被测驱动程序提供的输入入口;
驱动程序分析模块,用于遍历被测试设备驱动中所有的函数接口,寻找各个驱动接口中包含的指令个数和指令序列,以及各指令执行结果的系统处理情况;
设备测试库,包括了该设备的所有基于状态、指令、流程或回路的测试案例,只需要调用设备测试库的部分案例子集,就可以完成被测驱动的测试;
虚拟设备,根据所述设备状态图使用计算机程序实现的一个虚拟设备,所述虚拟设备可以模仿真实硬件设备的运行情况,向所述驱动程序分析模块返回各种指令结果,实现在不破坏硬件设备的情况下实现对被测试设备驱动的测试;
自动化测试模块,根据所述状态图分析模块和所述驱动程序分析模块的分析结果,利用虚拟设备完成对各个驱动接口的自动化测试。
进一步,所述状态图分析模块包括:
设备状态分析模块,对所述设备状态图进行所有设备状态的测试分析;
硬件指令分析模块,对所述设备状态图进行所有硬件指令的测试分析;
设备运行流程分析模块,对所述设备状态图进行所有设备运行流程的测试分析。
进一步,所述驱动程序分析模块包括:
接口函数分析模块,用于对被测试驱动各个接口进行分析,判别该接口是否为单指令接口,还是复合指令接口,以及接口内各指令的关系,作为从所述设备测试库选取相应的测试案例来测试该接口函数的条件;
接口流程组装模块,根据所述设备测试库中指令流程或回路的测试案例,分析被测试驱动程序各个接口之间的关系,并将相应接口加以组装,以提供所有基于接口函数为组成单元的驱动流程或回路的测试案例。
进一步,所述自动化测试模块,包括:
指令测试脚本模块,对被测试驱动接口进行充分的基于指令的白盒测试;
状态测试脚本模块,对各个设备状态进行充分的基于状态的黑盒测试;
流程测试脚本模块,对各个状态回路进行充分的基于流程的压力测试。
与现有技术相比,采用本发明的方案,实现了以下有益的技术效果:
1、本发明提供的测试方法和测试系统从指令、状态和流程等三个技术角度,对设备状态图进行基于各个状态的分析、基于各条指令的分析和各个指令执行流程或回路的分析和测试,从而保证了设备驱动测试的充分性;
2、本发明所采用的设备状态图能够综合所有研发与测试人员对该设备的长时间的研究成果,集中成为一张该设备的状态图,做到了该设备研究和测试经验的沉淀,从而使新接手该设备测试的人员可以快速的掌握该设备的运行特点,对设备驱动接口进行充分的测试,节省了测试时间,降低了测试成本,实现了测试经验的有效积累和快速传承,为测试人员尽快掌握该设备驱动测试案例提供了方法和工具;
3、本发明所提供的设备状态图,为测试人员设计开发软件虚拟设备,使用软件虚拟设备来模拟的硬件设备功能,实现快速的全软件自动化测试,提供了更为真实可靠的虚拟测试的技术手段。设备状态图使虚拟设备最大可能的模拟物理设备的功能,而不再是物理设备功能一个简单的功能子集,从而导致利用虚拟设备进行驱动接口测试,其测试结果与质量与实际硬件测试的结果和效果大相径庭,同时,使用虚拟设备,可以减少直接对物理设备测试带来的硬件损耗和能源损耗,节省测试成本,还可以实现一些对物理设备可能带来难以恢复的损害的测试;
4、本发明提出的一种设备驱动软件测试方法和测试系统,测试过程更加有序规范,能够让测试人员快速抓到测试重点和难点,最大可能的减少了设备驱动测试过程中的盲目性,从设备状态机和指令集的视角,把握整个测试过程,测试目的非常明确,测试环境设置思路更清晰,测试案例制定更充分,可以在有限的测试时间和测试成本内,可以实现高质量的设备驱动程序测试。
附图说明
图1是本发明设备驱动测试某状态的路径覆盖与路径组合测试示意图;
图2是本发明设备驱动测试状态回路覆盖的压力测试示意图;
图3是本发明设备驱动测试某指令的路径覆盖测试示意图;
图4是本发明设备驱动测试流程示意图;
图5是本发明某款读卡设备状态示意图;
图6是本发明某款读卡设备某指令测试分析示意图;
图7是本发明某款读卡设备某状态测试分析示意图;
图8-10是本发明某款读卡设备状态各回路压力测试分析示意图;
图11是本发明测试系统结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明提供了一种设备驱动软件测试方法,如图4所示,包括:
(1)整理和完成设备状态图,设备状态图就是从技术人员视角对设备功能的全面概括,是对该类设备的长时间认识的经验结晶。如图5是某读卡器的设备状态图。可知设备状态图为一有向图,图中的节点为设备的稳定状态,图的有向线条表示设备执行一个指令进行状态迁移的过程,设备执行一条指令,可从一个稳定状态即前续状态,迁移到另一稳定状态即后续状态;其设备状态的划分与确定的依据是由设备各部件所处的状态、设备执行指令的返回码、以及设备是否达到一稳定状态三者共同确定的,设备状态的确定并非是人为规定的。以读卡器为例,如图5,读卡器复位后一些部件正常所处于的稳定状态,就是读卡器的一个稳定状态a;读卡器处于状态a后,用户插卡,读卡器检测到卡在读卡器口,读卡器处于另外一个稳定状态b;读卡器检测到读卡器口有卡,发起进卡操作,成功进卡,卡在读卡器中,读卡器就处于一稳定状态c,如果进卡不成功,但是读卡器一切部件正常,读卡器仍处于状态b;卡在读卡器中,读卡器读卡,读取数据成功,读卡器仍处于状态c,如果读卡不成功,是因为卡片本身的原因导致的,读卡器正常,读卡器处于状态c,如果是因为读卡器磁头坏了导致读卡不成功,读卡器就处于另一状态d。这样可以确定读卡器的所有的状态,从而形成读卡器设备状态图的各个状态点。在本实施例中,读卡器从一种状态直接迁移到另一状态,只能是执行一条指令,而不是两条或多条指令,执行两条指令到达另一状态,其中必有一个中间状态。每一条硬件指令会让读卡器从一个状态迁移到另一状态,也可能是从本状态回归到本状态,如卡在读卡器中,读卡器读卡指令执行成功情形,又如打印机打印指令打印成功情形。这样可以确定设备状态图的每一条边为一条指令的执行,这样的边为有向边,可采用有向实线表示,有向实线表示硬件指令的执行,设备状态图就是一有向图。
为进一步完善设备状态图,除了执行指令,也可以加入人工维修和人工维护的动作,使得设备从异常状态进入正常状态,这样的状态迁移可以使用有向虚线,有向虚线表示人为的介入,而非机器自主的动作。如打印机无纸状态,维护人员加纸,可让打印机从异常状态切换到正常状态。当然还有另外一种情形,就人为的破坏也可能使得设备从正常状态进入异常状态,在设备状态图上也可以标志。
(2)对设备状态图进行分析与归纳,得到该设备的测试库。本发明采用一状态图分析模块,状态图分析模块为一通用软件,而不是为某一设备的设备状态图的特制的软件,可以对各个设备状态图进行分析。如对设备状态图基于节点的分析,就是对各个设备状态的测试分析;如对设备状态图基于有向边的分析,就是对各个硬件指令的测试分析;如对设备状态图基于回路的分析,就是对各个设备流程回路的测试分析。
(3)对被测驱动程序进行分析,获取所有驱动接口函数的类型,以及各接口之间的关系,接口类型是单指令接口还是复合指令接口,分析各驱动接口函数里面的指令组合是否是顺序关系、选择关系、还是这两种关系的组合,获取每一条指令的输入、输出参数范围,各接口函数是否可以按照某种顺序依次执行形成各个接口为组成单元的测试流程,从被测试设备库中调取相应的测试案例,构成被测驱动程序的测试脚本。
(4)根据设备状态图开发一虚拟设备,该虚拟设备使用软件模仿硬件的功能来完成设备驱动的测试,该虚拟设备还可以模拟硬件设备存在又难以人为设置的错误状态;
(5)使用自动化测试工具,利用步骤(3)得到的测试脚本和步骤(4)开发的虚拟设备,进行测试,生成测试报告。
进一步,所述设备的稳定状态是由被测试设备各部件所处的状态、设备执行指令的返回码以及设备是否达到稳定状态三者共同确定的,设备执行一条指令,可从一个稳定状态迁移到另一个稳定状态,前后两个状态可以是同一状态。
进一步,所述步骤(5)包括如下步骤:
51)利用虚拟设备对被测试驱动接口进行充分的基于指令的白盒测试;
52)利用虚拟设备对被测试驱动接口进行充分的基于状态的黑盒测试;
53)利用虚拟设备对被测试驱动接口构成的流程或回路进行充分的基于流程或回路的压力测试,所述状态回路是步骤(2)中所述流程的一种特殊形式,即状态起点和状态终点是同一状态的流程。
进一步,所述步骤(51)包括如下步骤:
511)对被测试驱动接口进行指令分析,判断该驱动接口是单指令接口还是多指令接口,所述单指令接口就是驱动接口函数中有且只有一个指令,有两个或者两个以上指令的驱动接口函数为多指令接口;
512)根据驱动接口指令类型,是否为单指令接口,还是多指令接口,利用设备状态图,得到每一个指令的所有的有向对,即该指令执行过程所经历的每一个前续状态和后续状态构成的一有序对;
513)根据每一个指令的有向对,自动调整虚拟设备到相应状态,对与该指令相关的所有有向对,依次进行测试。
进一步,所述步骤512)中,当驱动接口为多指令接口时,多个指令之间的关系有顺序关系和选择关系两种情况,根据指令之间的顺序关系或选择关系分割为单指令的组合。
进一步,所述步骤(52)包括:
521)对设备状态图进行基于状态的分析,会得到一个状态集合,要测试某状态,调试虚拟设备处于该状态的任一个前续状态,执行对应的指令,是否能够成功到达该状态,即完成该前续状态到该状态的一个测试案例的测试,如果测试遍历所有的前续状态,从而实现对被测试设备在该状态的到达路径的充分测试;
522)获取所有被测驱动接口函数的指令包含情况,分析各指令执行后各设备状态参数,每一个单指令驱动接口在进行一次测试时,在调用指令前的输入参数,对应于何种设备状态;执行指令后,所返回的各参数是否为该状态的参数范围,设备是否到达了该状态,从而完成对被测驱动执行到达该状态的路径的充分测试;
523)获取所有驱动接口函数的指令包含情况,分析各指令执行前各设备状态参数,每一个单指令驱动接口在进行一次测试时,在调用指令后的输出参数,对应于何种设备状态;执行指令前,所输入的各参数是否为该状态的参数范围,设备是否到达了该状态,从而完成对被测驱动在设备从某状态出发的路径的充分测试。
进一步,所述步骤(53)具体包括如下步骤:
531)根据设备状态图找出所有流程或回路,得到该设备的所有流程或回路的指令序列;
532)分析所有驱动接口函数的指令包含情况,根据流程或回路的指令序列进行匹配,从而得到被测驱动的由接口函数构成的流程和回路;
533)对每一个流程或回路,设置虚拟设备的该流程或回路起始状态,执行被测驱动的接口序列,虚拟设备将达到终点状态,再将虚拟设备设置成该流程或回路起始状态,再次执行被测驱动的接口序列,可以完成该状态回路的压力测试;对于回路,由于被测驱动的接口序列可以构成一个闭环,测试方法更加简单,不必在虚拟设备达到终点状态,再进行设置,因为起始状态和终端状态为同一状态。
具体实施例一:对驱动接口进行充分的基于指令的白盒测试。
首先代码自动化分析,采用驱动程序分析模块对被测试的驱动接口进行分析,采用状态图分析模块,对该设备状态图进行分析。
如果一个驱动接口是单指令接口,状态图分析模块首先分析该指令的执行前设备可以处于哪些状态,从而转化为执行该单指令驱动接口输入参数有哪些条件限制,参数输入范围有多大。驱动程序分析模块得到该驱动接口的参数输入要求、范围和限制条件。两者相比较是否相同,如果不相同,说明驱动接口的输入存在可以完善的地方,需要进行代码修改。然后,状态图分析模块分析该指令执行后,设备可以处于哪些状态,从而转换为驱动接口执行后的返回值,与驱动程序分析模块得到的实际代码中的返回路径情况和返回值情况是否一致。
如果一个驱动接口是多指令接口,那么多条指令之间可以形成顺序、选择的关系,其中选择关系可以按照单指令接口所用方法进行代码分析。顺序执行的需要进一步关注两条指令之间的衔接关系。参见图1. 状态图分析模块分析前续状态需要在什么条件下才能迁移到中间状态,从而比较与驱动程序分析模块得到的两条指令执行的衔接条件是否完全一致。状态图分析模块软件分析前续状态执行后不能迁移到中间状态时,可以达到哪些其他的状态,驱动程序分析模块分析的指令衔接是否对不能到达中间状态的其他所有情况,程序代码都进行了相应的处理。
然后使用虚拟设备进行白盒测试,虚拟设备模仿硬件各种特征,接受驱动发送过来的指令报文,返回该报文相应的各种报文应答,每次返回的各种应答报文,代表硬件设备对该指令处理的各种情况。
根据驱动程序分析模块得到的指令情况,是否为单指令,还是多指令顺序执行,或者是多指令选择执行。从而完成从驱动接口到指令的分析工作。如果为多指令接口,可以分割为单指令的组合测试,只需要实现单指令的测试方法。从驱动接口到指令的分析,是由驱动程序分析模块完成的。
状态图分析模块从设备状态图分析得到该单指令的所有状态对,状态对为前续指令和后续指令按照顺序构成,可以标记为(前续状态,后续状态),为一个有向对,如(a,b)和(b,a)为不同的有向对。同一条指令至少有一个有向对,也可能有多个有向对,其中前续状态和后续状态可能是同一状态。如(a,a)。
自动化测试模块根据状态图分析模块得到的该指令的所有有向对,自动调整虚拟设备的状态,对所有有向对,依次进行测试。每一个有向对的测试,前续状态对应为指令输入,后续状态对应指令输出,判断设备驱动每次测试返回的结果,是否和有向对的后续状态相符。
至此,实现了对驱动接口的基于指令的充分测试。
参见图3,本发明设备驱动测试某指令的路径覆盖测试示意图。本局部状态图从指令的视角来实现设备驱动测试的充分性,其中,状态a、状态b、状态c可称为该指令的可测试状态,状态m、状态n可称为该指令的可到达状态,通过穷举法可知该指令的执行,其设备状态发生迁移前后的所有状态情况。如图3,设备在状态a、状态b、状态c时,都能执行同一条指令w,使得设备状态发生以下迁移:a->m、a->n、b->n、c->n。由此,对于指令接口w的测试就可以充分进行,可以通过状态图分析模块,从设备状态图中,检索出所有可以执行指令w的情况,实现对该图中有关该指令执行的所有状态的编程计算,然后通过自动生成测试脚本的方式,从而实现指令w驱动接口的充分测试。
具体实施例二:对某一设备状态进行充分的基于状态的黑盒测试。
首先状态图分析模块分析设备状态图,对设备状态图进行基于设备状态的分析,如图1就是对该设备在状态m的分析结果,状态m总计有i、j、k三个前续状态,有四个后续状态,要实现在状态m的充分测试,需要对虚拟设备进行测试准备,当虚拟设备有处于i状态时候,执行对应的指令,是否能够成功达到状态m,对j、k也一样,从而可以完成所有对状态m的路径测试,实现对设备状态m路径到达的充分测试。
然后驱动程序分析模块获取所有驱动接口函数的指令包含情况,跟踪各指令执行后各设备状态参数,每一个单指令驱动接口在进行一次测试时候,在调用指令前个输入参数,对应于哪一设备状态。执行指令后,所返回的各参数是否为状态m的参数范围,设备是否到达了状态m,从而完成对设备m到达路径的充分测试。
同样的原理和方法,可以实现对状态m出发路径的充分测试。
参见图1,是本发明设备驱动测试某状态的路径覆盖与路径组合测试示意图。本局部状态图列举出了所有能够到达某具体状态m的所有设备指令,状态m的前续状态有状态i、状态j、状态k,后续状态有状态x、状态y、状态z、状态n。通过穷举所有到达状态m的路径:i->m、j->m、k->m的测试,就实现了基于该状态的入口路径覆盖测试,从状态入口方面展示了本发明测试方法的单指令接口模块测试的充分性。同样,通过穷举所有状态m能够到达的路径:m->x、m->y、m->z、m->n的测试,就实现了基于该状态的出口路径覆盖测试,从状态入口方面展示了本发明测试方法的单指令接口模块测试的充分性。
如果将状态m视为一中间过渡状态,可以通过状态图分析模块,从设备状态图中,检索出该状态作为中间过渡状态的所有指令执行支路情况,实现对该图中所有有关该状态作为中间过渡状态的执行支路编程计算,进一步得到基于状态m的路径组合测试,从而实现状态m的充分测试,由此可以验证本发明关于设备驱动的多指令接口的测试充分性。
具体实施例三:对各个状态回路进行充分的基于流程的压力测试。
状态图分析模块分析设备状态图,找出设备状态图上所有状态回路。因为状态图为一有向图,可以采用现有的公知算法,如哈密顿算法、遗传算法,实现对状态图回路的遍历。
驱动程序分析模块获取所有驱动接口函数的指令包含情况,驱动程序分析模块根据状态回路的指令序列,用驱动接口进行匹配,从而实现状态回路,到指令序列,再到接口序列的转化。一个状态回路,如果从状态来看,就是一系列状态迁移构成的一个回路;如果从指令来看一系列指令进行有序执行构成的一个回路;而指令序列,可以通过对指令序列进行分解成指令有向对对或指令序列,对其中指令有向对或指令序列,用相应的驱动接口进行替代,也可以用单指令进行替代,指令序列中如果不是所有指令都转化为驱动接口,仍存在一些没法替代的指令,这就发现驱动接口的不完备性,需要驱动开发人员提供相应指令的驱动接口,或者放弃对这一状态回路的测试。
至此,就完成了状态序列到接口序列的转化,测试程序根据接口序列,生成相应的测试脚本,测试程序并设定虚拟机器的状态循环,就可以完成该接口序列,也就是一个状态回路的压力测试了。
按照以上方法,穷举测试状态图分析模块得到的所有状态回路,就可以实现基于状态回路的充分测试了。
参见图2,本发明设备驱动测试状态回路覆盖的压力测试示意图。本局部状态图从状态回路的视角来实现设备驱动压力测试的充分性,通过穷举法可知,图中共有三个状态回路:a->b->c->d->e->f->g->a、e->f->g->h->e、a->b->c->m->n->d->e->f->g->a。通过对设备状态图中状态回路的穷举,可以采用测试自动化技术实现设备驱动接口的集成测试的充分性,实现快速高效的测试。不论某设备状态图是复杂还是简单,可以通过状态图分析模块,从设备状态图中,检索出所有指令回路的情况,实现对该图中所有状态回路的编程计算,然后通过自动生成测试脚本的方式,从状态回路的视角来实现驱动集成测试的充分性。
根据本发明提出的一种设备驱动软件测试方法,该测试方法分别实现了从硬件指令、设备状态和设备运行流程三个方面对设备驱动进行充分测试,通过对设备状态图进行基于各个状态的分析、基于各条指令的分析和各个指令执行回路的分析和测试。从而进一步保证了设备驱动测试的充分性。
根据本发明提出的一种设备驱动软件测试方法,一个驱动接口如果是包含有多条硬件指令的复合接口,可以测试出该接口的各条硬件指令的执行与衔接是否充分,是否存在状态承接与处理的编码遗漏,是否还存在其他的状态旁路转移没有充分实现,并通过测试进行实践验证。为节省测试时间和测试成本,可以利用白盒和黑盒测试手段,对一些重点可疑地方进行针对性的测试,或做一些目的性更强的压力测试。
本发明还提供了一种设备驱动软件测试系统,如图11所示,包括:
设备状态图输入模块,用于接收设备状态图输入,所述设备状态图记录被测试设备所有能够处于稳定状态的一个有向图,图中的节点为设备的稳定状态,图的有向线条表示设备执行一个指令进行状态迁移的过程;设备执行一条指令,可从一个稳定状态即前续状态,迁移到另一稳定状态即后续状态;
状态图分析模块,用于对所述设备状态图输入模块接收的设备状态图进行节点、有向线、回路的分析处理;
驱动程序输入模块,是本发明测试平台为被测驱动程序提供的输入入口;
驱动程序分析模块,用于遍历被测试设备驱动中所有的函数接口,寻找各个驱动接口中包含的指令个数和指令序列,以及各指令执行结果的系统处理情况;
设备测试库,包括了该设备的所有基于状态、指令、流程或回路的测试案例,只需要调用设备测试库的部分案例子集,就可以完成被测驱动的测试;
虚拟设备,根据所述设备状态图使用计算机程序实现的一个虚拟设备,所述虚拟设备可以模仿真实硬件设备的运行情况,向所述驱动程序分析模块返回各种指令结果,实现在不破坏硬件设备的情况下实现对被测试设备驱动的测试;
自动化测试模块,根据所述状态图分析模块和所述驱动程序分析模块的分析结果,利用虚拟设备完成对各个驱动接口的自动化测试。
进一步,所述状态图分析模块包括:
设备状态分析模块,对所述设备状态图进行所有设备状态的测试分析;
硬件指令分析模块,对所述设备状态图进行所有硬件指令的测试分析;
设备运行流程分析模块,对所述设备状态图进行所有设备运行流程的测试分析。
进一步,所述驱动程序分析模块包括:
接口函数分析模块,对所述的被测驱动各个接口进行分析,判别该接口是否为单指令接口,还是复合指令接口,以及接口内各指令的关系,作为从所述设备测试库选取相应的测试案例来测试该接口函数的条件;
接口流程组装模块,根据所述设备测试库中指令流程或回路的测试案例,分析被测驱动程序个接口之间的关系,并将相应接口加以组装,以提供所有基于接口函数为组成单元的驱动流程或回路的测试案例。
进一步,所述自动化测试模块,为被测试驱动的自动化测试脚本及其执行程序,包括:
指令测试脚本模块,根据所述自动化测试脚本文件,对被测试驱动的接口函数进行充分的基于指令的白盒测试;
状态测试脚本模块,根据所述自动化测试脚本文件,对被测试驱动的接口函数进行充分的基于状态的黑盒测试;
流程测试脚本模块,根据所述自动化测试脚本文件,对被测试驱动的各个接口函数的组合流程进行基于流程或回路的压力测试。
具体实施例四:参见图5-10,是本发明一种设备驱动软件测试系统对某款读卡设备进行测试的说明图,其中,图5是本发明某款读卡设备状态示意图。
状态集(节点表示)
1、等待初始化
2、卡在取卡位置
3、卡在读卡器内(在读卡位置)
4、卡在读卡器内(不在读卡位置)
5、没有卡
6、卡堵
7、待进卡
指令集(实线表示)
A、初始化
B、进卡
C、读磁
D、退卡
E、吞卡
人为动作集(虚线表示)
a、拿走卡
b、插卡
参见图6,是本发明某款读卡设备“卡在读卡器内(在读卡位置)”状态测试分析示意图。
状态图分析模块将从该读卡设备的设备状态图上,找出所有和“卡在读卡器内(在读卡位置)”状态相关的状态和命令,并根据驱动程序分析模块的指令组合结果,协同测试。在测试过程中,自动化测试模块会将虚拟设备分别设置为2(卡在取卡位置)、3(卡在读卡器内读卡位置)、5(没有卡)三种状态,执行图6所示的指令,完成对该状态所涉及的所有指令和所涉及的所有状态的测试。
当虚拟设备处于2(卡在取卡位置)状态时,执行进卡指令,是否可以达到3(卡在读卡器内(在读卡位置))状态。可以多次设置虚拟设备为处于2(卡在取卡位置)状态,进行轮番测试,完成2状态向3状态(2->3)的迁移测试。
同样的方法可以完成3->2、3->3、3->5的测试。其中3->5有两条路径,对两条指令均要测试,自动化测试模块会根据设备状态图的分析结果,生成相应的两条路径的脚本。
参见图7,是本发明某款读卡设备“吞卡指令”测试分析示意图。
状态图分析模块将从该读卡设备的设备状态图上,找出所有和“吞卡指令”相关的状态,并根据驱动程序分析模块的指令组合结果,协同测试。在测试过程中,自动化测试模块会将虚拟设备分别设置为3(卡在读卡器内读卡位置)、4(卡在读卡器内非读卡位置)、6(卡堵)三种状态,分别执行“吞卡指令,虚拟设备是否可以到达5状态(没有卡)。
同样,对于回路形式的压力测试,参照图8-10,状态图分析模块将得到三个回路图:
如图8所示,2->3->2:进卡-退卡循环
如图9所示,3->3:重复读磁道信息循环
如图10所示,2->3->3->2:进卡-读磁-退卡-进卡循环
自动化测试模块将生成上述三个回路的测试脚本,进行压力测试,从而会完成所有的回路形式的压力测试。
以上仅仅是本发明一部分实施例,当然不能以此来限定本发明之权利范围,本领域普通技术人员可以理解实现上述实施例的全部或部分流程,并依本发明权利要求所作的等同变化,仍属于发明所涵盖的范围。
Claims (8)
1.一种设备驱动软件测试方法,其特征在于,包括步骤:
(1)根据被测试设备的功能,整理和完成设备状态图,所述设备状态图为有向图,图中的节点为设备的稳定状态,图的有向线条表示设备执行一个指令进行状态迁移的过程,设备执行一条指令,可从一个稳定状态,迁移到另一稳定状态,前一个稳定状态为前续状态,后一个稳定状态为后续状态;
(2)对所述设备状态图进行分析,归纳出被测试设备可能出现的所有状态、指令和流程,从而得到被测试驱动程序的设备测试库;
(3)对被测试驱动程序进行分析,获取所有驱动接口函数,以及各驱动接口函数包含的指令及其顺序,分析各驱动接口函数之间的关系,以及各驱动接口函数输入、输出参数的取值范围;从设备测试库调取相应测试案例,组成被测驱动程序的测试脚本;
(4)根据所述设备状态图开发出可模仿被测试设备硬件功能的虚拟设备;
(5)根据对所述设备状态图的分析结果,以及被测试驱动程序的分析结果,使用自动化测试工具和测试脚本,利用所述虚拟设备完成被测试驱动程序的测试,得到测试报告,包括:
51)利用虚拟设备对被测试驱动接口进行充分的基于指令的白盒测试;
52)利用虚拟设备对被测试驱动接口进行充分的基于状态的黑盒测试;
53)利用虚拟设备对被测试驱动接口构成流程或回路进行充分的基于流程或回路的压力测试。
2.根据权利要求1所述的设备驱动软件测试方法,其特征在于,所述设备的稳定状态是由被测试设备各部件所处的状态、设备执行指令的返回码以及设备是否达到稳定状态三者共同确定的。
3.根据权利要求1所述的设备驱动软件测试方法,其特征在于,所述步骤51)包括如下步骤:
511)对被测试驱动接口进行指令分析,判断该驱动接口是单指令接口还是多指令接口;
512)根据驱动接口指令类型,获取对设备状态图进行的基于指令的分析结果,得到每一个指令的所有的有向对,即该指令执行过程所经历的每一个前续状态和后续状态构成的有序对;
513)根据每一个指令的有向对,自动调整虚拟设备到相应状态,对与该指令相关的所有有向对,依次进行测试。
4.根据权利要求1所述的设备驱动软件测试方法,其特征在于,所述步骤52)包括:
521)获取对设备状态图进行的基于状态的分析结果,对于某种状态,当对虚拟设备进行测试时,当虚拟设备处于其每一个前续状态时,执行对应的指令,是否能够成功到达该状态,从而实现对被测试设备在该状态的到达路径的充分测试;
522)获取所有驱动接口函数的指令包含情况,分析各指令执行后各设备状态参数,每一个单指令驱动接口在进行一次测试时,在调用指令前的输入参数,对应于哪一设备状态;执行指令后,所返回的各参数是否为该状态的参数范围,设备是否到达了该状态,从而完成对被测试设备在该状态到达路径的充分测试;
523)获取所有驱动接口函数的指令包含情况,分析各指令执行前各设备状态参数,每一个单指令驱动接口在进行一次测试时,在调用指令后的输出参数,对应于哪一设备状态;执行指令前,所输入的各参数是否为该状态的参数范围,设备是否到达了该状态,从而完成对被测试设备在该状态出发路径的充分测试。
5.根据权利要求1所述的设备驱动软件测试方法,其特征在于,所述步骤53)具体包括如下步骤:
531)获取对设备状态图进行的基于流程的分析结果,得到被测试设备的所有流程或回路的指令序列;
532)分析所有驱动接口函数的指令包含情况,根据流程或回路的指令序列进行匹配,从而得到被测驱动程序的由驱动接口函数构成的流程或回路;
533)对每一个流程或回路,根据被测试驱动程序的接口序列,设定虚拟设备的状态循环,完成该状态回路的压力测试。
6.一种设备驱动软件测试系统,其特征在于,包括:
设备状态图输入模块,用于根据被测试设备的功能,整理和完成设备状态图,所述设备状态图为有向图,图中的节点为设备的稳定状态,图的有向线条表示设备执行一个指令进行状态迁移的过程,设备执行一条指令,可从一个稳定状态,迁移到另一稳定状态,前一个稳定状态为前续状态,后一个稳定状态为后续状态;
状态图分析模块,用于对所述设备状态图进行分析,归纳出被测试设备可能出现的所有状态、指令和流程,形成该设备的测试案例,从而得到被测试驱动程序的设备测试库;
驱动程序分析模块,用于对被测试驱动程序进行分析,获取所有驱动接口函数,以及各驱动接口函数包含的指令及其顺序,分析各驱动接口函数之间的关系,以及各驱动接口函数输入、输出参数的取值范围;从设备测试库调取相应测试案例,组成被测驱动程序的自动化测试脚本;
虚拟设备,根据所述设备状态图开发出可模仿被测试设备硬件功能;自动化测试模块,用于根据所述状态图分析模块和所述驱动程序分析模块的分析结果,使用自动化测试工具和自动化测试脚本,利用虚拟设备完成对各个驱动接口的自动化测试,得到测试报告;
其中,所述自动化测试模块包括:
指令测试脚本模块,用于对被测试驱动接口进行充分的基于指令的白盒测试;
状态测试脚本模块,用于对被测试驱动接口进行充分的基于状态的黑盒测试;
流程测试脚本模块,用于对被测试驱动接口构成流程或回路进行充分的基于流程或回路的压力测试。
7.根据权利要求6所述的设备驱动软件测试系统,其特征在于,所述状态图分析模块包括:
设备状态分析模块,用于对各个设备状态的测试分析;
硬件指令分析模块,用于对各个硬件指令的测试分析;
设备运行流程分析模块,用于对各个设备流程回路的测试分析。
8.根据权利要求6所述的设备驱动软件测试系统,其特征在于,所述驱动程序分析模块包括:
接口函数分析模块,用于对被测驱动程序进行分析,获取所有驱动接口函数的类型,以及各接口之间的关系,接口类型是单指令接口还是复合指令接口,分析各驱动接口函数里面的指令组合是否是顺序关系、选择关系、还是这两种关系的组合;
接口流程组装模块,用于获取每一条指令的输入、输出参数范围,各接口函数是否可以按照某种顺序依次执行形成各个接口为组成单元的测试流程,从被测试设备库中调取相应的测试案例,构成被测驱动程序的测试脚本。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210009946.5A CN102591780B (zh) | 2012-01-13 | 2012-01-13 | 一种设备驱动软件测试方法和测试系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210009946.5A CN102591780B (zh) | 2012-01-13 | 2012-01-13 | 一种设备驱动软件测试方法和测试系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102591780A CN102591780A (zh) | 2012-07-18 |
CN102591780B true CN102591780B (zh) | 2015-04-15 |
Family
ID=46480474
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210009946.5A Active CN102591780B (zh) | 2012-01-13 | 2012-01-13 | 一种设备驱动软件测试方法和测试系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102591780B (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104008056B (zh) * | 2014-05-30 | 2016-11-23 | 广州华多网络科技有限公司 | 软件测试方法及装置 |
CN105739481B (zh) * | 2016-01-29 | 2019-03-19 | 软控股份有限公司 | 工控软件的测试方法、装置及系统 |
CN105666350B (zh) * | 2016-02-25 | 2018-09-18 | 泉州众志新材料科技有限公司 | 一种人造石倒角轮 |
CN107402854A (zh) * | 2016-05-19 | 2017-11-28 | 中兴通讯股份有限公司 | 测试信息管理方法、装置、测试用例执行系统及设备 |
CN106203083B (zh) * | 2016-07-12 | 2019-04-05 | 中标软件有限公司 | 设备驱动程序的预测隔离方法以及其智能加固系统 |
CN106371962B (zh) * | 2016-08-30 | 2019-01-01 | 广州广电运通金融电子股份有限公司 | 一种跨平台的驱动测试方法、装置及系统 |
CN108228407A (zh) * | 2018-01-31 | 2018-06-29 | 深圳市证通电子股份有限公司 | 设备功能测试方法、装置及可读存储介质 |
CN110247820A (zh) * | 2019-05-28 | 2019-09-17 | 北京星网锐捷网络技术有限公司 | 基于云计算开放网络操作系统的自动化测试方法及装置 |
CN111506305B (zh) * | 2020-03-26 | 2023-07-18 | 拉扎斯网络科技(上海)有限公司 | 工具包生成方法、装置、计算机设备及可读存储介质 |
CN112486221A (zh) * | 2020-10-19 | 2021-03-12 | 安徽景成新材料有限公司 | 可编程多段式恒温加热平台 |
CN112286833B (zh) * | 2020-12-31 | 2021-04-16 | 中国电力科学研究院有限公司 | 智能电能表实时操作系统驱动测试方法及装置 |
CN115408007A (zh) * | 2022-09-06 | 2022-11-29 | 清华大学 | 虚拟设备生成、驱动程序测试方法、装置、设备及介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1841340A (zh) * | 2005-03-28 | 2006-10-04 | 华为技术有限公司 | 一种驱动软件的测试方法及测试系统 |
CN101739334A (zh) * | 2008-11-21 | 2010-06-16 | 上海科梁信息工程有限公司 | 嵌入式软件自动化测试方法 |
CN102270253A (zh) * | 2011-06-15 | 2011-12-07 | 北京航空航天大学 | 一种基于状态图的机内测试建模仿真方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8572578B2 (en) * | 2010-06-15 | 2013-10-29 | Microsoft Corporation | Script debugging |
-
2012
- 2012-01-13 CN CN201210009946.5A patent/CN102591780B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1841340A (zh) * | 2005-03-28 | 2006-10-04 | 华为技术有限公司 | 一种驱动软件的测试方法及测试系统 |
CN101739334A (zh) * | 2008-11-21 | 2010-06-16 | 上海科梁信息工程有限公司 | 嵌入式软件自动化测试方法 |
CN102270253A (zh) * | 2011-06-15 | 2011-12-07 | 北京航空航天大学 | 一种基于状态图的机内测试建模仿真方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102591780A (zh) | 2012-07-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102591780B (zh) | 一种设备驱动软件测试方法和测试系统 | |
CN105608258B (zh) | 一种基于模型的系统设计及信息流可视化仿真系统及方法 | |
CN105378493A (zh) | 用于支持协议无关器件测试系统中协议重新配置的基于云的基础设施 | |
US10209306B2 (en) | Methods and systems for generating functional test patterns for manufacture test | |
CN104598373B (zh) | 一种多技术融合的嵌入式软件测试方法 | |
CN106776294A (zh) | 安卓手机自动化测试方法和系统 | |
KR101185542B1 (ko) | 마이크로컨트롤러유닛 테스트 자동화 시스템 및 그 방법 | |
CN110493812A (zh) | 配网测试的处理方法、装置、系统、处理器及主控设备 | |
CN110321292A (zh) | 芯片测试方法、装置、电子设备及计算机可读存储介质 | |
CN102707712B (zh) | 电子装备故障诊断方法和系统 | |
CN106125573A (zh) | 基于图形化模型的飞机前轮转弯控制盒设计方法 | |
KR20160108456A (ko) | 주변 디바이스들의 유니버셜 시리얼 버스 에뮬레이션 | |
CN104699617A (zh) | 一种游戏用自动化测试方法 | |
CN113495545A (zh) | 使用在环硬件测试车辆设备控制器的系统和方法 | |
CN108920846A (zh) | 一种高铁列控系统复杂运营场景的风险耦合分析方法 | |
CN104468279A (zh) | 一种路由协议交互的测试方法和测试工具 | |
CN112860587B (zh) | Ui自动测试方法和装置 | |
CN117632720A (zh) | 一种基于uvm的fifo缓冲模块的验证装置 | |
CN112416715A (zh) | 一种基于运营场景的计算机联锁性能测试系统 | |
US12055588B2 (en) | Testbenches for electronic systems with automatic insertion of verification features | |
US8560987B2 (en) | Test functionality integrity verification for integrated circuit design | |
KR101933533B1 (ko) | 스마트 공장 가상화 방법 | |
CN115455564A (zh) | 一种基于流水线的虚拟汽车自动仿真方法和装置 | |
CN106546850A (zh) | 一种基于检测热台的sru故障确认方法及装置 | |
CN111552263B (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 | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |