前言
正如自动测试工具市场的成长所呈现的,软件测试在软件开发过程中是极其重要的。而且软件测试通常要占用整个开发人力的30%到60%。
许多公司已经在使用自动化测试执行工具了。而基于建模的测试理念(Model-basedtesting)推动测试自动化的程度进入一个新的高度,从测试用例的自动化执行演变到测试用例的自动化设计。基于建模的测试工具将根据软件产品的模型自动产生测试用例。由此为产品测试提供一个可重复和合理的基础,从而保证所有产品行为的覆盖率,并且使得测试与需求能够直接对应。通过最近5至10年的密集研究,已经证明基于建模的测试理念是可行的,而且显现出良好的成本效益。在这一过程中,开发出了各种各样的测试生产策略和模型覆盖准则。就像很多的研究工具和实验性的设计原型,现在已经有一系列的商业化基于建模测试理念的工具问世了。
本书为基于建模测试理念提供一个实用的介绍,来告诉大家如何根据自己的测试目的来编写一个模型,以及如何使用基于建模测试的工具来生产测试套件。我们将集中在黑盒功能测试的主流实践,而不是那些更加专业的领域,如实时系统或者并行系统的软件测试。本书将涵盖不同类型的模型,尤其是基于转换的模型(如有限状态机和UML状态机)和前置/后置模型(B类型机和UML/OCL标准)。本书将使用来自不同软件领域的例子和案例研究,其中包括嵌入式软件和信息系统。本书将显示基于建模测试如何应用于现行的测试执行环境,比如MercuryTest Director,,JUnit和专有的测试执行环境。
通过阅读本书,你将学习的:
l 基于建模测试的基本原则和术语;
l 应用基于建模测试的详细步骤;
l 如何区分其他测试过程和基于建模测试;
l 如何将基于建模测试适用于几个典型的软件生命周期;
l 基于建模测试的好处与限制,他的成本效益,以及采用他的先决条件;
l 使用不同模型技术的指导方针;
l 有用的测试生产策略,以及在基于建模测试工具中这些策略如何被使用;
l 一些共同的测试选取标准,以及他们之间的不同,和如何将他们应用于控制测试生产过程;
l 如何将基于建模测试与自动测试执行平台连接;
l 如何将基于建模测试应用于实际的应用,我们将例举来自不同领域的案例研究,包括通信、电子银行和嵌入式控制器。
本书对于基于建模测试给出一个实用的并且易于理解的方法,旨在使更多的软件开发人员愿意使用这项技术和工具。唯一的假设背景是具有基本的软件开发知识,编程语言和扮演过测试角色。本书的两位作者都来自LEIRIOS技术公司。这家公司成立于九十年代,起初是一个大学的研究项目,之后演变成一个商业化基于建模测试工具的开发公司。本书反应了他们部署几十个不同领域工业项目的经验,比如智能卡,电子商务,自动化控制软件,和银行业以及行政信息系统。
本书中的一些例子是受这些工业经验应用的启发。有几章使用了LEIRIOS测试生产工具(LTG/B和LTG/UML)作为基于建模测试工具的例子,此外各种其他工具作为补充方法被提及,比如微软的SpecExplorer和Conformiq Qtronic。我们集中精力在使用工具的普遍原装,而不是和工具的具体交互,因为这些具体的东西常常随着不同的工具而改变。
表P.1给出一个贯穿本书所有例子和案例研究的综述,每一个例子的应用领域,模型种类和基于建模的测试工具
表P.1 在本书中涉及的案例
章节 | 案例 | 应用领域 | 模型 | 工具 |
1.3 | 智能卡 | 银行 | UML | LTG/UML |
3.3 | 咖啡机 | 嵌入式系统 | UML | - |
3.4 | 咖啡机 | 嵌入式系统 | B, Z | - |
5.1 | Qui-Donc | 电话 | FSM | Chinese Postman |
5.2 | ZLive | Java单元测试 | EFSM | ModelJUnit |
6.2 | Scheduler | 嵌入式系统 | B | LTG/B |
6.3 | Triangle | 数据处理 | B | LTG/B |
6.5 | 聊天系统 | 分布式系统 | Spec# | Spec Explorer |
7.2 | eTheater | 网络购物 | UML | LTG/UML |
7.3 | Protocol | 通信 | UML | Qtronic |
9 | GSM 11.11 | 通信 | B | LTG/B |
10 | ATM | 银行 | UML | LTG/UML |
本书可以顺序阅读,当然也可以从其中任意章节开始或者当需要时参考相关的概念章节(如第二、第三和第四章节)。第一、第二和第十一章节论述的是常见的3W(what,why和when)问题(比如,什么是基于建模的测试?为什么我们要使用它?什么时候我们应该开始使用它?)。这几个章节是为大多数的读者准备的,包括经理、开发人员、测试人员和研究人员。其他章节则更加侧重于技术性,旨在于让测试人员阅读,因为他们才是对于如何进行基于建模测试的主角。
这里是对于各个章节的简要概述。
- 第一章给出一个基于建模测试的概述,并且使用一个小例子阐述了使用UML模型来产生测试用例的过程。
- 第二章将基于建模测试与其他测试方法进行了比较,使用了一个假设的例子和几个来自工业应用中的实际例子,说明基于建模测试在成本和效益上的好处。
- 第三章详细介绍了各种不同的基于建模测试的模型,并且比较了一些描写模型的不同标记方法。
- 第四章介绍了大量测试选取标准,这些方法能够用于控制测试生成的规模。
- 第五、六、七章是本书的核心部分,其中向读者展示一系列如何使用基于建模测试的例子。每个章节将给出来自不同领域的例子,使用不同模型标记方法和不同的基于建模测试的工具。这3个章节让我们对各个方法有了一个比较,对于自己写一个好的模型提供一个指引,并且说明了基于建模测试的不同算法,同时也展示了一些典型的基于建模测试的工具。
- 第八章涉及执行生成测试用例的问题。这些生成测试用例经常比被测系统更加抽象,因此他们必须被映射到可执行的测试脚本中。
- 第九和第十章描述了两个比较大的案例,对整个的测试过程,从设计模型到执行生成测试用例都做了介绍。
- 最后一章介绍了应用基于建模测试中会遇到的几个实践性问题和技术。在这一章里,对于这些基于建模测试的方法进行了分类分析,同时给出了对于人员组织和培训问题的建议,并且讨论了如何在目前两种主要的软件开发模式(敏捷模式和UML统一过程模式)中应用基于建模测试的方法,此外还展望了目前和未来基于建模测试的方向。
本书对于任何一个正在寻找如何改进功能测试技术或者使用现代测试方法和工具的人都是有价值的。从这个网站(http://www.cs.waikato.ac.nz/∼marku/mbt)可以下载到本书涉及的案例的电子版本。该网站还提供一些在本书中提及的基于建模测试的免费或者演示版本,此外还维护一个列表,罗列了目前商用的基于建模测试的工具。