《软件工程——理论、方法与实践》课件第12章.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《软件工程——理论、方法与实践》课件第12章.ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程理论、方法与实践 软件工程 理论 方法 实践 课件 12
- 资源描述:
-
1、1 1第12章 软件验证和确认第12章 软件验证和确认12.1 验证和确认12.2 软件审查12.3 软件测试12.4 软件测试方法12.5 面向对象的测试12.6 IBM Rational Functional Tester本章小结习题2 2第12章 软件验证和确认12.1 验证和确认传统的测试观念认为:应等待系统开发完毕,再对其进行测试,但这是极为不合理的。通常,影响软件质量的因素不只限于程序代码本身,还与软件过程的各个开发活动,如需求分析、软件设计等工作密切相关。因此表现在程序中的错误,并不一定是编码所引起的。错误在初期也许只是范围很小的隐藏问题,但各开发阶段的连续性会使其逐步扩展。如果
2、早期开发中出现的错误不能及时发现和解决,将带到设计、编码、测试等各阶段,影响会逐步扩大。3 3第12章 软件验证和确认有统计表明,因需求分析设计不完整而引起的功能错误占整个软件错误的27%;因总体设计错误而引起的系统错误占整个软件错误的16%;由编码错误引起的数据错误占整个软件错误的10%;因程序员编码引起的编程错误占整个软件错误的4%;由文档和硬件所引起的其他错误占整个软件错误的4%。因此,对软件的错误检查工作应着眼于整个软件生存期,以保证软件的质量。据有关机构研究表明:在开发周期中,每推后一步实施错误检查,成本就会增加10%。因此,若不能尽早地检出错误,则在后期活动和软件交付后,会因纠正这
3、些错误而付出很高的代价,并有可能导致系统不可用等严重的后果。4 4第12章 软件验证和确认验证和确认(Verification&Validation,V&V)工作是在整个软件生命周期中对软件的规范性评估活动,以保证软件开发各个环节的正确性。软件验证(Verification)试图证明在软件生存期的各个阶段,软件产品或中间产品是否能满足客户需求,包括逻辑协调性、完备性和正确性。5 5第12章 软件验证和确认软件确认(Validation)是一系列的活动和过程,其目的是保证软件产品能够符合其描述的要求。它包括需求规格说明的确认和程序的确认,而程序的确认又分为静态确认和动态确认。静态确认一般不在计算
4、机上实际执行程序,而是通过人工分析或程序正确性证明来确认程序的正确性;动态确认主要是通过动态分析和程序测试来检查程序的执行状态,以确认程序是否有问题。显然,验证和确认是两个相互独立但却相辅相成的活动,二者很容易混淆。6 6第12章 软件验证和确认 验证的作用是检查软件是否符合它的描述,因此验证活动应该检查系统是否满足了它所定义的功能的和非功能的需求,强调对于过程的检验。而确认应该保证软件满足客户的期望。它不局限于检查系统是否符合它的描述,而是要说明软件是否最终满足了客户的要求,强调对于结果的检验。但是,验证和确认的目标都是要发现软件缺陷,并确定软件系统是否实现了需要的功能和特性。7 7第12章
5、 软件验证和确认验证与确认工作都是软件质量的保证活动。在对需求理解与表达的正确性、设计与表达的正确性、实现的正确性以及运行的正确性的验证中,任何一个环节上发生了问题都可能在软件测试中表现出来。在V&V过程中,可以使用软件审查和软件测试两种系统检查和分析技术。软件审查是对系统的各种表示形式,如需求文档、设计图和程序源代码等,进行分析和检查。这个过程贯穿软件开发过程的所有阶段。审查活动可以辅之一些能对系统源文本和相关联的文档的自动分析。软件审查和自动分析是一种静态V&V技术,不需要系统的执行。8 8第12章 软件验证和确认软件测试是使用测试数据对软件的实现进行运行检查,查看系统的输出内容以及运行行
6、为是否符合要求。测试是V&V过程中的动态技术,需要让系统运行起来以观察其动态行为。图12.1给出了软件检查和软件测试在软件过程中的位置。从图中可以看出软件检查可以用于所有阶段的活动,而软件测试只能用于原型或可执行程序完成以后。9 9第12章 软件验证和确认图12.1 静态、动态和有效性检验1010第12章 软件验证和确认 审查技术包括程序审查、自动化的源代码分析和形式化检验。但是,静态的软件审查只能检查程序及其描述之间的吻合程度,不能够说明软件真是有用的,并且也不能检验软件的非功能特性,如性能和可靠性等。因此,软件测试就是必不可少的,系统的有效性和非功能特性只有通过软件测试才能验证。1111第
7、12章 软件验证和确认12.2 软 件 审 查12.2.1 程序审查软件审查涉及文档和程序的审查,程序审查即对所实现的程序源代码审查,其审查的目标是评审和检出程序中的错误和缺陷,可能是逻辑上的错误,也可能是错误的条件设置或是与机构和项目定义的标准不相符。1212第12章 软件验证和确认程序审查通常可关注以下几点:所有的变量是否都有初始化?所有常量是否符号化?数组上下界定义是否正确?条件语句的每个条件设置是否正确?循环是否一定会结束?Case语句是否考虑了所有情形?组合语句的括号是否匹配?所有的输入数据是否都用到?所有的输出之前是否被赋值?1313第12章 软件验证和确认 所有的函数和过程调用接
8、口参数类型、位置和数目是否匹配?多个组件共享的数据结构定义是否正确?链接对象被修改后,相关的链接指针是否修改正确?使用动态存储分配时,是否正确地分配和回收?异常处理时,是否考虑了所有可能出现的异常情况?1414第12章 软件验证和确认程序审查的过程是一个正式的过程,至少由4个人组成的小组来实行,包括程序作者、代码阅读者、测试者和仲裁者。审查小组应系统地分析代码并指出可能的缺陷。为了更好地完成审查工作,程序审查活动开始之前,首先需要对被检查的代码有一个精确的描述,因为要详细审查每一个程序组件,并发现其可能存在的缺陷,如果没有一个完整、准确的描述,是难以做到的;其次,审查小组的成员应该熟悉机构的标
9、准,以能检出程序中不符合标准的部分。另外,所审查的程序集合应是一个最新的、语法正确的代码版本,否则由于版本的差异会造成审查结果的错误和工作量的浪费。图12.2是一个通用的程序审查过程,为很多软件开发机构所采用。1515第12章 软件验证和确认图12.2 审查过程1616第12章 软件验证和确认程序审查的效率,即一定的时间内检查的代码量取决于审查小组的经验、所使用的程序设计语言以及系统相关联的应用域。根据IBM对审查过程的计算,有以下结论:(1)在总体观察阶段,每小时大约可以分析500行源程序代码。(2)在个别准备阶段,每小时大约可以检查125行源程序代码。(3)在会议期间,每小时能审查9012
10、5行代码。1717第12章 软件验证和确认12.2.2 自动静态分析自动静态分析能检查出来的缺陷在表12.1中列出。有些缺陷并不一定就会使程序出错,比如变量未被初始化,但这些编码过程中的缺陷,却可能是一些错误产生的来源。自动静态分析列出程序中存在的缺陷和错误,有助于消除程序中隐含的错误源,有助于降低软件开发代价和提高软件质量。1818第12章 软件验证和确认1919第12章 软件验证和确认12.3 软 件 测 试12.3.1 软件测试的目的和原则Glen Myers在他的软件测试著作中就软件测试提出如下观点:测试是一个为了寻找错误而运行程序的过程;一个好的测试用例是指很可能找到迄今为止尚未被发
11、现的错误的用例;一个成功的测试是指揭示了迄今为止尚未被发现的错误的测试。2020第12章 软件验证和确认人们在长期测试实验中积累了不少经验,总结出了测试的一些基本原则以帮助提高测试的效率:(1)尽早地并不断地进行软件测试。(2)程序员或程序设计机构应避免测试自己设计的程序。(3)测试用例中不仅要有输入数据,还要有与之对应的预期结果。(4)测试用例的设计不仅要有合法的输入数据,还要有非法的输入数据。(5)在对程序修改之后要进行回归测试。2121第12章 软件验证和确认(6)程序中尚未发现的错误的数量通常与该程序中已发现的错误的数量成正比。(7)妥善保留测试计划、全部测试用例、出错统计和最终分析报
12、告,并把它们作为软件的组成部分之一,为维护提供方便。(8)应当对每一个测试结果做全面检查。(9)严格执行测试计划,排除测试的随意性。2222第12章 软件验证和确认12.3.2 单元测试通常软件测试过程活动分为单元测试、集成测试、系统测试和确认测试。图12.3显示了软件测试的4个步骤。2323第12章 软件验证和确认图12.3 软件测试的过程2424第12章 软件验证和确认1接口测试由于模块接口是数据出入模块的通道。接口不正常,其他测试则无从进行,所以在其他测试开始之前,首先要对通过模块接口的数据进行测试。接口测试应做如下考虑:(1)模块接收实际参数个数是否与模块形式参数个数一致,实际参数与形
13、式参数的属性是否匹配,实际参数与形式参数的单位是否一致。(2)调用其他模块时,所给的实际参数的个数是否与被调用模块的形参个数相等,实际参数的属性是否与被调模块的形参属性匹配,实际参数的单位是否与被调模块的形参单位匹配。2525第12章 软件验证和确认(3)调用内部函数所用参数的个数、属性和次序是否正确。(4)是否存在与当前入口点无关的参数引用。(5)输入是否仅改变了形式参数。(6)全程变量在各模块中的定义是否一致。(7)常数是否当作变量传送。2626第12章 软件验证和确认若一个模块需要完成外部的输入或输出时,还应检查下述各点:(1)文件属性是否正确。(2)OPEN/CLOSE语句是否正确。(
14、3)格式说明与I/O语句是否匹配。(4)缓冲器大小与记录长度是否匹配。(5)文件是否先打开后使用。(6)文件结束的条件是否处理过。(7)I/O的错误是否处理过。(8)输出信息中是否有正文的错误。2727第12章 软件验证和确认2局部数据结构测试检查局部数据结构是为了保证临时存储在模块内的数据在程序执行过程中完整、正确。局部数据结构往往是错误的根源。应仔细设计测试用例,力求发现以下可能的错误:(1)不正确或不一致的说明。(2)错误的初始化或错误的缺省值。(3)拼写错或截短的变量名。(4)不一致的数据类型。(5)上溢、下溢和地址错误。2828第12章 软件验证和确认3重要的执行路径测试计算中常见的
15、错误包括:(1)算术运算优先次序不正确或理解错误。(2)运算方式不正确。(3)初始化不正确。(4)精度不够。(5)表达式的符号表示错误。2929第12章 软件验证和确认比较判断与控制流常常紧密相关,因而测试用例还应致力于发现下列错误:(1)不同的数据类型比较。(2)逻辑运算不正确或优先次序错误。(3)因为精度误差造成本应相等的量不相等。(4)比较不正确,或变量不正确。(5)循环不终止或循环终止不正确。(6)当遇到分支循环时,出口错误。(7)错误地修改循环变量。3030第12章 软件验证和确认4异常处理测试一个好的设计应能预见各种出错条件,并预设各种出错处理路径。出错处理路径同样需要认真测试,测
16、试应着重检查下列问题:(1)错误描述难以理解。(2)错误提示与实际错误不相符。(3)在程序自定义的出错处理段运行之前,系统已介入。(4)对错误的处理不正确。(5)提供的错误信息不足,无法确定错误位置和差错。3131第12章 软件验证和确认5边界测试单元测试首先应按照图12.4所示配置测试环境,设计辅助测试模块驱动(Driver)模块和桩(Stub)模块。驱动模块用来调用被测模块,主要用来接收测试数据,启动被测模块,打印测试结果。桩模块接收被测试模块的调用,用来模拟被测模块的调用模块。其次,要编写测试数据。根据关于单元测试要解决的测试问题设计测试用例。然后用测试用例运行待测程序,进行动态测试,并
17、给出单元测试报告。3232第12章 软件验证和确认图12.4 单元模块测试环境3333第12章 软件验证和确认12.3.3 集成测试 1自顶向下方法 自顶向下集成从主控模块(“主程序”)开始,沿着软件的控制层次从上往下集成模块并进行测试,可采用深度优先和宽度优先两种策略。深度优先策略按照系统的纵向路径逐步集成测试系统,先组装在系统结构的一条主控路径上的所有模块。主控路径的选择取决于软件的应用特性,如选取最左边的路径,先组合模块M1、M2和M5,接着是M8,如果M2的某个功能需要,可组合M6,然后再构造中央和右侧的控制通路,参看图12.5。3434第12章 软件验证和确认图12.5 自顶向下集成
18、测试3535第12章 软件验证和确认自顶向下综合测试可归纳为五个步骤:(1)用主控制模块做测试驱动程序,把对主控模块进行单元测试时引入的所有桩模块用实际模块替代。(2)依据所选的集成策略(深度优先或宽度优先),每次只用一个实际模块替换一个桩模块。(3)每集成一个模块立即测试一遍。(4)只有每组测试完成后,才用实际模块替换下一个桩模块。(5)为避免引入新错误,需不断进行回归测试(即全部或部分地重复已做过的测试)。3636第12章 软件验证和确认2自底向上结合自底向上测试是从软件结构最低层的模块开始向上组装模块,进行集成测试,当测试到较高模块时,所需的下层模块均已测试完毕,因而不再需要桩模块。自底
19、向上综合测试可归纳为以下四个步骤:(1)把底层模块组合成一个特定软件子系统,见图12.6中的模块族1、2、3。3737第12章 软件验证和确认图12.6 自底向上集成测试3838第12章 软件验证和确认(2)为每个模块族设计一个驱动软件,作为测试的控制程序,以协调测试用例的输入和输出;图12.6中,虚线连接的D1、D2、D3是各个族的驱动程序。(3)对模块族进行测试。(4)按系统结构逐层向上,用实际模块替换驱动程序,将模块族集成起来组装成新的模块族再进行测试,直至全部完成。例如,在图12.6中,族1、族2属于Ma,因而去掉D1和D2将这两个族直接与Ma接口;同样族3与Mb接口前将D3去掉;Ma
20、与Mb最后与Mc接口。3939第12章 软件验证和确认12.3.4 系统测试1恢复测试 恢复测试主要检查系统的容错能力。当系统出错时,能否在指定的时间内修正错误并重新启动系统。恢复测试首先要采用不同的方式强迫系统出现故障,然后验证系统是否能尽快恢复。如果恢复由系统自动完成,则将重新初始化时间、检测点、数据恢复情况以及重新启动时间等作为软件的可恢复性评价指标。若恢复需人工干预,则需估算出修复的平均时间,确定其是否在可接受的限制范围以内。4040第12章 软件验证和确认2安全性测试系统的安全性测试是要检验在系统中已存在的安全性、保密性措施是否发挥作用,有无漏洞。在安全性测试过程中,测试人员应采用各
21、种办法尝试攻击系统。如设法截取或破译口令;专门编写软件破坏系统的保护机制;故意导致系统失败,企图趁系统恢复之机非法进入;试图通过浏览非保密数据而导出自己所需的信息;等等。系统安全设计的准则是使非法入侵的代价超过被保护信息的价值,这样攻击就会失去意义。4141第12章 软件验证和确认3压力测试压力测试是要检查在系统运行环境中从正常到发生故障可承受的负载。压力测试通常在一个非正常数量、频率等荷载下运行一个系统。如当中断的平均速度是一个或两个时,设计每秒产生十个中断的测试;定量地增长数据输入率,检查输入子功能的反应能力;运行需要最大内存或其他资源的测试用例;运行可能导致虚拟操作系统崩溃的测试用例等。
22、4242第12章 软件验证和确认4性能测试性能测试是测试软件被组装进系统的环境下运行时的性能。性能测试应覆盖测试过程的每一步。即使在单元测试阶段,单个模块的性能也可以通过白盒测试来评价,而不是等到所有系统模块全组装以后,再确认系统的真正性能。性能测试有时是与压力测试联系在一起的,常常需要硬件和软件测试设备。4343第12章 软件验证和确认12.3.5 确认测试确认测试又称有效性测试、合格测试或验收测试,是软件交付前的最后测试。实际上,对于软件开发人员来说,不可能完全预见用户实际使用程序的情况。如用户可能会使用一些非常规的数据组合,也可能难以理解系统给出的输出或提示信息等。因而,当开发者为用户建
23、立起软件后,还要由用户进行一系列的确认测试,以确保用户的所有需求得到满足。4444第12章 软件验证和确认12.4 软件测试方法软件测试通过动态执行被测程序来完成,由执行结果分析程序可能出现的错误。软件测试把程序看做一个函数,输入的全体称为函数的定义域,输出的全体称为函数的值域,函数则描述了输入的定义域与输出值域的关系。4545第12章 软件验证和确认这样软件测试的算法可归纳为:(1)选取定义域中的有效值,或定义域外无效值。(2)对已选取的值决定预期的结果。(3)用选取的值执行程序。(4)观察程序行为,记录执行结果。(5)将程序运行的结果与预期的结果相比较,不吻合则程序有错。4646第12章
24、软件验证和确认12.4.1 白盒测试方法 如果已知软件内部结构和算法,就可以测试其内部是否符合设计要求。这种测试方法称为白盒测试(White-box Testing),是对软件的过程性细节进行检验。白盒测试又称为结构测试或逻辑驱动测试,是将测试对象比作一个打开的盒子,它允许测试人员利用程序内部的逻辑结构和相关信息来设计或选择测试用例,对软件的逻辑路径进行测试,可以在不同点检查程序的状态,以确定实际状态与预期状态是否一致。4747第12章 软件验证和确认从表面来看,白盒测试是可以进行完全的测试的,从理论上讲也应该如此。只要能确定测试模块的所有逻辑路径,并为每一条逻辑路径设计测试用例,并评价所得到
25、的结果,就可得到100%正确的程序。但在实际测试中,这种穷举法是无法实现的,因为即使是很小的程序,也可能会出现数目惊人的逻辑路径。如图12.7所示是一个小程序的流程图。4848第12章 软件验证和确认图12.7 白盒测试中的穷举测试4949第12章 软件验证和确认1基本路径测试 基本路径测试是Tom MeCabe提出的一种白盒测试技术,其基本思想是:以软件过程描述为基础(例如,详细设计的程序流程图、PDL或源代码等),通过分析它的控制流程计算复杂度,导出基本路径集合,并设计一组测试用例,确保程序中的每个语句至少执行一次,每一条路径都至少通过一次。路径测试的测试用例设计可借助于程序流图。5050
展开阅读全文