java - SonarQube 通过质量门进行技术债务管理

标签 java sonarqube software-quality sonarqube5.3

配置自定义质量门,默认的SonarQube Way已作为初始引用并进一步调整和定制(添加进一步检查)。我们当前的质量门如下所示(旧版本与当前版本):

Blocker issues:             error threshold at 0
Complexity/class:           error threshold at 12
Complexity/file:            error threshold at 12
Complexity/function         error threshold at 2
Coverage                    error threshold at 100 >> changed to 65
Critical issues             error threshold at 0
Duplicated lines (%)        error threshold at 5
Info issues                 error threshold at 10
Major issues                error threshold at 50
Minor issues                error threshold at 100
Overall coverage            error threshold at 100 >> changed to 65
Public documented API (%)   error threshold at 50
Skipped Unit tests          error threshold at 0
Technical Debts             error threshold at 10d >> change to (?? < 10)
Unit test errors            error threshold at 0
Unit test failures          error threshold at 0

要点是关于技术债务天数,考虑到其他检查已经放宽(复杂性和覆盖范围),技术债务天数应该从 10 强制执行到更小的值。这确实是合理的:放宽一些规则,您应该有更多的受控技术债务余量,从而缩短非受控技术债务的累计天数阈值。

但是,整体质量门应该以某种方式(数学上?)遵循一定的比例。

问题:考虑到上述放宽情况,如何计算最合适的技术债务阈值?

来自 old article (2009 年,因此很可能不再适用)已扣除以下公式:

TechDebt = (cost_to_fix_one_block * duplicated_blocks) + \
     (cost_to fix_one_violation * mandatory_violations) + \
     (cost_to_comment_one_API * public_undocumented_api) + \
     (cost_to_cover_one_of_complexity * uncovered_complexity_by_tests) + \
     (cost_to_split_a_method * function_complexity_distribution) + \
     (cost_to_split_a_class * class_complexity_distribution)

注意:添加 \ 是为了提高可读性。

但是,有太多未知变量无法进行正确的计算,但它并没有涵盖上面的所有质量门项目(同样,这是一个旧引用)。

其他更新的sources详细解释相关项目,但不解释如何按比例调整值

sonar.technicalDebt.developmentCost(管理/配置/技术债务)的默认值为30 分钟,这意味着 1 LOC(开发 1 行代码的成本)= 30,但仍然达不到上述变量的粒度级别,在这种情况下也没有用处。

最佳答案

质量门由一组条件组成。您的条件列表比默认质量门中的条件列表要长得多。您列出的大多数条件都不在默认质量门内。相反,它看起来好像您已经编辑了许多规则的默认阈值。

从某种意义上说,你正在谈论苹果和橙子。

技术债务阈值可以包含在质量门中,但默认情况下并非如此。相反,新代码的技术债务比率包含在默认 QG 中。但技术债务比率的概念确实与您的问题有关。如果您在质量门中设置技术债务的硬阈值,那么小型项目将比大型项目更容易通过 QG。如果您改为使用技术债务比率或新代码的技术债务比率(推荐),那么您将根据代码库大小与技术债务的比率来设置质量门。因此,每个项目通过或失败的机会都是相同的。公式是这样的:

Remediation cost / (Cost to develop 1 line of code * Number of lines of code)

预计生产线开发成本为 30 分钟。该值是可编辑的,顺便说一句:管理 > 技术债务 > 开发成本

默认质量门包括新代码错误阈值的技术债务比率 5。

关于java - SonarQube 通过质量门进行技术债务管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39525909/

相关文章:

java - 快速查询包含键的表(DynamoDB 和 Java)

java - PrimeFaces 和浏览器兼容性

msbuild - Sonar 扫描仪错误结果不会出现在 sonarqube 仪表板上

maven - SonarQube - Java 堆错误

c - 在框架中使用自定义 true false 值的原因

linux - 测量Linux中的执行时间

java - 无法使用 Jackson 解析 xml 中的元素列表

java - Kafka Spark Streaming LocationStrategies java类def未找到异常

javascript - 建议为 AngularJs 定制 SonarQube 规则

software-quality - 软件消亡的迹象