Как установить пользовательские ограничения сложности для sonar в Java?

#java #sonarqube #complexity-theory #cyclomatic-complexity

#java #sonarqube #теория сложности #цикломатическая сложность

Вопрос:

Есть ли способ установить ограничения сложности для sonar? Я предпочитаю очень простые коды (максимум один if или цикл), но я не могу найти настройку типа sonar.cpd.java.minimumtokens или sonar.cpd.java.minimumLines exist для дублирования кода (и, похоже, не работает, но это будет другой вопрос).

Я хотел бы уменьшить ограничение цикломатической сложности для методов, а также максимальное количество методов в одном классе. Для последнего ограничение по строке было бы в порядке. Как я могу установить эти ограничения сложности?

Ответ №1:

В SonarQube есть несколько правил Java, ориентированных на цикломатическую сложность. Единственный способ настроить их — использовать выделенный профиль качества. По умолчанию в профиле качества SonarWay используются фиксированные пороговые значения. Однако эти правила поддаются параметризации, и вы можете настроить их, как только создадите профиль качества, отличный от профиля SonarWay SonarQube по умолчанию в SonarQube. Затем вам нужно будет настроить свой проект так, чтобы он полагался на этот новый профиль качества, а не на SonarWay.

Для справки взгляните на следующие правила:

Я бы также рекомендовал взглянуть на другое правило, связанное со сложностью:

  • squid: S3776: Когнитивная сложность методов не должна быть слишком высокой

Это правило основано на концепции когнитивной сложности, разработанной для устранения недостатков цикломатической сложности и получения измерения, которое более точно отражает относительную сложность понимания и, следовательно, поддержки методов, классов и приложений.