话说,连我自己都不能保证靠肉眼看出代码里到底哪里有BUG
你这东西做出来,那是要比我智商还高才行啊你觉得以我的智商,能做出比我智商还高的人工智能吗

解决方案 »

  1.   

    先要重新搞明白以下问题:“发现一些未定义的变量”,编译器就会给你警告了。你是要另外发明一个(编译器)语法分析系统吗?“数据类型不匹配”,你的程序还能编译通过吗?你是要另外发明一个编译器系统吗?“返回局部变量”,有什么不可以?你是从哪本过时的书上抄来的这个概念呢?“数组字符串边界溢出”,你显然是搬弄错了书了。这是.net framework在运行时做的事情,你是要另外开发一个.net CLR 吗?“内存泄露”,你知道这能算是静态代码检查吗?
      

  2.   

    java程序,使用CheckStyle,PMD等,比较流行,还能和日构建系统进行集成
    VS2010上,我觉得StyleCop不错,一直使用这个做简单的检查
      

  3.   

    如果涉及到网络通信,获取的是二进制流,要反序列化,工具能提前知道要接收什么数据才怪
    如果涉及到调用dll,难道你的工具还要先反编译dll然后再检查代码吗
      

  4.   

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

  5.   

    那我给你一段代码,你能判断索引超出界限不
    string[] s=new string[3];
    int i=0;
    while(true)
    {
    if(i<3)
    {
    i++;
    string s1=s[i];
    }
    }
      

  6.   

    再来
    int[] int1=new int1{1,3,4,5};
    string[] s=new string[3];
    for(int i=0;i<3;i++)
    {
    string s1=s[int1[i]];
    }
      

  7.   

    我就把从txt文件里读出来的一个数字转int型然后当索引用,程序如何在编译的时候就知道会索引超出界限?
      

  8.   

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

  9.   

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

  10.   

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