您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 第四部分 软件测试与维护软件测试
软件工程方法与实践(机械工业出版社)高等院校计算机课程案例教程系列窦万峰编著主讲:李淑芝13507077576Lsz013@sina.com主讲:曾婕13767792699zjoancn77@163.com1.现代软件工程(国家示范性软件学院系列教材)张家浩/东南大学机械工业出版社2009.12.软件工程—理论与实践许家珆曾翎彭德中编著高等教育出版社2004.73.软件工程-实践者的研究方法(美)RogerS.Pressman著郑人杰等译机械工业出版社2008.64.SoftwareEngineering,6thEditionSommerville.I.(影印版)机械工业出版社2003.4主要参考书:总目录第1章软件工程学概述(2学时)第2章软件过程(2学时)第3章软件过程模型(4学时)第4章案例研究(2学时)第5章软件需求分析过程(4学时)第6章结构化分析建模(4学时)第7章面向对象分析(6学时)第8章软件设计(4学时)第9章结构化设计方法(4学时)总目录第10章面向对象设计(4学时)第11章软件实现(2学时)第12章软件测试(4学时)第13章软件维护(2学时)第14章软件项目管理(2学时)第15章软件项目估算(1学时)第16章软件项目计划与管理(1学时)第12章软件测试12.1软件测试的任务12.2软件测试过程模型12.3软件测试策略12.4测试用例设计12.5黑盒技术12.6白盒技术12.7集成测试技术12.8自动测试工具12.9调试12.10案例分析12.11实验要求及习题重点回顾:1、软件复用?软件复用有哪些级别?软件复用(SoftWareReuse)是将已有软件的各种有关知识用于建立新的软件,以缩减软件开发和维护的花费。软件复用的级别:(1)代码的复用;(2)设计结果的复用;(3)分析结果的复用;(4)测试信息的复用。2、面向对象的优点?面向对象程序设计的优点:开发时间短、效率高、可靠性高,所开发的程序更强壮。由于面向对象编程的可重用性,可以在应用程序中大量采用成熟的类库,从而缩短开发时间,这样程序更易于维护、更新和升级。继承和封装使得应用程序的修改带来的影响更加局部化。3、面向对象编码的原则?无论怎样强调软件测试的重要性和它对软件可靠性的影响都不过分。在软件生命周期的每个阶段都不可避免地会产生差错。虽然在每个阶段结束之前通过严格的技术审查,可以尽可能早地发现并纠正差错;但是,经验表明审查并不能发现所有差错,此外在编码过程中还不可避免地会引入新的错误。测试的目的就是在软件投入生产性运行之前,尽可能多地发现软件中的错误。目前软件测试仍然是保证软件质量的关键步骤,它是对软件规格说明、设计和编码的最后复审。软件测试在软件生命周期中横跨两个阶段:(1)单元测试测试者是同一个人,编码和单元测试属于软件生命周期的同一个阶段。(2)综合测试这是软件生命周期中的另一个独立的阶段,通常由专门的测试人员承担这项工作。大量统计资料表明,软件测试的工作量往往占软件开发总工作量的40%以上。在极端情况,如测试那种关系人的生命安全或重要的军事、经济目标的项目所花费的成本,可能相当于软件工程其他开发步骤总成本的3倍到5倍。调试与测试:仅就测试而言,它的目标是发现软件中的错误,而不是证明软件没错。但是,发现错误并不是最终目的。通过测试发现错误之后还必须诊断并改正错误,这就是调试。调试是测试阶段最困难的工作。在对测试结果进行收集和评价的时候,软件所达到的可靠性也开始明朗了。软件可靠性模型使用故障率数据,估计软件将来出现故障的情况并预测软件的可靠性。软件测试三个最佳实践•尽早测试•连续测试•自动化测试使人们最终能够做到:一个测试团队,基于一套完整的软件测试流程,使用一套完整的自动化软件测试工具,完成全方位的软件质量验证。软件测试的原则:(1)测试用例应由输入数据和预期的输出数据两部分组成。(2)测试用例不仅选用合理的输入数据,还要选择不合理的输入数据。(3)除了检查程序是否做了它应该做的事,还应该检查程序是否做了它不应该做的事。(4)应制定测试计划并严格执行,排除随意性。(5)长期保留测试用例。(6)对发现错误较多的程序段,应进行更深入的测试。(7)程序员避免测试自己的程序。软件测试的定义•软件测试是为了发现缺陷而执行程序的过程•测试是为了证明程序中有错误,而不是证明程序中无错误•一个好的测试用例指的是它可能发现至今尚未发现的缺陷•一次成功的测试指的是发现了新的软件缺陷的测试12.1软件测试的任务验证与确认•验证(Verification)是指已经实现的软件产品是按照它的需求做的,是符合需求说明书的。•确认(Validation)是指已经实现的软件产品或产品组件在用户环境下实现了用户的需要。•验证测试指测试人员在模拟用户环境的测试环境下对软件进行测试。•确认测试是指测试人员在真实的用户环境下检查软件。•同行评审、走查及测试是主要的验证方法。•确认主要是对中间及最终产品的检查与验收,表现形式为:审批、签字确认、正式的验收报告等。测试工作的组织形式•分为:–测试主管:负责全面的组织和协调工作–测试组:测试组由业务人员组成,负责测试案例的编写、具体的测试操作、测试问题的记录与反馈,以及对已修改问题的回归测试和验收等工作。–支持组:支持组由业务人员和技术人员共同组成,一方面负责对测试问题进行分析,提交问题解决方案,并作相应修改;另一方面负责后勤保障和日常管理工作。测试人员组织软件测试目的、任务、特点•目的:–确认软件的质量:Dotherightthing;Doitright.(软件质量的衡量?)–提供信息–软件测试不仅是在测试软件产品的本身,而且还包括软件开发的过程•任务:–寻找Bug–避免软件开发过程中的缺陷–衡量软件的品质–关注用户的需求•特点:软件测试的开销大不能进行“穷举”测试软件测试难度大按照Boehm的统计,软件测试的开销大约占总成本的30%-50%。例如:APPOLLO登月计划,80%的经费用于软件测试。例:程序P有两个整型输入量X、Y,输出量为Z,在32位机上运行。所有的测试数据组(Xi,Yi)的数目为:232×232=264,1毫秒执行1次,共需5亿年。既然不能进行“穷举”测试,又要查出尽可能多的错误,软件测试工作的难度大。只有选择“高效的测试用例”。软件测试目的、任务、特点软件测试原则•Pareto法则:80%的成就仅仅源于20%的人的努力,也称80/20法则•木桶理论:强调改进我们木板最短的那一块,只有短木板变为长木板,桶装水才会更多•测试不能证明软件无错•完全测试软件是不可能的•软件测试是有风险的行为•测试无法显示潜伏的软件缺陷•程序中存在错误的概率与该程序中已发现的错误数成比例(软件缺陷的“群集”现象?)•软件缺陷的免疫力•并非所有软件缺陷都能修复测试发现的错误中80%很可能起源于20%的模块中。应孤立这些疑点模块重点测试。测试最佳平衡点软件测试完成标准•覆盖评测:测试的完全程度如何–基于需求的测试覆盖•测试覆盖=T(p,i,x,s)/RfT•其中:T是用测试过程或测试用例表示的测试(Test)数(已计划的p、已实施的i或成功的s)。RfT(RequirementforTest)是测试需求的总数–基于代码的测试覆盖:已经执行的代码的多少•测试覆盖=Ie/TIic•其中:Ie是用代码语句、代码分支、代码路径、数据状态判定点或数据元素名表示的已执行项目数;TIic(TotalnumberofItemsinthecode)是代码中的项目总数•质量评测:测试可靠性、稳定性以及性能–缺陷报告:•缺陷分布(密度)报告允许将缺陷计数作为一个或多个缺陷参数的函数显示,描述当前软件的质量状态•缺陷龄期报告是一种特殊类型的缺陷分布报告。缺陷龄期报告显示缺陷处于特定状态下的时间长短,表示研发团队对质量的反应能力•缺陷趋势报告按照状态将缺陷计数作为时间的函数显示,用来标识软件质量变化的趋势–性能评测:侧重于获取与软件行为相关的数据•动态监测-实时获取并显示正在执行的各测试脚本的状态•响应时间/吞吐量-特定主角和/或用例的响应时间或吞吐量的评测•百分位报告-数据已收集值的百分位评测/计算•比较报告-两个(或多个)数据集之间的差异或趋势软件测试完成标准12.2软件测试过程模型•V模型:展示了在软件生命周期中何时开始测试•W模型:测试伴随着整个开发周期•H模型:改进缺陷V模型需求分析功能分析详细设计编码实现单元测试集成测试系统测试验收测试•V模型的特点就是根据瀑布模型的阶段划分•V模型揭示了软件测试活动分层和分阶段的本质特性W模型需求分析功能分析详细设计编码实现单元测试集成测试系统测试验收测试需求测试功能测试详细测试验收集成构造•V模型的局限性在于没有明确地说明早期的测试,无法体现“尽早地和不断地进行软件测试”的原则。在V模型中增加软件各开发阶段应同步进行的测试,演化为W模型。•测试的对象不仅仅是程序,需求、功能和设计同样要测试(评审?)H模型测试就绪点测试执行测试准备其他流程(如设计)•W模型和V模型都把软件的开发视为需求、设计、编码等一系列串行的活动,无法支持迭代、自发性以及变更调整。•H模型是一个软件测试管理模型•贯穿于整个产品周期,与其它流程并发的进行•当某个测试时间点就绪时,软件测试即从测试准备阶段进入测试执行阶段12.3软件测试策略•单元测试:测试软件中的基本组成单位–采用白盒方法,尽可能发现模块内部的程序差错–工作量较大–单元测试越早越好•集成测试:是把多模块按照一定的集成方法和策略,逐步组装成子系统,进而组装成整个系统的测试–多模块集成方式一般都采用渐增式,有自顶向下、自底向上和混合式(“三明治”)三种•确认测试:确认已组装的程序是否满足软件需求规格说明书•系统测试:保证所实现的系统确实是用户所要的单元测试(由程序员完成)•单元测试任务包括:–模块接口测试–模块局部数据结构测试•保证临时存储在模块内的数据在程序执行过程中完整、正确–模块边界条件测试•采用边界值分析技术–模块中所有独立执行通路测试•保证模块中每条语句至少执行一次–模块的各条错误处理通路测试•基本路径测试和循环测试•应为测试模块开发:–一个驱动模块(driver)–若干个桩模块(stub)•面向对象的软件:–最小的可测试单元是封装起来的类和对象–不能再孤立地测试单个操作,而应该把操作作为类的一部分来测试单元测试驱动模块也就是一个“主程序”,它接收测试数据,把这些数据传送给被测试的模块,并且印出有关的结果。桩模块(存根模块)代替被测试的模块所调用的模块。它使用被它代替的模块的接口,可能做最少量的数据操作,印出对入口的检验或操作结果,并且把控制归还给调用它的模块。集成测试•原因:–多模块程序的各模块之间可能有比较复杂的接口–单元测试中往往使用了测试软件,即“驱动”模块或/和“桩”模块–模块组装后的积累误差可能达到了不能容忍的地步•集成测试策略–自顶向下:优点是能较早展示整个程序的概貌,取得用户的理解和支持;缺点是测试上层模块时要使用桩模块,很难模拟出真实模块的全部功能–自底向上测试从下层模块开始,设计测试用例比较容易,但在测试的早期不能显示出整个程序的概貌–混合式测试的优点综合了以上两种测试策略的长处确认测试•目的是确认已组装的程序是否满足软件需求规格说明书(SRS)的要求–有效性测试•主要采用黑盒测试方法–配置复审•主要采用人工评审方法•确认测试是由软件开发单位组织实施的最后一项开发活动系统测试•包括:–功能测试:也称为需求测试,主要测试系统的功能性需求–性能测试:主要测试系统的非功能性需求•强度测试•安全性测试•恢复测试•软件配置审查•兼容性测试–验收测试–安装测试设计测试方案是测试阶段的关键技术问题。所谓测试方案包括具体的测试目的(例如,预定要测试的具体功能),应该输入的测试数据和预期的结果。测试用例是测试使用的文档化细则,其规定如何对软件某项功能或功能组合进行测试。测试用例应包括测试目标和被测功能、测试数据和测试步骤、测试记录和测试结果。最困难的问题是设计测试用
本文标题:第四部分 软件测试与维护软件测试
链接地址:https://www.777doc.com/doc-3232844 .html