首页管理学管理工程医院信息系统的建设与应用 06 第六章 信息系统的测试.ppt

06 第六章 信息系统的测试.ppt

页数:105页文件大小:1,000.5 KB来源: 医院信息系统的建设与应用ppt课件

本课件围绕系统质量展开:先确立测试的概念、目标与原则,比较人工与机器测试,讲解白盒的逻辑覆盖、循环覆盖与黑盒的等价类划分、边界值分析;随后按单元测试、组装测试、确认测试、系统测试推进,并介绍调试方法与测试工具。

第六章信息系统的测试封面,列出测试概述、测试方法、测试过程和步骤与软件测试工具四节内容
信息系统测试的重要性:其重要性表现在它是保证系统质量和可靠性的关键步骤,是对系统开发过程中的系统分析、系统设计和实施的最后复查
信息系统测试概述导览,列出测试的基本概念目标原则和对象与信息流两个要点
查看本课件的文字版(共 105 页,供检索与复制)

第1页:第六章信息系统的测试封面

第六章信息系统的测试第一节信息系统测试概述第二节测试方法第三节测试过程和步骤第四节软件测试工具

第2页:信息系统测试的重要性

信息系统测试是信息系统开发过程中非常重要而漫长的阶段。其重要性表现在它是保证系统质量和可靠性的关键步骤,是对系统开发过程中的系统分析、系统设计和实施的最后复查。

本章重点讲述信息系统测试的基本概念、测试目标、测试过程和测试步骤,讨论测试的关键技术和调试技术以及如何设计测试用例和组织实施测试活动。

第3页:信息系统测试概述(本节内容)

本节内容:1、测试的基本概念、目标和原则2、测试对象与测试信息流第一节信息系统测试概述

第4页:测试的基本概念和目标

1、测试的基本概念、目标和原则(1)测试的基本概念和目标测试是为了发现错误而执行程序的过程。好的测试方案是能够发现迄今为止尚未发现的错误的测试方案。

成功的测试是发现了至今尚未发现的错误的测试。总之,测试的目标就是希望能以最少的人力和时间发现潜在的各种错误和缺陷。

从上述的目标可以归纳出测试的定义是“为了发现错误而执行程序的过程”。

第5页:测试的原则

(2)测试的原则①应尽早并不断地进行测试。②测试工作应避免由原开发软件的人或小组来承担(单元测试除外)。

③在设计测试方案时,不仅要确定输入数据,而且还要根据系统的功能确定输出结果。④在设计测试用例时,不仅要包括合理、有效的输入条件,也要包含不合理、失效的输入条件。

⑤在测试程序时,不仅要检测程序是否做了该做的事,还要检测程序是否做了不该做的事。⑥充分重视测试中的群集现象。

⑦严格按照测试计划来进行,避免测试的随意性。⑧妥善保存测试计划、测试用例,作为软件文档的组成部分,为维护提供方便。

第6页:测试的对象

2、测试对象与测试信息流(1)测试的对象在信息系统中,作为整体,不仅要对硬件系统、网络系统进行测试,还需要对软件系统进行测试。由于系统的开发任务很大程度上是软件开发,因此测试的对象除了硬件部分、网络部分以外,更主要的是软件。

在软件测试时,应该把各阶段的文档加上源程序进行测试,即软件测试对象=文档+程序。所以测试的对象主要是软件(在后面所说的测试中,非特别注明,通常是指软件测试)。

第7页:测试信息流

(2)测试信息流由于测试的对象主要是软件,所以在测试阶段的信息流主要分析软件方面的信息流程,其流程如图6-1所示。测试软件配置测试配置测试结果评价错误调试正确可能性模型出错率数据可靠性预测预期结果图6-1测试阶段的信息流

第8页:软件配置与测试配置

输入信息分成软件配置和测试配置两类。软件配置由系统分析说明书、系统设计说明书和源程序等组成。

测试配置由测试计划、测试方案组成。测试方案不仅仅是测试时使用的输入数据(称为测试用例),还包括每组输入数据要检测的功能和预期的输出结果。

在软件配置包含所有文档的情况下,可以把测试配置看成是软件配置的一个子集。测试人员根据提交的软什配置和测试配置进行测试,每组输入数据都有对应的测试结果,测试结果和预期的输出结果相比较,如果不一致,说明程序有错,此时需要调试定位错误并改正。

调试与测试不同,调试需要程序的编写人员来完成。

第9页:测试结果的收集与评价

通过对测试结果的收集和评价,开发质量和可靠性的一些定性指标就可以逐步地确定下来。显然,在测试过程中如果经常出现严重错误,则说明开发的质量和可靠性一定不高,更需要多加测试。

反之,如果软件的功能看起来完成得很正常,遇到的错误也比较容易修改,则存在着两种可能性:一是软件的质量和可靠性是令人满意的,二是所做的测试还不够全面,不够充分,未能发现隐藏着的错误。如果是后一种情况,则很有可能是测试配置选择不恰当,导致问题不能够充分暴露出来,这些潜伏着的问题最终会被发现,如果在维护阶段来纠正,其代价将比开发时期高出许多倍。

对测试结果的积累可用于构造可靠性模型,据此可估计出错的情况,并对软件的可靠性进行预测。

第10页:黑盒测试与白盒测试

信息系统测试与工程产品的测试方法一样,常用的有两种方法。一种是不了解产品的内部结构,但对具体的功能有要求,可通过检测每一项功能是否能正常使用来说明产品是否合格。

另一种是知道产品的内部过程(性能),通过检测产品的内部动作是否按照说明书的规定正常运行来考察产品是否合格。前一种方法被称为黑盒测试(功能测试),后一种方法被称为白盒测试(结构测试)。

第二节测试方法

第11页:测试方法(本节内容)

