백서에서 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에 위치하고 있습니다. 모델은 사이클로 더 복잡성에 가장 큰 패턴을 발견합니다. 어떤 것이 발견되면, 언급 된 패턴에 대한 모든 권장 사항을 볼 수 있습니다. 모든 패턴의 모든 패턴 목록을 볼 수 있습니다. MD의 출력은 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 target 08-test.csv를 설정해야합니다.
모델이 저장 될 자체 디렉토리를 설정 해야하는 경우 SAVE_MODEL_FOLDER 환경 변수도 설정하십시오. 그렇지 않으면 모델은 cloned_aibolit_path/aibolit/binary_files/model.pkl 에 저장됩니다
Java 파일로 자체 폴더를 설정 해야하는 경우 --java_folder parameter 사용하면 기본값은 Aibolit Cloned Repo의 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그런 다음, 당신은 repo를 포크하고 변경합니다. 그런 다음 실행하여 빌드가 여전히 깨끗한 지 확인하십시오.
$ 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