白盒测试相关的一些知识

在白盒测试中,可以使用各种测试方法进行测试。下面这篇文章,可能比较枯燥,如果不乐意读,可以先收藏。如果在你的工作中真遇到白盒测试的话,可以回过头再来看看,还是值得读一读。

一般来说,白盒测试时要考虑以下5个问题:

  1)测试中尽量先用自动化工具来进行静态结构分析。

  2)测试中建议先从静态测试开始,如:静态结构分析、代码走查和静态质量度量,然后进行动态测试,如:覆盖率测试。

  3)将静态分析的结果作为依据,再使用代码检查和动态测试的方式对静态分析结果进行进一步确认,提高测试效率及准确性。

  4)覆盖率测试是白盒测试中的重要手段,在测试报告中可以作为量化指标的依据,对于软件的重点模块,应使用多种覆盖率标准衡量代码的覆盖率。

  5)在不同的测试阶段,测试的侧重点是不同的。

  在单元测试阶段:以程序语法检查、程序逻辑检查、代码检查、逻辑覆盖为主。

  在集成测试阶段:需要增加静态结构分析、静态质量度量、以接口测试为主。

  在系统测试阶段:在真实系统工作环境下通过与系统的需求定义作比较,检 验完整的软件配置项能否和系统正确连接,发现软件与系统/子系统设计文档和软件开发合同规定不符合或与之矛盾的地方;验证系统是否满足了需求规格的定义, 找出与需求规格不相符或与之矛盾的地方,从而提出更加完善的方案,确保最终软件系统满足产品需求并且遵循系统设计的标准和规定。

  验收测试阶段:按照需求开发,体验该产品是否能够满足使用要求,有没有达到原设计水平,完成的功能怎样,是否符合用户的需求,以达到预期目的为主。

1、代码检查

  代码检查是静态测试的主要方法,它包括代码走查、桌面检查、流程图审查等。下面通过如下几点来介绍代码检查。

(1)概述

  代码检查主要检查代码和流图设计的一致性,代码结构的合理性,代码编写的标准性、可读性,代码的逻辑表达的正确性等方面。它包括变量检查,命名和类型审查,程序逻辑审查,程序语法检查和程序结构检查等内容。

  最常见的静态测试是找出源代码的语法错误,这类测试可由编译器来完成。

  (2)代码检查的目的

  代码检查是为达到以下目的:

  检查程序是不是按照某种标准或规范编写的。

  发现程序缺陷。

  发现程序产生的错误。

  检查代码是不是流程图要求的。

  检查有没有遗漏的项目。

  使代码易于移植,因为代码经常需要在不同的硬件中运行,或者使用不同的编译器编译。

  使代码易于阅读、理解和维护。

  (3)代码检查需要的文档

      在进行代码检查前应准备好需求文档、程序设计文档、程序的源代码清单、代码编码标准、代码缺陷检查表和流程图等。

2、代码检查的方式

代码检查的方式有3种,下面分别介绍。

  1)桌面检查

  桌面检查是程序员对源程序代码进行分析、检验,并补充相关的文档,发现程序中的错误的过程。

  由于程序员熟悉自己的程序,可以由程序员自己检查,这样可以节省很多时间,但要注意避免自己的主观判断。

  2)走查

  走查是程序员和测试员组成的审查小组通过逻辑运行程序,发现问题。小组成员要提前阅读设计规格书、程序文本等相关文档,利用测试用例,使程序逻辑运行。

  走查可分为以下两个步骤:

  ① 小组负责人把材料发给每个组员,然后由小组成员提出发现的问题。

  ② 通过记录,小组成员对程序逻辑及功能提出自己的疑问,开会探讨发现的问题和解决方法。

  3)代码审查

  代码审查是程序员和测试员组成的审查小组通过阅读、讨论、分析技术对程序进行静态分析的过程。

  代码审查可分为以下两个步骤:

  ① 小组负责人把程序文本、规范、相关要求、流程图及设计说明书发给每个成员。

  ② 每个成员将所发材料作为审查依据,但是由程序员讲解程序的结构、逻辑和源程序。在此过程中,小组成员可以提出自己的疑问;程序员在讲解自己的程序时,也能发现自己原来没有注意到的问题。

  为了提高效率,小组在审查会议前,可以准备一份常见错误清单,提供给参加成员对照检查。

  在实际应用中,代码检查能快速找到20%~30%的编码缺陷和逻辑设计缺陷,代码检查看到的是问题本身而非问题的征兆。代码走查是要消耗时间的,而且需要知识和经验的积累。

