вторник, 29 января 2013 г.

1. русская документация sonar: основы и параметры анализа

когда-то понадобилось по работе. вариант документации усечённый, ибо приведён в линейный вид по карте и по памяти, но для ознакомления вполне подходит.


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

Комментариев нет:

Отправить комментарий