关于软件测试的一些基本知识
软件测试方法:分为两类
(1)静态测试:不要求在计算机上实际执行所测程序,主要以一些人工的模拟技术对软件进行分析和测试
(2)动态测试:通过输入一组预先按照一定的测试准则构造的实例数据动态运行程序,而达到发现程序错误的过程,特点如下:
l 必须生成测试数据来运行被测试程序,取得程序运行的真实情况、动态情况,进而进行分析
l 测试质量依赖于测试数据
l 生成测试数据,分析测试结果的工作量大,使开展测试工作费时、费力、费人
l 动态测试中涉及多方面工作,人员多,设备多,数据多,要求有较好的管理和工作规程 一.概述 1. 定义
也称结构测试或逻辑驱动测试,按照程序内部的结构对程序进行测试,通过测试来检查产品内部动作是否按照设计规格说明书的规定正常进行,检查程序中的每条通路是否能按照预定要求正确工作 2. 测试内容
把测试对象看成是一个打开的盒子,测试人员依据程序内部逻辑结构相关信息,设计或选择测试用例,对程序的所有逻辑路径进行测试,通过不同点检查程序的状态,确定实际的状态与预期的状态一致 3. 测试基本技术
(1)词法分析与语法分析 (2)静态错误分析 (3)程序插桩技术 4. 测试方法 (1)代码检查法 (2)静态结构分析法 (3)静态质量度量法 (4)逻辑覆盖法 (5)基本路径测试法 (6)域测试 (7)符号测试 (8)Z路径覆盖 (8) 程序变异
5.黑盒测试与白盒测试 黑盒测试 白盒测试
不涉及程序结构 考查程序逻辑结构
用软件规格说明书生成测试用例 用程序结构信息生成测试用例 可适用于从单元测试到系统联调 适用于单元测试和集成测试 某些代码段得不到测试 对所有逻辑路径进行测试 二.白盒测试基本技术 1.词法和语法分析
(1)获取信息
l 可以获取软件组成的重要基本因数,如变量标识符、过程标识符、常量等 l 组合获取的基本因数,可以得到软件的基本信息,如:
v 标号交叉引用表:列出各模块中出现的全部标号及标号的属性,模块以外的全局、计算标号
v 变量交叉引用表:列出变量定义及引用信息,变量的属性,变量类型(全局、局部) v 子程序、宏和函数表:列出各个子程序、宏及函数的属性,输入、输出参数信息 v 等价表:列出在等价语句和等值语句中出现的全部变量和标号 v 常数表:列出全部数字常数和字符常数 (2)作用
l 直接从表中查出说明/使用错误,如标号交叉引用表、变量交叉引用表 l 为用户提供辅助信息,如子程序、宏和函数表、等价表、常数表 l 用来做错误预测和程序复杂度计算,如操作符和操作数的统计表 2.静态错误分析
用于确定在源程序中是否有某类错误或?危险?结构,包括以下几种: (1) 类型和单位分析
对源程序的类型进行检查,为了强化检查效果,扩充一些新的数据类型,进行静态预处理程序,分析程序中的类型错误 (2) 引用分析
l 对程序中变量的引用进行检查,发现引用异常错误(如变量在定义前被引用,变量定义后未被引用)。
l 采用深度优选的方法遍历程序流图的每一条路径
l 建立引用异常的探测工具,包括变量定义表和变量引用表 (3) 表达式分析
对表达式进行分析,以发现和纠正在表达式出现的错误,如: l 在表达式中不正确的使用了括号造成错误 l 数组下标越界错误 l 除数为零
l 浮点数计算的误差(最复杂) (4) 接口分析
接口一致性是程序的静态错误分析和设计分析共同研究的题目,接口分析主要对下内容时进行一致性的分析:
l 各模块之间接口一致性
l 模块与外部数据库的接口一致性
l 形参与实参在类型,数量,顺序,维数,使用上的一致性 l 全局变量和公共数据区在使用上的一致性 3.程序插桩技术 (1) 概述
在动态测试中,是一种基本的测试手段,有广泛的应用
主要借助向程序中插入操作,来实现测试目的的方法(即向源程序中添加一些语句(也称探测器),实现对程序语句的执行、变量的变化等情况进行检查) (2) 设计时考虑的问题 l 明确要探测哪些信息
l 在程序的什么部位设置探测点
l 需要设计多少个探测点
(3) 探测点设置位置(以Fortran为例) l 程序块的第一个可执行语句之前 l entry语句的前后
l 有标号的可执行语句处 l 循环语句之后 l 条件语句之后 l logical if语句之后 l call语句之后 l go to语句之后 (4) 断言语句
在程序中的特定部位插入某些用以判断变量特性的语句,使得程序执行中这些语句得以证实,从而使程序的运行特性得到证实,我们把这些插入的语句称为断言语句。 三.白盒测试方法-静态测试 1. 代码检查法 (1) 目的
通过桌面检查,代码审查和走查方式,对以下内容进行检查 l 检查代码和设计的一致性 l 代码对标准的遵循、可读性 l 代码逻辑表达的正确性 l 代码结构的合理性
l 程序编写与编写标准的符合性
l 程序中不安全、不明确和模糊的部分 l 编程风格问题等 (2) 代码检查方式
方式名称 执行人员 检查内容 检查过程
桌面检查 程序员 对源程序代码进行分析、检验,并补充相关的文档,发现程序中的错误 代码审查 程序员和测试员组成的审查小组 通过阅读、讨论和争议,以程序进行静态分析的过程 第一步:小组成员提前阅读设计规格书、程序文本等相关文档第二步:召开程序审查会,开发人员读程序,审查小组讨论、发现、解决问题
走查 程序员和测试员组成的审查小组 通过逻辑运行程序,发现问题 第一步:小组成员提前阅读设计规格书、程序文本等相关文档第二步:利用测试用例,使程序逻辑运行,记录程序的踪迹,发现、讨论、解决问题
(3) 代码检查项目(采用分析技术)
l 检查变量的交叉引用表:检查未说明的变量和违反了类型规定的变量,变量的引用和使用情况
l 检查标号的交叉引用表:验证所有标号的正确性
l 检查子程序、宏、函数:验证每次调用与所调用位置是否正确,调用的子程序、宏、函数是否存在,参数是否一致
l 等价性检查:检查全部等价变量的类型的一致性 l 常量检查:确认常量的取值和数制、数据类型 l 标准检:检查程序中是否违反标准的问题 l 风格检查:检查程序的设计风格
l 比较控制流:比较设计控制流图和实际程序生成的控制流图的差异
l 选择、激活路径:在设计控制流图中选择某条路径,到实际的程序中激活这条路径,如果不能激活,则程序可能有错
l 对照程序的规格说明,详细阅读源代码,比较实际的代码,从差异中发现程序的问题和错误
l 补充文档
根据以上检查项目,可以编制代码规则,规范和检查表等作为测试用例 (4) 编码规范
程序编写过程中必须遵守的规则,规定代码的语法格式、语法规则,如排版、注释、标识符命名、可读性、变量、函数、过程、可测性、程序效率、质量保证、代码编辑、编译、审查、代码测试、维护、宏等各方面的编码要求 (5) 代码检查规则
对程序逻辑结构检查时,所规定的规则,形成 (6) 缺陷检查表
主要包括一些容易出错的地方和在以往工作中遇到的典型错误,形成表格形式 重要性 审查项 结论
文件结构 重要 头文件和定义文件的名称是否合理 2. 静态结构分析法
在静态结构分析中,测试者通过使用测试工具分析程序源代码的系统结构、数据结构、数据接口、内部控制逻辑等内部结构,生成函数调用关系图、模块控制流图、内部文件调用关系图等各种图形图表,清晰地标识整个软件的组成结构,便于理解,通过分析这些图表,检查软件有没有存在缺陷或错误;包括控制流分析、数据据流分析、接口分析、表达式分析 (1) 函数调用关系图:通过应用程序各函数之间的调用关系展示了系统的结构。列出所有函数,用连线表示调用关系,作用: l 可以检查函数的调用关系是否正确 l 是否存在孤立的函数而没有被调用
l 明确函数被调用的频繁度,对调用频繁的函数可以重点检查
(2) 模块控制流图:由许多结点和连接结点的边组成的图形,其中每个结点代表一条或多条语句,边表示控制流向,可以直观地反映出一个函数的内部结构。
*例子1-GIS软件:存在无法执行的死代码;有多个出口,可能没有在所有出口进行内存释放与回收,有内存泄露的可能
*例子2-MIS软件:有多个出口,存在内存泄露的可能;有10逻辑判断结点,易出现逻辑错误,降低可靠性,可能会破坏对CPU操作进行优化的处理,影响其运行性能 3. 静态质量度量法
(1) 软件质量:根据ISO/IEC9126 国际标准,包括以下六个方面: l 功能性(functionality) l 可靠性(reliability) l 可用性(usability) l 有效性(efficiency)
l 可维护性(maintainability) l 轻便性(portability)
(2) 质量度量模型(从上到下) l 质量因素(Factors):与分类标准的计算方式相似,依据各分类标准取值组合权重方法来计算,依据结果将软件质量分为四个等级,与分类标准等级内容相同 l 分类标准(criteria):对某一软件质量分为不同的分类标准,每个分类标准由一系列度量
相关推荐: