Рубрики
Без рубрики

Анализ горячих точек для Java-проекта

Шаги, чтобы выяснить, какие части Java-проекта редактировались чаще всего и имеют наибольшую сложность. Помечено статическим анализом, java, wicket.

Программные проекты, как правило, становятся очень сложными и сложными в обслуживании. С помощью рефакторинга код можно сделать относительно простым для понимания. Однако в реальном проекте кажется невозможным везде иметь очень высокое качество кода.

Для горячих точек программы, мест с высокой сложностью и скоростью изменений, усилия по рефакторингу, скорее всего, принесут наибольшую отдачу от инвестиций. В этом сообщении в блоге рассматривается способ их идентификации в 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”