什么是代码静态分析?
在不运行应用程序的情况下, 对然阿金的源代码的定义、结构和行为进行分析, 由此, 找出程序中的不规范、不合理的或者可能造成程序运行异常的代码。
最为简单的是:“人工代码走查”, 但是工作量巨大, —— 自动化的代码金泰分析技术。
代码静态分析到底可以为我们的软件解决什么问题呢?
编码规范检查
: 基于公司自定义的统一编码规范.
检查代码中不合规范的写法, 以保证代码的统一风格, 尽早羽凡软件质量风险的各种不合理代码代码的出现。
编码规则 —— 规范编码格式、命名规范、内存和资源管理、宏定义、危险代码等。。。代码质量缺陷检测
: 检查隐藏的会导致运行时异常或者安全性的代码缺陷, eg: 空指针, 越界、除零、死锁、安全漏洞等。
软件质量检查: 要求对代码进行更深度的解析和扫描, 以定位真正的代码缺陷, 除了找出问题点, 还需要定位相关的代码逻辑路径。代码度量分析
: 针对软件代码的各项度量指标的代码静态分析。 [eg: 复杂度、嵌套深度、分支结构等] ;代码度量检查的思路与“二八原则”不谋而合,因为少数的最复杂的代码中隐藏或导致了大部分的bug。人工代码评审
: 对代码的算法、逻辑的实现合理与否的检查。 【review】
QR : 为什么要做代码静态分析?
更早、更彻底地检查或羽凡代码错误,减少后期测试的bug,最终降低项目成本并提高软件可靠性。 可靠性、可读性、可维护性和可移植性
到底应该引入哪些编码代码规则难以抉择,太多、太少都有问题。
软件缺陷检测的误报率太高,是否存在漏报?
编码规则重要还是缺陷检测重要,如何取舍?
如何保证代码静态分析的结果能被及时修复?
历史遗留代码中的海量检测结果如何处理?
如何最大程度实现代码静态分析的自动化?
开源工具和商业工具有什么区别?
看看iOS上我们的项目应该怎么做代码的静态分析
1、 首先是选择工具
(1)
Xcode Analyze (xcode 自带)
主要检查:
1、逻辑错误:访问空指针或未初始化的变量等;
2、内存管理错误:如内存泄漏等;
3、声明错误:从未使用过的变量;
4、Api调用错误:未包含使用的库和框架。
xcode Analyzer 分析常见的错误:
- Localizability Issue 本地化问题
- core/foundation/OC 就是可能没有调用一些父类的方法
- logic error 一些用法上的问题
- Memory error 可能会有一些内存问题,常见的是cell返回nil
- Memory (Core Foundation/Objective-C) 很坑是一些C语言上面,没有释放
- Dead store 常常看到的是没有阅读的
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 运行起来太久都没有停止,消耗的磁盘过大, 所以,暂时先不管
简单例子:
https://www.jianshu.com/p/9f0a19388de6 applescript 的使用
网友评论