软件测试及软件质量控制.ppt_第1页
软件测试及软件质量控制.ppt_第2页
软件测试及软件质量控制.ppt_第3页
软件测试及软件质量控制.ppt_第4页
软件测试及软件质量控制.ppt_第5页
已阅读5页,还剩94页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、在软件系统开发过程中,软件测试起着重要的作用。虽然人们已经采取了各种措施来保证软件的质量,但是由于软件系统的客观复杂性,人们的主观理解不能完全符合客观实际,不能做到完美无缺,各个阶段的技术评审也不能无遗漏地发现和纠正所有的设计和分析错误。软件生命周期的每个阶段都不可避免地会出现错误,这些错误迟早会在软件生产和使用过程中暴露出来。软件工程实践的经验表明,软件发现得越晚,纠正这些错误的成本就越高。如果大部分软件错误在软件投入使用前没有被发现和纠正,人们将会付出更高的代价,并经常造成不良后果。广义地说,软件测试分散在软件生命周期的每个开发阶段。人们认识到软件测试是保证软件质量的主要手段,每个阶段的评

2、审和验证工作都是广义的测试工作。主要测试在编码和测试两个阶段进行。因此,狭义的软件测试就是程序测试。6.1软件测试的基本概念迈尔斯给出了软件工程领域公认的一些测试规则:(1)测试是为了发现程序中的错误而执行程序的过程;(2)一个好的测试方案很可能会发现到目前为止还没有发现的错误;(3)成功的测试是发现到目前为止还没有发现的错误。6.1软件测试的基本概念,这些规则实际上是软件测试的狭义概念,程序测试。狭义的软件测试:测试是执行程序以发现错误的过程。它是根据软件开发的每个阶段的描述和程序的内部结构,以及执行程序和使用这些测试用例发现错误的过程,精心设计的一批测试用例(带有输入数据和预期结果)。6.

3、1软件测试的基本概念。广义上的软件测试是指软件规划、软件系统分析、软件设计和软件编码的错误检查活动,包括代码执行和人工审查活动。测试的目的是找出软件生命周期各个阶段的错误,这有利于以后的修改和修正。然而,只有当测试本身不能纠正错误时,调试才能纠正错误。也就是说,错误的活动是测试;分析错误的性质和位置,调试是保证算法正确执行的纠错活动。软件测试和程序测试都是发现错误的活动,区别在于发现错误的范围不同。6.1软件测试的基本概念,由于测试的目的是暴露程序错误,从心理学的角度来看,设计者自己进行测试是不合适的,设计团队和测试团队应该分开组建,这有利于进行客观公正的软件测试。测试是有限的,因为通常的测试

4、过程不能穷尽一切,即使经过严格的测试,程序中仍然可能隐藏着未被发现的错误,这不能证明程序中没有错误。6.1软件测试的基本概念,因此,测试只能找出程序的错误,而测试不能证明程序是正确的。软件工程的所有其他阶段都是“建设性的”。软件工程师试图从抽象的概念中逐渐设计出具体的软件系统,而测试人员的工作表面上是“破坏性的”,试图证明软件包含错误并且不能按照预定的要求正确工作。任何比较方式都可以理解为测试验证。6.1.2软件测试的对象,软件测试应该贯穿软件生命周期的各个阶段,每个阶段的工作是相互联系、相互影响的,前一阶段出现的问题自然会影响下一阶段的工作。为了掌握每个环节的正确性,人们需要进行各种确认和验

5、证工作。软件验证是广义上的软件测试,它是一系列试图证明软件在给定外部环境中的逻辑正确性的活动和过程,如需求规范和程序的验证。6.1.2软件测试对象和程序的确认分为静态确认和动态确认。静态验证一般不在计算机上执行程序,而是通过程序正确性证明、静态分析或人工分析来确认程序的正确性;动态确认主要通过动态分析和动态测试来检查执行状态,确认程序是否有问题;6.1.2软件测试的对象,正确性证明,主要是试图绕过复杂的测试,直接证明程序的正确性。例如程序的输入和输出断言方法。假设程序段为S,其前一个断言为P,后一个断言为R。如果在执行S之前P为真,那么在执行S之后R也为真,那么S被证明是正确的,并被记录为PS

6、R。6.1.2软件测试的对象,任何程序都可以分为S1、S2和Sn节点,相应的断言是R1、R2和Rn。首先,R1是输入断言,R2是输出断言,这也是下一个输入断言,Rn是最后一个输出断言。我们总是可以一个接一个地证明S1、S2和Sn,从上到下或者从下到上证明程序的正确性。6.1.2软件验证是软件测试的对象,也属于广义的软件测试,它试图证明软件生命周期各阶段的逻辑协调性、完整性和正确性。包括系统分析师对用户需求和表达正确性的理解,设计者对需求规格说明、设计和表达、程序编码、运行软件程序时的输入、运行结果等的理解。运行结果是否与用户的预期结果一致等。这表明任何环节中的任何问题都可能在软件测试中表现出来

