《软件工程第六章软件测试.ppt》由会员分享,可在线阅读,更多相关《软件工程第六章软件测试.ppt(66页珍藏版)》请在第壹文秘上搜索。
1、第第6 6讲讲 软件测试软件测试6.1 6.1 软件测试的基本概念软件测试的基本概念6.2 6.2 测试的原则、类型和文档测试的原则、类型和文档6.3 6.3 黑盒测试方法黑盒测试方法6.4 6.4 白盒测试方法白盒测试方法6.5 6.5 软件测试的基本过程软件测试的基本过程6.6 6.6 软件纠错软件纠错(1 1)什么是软件测试?其目的是什么?)什么是软件测试?其目的是什么?(2 2)什么是成功的测试?什么是失败的测试?)什么是成功的测试?什么是失败的测试?(3 3)什么是好的软件测试?)什么是好的软件测试?(4 4)穷举测试能够把所有的错误找完吗?)穷举测试能够把所有的错误找完吗?(5 5
2、)通过测试能够证明软件无错吗?)通过测试能够证明软件无错吗?(6 6)测试的基本工作有哪些?)测试的基本工作有哪些?(7 7)什么是测试用例?)什么是测试用例?(8 8)测试由谁来完成?)测试由谁来完成?(9 9)测试与纠错有何关系?)测试与纠错有何关系?(1010)纠错由谁来完成?)纠错由谁来完成?(1111)测试的信息流之间有何关系?)测试的信息流之间有何关系?6.1 6.1 软件测试的基本概念软件测试的基本概念 (1 1)什么是软件测试?其目的是什么?)什么是软件测试?其目的是什么?测试的定义测试的定义软件(程序)测试是为了发现错误而执行程软件(程序)测试是为了发现错误而执行程序的过程。
3、序的过程。测试的目的测试的目的发现程序的错误。发现程序的错误。测试为什么重要nARIANE火箭耗资70亿美元,1996年发射37秒后爆炸nbeginsensor_get(vertical_veloc_sensor);sensor_get(horizontal_veloc_sensor); vertical_veloc_bias := integer(vertical_veloc_sensor);horizontal_veloc_bias := integer(horizontal_veloc_sensor); . exceptionwhen numeric_error = calculate_
4、vertical_veloc();when others = use_irs1(); end; v发射失败的原因 程序中试图将6464位浮点数转换成1616位整数时的溢出错误 如果看其浮点转换程序,并没有任何问题。问题在于他们复用了Ariane 4的部分软件需求文档因而软件工程师不知道其Ariane 5的水平加速度比Ariane 4快5倍因此要求额外3位整数存储,所以其背后的真正原因是系统需求。 测试为什么重要测试为什么重要n 爱国者导弹第一次海湾战争期间,美国爱国者导弹系统拦截伊拉克飞毛腿导弹失败。导弹摧毁了一个美军兵营,造成28名士兵死亡,100人受伤。v 起因 导弹拦截软件的取整错误导致
5、计时不正确,令爱国者忽略了飞毛腿导弹 (2 2)什么是成功的测试?什么是失败的测试?)什么是成功的测试?什么是失败的测试?什么是成功的测试?什么是成功的测试?能够找到至今尚未发现的错误。能够找到至今尚未发现的错误。什么是失败的测试?什么是失败的测试?没有找到至今尚未发现的错误。没有找到至今尚未发现的错误。(3 3)什么是好的软件测试?什么是好的软件测试?用最少的代价用最少的代价能够找到至今尚未发现的更多的错误。能够找到至今尚未发现的更多的错误。测试工作反映了经济学的观点测试工作反映了经济学的观点。(4 4)穷举测试能够把所有的错误找完吗?)穷举测试能够把所有的错误找完吗?例例1 1 对于程序内
6、部路径的测对于程序内部路径的测试试如图中所示从如图中所示从A A到到B B的中间有一的中间有一个个2020次的循环,循环中有次的循环,循环中有5 5条路条路径,那么从径,那么从A A到到B B的独立路径数的独立路径数约为约为10101414(即(即5 520205 519195 51 1)例例2 2 对于程序功能的测试对于程序功能的测试一个程序需要一个程序需要3 3个整型数的输入。个整型数的输入。假设计算机字长是假设计算机字长是1616位,则每位,则每个整数可能取值有个整数可能取值有2 21616个,那么个,那么3 3个输入整数的各种可能值的情个输入整数的各种可能值的情况约为况约为2 2161
7、6 2 21616 2 21616 2 24848 3 3 10 101414AB20(5 5)通过测试能够证明软件无错吗?)通过测试能够证明软件无错吗?穷举测试是不可取的。穷举测试是不可取的。通过测试不可能把所有的软件错误找完。通过测试不可能把所有的软件错误找完。因此,通过测试不可能证明软件不存在错误。因此,通过测试不可能证明软件不存在错误。测试只能证明错误存在,而不能证明错误不存在(不彻底性)。测试只能证明错误存在,而不能证明错误不存在(不彻底性)。(6 6)测试的基本工作有哪些测试的基本工作有哪些?制定测试计划制定测试计划建立测试环境建立测试环境设计测试用例设计测试用例执行测试执行测试结
8、果分析结果分析完成测试报告完成测试报告(7 7)什么是测试用例?)什么是测试用例?测试用例测试用例(Test Case)(Test Case)测试数据测试数据+ +期望的结果期望的结果测试用例的重要作用:测试用例是连接测试计测试用例的重要作用:测试用例是连接测试计划与实施测试的桥梁。划与实施测试的桥梁。设计测试用例是搞好软件测试的关键。设计测试用例是搞好软件测试的关键。(8 8)测试由谁来完成?)测试由谁来完成?一般情况下,应该由非程序员或非程序开发机一般情况下,应该由非程序员或非程序开发机构来完成。构来完成。这样做的主要原因主要:这样做的主要原因主要:从心理学的角度考虑;从心理学的角度考虑;
9、从质量的观点看,应该有专门的机构或组织来完成。从质量的观点看,应该有专门的机构或组织来完成。(9 9)测试与纠错有何关系?)测试与纠错有何关系?纠错的目的和任务:根据测试所发现的错误,确定错纠错的目的和任务:根据测试所发现的错误,确定错误发生的位置、性质,并纠正这些错误。误发生的位置、性质,并纠正这些错误。纠错的过程就是程序调试的过程。纠错的过程就是程序调试的过程。测试是纠错测试是纠错/排错排错/调试的基础和依据;纠错需要测试所调试的基础和依据;纠错需要测试所发现的错误现象,才能确定错误发生的性质、位置,发现的错误现象,才能确定错误发生的性质、位置,并纠正这些错误。并纠正这些错误。(1010)
10、纠错由谁来完成?)纠错由谁来完成?程序员程序员(测试数据测试数据)(1111)测试的信息流之间有何关系?)测试的信息流之间有何关系?测试过程的输入测试过程的输入测试过程中需要测试过程中需要3 3类输入类输入( (见上图见上图) ):软件配置软件配置包括软件需求规格说明、软件设计规格说明、源代码等。包括软件需求规格说明、软件设计规格说明、源代码等。测试配置测试配置包括测试计划、测试用例、测试驱动程序等。包括测试计划、测试用例、测试驱动程序等。测试工具测试工具为测试的实施提供某种服务,以减轻完成测试任务中的手工劳动。为测试的实施提供某种服务,以减轻完成测试任务中的手工劳动。测试工具测试工具测试数据
11、自动生成程序测试数据自动生成程序静态分析程序静态分析程序动态分析程序动态分析程序测试结果分析程序测试结果分析程序驱动测试的测试数据库等等。驱动测试的测试数据库等等。分析测试结果分析测试结果测试完成后,要对所有的测试结果进行分析,如果发现测试完成后,要对所有的测试结果进行分析,如果发现软件有错误,就要排错并修正有关文档,接着再测试,软件有错误,就要排错并修正有关文档,接着再测试,直到通过为止。直到通过为止。如果经常出现需要修改设计的严重错误,则软件质量与如果经常出现需要修改设计的严重错误,则软件质量与可靠性值得怀疑,需进一步测试。可靠性值得怀疑,需进一步测试。如果测试未发现错误,则应重新审查测试
12、配置如果测试未发现错误,则应重新审查测试配置。6.2 6.2 测试的原则、类型和文档测试的原则、类型和文档1)测试原则(1)所有的测试都应追溯到用户需求。软件测试的目标在于揭示错误。而最严重的错误是那些导致程序无法满足需求的错误。(2)充分注意测试中的群集现象。在被测程序段中,若发现错误数目多,则残存错误数目也比较多。因此,应当对错误群集的程序段进行重点测试,以提高测试投资的效益。(3)测试应从“小规模”开始,逐步转向”大规模”。(4)测试应该由非程序员或非开发机构来进行。(5)对于非法的和非预期的输入情况也要象正常测试一样,编写测试用例。检查程序是否做了要做的事仅仅是成功的一半,另一半是看程
13、序是否做了不该做的事。(6)妥善保存测试计划、测试用例、出错统计和最终分析报告。回归测试 2)软件测试方法(1)静态分析:通过对被测程序的静态检查,发现代码中潜在的错误。静态分析包括2种方式: 静态分析器分析(自动方式);如PMD 扫描java源代码,查找潜在的问题:可能的bugs,如空的try/catch/finally/switch声明 死亡的代码,没有使用的本地变量,参数和私有方法 过于复杂的表达式,如不必要的if表达式 重复的代码,拷贝、粘贴的代码 代码评审(人工方式),包括代码会审、走查、办公桌检查等。 (2)动态测试(简称测试):将被测程序在机器上运行来发现程序中的错误。动态测试包
14、括2类方式: 黑盒测试(测试程序的功能) 白盒测试(测试程序的结构) 3 3)测试的文档)测试的文档(1)测试计划主体是测试内容说明。包括:测试项目名称,各项测试的目的、步骤、进度,测试用例的设计等。 (2)测试报告主体是测试结果。包括:测试项目名称,实测结果与期望结果的比较,发现的问题,测试达到的效果等。(3)测试用例(1)黑盒测试的基本概念不考虑程序的内部结构和处理过程,只在程序的接口处进行测试,以检查程序功能是否能按规格说明书中的要求正常实现。黑盒测试又称为功能测试,其主要目的是为了发现程序在功能方面的错误。6.3 6.3 黑盒测试方法黑盒测试方法n黑盒法分类黑盒法分类等等价价类类化化分
15、分法法边边界界值值分分析析法法错错误误猜猜测测法法因因果果图图法法(2 2)等价类划分法)等价类划分法基本思想:根据程序的I/O特性,将程序的输入域划分为有限个等价区段 “等价类”,并从等价类中选出最有“代表性”的用例。 等价类:是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的。测试某等价类的代表值就等价于对这一类其它值的测试。如果一个测试用例不能检测出某个错误,那么等价类中其它测试用例也不能发现这一错误。等价类分为: 有效等价类 对于程序的规格说明是合理的、有意义的输入数据构成的集合。 无效等价类 对于程序的规格说明,是不合理的,是没有意义的输入数据构成的集合
16、。等价类划分法的步骤等价类划分法的步骤划分等价类划分等价类合理的(有效的)、不合理的(无效的)合理的(有效的)、不合理的(无效的)2 2类类找出测试用例找出测试用例给每个等价类规定一个惟一的编号;给每个等价类规定一个惟一的编号;设计一个新的测试用例,使其尽可能多地覆盖未被覆设计一个新的测试用例,使其尽可能多地覆盖未被覆盖的有效等价类,直到所有合理等价类被覆盖完为止;盖的有效等价类,直到所有合理等价类被覆盖完为止;设计一个测试用例,使其仅仅覆盖一个未被覆盖的无设计一个测试用例,使其仅仅覆盖一个未被覆盖的无效等价类,直到所有不合理等价类被覆盖完为止。效等价类,直到所有不合理等价类被覆盖完为止。例例 如下是一个程序的功能描述,用等价类划分法设计测试用例。如下是一个程序的功能描述,用等价类划分法设计测试用例。功能描述:某城市的电话号功能描述:某城市的电话号码由码由3 3部分组成。假定被测程部分组成。假定被测程序能接收一切符合下述规定序能接收一切符合下述规定的电话号码,拒绝所有不符的电话号码,拒绝所有不符合规定的电话号码。合规定的电话号码。地区码:空白或地区码:空白或3 3位数字;位数字;前缀: