• Nenhum resultado encontrado

Para esta tarefa de predição foram utilizadas as mesmas métricas e conjunto de algoritmos da predição de bugs de código. As simulações dos modelos anteriores serviram como expertise para construção do(s) modelo(s) de predição para os bugs funcionais. O processo de extração e análise dos dados é mostra na Figura 5.1.

Figura 5.1: Processo de extração e análise dos dados para bugs funcionais

Com relação aos erros reportados pela equipe, e de acordo com a Figura 5.1 na etapa 39

(a) tem-se o levantamento dos dados históricos de bugs de sistema, bem como as versões do sistema a serem utilizadas. Em (b) a extração das métricas de código pelo SQ. A etapa (c) consiste na tarefa de rastreabilidade dos bugs e tem o intuito de determinar os defeitos de sistema reportados pelo time. Foi realizada, então, a ligação do erro a uma ou mais classes Java do sistema. São os bug funcionais. Assim, cada classe modificada devido à correção do erro recebeu um rótulo bug. Percebeu-se que parte dos erros cadastrados estavam ligados apenas a uma classe do sistema, mas existiam ainda situações que um bug reportando e corrigido alterava mais de uma classe. Diante disso, em nosso mapeamento, o rótulo bug foi atribuído a uma ou mais classes Java que tenham sido alteradas devido à correção do erro reportado pelo time.

Na fase de pré-processamento (d), de forma equivalente a predição de bugs de código, também foi realizada uma limpeza dos dados extraídos e retirada de possíveis dependências.

As etapas seguintes (e, f e g) seguiram de forma análoga os mesmos procedimentos realiza-dos nas etapas do capítulo 4. Porém, a tarefa foi modificada no aspecto que o objetivo, neste momento, é prever os erros funcionais. Ou seja, a classificação das instâncias deveria ser realizada em apenas duas classes: com erros e sem erros.

Figura 5.2: Distribuição das instâncias nas bases de treinamento e testes para as duas classes possui e não possui bugFuncional mostrando o alto nível de desbalanceamento com total de instâncias

Diferentemente do que ocorre com a predição dos bugs do SQ, o uso de uma base desba-lanceada 5.2 não retorna uma boa predição, como mostrado na Tabela 5.1. As seis primeiras versões (2-12-0 até 2-17-0) foram utilizadas para compor a base de treinamento, sendo que

5.1 Abordagem das Simulações para Bugs Funcionais 41

apenas os dados duplicados foram retirados. Deste modo foram usadas 6070 instâncias, das quais 86 possuíam bugs funcionais. As duas últimas versões (2-18-0 e 2-19-0) foram utiliza-das para compor a base de testes, também com a retirada dos dados duplicados. Neste caso tivemos um total de 5369 instâncias, das quais 22 possuíam bugs funcionais. De acordo com a Tabela 5.1, alguns preditores (J48, OneR e Ibk) não foram capazes de fazer uma predição mínima na base de teste proposta. Ou seja, parte dos algoritmos erraram todas as instâncias da classe minoritária.

Tabela 5.1: Resultados da execução dos algoritmos de predição para as duas últimas versões do sistema usando o total de instâncias – Bugs Funcionais

J48 OneR Ibk(5) RNA NB

CC 99,59% 99,59% 99,57% 99,51% 95,66%

MAE 0,0181 0,0041 0,0165 0,0187 0,0439

RMSE 0,0647 0,0640 0,0809 0,0704 0,2033

TPR 0 1,0000 1,0000 1,0000 0,9999 0,9590 TPR 1 0,0000 0,0000 0,0000 0,1360 0,364 MPTPR 0,9960 0,9960 0,9960 0,9950 0,957 MATPR 0,5000 0,5000 0,5000 0,5679 0,6615

CC: Instâncias Classificadas Corretamente, MAE: Erro Médio Absoluto, RMSE: Erro Quadrático Médio, TPR 0: Taxa de Verdadeiros Positivos para a Classe Sem Bugs, TPR 1: Taxa de Verdadeiros Positivos para a Classe Com Bugs, MPTPR: Média Ponderada da Taxa de Verdadeiros Positivos, MATPR: Média Aritmética da Taxa de Verdadeiros Positivos

