推荐几个代码检查工具 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
penguinWWY
V2EX    程序员

推荐几个代码检查工具

  •  1
     
  •   penguinWWY 2020-03-11 03:19:58 +08:00 13268 次点击
    这是一个创建于 2042 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前看到过几次关于代码质量方面的帖子,不巧,本人正好是做静态分析工具的码农,这方面接触的比较多,可以简单说一说我了解的东西

    首先我要先开启语言圣战,提高代码质量其实是新语言出现的核心动力之一。有这项需求的新语言往往会通过各种手段去解决想要干掉的语言的设计问题、提供更加可靠便捷的 toolchain,便于程序员产出、维护高质量的代码。 所以如果想写“clean code”,换语言其实是一个不错的选择。比如 Rust 对于 C++,Kotlin 对于 Java,TS 对于 JS。虽然他们可能会引入新的问题,但如果你的目标是解决旧问题,那他们一般都十分可靠。

    然后说说工具的问题。我用过的开源、商业代码质量工具没少说也有个二三十种( V 站除了同行应该没人比我多了。。。吧)。这些工具如果按照规则类型划分,可以看做两类。一类安全,也就是检查安全问题,比如 NullPointer、SQL Injection、Data Race,他们会影响程序的安全运行;一类是规约,简单来说就是 code style。不过考虑到很多规则其实两者兼具,我就简单的按语言划分好了。(都是开源的)

    c/c++:

    clang-tidy http://clang.llvm.org/extra/clang-tidy

    CSA https://clang-analyzer.llvm.org

    cppcheck https://github.com/danmar/cppcheck

    cpplint https://github.com/google/styleguide

    phasar https://github.com/secure-software-engineering/phasar

    这里面比较推荐 clang-tidy,虽然规则不多,但是规则编写简单,只要你对 C++有足够了解,可以定制出十分丰富的内容

    java:

    google-java-format https://github.com/google/google-java-format

    find-sec-bugs https://find-sec-bugs.github.io

    spotbugs https://spotbugs.github.io

    pmd https://github.com/pmd/pmd

    p3c https://github.com/alibaba/p3c

    soot https://sable.github.io/soot

    spotbugs 和 pmd 都是比较优秀的工具,前者有 find-sec-bugs 这样的插件。而后者,ali 的 p3c 规则集就是基于 pmd 实现的。此外 pmd 是一个针对多种语言的框架,内容十分丰富。这两者国际化和文档都做的非常好。 而 soot 本质上一个 jvm bytecode 的优化框架,但同样可以基于此做出各种工具,不过考虑到它复杂的内容,emmmm...

    其他:

    python https://github.com/PyCQA/pylint

    kotlin https://github.com/arturbosch/detekt

    JS/TS https://github.com/eslint/eslint

    Rust https://github.com/rust-lang/rust-clippy

    shell https://github.com/koalaman/shellcheck

    Multiple languages https://github.com/facebook/infer

    Multiple languages https://github.com/github/semantic

    我列举的都是我觉得有用的并且目前处于活跃状态的项目,大家无聊的话可以看看。 还有一个专门介绍静态分析工具的仓库https://github.com/mre/awesome-static-analysis

    再然后对于工具的使用。对于工具大家都知道,不用等于没用。所以一般的解决办法都是融入流程,最简单的像 Unittest 一样,编译完成后跑一遍。并入 CI 流程也是普遍做法,代码入库前扫描成功才允许合并,这样同时还可以保证 code format 的问题。 除此之外,减少这类工具的 report 数量也是重点。过于繁多的报告(尤其是项目早期开发的时候)往往不利于发现真正有价值的问题,也不利于修复。所以熟悉工具的规则和配置,少报无关问题是工具使用的关键。

    简单说就这么多,如果感兴趣我有空可以开个系列,专门介绍代码静态分析的技术、使用问题

    最后我悄咪咪地打个广告,我司的产品,中国最好的静态分析工具(将来就是世界最好)

    https://www.sourcebrella.com/

    对标国际厂商比如 Coverity、fortify、checkmax,我们一点不虚,甚至在技术上还有优势( PLDI、ICSE 最近几年都有论文) 采购过类似产品或者想采购的土豪可以留意一下我们

    11 条回复    2020-03-21 12:03:25 +08:00
    qiushaox
        1
    qiushaox  
       2020-03-11 07:53:02 +08:00 via iPhone
    正在寻找 c++的静态检查工具,感谢推荐
    chendy
        2
    chendy  
       2020-03-11 08:09:59 +08:00
    sonarlint 也不错
    好吧难道因为是竞品所以不给贴?
    hongfushi
        3
    hongfushi  
       2020-03-11 08:17:41 +08:00 via Android
    我们只用 sonar 的,免费真香,源代码安全有 360 代码卫士
    RockShake
        4
    RockShake  
       2020-03-11 10:46:56 +08:00
    Sonar 在 VS Code 上真是内存大户
    penguinWWY
        5
    penguinWWY  
    OP
       2020-03-11 10:52:40 +08:00
    @chendy sonar 本身的规则太弱了,作为一个靠插件的 framework 还行,我们自己也实现了 sonar 的插件给客户使用过
    cortexm3
        6
    cortexm3  
       2020-03-11 14:19:51 +08:00
    标记一下
    codepm
        7
    codepm  
       2020-03-11 15:25:57 +08:00
    挺好的,也推荐下免费项目管理工具-项目加 www.xiangmujia.com
    14m3
        8
    14m3  
       2020-03-11 17:26:00 +08:00
    冒昧问一下,源伞有校招吗?谢谢
    penguinWWY
        9
    penguinWWY  
    OP
       2020-03-11 17:50:55 +08:00
    @14m3 没有专门的校招,但是应届生想来我们也欢迎,直接投简历即可
    14m3
        10
    14m3  
       2020-03-11 17:59:19 +08:00
    @penguinWWY 好的好的,感谢。我是 21 届毕业的学生,等到 8,9 月份的时候准备好,想尝试一下源伞
    penguinWWY
        11
    penguinWWY  
    OP
       2020-03-21 12:03:25 +08:00
    @14m3 我们现在招实习,你要不要尝试一下
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3061 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 12:44 PVG 20:44 LAX 05:44 JFK 08:44
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86