《5 软件测试技术与测试实训教程讲座(5 )第5章白盒测试的实用技术 v15学时.ppt》由会员分享,可在线阅读,更多相关《5 软件测试技术与测试实训教程讲座(5 )第5章白盒测试的实用技术 v15学时.ppt(90页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、软件测试技术与测试实训教程软件测试技术与测试实训教程黎连业 王华 李龙 黎照北京:机械工业出版社 2012.05 第第5 5讲:讲:第第5章章白盒测试的实用技术白盒测试的实用技术 白盒测试(白盒测试(WhiteBoxTesting),按照程序内部的结构、逻辑驱动),按照程序内部的结构、逻辑驱动测试程序,通过测试来检测产品内部动作是否按照设计说明书的规定测试程序,通过测试来检测产品内部动作是否按照设计说明书的规定正常进行,检验程序中的每条路径是否都能按预定要求正确工作。正常进行,检验程序中的每条路径是否都能按预定要求正确工作。此方法是把白盒测试的对象看成内部逻辑结构是完全可见的盒子,测此方法是把
2、白盒测试的对象看成内部逻辑结构是完全可见的盒子,测试人员依据程序内部逻辑结构的相关信息,设计或选择测试用例,对试人员依据程序内部逻辑结构的相关信息,设计或选择测试用例,对程序所有逻辑路径进行测试,通过在不同点、不同分支检查程序的状程序所有逻辑路径进行测试,通过在不同点、不同分支检查程序的状态,确定实际的状态是否与预期的状态一致。态,确定实际的状态是否与预期的状态一致。白盒测试技术是软件测试的主要方法之一,白盒测试的基本概念、检白盒测试技术是软件测试的主要方法之一,白盒测试的基本概念、检查方法、测试方法、测试工具等内容是必须掌握的,本章重点讨论以查方法、测试方法、测试工具等内容是必须掌握的,本章
3、重点讨论以下内容:下内容:白盒测试的基本概念;白盒测试的基本概念;白盒测试方法;白盒测试方法;白盒测试的常用技术;白盒测试的常用技术;白盒测试的要求;白盒测试的要求;人工静态测试方法;人工静态测试方法;动态测试;动态测试;结构测试。结构测试。5.1白盒测试的基本概念白盒测试的基本概念白盒测试(白箱测试白盒测试(白箱测试(White-boxtesting)是指基于一个应用是指基于一个应用代码的内部逻辑知识,即基于覆盖全部代码、分支、路径、代码的内部逻辑知识,即基于覆盖全部代码、分支、路径、条件,使用程序设计的控制结构导出测试用例,是软件测试条件,使用程序设计的控制结构导出测试用例,是软件测试的主
4、要方法之一。这种测试要求对程序的要求很高,需要了的主要方法之一。这种测试要求对程序的要求很高,需要了解程序的构架,具体需求,以及一些编写程序的技巧,能够解程序的构架,具体需求,以及一些编写程序的技巧,能够检查一些程序规范,指针,变量,数组越界等问题,使得问检查一些程序规范,指针,变量,数组越界等问题,使得问题在前期就暴露出来。白盒测试又叫结构测试或逻辑驱动测题在前期就暴露出来。白盒测试又叫结构测试或逻辑驱动测试,它是知道产品内部工作过程,可通过测试来检测产品内试,它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部部动作是否按照规格说明书的规定正
5、常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能,白盒测试的主要方法有逻要求正确工作,而不顾它的功能,白盒测试的主要方法有逻辑驱动、基路测试等,主要用于软件验证。一般程序所容易辑驱动、基路测试等,主要用于软件验证。一般程序所容易犯的错误犯的错误,没有定义变量没有定义变量,无效引用无效引用,野指针野指针,超过数组下标超过数组下标,内内存分配后没有删除等存分配后没有删除等,无法调入循环体无法调入循环体,函数本身没有析构函数本身没有析构,导导致循环实效或者死循环致循环实效或者死循环.参数类型不匹配
6、参数类型不匹配,调用系统的函数没调用系统的函数没有考虑到系统的兼容性等。有考虑到系统的兼容性等。白盒测试一般是以单元或者模块为基础的。目前的白盒测试一般是以单元或者模块为基础的。目前的做法是把他归结为开发的范畴,用专人或者兼职的做法是把他归结为开发的范畴,用专人或者兼职的人去看代码或者利用部分工具,例如人去看代码或者利用部分工具,例如Rational系系列,列,Boundchecker等工具,他们可以帮助人为等工具,他们可以帮助人为的发现变量没有初始化,指针错误等。大大的减少的发现变量没有初始化,指针错误等。大大的减少了人力。了人力。白盒测试的优点是帮助软件测试人员增大代码的覆白盒测试的优点是
7、帮助软件测试人员增大代码的覆盖率,提高代码的质量,发现代码中隐藏的问题。盖率,提高代码的质量,发现代码中隐藏的问题。白盒测试主要是检查程序的内部结构、逻辑、循环白盒测试主要是检查程序的内部结构、逻辑、循环和路径。常用测试用例设计方法有:代码检查法、和路径。常用测试用例设计方法有:代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、基本路径测试法、域测试、符号测试、Z路径覆盖、路径覆盖、程序变异等,运用最为广泛的是基本路径测试法。程序变异等,运用最为广泛的是基本路径测试法。5.1.1白盒测试白盒测试白盒测试可分为静
8、态测试和动态测试。白盒测试可分为静态测试和动态测试。(1)静态测试)静态测试静态测试是测试中很重要的方法之一。它不要求静态测试是测试中很重要的方法之一。它不要求在计算机上实际执行所测程序,主要以一些人工在计算机上实际执行所测程序,主要以一些人工的模拟技术对软件进行分析和测试。静态测试大的模拟技术对软件进行分析和测试。静态测试大约可以找出约可以找出25%60%的逻辑错误。的逻辑错误。(2)动态测试)动态测试输入一组预先按照一定的测试准则设计的实例数输入一组预先按照一定的测试准则设计的实例数据驱动运行程序,检查程序功能是否符合设计要据驱动运行程序,检查程序功能是否符合设计要求,发现程序中错误的过程
9、。求,发现程序中错误的过程。5.1.2白盒测试的原则白盒测试的原则白盒测试必须遵循以下白盒测试必须遵循以下4条原则,才能达到条原则,才能达到测试的目的:测试的目的:1.保证一个模块中的所有独立路径至少被测保证一个模块中的所有独立路径至少被测试一次;试一次;2.所有逻辑值均需测试真所有逻辑值均需测试真(true)和假和假(false)两种情况;两种情况;3.检查程序的内部数据结构,保证其结构的检查程序的内部数据结构,保证其结构的有效性;有效性;4.在上下边界及可操作范围内运行所有循环。在上下边界及可操作范围内运行所有循环。5.1.3白盒测试的策略和侧重点白盒测试的策略和侧重点白盒测试中测试的策略
10、是采用先静态后动态的组白盒测试中测试的策略是采用先静态后动态的组合方式,然后现进行覆盖测试。合方式,然后现进行覆盖测试。利用静态结构分利用静态结构分析的结果,通过代码检查和动态测试的方法对结析的结果,通过代码检查和动态测试的方法对结果进一步确认,使测试工作更为有效。果进一步确认,使测试工作更为有效。白盒测试在不同测试阶段的侧重点是:白盒测试在不同测试阶段的侧重点是:单元测试单元测试以代码检查、逻辑覆盖;以代码检查、逻辑覆盖;集成测试集成测试静构结构分析、静态质量度量;静构结构分析、静态质量度量;系统测试系统测试根据黑盒测试结果,采用白盒测试。根据黑盒测试结果,采用白盒测试。5.1.4白盒测试的
11、类别、依据和流程白盒测试的类别、依据和流程1.白盒测试的类别白盒测试的类别白盒测试可分为代码检查法、静态结构分析法、静态质量白盒测试可分为代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、试、Z路径覆盖、程序变异。其中运用最为广泛的是基本路径覆盖、程序变异。其中运用最为广泛的是基本路径测试法。白盒测试的类别具体分为路径测试法。白盒测试的类别具体分为8大类。大类。(1)软件公用问题的测试;软件公用问题的测试;(2)语言测试;语言测试;(3)SQL语句测试;语句测试;(4)数据类型测试;数据类型测试;(5)界
12、面测试;界面测试;(6)数值对象测试;数值对象测试;(7)业务对象测试;业务对象测试;(8)数据管理对象测试。数据管理对象测试。2.白盒测试的依据白盒测试的依据软件需求报告;软件需求报告;软件需求规格说明;软件需求规格说明;程序设计文档;程序设计文档;软件界面设计;软件界面设计;编码规范;编码规范;开发命名标准。开发命名标准。白盒测试的流程白盒测试的流程白盒测试的流程分为界面对象和业务对象白盒测试的流程分为界面对象和业务对象两种方式。两种方式。界面对象测试界面对象测试界面对象测试的流程如图界面对象测试的流程如图5-1所示。所示。业务对象流程测试业务对象流程测试业务对象测试的流程如图业务对象测试
13、的流程如图5-2所示。所示。5.2白盒测试方法白盒测试方法在白盒测试中,可以使用各种测试方法进行测试。但是,测试要考虑五点问题。在白盒测试中,可以使用各种测试方法进行测试。但是,测试要考虑五点问题。(1)测试中,尽量先用自动化工具来进行静态结构分析;)测试中,尽量先用自动化工具来进行静态结构分析;(2)测试中建议先从静态测试开始,如:静态结构分析、代码走查和静态质量度量,)测试中建议先从静态测试开始,如:静态结构分析、代码走查和静态质量度量,然后进行动态测试,如:覆盖率测试;然后进行动态测试,如:覆盖率测试;(3)利用静态分析的结果作为依据,再使用代码检查和动态测试的方式对静态分析结)利用静态
14、分析的结果作为依据,再使用代码检查和动态测试的方式对静态分析结果进行进一步确认,提高测试效率及准确性;果进行进一步确认,提高测试效率及准确性;(4)覆盖率测试是白盒测试中的重要手段,在测试报告中可以作为量化指标的依据,)覆盖率测试是白盒测试中的重要手段,在测试报告中可以作为量化指标的依据,对于软件的重点模块,应使用多种覆盖率标准衡量代码的覆盖率;对于软件的重点模块,应使用多种覆盖率标准衡量代码的覆盖率;(5)在不同的测试阶段,测试的侧重点是不同的。)在不同的测试阶段,测试的侧重点是不同的。在单元测试阶段,以程序语法检查、程序逻辑检查、代码检查、逻辑覆盖为主;在单元测试阶段,以程序语法检查、程序
15、逻辑检查、代码检查、逻辑覆盖为主;在集成测试阶段:需要增加静态结构分析、静态质量度量、以接口测试为主;在集成测试阶段:需要增加静态结构分析、静态质量度量、以接口测试为主;在系统测试阶段:在真实系统工作环境下通过与系统的需求定义作比较,检验完整的在系统测试阶段:在真实系统工作环境下通过与系统的需求定义作比较,检验完整的软件配置项能否和系统正确连接,发现软件与系统软件配置项能否和系统正确连接,发现软件与系统/子系统设计文档和软件开发合同子系统设计文档和软件开发合同规定不符合或与之矛盾的地方;验证系统是否满足了需求规格的定义,找出与需求规规定不符合或与之矛盾的地方;验证系统是否满足了需求规格的定义,
16、找出与需求规格不相符合或与之矛盾的地方,从而提出更加完善的方案。确保最终软件系统满足产格不相符合或与之矛盾的地方,从而提出更加完善的方案。确保最终软件系统满足产品需求并且遵循系统设计的标准和规定;品需求并且遵循系统设计的标准和规定;验收测试阶段:按照需求开发的,体验该产品是否能够满足使用要求;有没有达到原验收测试阶段:按照需求开发的,体验该产品是否能够满足使用要求;有没有达到原设计水平?完成的功能怎样?是否符合用户的需求,达到预期目的为主。设计水平?完成的功能怎样?是否符合用户的需求,达到预期目的为主。5.2.1代码检查代码检查代码检查是静态测试的主要方法,代码检查包括代码走查、代码检查是静态
17、测试的主要方法,代码检查包括代码走查、桌面检查、桌面检查、流流流流程程图图图图审查等。对于代码检查从如下几点进行审查等。对于代码检查从如下几点进行叙述。叙述。1.概述概述代码检查主要检查代码和代码检查主要检查代码和流图流图流图流图设计的一致性、代码结构的设计的一致性、代码结构的合理性、代码编写的标准性、可读性、代码的逻辑表达的合理性、代码编写的标准性、可读性、代码的逻辑表达的正确性等方面。包括变量检查、命名和类型审查、程序逻正确性等方面。包括变量检查、命名和类型审查、程序逻辑审查、程序语法检查和程序结构检查等内容。辑审查、程序语法检查和程序结构检查等内容。最常见的静态测试是找出源代码的语法错误
18、,这类测试可最常见的静态测试是找出源代码的语法错误,这类测试可由编译器来完成,因为编译器可以逐行分析检验程序的语由编译器来完成,因为编译器可以逐行分析检验程序的语法,找出错误并报告。除此之外,测试人员须采用人工的法,找出错误并报告。除此之外,测试人员须采用人工的方法来检验程序,有些地方存在非语法方面的错误,只能方法来检验程序,有些地方存在非语法方面的错误,只能通过人工检测的方法来判断。通过人工检测的方法来判断。2.代码走查目的代码走查目的代码走查是为达到以下目的:代码走查是为达到以下目的:通过检查代码程序是不是按照某种标准或规范编写的代码;通过检查代码程序是不是按照某种标准或规范编写的代码;通
19、过检查代码来发现代码是不是流程图要求的;通过检查代码来发现代码是不是流程图要求的;通过检查代码来发现有没有遗漏的项目;通过检查代码来发现有没有遗漏的项目;代码要易于移植,代码经常需要在不同的硬件中运行,或者使用不同的编译器编译;代码要易于移植,代码经常需要在不同的硬件中运行,或者使用不同的编译器编译;代码要易于阅读、理解和维护。代码要易于阅读、理解和维护。检查代码和设计是否一致;检查代码和设计是否一致;代码是否对遵循标准、是否可读;代码是否对遵循标准、是否可读;代码逻辑表达是否正确;代码逻辑表达是否正确;代码结构是否合理;代码结构是否合理;程序编写与编写标准是否符合;程序编写与编写标准是否符合
20、;程序中是否有不安全、不明确和模糊的部分;程序中是否有不安全、不明确和模糊的部分;编程风格是否符合要求;编程风格是否符合要求;检查变量的交叉引用表:是否有未说明的变量和违反了类型规定的变量;检查变量的交叉引用表:是否有未说明的变量和违反了类型规定的变量;检查标号的交叉引用表:验证所有标号是否有正确;检查标号的交叉引用表:验证所有标号是否有正确;检查子程序、宏、函数:验证每次调用与所调用位置是否正确,调用的子程序、宏、函检查子程序、宏、函数:验证每次调用与所调用位置是否正确,调用的子程序、宏、函数是否存在,参数是否一致;数是否存在,参数是否一致;检查全部等价变量的类型的一致性;检查全部等价变量的
21、类型的一致性;确认常量的取值和数据类型;确认常量的取值和数据类型;选择、激活路径:在设计控制流图中选择某条路径,到实际的程序中激活这条路径,如选择、激活路径:在设计控制流图中选择某条路径,到实际的程序中激活这条路径,如果不能激活,则程序可能有错。果不能激活,则程序可能有错。对照程序的规格说明,详细阅读源代码,比较实际的代码,从差异中发现程序的问题和对照程序的规格说明,详细阅读源代码,比较实际的代码,从差异中发现程序的问题和错误。错误。3.代码检查需要的文档代码检查需要的文档在代码检查检查前应准备好需求文档、程在代码检查检查前应准备好需求文档、程序设计文档、程序的源代码清单代码编码序设计文档、程
22、序的源代码清单代码编码标准、代码缺陷检查表和流程图等。标准、代码缺陷检查表和流程图等。5.2.2代码检查方式代码检查方式代码走查的方式有:代码走查的方式有:1桌面检查桌面检查2走查走查3代码审查代码审查桌面检查桌面检查桌面检查是程序员对源程序代码进行分析、检验,桌面检查是程序员对源程序代码进行分析、检验,并补充相关的文档,发现程序中错误的过程。并补充相关的文档,发现程序中错误的过程。由于程序员熟悉自己的程序,可以有程序员自己由于程序员熟悉自己的程序,可以有程序员自己检查,这样可以节省很多时间,但要注意避免自检查,这样可以节省很多时间,但要注意避免自己的主观判断。己的主观判断。走查走查走查走查(
23、走读走读)是程序员和测试员组成的审查小组通是程序员和测试员组成的审查小组通过逻辑运行程序,发现问题。小组成员要提前阅过逻辑运行程序,发现问题。小组成员要提前阅读设计规格书、程序文本等相关文档,利用测试读设计规格书、程序文本等相关文档,利用测试用例,使程序逻辑运行。用例,使程序逻辑运行。走查可分为以下两步:走查可分为以下两步:第一步:小组负责人把材料发给每个组员,然后第一步:小组负责人把材料发给每个组员,然后由小组成员提出发现的问题。由小组成员提出发现的问题。第二步:通过记录,小组成员对程序逻辑及功能第二步:通过记录,小组成员对程序逻辑及功能提出自己的疑问,开会探讨发现的问题和解决方提出自己的疑
24、问,开会探讨发现的问题和解决方法。法。代码审查代码审查代码审查是程序员和测试员组成的审查小组通过阅读、讨代码审查是程序员和测试员组成的审查小组通过阅读、讨论、分析技术对程序进行静态分析的过程论、分析技术对程序进行静态分析的过程。代码审查可分为以下两步:代码审查可分为以下两步:第一步:小组负责人把程序文本、规范、相关要求、流程第一步:小组负责人把程序文本、规范、相关要求、流程图及设计说明书发给每个成员。图及设计说明书发给每个成员。第二步:每个成员依据所发材料作为审查依据,但是由程第二步:每个成员依据所发材料作为审查依据,但是由程序员讲解程序的结构每、逻辑和源程序。在此过程中,小序员讲解程序的结构
25、每、逻辑和源程序。在此过程中,小组成员可以提出自己的疑问;程序员在讲解自己的程序时,组成员可以提出自己的疑问;程序员在讲解自己的程序时,也能发现自己原来没有注意到的问题。也能发现自己原来没有注意到的问题。为了提高效率,小组在审查会前,可以准备出一份常见错为了提高效率,小组在审查会前,可以准备出一份常见错误清单,提供给参加成员对照检查。误清单,提供给参加成员对照检查。在实际应用中,代码检查能快速找到在实际应用中,代码检查能快速找到20%-30%以上的编以上的编码缺陷和逻辑设计缺陷,代码检查看到的是问题本身而非码缺陷和逻辑设计缺陷,代码检查看到的是问题本身而非征兆。代码走查是要消耗时间的,而且代码
26、检查需要知识征兆。代码走查是要消耗时间的,而且代码检查需要知识的经验积累。的经验积累。5.2.3代码检查项目代码检查项目代码检查项目主要有以下几点:代码检查项目主要有以下几点:1.要求有文档和源程序代码要求有文档和源程序代码一份最新的设计文档;一份最新的设计文档;程序结构图;程序结构图;所有的模块源程序代码;所有的模块源程序代码;代码体系结构描述;代码体系结构描述;目录文件;目录文件;代码组织。代码组织。2目录文件组织目录文件组织所有的文件名简单明了,见名知意。所有的文件名简单明了,见名知意。文件和模块分组清晰。文件和模块分组清晰。每行代码在每行代码在80字符以内。字符以内。每个文件只包含一个
27、完整模块的代码。每个文件只包含一个完整模块的代码。3.数据库检查数据库检查数据库命名使用小写英语字母,数据库命名使用小写英语字母,数字和下划线,无其他字符数字和下划线,无其他字符;数据库命名采用项目名或产品名称命名数据库命名采用项目名或产品名称命名,长度小于,长度小于20位位;数据库中的所有表字符集统一数据库中的所有表字符集统一;数据库对象的命名不使用保留关键字;数据库对象的命名不使用保留关键字;数据库设计考虑到将来可能存在的异种数据库迁移数据库设计考虑到将来可能存在的异种数据库迁移;字段与画面项目能够一一对应(部分标识符字段和系统设定字段除外);字段与画面项目能够一一对应(部分标识符字段和系
28、统设定字段除外);索引是多值字段索引是多值字段;索引是单一字段索引是单一字段;字段取值符合域定义字段取值符合域定义;字段的类型和长度能够满足字段的值的最大限量字段的类型和长度能够满足字段的值的最大限量;文本字段有充足的余量对应可能的长度变更文本字段有充足的余量对应可能的长度变更;数字字段考虑了充足的余量和精度对应可能的长度或精度变更数字字段考虑了充足的余量和精度对应可能的长度或精度变更;针对客户的特定应用采用了视图机制针对客户的特定应用采用了视图机制。4检查函数检查函数函数头清晰地描述了函数的功能。函数头清晰地描述了函数的功能。函数的名字清晰地定义了它所要做的事情。函数的名字清晰地定义了它所要
29、做的事情。参数遵循一个规律的顺序。参数遵循一个规律的顺序。所有的参数都是要有用的。所有的参数都是要有用的。函数参数接口关系清晰明了。函数参数接口关系清晰明了。函数所使用的算法要有说明。函数所使用的算法要有说明。代码中有相关注解代码中有相关注解;函数只做一件事情;函数只做一件事情;函数出口都有返回值函数出口都有返回值;函数异常处理清楚函数异常处理清楚。5.数据类型及变量数据类型及变量每个数据类型都有其解释。每个数据类型都有其解释。每个数据类型都有正确的取值。每个数据类型都有正确的取值。数据结构尽量简单,降低复杂性。数据结构尽量简单,降低复杂性。每一个变量的命名,都明确的表示代表什么。每一个变量的
30、命名,都明确的表示代表什么。所有的变量都要被使用。所有的变量都要被使用。全部变量要描述清晰。全部变量要描述清晰。数据来源正确性;数据来源正确性;数据处理过程正确性;数据处理过程正确性;数据处理结果不正确性;数据处理结果不正确性;变量分配了正确的长度、类型和存储空间;变量分配了正确的长度、类型和存储空间;静态变量明确区分;静态变量明确区分;变量初始化;变量初始化;变量的命名不与标准库中的命名相冲突;变量的命名不与标准库中的命名相冲突;全局变量描述;全局变量描述;类型转换。类型转换。6.检查条件判断语句检查条件判断语句If/else使用正确使用正确;无嵌套的无嵌套的if链链数字,字符,指针和数字,
31、字符,指针和0/NULL/FLSE判断明确判断明确;不要有臃肿的判断逻辑;不要有臃肿的判断逻辑;所有的判断条件边界是否正确;所有的判断条件边界是否正确;判断体足够短。判断体足够短。最常见的情况优先判断。最常见的情况优先判断。7.检查循环体检查循环体循环体不为空;循环体不为空;循环之前做好初始化代码循环之前做好初始化代码;有明确的多次循环操作,使用有明确的多次循环操作,使用For循环循环;不明确的多次循环操作,使用不明确的多次循环操作,使用while循环;循环;循环终止的条件清晰循环终止的条件清晰;所有的循环边界是否正确;所有的循环边界是否正确;循环体内的循环变量起到指示作用;循环体内的循环变量
32、起到指示作用;循环命名要有意义;循环命名要有意义;循环终止条件清晰。循环终止条件清晰。8.检查代码注释检查代码注释有一个简单的说明,用于描述代码的结构有一个简单的说明,用于描述代码的结构;每个文件和模块均以给予解释每个文件和模块均以给予解释;解释说明代码功能,准确描述代码意义解释说明代码功能,准确描述代码意义;解释不过于简单解释不过于简单;注解清楚正确注解清楚正确,并且易懂;并且易懂;所有注释要具体,清晰;所有注释要具体,清晰;无用的代码及注释要删除;无用的代码及注释要删除;代码的注释与代码是否一致代码的注释与代码是否一致?注释是否是多余的。注释是否是多余的。9.桌面检查桌面检查检查代码和设计
33、的一致性;检查代码和设计的一致性;代码对标准的遵循、可读性;代码对标准的遵循、可读性;代码逻辑表达的正确性;代码逻辑表达的正确性;代码结构的合理性;代码结构的合理性;程序编写与编写标准的符合性;程序编写与编写标准的符合性;程序中不安全、不明确和模糊的部分;程序中不安全、不明确和模糊的部分;编程风格问题等。编程风格问题等。10.检查功能检查功能重复的功能重复的功能;多余的功能多余的功能;功能实现与设计要求不相符功能实现与设计要求不相符;功能使用性、方便性、易用性。功能使用性、方便性、易用性。11.检查界面检查界面界面美观界面美观;控件排列、格式;控件排列、格式;焦点控制合理或全面性。焦点控制合理
34、或全面性。12.检查流程检查流程流程控制不符和要求流程控制不符和要求;流程实现不完整。流程实现不完整。13.检查提示信息检查提示信息提示信息重复或出现时机合理性;提示信息重复或出现时机合理性;提示信息格式和要求的合理性提示信息格式和要求的合理性;提示框返回后停留位置的合理性。提示框返回后停留位置的合理性。14.输入输出检查输入输出检查所有文件的属性描述清楚;所有文件的属性描述清楚;输入参数的异常是否处理了;输入参数的异常是否处理了;文件结束的条件进行检查。文件结束的条件进行检查。15.程序(模块)检查程序(模块)检查程序中所有的异常是否处理了程序中所有的异常是否处理了?;程序中是否存在重复的代
35、码程序中是否存在重复的代码?程序结构是否清晰。程序结构是否清晰。16.表达式分析表达式分析对表达式进行分析以发现和纠正在表达式中出现的错误如:在表达式对表达式进行分析以发现和纠正在表达式中出现的错误如:在表达式中不正确的使用了括号造成错误、数组下标越界错误、除数为零、浮中不正确的使用了括号造成错误、数组下标越界错误、除数为零、浮点数计算的误差等。点数计算的误差等。17.接口分析接口分析接口分析主要是对接口一致性的分析如:各模块之间接口接口分析主要是对接口一致性的分析如:各模块之间接口一致性;模块与外部数据库的接口一致性;形参与实参在一致性;模块与外部数据库的接口一致性;形参与实参在类型数量、顺
36、序、维数、使用上的一致性;全局变量和公类型数量、顺序、维数、使用上的一致性;全局变量和公共数据区在使用上的一致性。共数据区在使用上的一致性。18.函数调用关系图函数调用关系图函数调用关系图:通过应用程序各函数之间的调用关系展函数调用关系图:通过应用程序各函数之间的调用关系展示了系统的结构。列出所有函数,用连线表示调用关系,示了系统的结构。列出所有函数,用连线表示调用关系,作用:可以检查函数的调用关系是否正确、是否存在孤立作用:可以检查函数的调用关系是否正确、是否存在孤立的函数而没有被调用、明确函数被调用的频繁度、对调用的函数而没有被调用、明确函数被调用的频繁度、对调用频繁的函数可以重点检查。频
37、繁的函数可以重点检查。19.模块控制流图模块控制流图模块控制流图由许多结点和连接结点的边组成的图形,其模块控制流图由许多结点和连接结点的边组成的图形,其中每个结点代表一条或多条语句,边表示控制流向,可以中每个结点代表一条或多条语句,边表示控制流向,可以直观地反映出一个函数的内部结构。直观地反映出一个函数的内部结构。20.其它检查其它检查1)软件的扩展字符,编码,兼容性,警告软件的扩展字符,编码,兼容性,警告/提示信息。提示信息。2)检查变量的交叉引用表:检查未说明的变量和违反了类型规定的变量,变量检查变量的交叉引用表:检查未说明的变量和违反了类型规定的变量,变量的引用和使用情况。的引用和使用情
38、况。3)检查标号的交叉引用表:验证所有标号的正确性。检查标号的交叉引用表:验证所有标号的正确性。4)检查子程序、宏、函数:验证每次调用与所调用位置是否正确,调用的子程检查子程序、宏、函数:验证每次调用与所调用位置是否正确,调用的子程序、宏、函数是否存在,参数是否一致。序、宏、函数是否存在,参数是否一致。5)等价性检查:检查全部等价变量的类型的一致性。等价性检查:检查全部等价变量的类型的一致性。6)常量检查:确认常量的取值和数制、数据类型。常量检查:确认常量的取值和数制、数据类型。7)标准检查:检查程序中是否违反标准的问题。标准检查:检查程序中是否违反标准的问题。8)风格检查:检查程序的设计风格
39、。风格检查:检查程序的设计风格。9)比较控制流:比较设计控制流图和实际程序生成的控制流图的差异。比较控制流:比较设计控制流图和实际程序生成的控制流图的差异。10)选择、激活路径:在设计控制流图中选择某条路径,到实际的程序中激活选择、激活路径:在设计控制流图中选择某条路径,到实际的程序中激活这条路径,如果不能激活,则程序可能有错。这条路径,如果不能激活,则程序可能有错。11)补充文档:根据以上检查项目,可以编制代码规则,规范和检查表等作为测补充文档:根据以上检查项目,可以编制代码规则,规范和检查表等作为测试用例。试用例。12)对照程序的规格说明,详细阅读源代码,比较实际的代码,从差异中发现对照程
40、序的规格说明,详细阅读源代码,比较实际的代码,从差异中发现程序的问题和错误。程序的问题和错误。13)检查必须遵守规定代码的语法格式、语法规则,如排版、注释、标识符命检查必须遵守规定代码的语法格式、语法规则,如排版、注释、标识符命名、可读性、变量、函数、过程、可测性、程序效率、质量保证、代码编辑、名、可读性、变量、函数、过程、可测性、程序效率、质量保证、代码编辑、编译、审查、代码测试、维护、宏等各方面的编码要求。编译、审查、代码测试、维护、宏等各方面的编码要求。我们在进行人工代码检查时,可以制作代码走查缺陷表,在缺陷检查表中,我我们在进行人工代码检查时,可以制作代码走查缺陷表,在缺陷检查表中,我
41、们列出工作中遇到的典型错误。代码走查缺陷表如表们列出工作中遇到的典型错误。代码走查缺陷表如表5-1所示。所示。5.2.4静态结构分析静态结构分析静态结构分析主要是以图形的方式表现程序的内部静态结构分析主要是以图形的方式表现程序的内部结构,例如函数调用关系图、函数内部控制流图。结构,例如函数调用关系图、函数内部控制流图。静态结构分析是测试者通过使用测试工具分析程序静态结构分析是测试者通过使用测试工具分析程序源代码的系统结构、数据结构、数据接口、内部控源代码的系统结构、数据结构、数据接口、内部控制逻辑等内部结构,生成函数调用关系图、模块控制逻辑等内部结构,生成函数调用关系图、模块控制流图、内部文件
42、调用关系图等各种图形图表,清制流图、内部文件调用关系图等各种图形图表,清晰地标识整个软件的组成结构,便于理解,通过分晰地标识整个软件的组成结构,便于理解,通过分析这些图表,检查软件有没有存在缺陷或错误;包析这些图表,检查软件有没有存在缺陷或错误;包括控制流分析、数据流分析、接口分析、表达式分括控制流分析、数据流分析、接口分析、表达式分析。析。通过应用程序各函数之间的调用关系展示了系统的结构。通过应用程序各函数之间的调用关系展示了系统的结构。列出所有函数,用连线表示调用关系和作用。静态结构主列出所有函数,用连线表示调用关系和作用。静态结构主要分析如下内容:要分析如下内容:1.检查函数的调用关系是
43、否正确;检查函数的调用关系是否正确;2.是否存在孤立的函数而没有被调用;是否存在孤立的函数而没有被调用;3.明确函数被调用的频繁度,对调用频繁的函数可以重点检明确函数被调用的频繁度,对调用频繁的函数可以重点检查。查。4.编码的规范性编码的规范性;5.资源是否释放资源是否释放;6.数据结构是否完整和正确数据结构是否完整和正确;7.是否有死代码和死循环是否有死代码和死循环;8.代码本身是否存在明显的效率和性能问题代码本身是否存在明显的效率和性能问题;9.类和函数的划分是否清晰,易理解类和函数的划分是否清晰,易理解;10.代码是否有完善的异常处理和错误处理。代码是否有完善的异常处理和错误处理。5.2
44、.5SQL语句测试语句测试 主要检查以下两点:主要检查以下两点:1.语句检查语句检查1)每个数据库对象都有拥有者;)每个数据库对象都有拥有者;2)Table:是是DB的基本单位,由行和列组成,用于存储数据;的基本单位,由行和列组成,用于存储数据;3)DataType:限制输入到表中的数据类型;限制输入到表中的数据类型;4)Constraint:有主键、外键、唯一键、缺省和检查有主键、外键、唯一键、缺省和检查5种;种;5)Default:自动插入常量值;自动插入常量值;6)Rule:限制表中列的取值范围;限制表中列的取值范围;7)Trigger:一种特出类型的储存过程,当有操作影响到他保护的数据
45、时,一种特出类型的储存过程,当有操作影响到他保护的数据时,自动触发执行;自动触发执行;8)Index:提高查询速度;提高查询速度;9)View:查看一个或多个表的一种方式;查看一个或多个表的一种方式;10)StoredProcedure:一组预编译的一组预编译的SQL语句,可以完成指定的操作。语句,可以完成指定的操作。2.类型转换类型转换检查检查SQL语句的类型转换时,主要避免显示或隐含的类型转换。语句的类型转换时,主要避免显示或隐含的类型转换。5.2.6代码检查的分析与评价代码检查的分析与评价代码检查的分析与评价主要注意以下两大点:代码检查的分析与评价主要注意以下两大点:1能力能力陈述经代码
46、检查证实了的本软件的能力。陈述经代码检查证实了的本软件的能力。2缺陷和限制缺陷和限制陈述经代码检查测试证实的软件缺陷和限制,说明每项缺陷和限制对软件性能的影响,并说明全部测陈述经代码检查测试证实的软件缺陷和限制,说明每项缺陷和限制对软件性能的影响,并说明全部测得的性能缺陷的累积影响和总影响。缺陷和限制:得的性能缺陷的累积影响和总影响。缺陷和限制:(1)数据引用错误:是指未经正确声明和初始化的变量、常量、数组、字符串或记录而导致的软件缺陷。数据引用错误:是指未经正确声明和初始化的变量、常量、数组、字符串或记录而导致的软件缺陷。注意:数据引用错误是缓冲区溢出的主要原因注意:数据引用错误是缓冲区溢出
47、的主要原因一个造成许多软件安全问题的缺陷。一个造成许多软件安全问题的缺陷。(2)数据声明错误:其产生的原因是不正确地声明或使用变量和常量。数据声明错误:其产生的原因是不正确地声明或使用变量和常量。(3)计算错误计算错误(4)比较错误比较错误小于、大于、等于、不等于、真、假。比较和判断错误很可能是由于边界条件问题。小于、大于、等于、不等于、真、假。比较和判断错误很可能是由于边界条件问题。(5)控制流程错误控制流程错误控制流程错误的原因是编程语言中循环等控制结构未按预期方式工作,它们通常由计算或者比较错控制流程错误的原因是编程语言中循环等控制结构未按预期方式工作,它们通常由计算或者比较错误直接或间
48、接造成。误直接或间接造成。(6)子程序参数错误子程序参数错误来源是软件子程序不正确的传递数据。来源是软件子程序不正确的传递数据。(7)输入输入/输出错误输出错误包括文件读取、接受键盘或者鼠标输入以及向打印机或者屏幕等输出设备写入错误。包括文件读取、接受键盘或者鼠标输入以及向打印机或者屏幕等输出设备写入错误。(8)其它错误其它错误编码错误?警告编码错误?警告/提示信息错误?提示信息错误?通过对代码检查结果的分析,需标明遗留缺陷、局限性和软件的约束限制等,说明该代码是否已达到通过对代码检查结果的分析,需标明遗留缺陷、局限性和软件的约束限制等,说明该代码是否已达到预定的结果,判定代码能否交付使用。审
49、查小组必须做出审查结果的书面总结报告,并使报告便于开预定的结果,判定代码能否交付使用。审查小组必须做出审查结果的书面总结报告,并使报告便于开发小组的成员使用。发小组的成员使用。5.2.7静态质量度量静态质量度量静态质量度量是测试者通过软件质量、质量度量模型和度量规则分析的。静态质量度量是测试者通过软件质量、质量度量模型和度量规则分析的。1软件质量软件质量软件质量包括以下软件质量包括以下6个方面:个方面:功能性(功能性(functionality););可靠性(可靠性(reliability););可用性(可用性(usability););有效性(有效性(efficiency););可维护性(可
50、维护性(maintainability););轻便性(轻便性(portability)。)。2.质量度量质量度量质量度量包括以下质量度量包括以下3点:点:质量因素(质量因素(Factors)质量因素与分类标准的计算方式相似,依据各分类标准取值组合权重方法来计算,依据结果将软件质量分为质量因素与分类标准的计算方式相似,依据各分类标准取值组合权重方法来计算,依据结果将软件质量分为四个等级,与分类标准等级内容相同。四个等级,与分类标准等级内容相同。分类标准(分类标准(criteria)对某一软件质量分为不同的分类标准,每个分类标准由一系列度量规则组成,每个规则分配一个权重,每个对某一软件质量分为不同