了解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