白盒测试 2.docx

上传人:b****5 文档编号:28809574 上传时间:2023-07-19 格式:DOCX 页数:21 大小:107.62KB
下载 相关 举报
白盒测试 2.docx_第1页
第1页 / 共21页
白盒测试 2.docx_第2页
第2页 / 共21页
白盒测试 2.docx_第3页
第3页 / 共21页
白盒测试 2.docx_第4页
第4页 / 共21页
白盒测试 2.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

白盒测试 2.docx

《白盒测试 2.docx》由会员分享,可在线阅读,更多相关《白盒测试 2.docx(21页珍藏版)》请在冰豆网上搜索。

白盒测试 2.docx

白盒测试2

白盒测试

内容摘要

白盒测试按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作。

这一方法是把测试对象看作一个打开的盒子,测试人员依据程序内部逻辑结构相关信息,设计或选择测试用例,对程序所有逻辑路径进行测试,通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。

白盒测试法全面了解程序内部的逻辑结构,对所有逻辑路径进行测试,也是一种穷举路径的测试方法。

根据白盒测试原理进行测试,主要方法有程序结构分析,程序逻辑覆盖,基本路径测试,软件的规范检查等等。

在这里主要研究了基本路径测试方法、循环测试、代码检查法。

它根据程序的控制结构设计导出其测试用例,并主要用于软件的验证。

因为对于不同复杂度的代码逻辑,可以衍生出许多种执行路径,在使用白盒测试法时,测试员必须检查程序的内部结构,从检查程序的逻辑着手,得出测试的数据。

最后比较白盒测试和黑盒测试优缺点,帮助测试员选择适当的测试方法。

关键词:

白盒测试基本路径测试法循环测试方法代码检查法

WhiteBoxtesting

Abstract

White-boxtesting,whichisinaccordancewiththeinternalstructureoftheprogramtestingprocedures,testtodetectmovementwithintheproductdesignspecificationisinaccordancewiththeprovisionsofthenormal,checkwhethertheprogramofeachchannelcanpresspredeterminedrequirementscorrectly.Thisisthetestobjectasanopenbox,thetestprocedurebasedonpersonnelinformationabouttheinternallogicalstructure,designorselecttestcasesfortheprogramtotestalllogicpathsthroughtheinspectionprocessatdifferentpointsofthestatetodeterminetheactualstateisconsistentwiththeexpectedstate.

White-boxtestingcomprehensiveunderstandingoftheinternallogicalstructure,testalllogicpaths.Accordingtotheprincipleofwhite-boxtesting,themajormethodsincludetheprogramofstructuralanalysis,theprogramlogictocover,looptestingmethod,standardinspectionofthesoftware,andsoon.Inthisarticle,themainresearchedincludelooptestingmethod,basicpathtestingmethod,codeinspectionact.Accordingtothecontrolstructuredesignofprogramtoexporttestcases,mainlyusedforthevalidityofthesoftware.Becauseofthelogicalcodeindifferentcomplexity,soderivesfrommanytestingpath.Inwhite-boxtesting,thetestprocedureneededtocheckthepersonnelinformationabouttheinternallogicalstructure,getthetestdatafrominspectingtheinternalstructureoftheprogram,Finally,comparetheadvantageanddisadvantagebetweenwhite-boxtestingandblack-boxtesting,helptheTesterschooseanappropriatetestmethodandworkmoreefficiently.

Keywords:

White-boxtestingLooptestingmethodBasicpathtestingmethod

CodeInspectionAct

目录

一、绪论1

(一)白盒测试背景1

(二)白盒测试技术的国内外研究现状1

(三)白盒测试的目的及意义2

二、白盒测试简介3

(一)什么是白盒测试3

(二)白盒测试原理3

(三)白盒测试特点4

三、白盒测试方法5

(一)白盒测试方法5

(二)基本路径测试方法5

(三)循环测试方法9

(四)代码检查方法10

四、白盒测试和黑盒测试12

(一)什么是黑盒测试12

(二)黑盒测试的目的12

(三)白盒测试与黑盒测试的比较13

五、结论14

参考文献15

一、绪论

(一)白盒测试背景

早在20世纪50年代,英国著名的计算机科学家图灵就曾经给出了程序测试的原始定义测试是正确性确认实验方法的一种极端。

之后,随着人们对软件测试的深入认识,将软件测试技术分为白盒测试技术与黑盒测试技术。

