版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章编程与测试第5章编程与测试第5章编程与测试5.1开发工具的选择5.2程序设计风格5.3软件测试的概念5.4软件测试的方法5.5测试用例设计5.6测试过程5.7调试/75第5章编程与测试5.1开发工具的选择/755.3软件测试的概念5.3.1认识测试的重要性5.3.2软件测试的目的5.3.3软件测试的原则、种类、文档/755.3软件测试的概念5.3.1认识测试的重要性/755.3.1认识测试的重要性测试的重要性测试,是软件质量保证的关键活动测试,是软件质量保证的最后一道防线软件的人编的,错误是难免的!错误是严重的,教训是惨痛的!关于测试活动/755.3.1认识测试的重要性测试的重要性/75测试的重要性软件测试是保证软件质量的关键步骤,它是对软件规格说明、设计和编码的最后复审,是软件质量保证的最后一道防线/75测试的重要性软件测试是保证软件质量的关键步骤,它是对软件规格质量控制技术质量控制活动分类开发方法学配置管理验证技术评审质量控制避免错误正确性验证性能调试单元测试集成测试确认测试检错调试测试原子事务模块冗余性容错/75质量控制技术质量控制活动分类开发方法学配置管理验证技术评测试的重要性软件生存期各阶段间都需要确保正确性但是,软件的人编的,错误是难免的!/75测试的重要性软件生存期各阶段间都需要确保正确性/75用户要求用户:我要什么?运行结果计算机:程序运行得到的结果源程序程序员:我要让计算机什么做?设计说明书设计员:我要让软件做什么?需求说明书分析员:我可以提供什么?12345理解正确性表达正确性理解正确性设计正确性表达正确性理解正确性编码正确性运行正确性输入正确性相符吗?
/75用户要求用户:运行结果计算机:源程序程序员:设计说明书设计员软件的人编的,错误是难免的!前期各阶段的技术审查不可能发现所有的错误此外,在编码过程中还不可避免地会引入新的错误。/75软件的人编的,错误是难免的!前期各阶段的技术审查不可能发现所偏差就像阴魂不散,在不知不觉中产生!/75偏差就像阴魂不散,在不知不觉中产生!/75错误是严重的!开发前期出现的错误呈现幅射和扩大的趋势;前期的错误,到后期再发现并修改,非常困难。/75错误是严重的!开发前期出现的错误呈现幅射和扩大的趋势;/7计划需求分析设计编码测试AAB/75计划需求设编测AAB/75/75/75教训是惨痛的!1994-1995,迪斯尼的狮子王系统不支持问题Intel的pentium处理器1994年浮点除法缺陷2000年8月28日,1.13MHZ处理器一个可能导致运行程序被挂起的执行指令问题1999年12月3日,美国航天局火星极地登陆飞船失踪1991年爱国者导弹防御系统系统时钟错误积累造成跟踪系统失去精确度千年虫,世界各地解决2000年错误超过数亿美元/75教训是惨痛的!1994-1995,迪斯尼的狮子王系统不支持问测试的重要性总之,如果在软件投入生产性运行之前,没有发现并纠正软件中的大部分差错,则这些差错迟早会在生产过程中暴露出来,那时不仅改正这些错误的代价更高,还会造成很恶劣的后果。因此,无论怎样强调软件测试的重要性和它对软件可靠性的影响都不过分/75测试的重要性总之,如果在软件投入生产性运行之前,没有发现并纠对测试要评价最后,要对测试的结果进行收集和评价,以评估软件的可靠性/75对测试要评价最后,要对测试的结果进行收集和评价,以评估软件的软件测试的工作量资料表明,测试工作量占开发总工作量的40%以上,在极端情况,测试关乎人的生命安全的软件所花费的成本,可能相当于软件工程其他开发步骤总成本的3倍到5倍。绝不要以为写出程序之后软件开发工作就接近完成了,大约还有同样多的开发工作量需要完成。/75软件测试的工作量资料表明,测试工作量占开发总工作量的40%以关于测试活动,测试活动贯穿开发周期全程需求&系统测试计划概设&集成测试计划详设&单元测试计划编码系统测试集成测试单元测试/75关于测试活动,测试活动贯穿开发周期全程需求&系统测试计划概设关于测试活动测试(对测试计划的计划)横跨两个阶段,编码与测试通常在编写出每个模块之后就对它做必要的测试,称为单元测试,模块的编写者和测试者是同一个人,编码和单元测试属于软件生命周期的同一个阶段。在编程和单元测试阶段结束之后,进入生命周期的一个独立的阶段,称为综合测试,通常由专门的测试人员完成/75关于测试活动测试(对测试计划的计划)横跨两个阶段,编码与测试综合测试阶段/75综合测试阶段/755.3软件测试的概念5.3.1认识测试的重要性5.3.2软件测试的目的5.3.3软件测试的原则、种类、文档/755.3软件测试的概念5.3.1认识测试的重要性/755.3.2软件测试的目的软件测试的定义正确认识软件测试的目的/755.3.2软件测试的目的软件测试的定义/75(1)软件测试的定义:G.Myers(迈尔斯)给出了关于测试的一些规则,可以看作是对软件测试的定义:测试是为了发现程序中的错误而执行程序的过程;好的测试方案是能够发现迄今为止尚未发现的错误的测试方案;成功的测试是发现了至今为止尚未发现的错误的测试。/75(1)软件测试的定义:G.Myers(迈尔斯)给出了关于测试对软件测试定义的理解软件测试,是为了发现错误而执行程序的过程;具体讲,软件测试是执行测试计划,运用测试用例去执行程序,以发现程序错误的过程。(能不能发现错识,“测试用例”起着关键作用)好的测试方案是能够发现迄今为止尚未发现的错误的测试方案;成功的测试是发现了至今为止尚未发现的错误的测试。能不能发现错误,是判定测试是否成功的标准,能不能发现新的错误,是判定测试方案(数据)优劣的标准;由此说,根据软件开发阶段的规格说明和程序的内部结构而精心设计测试方案(测试用例),是测试活的关键一步。/75对软件测试定义的理解软件测试,是为了发现错误而执行程序的过程(2)正确认识测试活动的目的由测试定义,可见测试目的归纳为:在软件投入生产性运行之前,尽可能多地发现软件中的错误,把好最后一道质量关,最终评价软件符合用户需求的程度、评价软件的可靠性。/75(2)正确认识测试活动的目的由测试定义,可见测试目的归纳为:软件测试的目的错误认识G.Myers(迈尔斯)对测试的解释与一般人的理解是相反的,如果不假思索,你会认为:“测试是为了表明程序是正确的”;“成功的测试是没有发现错误的测试”因为测试只使用了少量数据,不可能把软件可以使用的数据全部拿来测试一遍,所以测试是不完整、不彻底、无法穷举的。E.W.Dijkstra指出:“程序测试只能证明错误的存在,但不能证明错误不存在。”/75软件测试的目的错误认识G.Myers(迈尔斯)对测试的解释与对测试目的的认识决定了测试方案的设计理念测试方案(测试用例或测试数据)是为了实现测试目的,而精心挑选的,如果为了表明程序是正确的而进行测试,就会设计一些不易暴露错误的测试方案;相反,如果测试是为了发现程序中的错误,就会力求设计出最能暴露错误的测试方案,这才是我们追求的。/75对测试目的的认识决定了测试方案的设计理念测试方案(测试用例或对测试目的的认识决定了测试方案的设计理念测试人员努力设计出一系列测试方案(又称,测试用例),目的是竭力证明程序中有错误,且不能按照预定要求正确工作。直白地讲,测试是为了挑毛病的。表面看来,这与软件工程的开发活动目标是相反的,但实际上,暴露问题并不是软件测试的最终目的,发现问题是为了解决问题所以,测试的根本目的是尽可能多地发现并排除软件中潜藏的错误,最终把一个高质量的软件系统交付用户。/75对测试目的的认识决定了测试方案的设计理念测试人员努力设计出一从测试目的看,谁来执行测试活动最好?由于测试的目标是暴露程序中的错误,从心理学角度看,由程序员自己进行测试是不恰当的。因此,在综合测试阶段通常由其他人员组成测试小组来完成测试活动。/75从测试目的看,谁来执行测试活动最好?由于测试的目标是暴露程序对测试活动正确认识应该认识到测试决不能证明程序中没错误;即使经过了最严格的测试之后,程序中仍然可能还有潜藏的错误;测试只能查找出程序中的错误,不能证明程序中没有错误/75对测试活动正确认识应该认识到测试决不能证明程序中没错误;/5.3软件测试的概念5.3.1认识测试的重要性5.3.2软件测试的目的5.3.3软件测试的原则、种类、文档/755.3软件测试的概念5.3.1认识测试的重要性/755.3.2软件测试准则、种类、文档软件测试准则测试活动和种类测试文档/755.3.2软件测试准则、种类、文档软件测试准则/75(1)软件测试准则:为了实现成功的测试,在测试方案的设计和执行两个关键环节,必须把握一些准则:/75(1)软件测试准则:为了实现成功的测试,在测试方案的设计和执(1)软件测试准则:所有测试都应该能追溯到用户需求!应该远在测试开始之前就制定出测试计划!把Pareto(柏拉图20/80原则)原理应用到软件测试中应该从“小规模”测试开始,并逐步扩展测试范围穷举测试是不可能的应该由独立的第三方执行测试任务/75(1)软件测试准则:所有测试都应该能追溯到用户需求!/75所有测试都应该能追溯到用户需求软件测试的目标是发现错误,而从用户的角度看,最严重的错误是导致程序不能满足用户需求的那些错误。/75所有测试都应该能追溯到用户需求软件测试的目标是发现错误,而从应该远在测试开始之前就制定出测试计划!/75应该远在测试开始之前就制定出测试计划!/75把Pareto原理应用到软件测试中柏拉图的80/20原则测试发现的错误中的80%很可能是由程序中20%的模块造成的;/75把Pareto原理应用到软件测试中柏拉图的80/20原则/从“小规模”测试开始,逐步扩展测试范围通常,首先重点测试单个程序模块,然后把测试重点转向在集成的模块簇中寻找错误,最后在整个系统中寻找错误。/75从“小规模”测试开始,逐步扩展测试范围通常,首先重点测试单个穷举测试是不可能的所谓“穷举”就是把程序所有可能的情况都检查一遍由于受时间、人力和资源限制,不可能测试每个可能的情况例如,测试一个需要输入三个整数值的程序.每个整数可能取值有216个,三个整数的排列组合为:216*216*216=3*1014,假设执行一次为1毫秒,则需要1万年!/75穷举测试是不可能的所谓“穷举”就是把程序所有可能的情况都检查穷举测试是不可能的因为,穷举测试是不可能的,所以,测试绝不能证明程序中没有错误!!!但是,精心地设计测试方案,有可能充分覆盖程序逻辑,并使程序达到所要求的可靠性。/75穷举测试是不可能的因为,穷举测试是不可能的,所以,测试绝不能应该由独立的第三方从事测试工作为了最大可能性发现错误,应有第三方执行测试由于有“心理”和“认识”上的定式,程序员不是最佳测试人选(通常他们主要承担模块测试,即单元测试,综合测试阶段应有专门的测试人员完成)/75应该由独立的第三方从事测试工作为了最大可能性发现错误,应有第其他说法:应当把“尽早地和不断地进行软件测试”作为软件开发者的座右铭。程序员应避免检查自己的程序。程序修改后要回归测试在设计测试用例时,应包括合理的合理条件和不合理的输入条件。/75其他说法:应当把“尽早地和不断地进行软件测试”作为软件开发者其他说法:充分注意测试中的群集现象。经验表明,测试后程序中残存的错误数目与该程序中已发现的错误数目成正比。程序中的问题根源可能在开发前期的各阶段,解决、纠正错误也必须追溯到前期工作。应长期保留测试用例,直至系统废弃。/75其他说法:充分注意测试中的群集现象。经验表明,测试后程序中残测试的特性
挑剔性“吹毛求疵”“鸡蛋里面头挑骨头”复杂性例如一个程序的功能是输入3个数作为三角形的3条边,然后鉴别这一三角形的类别。不彻底性例如有人开发了一个C语言的编译程序,要对他进行彻底的测试,需要设计多少个测试用例呢?经济性/75测试的特性
挑剔性/75动态测试静态分析器分析代码评审白盒测试方法黑盒测试方法代码会审走查办公桌检查静态分析软件测试的策略和方法(2)测试的种类/75动态测试静态分析器分析代码评审白盒测试方法黑盒测试方法代码会静态和动态测试汽车的检查过程:踩油门看车漆打开前盖检查发动汽车听听发动机声音上路行使静态测试动态测试/75静态和动态测试汽车的检查过程:静态测试动态测试/75(3)测试的文档测试计划主要是“测试内容说明”,包括:测试项目的名称,各项测试的目的、步骤和进度,以及测试用例的设计等。测试报告主要是:“测试结果”,包括测试项目名称,实测结果与期望结果的比较,发现的问题,以及测试达到的效果等。测试用例={测试数据+期望结果}/75(3)测试的文档测试计划/75测试与开发迭代/75测试与开发迭代/75end/75end/75第5章编程与测试第5章编程与测试第5章编程与测试5.1开发工具的选择5.2程序设计风格5.3软件测试的概念5.4软件测试的方法5.5测试用例设计5.6测试过程5.7调试/75第5章编程与测试5.1开发工具的选择/755.3软件测试的概念5.3.1认识测试的重要性5.3.2软件测试的目的5.3.3软件测试的原则、种类、文档/755.3软件测试的概念5.3.1认识测试的重要性/755.3.1认识测试的重要性测试的重要性测试,是软件质量保证的关键活动测试,是软件质量保证的最后一道防线软件的人编的,错误是难免的!错误是严重的,教训是惨痛的!关于测试活动/755.3.1认识测试的重要性测试的重要性/75测试的重要性软件测试是保证软件质量的关键步骤,它是对软件规格说明、设计和编码的最后复审,是软件质量保证的最后一道防线/75测试的重要性软件测试是保证软件质量的关键步骤,它是对软件规格质量控制技术质量控制活动分类开发方法学配置管理验证技术评审质量控制避免错误正确性验证性能调试单元测试集成测试确认测试检错调试测试原子事务模块冗余性容错/75质量控制技术质量控制活动分类开发方法学配置管理验证技术评测试的重要性软件生存期各阶段间都需要确保正确性但是,软件的人编的,错误是难免的!/75测试的重要性软件生存期各阶段间都需要确保正确性/75用户要求用户:我要什么?运行结果计算机:程序运行得到的结果源程序程序员:我要让计算机什么做?设计说明书设计员:我要让软件做什么?需求说明书分析员:我可以提供什么?12345理解正确性表达正确性理解正确性设计正确性表达正确性理解正确性编码正确性运行正确性输入正确性相符吗?
/75用户要求用户:运行结果计算机:源程序程序员:设计说明书设计员软件的人编的,错误是难免的!前期各阶段的技术审查不可能发现所有的错误此外,在编码过程中还不可避免地会引入新的错误。/75软件的人编的,错误是难免的!前期各阶段的技术审查不可能发现所偏差就像阴魂不散,在不知不觉中产生!/75偏差就像阴魂不散,在不知不觉中产生!/75错误是严重的!开发前期出现的错误呈现幅射和扩大的趋势;前期的错误,到后期再发现并修改,非常困难。/75错误是严重的!开发前期出现的错误呈现幅射和扩大的趋势;/7计划需求分析设计编码测试AAB/75计划需求设编测AAB/75/75/75教训是惨痛的!1994-1995,迪斯尼的狮子王系统不支持问题Intel的pentium处理器1994年浮点除法缺陷2000年8月28日,1.13MHZ处理器一个可能导致运行程序被挂起的执行指令问题1999年12月3日,美国航天局火星极地登陆飞船失踪1991年爱国者导弹防御系统系统时钟错误积累造成跟踪系统失去精确度千年虫,世界各地解决2000年错误超过数亿美元/75教训是惨痛的!1994-1995,迪斯尼的狮子王系统不支持问测试的重要性总之,如果在软件投入生产性运行之前,没有发现并纠正软件中的大部分差错,则这些差错迟早会在生产过程中暴露出来,那时不仅改正这些错误的代价更高,还会造成很恶劣的后果。因此,无论怎样强调软件测试的重要性和它对软件可靠性的影响都不过分/75测试的重要性总之,如果在软件投入生产性运行之前,没有发现并纠对测试要评价最后,要对测试的结果进行收集和评价,以评估软件的可靠性/75对测试要评价最后,要对测试的结果进行收集和评价,以评估软件的软件测试的工作量资料表明,测试工作量占开发总工作量的40%以上,在极端情况,测试关乎人的生命安全的软件所花费的成本,可能相当于软件工程其他开发步骤总成本的3倍到5倍。绝不要以为写出程序之后软件开发工作就接近完成了,大约还有同样多的开发工作量需要完成。/75软件测试的工作量资料表明,测试工作量占开发总工作量的40%以关于测试活动,测试活动贯穿开发周期全程需求&系统测试计划概设&集成测试计划详设&单元测试计划编码系统测试集成测试单元测试/75关于测试活动,测试活动贯穿开发周期全程需求&系统测试计划概设关于测试活动测试(对测试计划的计划)横跨两个阶段,编码与测试通常在编写出每个模块之后就对它做必要的测试,称为单元测试,模块的编写者和测试者是同一个人,编码和单元测试属于软件生命周期的同一个阶段。在编程和单元测试阶段结束之后,进入生命周期的一个独立的阶段,称为综合测试,通常由专门的测试人员完成/75关于测试活动测试(对测试计划的计划)横跨两个阶段,编码与测试综合测试阶段/75综合测试阶段/755.3软件测试的概念5.3.1认识测试的重要性5.3.2软件测试的目的5.3.3软件测试的原则、种类、文档/755.3软件测试的概念5.3.1认识测试的重要性/755.3.2软件测试的目的软件测试的定义正确认识软件测试的目的/755.3.2软件测试的目的软件测试的定义/75(1)软件测试的定义:G.Myers(迈尔斯)给出了关于测试的一些规则,可以看作是对软件测试的定义:测试是为了发现程序中的错误而执行程序的过程;好的测试方案是能够发现迄今为止尚未发现的错误的测试方案;成功的测试是发现了至今为止尚未发现的错误的测试。/75(1)软件测试的定义:G.Myers(迈尔斯)给出了关于测试对软件测试定义的理解软件测试,是为了发现错误而执行程序的过程;具体讲,软件测试是执行测试计划,运用测试用例去执行程序,以发现程序错误的过程。(能不能发现错识,“测试用例”起着关键作用)好的测试方案是能够发现迄今为止尚未发现的错误的测试方案;成功的测试是发现了至今为止尚未发现的错误的测试。能不能发现错误,是判定测试是否成功的标准,能不能发现新的错误,是判定测试方案(数据)优劣的标准;由此说,根据软件开发阶段的规格说明和程序的内部结构而精心设计测试方案(测试用例),是测试活的关键一步。/75对软件测试定义的理解软件测试,是为了发现错误而执行程序的过程(2)正确认识测试活动的目的由测试定义,可见测试目的归纳为:在软件投入生产性运行之前,尽可能多地发现软件中的错误,把好最后一道质量关,最终评价软件符合用户需求的程度、评价软件的可靠性。/75(2)正确认识测试活动的目的由测试定义,可见测试目的归纳为:软件测试的目的错误认识G.Myers(迈尔斯)对测试的解释与一般人的理解是相反的,如果不假思索,你会认为:“测试是为了表明程序是正确的”;“成功的测试是没有发现错误的测试”因为测试只使用了少量数据,不可能把软件可以使用的数据全部拿来测试一遍,所以测试是不完整、不彻底、无法穷举的。E.W.Dijkstra指出:“程序测试只能证明错误的存在,但不能证明错误不存在。”/75软件测试的目的错误认识G.Myers(迈尔斯)对测试的解释与对测试目的的认识决定了测试方案的设计理念测试方案(测试用例或测试数据)是为了实现测试目的,而精心挑选的,如果为了表明程序是正确的而进行测试,就会设计一些不易暴露错误的测试方案;相反,如果测试是为了发现程序中的错误,就会力求设计出最能暴露错误的测试方案,这才是我们追求的。/75对测试目的的认识决定了测试方案的设计理念测试方案(测试用例或对测试目的的认识决定了测试方案的设计理念测试人员努力设计出一系列测试方案(又称,测试用例),目的是竭力证明程序中有错误,且不能按照预定要求正确工作。直白地讲,测试是为了挑毛病的。表面看来,这与软件工程的开发活动目标是相反的,但实际上,暴露问题并不是软件测试的最终目的,发现问题是为了解决问题所以,测试的根本目的是尽可能多地发现并排除软件中潜藏的错误,最终把一个高质量的软件系统交付用户。/75对测试目的的认识决定了测试方案的设计理念测试人员努力设计出一从测试目的看,谁来执行测试活动最好?由于测试的目标是暴露程序中的错误,从心理学角度看,由程序员自己进行测试是不恰当的。因此,在综合测试阶段通常由其他人员组成测试小组来完成测试活动。/75从测试目的看,谁来执行测试活动最好?由于测试的目标是暴露程序对测试活动正确认识应该认识到测试决不能证明程序中没错误;即使经过了最严格的测试之后,程序中仍然可能还有潜藏的错误;测试只能查找出程序中的错误,不能证明程序中没有错误/75对测试活动正确认识应该认识到测试决不能证明程序中没错误;/5.3软件测试的概念5.3.1认识测试的重要性5.3.2软件测试的目的5.3.3软件测试的原则、种类、文档/755.3软件测试的概念5.3.1认识测试的重要性/755.3.2软件测试准则、种类、文档软件测试准则测试活动和种类测试文档/755.3.2软件测试准则、种类、文档软件测试准则/75(1)软件测试准则:为了实现成功的测试,在测试方案的设计和执行两个关键环节,必须把握一些准则:/75(1)软件测试准则:为了实现成功的测试,在测试方案的设计和执(1)软件测试准则:所有测试都应该能追溯到用户需求!应该远在测试开始之前就制定出测试计划!把Pareto(柏拉图20/80原则)原理应用到软件测试中应该从“小规模”测试开始,并逐步扩展测试范围穷举测试是不可能的应该由独立的第三方执行测试任务/75(1)软件测试准则:所有测试都应该能追溯到用户需求!/75所有测试都应该能追溯到用户需求软件测试的目标是发现错误,而从用户的角度看,最严重的错误是导致程序不能满足用户需求的那些错误。/75所有测试都应该能追溯到用户需求软件测试的目标是发现错误,而从应该远在测试开始之前就制定出测试计划!/75应该远在测试开始之前就制定出测试计划!/75把Pareto原理应用到软件测试中柏拉图的80/20原则测试发现的错误中的80%很可能是由程序中20%的模块造成的;/75把Pareto原理应用到软件测试中柏拉图的80/20原则/从“小规模”测试开始,逐步扩展测试范围通常,首先重点测试单个程序模块,然后把测试重点转向在集成的模块簇中寻找错误,最后在整个系统中寻找错误。/75从“小规模”测试开始,逐步扩展测试范围通常,首先重点测试单个穷举测试是不可能的所谓“穷举”就是把程序所有可能的情况都检查一遍由于受时间、人力和资源限制,不可能测试每个可能的情况例如,测试一个需要输入三个整数值的程序.每个整数可能取值有216个,三个整数的排列组合为:216*216*216=3*10
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论