论文摘要
随着Internet的普及以及组件、中间件和Web Services等技术的迅速发展以及Web的广泛应用,Web应用的可靠性和质量保证成为一个非常关键的问题和研究热点。而软件测试是提高软件可靠性和保证软件质量的一种主要手段。Web应用是一种非常复杂的、分布式的、多层结构的交互式应用,为用户提供了一种全新的部署软件应用的方式。Web应用的异构性、动态性、连接的多样性、控制流程的可变性以及需要快速开发与发布等特性给Web应用的测试带来了新的挑战。目前还没有比较系统的方法和工具对Web应用进行有效的测试。Web应用的特性要求必须对传统的测试方法进行改进或提出新的适合Web应用特性的测试方法。目前的测试主要依赖测试工程师的直觉和经验,Web应用的测试被认为是一个耗时的、代价昂贵的过程。因此,迫切需要一套新的Web应用测试方法并实现测试的自动化。基于模型的、模型驱动的、以测试为中心的软件开发方法和技术的兴起和应用,以及形式化验证技术的逐步成熟,使基于模型的软件测试方法与技术在近几年得到了关注。基于模型的测试是一种突破性的黑盒测试技术,它以明确描述系统预期行为的抽象模型为依据,自动生成可执行的测试用例,产生测试脚本,执行测试并自动评价测试结果,实现测试过程的自动化。这种方法可以使得软件测试和软件设计以及实现同时进行,改变了软件工程中“现在编程,以后测试”的工作方式,使得在整个软件生命期中可以并行地进行测试工作。因此,基于模型的测试技术是实现对Web应用测试的有效途径。但是,这方面的研究还处于方法探索阶段。统一建模语言(UML)已经成为事实上的工业建模标准,能够很好地为用户的需求建模;而有限状态机(FSM)为测试软件的复杂行为提供了一个有效的机制,不必考虑软件的底层实现细节。本文以Web应用为研究对象,从UML模型和FSM模型出发,研究一系列基于模型的测试用例生成技术,获得基于模型的Web应用软件测试方法,构建一个从模型出发产生测试用例的原型工具,力图实现Web应用测试过程的自动化。在软件测试中,测试用例是依照测试准则来产生的。测试准则一直是人们研究测试方法的核心技术。本文在分析已有的基于UML模型测试准则的基础上,根据场景的概念(分为主要场景和次要场景),提出了基于UML用例图的七个测试准则:场景覆盖、主要场景覆盖、行为者主要场景覆盖、主要场景序列覆盖、用例覆盖、行为者用例覆盖和用例序列覆盖,并给出了这些测试准则的实际应用。另外还提出了基于UML对象图的两个测试准则:方法链覆盖和MM-path序列覆盖。这些基于UML模型的测试准则对于测试用例的生成具有非常重要的意义。用例视图是UML软件模型的核心,用例是推导系统测试需求的来源,它代表了系统提供给用户的高层功能,而顺序图可以进一步描述用户行为的先后发生顺序。因此,本文给出了一种基于UML用例图和顺序图对Web应用进行测试的方法。生成的测试用例是基于功能来划分的,因为一个用例可以看成是一个软件功能或其组合。根据所提出的基于UML用例图的覆盖测试准则,生成所需的测试用例。由于软件的实现应该和规格说明相一致,所以一个对规格说明有更好覆盖度的测试集就更能准确地评估软件的质量。基于模型的形式规格说明的主体(前置条件和后置条件)是谓词表达式。本文详细分析了基于规格说明的若干逻辑覆盖测试准则。针对已有的决定性逻辑覆盖测试准则的不足之处,提出了掩盖性逻辑覆盖测试准则,并对其进行了详细分析。根据该准则生成的测试用例能发现文字的掩盖性带来的错误。从谓词表达式的结构入手,分析了文字之间的约束关系、复杂谓词表达式的分解与合成、谓词表达式之间的关系。提出了全真谓词表达式覆盖、全假谓词表达式覆盖、完全子谓词表达式覆盖、唯一文字真覆盖以及唯一文字假覆盖等测试准则。满足这些测试准则的测试用例集能检测出不同类型的错误。给出了谓词表达式可能的错误类型,提出了最小的能检测逻辑联结词错误的测试用例集生成算法。本文还给出了从FSM模型出发自动生成测试用例的方法。在从FSM模型生成测试用例时,重点分析了与FSM有关的最常用、具有代表性的几种覆盖测试准则,包括状态覆盖、迁移覆盖、迁移对覆盖、谓词表达式覆盖、文字覆盖、受限活动文字覆盖、掩盖文字覆盖等测试准则,在此基础上提出了全循环K次覆盖测试准则,并提出了分别根据上述八种覆盖测试准则从FSM模型生成测试用例的算法。Web应用是一个具有高度交互性的系统,它可以看成是由软件组件之间的交互构成的集合。一个FSM内部的测试,通常只测试了Web应用的一部分,FSM之间的交互测试称之为FSM的组合测试。在FSM的组合测试级上,把每一个FSM看成是一个已经测试好的复合组件,FSM的组合测试就是测试这些复合组件的复合。一个复合组件包含其它的组件(或FSM),被测的Web应用就成了不同的交互组件的复合了。组件间根据动作来交互,当一个组件的输出动作与另一个组件的输入动作对应起来时,就认为这两个组件进行了交互。本文利用组件交互自动机复合的思想,提出了动作抽象化的复合规则,给出了一种基于FSM模型的组合测试方法。手工生成测试用例要求软件测试人员具有一定的经验和较高的专业水平。而且,没有系统化的方法作为指导会大大降低测试的质量和效率。为了实现测试的自动化并验证所提出的测试用例生成方法,本文设计并部分实现了一个测试用例生成方法的系统原型FSMTCGEN。