软件测试第03章.ppt
《软件测试第03章.ppt》由会员分享,可在线阅读,更多相关《软件测试第03章.ppt(251页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第3章 软件测试基本技术3.1黑盒测试与白盒测试3.2白盒测试技术3.3黑盒测试技术3.1黑盒测试与白盒测试任何工程产品都可以使用白盒测试和黑盒测试两种方法之一进行测试。1黑盒测试黑盒测试:在测试时,把被测程序视为一个不能打开的黑盒子,完全不考虑程序的内部结构和内部特性下进行的测试。已知产品的功能设计规格和用户手册,可以进行测试证明每个功能是否实现、每个实现了的功能是否符合要求,以及产品的性能是否满足用户的要求。黑盒测试的过程黑盒测试主要是为了发现以下几类错误:1.是否有不正确或遗漏的功能?2.在接口上,输入是否能正确的接受?能否输出正确的结果?3.是否有数据结构错误或外部信息(例如数据文件)
2、访问错误?4.性能上是否能够满足要求?5.是否有初始化或终止性错误?黑盒测试的优缺点优点:1、简单,不需要了解程序的内部结构2、与软件的内部实现无关3、从用户角度出发,能很容易知道用户会用到哪些功能,遇到哪些问题4、基于说明书,知道软件实现了说明书哪些功能5、采用自动化测试,较为方便缺点:1、不可能覆盖所有的代码2、不能测试程序内部特定部位3、程序中代码未执行的代码无法发现错误4、无法发现说明书本身存在问题的问题2白盒测试白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否以经过检查。软件的白盒测试是对软件的过程性细节做细致的检查,它允许测试人员
3、利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试,通过在不同点检查程序状态,确定实际状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。白盒测试过程白盒测试须对程序模块进行如下检查:1.保证一个模块中的所有独立路径至少被使用一次2.对所有逻辑值均测试true和false。3.在循环的边界和运行的界限内执行循环体。4.检查内部数据结构以确定其有效性。白盒测试优缺点优点:1、迫使测试人员去了解软件的实现2、检测代码中的每条路径和分支3、揭示隐藏在代码中的错误4、对代码的测试进行比较彻底缺点:1、白盒测试投入较大,成本较高2、白盒测试不验证规格的正确性
4、3、无法检查代码中遗漏的路径和数据敏感性错误3.2白盒测试技术白盒测试是一种被广泛使用的逻辑测试方法,也称为结构测试或逻辑驱动测试。白盒测试对象基本上是源程序,是以程序的内部逻辑为基础的一种测试方法。白盒测试方法的分类白 盒 测 试 分 为 静静 态态 测测 试试(StaticTesting)和 动动 态态 测测 试试(DynamicTesting)两大类。静态测试不实际执行程序,静态测试的主要目的是检查软件的不实际执行程序,静态测试的主要目的是检查软件的表示和描述是否一致,没有冲突和歧义。表示和描述是否一致,没有冲突和歧义。动态测试需要实际运行测试用例,以发现软件中的错误。白盒需要实际运行测
5、试用例,以发现软件中的错误。白盒测试中的动态测试主要包括功能确认与接口测试、覆盖率测测试中的动态测试主要包括功能确认与接口测试、覆盖率测试、性能分析、内存分析等。试、性能分析、内存分析等。静态白盒测试1.程序的静态测试是在不执行程序的条件下,有条理地仔细审查软件设计、体系结构和代码,从而找出软件错误的过程。2.可尽早发现软件缺陷(开发初期),找到动态黑盒测试难以发现或者隔离的软件缺陷(测试后期)。3.也可为不了解代码细节的黑盒测试员提供思路。白盒测试静态:1、代码检查法、代码检查法2、静态结构分析法、静态结构分析法3、代码质量度量法、代码质量度量法动态:1、逻辑覆盖法、逻辑覆盖法2、基本路径测
6、试法、基本路径测试法3、控制结构测试、控制结构测试4、程序插桩、程序插桩代码检查法代码检查法代码检查包括桌面检查、代码审查和走查等,包括桌面检查、代码审查和走查等,主要检查主要检查代码和设计的一致性,代码对标准的遵循、可代码和设计的一致性,代码对标准的遵循、可读性,代码逻辑表达的正确性,代码结构的合读性,代码逻辑表达的正确性,代码结构的合理性等方面;理性等方面;发现违背程序编写标准的问题,程序中不安全、发现违背程序编写标准的问题,程序中不安全、不明确和模糊的部分,找出程序中不可移植部不明确和模糊的部分,找出程序中不可移植部分、违背程序编程风格的内容,包括变量检查、分、违背程序编程风格的内容,包
7、括变量检查、命名和类型审查、程序逻辑审查、程序语法检命名和类型审查、程序逻辑审查、程序语法检查和程序结构检查等内容查和程序结构检查等内容 代码检查法代码检查法代码检查包括代码检查包括桌面检查(桌面检查(DeskChecking)代码审查(代码审查(Inspection)代码走查(代码走查(Walkthrough)技术评审(技术评审(Review)当然在实际工作,我们完全不必要被概当然在实际工作,我们完全不必要被概念所束缚住,而应根据项目的实际情况来决定念所束缚住,而应根据项目的实际情况来决定采取哪种静态测试形采取哪种静态测试形式,不用严格去区分到底式,不用严格去区分到底是代码走查,代码审查和还
8、是技术评审。是代码走查,代码审查和还是技术评审。静态测试静态测试-桌面检查桌面检查桌面检查:由桌面检查:由程序员程序员自己检查自己编写的程序。程序员在程序自己检查自己编写的程序。程序员在程序通过编译之后,进行单元测试设计之前,对源程序代码进行分通过编译之后,进行单元测试设计之前,对源程序代码进行分析,检验,并补充相关的文档,目的是发现程序中的错误。析,检验,并补充相关的文档,目的是发现程序中的错误。检查内容:检查内容:变量和标识符的交叉引用变量和标识符的交叉引用子程序、函数、宏的调用、参数子程序、函数、宏的调用、参数等价性检查等价性检查常量检查,常量的取值、数据类型常量检查,常量的取值、数据类
9、型设计标准检查设计标准检查风格检查风格检查路径检查路径检查静态测试静态测试-桌面检查桌面检查由于程序员熟悉自己的程序及其程序设计风格,可以由于程序员熟悉自己的程序及其程序设计风格,可以节省很多的检查时间,但应避免主观片面性。这种检查应节省很多的检查时间,但应避免主观片面性。这种检查应在软件开发早期实施,最好在设计编码之后、系统测试之在软件开发早期实施,最好在设计编码之后、系统测试之前使用。桌面检查的文档是一种过渡性的文档,不是公开前使用。桌面检查的文档是一种过渡性的文档,不是公开的正式文档。通过编写文档,也是对程序的一种下意识的的正式文档。通过编写文档,也是对程序的一种下意识的检查和测试,可以
10、帮助程序员发现和抓住更多的错误。管检查和测试,可以帮助程序员发现和抓住更多的错误。管理部门也可以通过审查桌面检查文档,了解模块的质量、理部门也可以通过审查桌面检查文档,了解模块的质量、完全性、测试方法和开发人员的能力。完全性、测试方法和开发人员的能力。静态测试静态测试-代码审查和走查代码审查和走查代码审查代码审查由若干程序员和测试员组成一个会审小组,通过阅读、讨由若干程序员和测试员组成一个会审小组,通过阅读、讨论和争议,对程序进行静态分析的过程。论和争议,对程序进行静态分析的过程。优点优点比桌面检查更有效比桌面检查更有效一旦发现错误,通常就能在代码中对其进行精确定位,降一旦发现错误,通常就能在
11、代码中对其进行精确定位,降低调试成本。低调试成本。可以发现成批同一类型错误并得以修正。可以发现成批同一类型错误并得以修正。静态测试静态测试-代码审查和走查代码审查和走查代码审查小组人员代码审查小组人员(4人组成最佳人组成最佳)协调人、编码人员、模块的设计人员、一名协调人、编码人员、模块的设计人员、一名测试专家测试专家协调人职责协调人职责为代码审查分发材料为代码审查分发材料(程序清单、设计规范程序清单、设计规范),安,安排进程排进程在代码审查过程中起主导作用在代码审查过程中起主导作用记录发现的所有错误记录发现的所有错误确保所有错误随后得到改正确保所有错误随后得到改正静态测试静态测试-代码审查和走
12、查代码审查和走查代码审查过程:代码审查过程:(1)(1)协调人提前把协调人提前把代码审查常见错误列表代码审查常见错误列表、设计规格说明书、控制流、设计规格说明书、控制流程图、程序文本及有关要求、规范等分发给小组成员,作为评审的程图、程序文本及有关要求、规范等分发给小组成员,作为评审的依据。小组成员在充分阅读这些材料之后,进入审查的第二步。依据。小组成员在充分阅读这些材料之后,进入审查的第二步。常见错误列表:常见错误列表:把以往所有可能发生的常见错误罗列出来,供与会把以往所有可能发生的常见错误罗列出来,供与会者对照检查,以提高会审的实效。这个常见错误清单也叫做检查表,者对照检查,以提高会审的实效
13、。这个常见错误清单也叫做检查表,它把程序中可能发生的各种错误进行分类,对每一类列举出尽可能它把程序中可能发生的各种错误进行分类,对每一类列举出尽可能多的典型错误,然后把它们制成表格,供在会审时使用。多的典型错误,然后把它们制成表格,供在会审时使用。静态测试静态测试-代码审查和走查代码审查和走查代码审查过程:代码审查过程:(2)(2)召开程序审查会。在会上,首先由程序员逐句讲解程序的逻辑。在此过程召开程序审查会。在会上,首先由程序员逐句讲解程序的逻辑。在此过程中,程序员或其他小组成员可以提出问题,展开讨论,审查错误是否存在。中,程序员或其他小组成员可以提出问题,展开讨论,审查错误是否存在。实践表
14、明,程序员在讲解过程中能发现许多原来自己没有发现的错误,而讨实践表明,程序员在讲解过程中能发现许多原来自己没有发现的错误,而讨论和争议则促进了问题的暴露。论和争议则促进了问题的暴露。协调人要确保会议高效进行,参与者将注意力用于查将注意力用于查找错误而不是修正错误找错误而不是修正错误。修正错误由程序员在会后完成。会议结束后,程序员得到一份已发现错误清单。如果错误太多或程序要做根本改动,协调人可以再安排一次审查。静态测试静态测试-代码审查和走查代码审查和走查会议理想时间为90-120分钟。时间越长,效率越低。审查按150行/小时速度进行。每次会议审查一个或几个模块或子程序。为了使每个人都采取建设性
15、态度,最好对审查结果进行保密,仅限于参与者内部。如果让管理人员做为考评依据,则与检查过程的目的背道而驰。静态测试静态测试-代码检查和走查代码检查和走查代码审查常见错误列表(1)检查代码和设计的一致性;检查代码和设计的一致性;(2)代码的可读性以及对软件设计标准的遵循情况;代码的可读性以及对软件设计标准的遵循情况;(3)代码逻辑表达的正确性;代码逻辑表达的正确性;(4)代码结构的合理性;代码结构的合理性;(5)程序中不安全、不明确和模糊的部分;程序中不安全、不明确和模糊的部分;(6)编程风格方面的问题等。编程风格方面的问题等。静态测试静态测试-常见错误列表常见错误列表针对代码的常见错误列表针对代
16、码的常见错误列表数据引用错误数据声明错误运算错误比较错误控制流程错误接口错误输入输出错误其它检查针对代码的常见错误列表针对代码的常见错误列表1.1.数据引用错误数据引用错误变量使用前是否赋值或初始化?变量使用前是否赋值或初始化?容易引起变量使用错误,特别是对于指针或引用变量。在java中要求变量在使用前必须初始化。数组下标的范围和类型数组下标的范围和类型是否存在下标越界错误,下表类型是否为整型。通过指针引用的内存单元是否存在(虚调用)?通过指针引用的内存单元是否存在(虚调用)?如在函数返回局部变量的指针或引用时会产生虚调用错误。被引用的变量或内存的属性是否与编译器预期的一致?被引用的变量或内存
17、的属性是否与编译器预期的一致?如A类型的指针或引用是否指向的是非A类型对象。针对代码的常见错误列表2.数据声明错误数据声明错误是否所有变量都已声明?是否所有变量都已声明?绝大多数编程语言要求变量先定义后使用,可保证变量使用的安全性。默认的属性(默认值)是否正确?默认的属性(默认值)是否正确?变量的初始化是否正确?变量的初始化是否与其存储空间的类型一致?变量的初始化是否正确?变量的初始化是否与其存储空间的类型一致?是否每个变量都有正确的长度、类型和存储类别?是否每个变量都有正确的长度、类型和存储类别?是否存在相似名称的变量?是否存在相似名称的变量?3.运算错误运算错误是否存在非算术变量之间的运算
18、?是否存在非算术变量之间的运算?是否存在混合模式的运算?(是否存在混合模式的运算?(intint与与floatfloat类型,例)类型,例)是否存在不同字长变量之间的运算?(是否存在不同字长变量之间的运算?(intint与与longlong类型)类型)目标变量大小是否小于所赋值的大小?(精度损失或越界错误)目标变量大小是否小于所赋值的大小?(精度损失或越界错误)中间结果是否上溢或下溢?中间结果是否上溢或下溢?是否存在除是否存在除0 0错误?错误?操作符的优先顺序是否正确?操作符的优先顺序是否正确?整数除法是否正确?(精度问题,如整数除法是否正确?(精度问题,如2*2*(i/2i/2)=i=i)
19、针对代码的常见错误列表针对代码的常见错误列表针对代码的常见错误列表针对代码的常见错误列表intx=1;inty=2;floatz=0;z=x/y;System.out.println(z=z);OUTPUT:z=0针对代码的常见错误列表针对代码的常见错误列表4.比较错误n是否有不同类型数据的比较运算?(如日期与数字)是否有不同类型数据的比较运算?(如日期与数字)n是否有混合模式或不同长度数据的比较运算?是否有混合模式或不同长度数据的比较运算?n比较运算符是否正确?(如至多、至少,不小于)比较运算符是否正确?(如至多、至少,不小于)n布尔表达式(与、或、非)是否正确?布尔表达式(与、或、非)是否
20、正确?n比较运算符是否与布尔表达式相混合?(如比较运算符是否与布尔表达式相混合?(如2iz))5.控制流程错误控制流程错误是否所有循环都能终止?(循环结束条件是否能满足以及递归的终止条件是否能是否所有循环都能终止?(循环结束条件是否能满足以及递归的终止条件是否能满足。)满足。)是否存在由于入口条件不满足而跳过循环体?(是否存在由于入口条件不满足而跳过循环体?(do-while循环,例)循环,例)是否存在仅差一个的循环错误?(如是否存在仅差一个的循环错误?(如for(inti=0;i=80 and Y=801-TYESX+Y=140 and(x=90 or y=90)2-T3-TYESNONOO
21、EABCDOBDE50502OBCE70903OAE90901路径路径YX测试用例设计:测试用例设计:测试用例设计:a b cmid路径1 2 5 3 101282 1 2 1 0013483 4 2 1-1201358开始开始Float a,b,c,x1,x2,mid;Scanf(“%f,%f,%f”,&a,&b,&c);a!=0mid=b*b-4*a*c;mid0 x1=(-b+sqrt(mid)/(2*a);x2=(-b-sqrt(mid)/(2*a);printf(“two real rootsn”);mid=0结束结束YNYNx1=-b/(2*a);printf(“one real
22、rootn”);x1=-b/(2*a);x2=sqrt(-mid)/(2*a);printf(“two complex rootsn”);printf(“x1=%f,x2=%fn”,x1,x2);YN(0)(1)(9)(2)(3)(4)(5)(8)语句覆盖优点:直观、简单、易自动化缺点:发现错误能力很“弱”对隐藏的条件和可能到达的隐式逻辑分支,无法测试判定覆盖判定覆盖是指设计测试用例,使得程序中每一个判断的取真分支和取假分支都至少能够执行一次。不能保证一定能查出在判断的条件中存在的错误判定覆盖设计若干测试用例,使得程序中每个判定每个分支至少有一次为真值,有一次为假值保证程序中的每个分支至少执行
23、一次保证程序中的每个分支至少执行一次保证程序中的每个分支至少执行一次保证程序中的每个分支至少执行一次2.判定覆盖续1a=2,b=1,c=6可覆盖判断M的Y分支和判断Q的Y分支;a=-2,b=-1,c=-3可覆盖判断M的N分支和判断Q的N分支。o这两组测试用例可覆盖所有判定的真假分支。判断M判断Q2.判定覆盖续2a=1,b=1,c=-3可覆盖判断M的Y分支和判断Q的N分支;a=1,b=-2,c=3可覆盖判断M的N分支和判断Q的Y分支;o同样的这两组测试用例也可覆盖所有判定的真假分支。判断M判断Q判定覆盖Scanf(“%d”,&x)X!=0Y=1Y=2YN测试用例设计:测试用例设计:OBD02OA
24、D51路径路径X(O)(A)(B)(D)当当当当A=2 B=0 X=3A=2 B=0 X=3A=2 B=0 X=3A=2 B=0 X=3时,时,时,时,即可满足语句覆盖要求,即可满足语句覆盖要求,即可满足语句覆盖要求,即可满足语句覆盖要求,但但但但abdabdabdabd分支未测试分支未测试分支未测试分支未测试判定覆盖测试用例:判定覆盖测试用例:判定覆盖测试用例:判定覆盖测试用例:判定覆盖ABDABDABDABD0 0 0 00 0 0 00 0 0 02 2 2 2ACEACEACEACE3 3 3 30 0 0 02 2 2 21 1 1 1执行路径执行路径执行路径执行路径X X X XB
25、 B B BA A A AA1 AND A1 AND B=0B=0A=2 OR A=2 OR X1X1X=X+1X=X/AYNYN(A)(B)(C)(D)(E)开始开始结束结束X=80 and Y=801-TYESX+Y=140 and(x=90 or y=90)2-T3-TYESNONOOEABCD测试用例设计:测试用例设计:XY路径1 9090OAE2 9030OBDE3 9070OBCE例3-2测试用例设计:a b cmid路径1 2 5 3 101282 1 2 1 0013483 4 2 1-12013584 0 2 109开始开始Float a,b,c,x1,x2,mid;Scan
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 测试 03
限制150内