когда-то понадобилось по работе. вариант документации усечённый, ибо приведён в линейный вид по карте и по памяти, но для ознакомления вполне подходит.
“Платформа Sonar представляет собой комплексное решение для отслеживания качества кода по различным параметрам: дублирование кода, его сложность, покрытие тестами, архитектура, потенциальные ошибки, соответствие стандартам кодирования, наличие комментариев. При этом собранная информация подается в доступном, удобном для восприятия виде. Платформа конфигурируема и расширяема.”
- maven
- sonar ant task
- sonar runner
Подробнее о последнем:
с помощью sonar runner можно анализировать как простые проекты, так и проекты, состоящие из нескольких модулей/языков. Чтобы запустить простой проект, следует настроить файл конфигурации (sonar.properties) следующим образом (примерное содержание).
# required metadata
sonar.projectKey=my:project
sonar.projectName=My project
sonar.projectVersion=1.0
# optional description
sonar.projectDescription=Fake description
# path to source directories (required)
sonar.sources=srcDir1,srcDir2
# path to test source directories (optional)
sonar.tests=testDir1,testDir2
# path to project binaries (optional), for example directory of Java bytecode
sonar.binaries=binDir
# optional comma-separated list of paths to libraries. Only path to JAR file and path to directory of classes are supported.
sonar.libraries=path/to/library/*.jar,path/to/classes/dir,path/to/specific/library/myLibrary.jar,parent/*/*.jar
# The value of the property must be the key of the language.
sonar.language=cobol
# Additional parameters
sonar.my.property=value
и запустить анализ командой sonar-runner
Если проект состоит из нескольких модулей, возможны два варианта действий:
1. все настройки задать в общем конфигурационном файле:

"MyProject/sonar-project.properties":
# Some properties that will be inherited by the modules
sonar.sources=src
# List of the module identifiers
sonar.modules=module1,module2
# Properties can obviously be overriden for
# each module - just prefix them with the module ID
module1.sonar.projectName=Module 1
module2.sonar.projectName=Module 2

"MyProject/sonar-project.properties":
# Some properties that will be inherited by the modules
sonar.sources=src
# List of the module identifiers
sonar.modules=module1,module2
"MyProject/module1/sonar-project.properties":
# Redefine properties
# Note that you do not need to prefix the property here
sonar.projectName=Module 1
"MyProject/module2/sonar-project.properties":
# Redefine properties
# Note that you do not need to prefix the property here
sonar.projectName=Module 2
как обеспечить безопасность своих исходников:
- 'sonar.forceAuthentication' = true
или
- 'sonar.forceAuthentication' = false, но в проекте нет пользователей
если анонимный запуск запрещён, необходимо прописать параметры 'sonar.login' и 'sonar.password'. можно сделать это в:
- командной строке. -Dsonar.login=myUser -Dsonar.password=myPassword
- в файле sonar-project.properties
- в файле sonar-runner.properties
собственно, перечень параметров анализа:
обязательные:
sonar server

