1.1.3 软件工程模型
讨论软件测试学,不得不涉及软件工程模型,因为软件测试学与软件工程学的发展是依依相关、相辅相成的。根据目前比较先进的软件测试理念,软件测试应该贯穿于软件工程的整个过程中。下面介绍几种软件工程模型。
1.瀑布模型
图1-6为瀑布模型。这个模型是最经典的软件工程模型,包括"计划"->"需求分析"->"设计"->"编码"->"测试"->"运行维护"这几个阶段。
但是,这个模型存在比较严重的缺点。
(1)不可反复及不适用于需求变更比较频繁的情况。由于瀑布模型从业务建模到运行维护一脉相承,不可以反复。而现代软件项目中,需求变更是无处不在的:"唯一不变的是需求变更"。若运用这种模型,只要项目需求发生变化,就要把原有的设计打翻,重新进行系统分析,概要设计,详细设计等。
(2)用户很难在项目初期了解项目状态:由于用户在项目初期很难提出明确的需求,而利用瀑布模型只有到编码结束,软件测试工程师才可介入软件测试,客户才可以看到是否是他们需要的产品,在此之前这些产品他们不完全了解,有时需要补充,有时客户也有可能推翻他们原本的需求,提出新的需求,这样往往会给客户方、开发方带来很多麻烦。
2.迭代模型和螺旋模型
图1-7为迭代模型。瀑布模型和迭代模型往往在概念上区别不明显。事实上,这两个模型在思想本质上是一致的。它将客户的需求按照用户的重要等级和模块自身的等级进行安排,从最开始进行分析、设计、编码、测试,然后再进入下一轮迭代。用户只要在每一轮结束后,就可以看到产品的一些雏形,从而可以进行需求变更和提出下一轮建议。该模型初期开发工作比较少,用户又可以及时提出下一轮更详细的需求和变更,所以这样的模型往往利于软件公司产品的研发。这类模型有著名的RUP模型、快速开发模型以及现在比较流行的敏捷开发等,它们都遵循迭代的思想。
图1-7 迭代模型
扩展阅读:增量开发与迭代开发
注:本书中扩展阅读大部分来自于百度百科,请见参考文献【21】。
1.1.4 软件测试模型
1.V模型
图1-8所示为V模型测试。
图1-8 V模型测试
单元测试相对于编码进行,这一步往往由开发工程师执行。
集成测试相对于详细设计,将模块以由上到下、由下到上或混合方式进行逐步集成。测试软件模块与模块、类与类之间的关联性。
系统测试相对于概要设计,软件测试工程师站在整体的立场上对系统进行全面的软件测试工作。
验收测试是用户对产品进行的测试,一般分为Alpha测试和Beta测试。验收测试往往由系统维护人员或者用户来完成,需要完全站在用户的立场上进行测试,测试环境也要尽可能与用户的实际环境保持一致,大多数时候,需要到用户现场去进行验收测试工作。
2.W模型
图1-9所示为W模型测试。W模型其实是V模型的变种,它提倡的主要思想是软件前置测试理念(即软件测试需要贯穿软件研发的始终)。所以,W模型又称双V模型或前置模型。在需求、设计和编码阶段对产生的工件进行文档评审,一个目的是提出自己的建议和意见,另外一个目的是尽可能理解产品的需求和实现方式。使用前置软件测试法,Bug在软件前期就可以发现,从而降低软件开发的成本。
图1-9 W模型测试
3.X模型
图1-10为X模型测试。X模型将软件系统分为若干模块,对每个模块进行单元测试、集成测试以及系统测试,然后统一对模块进行集成测试。事实上,这里已经提出了"探索式软件测试"的概念,在本书第3章会详细介绍探索式测试。
图1-10 X模型测试
1.1.5 软件测试方法
软件测试方法见表1-1。
表1-1软件测试方法
代码评审中有一个部分是对编码规范的检查。另外,代码评审可以通过人工的方式来实现,也可以借助代码评审工具,如在本书第二篇7.1.1节"普通软件测试工具推荐"提及的Checkstyle、Findbugs、PMD、Android Lint等工具。
扩展阅读:阿丽亚娜五型运载火箭的爆炸-代码静态测试的重要性
程序员在编程的时候必须定义程序用到的变量,以及这些变量所需的计算机内存,这些内存用比特位来定义,如int16、int32、double、float等。
一个16位的整数变量可以代表-32.768到32.767中间的值。而一个64位的整数变量可以代表-9.223.372.036.854.775.808到9.223.372.036.854.775.807中间的值。
1996年6月4日上午9时33分59秒,随着5、4、3、2、1、0的倒计时,阿丽亚娜五型运载火箭的首次发射点火后,火箭开始偏离路线,最终被逼引爆自毁,整个过程只有短短的30s。阿丽亚娜五型运载火箭是基于前一代四型火箭开发的。在四型火箭系统中,对一个水平速率的测量值使用了16位的变量及内存,因为在四型火箭系统中反复验证过,这一值不会超过16位的变量,而五型火箭的开发工程师简单复制了这部分程序,而没有对新火箭进行数值的验证,结果发生了致命的数值溢出。发射后这个64位带小数点的变量被转换成16位不带小数点的变量,引发了一系列的错误,从而影响了火箭上所有的计算机和硬件,瘫痪了整个系统,因而不得不选择自毁。
阿丽亚娜五型载火箭使用Ada语言开发,出问题的代码如下:
L_M_BV_32:=TBD.T_ENTIER_32S ((1.0/C_M_LSB_BV) * (G_M_INFO_DERRIVE()); if L_M_BV_32 >32767 then P_M_DERIVE(T_ALG.E_BV) :=16#7FFF#; elseif L_M_BV_32 <-32767 then P_M_DERIVE(T_ALG.E_BV) :=16#8000#; else P_M_DERIVE(T_ALG.E_BV):=UC_16S_EN_16NS(TDB.T_ENTIER_16S(L_M_BV_32)); end if; P_M_DERIVE(T_ALG.E_BH):=UC_16S_EN_16NS(TDB.T_ENTIER_16S(1.0/C_M_LSB_BH)*G_M_INFO_DRIVER(T_ALG.E_GH))); |
在这个代码中导致最终问题的是最后一句。在这一段语句中共有7个变量运算符出现了问题,仅有4个做了异常处理的保护,而其他3个没有进行。但是这也是由于运行的机器SRI计算机中设定最大负荷目标值为80%,如果要进行异常处理,计算机的CPU要处理的代码会增多。
教训:软件设计和Code Review的重要性。另外阿丽亚娜五型运载火箭在倒计时阶段、飞行阶段以及进入轨道阶段都未经过测试验证。
1.1.6 软件测试步骤
图1-11描述了软件测试步骤,具体如下。
图1-11 软件测试步骤
(1)软件测试计划。
(2)软件测试分析。
(3)软件测试设计。
(4)软件测试实施。
(5)软件测试执行。
(6)评估出口准则和报告。
(7)软件测试结束活动。
具体内容读者可以参见参考文献【13】第二章进行更深入的学习。
版权声明:51Testing软件测试网获人民邮电出版社和作者授权连载本书部分章节。任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。