本节内容

  • 1、软件测试方法
  • 2、软件测试的穷举问题
  • 3、白盒测试的测试用例设计
  • 4、黑盒测试的测试用例设计

第12页:软件测试的主要方法

本页为软件测试的主要方法图,源文件仅提取到图中标注文字。l、软件测试方法对软件进行测试的主要方法如图6-2所示。人工测试个人复查走查会查机器测试黑盒测试白盒测试软件测试图6-2软件测试的主要方法

第13页:人工测试与代码复审

(1)人工测试人工测试又称为代码复审。通过阅读程序来查找错误。

其内容包括:检查代码和设计是否一致;检查代码逻辑表达是否正确和完整;

检查代码结构是否合理,等等。主要有以下三种方法:①个人复查②走查③会审

第14页:个人复查、走查与会审

①个人复查:指程序员本人对程序进行检查,发现程序中的错误。②走查:通常由3~5人组成测试小组。

测试人员是没有参加该项目开发的有经验的程序设计员。③会审:测试人员的构成与走查类似,要求测试人员在会审之前应充分阅读有关的资料(如系统分析、系统设计说明书、程序设计说明书、源程序等),根据经验列出尽可能多的典型错误,然后把它们制成表格。

根据这些错误清单(也叫检查表),提出一些问题,供在会审时使用。

第15页:机器测试

(2)机器测试机器测试指在计算机上直接用测试用例运行被测程序,从而发现程序错误。机器测试分为黑盒测试和白盒测试两种。

第16页:黑盒测试要发现的错误

①黑盒测试也称为功能测试,将软件看成黑盒子,在完全不考虑软件的内部结构和特性的情况下,测试软件的外部特性。根据系统分析说明书设计测试用例,通过输入和输出的特性检测是否满足指定的功能。所以测试只作用于程序的接口处,进行黑盒测试主要是为了发现以下几类错误:A.是否有错误的功能或遗漏的功能?

  • B.界面是否有误?输入是否能够正确接受?输出是否正确?
  • C.是否有数据结构或外部数据库访问错误?
  • D.性能是否能够接受?
  • E.是否有初始化或终止性错误?

第17页:白盒测试的原则

②白盒测试也称为结构测试。将软件看成透明的白盒。根据程序的内部结构和逻辑来设计测试用例,对程序的路径和过程进行测试,检查是否满足设计的需要。其原则是

  • A.程序模块中的所有独立路径至少执行一次
  • B.在所有的逻辑判断中,取“真”和取“假”的两种情况至少都能执行一次
  • C.每个循环都应在边界条件和一般条件下各执行一次
  • D.测试程序内部数据结构的有效性,等等

第18页:软件测试的穷举问题

2、软件测试的穷举问题测试中的穷举测试是指对被测对象进行包含所有可能情况的测试。如果能进行穷举测试,则通过穷举测试的软件就能保证完全正确。

但这现实吗?我们来考察机器测试的两种方法。根据白盒测试的原则,从表面上看,只要针对程序的每一条逻辑路径设计测试用例,仔细检查分支和循环的情况,就可以得到完全正确的程序。

也就是说,只要进行路径上的穷举测试,就能保证程序完全正确,但这是不现实的事情。

第19页:穷举路径测试示例

例如,给出一个如图6-3所示的流程图,它大致对应100行源代码的Pascal程序,其中惟一一个循环体最多循环20遍,这段程序有5条路径,则共有520(≈1014)条路径。如果要对它进行路径上的穷举测试,假设有这么一组测试用例能对每条路径进行测试,运行每个测试用例的时间为1毫秒,则对图6-3所示的所有路径进行测试,总共需要花费3170年,这还不包括对测试结果进行分析所花费的时间。

第20页:白盒测试穷举示例图

图6-3白盒测试中穷举测试的示例

第21页:穷举测试的不可行性

无论是路径上的穷举测试,还是输入量的穷举测试,在实际的测试过程中都是不可行的。因此,只能在一定的开发周期内和在一定的经济条件下,通过精心选择有代表性的一些测试用例尽可能多地发现错误。

也就是说,测试不能证明所开发的系统没有错误,只能通过测试来提商系统的可靠性和开发质量。这就要求我们在设计测试方案时,能够用较少的测试用例发现尽量多的问题,以提高测试效率。

在设计测试方案中,设计测试用例的输入数据(即测试用例)是非常重要的,也是最困难的。因此,下面介绍一些常用的设计测试数据的技术。

第22页:白盒测试的用例设计

3、白盒测试的测试用例设计白盒测试是对软件的过程性细节做详细的检查。通过对程序内部结构和逻辑的分析来设计测试用例。

适合于白盒测试的设计技术主要有:逻辑覆盖法、基本路径测试等。

第23页:逻辑覆盖法

逻辑覆盖(logiccoverage)是以程序内部的逻辑结构为基础的测试技术。它考虑的是测试数据执行(覆盖)程序的逻辑程度。

由于穷举测试是不现实的。因此,只希望覆盖的程度更高些。

根据覆盖情况的不同,逻辑覆盖可分为:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、多重覆盖、路径覆盖。

第24页:语句覆盖与条件覆盖

  • (1)语句覆盖语句覆盖(statementcoverage)就是设计若干个检测用例,使得程序中的每条语句至少被执行一次。语句覆盖对程序的逻辑覆盖程度很少,因此语句覆盖有可能发现不了判断条件中算法出现的错误
  • (3)条件覆盖条件覆盖(conditioncoverage)就是设计若干个测试用例,使得被测程序中每个判断的每个条件的所有可能情况都至少执行一次
  • (2)判定覆盖判定覆盖(decisioncoverage)也称为分支覆盖,就是设计若干个检测用例,使得程序中的每个判断的取真分支和取假分支至少执行一次。判断覆盖比语句覆盖的程度稍强,因为如果通过了每个分支的测试,则各语句也都执行了。但仍有不足。所以,判断覆盖还不能保证一定能查出判断条件中的错误。因此,需要更强的逻辑覆盖来检查内部条件的错误

