绪 论 1.1 软件生存期 同其它任何事物一样,计算机软件从它的发生、发展到达成熟阶段,以至老化和衰亡,是一个历史发展的过程,这个过程称为软件的生存期( Li" name="description" />

软件测试技术基础概论

发表于:2008-06-03来源:作者:点击数: 标签:软件测试概论基础技术
第一章 MI LY: 黑体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'">绪 论 1.1 软件生存期 同其它任何事物一样,计算机软件从它的发生、发展到达成熟阶段,以至老化和衰亡,是一个历史发展的过程,这个过程称为软件的生存期( Li

第一章           MILY: 黑体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'">绪

1.1    软件生存期

同其它任何事物一样,计算机软件从它的发生、发展到达成熟阶段,以至老化和衰亡,是一个历史发展的过程,这个过程称为软件的生存期(Life Cycle),包括下列六个步骤:

1)计划(Planning):确定软件开发的总目标;给出软件的功能、性能可靠性以及接口等方面的设想;研究完成该软件任务的可行性,探讨问题解决的方案;对可供开发使用的资源(软件、硬件、人力)、成本、可取得的效益和开发的进度等做出估计;制定完成开发任务的实施计划。

2需求分析Requirement Analysis):由软件人员和用户共同对待开发的软件进行详细的定义和确切的描述,其结果是给出软件需求说明书(SRSSoftware Requirement Specification)。

3)设计(Designing):软件的设计分为两部分。一是概要设计(Preliminary Design),是指根据软件的需求说明书,软件设计人员应把需求说明书中各项需求转化为相应的体系结构,在结构中的每一组成部分是功能明确的模块,每个模块都能体现相应的需求。二是详细设计(Detail Design),是指对概要设计中给出的各个模块所要完成的工作进行具体的描述,为后来的编程打下基础。软件设计的结果是给出设计说明书。

4)编码(Coding):利用某种计算机语言,把设计说明书中规定的内容转化为计算机可以接受的程序的过程称为编码。编码应以设计相一致,且结构清晰、易读、易修改。

5)测试(Testing):根据软件的需求说明书、设计说明书和源代码,检验软件开发工作的成果是否符合要求的过程称为软件测试。软件测试是发现软件错误、提高软件可靠性与保证软件质量的重要手段。

6)运行与维护(Running and Maintaining):对已交付用户的软件投入正式使用后便进入运行阶段,这个阶段可能持续若干年。在运行过程中,可能有多种原因需要对它进行修改,包括运行中发现了软件错误需要修正;为适应变化了的软硬件环境,而需要做相应的变更;为进一步增强软件的功能,或提高其性能,而使它进一步的完善和扩充等。

上述六步表明了一个软件从其酝酿开始,直至使用相当长的时间后,被新的软件代替而退役的整个过程。按此顺序逐步转变的过程可用一个软件生存期的瀑布模型加以形象化描述。如图1.1所示。图中自上而下的箭头代表了问题的一个求解过程,而自下而上的箭头代表了在实际项目的研制中,为确保软件质量,每一步骤完成后都要进行复查,如发现了问题,就要及时解决,以免问题积压到最后造成更大的困难。运行与维护的箭头表示在运行中可能需要多次维护。另外图中还指明了六个步骤划分的三个阶段,软件定义阶段、软件开发阶段和软件维护阶段。

值得注意的是,上述软件维护工作不可简单地看待仅仅是修改程序。在运行过程中若有必要修改,得提出充分的修改理由,经过审核,才能确定下来。接着需要经历制定修改计划、确定新的需求、修改软件设计、修改编码、进行测试以及重新投入运行等一系列步骤,这正是上述开发一个新软件的步骤。若是运行中多次提出修改,则将经历多次这些步骤。可用图1.2来表示这一过程,并称为软件的生存周期,也简称为软件的生存期。

1.2   

软件危机

