静态代码检查讨论

问题描述

有高手,对这个了解的么?原理是咋样的,大家可以交流一哈,准备开发一个工具还实现提高代码质量。所谓静态代码检查,即是对程序代码的检查,发现一些未定义的变量、数据类型不匹配、返回局部变量、数组字符串边界溢出、内存泄露等等。。

解决方案

解决方案二:
等你研究出来了,可以卖给微软
解决方案三:
引用1楼Z65443344的回复:

等你研究出来了,可以卖给微软

大神有没有好的指教啊?谈谈你有没有这方面的经验分享的?
解决方案四:
你代码跑起来都不见得每次都会内存泄露,边界溢出,要不一定等到进入哪个分支,或者多线程执行冲突的时候才会出现这样的问题你要在代码执行之前就检测出来,不亚于人工智能
解决方案五:
话说,连我自己都不能保证靠肉眼看出代码里到底哪里有BUG你这东西做出来,那是要比我智商还高才行啊你觉得以我的智商,能做出比我智商还高的人工智能吗
解决方案六:
先要重新搞明白以下问题:“发现一些未定义的变量”,编译器就会给你警告了。你是要另外发明一个(编译器)语法分析系统吗?“数据类型不匹配”,你的程序还能编译通过吗?你是要另外发明一个编译器系统吗?“返回局部变量”,有什么不可以?你是从哪本过时的书上抄来的这个概念呢?“数组字符串边界溢出”,你显然是搬弄错了书了。这是.netframework在运行时做的事情,你是要另外开发一个.netCLR吗?“内存泄露”,你知道这能算是静态代码检查吗?
解决方案七:
引用楼主fds3310的回复:

原理是咋样的,大家可以交流一哈,准备开发一个工具还实现提高代码质量。

把你上学时的编译系统课程的成绩贴出来我们看看。这基本上是大学毕业生做毕业实习时,几个学生想做的课题。你既然不知道这个题目的渊源,怎么会想到它的呢?如果很有闲时间搞这个,那么也需要你先写一个c#编译器再说。2年以后看你的结果。基本上这种小东西,做出来也没有人买的。因为编译器(例如c#编译器)早就有这些功能。
解决方案八:
题目看起来很高大上,但是实际上根本没法实现的代码运行起来到底会不会有问题,那只有真正运行起来才知道,编译器再智能也不行理论和实际是有差别的理论上,就不应该出现内存泄露的问题,因为理论上内存是无限大的但是实际上内存是有限的,你难道还要求编译器在程序运行之前就计算系统资源,知道你的程序到底要占用多少内存吗
解决方案九:
如果你做的程序仅仅是在玩值类型计算赋值,值类型元素的数组,可能还能通过人工判断看出一些问题而如果你的程序涉及多线程互斥,访问IO(读写文件,网络通信,串口通信,数据库通信),鬼知道到时候数据会有多大
解决方案十:
你这些,要不就是编译器已经实现的,要么就是无法实现的。
解决方案十一:
java程序,使用CheckStyle,PMD等,比较流行,还能和日构建系统进行集成VS2010上,我觉得StyleCop不错,一直使用这个做简单的检查
解决方案十二:
有些工作VS或者一些代码校验的插件就会帮你检查了。。。。。有些是运行时的东西,没法静态检查。
解决方案十三:
如果涉及到网络通信,获取的是二进制流,要反序列化,工具能提前知道要接收什么数据才怪如果涉及到调用dll,难道你的工具还要先反编译dll然后再检查代码吗
解决方案十四:
哈哈,看来我弄错了,我理解的静态代码检查,一直以为是编写代码时默认遵守的规则,比如:代码相似度高---有抄袭可能代码行过长圈复杂度高不规范的空格、空行问题违反变量命名规约等等
解决方案十五:
我目前就是干这个的,首先是词法分析,语法分析,语义分析,生成抽象语法树,然后写规则即可,C#这块微软有很好的开源编译器Roslyn,已经非常强大,抽象语法树信息很全,关联信息也很好找,其中难点是数据流跟踪,我只能给你提供思路
其他方案:
引用14楼bigbaldy的回复:

我目前就是干这个的,首先是词法分析,语法分析,语义分析,生成抽象语法树,然后写规则即可,C#这块微软有很好的开源编译器Roslyn,已经非常强大,抽象语法树信息很全,关联信息也很好找,其中难点是数据流跟踪,我只能给你提供思路

那我给你一段代码,你能判断索引超出界限不string[]s=newstring[3];inti=0;while(true){if(i<3){i++;strings1=s[i];}}
其他方案:
再来int[]int1=newint1{1,3,4,5};string[]s=newstring[3];for(inti=0;i<3;i++){strings1=s[int1[i]];}
其他方案:
我就把从txt文件里读出来的一个数字转int型然后当索引用,程序如何在编译的时候就知道会索引超出界限?
其他方案:
目前不能,其实这个就属于数据流跟踪,数据流跟踪中的循环会拆解为执行一次,而不是完全的模拟执行,毕竟是“静态“代码检测,当然以后可以加这个功能
其他方案:
引用18楼bigbaldy的回复:

目前不能,其实这个就属于数据流跟踪,数据流跟踪中的循环会拆解为执行一次,而不是完全的模拟执行,毕竟是“静态“代码检测,当然以后可以加这个功能

我觉得以后加,也不可能完全检查出所有的bug的.写死在代码里的,从本地文件读出来,甚至从本地数据库读出来,可能都有办法检查,至少理论上能检查从网络中获取的怎么办而且有些变量本身就是动态的,不是写死的,你静态检查的时候它是对的,它运行时被重新赋值了怎么办比如某个数字是通过文本框输入的
其他方案:
补充一句:楼主问的就是静态代码检测中的边界溢出,我回答的也是我能检测静态代码检测中的边界溢出问题
其他方案:
引用19楼Z65443344的回复:

Quote: 引用18楼bigbaldy的回复:
目前不能,其实这个就属于数据流跟踪,数据流跟踪中的循环会拆解为执行一次,而不是完全的模拟执行,毕竟是“静态“代码检测,当然以后可以加这个功能

我觉得以后加,也不可能完全检查出所有的bug的.写死在代码里的,从本地文件读出来,甚至从本地数据库读出来,可能都有办法检查,至少理论上能检查从网络中获取的怎么办而且有些变量本身就是动态的,不是写死的,你静态检查的时候它是对的,它运行时被重新赋值了怎么办比如某个数字是通过文本框输入的

的确不能,所以目前项目中都没有这个计划,下一步是想弄无源码的检测
其他方案:
引用20楼bigbaldy的回复:

补充一句:楼主问的就是静态代码检测中的边界溢出,我回答的也是我能检测静态代码检测中的边界溢出问题

既然楼主已经提到了内存泄露,这已经不是静态范畴了吧我觉得楼主这个静态修饰的不是代码,而是检测是静态的代码检测,而不是检测静态代码
其他方案:
发现一些未定义的变量---编译器自己检查,不需要人眼扫描数据类型不匹配---编译器自己检查,不需要人眼扫描返回局部变量---这个没啥问题,如果你是指跨作用域使用,编译器有警告,不需要人眼扫描数组字符串边界溢出---运行期的事情,静态检查无效内存泄露----运行期的事情,静态检查无效-------------------后两个去找单元测试人员,这活是单元测试人员的工作ps:当然优化和规定也不是没有,多数重构工具本身就有一部分重构优化建议(vs自己本身也带有规范检查工具,不过我不建议使用,因为那个浪费工作效率,程序员更多的聪明才智应该在其他方面,而不是天天弄一些无味的工作)

时间: 2024-08-31 11:21:27

静态代码检查讨论的相关文章

求助:ruby的静态代码检查有什么好的工具或者方法吗?

问题描述 求助:ruby的静态代码检查有什么好的工具或者方法吗? 如题,大神们,求赐教!感激不尽!!!!链接也可以,我自己都搜不到什么好的链接,呵呵! 解决方案 Ruby静态分析工具检视:metric_fu, Simian, Saikuro以及其他 http://www.infoq.com/cn/news/2009/09/code-quality-metric-fu/ 解决方案二: 我找了个工具还不错,大家可以参考https://github.com/bbatsov/rubocop

指针-java静态代码检查工具

