• 三端sonar记录


    Sonar

    整体

    要先在服务端更新插件,才能在本地使用!!!Sonar是服务端通过plugin进行数据解析和转义的,所以sonar形成了类似于拉docker的C-S扫描模式,必须服务端先行。

    Android

    通常是按照$SONAR_URL/documentation/analysis/scan/sonarscanner-for-gradle/ 来配置。

    • gradle 6.1.1要指定jdk11才能跑起来,与文档写的不一致
    • 测试代码大概率会有问题,对于unittest加-DskipTests=true参数跳过
    • 对于AndroidTest,在gradle中手动disable
    - tasks.whenTaskAdded {task ->
       if(task.name.contains("AndroidTest") || task.name.contains("androidTest")) {
           task.enabled = false
       }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 文档里的多module说明是有误导性的,在一个大项目中执行sonarqube并不会构建一个整合报告,而是每个子项目一份。即便是sonar.projectName都一样,也是覆盖关系,不是merge
    • 可以利用web api整合各种项目的结果,常用的是
      api/projects/search?q= api/measures/component。后者要传metricKeys,可以在sonarqube的结果页抓包确定每个metric的key。

    iOS

    不要用idean的那个plugin,跟sonarqube server 9.x有冲突,起不来服务。用https://github.com/sonar-next/sonar-swift。后者的核心数据是lizard、infer,和前者不太一样。

    • idean的脚本也不要用,里面会有如下问题:
      • xcodebuild build-for-testing是要有地方跑ut的,大概率会有依赖不支持模拟器,而CI的机器上只能模拟器,直接跑不通
      • oclint缺COMPILER_INDEX_STORE_ENABLE=NO,报错

    flutter

    https://github.com/insideapp-oss/sonar-flutter,问题不大。而且支持整合多个子project。如果根目录不是app,则需要同时指定

    sonar.sources=aaa
    sonar.projectBaseDir=bbb
    
    • 1
    • 2

    指标选取

    以下为论文结论摘要。

    code smell

    无效 java code smell列表

    code smell无效的理由
    所有tag包含spring的非客户端环境
    “Bean Validation” (JSR 380) should be properly configured非客户端环境
    “Class.forName()” should not load JDBC 4.0+ drivers非客户端环境
    “private” methods called only by inner classes should be moved to those classes更应该考虑合理归属
    An open curly brace should be located at the beginning of a line不符合客户端code convension
    Default annotation parameter values should not be passed as arguments不传default增加了理解复杂度,不利于代码重构

    太多了,待补充

    Issues

    太多了,待补充

    圈复杂度

    • 圈复杂度比Essential Complexity更能预测bug。nasa
    • 圈复杂度的合理阈值是20(很差)和10(有危险)。nasa
    • 圈复杂度密度对维护成本有超过一半的影响力。DoD

    Sonar中没有,但很有用的指标

    • Module Design Complexity,用以确定模块划分合理程度。
    • mccabe是个好东西。
  • 相关阅读:
    还不会python 实现常用的数据编码和对称加密?看这篇文章就够啦~
    linux创建sftp用户
    Transformers库中的pipeline模块支持的NLP任务
    SL-12/2过流继电器
    基于微信小程序的老年人智慧服务平台设计与实现-计算机毕业设计源码+LW文档
    通过 Azure OpenAI 服务使用 GPT-35-Turbo and GPT-4(win版)
    JAVA毕业设计-酒店管理系统-计算机源码+lw文档+系统+调试部署+数据库
    Kubernetes新增节点
    React组件通信-父子组件间的通信
    百趣代谢组学资讯:4篇经典案例助力科研不费力,均IF>12
  • 原文地址:https://blog.csdn.net/pouloghost/article/details/127867099