Para corrigir este problema, abordamos a mesma técnica utilizada no modelo de clas-sificação utilizado na predição de bugs de código (SQ) de forma que apenas as instâncias classificadas nas classes b e c (as quais podem ou não ter bugs funcionais) e as instâncias que possuem bugs funcionais (mas não pertencem às classes b e c) serão utilizadas no treina-mento de um modelo para a previsão de bugs funcionais. Note que se o objetivo da simulação anterior fosse apenas indicar se a instância não possui (classe a) ou possui (classe b e c) erro, ou seja, a classe b e c fossem unidas, o classificador OneR teriam uma acurácia máxima.

Para avaliarmos esta abordagem, fixamos os números de instâncias com bugs funcionais na base de treinamento (86) e na base de testes (22) e realizamos simulações (Tabela 5.2) apenas com instâncias que possuíam bugs de código. Assim todas nossas instâncias apresentam ao menos um tipo de erro, bug de código ou funcional, ou ainda, ambos.

Tabela 5.2: Número de instâncias com bugs de código na base de treinamento e de testes para a execução das simulações de previsão de bugs funcionais. Os resultados para cada combinação se encontram nas tabelas de 5.3 a 5.8

Tabela com os resultados das simulações

5.3 5.4 5.5 5.6 5.7 5.8

Treinamento 534 381 300 250 200 100

Teste 472 337 300 250 200 100

A primeira simulação indicado na Tabela 5.2 utiliza o maior número de instâncias com bugs de código nas bases de treinamento e testes (534/472). O resultado é mostrado na Tabela 5.3. As demais simulações, respectivamente, fazem uma seleção aleatória das instân-cias (undersampling) de modo a se obter cada vez mais um número próximo a um melhor balanceamento. O objetivo é verificar se a questão do balanceamento tem uma conotação significante neste cenário, onde apenas instâncias com bugs são utilizadas. Os resultados são mostrados da Tabela 5.4 a 5.8.

Tabela 5.3: Resultados da execução dos algoritmos de predição, simulação (534/472) – Bugs Funcionais

J48 OneR Ibk(5) RNA NB

CC 95,55% 98,18% 95,55% 97,17% 71,66%

MAE 0,1691 0,0182 0,1073 0,3390 0,3244

RMSE 0,2259 0,1350 0,2250 0,1555 0,4720

TPR 0 1,0000 1,0000 0,9960 0,9890 0,7330 TPR 1 0,0000 0,5910 0,0910 0,5910 0,3640 MPTPR 0,9550 0,9820 0,9550 0,9720 0,7170 MATPR 0,5000 0,7955 0,5435 0,7900 0,5480

CC: Instâncias Classificadas Corretamente, MAE: Erro Médio Absoluto, RMSE: Erro Quadrático Médio, TPR 0: Taxa de Verdadeiros Positivos para a Classe Sem Bugs, TPR 1: Taxa de Verdadeiros Positivos para a Classe Com Bugs, MPTPR: Média Ponderada da Taxa de Verdadeiros Positivos, MATPR: Média Aritmética da Taxa de Verdadeiros Positivos

5.1 Abordagem das Simulações para Bugs Funcionais 43

Tabela 5.4: Resultados da execução dos algoritmos de predição, simulação (381/337) – Bugs Funcionais

J48 OneR Ibk(5) RNA NB

CC 91,36% 97,49% 92,76% 90,81% 82,17%

MAE 0,2167 0,0251 0,1438 0,1164 0,2179

RMSE 0,2835 0,1583 0,2690 0,2639 0,4098

TPR 0 0,9670 1,0000 0,9790 0,9290 0,8580 TPR 1 0,0910 0,5910 0,1360 0,5910 0,2730 MPTPR 0,9140 0,9750 0,9280 0,9080 0,8220 MATPR 0,5290 0,7955 0,5575 0,7600 0,5650

