Saiba como a Aibolit funciona em nosso white paper.
Primeiro, você o instala (você deve ter o Python 3.7.7 e o PIP instalado):
$ pip3 install aibolit Para analisar suas fontes Java, localizadas no src/java (por exemplo), execute:
$ aibolit check --filenames src/java/File.java src/java/AnotherFile.javaou
$ aibolit recommend --filenames src/java/File.java src/java/AnotherFile.javaAlém disso, você pode definir uma pasta com arquivos Java:
$ aibolit recommend --folder src/java Ele executará a função de recomendação para o modelo (o modelo está localizado em Aibolit/binary_files/model.pkl. O modelo encontra um padrão que a contribuição é a maior para a complexidade ciclomática. Se 0 coisa é encontrada, você verá que todas as recomendações são os padrões mencionados. Você pode ver a lista de todos os padrões. 1 arquivos não têm 2 .
Você pode suprimir certos padrões (valor separado por vírgula) e eles serão ignorados. Eles não serão incluídos no relatório, também sua importância será definida como 0.
$ aibolit recommend --folder src/java --suppress=P12,P13 Você pode alterar o formato, usando o parâmetro --format . O valor padrão é --format=compact .
$ aibolit recommend --folder src/java --format=compact --fullEle produzirá padrões classificados por importância na ordem descendente e agrupados por um nome de padrão:
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 o seguinte:
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
Você pode usar format=long . Nesse caso, todos os resultados serão classificados por um número de linha:
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
Você também pode escolher o formato XML. Ele terá o mesmo formato que o modo compact , mas o XML será criado:
< 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 >
A pontuação é a importância relativa do padrão (não há alcance para ele). A pontuação maior é que o padrão mais importante é. Por exemplo, se você tiver vários padrões, primeiro precisa corrigir o padrão com a pontuação 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)
A pontuação por classe é a soma de todas as pontuações dos padrões.
/mnt/d/src/java/SampleTests.java score: 17.54698560768407
A pontuação total é uma média entre todos os arquivos Java em um projeto (pasta que você definiu para analisar)
Total average score: 4.0801854775508914
Se você possui duas pontuações de projetos diferentes, o pior projeto é aquele que tem a pontuação mais alta.
O modelo é instalado automaticamente com o pacote Aibolit , mas você também pode experimentar seu próprio modelo
$ aibolit recommend --folder src/java --model /mnt/d/some_folder/model.pkl Você pode obter um relatório completo com o comando --full , em seguida, todos os padrões serão incluídos na saída:
$ aibolit recommend --folder src/java --full Você pode excluir arquivos com -comando --exclude . Você para definir padrões globais para ignorar:
$ aibolit recommend --folder src/java --exclude= ** / * Test * .java --exclude= ** / * Impl * .javaSe precisar de ajuda, corra
$ aibolit recommend --help O comando Train faz o seguinte:
O trem funciona apenas com o repositório Git clonado.
CLONE AIBOLIT Repositório
Vá para cloned_aibolit_path
Execute pip install .
Definir Env Variable export HOME_AIBOLIT=cloned_aibolit_path (exemplo para linux).
Defina o Env variable TARGET_FOLDER se precisar salvar todos os arquivos do conjunto de dados em outro diretório.
Você precisa especificar o conjunto de dados de trem e teste: defina a variável de ambiente HOME_TRAIN_DATASET para o conjunto de dados de trem e a variável de ambiente HOME_TEST_DATASET para o conjunto de dados de teste. Geralmente, esses arquivos estão no diretório scripts/target/08 após a coleção do conjunto de dados (se você não o ignorou). Mas você pode usar seus próprios conjuntos de dados.
Observe que, se você definir TARGET_FOLDER , seus arquivos de conjunto de dados estarão no TARGET_FOLDER/target . É por isso que é necessário definir home_train_dataSet = TARGET_FOLDER Target 08 08-Train.csv, home_test_dataset = TARGET_FOLDER Target 08 08-test.csv
Se você precisar configurar o próprio diretório em que o modelo será salvo, configure também SAVE_MODEL_FOLDER Ambiente. Caso contrário, o modelo será salvo em cloned_aibolit_path/aibolit/binary_files/model.pkl
Se você precisar configurar a própria pasta com arquivos Java, use --java_folder parameter , o valor padrão será scripts/target/01 do repo clonado de Aibolit
Ou você pode usar nossa imagem do Docker (o link estará em breve)
Execute o pipeline de trem:
$ aibolit train --java_folder=src/java [--max_classes = 100] [--dataset_file] Se você precisar salvar o conjunto de dados com todas as métricas calculadas em um diretório diferente, você precisa usar o parâmetro dataset_file
$ aibolit train --java_folder=src/java --dataset_file /mnt/d/new_dir/dataset.csv Você pode pular a coleção do conjunto de dados com o parâmetro skip_collect_dataset . Nesse caso, o modelo será treinado com conjunto de dados predefinido (consulte 5 pontos):
$ aibolit train --java_folder=src/java --skip_collect_datasetPrimeiro, você precisa instalar:
Instale os seguintes pacotes, se não tiver:
$ apt-get install ruby-dev libz-dev libxml2Em seguida, você bifurque o repositório e faz as alterações. Em seguida, você garante que a construção ainda esteja limpa, executando:
$ makePara construir papel branco:
$ cd wp
$ latexmk -c && latexmk -pdf wp.texSe estiver tudo bem, envie uma solicitação de tração.
Usando o Docker Recomendation Pipeline
$ docker run --rm -it
-v < absolute_path_to_folder_with_classes > :/in
-v < absolute_path_to_out_dir > :/out
cqfn/aibolit-image