1.1 软件概述
1.1.1 软件的定义
软件其实大家都不陌生,除能在工作和学习方面发挥重大作用外,还可以在闲睱之余给用户带来快乐,让用户体会到劳逸结合的乐趣。那么什么是软件呢?人们普遍认为,自己使用的程序,包括系统程序、应用程序或者用户自己编写的程序就是软件。软件不仅仅是程序,程序是一系列按照特定顺序组织的计算机数据和指令,而软件不仅包括程序,还包括程序所需要的数据以及相关的文档资料。
软件具有以下特点:
(1)软件是无形的,没有物理形态,只能通过运行状态和结果来判断软件的功能、特性及质量情况。
(2)软件开发是人脑力劳动的结果,人的逻辑思维、智能活动及开发者的技术水平是软件产品好坏的关键。
(3)软件在运行过程中不会出现类似硬件的老化磨损,但是软件开发技术在不断更新,所以对软件也需要进行长期维护和持续更新。
(4)软件的开发和运行必须依赖于特定的计算机系统环境,对于硬件有依赖性,为了减少依赖,人们开发中提出了软件的可移植性。
(5)软件具有可复用性,软件开发出来很容易被复制,从而形成多个副本。
1.1.2 软件工程
在20世纪60年代,计算机软件的开发、维护和应用过程普遍出现了一些严重的问题,这些问题严重影响了软件产业的发展,制约着计算机的应用。1968年在西德Garmish召开的国际软件工程会议上正式提出软件危机的概念:计算机软件的开发和维护过程所遇到的一系列严重问题。软件危机一般表现为:①开发出来的软件产品不能满足用户的需求;②对软件的开发成本和进度的估算很不准确;③软件产品的质量不可靠;④缺少一些软件文档,使得大型软件系统开发经常失败;⑤软件开发的效率不高,与计算机应用发展的速度不相匹配。为了解决软件危机,人们开始尝试用工程化的思想去指导软件开发,于是软件工程的概念被提出来了。
电气和电子工程协会(Institute of Electrical and Electronics Engineers,简称IEEE)对软件工程的定义如下:①将系统化、严格约束的、可量化的方法应用于软件的开发、运行和维护过程,即将工程化的思想应用于软件;②软件工程是借鉴传统工程的原则、方法,以提高质量、降低成本为目的,指导计算机软件开发和维护的工程学科。从软件工程的概念我们可以看出,提升软件的质量成为了核心内容,围绕如何提高软件质量,对软件开发过程、软件方法的研究成为了人们不断探索的课题。由此产生的软件测试工作在软件工程中一直占据着核心地位。下面我们以一个经典的软件开发模型—瀑布模型为例进行说明。
瀑布模型是W.W.罗伊斯于1970年提出的软件开发模型,瀑布模型将软件开发过程分为6个阶段:计划→需求分析→设计→编码→测试→运行维护,其过程如图1-1所示。
图1-1 瀑布模型
在瀑布模型中,软件开发的各项活动严格按照这个过程进行,只有当一个阶段的任务完成之后才能开始下一个阶段。软件开发的每一个阶段都要有结果产出,结果经过审核验证之后作为下一个阶段的输入,下一个阶段才可以顺利进行。如果结果审核验证不通过,则需要返回修改。
在瀑布模型中,每一个阶段都有非常清晰的检查点,当一个阶段完成之后,只需要把全部精力放到后面的开发上即可,这种操作方式可以提高开发的效率。但是瀑布模型要求软件开发过程严格按照上面的线性方式进行,因此其缺点也是很明显的。
瀑布模型有以下缺点:
• 瀑布模型严格按照线性方式进行,依赖于早期进行的唯一一次需求调查,不能适应需求的变化;
• 由于是单一流程,开发中的经验教训不能反馈应用于本产品;
• 风险往往推迟至后期的开发阶段才显露,因而失去及早纠正的机会。
除此之外,对于现代软件开发来说,软件开发过程中各阶段之间的大部分过程已经不是线性的了,而且现在用户的需求变更也是非常频繁的,因此瀑布模型不再适合现代软件开发,已经被逐渐放弃。
随着软件工程的发展,在瀑布模型之后出现了许多其他的软件开发模型,比如快速原型模型、螺旋模型、增量开发模型、敏捷开发过程模型等,这些模型的不同之处主要集中在软件开发的各阶段之间的组织关系和执行顺序上,而软件开发过程中每个阶段的活动内容基本上没有太大的变化,软件测试活动作为核心活动之一,始终占据着比较重要的地位。
1.1.3 软件质量
在前面的内容中,我们提到过软件工程的目标是提高软件质量,然而在实际开发过程中定义软件质量是一件十分困难的事情。罗杰·普雷斯曼对软件质量的定义为:软件要满足显示的功能和性能需求,以及显示说明文档化的开发标准及专业人员开发的软件所应具有的所有隐含特性。
事实上,人们在现实的软件开发中,经常是采用ISO/IEC 9126:1991国际标准来评价一款软件的质量的。ISO/IEC 9126:1991是最通用的评价软件质量的国际标准,它不仅对软件质量进行了定义,而且还制定了软件测试的规范流程,包括测试计划的编写、测试用例的设计等。ISO/IEC 9126:1991标准由6个特性和27个子特性组成,如图1-2所示。
ISO/IEC 9126:1991软件质量特性模型中的6个特性的具体含义如下:
(1)功能性:与功能及其指定性质有关的一组属性,这里的功能是满足明确或隐含的需求的那些功能。
(2)可靠性:在规定的一段时间和条件下,与软件维持其性能水平的能力有关的一组属性。
(3)易用性:由规定或潜在的用户为使用软件所需做的努力和所做的评价有关的一组属性。
图1-2 ISO/IEC 9126:1991软件质量特性模型
(4)效率:与在规定条件下软件的性能水平和所使用资源量之间关系有关的一组属性。
(5)可维护性:与进行指定的修改所需的努力有关的一组属性。
(6)可移植性:与软件从一个环境转移到另一个环境的能力有关的一组属性。
实际的软件测试活动就是用这6个特性及其子特性来评价一个软件产品的质量的。