一份静态代码分析工具调研报告

背景:

随之团队的扩大,统一编码规范,提高编码质量,变得尤为重要。 通常的做法就是人工CodeReview,但是这个过程耗费的工时往往较大,所以考虑让机器帮助完成一部分代码质量的检测,从而提高工作效率。

开发工具现状:

尽管苹果在XCode上已经添加了编码警告,也具有代码静态分析功能(内部集成了Clang Static Analyzer工具),但仍然存在一定问题,如无法自定义规则,分析时间长,展示结果不直观。

开源社区现状:

目前主流Objective-C静态分析工具是OCLint,具有较好的代码分析能力,另外,支持规则插件化,针对不同的需求开发规则插件,在分析中指定规则分析。

OCLint工具介绍:
OCLint是一个基于Clang编译器开发的C++静态代码分析工具,通过检查C 、C++ 和Objective-C代码和寻找潜在问题来提高代码质量和减少代码缺陷。可以完成的工作有:

1、可能的缺陷 - 空的if / else / try / catch / finally语句;
2、未使用的代码 - 未使用的局部变量和参数;
3、复杂的代码 - 高的圈复杂度,NPath复杂性和太高的NCSS;
4、冗余代码 - 多余的if语句和无用的括号;
5、坏味道的代码 - 过长的方法和过长的参数列表;
6、不好的使用 - 倒逻辑和入参重新赋值;

优点:OCLint有更多的检查规则和定制,和很多工具集成,也同样可用于持续集成。

另外一款Objective-C代码分析工具是Infer。Infer 是一个Facebook开发的静态程序分析工具,可以对 Java、C 和 Objective-C 程序进行分析,此工具是用OCaml语言写成的。可以完成的工作有:

1、资源使用检查;
2、内存泄漏;
3、空对象检查;
4、参数非空检查;
5、Ivar非空检查;
6、空终止检查;
7、循环引用检查;

优点:
1、效率高,规模大,几分钟能扫描数千行代码;
2、支持增量及非增量分析(后边会解释);
3、分解分析,整合输出结果。(infer能将代码分解,小范围分析后再将结果整合在一起,兼顾分析的深度和速度);

结论方案:

1、使用OCLint做代码分析工具,开发自定义代码规则插件,配合Sonar(代码检查CI框架)框架直观展示分析结果。成本为自定义规则插件开发上,建议前期使用此方案。

2、对OCLint和Infer做二次开发。成本为自定义插件和二次开发,建议在具有一定静态代码分析能力后,使用此方案来优化提升静态分析能力。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容