如何进行白盒测试

上传人:回**** 文档编号:203098914 上传时间:2023-04-24 格式:DOCX 页数:9 大小:78.14KB
收藏 版权申诉 举报 下载
如何进行白盒测试_第1页
第1页 / 共9页
如何进行白盒测试_第2页
第2页 / 共9页
如何进行白盒测试_第3页
第3页 / 共9页
资源描述:

《如何进行白盒测试》由会员分享,可在线阅读,更多相关《如何进行白盒测试(9页珍藏版)》请在装配图网上搜索。

1、摘要:单元测试是软件测试的基本,本文具体的论述了单元测试的两个环节人工静态检查法与动态执行跟踪法,所需执行的工作项目及有关的方略和措施。通过对这两个环节的描述作者将近年的单元测试经验及测试理论注入于全文。 核心词:单元测试、人工检查、白盒测试、测试用例、跟踪调试 概述 单元测试是针对软件设计的最小单位程序模块,进行对的性检查的测试工作。其目的在于发现每个程序模块内部也许存在的差错。 单元测试也是程序员的一项基本职责,程序员必须对自己所编写的代码保持认真负责的态度,这是也程序员的基本职业素质之一。同步单元测试能力也是程序员的一项基本能力,能力的高下直接影响到程序员的工作效率与软件的质量。在编码的

2、过程中作单元测试,其耗费是最小的,而回报却特别优厚的。在编码的过程中考虑测试问题,得到的将是更优质的代码,由于在这时您对代码应当做些什么 理解得最清晰。如果不这样做,而是始终等到某个模块崩溃了,到那时您也许已经忘掉了代码是如何工作的。虽然是在强大的工作压力下,您也还必须重新把它弄清 楚,这又要耗费许多时间。进一步说,这样做出的改正往往不会那么彻底,也许更脆弱,由于您唤回的理解也许不那么完全。一般合格的代码应当具有如下性质:对的性、清晰性、规范性、一致性、高效性等(根据优先级别排序)。 1. 对的性是指代码逻辑必须对的,可以实现预期的功能。 2. 清晰性是指代码必须简要、易懂,注释精确没有歧义。

3、 3规范性是指代码必须符合公司或部门所定义的共同规范涉及命名规则,代码风格等等。 4. 一致性是指代码必须在命名上(如:相似功能的变量尽量采用相似的标示符)、风格上都保持统一。 . 高效性是指代码不仅要满足以上性质,并且需要尽量减少代码的执行时间。 2单元测试环节 在代码编写完毕后的单元测试工作重要分为两个环节人工静态检查和动态执行跟踪。人工静态检查是测试的第一步,这个阶段工作重要是保证代码算法的逻辑对的性(尽量通过人工检查发现代码的逻辑错误)、清晰性、规范性、一致性、算法高效性。并尽量的发现程序中没有发现的错误。第二步是通过设计测试用例,执行待测程序来跟踪比较实际成果与预期成果来发现错误。经

4、验表白,使用人工静态检查法可以有效的发现30到%的逻辑设计 和编码错误。但是代码中仍会有大量的隐性错误无法通过视觉检查发现,必须通过跟踪调试法细心分析才可以捕获到。因此,动态跟踪调试措施也成了单元测试的重 点与难点。3人工检查 一般在人工检查阶段必须执行如下项目的活动:第一、检查算法的逻辑对的性;拟定所编写的代码算法、数据构造定义(如:队列、堆栈等)与否实现了模块或措施所规定的功能。 第二、 模块接口的对的性检查;拟定形式参数个数、数据类型、顺序与否对的;拟定返回值类型及返回值的对的性。 第三、 输入参数有无作对的性检查;如果没有作对的性检查,拟定该参数与否的确无需做参数对的性检查,否则请添加

5、上参数的对的性检查。经验表白,缺少参数对的性检查的代码是导致软件系统不稳定的重要因素之一。 第四、调用其她措施接口的对的性;检查实参类型对的与否、传入的参数值对的与否、个数对的与否,特别是具有多态的措施。返回值对的与否,有无误解返回值所示的意思。最佳对每个被调用的措施的返回值用显湿代码作对的性检查,如果被调用措施浮现异常或错误程序应当予以反馈,并添加合适的出错解决代码。第五、出错解决;模块代码规定能预见出错的条件,并设立合适的出错解决,以便在一旦程序出错时,能对出错程序重做安排,保证其逻辑的对的性,这种出错解决应当是 模块功能的一部分。若浮现下列状况之一,则表白模块的错误解决功能包具有错误或缺

