软件测试实用技术与常用模板(第2版)
上QQ阅读APP看书,第一时间看更新

1.1 软件的相关知识概述

从概念入手,才能少走弯路,才能对与此概念相关的问题有一个正确的认识,最终解决问题。软件测试的对象就是软件,为了进行软件测试,我们应了解什么是软件、软件的内容及其生存期。

1.1.1 软件的定义及分类方法

1.软件的定义

软件是计算机系统中与硬件相互依存的一个部分,它是包括程序、数据及其相关文档的完整集合。其中,程序是按事先设计的功能和性能要求执行的指令序列;数据是使程序能正常操纵信息的数据结构;文档是与程序开发、维护和使用有关的图文材料。

软件具有以下8个特点:

1)软件是一种逻辑实体,而不是具体的物理实体,因而它具有抽象性。

2)软件的生产与硬件不同,它没有明显的制造过程。要提高软件的质量,必须在软件开发方面下工夫。

3)在软件的运行和使用期间,不会出现硬件中所出现的机械磨损、老化问题。然而它存在退化问题,必须要对其进行多次修改与维护。

4)软件的开发和运行常常受到计算机系统的制约,它对计算机系统有着不同程度的依赖性。为了解除这种依赖性,在软件开发中提出了软件移植的问题。

5)软件的开发至今尚未完全摆脱人工的开发方式。

6)软件本身是复杂的。软件的复杂性可能来自它所反映的实际问题的复杂性,也可能来自程序逻辑结构的复杂性。

7)软件成本相当昂贵。软件的研制工作需要投入大量的、复杂的、高强度的脑力劳动,它的成本是比较高的。

8)相当多的软件工作涉及社会因素。许多软件的开发和运行涉及机构、体制及管理方式等问题,它们直接决定项目的成败。

2.软件的分类方法

软件的分类方法有4种,下面分别介绍。

(1)按软件的功能分类

按软件的功能可以将软件分为系统软件、支撑软件、应用软件。

● 系统软件:是与计算机硬件紧密配合在一起,使计算机系统中的各个部件、相关的软件和数据协调、高效地工作的软件。例如,操作系统、数据库管理系统、设备驱动程序以及通信处理程序等。

● 支撑软件:是协助用户开发软件的工具性软件,其中包括帮助程序人员开发软件产品的工具,以及帮助管理人员控制开发进程的工具。

● 应用软件:是在特定领域内开发、为特定目的服务的一类软件,其中包括为特定目的如数据采集、加工、存储和分析服务的资源管理软件。

(2)按软件的服务对象的范围分类

按软件的服务对象的范围可以将软件分为项目软件、产品软件。

● 项目软件:也称定制软件,是受某个特定客户(或少数客户)的委托,由一个或多个软件开发机构在合同的约束下开发出来的软件。例如,军用防空指挥系统、卫星控制系统等。

● 产品软件:是由软件开发机构开发出来直接提供给市场,或为成百上千个用户服务的软件。例如,文字处理软件、财务处理软件、人事管理软件等。

(3)按开发软件所需要的人力、时间以及完成的源程序行数分类

按开发软件所需的人力、时间以及完成的源程序行数,可以将软件分为6种不同规模的软件,如微型、小型、中型、大型、甚大型和极大型。

不论是规模大、时间长、参加人员多的软件项目,还是规模小、时间短、参加人员少的软件项目,其开发工作必须要有软件工程的知识作为指导,遵循一定的开发规范。其基本原则是一样的,只是对软件工程技术依赖的程度不同而已。

(4)按软件的工作方式分类

按软件的工作方式可以将软件分为实时处理软件、分时软件、交互式软件、批处理软件。

● 实时处理软件:指在事件或数据产生时立即予以处理并及时反馈信号,其过程需要监测和控制的软件,主要包括数据采集、分析、输出三部分。

● 分时软件:允许多个联机用户同时使用计算机的软件。

● 交互式软件:能实现人机通信的软件。

● 批处理软件:把一组输入作业或一批数据以成批处理的方式一次运行,按顺序逐个处理完的软件。

1.1.2 软件工程的主要内容

1.软件工程研究的内容

软件工程研究的主要内容是软件开发技术和软件开发管理两个方面。在软件开发技术中,主要研究软件工程方法、软件工程过程、软件开发工具和环境。

1)软件工程方法为软件开发提供了“如何做”的技术。它包括多方面的任务,如项目计划与估算、软件系统需求分析、数据结构、系统总体结构设计、算法设计、编码、测试以及维护等。软件工程方法常采用某种特殊的语言或图形表达方式,以及一套质量保证标准。