7、。6.1.3测试信息流,测试过程用数据流图表示,可用的测试信息流如图6-1所示。6.1.3测试信息流,1。测试过程需要三种类型的输入:(1)软件配置:包括软件开发文档(用户文档、需求规范、软件设计规范、源代码)、目标执行程序和数据结构;(2)测试配置:包括测试计划、测试用例、测试驱动程序等。事实上,在整个软件开发过程中,测试配置只是软件配置的一个子集;(3)测试工具:为了提高软件测试的效率,使用测试工具为测试工作服务;如:测试数据自动生成程序、静态分析程序、动态分析程序、测试结果分析程序和标准常规测试数据库。6.1.3测试信息流。测试后,分析所有测试结果,并将实际测试结果与预期结果进行比较。如

8、果发现有错误的数据,这意味着软件有错误,需要纠正。应进行调试以确定错误的位置和性质,纠正这些错误并纠正相关文件。更正的文档通常需要重新测试,直到它们通过测试。6.1.3测试信息流,通过收集和分析测试结果的相关数据,可以建立软件评估的可靠性模型。如果经常出现需要修改设计的严重错误,软件的质量和可靠性是有问题的,这也表明需要进一步的测试。相反,如果软件功能能够正确完成,并且错误易于修改,那么可能有两种评价:6.1.3测试信息流,一是软件质量和可靠性达到可接受的水平。另一个是测试不足以发现严重的软件错误。如果评估结果是没有发现错误,很可能测试的配置没有得到充分和仔细的考虑,并且软件中仍然存在潜在的错

9、误,因此在将来纠正这些错误将会花费很高的代价。6.1.3测试信息流,2。软件错误可以从不同的角度进行分类:(1)从错误对程序的影响程度来看:严重错误:严重影响程序的运行,甚至不运行;一般错误:它经常影响程序的运行,在特殊情况下表现正常;6.1.3测试信息流,小错误:程序在正常情况下可以运行,在特殊情况下性能异常;无影响错误:它不影响程序的运行。6.1.3测试信息流,(2)从开发过程的转换环节:构造错误:编码实现与设计不一致;设计错误:设计逻辑与描述不一致;手动错误:手册与用户要求不一致;需求错误:不符合用户的实际需求;配置错误:软件配置不符合实际环境。6.1.3测试信息流,(3)从测试结果的性

10、能上进行分类:1)功能错误:由于系统需求分析不完整造成的;2)结构错误:由总体设计错误造成的;3)工艺错误:由详细设计错误引起;4)数据错误:由软件编码或详细设计错误引起;5)编码错误:由软件编码引起的错误;6)其他错误:由文件和其他系统要素引起的错误;6.1.3测试信息流,6.1.4软件测试步骤与软件开发阶段的关系,软件测试一般分为四个步骤:(1)单元测试(也称模块测试):测试软件设计的基本单元程序模块的正确性。目的是找出每个模块中可能存在的各种错误。单元测试需要从程序的内部结构设计测试用例,多个模块可以并行独立测试;6.1.4软件测试步骤与软件开发阶段的关系,(2)集成测试(也称为组装测试

11、和联合测试):在单元测试的基础上,按照设计要求对所有模块进行集成,测试模块间的接口设计问题、模块间的相互影响、上层模块存在的各种错误以及整体设计中全局数据结构对系统的影响。6.1.4软件测试步骤与软件开发各阶段的关系,(3)确认测试(也称验收测试、有效性测试):主要检查软件的功能和性能是否符合规范的要求。(4)系统测试:将软件系统作为一个元素放入整个实际的计算机系统中,并与计算机硬件、其他软件、用户和其他系统元素相结合,在实际使用环境中进行全面测试。6.1.4软件测试步骤和软件开发的各个阶段之间的关系已经被强调过多次。使用软件生命周期(瀑布模型)模型,软件开发过程是一个自上而下、逐步细化的过程

12、,而软件测试过程是按照与开发过程相反的顺序进行的,是一个自下而上、逐步集成的过程。低级测试为高级测试准备测试条件和数据驱动环境,还包括两者的并行测试。6.1.4软件测试步骤和软件开发的各个阶段之间的关系。因此,我们发现错误原因的顺序也与发展过程的顺序相反。首先,对每个模块进行单元测试,以消除程序模块内部的逻辑和功能错误和缺陷,然后针对软件设计进行集成测试(有时称为总体测试),以检测和消除子系统或系统结构中的错误,然后针对需求进行验证测试(也称为有效性测试)。6.1.4软件测试步骤和软件开发阶段之间的关系,图6-2软件测试和软件开发过程之间的关系,图6-3软件测试步骤和软件开发文档之间的关系,6