3、代码检查项目

  下面介绍代码检查项目。

  1.目录文件组织

  目录文件组织要遵循以下原则:

  1)所有的文件名简单明了,见名知意。

  2)文件和模块分组清晰。

  3)每行代码在80个字符以内。

  4)每个文件只包含一个完整模块的代码。

  2.检查函数

  检查函数要遵循以下原则:

  1)函数头清晰地描述了函数的功能。

  2)函数的名字清晰地定义了它所要做的事情。

  3)各个参数的定义和排序遵循特定的顺序。

  4)所有的参数都要是有用的。

  5)函数参数接口关系清晰明了。

  6)函数所使用的算法要有说明。

  3.数据类型及变量

  数据类型及变量要遵循以下原则:

  1)每个数据类型都有其解释。

  2)每个数据类型都有正确的取值。

  3)数据结构尽量简单,降低复杂性。

  4)每一个变量的命名都明确地表示了其代表什么。

  5)所有的变量都?皇褂谩?

  6)全部变量的描述要清晰。

4.检查条件判断语句

  检查条件判断语句要遵循以下原则:

  1)条件检查和代码在程序中清晰表露。

  2)if/else的使用正确。

  3)数字、字符和指针判断明确。

  4)最常见的情况优先判断。

5.检查循环体制

  检查循环体制要遵循以下原则:

  1)任何循环不得为空。

  2)循环体系清晰易懂。

  3)当有明确的多次循环操作时使用for循环。

  4)循环命名要有意义。

  5)循环终止条件清晰。

  6.检查代码注释

  检查代码注释时要遵循以下原则:

  1)有一个简单的关于代码结构的说明。

  2)每个文件和模块都要有相应的解释。

  3)源代码能够自我解释,并且易懂。

  4)每个代码的解释说明要明确地表达出代码的意义。

  5)所有注释要具体、清晰。

  6)所有无用的代码及注释要删除。

  7.桌面检查

  进行桌面检查时要注意以下问题:

  1)检查代码和设计的一致性。

2)代码对标准的遵循、可读性。

  3)代码逻辑表达的正确性。

  4)代码结构的合理性。

  5)程序编写与编写标准的符合性。

  6)程序中不安全、不明确和模糊的部分。

  7)编程风格问题等。

  8.其他检查

  其他检查包括如下内容:

  1)软件的扩展字符、编码、兼容性、警告/提示信息。

  2)检查变量的交叉引用表:检查未说明的变量和违反了类型规定的变量,以及变量的引用和使用情况。

  3)检查标号的交叉引用表:验证所有标号的正确性。

  4)检查子程序、宏、函数:验证每次调用与所调用位置是否正确,调用的子程序、宏、函数是否存在,参数是否一致。

  5)等价性检查:检查全部等价变量的类型的一致性。

  6)常量检查:确认常量的取值和数制、数据类型。

  7)标准检查:检查程序中是否有违反标准的问题。

  8)风格检查:检查程序的设计风格。

  9)比较控制流:比较设计控制流图和实际程序生成的控制流图的差异。

  10)选择、激活路径:在设计控制流图中选择某条路径,然后在实际的程序中激活这条路径,如果不能激活,则程序可能有错。

  11)补充文档:根据以上检查项目,可以编制代码规则、规范和检查表等作为测试用例。

  12)对照程序的规格说明,详细阅读源代码,比较实际的代码,从差异中发现程序的问题和错误。

13)检查必须遵守规定代码的语法格式和规则(如排版、注释、标识符命名、可读性、变量、函数、过程、可测性、程序效率、质量保证、代码编辑、编译、审查、代码测试、维护、宏)等各方面的编码要求。

  在进行人工代码检查时,可以制作代码走查缺陷表。在缺陷检查表中,我们列出工作中遇到的典型错误,如下所示:

  (1)格式部分

  嵌套的IF是否正确地缩进。

  注释是否准确并有意义。

  使用的符号是否有意义。

  代码基本上是否与开始时的模块模式统一、一致。

  是否遵循了全套的编程标准。

  (2)入口和出口的连接

  初始入口和最终出口是否正确。

  被传送的参数值是否正确地设置了。

  对关键的被调用的模块的意外情况是否有所处理(如丢失、混乱)。

  对另一个模块的每一次调用时,全部所需的参数是否传送给每一个被调用的模块。

  (3)存储器问题

  每一个域在第一次使用前是否正确地初始化。

  规定的域是否正确。

  每个域是否有正确的变量类型声明。

  (4)判断及转移

  用于判断的是否是正确的变量。

  是否判断了正确的条件。

  每个转移目标是否正确地并且至少执行了一次。

