เรียนรู้วิธีการทำงานของ Aibolit ในกระดาษสีขาวของเรา
ก่อนอื่นคุณติดตั้ง (คุณต้องติดตั้ง Python 3.7.7 และ PIP):
$ pip3 install aibolit ในการวิเคราะห์แหล่ง Java ของคุณตั้งอยู่ที่ src/java (ตัวอย่าง), Run:
$ 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 ที่โคลน
repository clone aibolit
ไปที่ cloned_aibolit_path
Run 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
หรือคุณสามารถใช้อิมเมจนักเทียบท่าของเรา (ลิงค์จะอยู่ที่นี่เร็ว ๆ นี้)
รันท่อรถไฟ:
$ 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