dataBase
Project Configuration
необязательные:
sonar.projectDescription - текстовый комментарий
sonar.binaries - через запятую пути к нужным файлам
sonar.tests - через запятую пути к тестам
sonar.libraries - через запятую пути к сторонним библиотекам
sonar.sourceEncoding - кодировка
sonar.importSources - def value: true. на случай, если исходники проекта надо сохранить в глубокой тайне
0. Что это?
“Платформа Sonar представляет собой комплексное решение для отслеживания качества кода по различным параметрам: дублирование кода, его сложность, покрытие тестами, архитектура, потенциальные ошибки, соответствие стандартам кодирования, наличие комментариев. При этом собранная информация подается в доступном, удобном для восприятия виде. Платформа конфигурируема и расширяема.”
1. Как пользоваться.
1.1. основные концепции
архитектура
Sonar, как платформа, состоит из клиентской части, базы данных, серверной части и некоего блока логики - анализатора.
качество
обеспечивается такими понятиями, как
- coding rules - набор встроенных правил, по которому оценивается качество кода
- metric. бывают количественными (покрытие тестами, плотность повторяющихся строк..) и качественными (количество строк кода, сложность..)
- measure - значение метрики для данного ресурса
- quality profile - набор coding rules. каждый snapshot отображает один QP
- resources - это тестируемый код. пакет/проект/модуль/файл
- snapshot - набор результатов проверки данного ресурса
- violation - нарушение. если код не удовлетворяет заданным параметрам, может быть зафиксировано в файле/юнит-тестах/пакете
элементы интерфейса
widget’s бывают глобальными и уникальными для каждого проекта
отображаемый dashboard - набор виджетов с данными из базы данных
1.2. анализ кода
Анализировать код на предмет недочетов можно начать с помощью:- maven
- sonar ant task
- sonar runner
Подробнее о последнем:
с помощью sonar runner можно анализировать как простые проекты, так и проекты, состоящие из нескольких модулей/языков. Чтобы запустить простой проект, следует настроить файл конфигурации (sonar.properties) следующим образом (примерное содержание).
# required metadata
sonar.projectKey=my:project
sonar.projectName=My project
sonar.projectVersion=1.0
# optional description
sonar.projectDescription=Fake description
# path to source directories (required)
sonar.sources=srcDir1,srcDir2
# path to test source directories (optional)
sonar.tests=testDir1,testDir2
# path to project binaries (optional), for example directory of Java bytecode
sonar.binaries=binDir
# optional comma-separated list of paths to libraries. Only path to JAR file and path to directory of classes are supported.
sonar.libraries=path/to/library/*.jar,path/to/classes/dir,path/to/specific/library/myLibrary.jar,parent/*/*.jar
# The value of the property must be the key of the language.
sonar.language=cobol
# Additional parameters
sonar.my.property=value
и запустить анализ командой sonar-runner
Если проект состоит из нескольких модулей, возможны два варианта действий:
1. все настройки задать в общем конфигурационном файле:
"MyProject/sonar-project.properties":
# Some properties that will be inherited by the modules
sonar.sources=src
# List of the module identifiers
sonar.modules=module1,module2
# Properties can obviously be overriden for
# each module - just prefix them with the module ID
module1.sonar.projectName=Module 1
module2.sonar.projectName=Module 2
2. для каждого модуля свои настройки:
"MyProject/sonar-project.properties":
# Some properties that will be inherited by the modules
sonar.sources=src
# List of the module identifiers
sonar.modules=module1,module2
"MyProject/module1/sonar-project.properties":
# Redefine properties
# Note that you do not need to prefix the property here
sonar.projectName=Module 1
"MyProject/module2/sonar-project.properties":
# Redefine properties
# Note that you do not need to prefix the property here
sonar.projectName=Module 2
как обеспечить безопасность своих исходников:
- 'sonar.forceAuthentication' = true
или
- 'sonar.forceAuthentication' = false, но в проекте нет пользователей
если анонимный запуск запрещён, необходимо прописать параметры 'sonar.login' и 'sonar.password'. можно сделать это в:
- командной строке. -Dsonar.login=myUser -Dsonar.password=myPassword
- в файле sonar-project.properties
- в файле sonar-runner.properties
собственно, перечень параметров анализа:
обязательные:
sonar server
dataBase
Project Configuration
необязательные:
sonar.projectDescription - текстовый комментарий
sonar.binaries - через запятую пути к нужным файлам
sonar.tests - через запятую пути к тестам
sonar.libraries - через запятую пути к сторонним библиотекам
sonar.sourceEncoding - кодировка
sonar.importSources - def value: true. на случай, если исходники проекта надо сохранить в глубокой тайне
sonar.projectDate - dev value: current (формат yyyy-MM-dd)
sonar.exclusions - если надо исключить какие-либо файлы из анализа. Ex: com/mycompany/*.java,**/*Dummy.java
sonar.skippedModules - если надо исключить из анализа некоторые модули
пример: module1_toexclude,module2_toexclude.
sonar.includedModules - обработаются только перечисленные модули
sonar.branch - для управления SCM ветками
sonar.profile - для задания профиля для текущего проекта
sonar.skipDesign - def value: false. отключает java анализ байт-кода
sonar.phase - выполнить maven цели и фазы до общего анализа
юнит тесты и интеграционные:
sonar.dynamicAnalysis - def value: true (false, reuseReports)
по умолчанию тесты запускаются каждый раз. можно отключить опциюи использовать, например, ранее созданные отчёты
sonar.surefire.reportsPath - если решено использовать уже созданные отчёты, тут указывается дорога к прекрасному
sonar.jacoco.reportPath
sonar.cobertura.reportPath
sonar.clover.reportPath
sonar.jacoco.itReportPath - для интеграционных тестов
конфигурация Sonar:
sonar.host.connectTimeoutMs - def value: 30’000
sonar.host.readTimeoutMs - def value: 60’000
дублирование:
sonar.cpd.${language_key}.minimumTokens - def value: 100
минимальное количество продублированных лексем, необходимое для вывода предупреждения
sonar.cpd.${language_key}.minimumLines - def value: 10
минимальное количество продублированных строк кода, необходимое для вывода предупреждения
Log:
sonar.showSql - def value: false. отображение всех выполняемых sql-запросов
sonar.showSqlResults - def value: false. отображение всех получаемых результатов sql-запросов
sonar.verbose - def value: false. активирует режим DEBUG
sonar.exclusions - если надо исключить какие-либо файлы из анализа. Ex: com/mycompany/*.java,**/*Dummy.java
sonar.skippedModules - если надо исключить из анализа некоторые модули
пример: module1_toexclude,module2_toexclude.
sonar.includedModules - обработаются только перечисленные модули
sonar.branch - для управления SCM ветками
sonar.profile - для задания профиля для текущего проекта
sonar.skipDesign - def value: false. отключает java анализ байт-кода
sonar.phase - выполнить maven цели и фазы до общего анализа
юнит тесты и интеграционные:
sonar.dynamicAnalysis - def value: true (false, reuseReports)
по умолчанию тесты запускаются каждый раз. можно отключить опциюи использовать, например, ранее созданные отчёты
sonar.surefire.reportsPath - если решено использовать уже созданные отчёты, тут указывается дорога к прекрасному
sonar.jacoco.reportPath
sonar.cobertura.reportPath
sonar.clover.reportPath
sonar.jacoco.itReportPath - для интеграционных тестов
конфигурация Sonar:
sonar.host.connectTimeoutMs - def value: 30’000
sonar.host.readTimeoutMs - def value: 60’000
дублирование:
sonar.cpd.${language_key}.minimumTokens - def value: 100
минимальное количество продублированных лексем, необходимое для вывода предупреждения
sonar.cpd.${language_key}.minimumLines - def value: 10
минимальное количество продублированных строк кода, необходимое для вывода предупреждения
Log:
sonar.showSql - def value: false. отображение всех выполняемых sql-запросов
sonar.showSqlResults - def value: false. отображение всех получаемых результатов sql-запросов
sonar.verbose - def value: false. активирует режим DEBUG
Комментариев нет:
Отправить комментарий