(5)性能

  性能是否最佳。

  (6)可维护性

  清单格式是否适用于提高可读性。

  各个程序块之间是否符合代码的逻辑意义。

  (7)逻辑

  全部设计是否已经实现。

  代码所做的是否是设计规定的内容。

  每一个循环是否执行了正确的次数。

  (8)可靠性

  对从外部接口采集的数据是否确认过。

  (9)内存设计

  数组或指针的下标是否越界。

  是否修改了指向常量的指针的内容。

  是否有效地处理了内存耗尽的问题。

  是否出现了不规范指针(指针变量没有被初始化、用free或者delete释放了内存之后,忘记将指针设置为Null)。

  是否忘记为数组和动态内存赋初值。

  用malloc或者new申请内存之后,是否立即检查指针值是否为Null。

  (10)关于类的高级特性

  是否违背了继承和组合的规则。

4、静态结构分析

  静态结构分析主要是以图形的方式表现程序的内部结构,例如函数调用关系图、函数内部控制流图。

  静态结构分析是测试者通过使用测试工具分析程序源代码的系统结构、数据 结构、数据接口、内部控制逻辑等内部结构,生成函数调用关系图、模块控制流图、内部文件调用关系图等各种图形图表,清晰地标识整个软件的组成结构,便于理 解,通过分析这些图表(包括控制流分析、数据流分析、接口分析、表达式分析),检查软件是否存在缺陷或错误。

  通过应用程序各函数之间的调用关系展示了系统的结构,这可以通过列出所有函数,用连线表示调用关系和作用来实现。静态结构主要分析以下内容:

  1)检查函数的调用关系是否正确。

  2)是否存在孤立的函数没有被调用。

  3)明确函数被调用的频繁度,对调用频繁的函数可以重点检查。

5、SQL语句测试

  SQL语句测试分为语句检查和类型转移检查,下面分别介绍。

  1.语句检查

  语句检查必须要检查的十点内容如下:

  1)每个数据库对象都有拥有者。

  2)Table: 是Database的基本单位,由行和列组成,用于存储数据。

  3)Data Type: 限制输入到表中的数据类型。

4)Constraint: 有主键、外键、唯一键、缺省和检查5种。

  5)Default: 自动插入常量值。

  6)Rule: 限制表中列的取值范围。

  7)Trigger: 一种特殊类型的存储过程,当有操作影响到它所保护的数据时,它会自动触发执行。

  8)Index: 提高查询速度。

  9)View: 查看一个或多个表的一种方式。

  10)Stored Procedure: 一组预编译的SQL语句,可以完成指定的操作。

  2.类型转换检查

  检查SQL语句的类型转换时,主要避免显示或隐含的类型转换。

6、代码检查的分析与评价

  下面介绍代码检查的分析与评价主要要注意的问题。

  1.功能

  陈述经代码检查证实了的本软件的功能。

  2.缺陷和限制

  陈述经代码检查测试证实的软件缺陷和限制,说明每项缺陷和限制对软件性能的影响,并说明全部测得的性能缺陷的累积影响。软件的缺陷和限制如下:

  1)数据引用错误:指未经正确声明和初始化的变量、常量、数组、字符串或记录而导致的软件缺陷。

      注意:数据引用错误是缓冲区溢出的主要原因,是一个造成许多软件安全问题的缺陷。

  2)数据声明错误:其产生的原因是不正确地声明或使用变量和常量。

  3)计算错误。

  4)比较错误:比较和判断错误很可能是由于边界条件问题而引起的,所以要特别注意这些地方。一般要检查的运算符包括: <小于、>大于、=等于、 !=不等于、1真、0假。

5)控制流程错误:其产生的原因是编程语言中循环等控制结构未按预期方式工作,它们通常由计算或者比较错误直接或间接造成。

  6)子程序参数错误:其产生的原因是软件子程序不正确地传递数据。

  7)输入/输出错误:包括文件读取、接受键盘或者鼠标输入以及向打印机或者屏幕等输出设备写入错误。

  8)其他错误:包括编码错误以及警告/提示信息错误。

  通过对代码检查结果的分析,需标明遗留缺陷、局限性和软件的约束限制等,说明该代码是否已达到预定的结果,判定代码能否交付使用。审查小组必须做出审查结果的书面总结报告,并使报告便于开发小组的成员使用。

时间: 2024-12-29 10:26:26

白盒测试相关的一些知识的相关文章

[转]一些NSArray,NSDictionary,NSSet相关的算法知识

iOS编程当中的几个集合类:NSArray,NSDictionary,NSSet以及对应的Mutable版本,应该所有人都用过.只是简单使用的话,相信没人会用错,但要做到高效(时间复杂度)精确(业务准确性),还需要了解其中所隐藏的算法知识. 在项目当中使用集合类几乎是不可避免的,集合类的使用场景其实可以进行抽象的归类.大多数时候我们需要将若干个对象(object)暂时保存起来,以备后续的业务逻辑进行操作,「保存和操作」,或者说「存与取」,对应到计算机世界的术语就是读和写.最初保存的时候我们Ins

