《软件技术基础第5章.ppt》由会员分享,可在线阅读,更多相关《软件技术基础第5章.ppt(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第5 5章章 软件检验软件检验5.1 动态检验动态检验5.2 静态检验静态检验5.3 正确性证明正确性证明5.4 测试步骤测试步骤 第5章 软件检验返回主目录返回主目录第第5 5章章 软件检验软件检验第5章 软 件 检 验5.1 动动 态态 检检 验验 动态检验就是指传统的测试,这种方法是使程序有控制地运行,并从不同角度观察程序运行的行为,以发现其中的错误。测试的关键是如何设计测试用例。测试方法不同,所使用的测试用例也不同。常用的测试方法有黑盒法和白盒法。黑盒法是指测试人员将程序看成一个“黑盒”,也就是说,他不关心程序内部是怎样做的,而只想检查程序是否符合它的“功能说明”。所以黑盒法测试时,
2、测试用例都是完全根据程序的功能说明来设计的。如果想用黑盒法发现程序中的所有错误,则必须用输入数据的所有可能值来检查程序是否都能产生正确的结果。第第5 5章章 软件检验软件检验图5.1 程序的输入变量与输出变量第第5 5章章 软件检验软件检验 白盒法是指测试人员必须了解程序的内部结构,此时,测试用例是根据程序的内部逻辑结构来设计的。如果想用白盒法发现程序中的所有错误,则至少必须使程序中每种可能的执行路径都执行一次。例如,图5.1是一个很简单的程序,它有两个输入变量x、y,一个输出变量z。假定程序是在字长为32位的计算机上运行,且x、y都是整数,则输入数据的可能值有232232264种。如果这个程
3、序执行一次需0.5 ms,则执行264次运算将需2.9亿年!图5.2是一个小程序控制流程图。这个程序由一个循环语句组成,循环次数达20 次,循环体内是一组嵌套的IF语句,其可能的路径有多条,所以从A到B的路径多达520条。第第5 5章章 软件检验软件检验图5.2 程序控制流程图 第第5 5章章 软件检验软件检验 如果用这么多情况测试它,并假设执行一条路径需0.5 ms,则完成测试需1512年!这两种测试方法在设计测试用例上是不可取的,也是不可行的。为此,设计人员提出了以下几种设计测试用例的方法:随机抽取测试用例、抽取典型测试用例、抽取边界测试用例、抽取混合测试用例。这些设计测试用例的方法各有特
4、点,至于使用哪种,可根据测试对象的不同分别选用一种,或联合使用。第第5 5章章 软件检验软件检验5.2 静静 态态 检检 验验 静态检验是指用人工阅读文档和程序,从中发现错误,或用一些辅助工具来完成这种工作,这种技术也称为评审。实践证明它是一种很有效的技术。评审的种类很多,包括需求复查、概要设计(总体设计)复查、详细设计复查、程序复查和走查等,其正规化的程度、方式和参加的人员有所不同。本节就此概括讨论评审过程和评审条款等问题。1评审过程评审过程 为了尽早发现并纠正错误,应将评审工作与开发过程结合起来,使评审成为前一阶段之后必须进行的步骤,这样的模式可用图5.3来说明。第第5 5章章 软件检验软
5、件检验图5.3 评审模式第第5 5章章 软件检验软件检验 由于评审的目的是发现错误,为了获得较好的效果,评审应由开发人员之外的人来主持,开发人员与评审人员相互独立是保证评审质量的重要措施之一。评审人员应在软件开发技术和检验技术方面受过良好的训练,有丰富的软件开发经验。程序走查(Code Walkthrough)是另一种有效的评审活动。走查的关键在于:以人工运行作为媒介,通过这种方式启发与会者向程序员提出种种问题,从而发现程序中的错误。2.评审条款评审条款 评审的目的是尽量快、尽量多地发现错误,所以一般的做法是将软件中常见的各类错误列成清单作为评审条款。评审过程中按评审条款有针对性地进行检查,就
6、可达到多、快、好、省的目的。评审条款随系统的不同可有所不同,可根据软件系统的性质和复查专家的经验来设定。第第5 5章章 软件检验软件检验 5.3 正正确确性性证证明明 动态检验和静态检验的基本问题在于不可能说明软件中不存在错误,人们所能做到的最好的结果是发现错误,因此自然希望能找到某种方法能确切地证明程序是没有错误的,这就出现了程序正确性证明的研究领域。程序证明最常用的方法是归纳断言法,它对程序提出一组命题,如能用数学方法证明这些命题成立,就可以保证程序中不存在错误,即它对所有的输入都会产生预期的正确输出。但是程序证明存在两个问题:其一是如何设置命题和证明命题,其二是在证明中如何定义“错误”。
7、总之,程序正确性证明是一个鼓舞人心的想法,但距离实用还有一段路要科学技术人员去走。第第5 5章章 软件检验软件检验5.4 测测 试试 步步 骤骤 软件开发过程经历了分析、设计、编程等阶段,每个阶段都可能产生各种各样的错误。据统计,开发早期犯下的错误(如误解了用户的要求、模块界面之间有冲突等)比编程阶段犯的错误要多。为了发现各阶段产生的错误,测试过程应该与分析、设计、编程的过程具有类似的结构,以便针对每一阶段可能产生的错误,采用某些特殊的测试技术,所以测试过程通常可以分三步进行:(1)模块测试(Module Testing);(2)联合测试(Integration Testing);(3)系统测
8、试(System Testing)。第第5 5章章 软件检验软件检验 模块测试是对一个模块进行测试,其目的是根据该模块的功能说明检验模块是否存在错误。模块测试主要可发现详细设计和编程时犯下的错误,如某个变量未赋值、数组的上下界不正确等。程序员在完成某个模块的编程之后,一般总是要先对该模块进行私下的测试,此时,可以先用白盒法选择一些例子检验程序的内部逻辑,再用黑盒法补充一些例子。程序员本人经私下测试后认为程序基本可行,才会将程序交付出来。程序交付出来之后,由其他人员以黑盒法为主再次对该模块进行测试。联合测试又称集成测试或联调,其目的是根据模块结构图将各个模块连接起来进行,以便发现问题。联合测试可
9、以发现概要设计时犯的错误,如模块界面上的问题等。与后面的系统测试一样,联合测试的主要目标已不是发现模块内部的错误,所以通常只采用黑盒法。第第5 5章章 软件检验软件检验图5.4 软件开发过程第第5 5章章 软件检验软件检验 系统测试将硬件、软件和操作人员等视为一个整体,检验它是否有不符合需求说明书的地方,这一步可以发现设计和分析阶段的错误,如误解了用户的要求,与用户要求有冲突等。系统测试后就可由用户来验收。测试中如发现错误,需要回到编程、设计、分析等阶段作相应的修改,也就是说,需要进行“再编程”、“再设计”和“再分析”,其过程可用图5.4的示意图表示。从上述三步的测试过程可以看出:最早犯下的错误最迟才能发现,如分析阶段的错误一直要到验收才能发现。在大多数情况下,纠正这类错误需要对系统作较大的改动,其代价往往也是最大的。这正好说明了需求分析阶段结束时的需求复查和设计阶段结束时的设计复查是多么重要!
限制150内