Variáveis utilizadas

Variável Descrição
{r}lang Linguagem de Programação
{r}tests_per_kloc Qtde. testes por mil linhas de código
{r} team Qtde. colaboradores do projeto
{r} build_success_prop Proporção de Builds de sucesso

Características a explorar

Vamos analisar melhor a pergunta 01 do Relatório 4 - Lab1: Ao comparar projetos em Java e em Ruby, projetos de quais linguagens tem mais testes? Para isso vamos analisar a distribuição da variável {r}travis$tests_per_kloc de diferentes formas para escolher a melhor visualização para responder nossa pergunta.

Inicialmente apresentaremos 03 Gráficos apenas para contextualizar a análise desse relatório. Depois introduziremos gráficos com três variáveis e por fim com quatro variáveis. Serão apresentados gráficos com marcas de pontos e barras.

Visualização 01

Analisar inicialmente uma distribuição simples da variável {r}tests_per_kloc

travis %>% 
  ggplot(aes(x = "Testes", y = tests_per_kloc)) + 
  geom_point(size = 2, alpha = .6)  + labs(y= "Quantidade", x="Testes por kloc", title="Figura 1 - Distribuição da variável tests_per_kloc")

Visualização 02

Analisar a variável {r}tests_per_kloc, considerando como chave a liguagem de programação (variável {r}lang) com marca de pontos.

ggplot(data = travis) + 
    geom_point(mapping = aes(x = lang, y = tests_per_kloc)) + labs(y= "Testes por kloc", x="Linguagem de Programação", title="Figura 2 - Distribuição da variável tests_per_kloc por linguagem (pontos)")

Visualização 03

Analisar a variável {r}tests_per_kloc, considerando como chave a liguagem de programação (variável {r}lang) com contagem de pontos.

travis %>% 
  ggplot(aes(x = lang, y = tests_per_kloc)) + 
  geom_count() +  scale_y_log10() +  labs(y= "Quantidade de Testes por kloc", x="Linguagem de Programação", title="Figura 3 - Distribuição da variável tests_per_kloc por Linguagem (contagem)")   
## Warning: Transformation introduced infinite values in continuous y-axis
## Warning: Removed 74 rows containing non-finite values (stat_sum).

Conclusão: Na Figura 01 podemos observar que a maioria dos projetos tem um valor de testes por kloc (Variável: {r}tests_per_kloc) no intervalo de 0-1000 testes. Mas não é possível qualquer análise distinguindo as linguagens (Variável: {r}lang). Continuando com a marca “pontos” na Figura 02 podemos ver a distribuição dos valores dos testes para cada linguagem, embora seja possível concluir que Ruby possui mais ocorrências, não é conclusivo a análise que projetos dessa linguagem fazem mais testes, uma vez que outra variáveis podem estar influenciando a comparação, como: quantidade de projetos, tamanho dos projetos, tamanho das equipes, etc. A Figura 03 apresenta os mesmos dados da visualização anterior, mas fornece uma contagem dos pontos, torna possível observar que em Ruby tem mais situações onde o número de projetos repetem o mesmo valor de testes por kloc. Com as informações destes gráficos nossa análise não é conclusiva.

As próximas visualizações apresentam mais variáveis nos gráficos para melhor justificativas.

Visualização 04

Vamos adicionar uma característica em nossas análises, além dos testes por kloc (Variável: {r}tests_per_kloc) e linguagem de programação (Variável: {r}lang), analisar o comportamento do tamanho dos times (Variável: {r}team) nesse contexto.

ggplot(data = travis) + 
    geom_point(mapping = aes(x = tests_per_kloc, y = team, color = lang))  +  scale_x_log10() +  scale_y_log10() +  labs(y= "Tamanho do time", x="Quantidade de Testes por kloc", title="Figura 4 - Análise das variáveis tests_per_kloc e team para as duas linguagens")   
## Warning: Transformation introduced infinite values in continuous x-axis
## Warning: Transformation introduced infinite values in continuous y-axis

Visualização 05:

Agora vamos inverter os eixos, colocando testes por kloc (Variável: {r}tests_per_kloc) no eixo Y e tamanho do time (Variável: {r}team) no eixo X.

ggplot(data = travis) + 
    geom_point(mapping = aes(x = team, y = tests_per_kloc, color = lang))  +  scale_x_log10() +  scale_y_log10() +  labs(y= "Quantidade de Testes por kloc", x="Tamanho do time", title="Figura 5 - Análise das variáveis tests_per_kloc e team para as duas linguagens")   
