Erfahren Sie, wie Aibolit in unserem Weißbuch funktioniert.
Zunächst installieren Sie es (Sie müssen Python 3.7.7 und PIP installiert haben):
$ pip3 install aibolit Um Ihre Java -Quellen in src/java (zum Beispiel) zu analysieren, rennen Sie:
$ aibolit check --filenames src/java/File.java src/java/AnotherFile.javaoder
$ aibolit recommend --filenames src/java/File.java src/java/AnotherFile.javaAußerdem können Sie einen Ordner mit Java -Dateien festlegen:
$ aibolit recommend --folder src/java Es wird die Empfehlungsfunktion für das Modell ausgeführt (Modell befindet sich in AIBolit/ 0 /Modell. Haben Sie keine 2 1
Sie können bestimmte Muster unterdrücken (Comma -Trennwert) und sie werden ignoriert. Sie werden nicht in den Bericht einbezogen, auch ihre Bedeutung wird auf 0 gesetzt.
$ aibolit recommend --folder src/java --suppress=P12,P13 Sie können das Format mit dem Parameter --format ändern. Der Standardwert ist --format=compact .
$ aibolit recommend --folder src/java --format=compact --fullEs gibt sortierte Muster nach Bedeutung in absteigender Reihenfolge aus und gruppiert nach einem Musternamen:
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) bedeutet Folgendes:
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
Sie können format=long verwenden. In diesem Fall werden alle Ergebnisse nach einer Zeilennummer sortiert:
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
Sie können auch das XML -Format auswählen. Es wird das gleiche Format wie der compact haben, aber XML wird erstellt:
< 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 >
Die Punktzahl ist die relative Bedeutung des Musters (es gibt keinen Bereich dafür). Die größere Punktzahl ist, das wichtigste Muster ist. ZB, wenn Sie mehrere Muster haben, müssen Sie zuerst das Muster mit der Punktzahl 5.45 reparieren:
/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)
Die Punktzahl pro Klasse ist die Summe aller Musterwerte.
/mnt/d/src/java/SampleTests.java score: 17.54698560768407
Die Gesamtpunktzahl ist ein Durchschnitt unter allen Java -Dateien in einem Projekt (Ordner, den Sie analysieren, um zu analysieren)
Total average score: 4.0801854775508914
Wenn Sie 2 Punkte verschiedener Projekte haben, ist das schlechteste Projekt das, das die höchste Punktzahl hat.
Das Modell wird automatisch mit einem AIBolit -Paket installiert, aber Sie können auch Ihr eigenes Modell ausprobieren
$ aibolit recommend --folder src/java --model /mnt/d/some_folder/model.pkl Sie können einen vollständigen Bericht mit dem Befehl --full erhalten, dann werden alle Muster in die Ausgabe enthalten:
$ aibolit recommend --folder src/java --full Sie können Dateien mit dem Befehl --exclude ausschließen. Sie müssen Glob -Muster festlegen, um zu ignorieren:
$ aibolit recommend --folder src/java --exclude= ** / * Test * .java --exclude= ** / * Impl * .javaWenn Sie Hilfe benötigen, laufen Sie
$ aibolit recommend --help Der Zugbefehl Train führt Folgendes aus:
Zug arbeitet nur mit geklonten Git -Repository.
Klon AIBolit Repository
Gehen Sie zu cloned_aibolit_path
pip install .
Setzen Sie Env Variable export HOME_AIBOLIT=cloned_aibolit_path (Beispiel für Linux).
Stellen Sie die env variable TARGET_FOLDER fest, wenn Sie alle Datensatzdateien in einem anderen Verzeichnis speichern müssen.
Sie müssen Zug- und Testdatensatz angeben: Setzen Sie die Umgebungsvariable HOME_TRAIN_DATASET für den Zugdatensatz und die Umgebungsvariable für HOME_TEST_DATASET für Testdatensatz. Normalerweise befinden sich diese Dateien nach der Datensatzsammlung in scripts/target/08 -Verzeichnis (wenn Sie es nicht übersprungen haben). Sie können jedoch Ihre eigenen Datensätze verwenden.
Bitte beachten Sie, dass Ihre Datensatzdateien, wenn Sie TARGET_FOLDER festlegen, in TARGET_FOLDER/target befinden. Deshalb ist es notwendig, HOME_TRAIN_DATASET = TARGET_FOLDER target 08 08-train.csv, home_test_dataset = TARGET_FOLDER target 08 08-Test.csv festzulegen.
Wenn Sie ein eigenes Verzeichnis einrichten müssen, in dem das Modell gespeichert wird, richten Sie auch die Umgebungsvariable SAVE_MODEL_FOLDER ein. Ansonsten wird das Modell in cloned_aibolit_path/aibolit/binary_files/model.pkl gespeichert
Wenn Sie einen eigenen Ordner mit Java -Dateien einrichten müssen, verwenden Sie --java_folder parameter , der Standardwert werden scripts/target/01 des AIBolit -Cloned Repo sein
Oder Sie können unser Docker -Image verwenden (Link wird bald hier sein)
Fahr -Zug -Pipeline rennen:
$ aibolit train --java_folder=src/java [--max_classes = 100] [--dataset_file] Wenn Sie den Datensatz mit allen berechneten Metriken in einem anderen Verzeichnis speichern müssen, müssen Sie den Parameter dataset_file verwenden
$ aibolit train --java_folder=src/java --dataset_file /mnt/d/new_dir/dataset.csv Sie können die Datensatzsammlung mit dem Parameter skip_collect_dataset überspringen. In diesem Fall wird das Modell mit vordefinierten Datensatz trainiert (siehe 5 Punkt):
$ aibolit train --java_folder=src/java --skip_collect_datasetZuerst müssen Sie installieren:
Installieren Sie die folgenden Pakete, wenn Sie nicht haben:
$ apt-get install ruby-dev libz-dev libxml2Dann geben Sie das Repo auf und nehmen die Änderungen vor. Dann stellen Sie sicher, dass der Build immer noch sauber ist, indem Sie laufen:
$ makeWeißpapier bauen:
$ cd wp
$ latexmk -c && latexmk -pdf wp.texWenn alles in Ordnung ist, senden Sie eine Pull -Anfrage.
Verwenden der Docker -Empfehlungspipeline
$ docker run --rm -it
-v < absolute_path_to_folder_with_classes > :/in
-v < absolute_path_to_out_dir > :/out
cqfn/aibolit-image