Программные проекты, как правило, становятся очень сложными и сложными в обслуживании. С помощью рефакторинга код можно сделать относительно простым для понимания. Однако в реальном проекте кажется невозможным везде иметь очень высокое качество кода.
Для горячих точек программы, мест с высокой сложностью и скоростью изменений, усилия по рефакторингу, скорее всего, принесут наибольшую отдачу от инвестиций. В этом сообщении в блоге рассматривается способ их идентификации в Java-проекте.
В качестве примера проекта был выбран Apache Wicket . Для его анализа использовались инструменты с открытым исходным кодом SonarCube , Code Charter и Code Maat , и Используются скрипты Python . Сложность измеряется с помощью метрики Sonarcube Cognitive complexity и скорости изменения по количеству коммитов для конкретного файла.
Приведенные ниже шаги выполняются в DigitalOcean droplet , за исключением окончательной визуализации.
- Ubuntu 18.04
- Предустановленный докер
Загрузка необходимых репозиториев
На этом пути потребуются следующие репозитории:
mkdir ~/src && cd ~/src git clone https://github.com/apache/wicket.git git clone https://github.com/adamtornhill/code-maat.git git clone https://github.com/experimental-software/code-analytics.git
Настройка инструмента
Сервер Sonarqube можно запустить с помощью этой инструкции docker run
:
docker run --env ES_JAVA_OPTS="-Xms750m -Xmx750m" -d -p 9000:9000 -p 9092:9092 sonarqube
Позже нам также понадобится пара системных инструментов:
apt update && apt install maven npm leiningen unzip -y
Кодовая диаграмма должна быть установлена через диспетчер пакетов узла:
npm install codecharta-analysis -g npm install codecharta-visualization -g
Для Code Mate нет двоичного дистрибутива, нам нужно скомпилировать его самостоятельно:
cd ~/src/code-maat lein uberjar mkdir ~/bin cp target/code-maat-1.1-SNAPSHOT-standalone.jar ~/bin/code-maat.jar
Установив инструмент sonar-scanner
CLI, мы можем импортировать проект Java без изменения его конфигурации:
cd ~/bin curl https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.3.0.1492-linux.zip \ > sonar-scanner-cli-3.3.0.1492-linux.zip unzip sonar-scanner-cli-3.3.0.1492-linux.zip PATH="$PATH:~/bin/sonar-scanner-3.3.0.1492-linux/bin"
Теперь мы действительно можем приступить к анализу кода. Первым шагом является импорт Java-проекта в SonarCube:
cd ~/src/wicket mvn install sonar-scanner -Dsonar.projectKey=wicket \ -Dsonar.source=. -Dsonar.java.binaries=. \ -Dsonar.exclusions='**/*.js,**/*.xml' curl http://localhost:9000/api/ce/task?id=AWrweUgHuDEJjgfjbZpz \ | jq '.task.status'
Далее мы извлекаем данные из SonarCube в файл JSON, который является основой окончательной визуализации кода:
ccsh sonarimport http://localhost:9000 wicket > /tmp/sonar.json
Подсчет количества коммитов для каждого файла будет производиться с помощью кода Maat, который принимает git log
в качестве входных данных:
cd ~/src/wicket git log --since="1 year" --all --numstat --date=short \ --pretty=format:'--%h--%ad--%aN' --no-renames \ > /tmp/gitlog.txt java -jar ~/bin/code-maat.jar --log /tmp/gitlog.txt \ --version-control git2 --analysis revisions \ > /tmp/codemaat-revisions.txt
Затем мы можем обогатить файл sonar.json
информацией, извлеченной Code Maat с помощью небольшого вспомогательного скрипта:
cd ~/src/code-analytics python enrich_codecharta_data.py --sonar-json /tmp/sonar.json \ --codemaat-csv /tmp/codemaat-revisions.txt
Наконец, мы можем запустить визуализацию диаграммы кода, загрузить sonar.json
в его графический интерфейс и выбрать показатели, которые мы хотим визуализировать.
codecharta-visualization
Оригинал: “https://dev.to/janux_de/hotspot-analysis-for-a-java-project-4ej6”