20世纪70年代中期以后是白盒测试技术发展最活跃的时期。

1975年,美国黄荣昌教授在论文中讨论了测试准则、测试过程、路径谓词、测试数据及其生成问题,首次全面系统地论述了白盒测试的有关问题。

Goodenough和Gerhart首次提出了白盒测试的理论,从而把白盒测试这一实践性很强的技术提高到理论的高度,被认为是测试技术发展过程中具有开创性的工作。

1979年,MarkWeiser先生在他的博士论文中建立起一种程序分解技术[1]。

它通过寻找程序内部的相关性来分解程序,再通过对分解所得程序切片的分析达到对整个程序的分析和理解。

它极大地提高了白盒测试技术中对程序的分析与理解的效率。

20世纪70年代一20世纪80年代,是白盒测试技术迅速发展的时期,数十种白盒测试方法被提出,白盒测试技术已经成为软件测试技术学科中最重要的组成部分之一。

但总体来看,白盒测试技术的研究主要是在理论上。

实用的白盒测试技术并不多见,少数的白盒测试技术由于测试效率不高,也难以进入市场。

软件测试是伴随着软件工程技术发展起来的。

自20世纪70年代诞生至20世纪90年代初期,发展一直比较缓慢,主要原因是社会需求不足,认识不到位,软件结构测试难度大,表现为软件测试的从业人员不多,测试工具比较简陋[2]。

(二)白盒测试技术的国内外研究现状

我国软件与国际先进软件相比,在质量和成熟度上确实还有一定差距。

尽管国外软件也存在不少BUG(软件错误)和漏洞,但很少存在由于低级失误或大意而出现的软件产品质量问题。

但国内软件由于低级错误而造成的严重产品质量问题却不时发生。

其原因有三:

第一,国内IT行业相对欧美国家起步较晚,经验积累少,从业人员都是年轻的新生代,有经验的软件工程师不多,软件测试专家很少;

第二,众多软件开发企业软件产品开发周期短,测试不够精确;

第三,国内大专院校基本上没有针对软件测试和质量保证岗位的专业实用课程,目前大多数的测试理论方面的书是翻译过来的,社会上缺乏系统培养专业软件测试人才的有效渠道。

白盒测试技术中的程序切片技术成为当前软件结构测试方面的研究热点。

可以预测,在未来的时间里,白盒测试技术将会得到更快地发展,白盒测试理论更加完善,自盒测试效率更加提高,更实用的白盒测试系统将会大量出现。

(三)白盒测试的目的及意义

信息技术极大地促进了社会的进步和人类文明的发展,已成为当今社会发展的主要动力之一。

软件是信息技术的重要组成部分。

近些年来,软件的规模在大幅度提高,复杂性也在增加,软件不可靠的矛盾变得越来越突出,由于软件的错误所造成的损失也在大幅度增加,软件不可靠性的矛盾已经到了必须解决的地步。

因此,需要大力发展软件测试技术。

软件测试是伴随着软件工程技术发展起来的。

软件测试理论得到了快速发展,诞生了一些新的软件测试方法,参与软件测试的人员也在大幅度增加,高效率的软件测试工具也不断涌现。

软件测试技术由于其重要的作用,已经发展成为软件工程中极其重要的环节。

目前软件测试技术分为黑盒测试与自盒测试两大类。

黑盒测试技术着重于软件的功能测试,多用于软件测试中期与后期。

而白盒测试技术着重于软件的结构测试,多用于软件测试前期与中期,能够较早地发现软件中存在的问题。

白盒测试技术由于是对软件结构的测试,在单元测试阶段就可以应用白盒测试技术,可以更早地对软件程序代码进行测试,因此可以在软件开发的初级阶段就发现软件中存在的缺陷。

软件测试最求的目标是以尽可能少的测试用例发现软件中尽可能多的错误或缺陷[3]。

软件测试发现并指出软件中存在缺陷的过程,这个过程知名和标注问题存在的正确位置,详细记录导致问题出现的操作步骤,及时存储当时的错误状态以便于测试后问题能够准确再现,并跟踪软件开发人员对软件缺陷修复的进展情况。

测试不是验证程序能正确运行,而是发现存在的错误。

同时也要明白,不管怎么努力,软件总会存在缺陷,但是通过正确的测试方法可以尽量减少缺陷[4]。

目的在于使测试充分地覆盖软件的结构,并以软件结构中的某些元素是否都已得到测试为准则来判断测试的充分性。