6、陷:出错的描述难以理解;出错的描述局限性以对错误定位,局限性以拟定出错的 因素;显示的错误信息与实际的错误因素不符;对错误条件的解决不对的;在对错误进行解决之前,错误条件已经引起系统的干预等。 第六、 保证体现式、SQL语句的对的性;检查所编写的QL语句的语法、逻辑的对的性。对体现式应当保证不含二义性,对于容易产生歧义的体现式或运算符优先级 (如: 、 、 &、|、+、 -等)可以采用扩号“()”运算符避免二义性,这样一方面可以保证代码的对的可靠,同步也可以提高代码的可读性。 第七、检查常量或全局变量使用的对的性;拟定所使用的常量或全局变量的取值和数值、数据类型;保证常量每次引用同它的取值、数

7、值和类型的一致性。第八、 表达符定义的规范一致性;保证变量命名可以见名知意,并且简洁但不适宜过长或过短、规范、容易记忆、最佳可以拼读。并尽量保证用相似的表达符代表相似功能,不要将不同的功能用相似的表达符表达;更不要用相似的表达符代表不同的功能意义。 第九、程序风格的一致性、规范性;代码必须能保证符合公司规范,保证所有成员的代码风格一致、规范、工整。例如对数组做循环,不要一会儿采用下标变量从下到上的 方式(如:fo(I=0;I+;I0));应当尽量采用统一的方式,或则统一从下到上,或则统一从上到下。建议采用for循环和循环,不要采用dowil循环等。 第十、 检查程序中使用到的神秘数字与否采用了

8、表达符定义。神秘的数字涉及多种常数、数组的大小、字符位置、变换因子以及程序中浮现的其她以文字形式写出的数值。 在程序源代码里,一种具有原本形式的数对其自身的重要性或作用没提供任何批示性信息,它们也导致程序难以理解和修改。对于此类神秘数字必须采用相应的标量 来表达;如果该数字在整个系统中都也许使用到务必将它定义为全局常量;如果该神秘数字在一种类中使用可将其定义为类的属性(Aribe),如果该 神秘数字只在一种措施中浮现务必将其定义为局部变量或常量。 第十一、 检查代码与否可以优化、算法效率与否最高。如:SQL语句与否可以优化,与否可以用1条SQL语句替代程序中的多条SL语句的功能,循环与否必要,

9、循环中的语句与否可以抽出到循环之外等。 第十二、 检查您的程序与否清晰简洁容易理解。注意:冗长的程序并不一定不是清晰的。第十三、检查措施内部注释与否完整;与否清晰简洁;与否对的的反映了代码的功能,错误的注释比没有注释更糟;与否做了多余的注释;对于简朴的一看就懂的代码没有必要注释。第十四、 检查注释文档与否完整;对包、类、属性、措施功能、参数、返回值的注释与否对的且容易理解;与否会落了或多了某个参数的注释,参数类型与否对的,参数的限 定值与否对的。特别是对于形式参数与返回值中有关神秘数值的注释,如:类型参数应当指出 1.代表什么,2.代表什么,3.代表什么等。对于返回成果集(ResuSt)的注释

10、,应当注释成果集中涉及那些字段及字段类型、字段顺序等。 4 动态执行跟踪 动态执行测试一般分为黑盒测试与白盒测试。黑盒测试指已知产品的功能设计规格,可以进行测试证明每个实现了的功能与否符合规定。白盒测试指已知产品的内部工作过程,可以通过测试证明每种内部操作与否符合设计规格的规定,所有内部成分与否已经通过检查。 对于单元测试来说重要应当采用白盒测试法对每个模块的内部作跟踪检查测试。对于单元白盒测试,应当对程序模块进行如下检查: .对模块内所有独立的执行途径至少测试一次; 2. 对所有的逻辑鉴定,取“真”与“假”的两种状况都至少执行一次; 3. 在循环的边界和运营界线内执行循环体; 4 测试内部数

11、据的有效性等等。 单元白盒跟踪测试,一般需要做如下三项工作: 1. 设计测试用例;2. 设计测试类模块; .跟踪调试。 .1测试用例设计一般动态执行跟踪调试是在编码阶段进行的。在对源程序作静态人工检查之后就可以开始进行单元测试的测试用例设计。运用设计文档,设计可以验证程序功能、找出程序错误的多种测试用例。 . 测试用例的设计基本原则 设计测试用例基本的原则是: 1.一种好的测试用例在于可以发现至今没有发现的错误; 2. 测试用例应由测试输入数据和与之相应的预期输出成果这两部分构成;3 在测试用例设计时,应当涉及合理的输入条件和不合理的输入条件。41. 白盒测试的测试用例设计 白盒测试测试用例一