13、.1.5软件测试原则,(1)将软件测试应用于软件开发的所有阶段,并在开发过程中尽早发现和防止错误(2)测试用例必须包含输入数据和相应的预期输出结果,并仔细设计测试用例;(3)在测试时,应该防止设计者检查他们自己设计的程序;(4)在设计测试用例时,应该包括合理和不合理的输入条件;6.1.5软件测试原则,(5)充分注意测试中的错误聚类现象。如果发现错误数量很大,则可能剩余的错误数量也很大。这种错误的聚集现象已经被许多程序测试实践所证实;(6)严格执行测试计划,根据软件需求规范设计测试用例,消除测试的随机性;6.1.5软件测试原则,(7)对每个测试结果进行全面检查,不要遗漏错误的迹象。软件修改后,进

14、行回归测试,即用修改前测试的测试用例进行测试,然后用新的测试用例进行测试;(8)妥善保管测试计划、测试用例、错误统计和最终分析报告,为维护提供方便。在一个程序段中,仍然有一个未发现的错误概率,它与发现的错误数量正相关。6.1.5软件测试原理,图6-4软件错误聚类现象示意图,6.2软件测试方法,软件测试方法有很多,不同的起点得到不同的测试方法。从测试过程来看有:静态分析法、动态测试法;从观察结构透明度的方式来看:白盒法、黑盒法和灰盒法;从获取测试数据的形式来看:穷举法;等价类划分方法;边界值分析法;6.2软件测试方法,从逻辑上分析:因果图;错误推测法;从测试步骤来看:单元测试、集成测试、确认测试

15、、系统测试等。从检查形式来看:功能测试、逻辑测试;6.2软件测试方法、如何更全面地测试以及如何设计测试用例是软件测试中的关键技术。无论使用哪种方法进行测试,我们都试图用更少的测试用例来测试程序中更多的潜在错误。在静态分析中,程序不执行,但可以对需求分析规范、软件设计规范和源程序进行结构检查、流程图分析和符号执行,分析软件可能引起的异常情况,找出软件错误。从测试过程来看:静态分析法、动态测试法;6.2软件测试、结构检查的方法是一种人工分析技术,它评估需求规范、程序设计、编码和测试工作,虚拟地(模拟地)执行程序,并发现和检查评估中的错误;流程图分析是通过分析流程图和代码结构来检查程序错误,便于代码

16、分析和测试结果分析;6.2软件测试方法中,符号执行是定义符号数据,给程序的每一条路径赋予符号表达式,输入特定路径的符号,处理后输出符号,并判断程序的行为是否错误。这种方法很复杂,容易出错,而且很少使用。灰箱法是白箱法和黑箱法的结合。只有关键路径和程序段用白盒法测试,大多数用黑盒法测试。6.2软件测试、动态测试的方法是直接执行程序进行测试,包括功能测试、接口测试和结构测试,观察程序的行为,记录执行结果,并从执行结果中分析程序可能出现的错误;有些人认为,不管使用哪种测试方法,只要每一种可能的情况都被正确地测试和通过,就可以得到一个完全正确的程序。6.2软件测试的方法,包括所有可能的情况,被称为穷举

17、测试。事实上,进行详尽的测试通常是不可能的。因为各种输入数据的排列和组合往往太多,实际测试无法完成。如果黑盒方法用于测试三个整数的输入数据,如果每个整数是16位二进制数,则有216216216=2482.81014个输入数据的排列和组合。6.2软件测试的方法,如果每次测试需要1毫秒,那么测试各种排列和组合需要10000年。此外,有必要测试非法输入,因此实际上不可能用尽所有组合。因此,一般的软件测试是有限测试。阿尔法(测试):为了征求用户的意见,一般的软件产品由用户在开发者的站点进行测试,用户发现的错误和问题被记录下来。6.2软件测试方法,Beta()测试:由最终用户在一个或多个用户自己的地方进行,并记录测试中遇到的所有问题和想法。大多数重要的通用软件产品都已经过测试。6.3测试方案和测试用例,设计测试方案是软件测试的关键问题。测试计划包括要测试的功能和结构、要输入的测试数据以及输入这些数据后的预期测试用例。测试用例的设计是最困难的问题之一。不同的测试数据有不同的发现程序错误的能力。为了提高测试效率和降低测试成本,需要选择高效的测试数据。因为不可能进行详尽的测试,所以选择少量有效的测试数据并进行尽可能完整的测试更为重要。6.3测试方案和测试用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论