2)软件工程过程是将软件工程的方法和工具综合起来以达到合理、及时地进行计算机软件开发的目的。软件工程过程定义了软件工程方法使用的顺序、要求交付的文档资料,以及为保证质量和协调变更所需要的管理。

3)软件开发工具和环境为软件工程方法提供了自动的或半自动的软件支撑环境。目前,人们已经开发出了许多软件工具来支持上述的软件工程方法。而且已经有人把诸多软件工具集成起来,使得一种工具产生的信息可以被其他的工具所使用,从而建立起一种称为计算机辅助软件工程(CASE)的软件开发支撑系统。CASE将各种软件工具、开发机器和一个存放开发过程信息的工程数据库组合起来形成一个软件工程环境。

2.软件工程项目的目标

软件工程项目是一门工程性学科,目的是成功地建造一个大型软件系统,所谓“成功”即要达到以下几个目标:

● 付出较低的开发成本。

● 达到要求的软件功能。

● 取得较好的软件性能。

● 开发的软件易于移植。

● 需要较低的维护费用。

● 按时完成开发任务,及时交付使用。

● 开发的软件可靠性高。

在实际开发的具体项目中,要想让以上几个目标都达到理想的程度往往是非常困难的。而且上述目标很可能是互相冲突的。如降低开发成本的同时很可能也降低了软件的可靠性;如果过于追求提高软件的性能,可能造成开发出的软件对硬件有较大的依赖,从而直接影响软件的可移植性。

图1-1 软件工程项目目标之间的相互关系

主要软件工程项目目标之间的相互关系如图1-1所示。

其中:易于维护和高可靠性之间、低开发成本与按时交付之间为互补关系;低开发成本和易于维护之间、低开发成本和高可靠性之间、低开发成本和高性能之间、高可靠性和高性能之间、高性能和按时交付之间为互斥关系。

3.软件工程面临的问题

软件工程面临的问题主要体现在软件费用、软件可靠性、软件维护、软件生产率和软件重用等方面。

(1)软件费用

软件是知识高度密集的技术的综合产物,软件人力资源不能适应软件迅速增长的社会要求,因此软件费用上升是必然趋势。

(2)软件可靠性

软件可靠性是指软件系统在既定的环境条件下运行并实现所期望的结果的能力。在软件开发中,通常要花费40%的代价进行测试和排错,为了提高软件可靠性,就要付出足够的代价。

(3)软件维护

目前软件维护费用占了整个软件系统费用的2/3,而软件开发费用只占整个软件系统费用的1/3。这是因为已经运行的软件还需排除隐含的错误,后期还可能新增加功能,所以维护工作非常困难,效率较低。因此,如何提高软件的可维护性,减少软件维护的工作量,也是软件工程面临的主要问题之一。

(4)软件生产率

计算机的广泛应用使得软件的需求量大幅度上升,而软件的生产又处于手工开发的状态,软件生产率低下,所以,如何提高软件生产率是软件工程又一重要问题。

(5)软件重用

提高软件的重用性对提高软件生产率、降低软件成本有着重要意义。当前的软件开发存在着大量重复的劳动,耗费了不少人力资源。软件重用有各种级别,软件规格说明、软件模块、软件代码、软件文档等都可以是软件重用的单位。软件重用是软件工程中一个重要的研究课题。

1.1.3 软件的生存期

软件生存期概念的出现可以帮助我们较为全面地认识软件开发。在1988年制定和公布的国家标准GB8566—88《计算机软件开发规范》中,将软件生存期划分为八个阶段,即可行性研究和计划、需求分析、概要设计、详细设计、实现、组装测试、确认测试、使用和维护。该标准为每个阶段规定了任务、实施步骤、实施要求以及完成的标志。将软件生存期划分为这八个阶段大致符合并满足瀑布模型。

20世纪90年代初提出了软件工程过程的概念。软件工程过程规定了获取、供应、开发、运行和维护软件时所要实施的过程、活动和任务。其目的是为各种人员提供一个公共的框架,以便用相同的语言进行交流。这个框架由几个重要的过程组成,这些主要过程含有用来获取、供应、开发、操作和维护软件所用的基本的、一致的要求。该框架还可以用来控制和管理软件过程,各种组织和开发机构可以根据具体情况进行选择和剪裁,可在一个机构的内部或外部实施。

1995年国际标准化组织在此基础上对生存期过程做了调整,公布了新的国际标准,即ISO/IEC 12207《信息技术——软件生存期过程》。该标准全面、系统地阐述了软件生存期的过程、活动和任务。该标准定义的17个过程分别属于主要过程、支持过程和组织过程,如图1-2所示。

图1-2 ISO/IEC 12207信息技术——软件生存期过程