Узнайте, как работает Aibolit в нашей белой бумаге.
Во -первых, вы устанавливаете его (у вас должен быть установлен Python 3.7.7 и PIP):
$ pip3 install aibolit Чтобы проанализировать ваши источники Java, расположенные в src/java (например), запустите:
$ aibolit check --filenames src/java/File.java src/java/AnotherFile.javaили
$ aibolit recommend --filenames src/java/File.java src/java/AnotherFile.javaКроме того, вы можете установить папку с файлами Java:
$ aibolit recommend --folder src/java Он будет выполнять функцию рекомендации для модели (модель расположена в aibolit/binary_files/model.pkl. Модель находит шаблон, который является наибольшим для цикломатической сложности. Если что -то будет найдено, вы увидите все рекомендации для упомянутых шаблонов. Вы можете увидеть 0 всех шаблонов в шаблонах. Не 2 никаких проблем 1
Вы можете подавить определенные шаблоны (разделенное запятую ценность), и их будет игнорироваться. Они не будут включены в отчет, а также их важность будет установлена на 0.
$ aibolit recommend --folder src/java --suppress=P12,P13 Вы можете изменить формат, используя параметр --format . Значение по умолчанию --format=compact .
$ aibolit recommend --folder src/java --format=compact --fullОн будет выводить сортированные шаблоны по важности в порядке убывания и сгруппировано по имени шаблона:
Show all patterns
/mnt/d/src/java/Configuration.java score: 127.67642529949538
/mnt/d/src/java/Configuration.java[3840]: Var in the middle (P21: 30.95612931128819 1/4)
/mnt/d/src/java/Configuration.java[3844]: Var in the middle (P21: 30.95612931128819 1/4)
/mnt/d/src/java/Configuration.java[3848]: Var in the middle (P21: 30.95612931128819 1/4)
/mnt/d/src/java/Configuration.java[2411]: Null Assignment (P28: 10.76 2/4)
/mnt/d/src/java/Configuration.java[826]: Many primary constructors (P9: 10.76 3/4)
/mnt/d/src/java/Configuration.java[840]: Many primary constructors (P9: 10.76 3/4)
/mnt/d/src/java/Configuration.java[829]: Partial synchronized (P14: 0.228 4/4)
/mnt/d/src/java/Configuration.java[841]: Partial synchronized (P14: 0.228 4/4)
/mnt/d/src/java/Configuration.java[865]: Partial synchronized (P14: 0.228 4/4)
/mnt/d/src/java/Configuration.java[2586]: Partial synchronized (P14: 0.228 4/4)
/mnt/d/src/java/Configuration.java[3230]: Partial synchronized (P14: 0.228 4/4)
/mnt/d/src/java/Configuration.java[3261]: Partial synchronized (P14: 0.228 4/4)
/mnt/d/src/java/Configuration.java[3727]: Partial synchronized (P14: 0.228 4/4)
/mnt/d/src/java/Configuration.java[3956]: Partial synchronized (P14: 0.228 4/4)
/mnt/d/src/java/ErrorExample.java: error when calculating patterns: Can't count P1 metric:
Total score: 127.67642529949538
(P21: 30.95612931128819 1/4) означает следующее:
30.95612931128819 is the score of this pattern
1 is the position of this pattern in the total list of patterns found in the file
4 is the total number of found patterns
Вы можете использовать format=long . В этом случае все результаты будут отсортированы по номеру строки:
Show all patterns
/mnt/d/src/java/Configuration.java: some issues found
/mnt/d/src/java/Configuration.java score: 127.67642529949538
/mnt/d/src/java/Configuration.java[826]: Many primary constructors (P9: 10.76 3/4)
/mnt/d/src/java/Configuration.java[829]: Partial synchronized (P14: 0.228 4/4)
/mnt/d/src/java/Configuration.java[840]: Many primary constructors (P9: 10.76 3/4)
/mnt/d/src/java/Configuration.java[841]: Partial synchronized (P14: 0.228 4/4)
/mnt/d/src/java/Configuration.java[865]: Partial synchronized (P14: 0.228 4/4)
/mnt/d/src/java/Configuration.java[2411]: Null Assignment (P28: 10.76 2/4)
/mnt/d/src/java/Configuration.java[2586]: Partial synchronized (P14: 0.228 4/4)
/mnt/d/src/java/Configuration.java[3230]: Partial synchronized (P14: 0.228 4/4)
/mnt/d/src/java/Configuration.java[3261]: Partial synchronized (P14: 0.228 4/4)
/mnt/d/src/java/Configuration.java[3727]: Partial synchronized (P14: 0.228 4/4)
/mnt/d/src/java/Configuration.java[3840]: Var in the middle (P21: 30.95612931128819 1/4)
/mnt/d/src/java/Configuration.java[3844]: Var in the middle (P21: 30.95612931128819 1/4)
/mnt/d/src/java/Configuration.java[3848]: Var in the middle (P21: 30.95612931128819 1/4)
/mnt/d/src/java/Configuration.java[3956]: Partial synchronized (P14: 0.228 4/4)
/mnt/d/src/java/ErrorExample.java: error when calculating patterns: Can't count P1 metric:
/mnt/d/src/java/MavenSlice.java: your code is perfect in aibolit's opinion
Total score: 127.67642529949538
Вы также можете выбрать формат XML. Он будет иметь тот же формат, что и compact режим, но XML будет создан:
< report >
< score >127.67642529949538</ score >
<!-- Show all patterns -->
< files >
< file >
< path >/mnt/d/src/java/Configuration.java</ path >
< summary >Some issues found</ summary >
< score >127.67642529949538</ score >
< patterns >
< pattern code = " P13 " >
< details >Null check</ details >
< lines >
< number >294</ number >
< number >391</ number >
</ lines >
< score >30.95612931128819</ score >
< order >1/4</ order >
</ pattern >
< pattern code = " P12 " >
< details >Non final attribute</ details >
< lines >
< number >235</ number >
</ lines >
< score >10.76</ score >
< order >2/4</ order >
</ pattern >
< pattern code = " P21 " >
< details >Var in the middle</ details >
< lines >
< number >235</ number >
</ lines >
< score >2.056</ score >
< order >3/4</ order >
</ pattern >
< pattern code = " P28 " >
< details >Null Assignment</ details >
< lines >
< number >2411</ number >
</ lines >
< score >0.228</ score >
< order >4/4</ order >
</ pattern >
</ patterns >
</ file >
< file >
< path >/mnt/d/src/java/ErrorExample.java</ path >
< summary >Error when calculating patterns: Can't count P1 metric: </ summary >
</ file >
< file >
< path >/mnt/d/src/java/MavenSlice.java</ path >
< summary >Your code is perfect in aibolit's opinion</ summary >
</ file >
</ files >
</ report >
Оценка является относительной важности шаблона (для него нет диапазона). Большая оценка - наиболее важная схема. Например, если у вас есть несколько шаблонов, сначала вам нужно исправить шаблон с оценкой 5.45:
/mnt/d/src/java/SampleTests.java[43]: Non final attribute (P12: 5.45 1/10)
/mnt/d/src/java/SampleTests.java[44]: Non final attribute (P12: 5.45 1/10)
/mnt/d/src/java/SampleTests.java[80]: Var in the middle (P21: 3.71 2/10)
/mnt/d/src/java/SampleTests.java[121]: Var in the middle (P21: 3.71 2/10)
/mnt/d/src/java/SampleTests.java[122]: Var declaration distance for 5 lines (P20_5: 2.13 3/10)
/mnt/d/src/java/SampleTests.java[41]: Non final class (P24: 1.95 4/10)
/mnt/d/src/java/SampleTests.java[59]: Force Type Casting (P5: 1.45 5/10)
/mnt/d/src/java/SampleTests.java[122]: Var declaration distance for 7 lines (P20_7: 1.07 6/10)
/mnt/d/src/java/SampleTests.java[122]: Var declaration distance for 11 lines (P20_11: 0.78 7/10)
/mnt/d/src/java/SampleTests.java[51]: Protected Method (P30: 0.60 8/10)
/mnt/d/src/java/SampleTests.java[52]: Super Method (P18: 0.35 9/10)
/mnt/d/src/java/SampleTests.java[100]: Partial synchronized (P14: 0.08 10/10)
/mnt/d/src/java/SampleTests.java[106]: Partial synchronized (P14: 0.08 10/10)
/mnt/d/src/java/SampleTests.java[113]: Partial synchronized (P14: 0.08 10/10)
Оценка за класс - это сумма всех баллов шаблонов.
/mnt/d/src/java/SampleTests.java score: 17.54698560768407
Общий балл - это среднее среди всех файлов Java в проекте (папка, которую вы установили для анализа)
Total average score: 4.0801854775508914
Если у вас есть 2 множества различных проектов, худший проект - это тот, который имеет самый высокий балл.
Модель автоматически установлена с помощью пакета Aibolit , но вы также можете попробовать свою собственную модель
$ aibolit recommend --folder src/java --model /mnt/d/some_folder/model.pkl Вы можете получить полный отчет с командой --full все шаблоны будут включены в вывод:
$ aibolit recommend --folder src/java --full Вы можете исключить файлы с помощью --exclude . Вы установите шаблоны глобуса, чтобы игнорировать:
$ aibolit recommend --folder src/java --exclude= ** / * Test * .java --exclude= ** / * Impl * .javaЕсли вам нужна помощь, бегите
$ aibolit recommend --help Команда Train выполняет следующее:
Поезд работает только с клонированным репозиторием GIT.
Клон Айболит репозиторий
Перейдите в cloned_aibolit_path
Запустить pip install .
Установите переменную env export HOME_AIBOLIT=cloned_aibolit_path (пример для Linux).
Установите переменную env TARGET_FOLDER если вам нужно сохранить все файлы набора данных в другой каталог.
Вы должны указать набор данных поезда и тестирования: Установите переменную среды HOME_TRAIN_DATASET для набора данных поезда и переменной среды HOME_TEST_DATASET для тестового набора данных. Обычно эти файлы находятся в каталоге scripts/target/08 после сбора наборов данных (если вы не пропустили его). Но вы можете использовать свои собственные наборы данных.
Пожалуйста, обратите внимание, что если вы установите TARGET_FOLDER , ваши файлы набора данных будут в TARGET_FOLDER/target . Вот почему необходимо установить home_train_dataset = TARGET_FOLDER target 08 08-train.csv, home_test_dataset = TARGET_FOLDER target 08 08-test.csv
Если вам нужно настроить собственный каталог, где будет сохранена модель, настройте также переменную среды SAVE_MODEL_FOLDER . В противном случае модель будет сохранена в cloned_aibolit_path/aibolit/binary_files/model.pkl
Если вам нужно настроить собственную папку с помощью файлов Java, используйте --java_folder parameter , значение по умолчанию будет scripts/target/01 Aibolit Clone Repo
Или вы можете использовать наше изображение Docker (ссылка скоро будет здесь)
Запустите поездный трубопровод:
$ aibolit train --java_folder=src/java [--max_classes = 100] [--dataset_file] Если вам нужно сохранить набор данных со всеми рассчитанными показателями в другой каталог, вам необходимо использовать параметр dataset_file
$ aibolit train --java_folder=src/java --dataset_file /mnt/d/new_dir/dataset.csv Вы можете пропустить сбор наборов данных с помощью параметра skip_collect_dataset . В этом случае модель будет обучаться предопределенному набору данных (см. 5 пунктов):
$ aibolit train --java_folder=src/java --skip_collect_datasetВо -первых, вам нужно установить:
Установите следующие пакеты, если у вас нет:
$ apt-get install ruby-dev libz-dev libxml2Затем вы раскошелите репо и вносите изменения. Затем вы убедитесь, что сборка все еще чистая, бегая:
$ makeЧтобы построить белую бумагу:
$ cd wp
$ latexmk -c && latexmk -pdf wp.texЕсли все в порядке, отправьте запрос на привлечение.
Использование конвейера рекомендаций Docker
$ docker run --rm -it
-v < absolute_path_to_folder_with_classes > :/in
-v < absolute_path_to_out_dir > :/out
cqfn/aibolit-image