充分性是以被测元素占总元素的百分比来衡量的。

较早发现软件问题,提高软件的测试效率,从而节省软件开发的人力物力资源,促使单元测试顺利进行,推进软件的开发进度。

有效的白盒测试技术由于是对软件的结构、软件的细节问题进行的测试,还可以更加保证软件产品的质量。

软件测试的总目标是充分利用有限的人力物力资源,高效率、高质量地完成测试,要认真研究测试策略,以便能使用尽可能少的测试用例,发现尽可能多的程序错误。

随着人们对软件结构及软件结构错误认识的不断深入,新的白盒测试技术应运而生。

二、白盒测试简介

(一)什么是白盒测试

白盒测试(White-boxTesting)是结构测试,是一种按程序内部的逻辑结构和编码结构设计测试数据的测试方法。

白盒测试也称结构测试或逻辑驱动测试,它是按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作。

这一方法是把测试对象看作一个打开的盒子,测试人员依据程序内部逻辑结构相关信息,设计或选择测试用例,对程序所有逻辑路径进行测试,通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。

测试者可以看到被测试的内部结构,并根据其内部结构设计测试数据,使程序中的每个语句、每个条件分支、每个控制路径都在程序测试中受到检验。

软件测试在软件生命周期中横跨两个阶段。

通常在编写出每个模块之后就对它做必要的测试(称为单元测试),模块的编写者和测试者是同一个人,编码和单元测试属于软件生命周期的同一个阶段。

在这个阶段结束之后,对软件系统还应该进行各种综合测试,这是软件生命周期中的另一个独立的阶段,通常由专门的测试人员承担这项工作。

白盒测试全面了解程序内部逻辑结构、对所有逻辑路径进行测试。

白盒测试全面了解程序内部逻辑结构、对所有逻辑路径进行测试。

白盒测试可以不考虑程序的需求规格说明,有时需要设计说明作为补充,但必须从程序源代码出发设计测试数据,分析结果。

白盒测试方法从考察程序的结构和逻辑出发验证所构造的程序是否符合设计要求。

它可以构造使程序特定部分得到测试的数据,而黑盒测试则不能做到这一点。

白盒测试规划,根据程序的内部结构,如语句的控制结构,模块间的控制结构以及内部数据结构等进行测试。

(二)白盒测试原理

白盒测试主要针对软件的内部结构和处理过程进行测试,具体的白盒测试方法有六种:

语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖[6]。

白盒测试中测试人员可以查看完整的程序源代码,真个程序在测试人员看来就像是一个透明的盒子,可以看到内部所有的结构以及组成特性。

进行白盒测试的时候测试人员可以根据程序的设计规格说明书来设计测试用例,从检查程序的逻辑着手,检查程序的内部结构,得出测试数据,以确定程序的实际状态是否与预期状态一致。

在嵌入式软件测试领域,特别是航天,军工等高安全性领域,嵌入式软件测试一般要求开发者提供完整的源代码,采用白盒测试的方法对嵌入式软件作出详细完整的评测。

(三)白盒测试特点

1.穷举路径测试

白盒测试是穷举路径测试。

在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。

贯穿程序的独立路径数是天文数字。

但即使每条路径都测试了仍然可能有错误。

穷举法的缺陷:

(1)穷举路径测试决不能查出程序违反了设计规范,即程序本身是个错误的程序;

(2)穷举路径测试不可能查出程序中因遗漏路径而出错;

(3)穷举路径测试可能发现不了一些与数据相关的错误。

2.白盒测试的优缺点:

优点:

清楚所设计的测试用例在代码级上哪些地方被忽略掉,帮助软件测试人员增大了代码的樘盖率,提高代码的质量,发现代码中隐藏的问题。

缺点:

(1)无法检测程序的外部特性;

(2)无法对未实现规格说明的程序内部欠缺部分进行测试;

(3)白盒测试的代价很高。

3.白盒测试检查的程序模块

白盒测试主要对程序模块进行如下检查:

(1)对程序模块的所有独立的执行路径至少测试一遍;

(2)对所有的逻辑判定,取“真”与取“假”的两种情况至少测试一遍;

(3)在循环的边界和运行的界限内执行循环体;

(4)测试内部数据结构的的有效性;

(5)不仅检测程序条件中的错误,而且检测程序中的其他错误。

三、白盒测试方法

(一)白盒测试方法

1.静态分析方法

静态分析是一种不通过执行程序而进行的测试的技术。

