تعلم كيف يعمل Aibolit في ورقتنا البيضاء.
أولاً ، تقوم بتثبيته (يجب أن يكون لديك Python 3.7.7 وتثبيت PIP):
$ pip3 install aibolit لتحليل مصادر Java الخاصة بك ، الواقعة في src/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 في التعقيد السيكلومي. لا 2 الملفات 1 أي مشكلات.
يمكنك قمع بعض الأنماط (القيمة المنفصلة للفاصلة) وسيتم تجاهلها. لن يتم تضمينها في التقرير ، كما سيتم تعيين أهميتها على 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 Variable 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 Vehyical متغير. وإلا سيتم حفظ النموذج في cloned_aibolit_path/aibolit/binary_files/model.pkl
إذا كنت بحاجة إلى إعداد مجلد خاص بملفات Java ، فاستخدم --java_folder parameter ، ستكون القيمة الافتراضية هي scripts/target/01 من Aibolit cloned 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