计算机系统工程分为硬件和软件两大范畴。计算机硬件的工程技术在过去的50多年中已经达到了相当成熟的状态。硬件设计技术和制造技术发展非常迅速,其自动化已经达到相当高的水平,硬件的可靠性已是一种现实的要求,而不在是一种愿望。

而在软件工程技术方面的情况则不同,软件是最难设计、最少可能成功、最容易出错、也最难管理的系统部分。据报道,在上世纪的最后十年里,计算机软件已成为系统瘫痪的主要原因。随着以计算机为基础的系统在数量、复杂程度和应用方面的激增,对软件的需要却在不断增加,因此促使供求矛盾日趋激化,这就是人们常说的软件危机。软件危机的来源主要表现以下几个方面:

1)缺乏软件开发的经验:由于缺乏大型软件开发的经验和软件开发数据的积累,使得开发工作的计划很难制定。主观盲目地制定计划,执行起来和实际情况有很大差距,使得经费常常突破预算、工期一拖再拖,软件的投资者和用户对开发工作从不满意发展到不信任。

2)需求不明确:作为软件设计依据的软件需求,在开发的初期提得不够明确,或者未能做出确切的表达。开发工作开始后,软件人员又未能和用户及时的交换意见,使得一些问题得不到及时解决而隐藏起来,造成开发后期矛盾的集中暴露。导致对多个错综复杂的问题既难于分析,又难于解决。

3)缺少开发规范:开发过程中没有统一遵循的、公认的方法论或开发规范,参加工作的人员之间的配合不够严密,约定不够明确。加之不重视文字资料,使得开发文档很不完整。发现了问题,未能从根本上去找原因,只是修修补补。显然,这样开发出来的软件无法维护。

4)软件的复杂性:软件的规模一般都比较庞大,大型软件有时会超过1亿行源代码。加之人们传统上的误区,往往是硬件难以实现的部分改用软件来完成,这使得软件既庞大,复杂性又高,甚至有时人的大脑已无法理解、无法驾驭人类本身所创造出来的复杂逻辑系统,投入使用后往往错误百出。

5)缺乏有效的测试手段:软件的复杂性和软件测试的复杂性,使得难以研制有效的软件测试工具,导致测试效率不高、自动化程度低,测试花费时间多、测试成本高,这使得软件开发者只要求测试人员对软件做简单的测试,这无法保证软件的质量。

软件危机的事例是很多的。最著名的是上世纪六十年代,美国IBM公司开发的IBM 360操作系统,这一项目在开发期共花费了5000万美元,总共投入的工作量是5000人年,共写出了100万行源程序。由于它太庞大,OS 360变得相当不可靠,平均每次修改后的新版本都大约存在1000个左右的错误,而且有理由认为这是一个常数。另外,美国空军的范登堡中心在上世纪六十年代后期发生过多次导弹试射失败的事故,事后检查几乎都是由于软件有错误而造成的。

与软件危机有关的许多问题都起源于软件本身的特点、软件开发人员的弱点、以及人们对软件开发实质的种种不切实际的误解,计算机软件已经成为以计算机为基础的系统发展的重要瓶径。科学上的危机和其它领域的危机一样,解决危机的过程往往孕育着一种科学理论的诞生。自上世纪七十年代以来,科学家们一直在试图解决软件危机问题,虽然目前尚不能说软件的危机已经过去,但二十年来,软件技术的迅速发展,包括面向对象的技术、基于知识的软件开发环境、先进的软件测试工具等,为保证大型软件的研制提供了重要的基础。正是这些先进的技术,目前上亿行源代码的软件比比皆是。

1.3    软件质量

质量这一概念有许多不同的定义。在《词海》中,就把质量一词解析为“产品或工作的优劣程度”。国际标准化组织(ISO)把质量定义为“与一个产品或服务是否能够满足其指定的或蕴涵的需求有关的性质与特征的总合”。同其它产品一样,软件的质量也不是绝对的,在不同的情况下,对不同的人来说,软件质量的含义是不同的。