第25页:判定/条件覆盖

  • (4)判定/条件覆盖判定/条件覆盖(decision/conditioncoverage)是既要满足判断覆盖的要求,又要满足条件覆盖的要求。也就是设计若干个测试用例,使得程序中的每个判断的取真分支和取假分支至少执行一次,而且每个条件的所有可能情况都至少执行一次。因此,有时判定/条件覆盖并不比条件覆盖更强,逻辑表达式的错误也不一定能检查出来
  • (5)多重覆盖多重覆盖(multjobcoverage)就是设计多个测试用例,使得各判断表达式中条件的各种组合至少执行一次。很显然,多重覆盖包含了条件覆盖、判定覆盖和判定/条件覆盖,是前面几种覆盖标准中最强的
  • (6)路径覆盖路径覆盖就是设计足够多的测试示例,使被测程序中的所有可能路径至少执行一次。路径覆盖保证了程序中的所有路径都至少执行一次,是一种比较全的逻辑覆盖标准。但它没有检查判断表达式中条件的各种组合情况,通常把路径覆盖和多重覆盖结合起来就可以得到查错能力很强的测试用例
  • (7)循环覆盖

第26页:循环覆盖与循环类型

上面介绍的只是语句、分支、条件以及它们的组合情况,而循环也是大多数算法的基础。对循环的测试主要检查循环构造的有效性。

循环分为简单循环(simpleloops)、串联循环(concatenatedloops)、嵌套循环(nestedloops)和非结构循环(unstructuredloops)4种类型,如图6-4所示。对于循环次数为n的简单循环。

可以采用下列措施进行测试:跳过整个循环。循环次数为l,2,n-1,n,n+l。

任取循环次数为m,其中m<n。

第27页:循环的4种类型

  • (a)
  • (b)
  • (c)
  • (d)
  • (e)简单循环串联循环嵌套循环非结构循环图6-4循环的4种类型

第28页:嵌套循环的测试方法

对于嵌套循环,如果采用简单循环的测试方法,则测试次数将会成几何级数增长。可以采用以下方法进行测试:①从最内层循环开始测试,对所有外层循环都取最小值,内层循环按简单循环的测试方法进行。

②由里向外,一层层进行测试,凡是外层的循环都取最小值,该层循环嵌套的那些循环取一些典型的值。③直至所有循环测试完毕。

对于串联循环的测试可分成两种情况:如果两个循环是独立的,采用简单循环的测试方法;反之,如果两个循环不是独立的,则需要用嵌套循环的测试方法来测试。

对于非结构循环,一般先把程序结构化之后再进行测试。

第29页:黑盒测试的用例设计

4、黑盒测试的测试用例设计黑盒测试是在测试时把软件看成一个黑盒子,完全不考虑程序的内部结构及其逻辑,重点考察程序功能是否与需求说明书的要求一致。适合于黑盒测试的设计技术主要有:等价类划分、边界值分析、错误推测法、因果图、功能图等。

下面重点介绍等价类划分、边界值分析这两种测试技术。

第30页:等价类划分

(1)等价类划分等价类划分是比较典型的黑盒测试技术。等价类划分技术的主要思想就是程序的输入数据都可以按照程序说明划分为若干个等价类。

每一个等价类对于输入条件可划分为有效的输入和无效的输入。然后再对每一个有效的等价类和无效的等价类设计测试用例。

如果用某个等价类的一组测试数据进行测试时没有发现错误,则说明在同一等价类中的其他输入数据也一样查不出问题;反之,如果用某个等价类的测试数据进行测试检查出错误,则说明用该等价类的其他输入数据进行测试也一样会检测出错误。

所以,在测试时,只需从每个等价类中取一组输入数据进行测试即可。

第31页:等价类的划分原则

使用等价类划分技术设计测试方案时,首先需要根据程序的功能说明划分出输入数据的有效等价类和无效等价类,然后为每个等价类设计测试用例。在确定输入数据的等价类时常常还需要分析输出数据的等价类,以便根据输出数据的等价类来推导出对应的测试用例。

在划分等价类时,可以按以下原则进行:①如果规定了输入数据的范围,则可划分为一个有效等价类和两个无效等价类。②如果规定了输入数据的个数,则可划分为一个有效等价类和两个无效等价类。

③如果规定了输入数据为一组可能的值,而且程序对每个输入值分别进行处理,这时需要为每个输入数据确定一个有效等价类,把除此之外的所有值确定为一个无效等价类。④如何规定了输入数据必须遵守的规则,则可以划分出一个有效等价类(遵守规则的输入数据)和若干个无效等价类(从不同角度设计得到违反规则的情况)。

⑤如果在划分的某等价类中各值在程序中的处理方式不同,则需要将该等价类进一步划分成更小的等价类。

第32页:建立等价类表

以上列出的原则只是实际情况中很小的一部分。为了正确划分等价类,需要正确分析被测程序的功能。

划分等价类的方法是根据每个输入条件(通常是规范说明中的一句话或一个短语)列出两个或更多的等价类,将其填入表6-1中,建立等价类表。

第33页:根据等价类表设计用例

根据等价类表设计测试用例。主要按下面两个步骤:①设计新的测试用例,使其尽可能多的覆盖未被覆盖的有效等价类,重复这一步骤直至所有有效等价类都被覆盖。

②设计新的测试用例。使其覆盖一个而且仅此一个未被覆盖的无效等价类,重复这一步骤直至所有无效等价类都被覆盖。

第34页:边界值分析

(2)边界值分析边界值分析也是黑盒测试技术,是等价类划分的一种补充。通常,程序在处理边界时容易发生错误,而等价类划分技术是在等价类中随便选择一组数据作为代表,没有考虑边界情况。

