一份编程错误列表强调静态代码分析有其必要性

标签: 编程 错误 列表 | 发表时间:2012-12-19 22:28 | 作者:
出处:http://pipes.yahoo.com/pipes/pipe.info?_id=10560380f804c7341f042a2b8a03e117

Program Verification Systems公司(针对C和C++的静态代码分析工具 PVS-Studio就是该公司的产品)发布了一份 编程错误列表,有些错误是从Chromium、TortoiseSVN、Apache HTTP Server和MySQL等流行的开源项目中发现的。

这份列表维护的编码错误有150多类,有的是严重的逻辑错误,有的是性能相关的问题,还有一些危害并不是很大。

下面是选自该列表的一些错误类型,示例代码都来自真实项目。

V502——或许‘?:’运算符的工作方式和想象中并不相同。该运算符的优先级比很多运算符都要低。

MongoDB:

string sysInfo() {
  ....
  stringstream ss;
  ....
  ss << (sizeof(char *) == 8) ? " 64bit" : " 32bit";
  ....
}

这是一个很好的例子。这段代码打印的是0或1,而非“32bit”或“64bit”。

V511——在如下表达式中,sizeof运算符返回的是指针的大小,而非数组的大小。

Chromium:

uint8 salt_[LINK_SALT_LENGTH];

VisitedLinkMaster::TableBuilder::TableBuilder(
    VisitedLinkMaster* master,
    const uint8 salt[LINK_SALT_LENGTH])
    : master_(master),
      success_(true) {
  fingerprints_.reserve(4096);
  memcpy(salt_, salt, sizeof(salt));
}

“salt”对象就是一个指针。方括号中的值LINK SALTLENGTH向程序员表明,他们正在使用的是一个包含LINK SALTLENGTH个元素的数组。但传递给函数的并不是数组——只是个指针。因此,表达式sizeof(salt)返回的值是4或8(32位或者64位系统上指针的大小)。

到目前为止,这个列表上列出的、出现于各种开源项目的错误,很多可能已经修复。因为任何程序员都难免出错,所以使用一个或多个静态代码分析工具处理一下源代码是个不错的建议。Wikipedia上有一个 页面,列出了很多针对不同语言的静态代码分析工具。

参考英文原文An Errors List Underscores the Need for Static Code Analysis

您可能也会喜欢

相关 [编程 错误 列表] 推荐:

一份编程错误列表强调静态代码分析有其必要性

- - InfoQ cn
Program Verification Systems公司(针对C和C++的静态代码分析工具 PVS-Studio就是该公司的产品)发布了一份 编程错误列表,有些错误是从Chromium、TortoiseSVN、Apache HTTP Server和MySQL等流行的开源项目中发现的. 这份列表维护的编码错误有150多类,有的是严重的逻辑错误,有的是性能相关的问题,还有一些危害并不是很大.

创业编程七个错误认识

- microlj - cnBeta全文版
多少年来,人们普遍有一种看法,认为软件工程应该和其它种类的工程一样:仔细的设计,精确的规划,然后进行开发 ―― 严格按照设计说明书. 这种开发方式的问题在于:软件,它是“软”的. 任何需要的时候你都可以大幅度的修改你 的软件,人们也都是这么干的. 还有,因为软件可以被拿来对任何事物进行模型造型,你能要求软件开发人员去实现的可能的东西几乎是无穷无尽.

【外刊IT评论网】创业编程七个错误认识

- Baoping - 外刊IT评论
本文是从 What’s Your Start-up’s “Bus Count”. 7 Myths of Entrepreneurship and Programming 这篇文章翻译而来. 多少年来,人们普遍有一种看法,认为软件工程应该和其它种类的工程一样:仔细的设计,精确的规划,然后进行开发—严格按照设计说明书.

javascript编程容易出现的11个错误

- ~Wing~ - ria之家--RIA三部曲:jquery、ext、flex
javascript是比较容易学的. 但是,对于这门语言需要有一些值得注意的地方. 本文将指出javascript编程中可能犯过的10个错误. 如果你刚开始javascript编程,可能会觉得全局变量很好用. 事实上,刚开始javascript编程,你可能不知道使用全局变量会带来什么麻烦. 在同一个页面中,全局变量可以在任何内嵌的javascript代码段中或是该页面加载的不同的js文件中,都能访问到.

Oracle错误代码

- - 数据库 - ITeye博客
ORA-00001: 违反唯一约束条件 (.). ORA-00017: 请求会话以设置跟踪事件. ORA-00018: 超出最大会话数. ORA-00019: 超出最大会话许可数. ORA-00020: 超出最大进程数 (). ORA-00021: 会话附属于其它某些进程;无法转换会话. ORA-00022: 无效的会话 ID;访问被拒绝.

10大经典错误

- beralee - 酷壳 - CoolShell.cn
下面是10、11个经典的错误,升序排名. 10、DOS的Abort,Retry, Fail. 85年以后出生的人可能不知道DOS是什么了,只有那老家伙还知道这是什么. 我还记得当时的我对于Abort和Fail这两个选择还是比较清楚的,不过,今天完全忘记了Abort和Fail的差别是什么. 这个出是DOS下的经常出现,也相当的经典,以至于在Wikepedia上都有专门的业面 Abort, Retry, Fail?.

Google Realtime出现404错误

- lube - Solidot
hidenosense 写道 "我的Google搜索页面左边工具栏里的realtime没了. 直接打开http://www.google.com/realtime返回404.

StackOverflow的404错误页

- yboren - 酷壳 - CoolShell.cn
不知道大家有没有注意到StakeOverflow的404错误页面. 这个是一个很有意思的图片,不知道你看懂了吗. 看上去像Python,又像 Ruby,还像 Perl,当然也有 C的影子,还有Brainfuck. 是的,这是一个杂交程序,杂交了Python,Ruby,Perl,C,还有Brainfuck(注意其中的#号),所有的语句都是输出“404”字符串.

预防错误的设计

- - Juven Xu
上周参加了一个 Michael Feathers 的 workshop,整个 workshop 内容非常多,其中大部分是围绕他那本著名的 《修改代码的艺术》所阐述,不过除此之外 Michael 还以  Beyond Error Handling, Using Design to Prevent Errors 为主题,讲了不少如何优雅地处理错误的做法和思路.

Spring MVC的常见错误

- - Java译站
10年前我开始自己的职业生涯的时候,Struts还是市场上的主流标准. 然而多年过后,我发现Spring MVC已经越来越流行了. 对我而言这并不意外,因为它能和Spring容器无缝集成,同时它还提供了灵活性及扩展性. 从我迄今为止对Spring的经验来看,我发现有不少人在配置Spring的时候经常会犯一些常见的错误.