音频相关的基本知识

最近的项目需要和音频打交道,所以网上搜集了一些音频相关的基本知识,整理如下 自然界中的声音非常复杂,波形极其复杂,通常我们采用脉冲编码码调制编码,即PCM编码.PCM编码通过抽样.量化.编码三个步骤将连续变化的模拟信号转换为数字信号 采样(sample) 数码音频系统是通过将声波波形转换成一连串的二进制数据来再现原始声音的(原始声音是模拟信号),实现这个步骤使用的设备是模/数转换器(A/D转换器,或者ADC,或者analog to digital convert).它以每秒上万次的速率对声波进行

操作系统相关硬件基础知识

http://blog.csdn.net/oqq_5518/article/details/35232097 相关知识:数字逻辑电路.计算机组成原理. 操作系统 开关呈开启状态,给予一定的电压,通电,1. 开关呈关闭状态,断电,0. 运算器.控制器.存储器.输入设备.输出设备 利用控制位实现线路复用,利用寄存器解决线路复用带来的数据覆盖问题(暂存). ROM: RAM:内存 中断机制解决CPU不断进行对IO设备轮询的问题,减少CPU的中断次数,提高性能. 北桥(高速总线控制器):内存 现在的内存

单元测试和白盒测试相关总结

一.  软件测试方法 1.        软件测试方法包括:白盒测试(White  Box  Testing).黑盒测试(Black  Box Testing).灰盒测试.静态测试.动态测试. 2.        白盒测试:是一种测试用例设计方法,在这里盒子指的是被测试的软件,白盒,顾名思义即盒子是可视的,你可以清楚盒子内部的东西以及里面是如何运作的,因此白盒测试需要你对系统内部的结构和工作原理有一个清楚的了解,并且基于这个知识来设计你的用例. 白盒测试技术一般可被分为静态分析和动态分析两类技术

qt绘图相关的基础知识

近期,从新提升一下软件平台中的组态部分,图形组态是最直观的界面操作入口,设计好,提高软件的使用效率.和数据可视化相比,图形组态更能说明业务逻辑关系. Qt绘图知识主要由三大部分:普通2D绘图;图形视图,动画相关,3D绘图. 下面是主要知识基础点: 一 2D绘图 1.1基本绘制与填充 1.2坐标系统 1.3组合绘制:文字,路径,图像 1.4双缓冲绘图 就是在绘制时,先将所有内容都绘制到一个绘图设备上,然后将整个图像绘制到部件上显示出来.使用双缓冲绘图,可以避免显示时闪烁现场. 1.5其它相关知识点

测量行业(RTK)相关的小知识总结

RTK测量系统,一般需要先架设基准站(参考站),数据链模式外挂大电台(有天线大功率模式,理想范围方圆18公里以内).基准站通过收到卫星(多星)进行计算出当前的位置. 其中涉及到频率的设置,波特率,以及协议(常用的天宝协议,透明协议等). 这些参数的设置就是输出到移动站(流动站)需要设置的.移动站设置了跟基准站相同的频率以及其它参数.那么就会接收基准站数据解算出移动站的解算数据以及其它相关的位置精度等.最后移动站输出到移动端的数据通常是按照A0183标准协议输出.携带相关的参数. 静态采集:是在一

Android 相关重难点知识整理

[原文] 集合 对 HashMap 进行排序: HashMap 本身无序,但其子类 LinkedHashMap 使用链表结构,实现了有序.通过 HashMap#entrySet() 方法可以将 Map 转为 Set<Entry> ,再在 ArrayList 的构造函数中可以传入 Collections ,正好 Set 和 List 的父类就是 Collections ,这样就可以调用 Collections.sort(list, comparator) 进行排序了.排序好后,使用 for 遍历

python相关的基础知识分享

今日面试,,才发现lambda和fibonacci都忘了怎么写,一年半载没有频繁的用py,以往的兴趣因生活的忙碌而显得生疏了,还好,之前学习整理的文档都放在了网站上,以备查验. 分享出来解决方案: http://www.pcswo.com/static/file/python/basis/function/generator-eg.py >>> m = lambda x,y,z: (x-y)*z >>> print(m(3,1,2)) 4 >>> de

与http协议相关的基础知识

相关的内容:http概念.版本.工作模式.web资源.开源实现(动.静态资源请求与响应).httpd的特性.httpd功能.httpd的程序环境 http协议:    Hyper-Text Transfer Protocol,超文本传输协议: HTML:Hyper-Text Marked Language,超文本标记语言: http的版本:0.9,1.0,1.1 0.9:最原始的版本 功能: Method:GET,PUT: 1.0: 功能: MIME:Multipurpose Internet