问题描述 java静态代码检查工具 推荐一款java静态代码检查的工具,可以java nullpointer exception静态检查,可以实现检查是否有抛空指针异常的可能性,便于解决代码中更多空指针异常的问题 解决方案 FindBugs,这个可以检查很多,并且根据异常的等级区分开来. 解决方案二: 去这里 http://java-source.net/open-source/code-analyzers 选择 解决方案三: http://stackoverflow.com/questions

静态代码检查工具 FindBugs

使用 FindBugs的原因和方法   静态分析工具承诺无需开发人员费劲就能找出代码中已有的缺陷.当然,如果有多年的编写经验,就会知道这些承诺并不是一定能兑现.尽管如此,好的静态分析工具仍然是工具箱中的无价之宝.在这个由两部分组成的系列文章的第一部分中,高级软件工程师 Chris Grindstaff 分析了 FindBugs如何帮助提高代码质量以及排除隐含的缺陷. 代码质量工具的一个问题是它们容易为开发人员提供大量但并非真正问题的问题--即伪问题(false positives).出现伪问题时

facebook静态代码检查工具开源了!

以前一直想写个静态代码的检查工具,能够根据语法分析自动找出内存泄露的问题,今天发现facebook开源了这样一个工具,可以检查Java , Object c  和c代码,美中不足的是不支持C++. facebook的这款工具叫Infer,用于在发布移动应用之前对代码进行分析,找出潜在的问题.目前 Facebook 使用该工具来分析 Facebook 的 App,包括 Android .iOS.Facebook Messenger 和 Instagram 等等 Facebook 称该工具帮助其每个

静态代码检查-c++有没有和JAVA的gradle类似的自动化构建工具?

问题描述 c++有没有和JAVA的gradle类似的自动化构建工具? c++有没有和JAVA的gradle类似的自动化构建工具?并且检查效率比较高,速度比较快 解决方案 cmake可以.还有像scons之类的

静态代码检查-Eclipse安装klocwork~~~~~~~~

问题描述 Eclipse安装klocwork-------- 请问怎么在eclipse中安装klocwork???通过help....install new software总是不成功,提示没有jar文件,但明明是有的为什么提示没有,总是失败,求大神指点 解决方案 关于测试与测试工具- 解决方案二: http://wenku.baidu.com/link?url=nix6KdrGSQLOUPOw9TvJ_kNq9IzPzVHr26VYnKiDDW-Qigo_TGQmdQ_H2sJxna81dgS

如何将外部代码检查器集成到 Eclipse CDT 中

Codan 是在 C/C++ 项目上执行代码检查的代码分析框架.自 2011 年起,Codan 已成为 Eclipse CDT(C/C++ 开发工具 )一部分,它不仅提供执行静态代码分析所需的全部基础架构,还提供了一些有用的.随时可用的问题检查器(参阅 参考 资料). Codan 于 2012 年 6 月随 Eclipse Juno 进行了更新,支持开发人员在 Eclipse 中自动执行外部代码分 析工具.对于 Eclipse CDT 和 C/C++ 开发人员来说,这是一个令人鼓舞的进步.尽管之

C语言之代码检查工具

概述 PC-Lint是一个历史悠久,功能异常强劲的静态代码检测工具.它的使用历史可以追溯到计算机编程的远古时代(30多年以前).经过这么多年的发展,它不但能够监测出许多语法逻辑上的隐患,而且也能够有效地帮你提出许多程序在空间利用.运行效率上的改进点,在很多专业级的软件公司,比如Microsoft, PC-Lint检查无错误无警告是代码首先要过的第一关,我个人觉得,对于小公司和个人开发而言,PC-Lint也非常重要,因为基于开发成本考虑,小公司和个人往往不能拿出很多很全面的测试,这时候,PC-Li

C++语言代码检查工具PC-Lint四步速成

概述 PC-Lint是一个历史悠久,功能异常强劲的静态代码检测工具.它的使用历史可以追溯到计算机编程的远古时代(30多年以前).经过这么多年的发展,它不但能够监测出许多语法逻辑上的隐患,而且也能够有效地帮你提出许多程序在空间利用.运行效率上的改进点,在很多专业级的软件公司,比如Microsoft, PC-Lint检查无错误无警告是代码首先要过的第一关,我个人觉得,对于小公司和个人开发而言,PC-Lint也非常重要,因为基于开发成本考虑,小公司和个人往往不能拿出很多很全面的测试,这时候,PC-Li