边界值分析是指对每个等价类的各边界作为测试目标,使得测试数据等于、刚刚小于、刚刚大于等价类的边界值。边界值分析技术在设计测试用例的原则与等价类划分技术的许多方面类似。

需要注意的是边界值分析技术不仅注意输入条件的边值,还应根据输出条件的边值设计测试用例

第35页:边界值用例的选择原则

选择测试用例有以下原则:①如果规定了输入数据的范围,则应取等于该范围的边界值,以及刚刚超过这个范围的边界值的测试数据。②如果规定了输入数据的个数,则应取最大个数、最小个数、比最大个数多1和比最小个数小1的数作为测试数据。

③如果程序中使用了内部数据结构,则需要选择该数据结构的边界值作为测试用例。④根据规格说明的每个输出条件可以使用第①条原则。

⑤根据规格说明的每个输出条件也可以使用第②条原则。

第36页:边界值与等价类的区别

从这里可以看出,边界值分析与等价类划分技术最大的区别是边界值分析技术在设计测试用例时,重点检测等价类边界和边界附近的情况,而等价类划分技术只是在每个等价类中随便选择一组测试数据。在设计测试方案中,通常会把逻辑覆盖、等价类划分和边界值分析等方法结合起来,这样既可以检测设计的内部要求,又可以检测设计的接口要求。

第37页:测试工作的提前进行

由于信息系统的构成可能比较复杂,所涉及的问题比较多,为了保证整个开发任务的按期完成,测试工作不一定只在测试阶段才进行,能提前的尽量提前进行。而且可按功能分别进行。

例如,硬件、网络等设备到货后应进行初验,安装后再进行详细的测试,最后结合应用软件等对整个信息系统进行测试。本节针对信息系统中的硬件系统、网络系统和软件系统中的测试步骤和测试内容进行介绍,重点为软件测试。

第三节测试过程和步骤

第38页:测试过程和步骤(本节内容)

本节内容:1、测试过程

  • 2、测试步骤
  • 3、单元测试
  • 4、组装测试
  • 5、确认测试
  • 6、系统测试
  • 7、调试

第39页:测试过程与基本活动

l、测试过程测试是开发过程中一个独立且非常重要的阶段,也是保证开发质量的重要手段之一。测试过程基本上与开发过程平行进行。在测试过程中,需要对整个测试过程进行有效的管理,保证测试质量和测试效率。一个规范化的测试过程通常包括以下基本的测试活动

  • A.拟定测试计划
  • B.编制测试大纲
  • C.设计和生成测试用例
  • D.实施测试
  • E.生成测试报告

第40页:拟定测试计划

(1)拟定测试计划在制定测试计划时,要充分考虑整个项目的开发时间和开发进度以及一些人为因素和客观条件等,使得测试计划是可行的。测试计划的内容主要有:测试的内容、进度安排、测试所需的环境和条什(包括设备、被测项目、人员等)、测试培训安排,等等。

第41页:编制测试大纲

(2)编制测试大纲测试大纲是测试的依据。它明确详尽地规定了在测试中针对系统的每一项功能或特性所必须完成的基本测试项目和测试完成的标准。

无论是自动测试还是手动测试,都必须满足测试大纲的要求。

第42页:设计和生成测试用例

(3)设计和生成测试用例根据测试大纲,设计和生成测试用例。在设计测试用例时,可综合利用前面介绍的测试用例设计技术,产生测试设计说明文档,其内容主要有:被测项目、输入数据、测试过程、预期输出结果,等等。

第43页:实施测试

(4)实施测试测试的实施阶段是由一系列的测试周期组成的。在每个测试周期中,测试人员和开发人员将依据预先编制好的测试大纲和准备好的测试用例,对被测软件或设备进行完整的测试。

第44页:生成测试报告

(5)生成测试报告测试完成后,要形成相应的测试报告,主要对测试进行概要说明,列出测试的结论,指出缺陷和错误,另外,给出一些建议,如:可采用的修改方法,各项修改预计的工作量及修改的负责人等。

第45页:测试与纠错的反复进行

通常,测试与纠错是反复交替进行的。如果使用专业测试人员,测试与纠错可以平行进行.从而节约总的开发时间。

另外,由于专业测试人员有丰富的测试经验,采用系统化的测试方法并能全时地投入,而且独立于开发人员的思维,使得他们能够更有效地发现许多单靠开发人员很难发现的错误和问题。

第46页:测试步骤

2、测试步骤由于每种测试所花费的成本不同,如果测试步骤安排得不合理,将造成为了寻找错误原因而浪费大量的时间以及重复测试。因此,合理安排测试步骤对于提高测试效率和降低测试成本有很大的作用。

信息系统测试分别按硬件系统、网络系统和软件系统进行测试,最后对整个系统进行总的综合测试。测试的步骤如图6-5所示。

第47页:

第48页:硬件测试

(1)硬件测试在进行信息系统开发中,通常需要根据项目的情况选购硬件设备。在设备到货后,应在各个相关厂商配合下进行初验测试,初验通过后将与软件、网络等一起进行系统测试。

初验测试所做的工作主要有:①配置检测②硬件设备的外观检查③硬件测试通过以上测试,要求形成相应的硬件测试报告,在测试报告中包含测试步骤、测试过程和测试的结论等。

第49页:网络测试

(2)网络测试如果信息系统不是单机,需要在局域网或广域网运行,按合同选购网络设备。在网络设备到货后。

应在各个相关厂商配合下进行初验测试。初验通过后将与软件、硬件等一起进行系统测试。

初验所做的工作主要有:①网络设备的外观检查②硬件测试③网络连通测试通过以上测试,要求形成相应的网络测试报告,在测试报告中包含测试步骤、测试过程和测试的结论等。

第50页:软件测试的四步

