当前位置:
文档之家› 软件测试及其案例分析 第7章
软件测试及其案例分析 第7章
(4) 审查:由受过专门培训的主持人来领导,并定义参 与者(同行)的角色,有正式的入口、出口准则及度量标准, 主要目的是发现Bug。
代码检查应在编译和动态测试之前进行,在检查前,应 准备好需求描述文档、程序设计文档、程序的源代码清单、 代码编码标准和代码Bug检查表等。
2) 代码质量度量 软件的质量是软件属性的各种标准度量的组合。 ISO/IEC9126国际标准所定义的软件质量包括六个方面:功 能性、可靠性、易用性、效率、可维护性和可移植性。针对 软件的可维护性,目前业界主要存在三种度量参数:Line复 杂度、Halstead复杂度和McCabe复杂度。其中: (1) Line复杂度以代码的行数作为计算的基准。 (2) Halstead复杂度以程序中使用到的运算符与运算元 的数量作为计数目标(直接测量指标),然后可以据此计算出 程序容量、工作量等。
7.1 静态测试与动态测试
原则上可以把软件测试方法分为静态测试和动态测试两 大类。静态测试包括代码审查、静态结构分析等;动态测试 包括白盒测试和黑盒测试。
7.1.1 静态测试
静态测试的主要特征是不利用计算机运行被测试的程序, 而是采用其他手段达到检测的目的。但静态测试的特征并不 意味着完全不利用计算机作为分析的工具。它与人工测试有 着根本的区别。
● 不允许的递归; ● 不适当的处理顺序; ● 无终止的死循环; ● 调用并不存在的子程序; ● 遗漏标号或代码; ● 不适当的链接。 找到以下问题的根源: ● 不会执行到的代码; ● 未使用过的变量; ● 可疑的计算;
● 未引用过的标号; ● 潜在的死循环。 提供间接涉及程序欠缺的信息: ● 违背编码规则。 ● 每一类型语句出现的次数; ● 所用变量和常量的交叉引用表; ● 标识符的使用方式; ● 过程的调用层次。
(2) 为进一步查错作准备、选择测试用例、进行符号测 试。
静态测试的结果:生成各种引用表、静态错误分析。
3.静态结构分析
静态结构分析主要是以图形的方式表现程序的内部结构, 如函数调用关系图、函数内部控制流图。其中,
(1) 函数调用关系图以直观的图形方式描述应用程序中 各个函数的调用和被调用
关系; (2) 控制流图显示一个函数的逻辑结构,由许多节点组 成,一个节点代表一条语句或数条语句,连接节点的叫边, 边用来表示节点间的控制流向。
2.静态测试的特点、地位、作用和结果
静态测试特点:适用于文档回顾和代码回顾,静态测试 可以开始的非常早,只有静态测试能够发现文档中的Bug。
对于静态测试在软件测试中究竟占据什么地位,人们的 见解各不相同,原因在于人们已经开发出了一些静态测试系 统作为软件测试工具。静态测试被当做一种自动化的代码检 验方法。对于软件开发人员来说,静态测试只是进行动态测 试的预处理工作。有人认为,静态测试并不是要找出程序中 的Bug,因为编译系统已经能做到这一点。
第七章 实用软件测试技术
7.1 静态测试与动态测试 7.2 兼容性测试 7.3 性能测试 7.4 验收测试 7.5 回归测试 7.6 非增式测试、增式测试、混合增 量式测试
第七章 实用软件测试技术
7.7 模块接口测试技术 7.8 文档测试和脚本测试 7.9 测试件和构件测试 7.10 界面测试 7.11 软件可靠性测试 7.12 面向对象软件测试 本章小结
实际上,这种看法是片面的,尽管编译系统也能发现某些程 序Bug,但这些远非软件中存在的大部分Bug。静态测试的 查错功能是编译程序所不能代替的。为了说明这一点,下面 列出静态测试能够做到的一些工作。
(1) 程序中可能发现的Bug: ● 用错的局部变量和全局变量; ● 未定义的变量; ● 不匹配的参数; ● 不适当的循环嵌套和分支嵌套;
在软件测试的整个流程中,每一个阶段都非常重要,需 要测试者综合用户需求和开发人员的设计做出准确的判断、 进行细致的分析。其中相对较重要、复杂的一个环节就是测 试设计,测试设计中基本的软件测试方法包括静态/动态测试、 黑盒/白盒/灰盒测试、积极/消极测试和不确定性/确定性测试 等。第二章简单介绍了很多软件测试方法和技术,本章在第 二章的基础上着重介绍一些实用的软件测试方法和技术。
1.定义
静态测试:借助工具来检查软件的代码和模型,主要对 程序进行控制流分析、数据流分析、接口分析和表达式分析 等。比如在单元测试期间,开发人员通过预先定义的规则, 使用静态测试工具对代码进行检查;在软件建模期间,设计 人员可以使用静态测试工具对软件模型进行分析。
静态测试是单元测试的第一步,要在进行动态测试前先 完成该项测试。这一阶段的主要工作是保证代码算法的逻辑 正确性、清晰性、规范性、一致性、算法高效性,并尽可能 地发现程序中隐含的Bug。
这些方法本身有各自的目标和步骤,如收集一些程序信息, 以利于查找程序中的各种Bug和可疑的程序构造;从程序中 提出语义或结构要点,供进一步分析;以符号代替数值求得 程序的结果,便于对程序进行运算规律的检验;对程序进行 一些处理,为进一步动态测试做准备;通过程序静态特性分 析,找出Bug和可疑之处,例如不匹配的参数、不适当的循 环嵌套和分支嵌套、不允许的递归、未使用过的变量、空指 针的引用和可疑的计算等。静态测试结果可用于进一步的查 错,为测试用例的选取提供帮助,为软件的质量保证提供依 据,以提高软件的可靠性和易维护性。
(1) 非正式评审:没有正式的过程,多用于对编程或以 技术为评价标准的设计/编码中,其主要目的是以较低成本 发现问题。
(2) 走查:由程序编写者发起,参与者主要为研发同事, 主要目的是学习、理解并发现Bug。
(3) 技术评审:定义流程,并将Bug文档化,参与者包括 同行和技术专家,主要目的是发现Bug,进行讨论并解决技 术问题,检查与规格说明是否符合等。
4.静态测试的步骤
静态测试通过静态分析和代码审查两种形式进行。静态 测试方法是对被测程序进行特性分析的一些方法的总称,包 括代码检查、静态结构分析、代码质量度量等。
1) 代码检查 代码检查是对软件的相关产出物(包括需求、设计、代 码、测试计划、测检查代码和设计的一致性,代码 的可读性,代码逻辑表达的正确性,代码结构的合理性等方 面。检查形式主要有四种类型: