3软件静态测试技术课件分解
Slide 16
环形复杂度的应用
void Sort ( int iRecordNum, int iType ) 1{ 2 int x=0; 3 int y=0; 4 while ( iRecordNum-- > 0 ) 5 { 6 If ( iType==0 ) 7 break; 8 else 9 If ( iType==1 ) 10 x=x+10; 11 else 12 y=y+20; 13 } 14 }
第三章 软件静态测试技术
A Free sample background from
Slide 3
软件静态测试(续)
静态测试内容及过程
测试需求分析:依据软件开发计划、需求文档确定测试的 需求,建立测试基础与评审基础,建立标准测试计划。 测试概要设计:在需求分析的基础上,完成测试方案的制 定,包括测试内容、测试策略、测试方法、测试目标。 测试详细设计:主要任务是完成测试进程的各项具体安排 和测试实施的具体细节考虑,包括测试工具选用、测试人 员组织及测试进度安排等。 测试执行与结果分析:根据已制定完成的静态测试计划进 行静态测试,落实和完成各项测试的具体任务,并提交测 试工作的交付物。
Slide 1
第3章 软件静态测试技术
3.1 软件静态测试 3.2 程序数据流分析方法 3.3 程序控制流分析方法 3.4 软件的复杂性度量 3.5 软件评审
第三章 软件静态测试技术
A Free sample background from
(1)将程序流程图中的每个分支转换为一个独立的节点。 (2)在分支前的顺序块(不论有几个)均可合并入节点。 (3)对所有的节点及程序控制的流向进行编号。
对于复合条件,则可将其分解为多个单个条件,并映射成 控制流图。
第三章 软件静态测试技术
A Free sample background from
第三章 软件静态测试技术
A Free sample background from
Slide 4
软件静态测试(续)
静态测试技术——代码检查
代码检查包括代码走查(自检、他人检查或代码审查会等 形式),主要检查代码和设计的一致性,代码对标准的遵 循、可读性,代码逻辑表达的正确性,代码结构的合理性 等方面。 在实际测试运用中,代码检查比动态测试更为有效,能够 快速并较准确地找到缺陷,发现30% ~ 60%的逻辑设计和 编码缺陷的问题。 代码检查一般在编译与动态测试之前进行,看到的是程序 问题的本身而非征兆(不需做额外的错误定位工作),因 此非常耗时,而且需要有比较深厚的专业技术知识与大量 编程经验的积累。
第三章 软件静态测试技术
A Free sample background from
Slide 7
3.2 程序数据流分析方法
数据流分析 数据流分析是在程序代码经过的路径上检查数据的用法, 主要是为了发现定义/引用异常的缺陷。这里的异常指可能 会导致程序失效的情形,异常可能会触发运行风险。 在数据流分析过程中,需要检查每个变量的使用情况。对 变量的用法或变量的状态区别为三种类型:已定义的(d) – 变量已经赋值;引用的(r) – 读取或使用变量的值;没有定 义的(u) – 变量没有定义具体的值。根据变量的使用状况, 可以区分数据流异常的三种情况: • ur异常– 程序路径(r)上读取了没有定义(u)的变量 • du异常– 变量被赋值(d),但这个变量已经变成无效或没有 定义(u)的状态,同时没有被引用 • dd异常– 变量接受了第二个值(d),同时第一个值没被使用
第三章 软件静态测试技术
A Free sample background from
Slide 5
软件静态测试(续)
静态测试技术——程序结构静态分析 程序结构静态分析主要以图形方式表现程序的内部结构, 例如函数调用关系图、函数内部控制流图。 静态结构分析的检查项:代码风格和规则审查;程序设计 和结构的审核;业务逻辑的审核;走查、审查与技术复审 手册。
第三章 软件静态测试技术
A Free sample background from
Slide 13
程序控制流分析方法(续)
将程序流程图转换为控制流图
将程序流程图转换为控制流图主要是为了进行软件复杂度 的度量,并能方便地设计测试用例。转换的方法如下(关 键是对程序分支的处理):
其中,E是控制流图中边的数量,N是控制流图中的节点 数量。
V(G) = P+1
其中,P是控制流图G中判定节点的数量。
环形复杂度的数值越大,理解程序模块的难度越高。通常 认为环形复杂度大于10是不可接受的,需要对程序进行 重新设计。
第三章 软件静态测试技术
A Free sample background from
第三章 软件静态测试技术
A Free sample background from
Slide 17
环形复杂度的应用(续)
画出控制流图 如右图所示 计算环形复杂度 方法1:3(封闭区域数量)+ 1 = 4 方法2:10(边数)- 8(节点数)+ 2 = 4 方法3:3(判定节点数)+ 1 = 4 导出独立路径(用语句编号表示) 路径1:4→14 路径2:4→6→7→14 路径3:4→6→9→10→13→4→14 路径4:4→6→9→12→13→4→14
(1)节点由带标号的圆圈表示,可代表一个或多个语句、 一个处理框序列和一个条件判定框(不包含复合条件)。 (2)控制流线由带箭头的弧线或直线表示,可称为边。它 代表程序中的控制流。
常见结构的控制流图
第三章 软件静态测试技术
A Free sample background from
Slide 11
程序控制流分析方法(续)
矩阵图
矩阵图是控制流图的矩阵表示形式。它是一个方形矩阵, 其维数等于控制流图的节点数,矩阵中的每列和每行都对 应于标识的节点,矩阵每个元素对应于节点连接的边。 通常,控制流图中的结点用数字标识,边则用字母标识。 如果在控制流图中从第 i 个结点到第 j 个结点有一个标识 为 x 的边相连接,则在对应图矩阵的第 i 行第 j 列有一个 非空的元素 x 。
第三章 软件静态测试技术
A Free sample background from
Slide 15
计算环形复杂度的方法
环形复杂度以图论为基础,为我们提供了非常有用的软件 度量。可用如下三种方法之一来计算环形复杂度V(G): V(G) = 控制流图G中的封闭区域的数量+1 V(G) = E-N+2
Slide 2
3.1 软件静态测试
静态测试的基本概念
静态测试是软件测试主要技术手段之一,基本上由手工评 审和静态分析两种技术方法所组成。 静态测试的主要目的是从已有规格说明、已定义的标准甚 至是项目中发现缺陷和偏差。这些检查结果可用于优化开 发过程。 与动态测试需要运行软件不同,静态测试不是测试用例的 执行,而是一个静态分析的过程。这种分析可通过人工方 式的评审来完成(主要是对项目技术文档的审查),也可 使用特定的测试分析工具来进行(例如对程序编码规范的 自动检查)。 静态分析有别于程序的编译。
A Free sample background from ww14
9 12
13
第三章 软件静态测试技术
Slide 18
第三章 软件静态测试技术
A Free sample background from
Slide 9
3.3 程序控制流分析方法
控制流图 控制流图(可简称流图)是对程序流程图进行简化后得到 的,它可以更加突出程序控制流的结构。 控制流图中包括两种图形符号:节点和控制流线。
静态测试技术——程序代码质量度量 Line复杂度:以代码的行数作为度量计算的基准。 Halstead复杂度:以程序中出现的操作符和操作数作为计 算对象,并据此计算出程序长度和程序容量。 McCabe复杂度(圈复杂度):将程序流程图结构转化为 有向图结构,以图论方法来计算(衡量)程序复杂度。
第三章 软件静态测试技术
A Free sample background from
Slide 8
程序数据流分析方法(续)
异常的例子: void exchange (int& Min, int& Max) { int help; if (Min>Max) { Max = Help; Max = Min; Help = Min; } } 在该函数中出现了数据流异常的情况:变量Help的ur异常; 变量Max的dd异常;变量Help的du异常。 说明:不是每个异常都会导致不正确的程序行为。 有时数据流异常不一定很明显,很容易被手工检查(比如 评审)遗漏,而分析数据流的工具可以发现这些异常。
第三章 软件静态测试技术
A Free sample background from
Slide 6
软件静态测试(续)
静态测试技术——检查与评审
静态测试评审:对需求分析和概要设计进行评审。手工评 审分为正式评审和非正式评审,正式评审是执行检查过程 (技术评审),非正式评审主要为走查过程。 静态测试检查:对静态测试的每个过程都要进行检查,以 确保静态测试的有效性和测试的质量。检查以会议的形式 进行,根据检查结果决定是否需要重新制订计划或其后的 某项环节及工作。 采用静态测试可发现1/3~2/3的软件逻辑设计和编码方面的 错误,但软件代码中仍会有隐藏的故障无法通过静态测试 方法发现,还必须通过动态测试对程序进行深入分析。