No campo da engenharia de software, a análise da qualidade do código é fundamental para assegurar a eficácia e a eficiência dos projetos desenvolvidos. Este estudo foi concebido para explorar a relação entre o número de bugs reportados, a cobertura de código e a qualidade percebida do código, com um foco específico em projetos de software mobile. Dada a crescente importância e complexidade das aplicações móveis, compreender como esses fatores se relacionam é vital para garantir que os aplicativos atendam às rigorosas expectativas de desempenho e usabilidade dos usuários. A análise aprofundada desses elementos pode oferecer insights valiosos para desenvolvedores e gestores de projeto, contribuindo para a melhoria contínua da qualidade e confiabilidade das aplicações móveis.
Neste contexto, dados foram coletados sobre a cobertura de código e o número de bugs reportados em um projeto de desenvolvimento mobile. Avaliar a eficiência dos testes automatizados e entender como a qualidade do código está relacionada com a incidência de bugs são aspectos cruciais deste estudo. A investigação desses parâmetros permitirá uma compreensão mais clara da eficácia dos testes e da relação entre a qualidade do código e a ocorrência de falhas, fornecendo subsídios importantes para aprimorar as práticas de desenvolvimento e assegurar a robustez dos aplicativos móveis.
O objetivo deste estudo é analisar a relação entre a cobertura de código e o número de bugs reportados em projetos Mobiles. Além disso, buscamos entender como a qualidade do código é percebida em projetos com diferentes níveis de bugs e cobertura de código.
Coleta de Dados: Os dados foram coletados de diversos projetos de
software desenvolvidos em diferentes ambientes (Web, Mobile, Desktop).
Para cada projeto, foram registrados o número de bugs reportados, a
cobertura de código obtida através de testes automatizados, o tipo de
projeto e a avaliação da qualidade do código.
Análise Descritiva: Será realizada uma análise descritiva para
entender a distribuição das variáveis e identificar padrões iniciais nos
dados.
Análise Inferencial: Serão aplicadas técnicas estatísticas para investigar as relações entre as variáveis quantitativas (bugs reportados e cobertura de código) e qualitativas (tipo de projeto e qualidade do código).
library(ggplot2)
library(dplyr)
library(readr)
library(tidyr)
library(knitr)
library(fdth)
library(kableExtra)
library(moments)Esses pacotes são essenciais para manipulação de dados (dplyr, readr, tidyr), visualização de dados (ggplot2), geração de tabelas (knitr, kableExtra), cálculos estatísticos (fdth, moments).
## Rows: 100
## Columns: 5
## $ ID <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,…
## $ Bugs.Reportados <int> 37, 12, 72, 9, 75, 5, 79, 64, 16, 1, 76, 71, 6…
## $ Cobertura.de.Codigo.... <dbl> 77.03, 88.27, 52.27, 57.00, 89.62, 51.49, 94.1…
## $ Tipo.de.Projeto <chr> "Web", "Mobile", "Desktop", "Desktop", "Mobile…
## $ Qualidade.do.Codigo <chr> "Excelente", "Ruim", "Regular", "Excelente", "…
Carrega o conjunto de dados a partir de um arquivo CSV e exibe uma visão geral dos dados para garantir que foram carregados corretamente.
## Rows: 27
## Columns: 5
## $ ID <int> 2, 5, 6, 14, 20, 21, 25, 27, 29, 36, 41, 47, 5…
## $ Bugs.Reportados <int> 12, 75, 5, 25, 28, 29, 87, 94, 86, 57, 8, 71, …
## $ Cobertura.de.Codigo.... <dbl> 88.27, 89.62, 51.49, 68.06, 67.70, 88.16, 50.5…
## $ Tipo.de.Projeto <chr> "Mobile", "Mobile", "Mobile", "Mobile", "Mobil…
## $ Qualidade.do.Codigo <chr> "Ruim", "Ruim", "Regular", "Ruim", "Regular", …
Filtra os dados para incluir apenas projetos mobile, permitindo focar na análise específica desses projetos.
| ID | Bugs Reportados | Cobertura de Código | Tipo de Projetos | Qualidade do Código |
|---|---|---|---|---|
| 2 | 12 | 88.27 | Mobile | Ruim |
| 5 | 75 | 89.62 | Mobile | Ruim |
| 6 | 5 | 51.49 | Mobile | Regular |
| 14 | 25 | 68.06 | Mobile | Ruim |
| 20 | 28 | 67.70 | Mobile | Regular |
| 21 | 29 | 88.16 | Mobile | Ruim |
| 25 | 87 | 50.58 | Mobile | Boa |
| 27 | 94 | 53.69 | Mobile | Boa |
| 29 | 86 | 53.20 | Mobile | Boa |
| 36 | 57 | 88.64 | Mobile | Excelente |
| 41 | 8 | 73.53 | Mobile | Regular |
| 47 | 71 | 53.50 | Mobile | Regular |
| 57 | 76 | 58.61 | Mobile | Regular |
| 58 | 26 | 69.82 | Mobile | Ruim |
| 59 | 52 | 55.37 | Mobile | Boa |
| 61 | 41 | 55.11 | Mobile | Boa |
| 63 | 15 | 61.59 | Mobile | Excelente |
| 66 | 25 | 61.68 | Mobile | Boa |
| 68 | 87 | 78.50 | Mobile | Ruim |
| 76 | 27 | 87.59 | Mobile | Boa |
| 81 | 8 | 96.86 | Mobile | Ruim |
| 82 | 32 | 95.82 | Mobile | Regular |
| 84 | 10 | 80.82 | Mobile | Regular |
| 87 | 87 | 56.49 | Mobile | Regular |
| 88 | 25 | 64.72 | Mobile | Ruim |
| 90 | 92 | 63.73 | Mobile | Excelente |
| 91 | 74 | 53.70 | Mobile | Boa |
Exibindo os 27 registros dos dados referente a projetos mobiles.
| Boa | Excelente | Regular | Ruim | |
|---|---|---|---|---|
| Mobile | 8 | 3 | 8 | 8 |
Tabela de frequência cruzada entre o tipo de projeto e a qualidade do código, identificando a distribuição da qualidade do código nos projetos mobile.
##
## The decimal point is 1 digit(s) to the right of the |
##
## 0 | 588
## 1 | 02
## 1 | 5
## 2 |
## 2 | 5556789
## 3 | 2
## 3 |
## 4 | 1
## 4 |
## 5 | 2
## 5 | 7
## 6 |
## 6 |
## 7 | 14
## 7 | 56
## 8 |
## 8 | 6777
## 9 | 24
Diagrama de ramo e folha para os Bugs Reportados, visualizando a distribuição dos dados.
tdf_bugs <- fdt(bugs_reportados,
breaks = 'Sturges')
options(digits = 3)
kable(head(tdf_bugs, length(1)), col.names = c("Limites de Classe", "Freq Absoluta", "Freq Relativa", "Freq Relativa (%)", "Freq Acumulada", "Freq Acumulada (%)"))
|
Tabela de distribuição de frequência para os bugs reportados, mostrando a frequência absoluta, relativa e acumulada.
Média, Moda, Mediana
media_bugs <- mean(bugs_reportados)
moda_bugs <- as.numeric(names(sort(table(dados_mobile$Bugs.Reportados), decreasing = TRUE)[1]))
mediana_bugs <- median(bugs_reportados)Calculo da média, moda e mediana dos bugs reportados, fornecendo uma visão geral das tendências centrais dos dados.
Média = 46.444
Moda = 25
Mediana = 32
Variância, Desvio Padrão, Coeficiente de Variabilidade
var_bugs <- var(bugs_reportados)
dp_bugs <- sd(bugs_reportados)
cv_bugs <- (dp_bugs / media_bugs) * 100Calcula a variância, desvio padrão e coeficiente de variação, que medem a dispersão dos dados.
Variância = 971.718
Desvio Padrão = 31.172
Coeficiente de
Variação =67.118
Tabela Geral com os dados
| Media | Mediana | Moda | Min | Max | Amplitude | Var | DP | CV(%) |
|---|---|---|---|---|---|---|---|---|
| 46.44 | 32 | 25 | 5 | 94 | 89 | 971.7 | 31.17 | 67.12 |
Calcula o coeficiente de assimetria, indicando a simetria da distribuição dos bugs reportados. O coeficente de assimetria é igual a *0.2392 o que mostra uma curva assimetrica à direita ou postiva.
##
## The decimal point is at the |
##
## 50 | 65
## 52 | 2577
## 54 | 14
## 56 | 5
## 58 | 6
## 60 | 67
## 62 | 7
## 64 | 7
## 66 | 7
## 68 | 18
## 70 |
## 72 | 5
## 74 |
## 76 |
## 78 | 5
## 80 | 8
## 82 |
## 84 |
## 86 | 6
## 88 | 2366
## 90 |
## 92 |
## 94 | 8
## 96 | 9
Diagrama de ramo e folha para a cobertura de código, visualizando a distribuição dos dados.
tdf_cobertura <- fdt(cobertura_codigos,
breaks = 'Sturges')
options(digits = 3)
kable(head(tdf_cobertura, length(1)), col.names = c("Limites de Classe", "Freq Absoluta", "Freq Relativa", "Freq Relativa (%)", "Freq Acumulada", "Freq Acumulada (%)"))
|
Tabela de distribuição de frequência para a cobertura de código.
Média, Moda, Mediana
media_cobert <- mean(cobertura_codigos)
moda_cobert <- as.numeric(names(sort(table(dados_mobile$Cobertura.de.Codigo....), decreasing = TRUE)[1]))
mediana_cobert <- median(cobertura_codigos)Calcula a média, moda e mediana da cobertura de código.
Média = 69.143
Moda = 50.58
Mediana = 64.72
Variância, Desvio Padrão, Coeficiente de Variabilidade
var_cobert <- var(cobertura_codigos)
dp_cobert <- sd(cobertura_codigos)
cv_cobert <- (dp_cobert / media_cobert) * 100Calcula a variância, desvio padrão e coeficiente de variação para a cobertura de código.
Variância = 232.524
Desvio Padrão = 15.249
Coeficiente de
Variação =22.054
Tabela Geral com os dados
| Média | Mediana | Moda | Min | Max | Amplitude | Var | DP | CV(%) |
|---|---|---|---|---|---|---|---|---|
| 69.14 | 64.72 | 50.58 | 50.58 | 96.86 | 46.28 | 232.5 | 15.25 | 22.05 |
Calcula o coeficiente de assimetria, indicando a simetria da distribuição dos bugs reportados. O coeficente de assimetria é igual a 0.4655 o que mostra uma curva assimetrica à direita ou postiva.
correlacao_mobile <- cor(dados_mobile$Cobertura.de.Codigo...., dados_mobile$Bugs.Reportados, use = "complete.obs")Calcula a correlação entre a cobertura de código e os bugs reportados, indicando a força e direção da relação entre essas variáveis. A correlação é igual a -0.4016.
Interpretação do Valor da Correlação
A correlação obtida foi igual a r correlacao_mobile. Isso pode ser interpretado da seguinte maneira:
Pela correlação ter um resultado negativo, fica entendido que à medida que a cobertura de código aumenta, o número de bugs reportados tende a diminuir.
Gráfico de dispersão com uma linha de tendência para visualizar a
correlação entre a cobertura de código e os bugs reportados.
Interpretação do Gráfico
Pontos de Dispersão: Os pontos representam pares de valores de cobertura de código e bugs reportados para diferentes projetos mobile.
Linha de Tendência: A linha de tendência, ajustada pelo método de regressão linear (lm), mostra a tendência geral dos dados.
Por ter uma inclinação negativa é possivel perceber que à medida que a cobertura de código aumenta, o número de bugs reportados tende a diminuir.
tabela_qualidade_bugs <- table(dados_mobile$Qualidade.do.Codigo, dados_mobile$Bugs.Reportados)
kable(tabela_qualidade_bugs) %>% kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed"))| 5 | 8 | 10 | 12 | 15 | 25 | 26 | 27 | 28 | 29 | 32 | 41 | 52 | 57 | 71 | 74 | 75 | 76 | 86 | 87 | 92 | 94 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Boa | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 |
| Excelente | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
| Regular | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 |
| Ruim | 0 | 1 | 0 | 1 | 0 | 2 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 |
Uma tabela de frequência cruzada foi criada para mostrar a distribuição conjunta da qualidade do código e do número de bugs reportados. Isso ajuda a visualizar como a qualidade do código se distribui em relação ao número de bugs reportados.
Um gráfico de boxplot foi criado para visualizar a relação entre a qualidade do código e o número de bugs reportados. Isso permite observar a distribuição dos bugs reportados para diferentes níveis de qualidade do código.
Interpretação do Gráfico de Boxplot
Observações da Tabela e do Boxplot
Implicações Práticas
Através da Análise Exploratória de dados (Diagrama de ramo e folhas, tabela de distruição de frequência, histograma), de Medidas de Tendência Central (média, moda e mediana), Medidas de Variabilidade (variância, desvio padrão, coeficiente de variação)e análise de Assimetria, foi possível realizar a mensuração da qualidade dos códigos e a incidência de bugs em um projeto de desenvolvimento Mobile. Essa mensuração, por sua vez, possibilitou conhecermos o nível de confiabilidade, eficiência e segurança dos códigos.
Em relação a cobertura de código e o número de bugs reportados há uma correlação negativa, indicando que testes automatizados são eficazes na detecção precoce de problemas por sua alta cobertura de código assegurar que mais partes do código serem verificadas, o que reduz a probabilidade de bugs passarem despercebidos.
Em relação a Análise da Relação entre Qualidade do Código e Bugs Reportados, foi observado que projetos com código de alta qualidade (classificados como “Excelente” ou “Boa”) têm menos bugs reportados em comparação com projetos com código de qualidade inferior (classificados como “Regular” ou “Ruim”). Isso sugere que a qualidade do código está diretamente relacionada à estabilidade e confiabilidade do software. Código de alta qualidade é mais fácil de manter e menos propenso a erros, o que resulta em menos bugs.
Para aumentar a cobertura de testes automatizados, é essencial implementar testes unitários, de integração e de sistema para cobrir mais partes do código, além de utilizar ferramentas de análise de cobertura de código para monitorar e aumentar a cobertura. Revisar e atualizar testes regularmente para cobrir novas funcionalidades e corrigir partes do código que podem não estar suficientemente testadas também é fundamental.
A qualidade do código pode ser aprimorada através de revisões de código sistemáticas para assegurar que os padrões de qualidade estão sendo seguidos. Práticas de revisão de código como pares e pull requests são eficazes para identificar e corrigir problemas de qualidade. Fornecer treinamento contínuo para desenvolvedores sobre práticas de codificação limpa e melhores práticas de desenvolvimento, bem como incentivar a adoção de padrões de codificação consistentes, ajuda a manter a qualidade do código. Utilizar ferramentas de análise estática para detectar problemas de qualidade do código antes que eles se tornem bugs e integrá-las no processo de desenvolvimento contínuo para monitoramento constante é altamente recomendável.
Para a eficiência dos testes automatizados, implementar testes de regressão automatizados para assegurar que novas mudanças no código não introduzam novos bugs é essencial. Ferramentas de integração contínua (CI) são úteis para executar testes automaticamente com cada nova alteração de código. Estabelecer ciclos de feedback rápido para que os desenvolvedores recebam feedback imediato sobre a qualidade do código e cobertura de testes, além de utilizar dashboards de qualidade para monitorar e visualizar métricas de qualidade em tempo real, são práticas recomendadas.
Para projetos futuros, recomenda-se uma análise de uma correlação entre o tamanho do projeto (medido em linhas de código ou número de funcionalidades), visto que projetos maiores podem apresentar desafios únicos em termos de manutenção da qualidade do código. Entender essa relação ajuda a identificar estratégias para gerenciar projetos grandes de forma eficaz. Por fim, se diferentes arquiteturas de software (por exemplo, MVC, MVVM, Clean Architecture) afetam a qualidade do código e a incidência de bugs em projetos Mobile influenciando sua modularidade, testabilidade e manutenibilidade do código e consequentemente impactando na qualidade do software.