(3)软件测试软件测试实际上分成四步:单元测试、组装测试、确认测试和系统测试,它们按顺序进行。首先是单元测试(unittesting),对源程序中的每一个程序单元进行测试,验证每个模块是否满足系统设计说明书的要求。

组装测试(integrationtesting)是将已测试过的模块组合成子系统,重点测试各模块之间的接口和联系。确认测试(validationtesting)是对整个软件进行验收,根据系统分析说明书来考察软件是否满足要求。

系统测试(systemtesting)是将软件、硬件、网络等系统的各个部分连接起来,对整个系统进行总的功能、性能等方面的测试。

第51页:单元测试

3、单元测试单元测试也称为模块测试。在模块编写完成且无编译错误后就可以进行。

可以选用人工测试或机器测试,当用机器测试时,一般采用白盒测试法,多个模块可以同时进行。

第52页:单元测试的五个特征

A.单元测试的内容在单元测试中,主要从模块的五个特征进行检查:模块接口、局部数据结构、重要的执行路径、出错处理和边界条件。

第53页:模块接口的测试要点

(1)模块接口如果所测模块的数据流不能正确的输入、输出,则根本就无法进行其他测试。所以在单元测试中要考察模块的接口。

Myers提出了接口测试要点:①用被测模块的输入参数和形式参数在个数、属性、单位上是否一致;②调用其他模块时的实际参数和被调模块的形式参数在个数、属性、单位上是否一致;

③调用标准函数时所用的参数在属性、数目和顺序上是否正确;④全局变量在各模块中的定义和用法是否一致;

⑤输入是否仅改变了形式参数;

第54页:输入输出的检查要点

如果模块完成外部的输入或输出时,还应该再检查以下要点:开/关闭的语句是否正确;规定的I/O格式是否与输入输出语句一致;

在使用文件之前是否已经打开文件或使用文件完毕后是否已关闭文件;输入输出的错误是否检查并处理;

输出的提示信息是否有误。

第55页:局部数据结构

(2)局部数据结构在单元测试中,局部数据结构出错是较常见的错误,在测试时应重点考虑以下因素:变量的说明是否合适;是否使用了尚未赋值或尚未初始化的变量;

变量的初始值或默认值是否正确:变量名是否有错(例如:拼写错);是否出现上溢、下溢或地址异常的错误。

如果有可能,还应确定全局变量对模块的影响。

第56页:重要的执行路径

(3)重要的执行路径在单元测试中,对路径的测试是最基本的任务。由于不能进行穷举测试,需要精心设计测试用例来发现是否有计算、比较或控制流等方面的错误。

计算方面的错误主要有:算术运算的优先次序不正确或理解错误;精度不够;

运算对象的类型彼此不相容;算法错;

表达式的符号表示不正确等。比较和控制流是紧密结合的,一般是通过比较来发生控制流的改变。

关于这方面的错误主要有:本应相等的量由于精度造成不相等;不同类型进行比较;

逻辑运算符不正确或优先次序错误;循环终止不正确(如多循环一次或少循环一次)、死循环;

不恰当地修改循环变量;当遇到分支循环时,出口错误等。

第57页:出错处理

(4)出错处理好的设计应该能预测到出错的条件并且有对出错处理的路径。虽然计算机可以显示出错信息的内容,但仍需要程序员对出错进行处理,保证其逻辑的正确性,便于用户维护。

对出错的测试应该着重考虑这些常见错误;错误的描述难于理解;

错误提示与实际错误不相符;出错的提示信息不足以确定错误或确定造成错误的原因;

在对错误进行处理之前,系统已经对错误条件干预等。

第58页:边界条件

(5)边界条件边界条件的测试是单元测试的最后工作,也是非常重要的工作。软件容易在边界出现错误,如一个n维数组,在处理数组第n个下标时常常有错误。

要仔细选择测试用例,重点考察数据流、控制流在刚好等于、大于或小于最大值或最小值的情况。模块测试通常由程序员本人来完成。

但项目负责人应该注意测试结果,将这些测试资料妥善保存,为后续的测试工作打下良好的基础。

第59页:驱动模块与桩模块

  • B.单元测试的方法由于模块不是独立运行的程序,各模块之间存在联系,即存在调用与被调用的关系。在对每个模块进行测试时,需要开发两种模块
  • (1)驱动模块(driver):相当于一个主程序,接收测试用例的数据,将这些数据送到被测模块,输出测试结果
  • (2)桩模块(stub):也称为存根模块,桩模块用来代替被测模块中所调用的子模块,其内可进行少量的数据处理,目的是为了检验入口,输出调用和返回的信息

第60页:组装测试

4、组装测试组装测试也称为集成测试。即使所有模块都通过了测试,但在组装之后,仍可能会出现问题:穿过模块的数据被丢失:一个模块的功能对其他模块造成有害的影响;

各个模块组合起来后没有达到预期功能;全局数据结构出现问题;

另外单个模块的误差可以接受,但模块组合后可能会出现误差累积,最后到不能接受的程度,所以需要组装测试。

第61页:非增量式与增量式集成

通常,组装测试有两种方法:一种是分别测试各个模块。再把这些模块组合起来进行整体测试,这种方法称为非增量式集成。

另一种是把下一个要测试的模块组合到己测试好的模块中,测试完后再将下一个需测试的模块组合进来测试,逐步把所有模块组合在一起,并完成测试。该方法称为增量式集成。

第62页:自顶向下的增量方式

增量式测试技术有自顶向下的增量方式和自底向上的增量方式两种方法。(1)自顶向下的增量方式M1M2M3M7M4M6M5图6-6自顶向下的组合示例

第63页:先深度与先宽度

自顶向下的增量方式是模块按程序的控制结构,从上到下的组合方式。再增加测试模块时有先深度后宽度和先宽度后深度两种次序。

