软件质量保障:静态检查、同行评审、测试与问题跟踪
1. 静态检查与编译器警告
1.1 静态检查的重要性
编译器在处理源代码时,会产生警告和错误两种消息。错误意味着代码存在严重缺陷,无法编译;而警告虽不影响生成可执行程序,但往往暗示代码可能存在问题。例如,桌面系统的编译器通常能给出较为全面的警告,而小型微控制器的编译器可能会遗漏一些潜在的警告。
忽略编译器警告会增加软件出现漏洞的风险,可能错过因“愚蠢”错误、语言规范歧义以及语言特性的危险使用而导致的漏洞。因此,每个程序都应通过一个优秀的静态检查器进行检查,消除所有警告源,以减少漏洞。
1.2 编译器警告的类型及示例
编译器警告可以帮助我们发现多种类型的问题,以下是一些常见的警告示例:
- 未初始化变量 :
int X, MyVar;
X = MyVar; // MyVar doesn't have an initial value
在这个例子中,变量 MyVar
未被初始化,因此赋值给 X
的值是未定义的。这种警告几乎总是表示存在漏洞。
- 可疑的语言使用 :
if (x = y) { ... do this... }
在 C 语言中,这是一个经典的错误。通常,这里应该使用比较运算符 ==