CC: Instâncias Classificadas Corretamente, MAE: Erro Médio Absoluto, RMSE: Erro Quadrático Médio, TPR 0: Taxa de Verdadeiros Positivos para a Classe Sem Bugs, TPR 1: Taxa de Verdadeiros Positivos para a Classe Com Bugs, MPTPR: Média Ponderada da Taxa de Verdadeiros Positivos, MATPR: Média Aritmética da Taxa de Verdadeiros Positivos

Tabela 5.5: Resultados da execução dos algoritmos de predição, simulação (300/300) – Bugs Funcionais

J48 OneR Ibk(5) RNA NB

CC 90,68% 97,21% 91,93% 94,41% 69,56%

MAE 0,2329 0,0280 0,1507 0,0836 0,3686

RMSE 0,2969 0,1672 0,2796 0,2209 0,4984

TPR 0 0,9600 1,0000 0,9770 0,9670 0,7130 TPR 1 0,1820 0,5910 0,1360 0,6360 0,4550 MPTPR 0,9070 0,9720 0,9190 0,9440 0,6960 MATPR 0,5710 0,7955 0,5565 0,8015 0,5840

CC: Instâncias Classificadas Corretamente, MAE: Erro Médio Absoluto, RMSE: Erro Quadrático Médio, TPR 0: Taxa de Verdadeiros Positivos para a Classe Sem Bugs, TPR 1: Taxa de Verdadeiros Positivos para a Classe Com Bugs, MPTPR: Média Ponderada da Taxa de Verdadeiros Positivos, MATPR: Média Aritmética da Taxa de Verdadeiros Positivos

Tabela 5.6: Resultados da execução dos algoritmos de predição, simulação (250/250) – Bugs Funcionais

J48 OneR Ibk(5) RNA NB

CC 86,76% 96,69% 90,81% 90,81% 83,82%

MAE 0,2219 0,0331 0,1789 0,0939 0,1745

RMSE 0,3540 0,1819 0,2970 0,2764 0,3958

TPR 0 0,9240 1,0000 0,9720 0,9240 0,8840 TPR 1 0,2270 0,5910 0,1820 0,7270 0,3180 MPTPR 0,8680 0,9670 0,9080 0,9080 0,8380 MATPR 0,5755 0,7955 0,5770 0,8255 0,6010

CC: Instâncias Classificadas Corretamente, MAE: Erro Médio Absoluto, RMSE: Erro Quadrático Médio, TPR 0: Taxa de Verdadeiros Positivos para a Classe Sem Bugs, TPR 1: Taxa de Verdadeiros Positivos para a Classe Com Bugs, MPTPR: Média Ponderada da Taxa de Verdadeiros Positivos, MATPR: Média Aritmética da Taxa de Verdadeiros Positivos

Tabela 5.7: Resultados da execução dos algoritmos de predição, simulação (200/200) – Bugs Funcionais

J48 OneR Ibk(5) RNA NB

CC 88,74% 95,95% 81,08% 84,68% 81,53%

MAE 0,2874 0,0405 0,2351 0,1581 0,2003

RMSE 0,3477 0,2013 0,354 0,3521 0,4268

TPR 0 0,950 1,000 0,880 0,8600 0,8700

TPR 1 0,318 0,591 0,182 0,7270 0,3180

MPTPR 0,887 0,959 0,811 0,8470 0,8150

MATPR 0,634 0,7955 0,531 0,7935 0,5940

CC: Instâncias Classificadas Corretamente, MAE: Erro Médio Absoluto, RMSE: Erro Quadrático Médio, TPR 0: Taxa de Verdadeiros Positivos para a Classe Sem Bugs, TPR 1: Taxa de Verdadeiros Positivos para a Classe Com Bugs, MPTPR: Média Ponderada da Taxa de Verdadeiros Positivos, MATPR: Média Aritmética da Taxa de Verdadeiros Positivos

5.1 Abordagem das Simulações para Bugs Funcionais 45