如图6-6所示的自顶向下组合示例中,先深度后宽度的方法是把程序结构中的一条主路径上的模块相组合,测试顺序可以是M1→M2→M5→M6→M3→M7→M4。先宽度后深度的方法是把模块按层进行组合,测试顺序是M1→M2→M3→M4→M5→M6→M7。

第64页:组装过程的步骤

组装过程可分成以下步骤:①用主模块作为驱动模块,与之直接相连的模块用桩模块代替。②根据所选的测试次序,用下一个模块替换所用的桩模块;

而新引入模块的直接下属模块用桩模块代替,构成新的测试对象。③结合一个模块,测试一个。

为了避免引入新模块,产生新问题,需要进行回归测试,即重复部分或全部已经进行过的测试。④模块是否已经组合到系统中,并完成测试,如果没有,则返回到(2),重复进行;

是则停止测试。

第65页:自顶向下方式的特点

自顶向下的增量方式可以较早地验证控制和判断点,如果出现问题能够及时纠正。在测试时不需要编写驱动模块,但需要桩模块。

另外,如果高层模块对下层模块依赖性很大,需要返回大量信息,在用桩模块代替时,桩模块的编写就复杂,必然会增加开销。这时可以用下面介绍的自底向上的增量方式。

第66页:自底向上的增量方式

(2)自底向上的增量方式自底向上的增量方式是从最底层的功能模块开始,边组合边测试,从下向上地完成整个程序结构的测试。其步骤可以概括为:①将最底层的模块组合成能完成某种特定功能的模块簇,为每个模块簇设计驱动程序,用驱动程序来控制并进行测试。

②按从下向上的方向,刚实际模块替换相对应的驱动程序,组成新的模块簇,再为该模块簇设计驱动程序,用新的驱动程序进行控制和测试。③所有模块是否已经组合到系统中,并完成测试,如果没有,则返回到(2),重复进行,是则停止测试。

第67页:自底向上方式的特点

在单元测试的基础上,从最底层模块开始,按功能组合模块,从下到上的进行测试,逐步完成整个软件结构的测试。自底向上的增量方式可以较早地发现底层关键性模块出现的错误。

在测试时不需要编写桩模块,但需要驱动模块。另外,对程序中的主要控制错误发现较晚。

组装测试的方法选择取决于软件的特点和进度安排。在工程中,通常将这两种方法结合起来使用,即对位于软件结构中较上层的使用自顶向下的方法,而对于较底层的使用自底向上的方法。

第68页:确认测试

5、确认测试经过组装测试之后,软件就被集成起来,接口方面的问题已排出,就可以进入软件测试的最后一个环节——确认测试。确认测试的任务是进一步验证软件的有效性,也就是说,检查软件的功能和性能是否与用户的要求一样。

系统分析说明书描述了用户对软件的要求,所以是软件有效性验证的标准,也是确认测试的基础。

第69页:确认测试的步骤

确认测试的步骤如图6-7所示。有效性测试软件配置审查管理机构认可专家鉴定已集成的软件测试人员测试用例测试计划用户文档开发文档源程序清单确认软件软件配置交付的软件图6-7确认测试的步骤

第70页:有效性测试

(1)有效性测试有效性测试就是在模拟环境下,通过黑盒测试检验所开发的软件是否与需求规格说明一致。为此,需要制定测试计划,规定要做的测试类型,设计测试用例,组织测试人员对已集成的软件进行测试。

在设计测试用例时,除了检测软件的功能和性能之外,还需要对软件的容错性、维护性等其他方面进行检测。测试人员可由开发商的内部人员组成,但最好是没有参加该项目的有经验的软件设计人员。

在所有测试用例完成之后,测试结果有两种情况:功能和性能等都满足需求,可以接受。发现测试结果与预期的不符,这时要列出缺陷清单。

在这个阶段才发现的严重错误一般很难在预定的时间内纠正,需要与用户协商,寻找妥善解决问题办法。

第71页:软件配置审查

(2)软件配置审查确认测试的另一个环节是软件配置的审查,主要是检查软件(源程序、目标程序)和文档(包括面向开发和用户)是否齐全以及分类是否有序。确保文档、资料的正确和完善,以便维护阶段使用。

第72页:验收测试

(3)验收测试在经过软件的有效性测试和软件配置复查后,就应该开始软件系统的验收测试。验收测试是以用户为主的测试。

软件开发人员和质量保证人员也应参加。在验收测试之前,需要对用户进行培训,以便熟悉该系统。

验收测试的测试用例由用户参与设计,主要验证软件的功能、性能、可移植性、兼容性、容错性等,测试时一般采用实际数据。

第73页:系统测试

6、系统测试系统测试是将已经确认的软件、计算机硬件、外设、网络等其他元素结合在一起,进行信息系统的各种组装测试和确认测试,其目的是通过与系统的需求相比较,发现所开发的系统与用户需求不符或矛盾的地方。系统测试是根据系统分析说明书来设计测试用例的。

第74页:恢复测试

(1)恢复测试(recoverytesting)恢复测试是检测系统的容错能力。检测方法是采用各种方法让系统出现故障。

检验系统是否按照要求能从故障中恢复过来,并在预定的时间内开始事务处理,而且不对系统造成任何损害。如果系统的恢复是自动的(由系统自动完成),需要验证重新初始化、检查点、数据恢复等是否正确。

如果恢复需要人工干预。就要对恢复的平均时间进行评估并判断它是否在允许的范围内。

第75页:安全性测试

(2)安全性测试(securitytesting)系统的安全性测试是检测系统的安全机制、保密措施是否完善且没有漏洞。主要是为了验证系统的防范能力。

测试的方法是测试人员模拟非法入侵者,采用各种方法冲破防线。例如,以系统的输入作为突破口,利用输入的容错性进行正面攻击;