12、般采用逻辑覆盖法和基本途径法进行设计。 一、逻辑覆盖法 逻辑覆盖是以程序内部的逻辑构造为基本的测试用例设计技术,这一措施规定测试人员对程序的逻辑构造有清晰的理解。逻辑覆盖可分为:语句覆盖、鉴定覆盖、条件覆盖、鉴定-条件覆盖、条件组合覆盖与途径覆盖。1.语句覆盖就是设计若干个测试用例,运营所测程序,使得每一可执行语句至少执行一次。 2.鉴定覆盖就是设计若干个测试用例,运营所测程序,使得程序中每个判断的取真分支和取假分支至少经历一次。 . 条件覆盖就是设计若干个测试用例,运营所测程序,使得程序中每个判断的每个条件的也许取值至少执行一次。.鉴定-条件覆盖就是设计足够的测试用例,使得判断中每个条件的所

13、有也许取值至少执行一次,同步每个判断的所有也许判断成果也至少执行一次。 5. 条件组合覆盖就是设计足够的测试用例,运营所测程序,使得每个判断的所有也许的条件取值组合至少执行一次。 6. 途径测试就是设计足够的测试用例,覆盖程序中所有也许的途径。 每一种覆盖措施均有其优缺陷,这6种覆盖措施关系,如图1: 图 一般在设计测试用例时应当根据代码模块的复杂度,选择覆盖措施。一般的代码的复杂度与测试用例设计的复杂度成正比。因此,设计人员必须做到模块或措施功能 的单一性、高内聚性,使得措施或函数代码尽量的简朴;这样将可大大提高测试用例设计的容易度,提高测试用例的覆盖限度。二、基本途径法 基本途径测试法是在

14、程序控制流图的基本上,通过度析控制构造的环路复杂性,导出基本可执行途径集合,从而设计测试用例的措施。设计出的测试用例要保证在测试中程序的每个可执行语句至少执行一次。基本途径测试法涉及如下5个方面:1. 程序的控制流图:描述程序控制流的一种图示措施。 2 程序环境复杂性:ce复杂性度量;从程序的环路复杂性可导出程序基本途径集合中的独立途径条数,这是拟定程序中每个可执行语句至少执行依次所必须的测试用例数目的上界。 . 导出测试用例。4. 准备测试用例,保证基本途径集中的每一条途径的执行。 5.图形矩阵:是在基本途径测试中起辅助作用的软件工具,运用它可以实现自动地拟定一种基本途径集。 此外,对于测试

15、用例的选择除了满足所选择的覆盖限度(或覆盖原则)外还需要尽量的采用边界值分析法、错误推测法等常用地设计措施。采用边界值分析法设计 合理的输入条件与不合理的输入条件;条件边界测试用例应当涉及输入参数的边界与条件边界(if,e,or,switch ,QL here子句等)。错误推测法,列举出程序中所有也许的错误和容易发生错误的特殊状况,根据它们选择测试用例;在编码、单元测试阶段可以发现诸多常用的 错误和疑似错误,对于这些错误应当作重点测试,并设计相应的测试用例。4.1.3单元测试筹划表格 在设计测试用例时可以参照如下表格,拟定对每个类(或模块或包)的测试筹划。表,是对每个类(或模块或包)作测试筹划

16、的表头,它指明本测试筹划是针对那个模块及有关文献的。表2是针对表1指定模块测试用例而相应的子表,每个测试用例可以拥有一种子表;单元测试成果子表留作执行测试用例时根据实际成果填写。 子系统名.PckageNam. JvaClasName 表1 单元测试子项001 下面表格为针对上面表格“子系统名.PackageNam. vaCassame”而相应的子表,每个测试用例用一张子表:表2 42 测试类设计 一种模块或一种措施(Metd)并不是一种独立的程序,在考虑测试它时要同步考虑它和外界的联系,用些辅助模块去模拟与所测模块相联系的其她模块。这些辅助模块分为两种: . 驱动模块(drive):相称于所

17、测模块的主程序。它接受测试数据,把这些数据传送给所测模块,最后再输出实际测试成果。 桩模块(stub):用于替代所测模块调用的子模块。桩模块可以做少量的数据操作,不需要把子模块所有功能都带进来,但不容许什么事情也不做。 所测模块与它有关的驱动模块及桩模块共同构成了一种“测试环境”,如图2。驱动模块和桩模块的编写会给测试带来额外的开销。由于它们在软件交付时不作为产 品的一部分一同交付,并且它们的编写需要一定的工作量。特别是桩模块,不能只简朴地给出“曾经进入”的信息。为了可以对的的测试软件,桩模块也许需要模拟 实际子模块的功能,这样桩模块的建立就不是很轻松了。 图2 单元测试的测试环境编写桩模块是

