Aprenda cómo funciona Aibolit en nuestro Libro Blanco.
Primero, lo instala (debe tener instalado Python 3.7.7 y PIP):
$ pip3 install aibolit Para analizar sus fuentes Java, ubicadas en src/java (por ejemplo), ejecute:
$ aibolit check --filenames src/java/File.java src/java/AnotherFile.javao
$ aibolit recommend --filenames src/java/File.java src/java/AnotherFile.javaAdemás, puede configurar una carpeta con archivos Java:
$ aibolit recommend --folder src/java Ejecutará la función de recomendación para el modelo (el modelo se encuentra en aibolit/binary_files/model.pkl. El modelo encuentra un patrón que la contribución es la más grande de la complejidad ciclomática. Si se encuentra 0 , verá todas las recomendaciones para los patrones mencionados. Puede ver la lista de todos los patrones. 1 archivos no tienen ningún 2 .
Puede suprimir ciertos patrones (valor separado por comas) y serán ignorados. No se incluirán en el informe, también su importancia se establecerá en 0.
$ aibolit recommend --folder src/java --suppress=P12,P13 Puede cambiar el formato, utilizando el parámetro --format . El valor predeterminado es --format=compact .
$ aibolit recommend --folder src/java --format=compact --fullENCONTRARÁ Patrones ordenados por importancia en el orden descendente y se agrupará por un nombre de patrón:
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) significa lo siguiente:
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
Puedes usar format=long . En este caso, todos los resultados serán ordenados por un número de línea:
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
También puede elegir el formato XML. Tendrá el mismo formato que el modo compact , pero se creará 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 >
El puntaje es la importancia relativa del patrón (no hay rango para él). El puntaje más grande es, el patrón más importante es. Por ejemplo, si tiene varios patrones, primero debe corregir el patrón con la puntuación 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)
El puntaje por clase es la suma de todos los puntajes de los patrones.
/mnt/d/src/java/SampleTests.java score: 17.54698560768407
El puntaje total es un promedio entre todos los archivos Java en un proyecto (carpeta que ha configurado para analizar)
Total average score: 4.0801854775508914
Si tiene 2 decenas de diferentes proyectos, el peor proyecto es el que tiene el puntaje más alto.
El modelo se instala automáticamente con el paquete AIBOLIT , pero también puede probar su propio modelo
$ aibolit recommend --folder src/java --model /mnt/d/some_folder/model.pkl Puede obtener un informe completo con -Comando --full , luego todos los patrones se incluirán en la salida:
$ aibolit recommend --folder src/java --full Puede excluir archivos con el comando --exclude . Usted para establecer patrones del globo para ignorar:
$ aibolit recommend --folder src/java --exclude= ** / * Test * .java --exclude= ** / * Impl * .javaSi necesita ayuda, ejecute
$ aibolit recommend --help El comando Train hace lo siguiente:
El tren solo funciona con el repositorio de Git clonado.
Repositorio de clones aibolit
Ir cloned_aibolit_path
Ejecute pip install .
Establezca la variable ENV export HOME_AIBOLIT=cloned_aibolit_path (ejemplo para Linux).
Establezca la variable ENV TARGET_FOLDER si necesita guardar todos los archivos de conjunto de datos en otro directorio.
Debe especificar el conjunto de datos de tren y prueba: configure la variable de entorno HOME_TRAIN_DATASET para el conjunto de datos de trenes y la variable de entorno HOME_TEST_DATASET para el conjunto de datos de prueba. Por lo general, estos archivos están en el directorio scripts/target/08 después de la recopilación del conjunto de datos (si no lo ha omitido). Pero puede usar sus propios conjuntos de datos.
Tenga en cuenta que si establece TARGET_FOLDER , sus archivos de conjunto de datos estarán en TARGET_FOLDER/target . Es por eso que es necesario establecer home_train_dataset = TARGET_FOLDER target 08 08-train.csv, home_test_dataset = TARGET_FOLDER target 08 08-test.csv
Si necesita configurar el directorio propio donde se guardará el modelo, configure también la variable de entorno SAVE_MODEL_FOLDER . De lo contrario, el modelo se guardará en cloned_aibolit_path/aibolit/binary_files/model.pkl
Si necesita configurar la carpeta propia con archivos Java, use --java_folder parameter , el valor predeterminado será scripts/target/01 de AIBOLIT Repo clonado
O puede usar nuestra imagen Docker (el enlace estará pronto aquí)
Ejecute de la tubería del tren:
$ aibolit train --java_folder=src/java [--max_classes = 100] [--dataset_file] Si necesita guardar el conjunto de datos con todas las métricas calculadas en un directorio diferente, debe usar el parámetro dataset_file
$ aibolit train --java_folder=src/java --dataset_file /mnt/d/new_dir/dataset.csv Puede omitir la colección de conjuntos de datos con el parámetro skip_collect_dataset . En este caso, el modelo será entrenado con un conjunto de datos predefinidos (ver 5 puntos):
$ aibolit train --java_folder=src/java --skip_collect_datasetPrimero, debe instalar:
Instale los siguientes paquetes si no tiene:
$ apt-get install ruby-dev libz-dev libxml2Luego, bifurca el repositorio y realiza los cambios. Luego, te aseguras de que la construcción aún esté limpia, ejecutando:
$ makePara construir papel blanco:
$ cd wp
$ latexmk -c && latexmk -pdf wp.texSi todo está bien, envíe una solicitud de extracción.
Uso de la tubería de recomendación de Docker
$ docker run --rm -it
-v < absolute_path_to_folder_with_classes > :/in
-v < absolute_path_to_out_dir > :/out
cqfn/aibolit-image