故意使系统出错,利用系统恢复的过程.窃取口令或其他有用的信息;想法设法截取或破译口令;

利用浏览非保密数据,获取所需信息,等等。从理论上说,只要时间和资源允许,没有进入不了的系统。

所以,系统安全性设计准则是使非法入侵者所花费的代价比进入系统后所得到的好处要犬,此时非法入侵已无利可图。

第76页:强度测试

(3)强度测试(stresstesting)强度测试是对系统在异常情况下的承受能力的测试,是检查系统在极限状态下运行,性能下降的幅度是否在允许的范围内。因此,强度测试要求系统在非正常数量、频率或容量的情况下运行,例如,运行使系统处理超过设计能力的最大允许值的测试用例;

设计测试用例,使系统传输超过设计最大能力的数据,包括内存的写入和读出,外部设备等;对磁盘保留的数据,设计产生过渡搜索的测试用例;

等等。强度测试主要是为了发现在有效的输入数据中可能引起不稳定或不正确的数据组合。

第77页:性能测试

(4)性能测试(performancetesting)性能测试是检查系统是否满足系统分析说明书对性能的要求。特别是实时系统或嵌入式系统,即使软件的功能满足需求,但性能达不到要求也是不行的。

性能测试覆盖了软件测试的各阶段,而不是等到系统的各部分所有都组装之后,才确定系统的真正性能。通常与强度测试结合起来进行,并同时对软件、硬件进行测试。

软件方面主要从响应时间、处理速度、吞吐量、处理精度等方面来检测。

第78页:可靠性测试

(5)可靠性测试(reliabilitytesting)对于系统分析说明书中提出了可靠性要求时,要对系统的可靠性进行测试。通常使用以下几个指标来衡量系统的可靠性:平均失效间隔时间MTBF(meantimebetweenfailures)是否超过了规定的时限;

因故障而停机时间MTTR(meantimetorepairs)在一年中应不超过多少时间。

第79页:安装测试

(6)安装测试(installationtesting)在安装软件系统时,会有多种选择。安装测试就是为了检测在安装过程中是否有误、是否易操作等。

主要检测:系统的每一个部分是否齐全;硬件的配置是否合理;

安装中需要产生的文件和数据库是否已产生,其内容是否正确;等等。

第80页:测试与开发各阶段的关系

最后,再强调一下,信息系统的开发过程通常为系统分析、设计、编码实现等阶段。而每个阶段都有可能出现错误,测试过程正好与开发过程相反,其开发和测试的关系如图6-8所示。

单元测试主要是发现编码阶段的错误。组装测试主要发现设计阶段产生的错误,以此类推。

如果在确认测试中发现系统分析有错误,这就需要重新修改系统分析、设计和编码。这说明越早犯的错误要到最后才能发现,因此要重视开发的前期工作。

第81页:测试与开发阶段关系图

用户需求系统分析系统设计编码实现单元测试组装测试确认测试系统测试图6-8测试与开发各阶段的关系

第82页:调试的任务

7、调试测试的目的是为了发现尽可能多的错误,而对于所暴露的错误最终需要改正。调试的任务就是根据测试时所发现的错误,找出原因和具体的位置,并进行改正。

第83页:调试过程

(1)调试过程测试用例测试结果修正程序调试执行出现错误确定错误原因回归测试假设错误原因图6-9调试过程

第84页:调试方法

(2)调试方法无论哪种调试方法,其目的都是为了对错误进行定位。目前,常用的调试方法有如下几种:

第85页:试探法

①试探法调试人员分析错误的症状,猜测问题的所在位置,利用在程序中设置输出语句,分析寄存器、存储器的内容等手段来获得错误的线索,一步步地试探和分析找到错误所在。这种方法效率很低且缓慢,适合于结构比较简单的程序。

第86页:回溯法

②同溯法调试人员从发现错误症状的位置开始。人工沿着程序的控制流程往回跟踪程序代码,直到找出错误根源为止。

这种方法适合于小型程序,对于大规模程序,由于其需要回溯的路径太多而变得不可操作。

第87页:对分查找法

③对分查找法这种方法主要用来缩小错误的范围。如果已经知道程序中的变量在若干位置的预期正确取值,可以在这些位置上用赋值语句或输入语句,给这些变量以正确值,运行程序观察输出结果,如果没有发现问题,则说明从给的变量的正确值开始到输出结果之间的程序没有出错,问题可能在除此之外的程序中,否则错误就在所考察的这部分程序中。

对含有错误的程序段再使用这种方法,直到故障范围缩小到比较容易诊断为止。

第88页:归纳法

④归纳法归纳法就是从测试所暴露的错误出发,收集所有正确或不正确的数据,分析它们之间的关系,提出假想的错误原因,用这些数据来证明或反驳,从而查出错误所在。

第89页:演绎法

⑤演绎法根据测试结果,列出所有可能的错误原因。分析已有的数据,排除不可能和彼此矛盾的原因。

对余下的原因,选择可能性最大的,利用已有的数据完善该假设,使假设更具体。运用归纳法的第四步来证明假设的正确性。

第90页:调试工具

以上这些方法均可辅以调试工具。随着测试技术和软件开发环境的发展,可以提供功能越来越强的自动测试和调试工具,支持断点设置、单步运行和各种跟踪技术,为软件的调试提供了很大的方便。

但无论哪种工具都代替不了开发人员对整个文档和程序代码的仔细研究和认真审查所起的作用。

第91页:软件测试工具(本节内容)

本节内容:1、静态分析工具2、动态分析工具3、集成测试测试系统第四节软件测试工具

第92页:静态分析工具

1、静态分析工具静态分析工具不执行被测程序,它扫描程序代码,进行控制流分析、数据流分析、接口分析和表达式分析等,然后输出测试结果。根据程序设计语言的不同,相应的静态分忻工具也就不同。

