对于职业我们要有梦想,不抛弃不放弃。人生才会有乐趣。

软件的静态测试

上一篇 / 下一篇  2010-12-15 08:50:47 / 个人分类:测试基础

1     静态测试

一般来讲,编码阶段中引入的错误是最多的,而大多数编码错误依赖于后期的集成测试、系统测试将大幅度提高测试成本,因此编码阶段的测试就显得非常重要。单元测试、静态测试都是该阶段的主要测试工作

单元测试一般会通过测试代码实际执行被测试代码。而静态测试不要求实际执行被测代码,而是以静态分析或者人工检查被测系统的方法对系统进行测试。由于静态测试不需要编写测试代码进行执行,所以它更适合于在开发早期进行,该工作更适合在编码早期进行,通过发现典型问题反馈给开发,从而在编码早期采取规范编程等方式规避问题。

经常使用的静态测试方法主要有静态分析、软件审查。

1.1     静态分析

1.1.1    概述

静态分析主要是对源程序进行静态分析,从而发现被测代码的缺陷以及潜在的“危险”结构。静态分析的很多分析方法往往都可以借助工具进行,目前Logiscope AuditPC-LINTTelelogic Tau等工具都可以作为静态分析的工具。

我司虽然普遍使用PC-LINT进行静态分析,但效果不太好,主要原因是没有掌握正确的分析方法,对于静态分析分析什么不清楚。

1.1.2    方法简介

静态分析通常可以按照三个步骤进行:

a)           构思分析素材:根据以往经验、当前项目要求确定该分析什么。

b)           生成分析素材:根据源代码生成能够辅助发现代码问题的各种引用表等分析素材信息。

c)           静态错误分析:利用已经生成的各种引用表、源代码等分析素材,寻找代码中的缺陷以及潜在的“危险”结构。

1.  分析素材

分析素材是静态分析的核心,一般根据代码中常见的问题,我们会确定一些分析素材,根据这些分析素材就可以比较快速简单地发现此类常见问题。

分析素材对于一个组织来说是应该逐渐积累的,随着这方面工作进行得增多,就会积累下来很多有效的分析素材。而且有些分析素材本身还可以直接转换成编码规范来影响开发团队的日常开发,从而可以减少用于静态分析的工作量。

 

分析素材是与分析目的相关的,一般打算发现某类问题,就会要求生成某类分析素材。

 

目前常用的分析素材有:

(1)   变量交叉引用表

即变量定义与引用表。在表中标明各变量的属性:引用次数(读引用次数、写引用次数)、是否初始化、类型等。

该分析素材一般用于直接发现从未使用、未初始化、只写不读、类型不合适等问题,也可以作为辅助分析其他问题的信息。

(2)   函数引用表

在该表中,标明各个函数的属性:是否定义、引用次数、扇入数、扇出数;参数表:输入参数的个数、顺序、类型;输出参数的个数、顺序、类型。

该分析素材一般直接用于发现未引用函数、未定义函数等问题,也可以作为辅助分析其他问题的信息。

(3)   代码度量表

在该表中列出各个文件、各个函数的代码量等,可以用于判断哪些函数、模块的代码复杂度比较高,就集中分析那里。

(4)   PC-LINT分析结果

PC-LINT是个很好的静态分析工具,根据我们自己的分析目的,往往可以确定一些分析选项,最后可以分析出相应的信息用于发现问题。

2.  构思分析素材

在进行静态分析之前,我们一般需要确定我们需要发现哪些类型的问题,针对这些不同类型的问题,我们可以设计需要不同的分析素材,尽量提供足以发现该类问题所需的分析素材。

这一步工作相当于测试工作中的测试设计,只有规划好要发现哪类问题,才能有的放矢地工作。

分析素材可以根据以往经验和当前的项目要求来规划,对于过去产品常常犯的错误可以规划分析素材。如果当前项目当中新员工太多,就需要规划更多基础的分析素材。

3.  生成分析素材

生成分析素材一般就是运行相应的工具,输出分析结果,这些结果就是下一步进行错误分析的分析素材。

4.  静态错误分析

对一些分析素材,直接可以发现问题,但还有很多情况是需要在分析素材基础上再分析才能发现问题。

在进行静态错误分析时,主要有下列方法:

(1)         类型和单位分析:为了发现源程序中数据类型、单位上的不一致性,建立一些程序语言的预处理程序,分析程序中在“下标”类型及循环控制变量方面的类型错误,以及通过使用一般的组合/消去规则,确定表达式的单位错误。

(2)         引用分析:沿着程序的控制路径,检查程序变量的引用异常问题。

(3)         表达式分析:对表达式进行分析,以发现和纠正在表达式中出现的错误。包括:

l 在表达式中不正确地使用了括号造成错误;

l 数组下标越界造成错误;

l 除式为零造成错误等数学计算错误;

l 浮点数计算的误差。

(4)         接口分析:接口的一致性错误。

l 模块之间接口的一致性和模块与外部数据库之间接口的一致性。

l 过程、函数过程之间接口的一致性。全局变量和公共数据区在使用上的一致性。

1.1.3    优点

静态分析可以在编码前期发现大量的代码问题,这样后期的测试可以更加关注模块之间、子系统之间关系方面的问题和功能以及系统属性的问题。

静态分析比起单元测试来成本更低、效率更高。单元测试比静态分析更容易自动化,因此可重复性可以更好。

 

 

 

      总结:静态分析主要是对源程序进行静态分析,从而发现被测代码的缺陷以及潜在的"危险"结构。静态分析通常会采用一些分析工具辅助进行分析。


TAG:

引用 删除 fzq   /   2017-07-29 13:30:35
5
引用 删除 fzq   /   2017-07-29 13:30:28
感谢楼主      :face:
 

评分:0

我来说两句

Open Toolbar