写点什么

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

  • 2012-12-19
  • 本文字数:761 字

    阅读完需:约 2 分钟

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_SALT_LENGTH 向程序员表明,他们正在使用的是一个包含 LINK_SALT_LENGTH 个元素的数组。但传递给函数的并不是数组——只是个指针。因此,表达式 sizeof(salt) 返回的值是 4 或 8(32 位或者 64 位系统上指针的大小)。

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

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

2012-12-19 08:282551
用户头像
臧秀涛 略懂技术的运营同学。

发布了 300 篇内容, 共 136.6 次阅读, 收获喜欢 35 次。

关注

评论

发布
暂无评论
发现更多内容

架構師訓練營第 1 期 - 第 01 周作業

Panda

食堂就餐卡系统UML图

Jacky.Chen

架构师训练营 Week1 - 食堂就餐卡系统设计

极客大学架构师训练营

食堂就餐卡系统设计

蓝黑

极客大学架构师训练营

食堂就餐卡系统设计

fmouse

目标:创业团队组织搭建的内在逻辑

boshi

创业 团队组织

食堂就餐卡系统设计

orchid9

店长:是新零售系统落地的核心环节

boshi

数字化 标准化 新零售

架构师第一期作业

happy

架构一期第一周作业

Airs

课程作业

架构师学习课程第一周学习总结

orchid9

第一周命题作业

崔方剑

极客大学架构师训练营

你附近的人都有谁,这个功能是怎么实现的?

老胡爱分享

redis geo

第一周学习总节

兵长

架构师训练营第 1 期 第一周总结

张建亮

架构师训练营第 1 期 命题作业

张建亮

架构师训练营-作业-第一周

Max2012

极客大学架构师训练营

第一周总结

fmouse

极客大学架构师训练营

极客时间架构师训练营第一周学习总结

Jacky.Chen

架构师第一期作业(第一周)

Cheer

课程练习

架构师训练营第 1 期-第一周学习总结

Todd-Lee

极客大学架构师训练营

第一周学习总结

Croesus

架构师培训第一节课学习总结

happy

80% 的程序员忽略的那些事 - 架构师常干的那些事

郎哲158

学习 极客大学架构师训练营

第一周-学习总结

Yangjing

极客大学架构师训练营

就餐卡系统设计-UML图

scorpion

第一周学习总结

崔方剑

极客大学架构师训练营

系统用例图,组件图,组件时序图,部署图

Croesus

80%的程序员忽略的那些事-架构师是干什么的

郎哲158

学习 程序员 工程师 架构师 极客大学架构师训练营

第一周作业二:学习总结

登顶计划

食堂就餐卡系统设计

Yangjing

极客大学架构师训练营

一份编程错误列表强调静态代码分析有其必要性_语言 & 开发_Abel Avram_InfoQ精选文章