18、困难费时的,其实也是完全可以避免编写桩模块的;只需在项目进度管理时将实际桩模块的代码编写工作安排在被测模块前编写即可。并且这样可以提 高测试工作的效率,提高实际桩模块的测试频率从而更有效的保证产品的质量。但是,为了保证可以向上一层级提供稳定可靠的实际桩模块,为后续模块测试打下良 好的基本,驱动模块还是必不可少的。 对于每一种包或子系统我们可以根据所编写的测试用例来编写一种测试模块类来做驱动模块,用于测试包中所有的待测试模块。而最佳不要在每个类中用一种测试函数的措施,来测试跟踪类中所有的措施。这样的好处在于: 1.可以同步测试包中所有的措施或模块,也可以以便的测试跟踪指定的模块或措施。 2. 可

19、以联合使用所有测试用例对同一段代码执行测试,发现问题。3. 便以回归测试,当某个模块作了修改之后,只要执行测试类就可以执行所有被测的模块或措施。这样不仅可以以便得检查、跟踪所修改的代码,并且可以检查出修改对包内有关模块或措施所导致的影响,使修改引进的错误得以及时发现。 4. 复用测试措施,使测试单元保持持久性,并可以用既有的测试来编写有关测试。. 将测试代码与产品代码分开,使代码更清晰、简洁;提高测试代码与被测代码的可维护性。 4.3 跟踪调试 跟踪调试不仅是进一步测试代码的最佳措施,并且也是程序调试发现错误本源的有利工具。测试类设计完毕后,最佳能借助代码排错工具来跟踪调试待测代码段以进一步的

20、检查代码的逻辑错误。既有的代码开发工具(如:JBuilde)一般都集成了这 类排错工具。排错工具一般由执行控制程序、执行状态查询程序、跟踪程序构成。执行控制程序涉及断点定义、断点撤销、单步执行、断点执行、条件执行等功能。 执行状态查询程序涉及寄存器、堆栈状态、变量、代码等与程序有关的多种状态信息的查询。跟踪程序用以跟踪程序执行过程中所经历的事件序列(如:分支、子程 序调用等)。程序员可通过对程序执行过程中多种状态的鉴别进行程序错误的辨认、定位及改正。对于模块的单元跟踪调试,最佳可以做到对被测模块的每次修改,都对每个测试用例进行跟踪执行一遍以排除所有也许浮现或引进的错误。在时间有限的状况下也必须

21、调用驱动模块对所有的测试用例执行一次,并对浮现错误或异常的测试用例跟踪执行一次,以发现问题的本源。 排错过程往往是一种艰苦的过程,特别是那种算法复杂、调用子模块较多的模块,对于错误的定位来说并不是一件容易的事情。尽管排错不是一门好学的技术(有时人们更乐意称之为艺术),但还是有若干行之有效的措施和方略,下面简介几种排错时应当采用的措施方略。 1. 断点设立,设立断点对源程序实行断点跟踪将可以大大提高排错的效率。一般断点的设立除了根据经验与错误信息来设立外,还应重点考虑如下几种类行的语句。 1) 函数调用语句。子函数的调用语句是测试的重点,一方面由于在调用子函数时也许引起接口引用错误,另一方面也许

22、是子函数自身的错误。2) 鉴定转移/循环语句。鉴定语句常常会由于边界值与比较优先级等问题引起错误或失效而作出错误的转移。因此,对于鉴定转移循环语句也是一种重要的测试点。 3) SQL语句。对于数据库的应用程序来说,QL语句常常会在模块中占比较重要的业务逻辑,并且比较复杂。因此,它也属于比较容易浮现错误的语句。 4) 复杂算法段。出错的概率常与算法的复杂度成正比。因此越复杂的算法越需要作重点跟踪,如递归、回朔等算法。 2. 可疑变量查看,在跟踪执行状态下当程序停止在某条语句时可以查看变量的目前值和对象的目前属性。通过对比这些变量目前值与预期值可以轻松的定位程序问题本源。 QL语句执行检查,在跟踪执行或运营状态下将疑似错误的S语句打印出来,重新在数据库SL查询分析器(如:Oracl QL Pus)中跟踪执行可以较高效的检查纠正SQ语句错误。4注意群集现象,经验表白测试后程序中残存的错误数目与该程序中已发现的错误数目或检错率成正比。根据这个规律,应当对错误群集的程序段进行重点测试,以提 高测试投资的效益。如果发现某一代码段似乎比其她程序模块更多的错误倾向时,则应当耗费较多的时间和代价测试这个程序模块

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!