ホワイトペーパーでアイボリットがどのように機能するかを学びます。
まず、インストールします(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にあります。モデルは、cyclomaticの複雑さに貢献する貢献が最大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コマンドは次のことを行います。
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 _folderターゲット 08-test.csv
モデルが保存される独自のディレクトリを設定する必要がある場合は、 SAVE_MODEL_FOLDER環境変数も設定します。それ以外の場合、モデルはcloned_aibolit_path/aibolit/binary_files/model.pklに保存されます
Javaファイルを使用して独自のフォルダーを設定する必要がある場合は、 --java_folder parameter scripts/target/01してください。
または、私たちの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