Tabela 5.8: Resultados da execução dos algoritmos de predição, simulação (100/100) – Bugs Funcionais

J48 OneR Ibk(5) RNA NB

CC 64,75% 92,62% 69,67% 78,69% 69,67%

MAE 0,3761 0,0738 0,3184 0,2312 0,3067

RMSE 0,4984 0,2716 0,4456 0,4247 0,5160

TPR 0 0,6600 1,0000 0,7800 0,8000 0,7800 TPR 1 0,5910 0,5910 0,3180 0,7270 0,3180 MPTPR 0,6480 0,9260 0,6970 0,7870 0,6970 MATPR 0,6255 0,7955 0,5490 0,7635 0,5490

CC: Instâncias Classificadas Corretamente, MAE: Erro Médio Absoluto, RMSE: Erro Quadrático Médio, TPR 0: Taxa de Verdadeiros Positivos para a Classe Sem Bugs, TPR 1: Taxa de Verdadeiros Positivos para a Classe Com Bugs, MPTPR: Média Ponderada da Taxa de Verdadeiros Positivos, MATPR: Média Aritmética da Taxa de Verdadeiros Positivos

5.1.1 Discussão das Simulações para Bugs Funcionais

Como mostrado na Tabela 5.1, a alta porcentagem de acurácia dos algoritmos não reflete a real eficiência de tais abordagens, uma vez que o TPR das classes minoritárias são extre-mamente baixos. Para a predição, então, escolhemos novamente a opção de criar uma base que contém apenas classes com uma alta probabilidade de conter bugs de código. A raci-onalidade desta abordagem vem do fato que desejamos exatamente prever quais instâncias possuem bugs funcionais e o modelo preditor anterior apresentou índice satisfatório. Então resolvemos aplicá-la a predição de bugs funcionais.

A Tabela 5.3 mostra que essa abordagem surte efeito, de modo que o TPR1 do algoritmo (OneR) salta de 0 para 0,591. Um detalhamento da execução deste algoritmo é apresentado na Figura 5.3, onde a Matriz de Confusão mostra que das 22 instâncias com bugs funcionais, o modelo classificou 13 corretamente e 9 de forma incorreta.

O próximo passo da pesquisa foi realizar simulações (Tabelas 5.4 a 5.8) para entender se a questão do balanceamento estava influenciando no TPR da classe minoritária. Porém, tais simulações indicam uma pequena influência do processo de balanceamento, principalmente para o algoritmo OneR, o qual permaneceu com o seu TPR da classe minoritária constante.

Deste modo, podemos destacar que conforme predição de bugs de código a Rede Neural e o algoritmo OneR foram as abordagens que apresentaram o melhor desempenho geral novamente nas simulações. E em relação ao OneR, esse fato é interessante porque o mesmo não é muito citado em trabalhos relacionados (ver capítulo 6). Ou seja, tal algoritmo não é bem explorado na literatura, a qual prioriza outras abordagens de aprendizagem de máquina.

Foi possível observar então que o processo de tornar a base de treinamento mais homogê-nea de fato aumenta a acurácia do modelo, tornando-o mais imune aos problemas enfrentados pelo desbalanceamento dos dados.

É difícil comparar a abordagem com outras indicadas na literatura, uma vez que valores de TPR ou a Matriz de Confusão não são geralmente mostrados. Desta forma, a acurácia total (CC) é o principal parâmetro utilizado pelas pesquisas, sendo que o mesmo não reflete de fato a eficiência da abordagem. O capítulo seis irá trazer uma reflexão sobre este ponto com exemplos práticos da literatura. Mais detalhes sobre a questão de replicações das simulações e uso correto de métricas para a qualificação de preditores no domínio da engenharia de software podem ser encontrados em (SIEBRA; MELLO, 2015).

Figura 5.3: Execução do algoritmo OneR para predição de bugs funcionais. Detalhamento da simulação da Tabela 5.3

5.2 Uso de Predição Para Recomendação de Priorização de Bugs Funcionais 47

5.2 Uso de Predição Para Recomendação de Priorização de

Documentos relacionados