## Warning: Transformation introduced infinite values in continuous x-axis
## Warning: Transformation introduced infinite values in continuous y-axis

Visualização 06:

Por fim, vamos colocar as linguagens no eixo X e tests por kloc no eixo Y. Para melhor visualizar, vamos considerar o canal espaço no lugar de cores.

ggplot(data = travis) + 
    geom_point(mapping = aes(x = lang, y = tests_per_kloc, size = team))   +  scale_y_log10() +  labs(y= "Quantidade de Testes por kloc", x="Liguagem de programação", title="Figura 6 - Análise das variáveis tests_per_kloc e team para as duas linguagens")   
## Warning: Transformation introduced infinite values in continuous y-axis

COnclusão: Nas Figura 04 e 05 podemos observar uma quantidade significativamente maior de pontos azuis (Linguagem Ruby) nas observações onde temos mais testes por kloc, podemos observar também que essa inferência ocorre independente do tamanho do time do projeto. Por fim, na Figura 06 plotando as três variáveis, mas agora com a linguagem no eixo X, podemos verificar que Ruby possui mais projetos com times grandes (com mais de 50 membros), mas que de forma geral independente do tamanho do time, os projetos com Ruby fazem mais testes.

Visualização 07:

Até o momento fizemos nossa análises apenas com a marca “pontos”, vamos agora fazer uma gráfico usando a marca “barra”. Para facilitar a análise, criamos grupos para representar os tamanhos dos times dos projetos.

ggplot(data=travis, aes(x=lang, y=tests_per_kloc, fill=cut(team, breaks=10))) +   geom_bar(stat="identity", position=position_dodge()) +  labs(y= "Quantidade de Testes por kloc", x="Liguagem de programação", title="Figura 7 - Análise das variáveis tests_per_kloc e team para as duas linguagens")  

Podemos observar na Figura 07, que projetos com liguagem Java tem mais testes apenas em uma faixa de tamanho de equipes (até 21 membros) em todas as demais, projetos com Ruby tem mias testes.

Por fim, verificar gráficos com 04 variáveis. Adicionando a variável {r} build_success_prop e analisar seu impacto nos projetos no que tange a quantidade de testes, tamanho dos times, para as duas linguagens.

Visualização 08:

travis %>%
    ggplot(aes(x = team, y = tests_per_kloc)) +
    geom_point(aes(col = cut(travis$build_success_prop, breaks = c(0, 0.2, 0.4, 0.6, 0.8, 1)))) +
    scale_y_log10() + 
    facet_grid(. ~ lang) +
    labs(x="Tamanho dos times",
         y="Número de testes por kloc (log10)", 
         title="Figura 8 - Análise de total de builds com testes e tamanho dos times") +
    scale_color_discrete(name = "Proporção Builds sucesso")
## Warning: Transformation introduced infinite values in continuous y-axis

Visualização 09:

travis %>% 
    group_by(lang) %>% 
    ggplot(aes(x = tests_per_kloc, y = build_success_prop, shape=lang, size=team)) + 
    geom_jitter(color="red") +
    scale_x_log10() + labs(x="Número de testes por kloc",
         y="Proporção sucesso dos builds", 
         title="Figura 9 - Análise da proporção de builds com testes e tamanho dos times")
## Warning: Transformation introduced infinite values in continuous x-axis

Visualização 10:

travis %>% 
    group_by(lang) %>% 
    ggplot(aes(x = lang, y = build_success_prop, size = team, alpha = tests_per_kloc)) +     geom_jitter() + labs(x="Linguagem",
         y="Proporção sucesso dos builds", 
         title="Figura 10 - Análise da proporção de builds com testes e tamanho dos times")

As figuras 8,9 e 10 trazem o comportamento das variáveis tratadas anteriormente (Linguagem de Programação, Quantidade de testes por kloc e Tamanho dos times), somados a variável referente a proporção de sucesso dos builds. O que podeos observar, que a adição dessa quarta variável não trouxe novas conclusões as análises anteriores. A Linguagem Ruby tem mais testes, independente do tamanho do time. A informação sobre o número os builds não muda o entendimento.

Análise final

Nos gráficos deste relatório conseguimos ter mais insumos para nossa análise na Figura 07.