了解Aibolit在我們的白皮書中的工作方式。
首先,您安裝它(必須安裝Python 3.7.7並安裝PIP):
$ pip3 install aibolit要分析位於src/java的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中看到所有模式的列表。沒有任何1 2
您可以抑制某些模式(逗號分開的值),它們將被忽略。它們不會被包括在報告中,其重要性也將設置為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存儲庫一起工作。
克隆Aibolit存儲庫
轉到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克隆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