静态分析的关键功能是检查软件的表示和描述是否一致,没有冲突活着有歧义。

进行静态白盒测试的首要原因是尽早发现软件缺陷,为黑盒测试员在接受软件进行测试时设计和应用测试用例提供思路。

2.动态分析方法

动态分析方法的主要特点是当软件系统在模拟的或真实的环境中执行之前,之中和之后,对软件系统行为的分析。

动态分析包含了程序在受控的环境下使用特定的期望结果进行正式的运行。

它显示了一个系统在检查状态下是正确还是不争取。

在动态分析技术中,最重要的技术是路径和分支测试。

动态白盒测试包括以下4个部分:

(1)直接测试底层函数、过程、子程序和库;

(2)以完整程序的方式从顶层测试软件,但是根据对软件运行的了解调整测试程序;

(3)从软件获得读取变量和状态信息的访问权,以便确定测试与预期结果是否相符;

(4)强制软件以正常测试难以实现的方式运行。

(二)基本路径测试方法

1.什么是基本路径测试方法

基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法,是白盒测试中覆盖能力比较强的一种方法,用基本路径方法测试时,在程序中至少引进一条新的语句或一个新的条件的任一路经,从而,循环处理计算路径时只计算一次。

基本路径测试法是在程序图/程序流程图的基础上,通过分析环路复杂度,导出基本路径集,然后设计测试用例,使基本路经集中的每条路径至少经过一次。

2.基本路径测试方法步骤

设计出的测试用例要保证在测试中程序的每个可执行语句至少执行一次。

在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例[7]。

包括以下4个步骤和一个工具方法:

(1)程序的控制流图:

描述程序控制流的一种图示方法。

(2)程序圈复杂度:

从程序的环路复杂性可导出程序基本路径集合中的独立路径条数,这是确定程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。

(3)导出测试用例:

根据圈复杂度和程序结构设计用例数据输入和预期结果。

  

(4)准备测试用例:

确保基本路径集中的每一条路径的执行。

3.图形矩阵方法设计测试用例

图形矩阵是在基本路径测试中起辅助作用的软件工具,利用它可以自动确定一个一个基本路径集。

确定基本路径集的依据就是环路复杂度,要计算环路复杂度,就涉及到程序流程图/程序图。

由源程序画出程序流程图的时候,如果判断中的条件表达式是复合条件时,即条件表达式是由一个或多个[8]。

(1)根据原程序画出程序流程图并将程序流程图转化为程序图。

程序图中每个圆圈代一个条件或语句,条箭头代表一个控制流,假设由源程序得到得流程图如图3-1所示,转换的程序图如图3-2所示。

图3-1改动后的程序流程图

图3-2对应程序图

(2)计算程序图的环路复杂度

利用图形矩阵方法来计算,并可将此方法形成辅助工具,以实现自动确定基本路径集.一个图形矩阵是一个方阵,其行(列)数等于控制流图中的结点数.每行和每列依次对应到一个被标识结点,矩阵元素对应到结点间的连接。

在程序图中可对每条弧上加一个连接权,以提供关于控制流的附加信息,如连接执行的可能性相等。

最简单的情形,连接权为“l”表示存在一个连接,连接权为“0”表示不存在连接。

对应程序图形矩阵如图3-3所示,连接权与比较权如表3-1所示。

 

1

2

3

4

5

6

7

8

9

1

1

2

1

1

3

1

1

4

1

5

1

1

6

1

1

7

8

1

9

1

图3-3图形矩阵

表3-1连接权与比较权

连接权

比较权

1

0

2

1

2

1

1

 

0

 

2

 

1

2

1

1

0

1

0

 

(3)确定基本路径

由于环形数为5,故基本路径条数至少有五条.每条新的基本路径应包含至少一条新有向边。

但是集中的基本路径并不是唯一的。

基本路径如下:

Pathl:

1—2—4—5—6—7

Path2:

1—2—3—4—5—6—7

Path3:

l一2—3—8—4—5—6—7

Path4:

l一2—3—8—4—5—9—7

Path5:

1—2—3—8—4—5—6—9—7

(4)生成测试用例

Pathl:

输入:

A=1B=0X=1预期结果:

x=1

Path2:

输入:

A=3B=lx=1预期结果:

x=1-

Path3:

输入:

A=3B=0X=3预期结果:

x=1

Path4:

输入:

A=lB=0x=1预期结果:

x=2

Path5:

输入:

A=3B=0x=6预期结果:

x=3

(三)循环测试方法

循环是大多数软件算法的基础,但是,在测试软件时却往往未对循环结构进行足够的测试[9]。

循环测试是一种白盒测试技术,它专注于测试循环结构的有效性。

循环结构一般看作具有两个分支的分支结构,即考虑进入循环和不进入循环,不考虑循环的次数。

有些测试方法介绍中主张考虑循环的上下界,实际应用中不太实用,一是很多时候要依靠外部输入来实现上下界覆盖很困难,二是实际效果并不突出。

如果循环内有分支,倒是要考虑内部的分支要能覆盖。

在结构化的程序中通常只有三种循环,即简单循环、串接循环和嵌套循环。

下面分别讨论这三种循环的测试方法。

图3-4循环测试分类

1.简单循环

对于简单循环,测试应包括以下几种,其中的n表示循环允许的最大次数。

  

(1)零次循环:

从循环入口直接跳到循环出口;

(2)一次循环:

查找循环初始值方面的错误;  (3)二次循环:

检查在多次循环时才能暴露的错误;  (4)m次循环:

此时的m<n,也是检查在多次循环时才能暴露的错误; 最大次数循环、比最大次数多一次的循环、比最大次数少一次的循环。

2.嵌套循环

如果把简单循环的测试方法直接应用到嵌套循环,可能的测试数就会随嵌套层数的增加按几何级数增长,这么导致不切师级的测试数目。

对于嵌套循环,不能将简单循环的测试方法简单地扩大到嵌套循环,因为可能的测试数目将随嵌套层次的增加呈几何倍数增长。

这可能导致一个天文数字的测试数目。

下面给出一种有助于减少测试数目的测试方法:

(1)从最内层的循环开始测试,把所有其他循环都设置为最小值;

(2)对最内层的循环使用简单循环测试方法,而使外层循环的迭代参数(例如,循环计数器)取最小值,并为越界值或非法值增加一些额外的测试;

(3)由内向外,对下一个循环进行测试,但保持所有其他外层循环为最小值,其他嵌套环为“典型”值;

(4)继续进行下去,直到测试完所有的循环。

3.串接循环

串接循环。

如果串接循环的各个循环都彼此独立,则可以使用前述的测试简单循环的方法来测试串接循环。

但是,如果两个循环串接,而且第一个循环的循环计数器值是第二个循环的初始值,则这两个循环并不是独立的。

当循环不独立时,建议使用测试嵌套循环的方法来测试串接循环。

测试效果会更准确。

(四)代码检查方法

代码检查包括桌面检查、代码审查和走查等,主要检查代码和设计的一致性,代码对标准的遵循、可读性,代码逻辑表达的正确性,代码结构的合理性等方面。

发现违背程序编写标准的问题,程序中不安全、不明确和模糊的部分,找出程序中不可移植部分、违背程序编程风格的内容,包括变量检查、命名和类型审查、程序逻辑审查、程序语法检查和程序结构检查等内容。

1.代码检查法

(1)桌面检查

这是一种传统的检查方法,由程序员检查自己编写的程序。

程序员在程序通过编译之后,对源程序代码进行分析、检验,并补充相关文档,目的是发现程序中的错误。

由于程序员熟悉自己的程序及其程序设计风格,桌面检查由程序员自己进行可以节省检查时间,但应避免主观片面性。

(2)代码审查

由若干程序员和测试员组成一个审查小组,通过阅读、讨论和争议,对程序进行静态分析的过程。

代码审查分两步:

第一步,小组负责人提前把设计规格说明书、控制流程图、程序文本及有关要求、规范等分发给小组成员,作为审查的依据。

小组成员在充分阅读这些材料后,进入审查的第二步,召开程序审查会。

在会上,首先由程序员逐句简介程序的逻辑。

在此过程中,程序员或其他小组成员可以提出问题,展开讨论,审查错误是否存在。

实践表明,程序员在讲解过程中能发现许多原来自己没有发现的错误,而讨论和争议则促进了问题的暴露。

应当给审查小组每个成员准备一份常见错误的清单,把以往所有可能发生的常见错误罗列出来,供与会者对照检查,以提高审查的失效。

这个常见的错误清单也成为检查表,它把程序中可能发生的各种错误进行分类,对每一类错误列出尽可能多的典型错误,然后把它们制成表格,供再审查时使用

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 笔试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1