关键词:
自动化测试
覆盖准则
测试用例生成
符号执行
模型检查
基于模型的测试
摘要:
软件测试作为软件实践中最常用的软件验证技术,其基本过程主要分为三步:(1)针对待测系统设计有效的测试用例;(2)执行这些测试用例;(3)将测试用例的执行结果与预期结果进行比对,确认程序输出是否正确。其中,测试用例的设计需要大量的人力投入,因为测试人员只有在熟悉待测系统的需求规范,甚至代码结构的情况下,才能设计出有效的测试用例。为了系统且充分地测试某个软件系统,在理想情况下,测试人员需要找出所有的程序输入值的组合,力求将待测系统的各个部分(各种行为)都测试到,但这很难实现。一种比较通用的测试用例选择方法,是按照某些测试覆盖准则(Test Adequacy Criteria)来指导用例的选取,它的优势在于:(1)测试覆盖准则能确定测试用例的选取标准,指导测试人员如何设计测试用例;(2)通过使用不同的覆盖准则可以满足不同的软件测试需求,比如更复杂的测试覆盖准则可以增强测试用例集在检测软件错误时的有效性;(3)测试覆盖率能给软件开发人员、测试人员、以及项目管理者提供了一个可参考、可跟踪的软件质量的度量值,反映被测软件的可靠性程度。但是,在基于覆盖准则的测试用例生成问题上,现有的自动化测试方法仍然存在着许多问题:(1)现有的测试方法较少考虑如何快速地生成满足目标覆盖的测试用例,或者往往只考虑单独某一种目标覆盖;(2)现有的研究工作更多地聚焦于实现一些简单的覆盖标准,如语句覆盖、分支覆盖等,但是针对较复杂、较高级的覆盖标准(如数据流覆盖、基本路径覆盖)的研究工作相对较少,由于缺乏高效的测试方法,这些高级覆盖准则很难在软件测试中发挥其巨大的潜力;(3)现有的测试方法较多地考虑CLI (Command Line Interface)软件,往往以待测程序的源代码作为处理对象,而对于现在比较流行的GUI (Graphical User Interface)软件,如何生成基于覆盖准则的测试用例,仍然缺乏有效的测试方法。为此,本文以软件测试中的覆盖准则为基础,研究测试用例自动化生成这一问题,并在如下几个方面进行了深入研究:1.基于控制流覆盖准则的测试用例自动化生成方法。该方法主要针对控制流覆盖准则,如语句覆盖、分支覆盖、MC/DC覆盖,提出了一个统一的测试用例自动化生成框架,该框架基于动态符号执行技术,以目标覆盖准则为导向,力求快速有效地生成满足对应覆盖准则的测试用例。2.基于数据流覆盖准则的测试用例自动化生成方法。以数据流覆盖准则为对象,自动化生成测试用例,该方法结合了符号执行技术和模型检查技术,提供了一个高效的数据流测试框架,为可达的测试对象生成用例的同时,也可检测出不可达的测试对象。3.基于混合覆盖准则的GUI测试用例自动化生成方法。以移动app (GUI软件的典型代表)为对象,同时从抽象模型层的覆盖准则和具体代码层的覆盖准则出发,引导并优化GUI测试用例的生成。我们相信,上面提出的这些自动化测试方法,将有助于进一步提高测试用例生成的自动化程度,同时也能为尽早发现软件缺陷提供有效的手段。