美文网首页
代码静态分析

代码静态分析

作者: helinyu | 来源:发表于2021-08-09 17:57 被阅读0次

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

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


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

    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 的使用

    有关的代码工具

    相关文章

      网友评论

          本文标题:代码静态分析

          本文链接:https://www.haomeiwen.com/subject/rxczvltx.html