Pelajari cara kerja Aibolit di buku putih kami.
Pertama, Anda menginstalnya (Anda harus memiliki Python 3.7.7 dan Pip diinstal):
$ pip3 install aibolit Untuk menganalisis sumber Java Anda, yang terletak di src/java (misalnya), jalankan:
$ aibolit check --filenames src/java/File.java src/java/AnotherFile.javaatau
$ aibolit recommend --filenames src/java/File.java src/java/AnotherFile.javaAnda juga dapat mengatur folder dengan file java:
$ aibolit recommend --folder src/java Ini akan menjalankan fungsi rekomendasi untuk model (model terletak di Aibolit/Binary_files/model.pkl. Model menemukan pola yang merupakan kontribusi terbesar 0 kompleksitas siklus. tidak 2 masalah 1
Anda dapat menekan pola tertentu (nilai terpisah koma) dan mereka akan diabaikan. Mereka tidak akan dimasukkan ke dalam laporan, juga pentingnya mereka akan ditetapkan ke 0.
$ aibolit recommend --folder src/java --suppress=P12,P13 Anda dapat mengubah format, menggunakan parameter --format . Nilai defaultnya adalah --format=compact .
$ aibolit recommend --folder src/java --format=compact --fullIni akan menghasilkan pola yang diurutkan dengan penting dalam urutan menurun dan dikelompokkan dengan nama pola:
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) berarti yang berikut:
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
Anda dapat menggunakan format=long . Dalam hal ini semua hasil akan diurutkan berdasarkan nomor baris:
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
Anda juga dapat memilih format XML. Ini akan memiliki format yang sama dengan mode compact , tetapi XML akan dibuat:
< 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 >
Skor adalah kepentingan relatif dari pola (tidak ada rentang untuk itu). Skor yang lebih besar adalah, pola yang paling penting adalah. Misalnya, jika Anda memiliki beberapa pola, pertama Anda perlu memperbaiki pola dengan skor 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)
Skor per kelas adalah jumlah dari semua skor pola.
/mnt/d/src/java/SampleTests.java score: 17.54698560768407
Skor total adalah rata -rata di antara semua file java dalam suatu proyek (folder yang Anda tetapkan untuk dianalisis)
Total average score: 4.0801854775508914
Jika Anda memiliki 2 skor proyek yang berbeda, proyek terburuk adalah bahwa yang memiliki skor tertinggi.
Model secara otomatis diinstal dengan paket AIBOLIT , tetapi Anda juga dapat mencoba model Anda sendiri
$ aibolit recommend --folder src/java --model /mnt/d/some_folder/model.pkl Anda bisa mendapatkan laporan lengkap dengan perintah --full , maka semua pola akan dimasukkan ke output:
$ aibolit recommend --folder src/java --full Anda dapat mengecualikan file dengan perintah --exclude . Anda untuk mengatur pola glob untuk diabaikan:
$ aibolit recommend --folder src/java --exclude= ** / * Test * .java --exclude= ** / * Impl * .javaJika Anda membutuhkan bantuan, jalankan
$ aibolit recommend --help Perintah Train melakukan hal berikut:
Kereta hanya bekerja dengan repositori git yang dikloning.
Klon AIBOLIT Repository
Pergi ke cloned_aibolit_path
Jalankan pip install .
Atur variabel variabel export HOME_AIBOLIT=cloned_aibolit_path (contoh untuk linux).
Setel variabel TARGET_FOLDER variabel jika Anda perlu menyimpan semua file dataset ke direktori lain.
Anda harus menentukan dataset kereta dan pengujian: Atur variabel lingkungan HOME_TRAIN_DATASET untuk dataset kereta api dan variabel lingkungan HOME_TEST_DATASET untuk dataset uji. Biasanya, file -file ini ada dalam scripts/target/08 direktori setelah pengumpulan dataset (jika Anda belum melewatkannya). Tetapi Anda dapat menggunakan set data Anda sendiri.
Harap perhatikan, bahwa jika Anda menetapkan TARGET_FOLDER , file dataset Anda akan berada di TARGET_FOLDER/target . Itulah mengapa perlu untuk mengatur home_train_dataset = TARGET_FOLDER target 08 08-train.csv, home_test_dataset = TARGET_FOLDER target 08 08-test.csv
Jika Anda perlu mengatur direktori sendiri di mana model akan disimpan, atur juga variabel lingkungan SAVE_MODEL_FOLDER . Kalau tidak, model akan disimpan ke dalam cloned_aibolit_path/aibolit/binary_files/model.pkl
Jika Anda perlu mengatur folder sendiri dengan file java, gunakan --java_folder parameter , nilai default adalah scripts/target/01 dari repo kloning aibolit
Atau Anda dapat menggunakan gambar Docker kami (tautan akan segera di sini)
Jalankan Pipa Kereta:
$ aibolit train --java_folder=src/java [--max_classes = 100] [--dataset_file] Jika Anda perlu menyimpan dataset dengan semua metrik yang dihitung ke direktori yang berbeda, Anda perlu menggunakan parameter dataset_file
$ aibolit train --java_folder=src/java --dataset_file /mnt/d/new_dir/dataset.csv Anda dapat melewatkan koleksi dataset dengan parameter skip_collect_dataset . Dalam hal ini model akan dilatih dengan dataset yang telah ditentukan (lihat 5 poin):
$ aibolit train --java_folder=src/java --skip_collect_datasetPertama, Anda perlu menginstal:
Instal paket berikut jika Anda tidak memiliki:
$ apt-get install ruby-dev libz-dev libxml2Kemudian, Anda membayar repo dan membuat perubahan. Kemudian, Anda memastikan bangunannya masih bersih, dengan menjalankan:
$ makeUntuk membangun kertas putih:
$ cd wp
$ latexmk -c && latexmk -pdf wp.texJika semuanya baik -baik saja, kirimkan permintaan tarik.
Menggunakan pipa rekomendasi Docker
$ docker run --rm -it
-v < absolute_path_to_folder_with_classes > :/in
-v < absolute_path_to_out_dir > :/out
cqfn/aibolit-image