软件测试及软件质量控制(精)上课讲义.ppt
《软件测试及软件质量控制(精)上课讲义.ppt》由会员分享,可在线阅读,更多相关《软件测试及软件质量控制(精)上课讲义.ppt(102页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 1软件测试及软件质量控制(精)2 2 软件工程实践的经验表明,发现软件的时刻越晚,改正这些错误所花费的代价也越高,如果在软件投入使用之前没有发现和纠正软件的大部分错误,人们付出的代价会更高,往往会造成恶劣的后果。从广义上来说,软件测试工作散布在软件生命周期的各个开发阶段,人们认识到,软件测试是保证软件质量的主要手段,各阶段的评审工作和验证工作,均是广义概念上的测试工作。而主要的测试是在编码和测试这两个阶段进行的。因此,狭义的软件测试就是程序测试。3 36.1 6.1 软件测试基本概念软件测试基本概念 G.J.Myers给出了关于测试的一些规则,被软件工程领域认可:(1)测试是为了发现程序中
2、的错误而执行程序的过程;(2)好的测试方案极有可能发现迄今为止尚未发现的错误;(3)成功的测试是发现了至今为止尚未发现的错误。4 46.1 6.1 软件测试基本概念软件测试基本概念 这些规则,实际上是软件测试的狭义概念程序测试。狭义的软件测试:测试是为了发现错误而执行程序的过程。是根据软件开发的各个阶段的说明和程序的内部结构而精心设计的一批测试用例(有输入数据及预期的结果),并利用这些测试用例执行程序及发现错误的过程。5 56.1 6.1 软件测试基本概念软件测试基本概念 广义的软件测试是对软件计划、软件系统分析、软件设计、软件编码进行的查错活动,包括代码执行和人工审查活动,测试的目的是找出软
3、件生命周期的各个阶段的错误,有利于以后进行修改和纠正。但测试本身不修正错误,调试才会修正错误。即找错的活动是测试;分析错误的性质与位置,进行纠错的活动是调试,保证算法的正确实现。软件测试与程序测试都是查找错误的活动,差别在于查找错误的范围不同。6 66.1 6.1 软件测试基本概念软件测试基本概念 由于测试的目标是暴露程序的错误,从心理学角度看,由设计者自己进行测试是不恰当的,设计小组和测试小组应该分别设立,有利于进行客观和公正的软件测试。测试是有限的,由于通常的测试过程不可能穷尽一切情况,即使经过了严格的测试之后,仍然可能存在没有被发现的错误隐藏在程序中,不能证明程序中没有错误。7 76.1
4、 6.1 软件测试基本概念软件测试基本概念 因此,测试仅仅有可能找出程序的错误,测试不能证明程序是正确的。软件工程中所有其它阶段都是“建设性”的,软件工程师力图从抽象概念出发,逐步设计出具体的软件系统,而测试人员的工作表面上看却是“破坏性”的,竭力证明软件中含有错误,不能按预定要求正确工作。凡是进行对比的方式均可理解为测试验证。8 86.1.2 6.1.2 软件测试的对象软件测试的对象 软件测试应该贯穿于软件生命期的各个阶段,各阶段的工作是相互衔接、相互影响的,前一阶段发生的问题自然要影响到下一阶段的工作。为了把握各个环节的正确性,人们需要进行各种确认和验证工作。软件确认是广义上的软件测试,它
5、是企图证明软件在一个给定的外部环境中软件的逻辑正确性的一系列活动和过程,如需求说明书的确认、程序的确认等。9 96.1.2 6.1.2 软件测试的对象软件测试的对象 程序的确认又分为静态确认与动态确认。静态确认一般不在计算机上执行程序,而是通过程序正确性证明、静态分析或人工分析来确认程序的正确性;动态确认主要通过动态分析和动态测试,用执行程序的过程来检查执行的状态,确认程序是否有问题;10106.1.2 6.1.2 软件测试的对象软件测试的对象 正确性证明主要是企图绕过复杂的测试,直接证明程序的正确性。如程序的输入输出断言法。设程序段为S,其前断言为P,后断言为R。如果执行S以前P为真,则执行
6、S后R也为真,则证明S是正确的,记为PSR。11116.1.2 6.1.2 软件测试的对象软件测试的对象 任何程序总可以分成S1、S2、Sn个结点,对应的断言为R1、R2、Rn,起初R1为输入断言,R2为输出断言,也是下一个输入断言,Rn为最后的输出断言,我们总可以,将S1、S2、Sn逐个证明,自顶向下或自底向上都可证明程序的正确性,该分支已发展为计算机代数学;12126.1.2 6.1.2 软件测试的对象软件测试的对象 软件验证也属于广义上的软件测试,它试图证明在软件生命期的各个阶段、各阶段的逻辑协调性、完备性和正确性。包括系统分析员理解用户要求的正确性、表达的正确性、设计人员对需求规格说明
7、理解的正确性、设计与设计表达的正确性、程序编码的正确性和运行软件程序时输入的正确性、运行结果的正确性等,运行结果与用户预期的结果是否一致等,这说明任何一个环节上发生了问题都可能在软件测试中表现出来。13136.1.3 6.1.3 测试信息流测试信息流 将测试的过程用数据流图表示,可得测试信息流如图6-1所示。(至软件配置)软件配置 1 测试结果 2 错误 3 修正的软件测试配置 测试结果测试工具 测试 评价 调试 正确 预测结果 出错率 4 数据 可靠性 分析图图6-1 测试信息流测试信息流 14146.1.3 6.1.3 测试信息流测试信息流 1.测试过程需要三类输入:(1)软件配置:包括软
8、件开发文档(用户文档、需求规格说明、软件设计说明、源程序代码)、目标执行程序、数据结构;(2)测试配置:包括测试计划、测试用例、测试驱动程序等;实际上在整个软件开发过程中,测试配置只是软件配置的一个子集;1515 (3)测试工具:为提高软件测试效率,使用测试工具为测试工作服务;如:测试数据自动生成程序,静态分析程序、动态分析程序、测试结果分析程序及标准例程测试数据库等。6.1.3 6.1.3 测试信息流测试信息流1616 测试之后,对所有测试结果进行分析,将实际测试的结果与预期的结果进行比较。如果发现出错的数据,则意味着软件有错误,需要纠错,应进行调试,确定错误的位置和出错的性质,改正这些错误
9、,同时修正相关文档。修正过的文档一般需经过再次测试,直到通过测试为止。6.1.3 6.1.3 测试信息流测试信息流1717 通过收集和分析测试结果的有关数据,可以建立软件评估的可靠性模型。如果经常出现需要修改设计的严重错误,那么软件的质量和可靠性就值得怀疑,同时也表明需要进一步测试。相反,如果软件功能能够正确完成,出现的错误易于修改,那么就可能有两种评价:6.1.3 6.1.3 测试信息流测试信息流1818一种是软件的质量和可靠性达到可以接受的程度。另一种是所做的测试还不足以发现软件的严重错误。如果得到的评价是没有发现错误,很有可能测试的配置考虑得不够充分和细致,软件仍有潜伏的错误,以后改正错
10、误需要付出高昂的代价。6.1.3 6.1.3 测试信息流测试信息流1919 2.软件错误可以从不同角度进行分类:(1)从错误对程序的影响程度来分:严重性错误:严重影响程序的运行,甚至不能运行;一般性错误:经常影响程序的运行,特殊情况下表现正常;6.1.3 6.1.3 测试信息流测试信息流2020 微小错误:一般情况下程序能运行,特殊情况下表现异常;无影响性错误:不影响程序的运行。6.1.3 6.1.3 测试信息流测试信息流2121(2)从开发过程的转换环节上分:构造错误:编码实现与设计不一致;设计错误:设计逻辑与说明不一致;说明书错误:说明书与用户要求不一致;需求错误:不满足用户的实际要求;配
11、置错误:软件配置不满足实际环境。6.1.3 6.1.3 测试信息流测试信息流2222(3)从测试结果的表现上分类:1)功能错误:由系统需求分析不完整引起的;2)结构错误:由总体设计的错误引起的;3)过程错误:由详细设计的错误引起的;4)数据错误:由软件编码或详细设计的错误引起的;5)编码错误:由软件编码引起的错误;6)其它错误:由文档和其它系统元素引起的错误;6.1.3 6.1.3 测试信息流测试信息流23236.1.4 6.1.4 软件测试步骤与软件开发各软件测试步骤与软件开发各阶段的关系阶段的关系软件测试一般分为四个步骤:(1)单元测试(也称模块测试):针对软件设计的基本单元程序模块,进行
12、正确性检验的测试工作。目的在于发现各个模块内部可能存在的各种差错。单元测试需要从程序内部结构出发设计测试用例,多个模块可以平行、独立地进行测试;24246.1.4 6.1.4 软件测试步骤与软件开发各软件测试步骤与软件开发各阶段的关系阶段的关系 (2)集成测试(也称组装测试,联合测试):在单元测试的基础上,将所有模块按设计要求集成在一起进行测试,以检验总体设计中各模块间的接口设计问题、模块之间的相互影响、上层模块存在的各种差错及全局数据结构对系统的影响等方面。25256.1.4 6.1.4 软件测试步骤与软件开发各软件测试步骤与软件开发各阶段的关系阶段的关系 (3)确认测试(也称验收测试,有效
13、性测试):主要检验软件的功能和性能是否与需求说明书中的规定一致。(4)系统测试:将软件系统作为一个元素,放入整个实际的计算机系统中,与计算机硬件、其他软件、使用人员等系统元素结合在一起,在实际使用环境下进行综合全面的测试。26266.1.4 6.1.4 软件测试步骤与软件开发各软件测试步骤与软件开发各阶段的关系阶段的关系 前面多次强调,使用软件生命期(瀑布模型)模型,软件开发过程是一个自顶向下,逐步细化的过程,而软件测试过程则是与开发过程相反的次序进行的,是一个自底向上,逐步集成的过程,低一层测试为上一层测试准备测试条件和数据驱动环境,也包含两者平行进行测试。27276.1.4 6.1.4 软
14、件测试步骤与软件开发各软件测试步骤与软件开发各阶段的关系阶段的关系 因此,发现引起错误的原因顺序也与开发过程的相次序反,首先对每一个模块进行单元测试,消除程序模块内部逻辑上和功能上的错误和缺陷,再对照软件设计进行集成测试(有时也叫整体测试),检测和排除子系统或系统结构上的错误,再对照需求进行确认测试(也称为有效性测试),最后进行系统测试,运行系统,看软件系统是否满足功能和性能及其它要求。28286.1.4 6.1.4 软件测试步骤与软件开发各软件测试步骤与软件开发各阶段的关系阶段的关系需求分析软件设计软件编码确认测试集成测试单元测试系统测试图图6-2 6-2 软件测试与软件开发过程间的关系软件
15、测试与软件开发过程间的关系29296.1.4 6.1.4 软件测试步骤与软件开发各软件测试步骤与软件开发各阶段的关系阶段的关系需求分析 说明书概要设计 说明书详细设计 说明书源程序 代码确认测试集成测试单元测试系统测试图图6-3 6-3 软件测试与开发文档之间的关系软件测试与开发文档之间的关系30306.1.5 6.1.5 软件测试原则软件测试原则(1)将软件测试贯穿于软件开发的各个阶段中,在开发过程中尽早地发现和预防错误,杜绝隐患,提高软件质量;(2)测试用例必须包含输入数据和与之对应的预期输出结果,精心设计测试用例;(3)测试时应避免设计者检查自己设计的程序;(4)设计测试用例时,应包括合
16、理的与不合理的输入条件;31316.1.5 6.1.5 软件测试原则软件测试原则(5)充分注意测试中出现的错误群集现象,若发现错误数目较多,则可能残存的错误数目也较多,这种错误出现的群集现象,已为许多程序测试实践所证实;(6)严格执行测试计划,以软件需求说明书为基准设计测试用例,排除测试的随意性;32326.1.5 6.1.5 软件测试原则软件测试原则(7)对每一个测试结果做全面检查,不能遗漏错误出现的征兆,软件修改后要进行回归测试,即用修改前测试过的测试用例进行测试,再用新的测试用例测试;(8)妥善保存测试计划、测试用例、出错统计数据和最终分析报告,为维护提供方便。在一个程序段中,还存在着尚
17、未发现的错误概率与已发现的错误数正相关。33336.1.5 6.1.5 软件测试原则软件测试原则残存错误的可能性已发现的错误数图6-4 软件错误的群集现象示意图34346.2 6.2 软件测试的方法软件测试的方法 软件的测试方法很多,不同的出发点得到不同的测试方法。有:从测试过程来分:静态分析法、动态测试法;从观察结构的透明性方式来分:白盒法、黑盒法、灰盒法;从获得测试数据形式上分:穷尽法;等价类划分法;边界值分析法;35356.2 6.2 软件测试的方法软件测试的方法从逻辑分析上分:因果图法;错误推测法;从测试步骤上分:单元测试、集成测试、确认测试、系统测试等;从考察形式上分:功能测试,逻辑
18、测试;36366.2 6.2 软件测试的方法软件测试的方法 如何测试得更完全、怎样进行测试用例的设计,是软件测试中的关键技术。无论用哪种方法进行测试,都是设法用较少的测试用例集合测试出程序中较多的潜在错误。静态分析时,不执行程序,可对需求分析说明书、软件设计说明书、源程序做结构检查、流图分析、符号执行来分析软件可能导致的异常情况,找出软件错误。从测试过程来分:静态分析法、动态测试法;37376.2 6.2 软件测试的方法软件测试的方法 结构检查是手工分析技术,对需求说明、程序设计、编码、测试工作进行评议,虚拟地(模拟)执行程序,在评议中发现和检查错误;流图分析是通过分析流程图、代码结构来检查程
19、序错误,便于进行编码分析和测试结果分析;38386.2 6.2 软件测试的方法软件测试的方法 符号执行是定义符号化数据,为程序的每条路径给出符号表达式,对特定路径输入符号,经处理输出符号,判断程序的行为是否错误,这种方法复杂,易出错,较少使用。灰盒法是白盒法和黑盒法相结合使用的方法,仅对重点路径和程序段用白盒法测试,大部分用黑盒法进行测试。39396.2 6.2 软件测试的方法软件测试的方法 动态测试是直接执行程序进行测试,包括功能测试、接口测试和结构测试,观察程序的行为,记录执行的结果,从执行结果来分析程序可能出现的错误;有些人设想,不管使用那种测试方法,只要对每一种可能发生的情况都进行测试
20、,能正确通过,就可以得到完全正确的程序。40406.2 6.2 软件测试的方法软件测试的方法 包含所有可能情况的测试称为穷尽测试,实际上,通常不可能做到穷尽测试。因为各种输入数据的排列组合情况往往多到无法实际测试完成的程度。如用黑盒法测试三个整数型的输入数据,如果每个整数是16位二进制数,则输入数据有 216216216=2482.81014种排列组合。41416.2 6.2 软件测试的方法软件测试的方法 如果每测试一次需要1毫秒,测试完毕这些排列组合的各种情况需要一万年,另外还需测试不合法的输入情况,实际上不可能穷尽所有组合情况。因此,一般的软件测试是有限测试。Alpha()测试:通用软件产
21、品为了征集用户的意见,在开发者的场所,由用户进行的测试,记录用户发现的错误和问题。42426.2 6.2 软件测试的方法软件测试的方法 Beta()测试:在一个或多个用户自己的场所,由最终用户进行,并记录在测试中遇到的所有问题和想法。重要的通用软件产品,大多经过和测试。43436.3 6.3 测试方案与测试用例测试方案与测试用例 设计测试方案是软件测试中的关键问题。测试方案包括预定要测试的功能、结构,应该要输入的测试数据和输入这些数据后预期的结果测试用例。测试用例的设计是其中较困难的问题,不同的测试数据发现程序错误的能力差别很大,为了提高测试效率,降低测试成本,应该选用高效的测试数据。因为不可
22、能进行穷尽测试,选用少量高效的测试数据,进行尽可能完备的测试就显得更重要了。44446.3 6.3 测试方案与测试用例测试方案与测试用例 设计测试方案的基本目标是,确定一组最有可能发现某个或某类错误的测试用例。有多种测试技术,同一种测试技术在不同的应用场合效果可能相差很大,因此,通常需要联合使用多种测试技术来设计测试用例。通常的做法是用黑盒法设计基本测试方案,再用白盒法补充一些方案。4545 6.4 6.4 白盒法(逻辑覆盖)白盒法(逻辑覆盖)白盒法也称逻辑驱动法(逻辑覆盖法),从软件的具体逻辑结构和执行路径出发,设计测试用例。具有语句覆盖、判定覆盖(分支覆盖)、条件覆盖、判定/条件覆盖、路径
23、覆盖、条件组合覆盖、点覆盖、边覆盖,下面以一个经典例子分别介绍:设有某个算法片段的程序流程图如下:4646 6.4 6.4 白盒法(逻辑覆盖)白盒法(逻辑覆盖)图图6-5程序段程序框程序段程序框图图(A1)AND(B=0)(A=2)OR(X1)X=X/AX=X+1abcdeTT4747 6.4 6.4 白盒法(逻辑覆盖)白盒法(逻辑覆盖)该程序片段有四条路径:abd,acd,ace,aed。(1)语句覆盖:选择足够的测试用例使程序中每条语句至少执行一次。为了使每个语句都执行一次,程序的执行路径只需经过a、b、c、d、e各点即可。如果选择路径ace,则能保证程序中的语句都执行一次。4848 6.
24、4 6.4 白盒法(逻辑覆盖)白盒法(逻辑覆盖)例如,选择测试用例:A=2,B=0,X=3,预 期的 结 果 为:A=2,B=0,X=2.5;但是,许多路径得不到测试,这种测试很不充分。图图6-5程序段程序框程序段程序框图图(A1)AND(B=0)(A=2)OR(X1)X=X/AX=X+1abcdeTT4949 6.4 6.4 白盒法(逻辑覆盖)白盒法(逻辑覆盖)(2)判定覆盖(也称分支覆盖):判定是一个逻辑表达式的结果。选择足够的测试用例,使程序中每个判定至少都能获得一次“真”值和一次“假”值,从而使程序的每个判定的每个分支至少都执行一次。例如,选择测试用例:A=3,B=0,X=3,预期结果
25、为:A=3,B=0,X=1;选择测试用例:A=2,B=1,X=0,预期结果为:A=2,B=1,X=1;5050 6.4 6.4 白盒法(逻辑覆盖)白盒法(逻辑覆盖)这组测试用例覆盖了路径acd和aed,满足了判定覆盖要求。判定覆盖比语句覆盖强,但是判定覆盖只关心整个判定表达式的值,对程序逻辑的覆盖程度仍然不高,如上面的测试,只覆盖了全部路径的一半路径。5151 6.4 6.4 白盒法(逻辑覆盖)白盒法(逻辑覆盖)(3)条件覆盖:条件为逻辑表达式中的各个逻辑分量。选择足够的测试用例,使得程序判定中的每个条件都能获得各种可能的结果。如图6-5中,有四个条件:A1,B=0,A=2,X1,每个条件可能
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 测试 质量 控制 上课 讲义
限制150内