目前,具备静态分析功能的软件测试工具有很多,如Purify、Logiscope、Macabe等。通常,它具有以下功能:

第93页:静态分析的功能

  • (1)完成编译时的语法检查和连接时的一致性检查
  • (2)检查模块接口、类型的一致性
  • (3)检查逻辑上可能有错误的结构
  • (4)变量、函数交叉引用关系分析
  • (5)检查被测程序违反编程标准的情况
  • (6)对程序的静态特性的统计功能

第94页:动态分析工具

2、动态分析工具动态分析工具就是通过选择适当的测试用例,运行测试程序,将测试结果和预期结果相比较,以发现错误。动态测试工具能使被测程序有控制的执行,监视和记录程序的运行情况。

通常的方法是在被测程序中插入探针,检测各语句、分支和路径的执行次数和运行结果等,以便统计各种覆盖情况。如果测试的覆盖率没有达到要求,则要设计新的测试用例来满足覆盖要求。

通过对测试结果的分析来发现错误。除了覆盖分析之外,也常分析程序对资源的占用情况;

优化程序;提高系统性能。

第95页:集成测试系统

3、集成测试系统目前,测试计划工具、测试设计工具、测试管理工具、静态分析工具、性能及网络负载测试工具等一系列测试工具已得到广泛的运用,而且还出现了将许多测试工具融为一体的集成化测试系统。

第96页:SQA Suite

(1)SQASuiteSQASuite是美商瑞理国际股份有限公司(RationalSoftwareCorp.)极具有特色的著名套装软件。它是针对Windows客户机/服务器环境中,用PowerBuilder、VisualBasic、SQLWindows、Delphi和Developer2000等第四代语言开发的应用而研制的。

目前占据着世界Windows自动测试市场65%的市场份额。SQLSuite的各组件(SQAManager、SQARobot、SQALoadTest)各司其职又紧密集成,有效地完成了整个测试的生命周期。

第97页:SQA Manager

①SQAManagerSQAManager是软件开发和测试的信息管理工具,在软件开发、测试到升级的整个过程中,它都可以对测试信息进行跟踪。利用SQAManager可以完成以下功能

  • A.制定测试计划
  • B.跟踪有关测试执行的信息
  • C.从发现到解决,对缺陷不断进行跟踪
  • D.利用报表对整个软件测试进行管理

第98页:SQA Robot

②SQARobot利用SQARobot能够创建、修改、运行自动测试程序,以确保软件在分发前达到要求的质量。该模块包含两种特殊技术:基于对象的录制技术和对象测试,以便对Windows应用程序进行对象级测试。

对象测试技术不仅使Robot能测试应用的GUI,还可以检测应用中对象的所有属性,包括手工不能测的不可视属性。例如,SQARobot可测试由Powerbuilder的DataWindow生成的对数据库的SQL调用。

第99页:SQA LoadTest

③SQALoadTestSQALoadTest是网络自动测试工具,对WindowsClient/Server应用进行加载(1oad)、强化(stress)和多用户测试。LoadTest可完成以下功能:

第100页:SQA LoadTest的功能

  • A.对TCP/IP、NetBIOS和IPX/SPX网络上的Client/Server应用进行加载、强化和多用户测试,确保应用的质量达到分发的水平
  • B.在WindowsNT、Windows95和Windows3.x平台上对32位和16位的应用进行跨Windows平台测试
  • C.测试任何与WindowsNT、Windows95、Windows3.x客户端相连接的服务器(包括UNIX、WindowsNT禾Il0S2)
  • D.无需编程,仅通过点击鼠标,即可生成Clinet/Server的多站点测试
  • E.通过在执行测试时增加测试站点来改变系统的加载量。F.在多台站点上同步运行复杂的多用户应用操作

第101页:SQA Suite的完整测试平台

总之,SQASuite提供了一个比较完整的测试平台,以支持软件测试的各种基本活动,包括测试计划与测试大纲的制定、回归测试的自动化、测试结果的分析比较、软件问题报告的生成与自动分发和控制等。对于许多应用软件的开发无疑是个有力的测试支持工具。

第102页:PureAtria的测试工具

(2)PureAtri的测试工具原PureAtria公司(现已经与美国Rational公司合并,改名为美国Ratioal公司)在20世纪90年代陆续推出了其系列产品——Pure,它们是在多种平台上测试C,C++和FORTRAN语言的测试工具。主要有Purify、PureCoverage、Quantify和PureLink等测试产品。

第103页:Purify与PureLink

①PurifyPurify主要针对C/C++程序,提供在程序执行期间检测到的各类错误。具有对多种常见的内存使用错误的检错能力和准确的定位。

这些内存错误包括:未初始化的局部变量、未申请的内存、使用已释放的内存、数组越界、内存丢失、文件描述问题、栈溢出问题和栈结构边界错误等。②PureLinkPureLink提供快速连接,减少测试期间连接编译被测程序的时间,提高了开发效率。

第104页:性能测试与覆盖统计工具

③QuantifyQuantify支持多线程应用程序性能测试,通过对被测程序运行情况的跟踪,发现应用程序在性能上的瓶颈,监视应用程序在性能上的变化。④PureCoveragePureCoverage是使用对象代码插入(objectcodeinsertion)技术对应用程序进行路径覆盖测试。

通过在应用、文件、函数库、函数、行或基本块的级别上浏览关键的覆盖域数据,找出未被测试的代码,防止代码未经测试就交给用户使用。

第105页:本章思考题

l、测试应遵循什么原则?为什么要遵循这些原则?

  • 2、软件测试的过程和步骤是什么?
  • 3、测试希望的结果是什么?
  • 4、测试与调试有什么区别?它们各有什么用途?
  • 5、什么是黑盒测试?测试的目的是什么?
  • 6、什么是白盒测试?测试的目的是什么?思考题
顶部目录