代码静态分析

2021-08-09  本文已影响0人  helinyu

什么是代码静态分析?
在不运行应用程序的情况下, 对然阿金的源代码的定义、结构和行为进行分析, 由此, 找出程序中的不规范、不合理的或者可能造成程序运行异常的代码。

最为简单的是:“人工代码走查”, 但是工作量巨大, —— 自动化的代码金泰分析技术。


代码静态分析到底可以为我们的软件解决什么问题呢?

  1. 编码规范检查: 基于公司自定义的统一编码规范.
    检查代码中不合规范的写法, 以保证代码的统一风格, 尽早羽凡软件质量风险的各种不合理代码代码的出现。
    编码规则 —— 规范编码格式、命名规范、内存和资源管理、宏定义、危险代码等。。。
  2. 代码质量缺陷检测: 检查隐藏的会导致运行时异常或者安全性的代码缺陷, eg: 空指针, 越界、除零、死锁、安全漏洞等。
    软件质量检查: 要求对代码进行更深度的解析和扫描, 以定位真正的代码缺陷, 除了找出问题点, 还需要定位相关的代码逻辑路径。
  3. 代码度量分析: 针对软件代码的各项度量指标的代码静态分析。 [eg: 复杂度、嵌套深度、分支结构等] ;代码度量检查的思路与“二八原则”不谋而合,因为少数的最复杂的代码中隐藏或导致了大部分的bug。
  4. 人工代码评审: 对代码的算法、逻辑的实现合理与否的检查。 【review】

QR : 为什么要做代码静态分析?
更早、更彻底地检查或羽凡代码错误,减少后期测试的bug,最终降低项目成本并提高软件可靠性。 可靠性、可读性、可维护性和可移植性

到底应该引入哪些编码代码规则难以抉择,太多、太少都有问题。
软件缺陷检测的误报率太高,是否存在漏报?
编码规则重要还是缺陷检测重要,如何取舍?
如何保证代码静态分析的结果能被及时修复?
历史遗留代码中的海量检测结果如何处理?
如何最大程度实现代码静态分析的自动化?
开源工具和商业工具有什么区别?

看看iOS上我们的项目应该怎么做代码的静态分析

1、 首先是选择工具
(1)
Xcode Analyze (xcode 自带)

主要检查:
1、逻辑错误:访问空指针或未初始化的变量等;
2、内存管理错误:如内存泄漏等;
3、声明错误:从未使用过的变量;
4、Api调用错误:未包含使用的库和框架。

xcode Analyzer 分析常见的错误:

  1. Localizability Issue 本地化问题
  2. core/foundation/OC 就是可能没有调用一些父类的方法
  3. logic error 一些用法上的问题
  4. Memory error 可能会有一些内存问题,常见的是cell返回nil
  5. Memory (Core Foundation/Objective-C) 很坑是一些C语言上面,没有释放
  6. Dead store 常常看到的是没有阅读的

oclint 规范可以看看

createARGBBitmapContextFromImage 这个方法,我在外面释放掉了,为什么还会显示可能的内存泄漏? 这种情况判断不了? 项目里面的这种情况判断不了。 这个还需要进一步去处理这个内容。

修改之后的

优先修改、 core fundation , memory , memory error
延后修改

(2) 第三方使用比较多的工具
fbinfer
infer_cn
facebook 的静态分析工具, 分析OC、Java或者C代码,报告潜在的问题。

将那些严重的 bug 扼杀在发布之前,同时防止应用崩溃和性能低下。

命令:

xcodebuild -workspace xndm_proj.xcworkspace -scheme xndm_proj -sdk iphoneos14.5 | tee xcodebuild.log | xcpretty -r json-compilation-database -o compile_commands.json

infer run --keep-going --skip-analysis-in-path Pods --compilation-database-escaped compile_commands.json

执行第二条命令的时候有问题

!!!!!infer 运行起来太久都没有停止,消耗的磁盘过大, 所以,暂时先不管

简单例子:

命令参考链接
infer 官网
可参考的网址

https://www.jianshu.com/p/9f0a19388de6 applescript 的使用

有关的代码工具

上一篇 下一篇

猜你喜欢

热点阅读