1. 软件质量要素

软件产品的质量是由许多软件性质构成的,这些性质常称为软件质量要素。一般来讲,软件的质量因素有下列11个。

1)易使用性:是指软件易于使用的程度。

2)完整性:保护软件不被未经同意的存储和使用的能力。

3)效率:指软件对计算机资源的使用效率,包括运算时间效率和存储空间效率。

4)可靠性:不失败的能力。

5)正确性:程序完成其规约的程度。

6)易维护性:在程序的操作环境中,确定软件故障的位置并纠正故障的难易程度。

7)灵活性:当软件操作环境变化时,对软件作相应修改的难易程度。

8)易测试性:对软件测试以保证其无错误和满足其规约的难易程度。

9)易移植性:将一个程序从一个运行环境移植到另一个运行环境的难易程度。

10)易复用性:复用一个软件或其部分的难易程度。

11)互用性:将一个软件系统和其它软件系统组合在一起的难易程度。

2.软件质量要素的衡量标准

软件每个质量要素又包含一系列的衡量标准,具体为:

1)易使用性:包括易操作性、培训、易交流性、输入和输出量、输入输出速度。

2)完整性:包括存储控制、存储审查。

3)效率:包括运行效率、存储效率。

4)可靠性:容错性、一致性、准确性、简洁性。

5)正确性:包括易追溯性、一致性、完备性。

6)易维护性:一致性、简洁性、简明性、模块性、自我描述性。

7)灵活性:模块性、一般性、易扩展性、自我描述性。

8)易测试性:简洁性、模块性、检视、自我描述性。

9)易移植性:模块性、自我描述性、硬件独立性、软件独立性。

10)易复用性:通用性、模块性、自我描述性、硬件独立性、软件独立性。

11)互用性:模块性、通讯共同性、数据共同性。

每个衡量标准的定义为:

1)易追溯性:指在特定的软件开发与操作环境中,能够从软件的需求寻找出其相应的实现的能力与性质。

2)完备性:指软件实现了其全部所需功能的性质。

3)一致性:指在软件的设计与实现中采用统一的技术与术语的性质。

4)准确性:指软件的输出与计算中的精度满足其需求的性质。

5)容错性:指在非正常条件下,仍然能够操作软件的性质。

6)简洁性:指软件以最容易理解的方式实现其功能的性质。

7)模块性:指用一系列在很大程度上相互独立的模块来构成软件的性质。

8)一般性:指软件所提供的功能具有应用范围广的性质。

9)易扩展性:指易于对软件存储空间和计算功能进行扩充的性质。

10)检视:指软件所提供的用于测量使用情况和识别错误的属性。

11)自我描述性:指软件中包含它对功能的实现的解析性信息的属性。

12)运行效率:指软件使用最少的处理时间的性质。

13)存储效率:指软件在操作中对存储空间的需求最少的性质。

14)存储控制:指反映对软件及其数据的存储进行控制的能力的性质。

15)存储审查:指对软件及其数据的存储进行审查、记录能力的性质。

16)易操作性:指决定软件的操作与操作过程的复杂程度与难易程度的性质。

17)培训:指支持从初步熟悉到熟练操作软件的过度的性质。

18)易交流性:指软件的输入与输出能够被人们理解的程度的性质。

19)软件独立性:指决定对软件环境中的其它软件的依赖程度的性质。

20)硬件独立性:指决定软件对硬件环境的依赖程度的性质。

21)通讯共同性:指软件使用标准的通讯协议与界面的性质。

22)数据共同性:指软件使用标准的数据表示格式的性质。

23)简明性:软件的实现使用最少代码的性质。

每一个软件质量衡量标准又可以有多个不同的度量。软件质量度量有的作用于软件的代码,有的作用于软件开发过程中产生的中间结果和文档。

原文转自:http://www.ltesting.net