Entendendo os dados

A pesquisa foi realizada durante aproximadamente 1 mês, entre 26/08/2019 e 02/10/2019, via formulário online do Google.

O arquivo csv com as respostas está disponível aqui: avaliacao_metodos_ageis.csv

A tabela com as todas as respostas é a seguinte:

glimpse(dados)
## Observations: 203
## Variables: 16
## $ trabalhou_agil <chr> "Sim", "Sim", "Sim", "Sim", "Sim", "Sim", "Sim", …
## $ anos_agil      <dbl> 3, 10, 1, 0, 8, 7, 2, 4, 2, 0, 5, 4, 5, 3, 3, 8, …
## $ papel_agil     <chr> "Membro do time de desenvolvimento", "PO - Produc…
## $ area_agil      <chr> "Área Comercial (de uma fábrica de software)", "Á…
## $ agil_a         <dbl> 3, 3, 3, 3, 4, 3, 5, 4, 2, 1, 5, 4, 3, 3, 3, 4, 2…
## $ agil_b         <dbl> 4, 5, 4, 4, 3, 3, 5, 5, 5, 4, 5, 3, 3, 4, 4, 4, 2…
## $ agil_c         <dbl> 1, 3, 4, 2, 2, 4, 4, 3, 3, 3, 2, 4, 2, 3, 4, 4, 3…
## $ agil_d         <dbl> 2, 3, 3, 4, 4, 4, 5, 3, 5, 3, 3, 3, 2, 3, 4, 4, 3…
## $ agil_e         <dbl> 5, 2, 3, 4, 4, 5, 4, 2, 2, 2, 3, 2, 3, 4, 4, 4, 2…
## $ agil_f         <chr> NA, "Garantir a visão de escopo global de projeto…
## $ gamificacao_a  <dbl> 4, 4, 3, 4, 4, 5, 3, 4, 3, 4, 3, 4, 5, 5, 4, 4, 4…
## $ gamificacao_b  <dbl> 3, 4, 4, 2, 4, 4, 3, 4, 5, 4, 2, 4, 4, 5, 4, 3, 4…
## $ gamificacao_c  <dbl> 1, 4, 3, 3, 4, 3, 5, 4, 2, 4, 2, 5, 4, 4, 4, 4, 3…
## $ gamificacao_d  <dbl> 3, 4, 4, 4, 4, 1, 3, 4, 3, 1, 2, 5, 2, 5, 4, 3, 3…
## $ gamificacao_e  <dbl> 5, 4, 4, 4, 4, 5, 3, 4, 2, 4, 2, 4, 3, 3, 3, 4, 3…
## $ gamificacao_f  <chr> NA, "Criar uma relação entre estimado e realizado…

Visto que a pesquisa visa a opinião de quem já trabalhou com metodologias ágeis, foi necessário isolar apenas esse grupo. A tabela apenas com os dados de quem já trabalhou com metodologias ágeis é a seguinte:

glimpse(dados_agil)
## Observations: 119
## Variables: 17
## $ trabalhou_agil   <chr> "Sim", "Sim", "Sim", "Sim", "Sim", "Sim", "Sim"…
## $ anos_agil        <dbl> 3, 10, 1, 0, 8, 7, 2, 4, 2, 0, 5, 4, 5, 3, 3, 8…
## $ papel_agil       <chr> "Membro do time de desenvolvimento", "PO - Prod…
## $ area_agil        <chr> "Área Comercial (de uma fábrica de software)", …
## $ agil_a           <dbl> 3, 3, 3, 3, 4, 3, 5, 4, 2, 1, 5, 4, 3, 3, 3, 4,…
## $ agil_b           <dbl> 4, 5, 4, 4, 3, 3, 5, 5, 5, 4, 5, 3, 3, 4, 4, 4,…
## $ agil_c           <dbl> 1, 3, 4, 2, 2, 4, 4, 3, 3, 3, 2, 4, 2, 3, 4, 4,…
## $ agil_d           <dbl> 2, 3, 3, 4, 4, 4, 5, 3, 5, 3, 3, 3, 2, 3, 4, 4,…
## $ agil_e           <dbl> 5, 2, 3, 4, 4, 5, 4, 2, 2, 2, 3, 2, 3, 4, 4, 4,…
## $ agil_f           <chr> NA, "Garantir a visão de escopo global de proje…
## $ gamificacao_a    <dbl> 4, 4, 3, 4, 4, 5, 3, 4, 3, 4, 3, 4, 5, 5, 4, 4,…
## $ gamificacao_b    <dbl> 3, 4, 4, 2, 4, 4, 3, 4, 5, 4, 2, 4, 4, 5, 4, 3,…
## $ gamificacao_c    <dbl> 1, 4, 3, 3, 4, 3, 5, 4, 2, 4, 2, 5, 4, 4, 4, 4,…
## $ gamificacao_d    <dbl> 3, 4, 4, 4, 4, 1, 3, 4, 3, 1, 2, 5, 2, 5, 4, 3,…
## $ gamificacao_e    <dbl> 5, 4, 4, 4, 4, 5, 3, 4, 2, 4, 2, 4, 3, 3, 3, 4,…
## $ gamificacao_f    <chr> NA, "Criar uma relação entre estimado e realiza…
## $ tipo_experiencia <chr> "menos experientes", "mais experientes", "menos…

Sumário de quem trabalhou com metodologias ágeis

Segue abaixo os dados sumarizados apenas de quem já trabalhou com metodologias ágeis:

summary(dados_agil)
##  trabalhou_agil       anos_agil       papel_agil         area_agil        
##  Length:119         Min.   : 0.000   Length:119         Length:119        
##  Class :character   1st Qu.: 1.000   Class :character   Class :character  
##  Mode  :character   Median : 3.000   Mode  :character   Mode  :character  
##                     Mean   : 3.013                                        
##                     3rd Qu.: 4.000                                        
##                     Max.   :10.000                                        
##      agil_a          agil_b          agil_c          agil_d     
##  Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :1.000  
##  1st Qu.:2.000   1st Qu.:3.000   1st Qu.:2.000   1st Qu.:2.000  
##  Median :3.000   Median :4.000   Median :3.000   Median :3.000  
##  Mean   :2.815   Mean   :3.563   Mean   :2.504   Mean   :3.118  
##  3rd Qu.:3.000   3rd Qu.:4.000   3rd Qu.:3.000   3rd Qu.:4.000  
##  Max.   :5.000   Max.   :5.000   Max.   :4.000   Max.   :5.000  
##      agil_e         agil_f          gamificacao_a   gamificacao_b  
##  Min.   :1.000   Length:119         Min.   :1.000   Min.   :1.000  
##  1st Qu.:2.000   Class :character   1st Qu.:3.000   1st Qu.:3.000  
##  Median :3.000   Mode  :character   Median :4.000   Median :4.000  
##  Mean   :3.193                      Mean   :3.345   Mean   :3.387  
##  3rd Qu.:4.000                      3rd Qu.:4.000   3rd Qu.:4.000  
##  Max.   :5.000                      Max.   :5.000   Max.   :5.000  
##  gamificacao_c   gamificacao_d   gamificacao_e  gamificacao_f     
##  Min.   :1.000   Min.   :1.000   Min.   :1.00   Length:119        
##  1st Qu.:2.000   1st Qu.:2.000   1st Qu.:3.00   Class :character  
##  Median :3.000   Median :3.000   Median :4.00   Mode  :character  
##  Mean   :2.966   Mean   :3.235   Mean   :3.58                     
##  3rd Qu.:4.000   3rd Qu.:4.000   3rd Qu.:4.00                     
##  Max.   :5.000   Max.   :5.000   Max.   :5.00                     
##  tipo_experiencia  
##  Length:119        
##  Class :character  
##  Mode  :character  
##                    
##                    
## 

Skim (olhada rápida nos dados) de quem trabalhou com metodologias ágeis

Uma olhada rápida na distribuição dos dados de quem trabalhou com metodologias ágeis:

# funcoes extras para skim
funs <- list(cv = function(x) sd(x, na.rm = TRUE) / mean(x, na.rm = TRUE))
variancia <- list(variancia = function(x) var(x))
moda <- list(moda = function(x) getModa2(x))
m_ajust <- list(m_ajust = function(x) mean(x) * var(x))

# append adiciona as suas funcoes nas existentes
skim_with(numeric = funs, append = TRUE)
skim_with(numeric = variancia, append = TRUE)
skim_with(numeric = moda, append = TRUE)
skim_with(numeric = m_ajust, append = TRUE)

# retirar histograma
skim_with(numeric = list(hist = NULL))

skimr::skim(dados_agil)
## Skim summary statistics
##  n obs: 119 
##  n variables: 17 
## 
## ── Variable type:character ───────────────────────────────────────────────────────────────────────────────────────
##          variable missing complete   n min max empty n_unique
##            agil_f     104       15 119  20 223     0       15
##         area_agil       0      119 119  24  68     0        3
##     gamificacao_f     116        3 119  47 117     0        3
##        papel_agil       0      119 119  17  70     0        7
##  tipo_experiencia       0      119 119  16  17     0        2
##    trabalhou_agil       0      119 119   3   3     0        1
## 
## ── Variable type:numeric ─────────────────────────────────────────────────────────────────────────────────────────
##       variable missing complete   n mean   sd p0 p25 p50 p75 p100   cv
##         agil_a       0      119 119 2.82 0.97  1   2   3   3    5 0.34
##         agil_b       0      119 119 3.56 1.04  1   3   4   4    5 0.29
##         agil_c       0      119 119 2.5  0.98  1   2   3   3    4 0.39
##         agil_d       0      119 119 3.12 0.98  1   2   3   4    5 0.31
##         agil_e       0      119 119 3.19 1.29  1   2   3   4    5 0.4 
##      anos_agil       0      119 119 3.01 2.29  0   1   3   4   10 0.76
##  gamificacao_a       0      119 119 3.34 1.16  1   3   4   4    5 0.35
##  gamificacao_b       0      119 119 3.39 1.15  1   3   4   4    5 0.34
##  gamificacao_c       0      119 119 2.97 1.31  1   2   3   4    5 0.44
##  gamificacao_d       0      119 119 3.24 1.11  1   2   3   4    5 0.34
##  gamificacao_e       0      119 119 3.58 1.15  1   3   4   4    5 0.32
##  variancia moda m_ajust
##       0.93    3    2.62
##       1.08    4    3.84
##       0.96    3    2.41
##       0.95    3    2.97
##       1.67    2    5.32
##       5.23    3   15.76
##       1.35    4    4.5 
##       1.32    4    4.48
##       1.73    4    5.12
##       1.23    4    3.99
##       1.33    4    4.76
# # Além destes dados, também pode-se calcular a MODA para cada uma das variaveis do tipo numeric:
# 
# # OUTRA FORMA
# paste("variavel     MODA")
# 
# #dados_agil$agil_a
# moda_agil_a = getModa(dados_agil$agil_a)
# paste("agil_a:        ", moda_agil_a)
# 
# #dados_agil$agil_b
# moda_agil_b = getModa(dados_agil$agil_b)
# paste("agil_b:        ", moda_agil_b)
# 
# #dados_agil$agil_c
# moda_agil_c = getModa(dados_agil$agil_c)
# paste("agil_c:        ", moda_agil_c)
# 
# #dados_agil$agil_d
# moda_agil_d = getModa(dados_agil$agil_d)
# paste("agil_d:        ", moda_agil_d)
# 
# #dados_agil$agil_e
# moda_agil_e = getModa(dados_agil$agil_e)
# paste("agil_e:        ", moda_agil_e)
# 
# #dados_agil$anos_agil
# moda_anos_agil = getModa(dados_agil$anos_agil)
# paste("anos_agil:     ", moda_anos_agil)
# 
# #dados_agil$gamificacao_a
# moda_gamificacao_a = getModa(dados_agil$gamificacao_a)
# paste("gamificacao_a: ", moda_gamificacao_a)
# 
# #dados_agil$gamificacao_b
# moda_gamificacao_b = getModa(dados_agil$gamificacao_b)
# paste("gamificacao_b: ", moda_gamificacao_b)
# 
# #dados_agil$gamificacao_c
# moda_gamificacao_c = getModa(dados_agil$gamificacao_c)
# paste("gamificacao_c: ", moda_gamificacao_c)
# 
# #dados_agil$gamificacao_d
# moda_gamificacao_d = getModa(dados_agil$gamificacao_d)
# paste("gamificacao_d: ", moda_gamificacao_d)
# 
# #dados_agil$gamificacao_e
# moda_gamificacao_e = getModa(dados_agil$gamificacao_e)
# paste("gamificacao_e: ", moda_gamificacao_e)

Total de respostas

Uma visão geral de todas as respostas com respeito à pergunta quem trabalhou ou não com metodologias ágeis:

dados %>% 
    count(trabalhou_agil) %>% 
    ggplot(aes(x = reorder(trabalhou_agil, n), y = n)) + 
    geom_col(width = .5, fill = "light blue") +
    geom_text(aes(label=n), vjust = -1) +
    #geom_point() + 
    #scale_x_continuous(breaks = seq(0,5,1)) + 
    scale_y_continuous(limits = c(0, 130),breaks = seq(0,130,4)) +
    labs(x = "Você já trabalhou em algum projeto de desenvolvimento de software utilizando metologias ágeis?", y = "")

# dados %>% 
#     count() %>%
#     ggplot(aes(x = "total", y=n)) +
#     geom_col(width = .5, fill = "yellow") 

Portanto, a maioria dos que responderam a pesquisa já trabalharam com desenvolviemnto de software utilizando metodologias ágeis, o que salienta a necessidade de que esse grupo seja estudado.

Quando a pessoa respondia que já havia trabalhado com metodologias ágeis, eram feitas também as seguintes perguntas:

  • EXPERIÊNCIA: Quantos anos você trabalhou com metodologias ágeis? [resposta em anos]
  • PAPEL: Qual foi o seu papel no projeto de desenvolvimento de software utilizando metologias ágeis? Caso tenha trabalhado em mais de um projeto e/ou exercido mais de um papel, marque mais de uma resposta [PO - Product Owner / SM - Scrum Master / Membro do time de desenvolvimento)]
  • ÁREA: Qual foi a área do projeto de desenvolvimento de software utilizando metodologias ágeis em que você trabalhou? Caso tenha trabalhado em mais de um projeto e/ou área, marque mais de uma resposta [Área Acadêmica (teórica) / Área Comercial (de uma fábrica de software)]

Essas informações serão necessárias para uma melhor análise da distribuição da nossa amostra.

A distribuição das respostas será mostrada mais adiante.


Problemas em metodologias ágeis

Nossa abordagem foi a de perguntar sobre alguns problemas que ocorrem em metodologias ágeis. Esses problemas foram baseados na experiência pessoal do autor e também no que os artigos vêm abordando na literatura nos últimos 5 anos. As perguntas foram feitas pedindo para que os itens fossem classificados em escala Likert de 1 a 5, com o seguinte significado:

O texto e os itens a serem classificados foram escritos da seguinte maneira:

Baseado em seu conhecimento teórico ou prático sobre metodologias ágeis, avalie a dificuldade ou facilidade de cada item a seguir:


Distribuição total

Sem considerar experiência, papel e área, a distribuição das maiores dificuldades em metodologias ágeis das respostas em ordem decrescente (do mais difícil para o mais fácil) ficou assim:

dados_agil_exp = dados_agil %>%
    # filter(anos_agil <= 3) %>%
    # mutate(agil_a = as.factor(agil_a),
    #        agil_b = as.factor(agil_b),
    #        agil_c = as.factor(agil_c),
    #        agil_d = as.factor(agil_d),
    #        agil_e = as.factor(agil_e)
    #        ) %>%
    select(A=agil_a,B=agil_b,C=agil_c,D=agil_d,E=agil_e) #%>%
    # summarise(media_a = mean(agil_a),
    #           media_b = mean(agil_b),
    #           media_c = mean(agil_c),
    #           media_d = mean(agil_d),
    #           media_e = mean(agil_e)
    #           ) %>%

# mostrar distribuição escala likert #
dados_agil_exp <- lapply(dados_agil_exp, factor, levels=1:5, labels=c("Muito fácil","Fácil", "Neutro","Difícil","Muito difícil"))
likt <- likert(as.data.frame(dados_agil_exp))
plot(likt) 

# # calculando a moda #
# getmode <- function(v) {
#    uniqv <- unique(v)
#    uniqv[which.max(tabulate(match(v, uniqv)))]
# }
# 
# dados_agil %>%
#     summarise(
#         moda_agil_a = getmode(agil_a))
    1. Criar boas histórias de usuário
    1. Estimar o esforço e tempo de histórias de usuário
    1. Dividir épicos (histórias muito grandes) em histórias menores
    1. Avaliar a qualidade do código feita por um time de desenvolvimento que utiliza metodologia ágil
    1. Validação, por parte do usuário, do que foi feito pelo time de desenvolvimento, antes da implantação do sistema

Analisando a densidade da distribuição:

# mostrar a densidade da distribuição #
# # usar caso seja necessário mostrar correlação
# dados_agil %>%
#   select(A = agil_a, B = agil_b, C = agil_c, D = agil_d, E = agil_e) %>%
#     ggpairs()

plot(likt,
     type="density",
           facet = TRUE,
           bw = 0.5)

    1. Criar boas histórias de usuário
    1. Estimar o esforço e tempo de histórias de usuário
    1. Dividir épicos (histórias muito grandes) em histórias menores
    1. Avaliar a qualidade do código feita por um time de desenvolvimento que utiliza metodologia ágil
    1. Validação, por parte do usuário, do que foi feito pelo time de desenvolvimento, antes da implantação do sistema

F) Outros

As respostas opcionais, caso algum problema que enfrentado em um projeto que utiliza metodologia ágil não estivesse contemplado no questionário ficaram assim:

dados_agil %>% 
    filter(!is.na(agil_f)) %>%
    count(agil_f) %>%
    select(outros = agil_f)
## # A tibble: 15 x 1
##    outros                                                                  
##    <chr>                                                                   
##  1 Dificuldade de testar com qualidade o produto.                          
##  2 Estimativa de tempo de termino de atividades mal feita                  
##  3 Falhas de estimativas.                                                  
##  4 Garantir a visão de escopo global de projeto (contrato) e ainda manter …
##  5 Imposições do P.O. na definição de estimativas; imposição de número de …
##  6 Integração de diferentes times dentro de um projeto.                    
##  7 Interação entre as pessoas                                              
##  8 Levantamento de requisitos junto ao cliente                             
##  9 Marcar reuniões diárias pode ser algo um pouco complicado, especialment…
## 10 Mudança de requisito                                                    
## 11 O contato direto com o cliente e o mais interessado na solução deixa mu…
## 12 Problemas de gerenciamento do time de desenvolvimento são comuns, em es…
## 13 Que todos os membros conheçam bem o processo a ser realizado na metodol…
## 14 Realização de testes e definição de requisitos não funcionais.          
## 15 Reduzir escopo do projeto em relação a expectativa do cliente.
# ggplot(aes(x = paste(substr(agil_f, 1, 80), ".."), y = n)) + 
#     geom_col(width = .5, fill = "light green") +
#     #geom_text(aes(label=n)) +
#     coord_flip() +
#     #geom_point() + 
#     #scale_x_continuous(breaks = seq(0,5,1)) + 
#     scale_y_continuous(breaks = seq(0,5,1)) +
#     labs(x = "", y = "")

Respostas com a palavra “requisito”

dados_agil %>% 
    filter(!is.na(agil_f)) %>%
    count(agil_f) %>%
    mutate(requisito = agil_f %like% "requisito") %>%
    filter(requisito == TRUE) %>%
    select(requisito = agil_f)
## # A tibble: 3 x 1
##   requisito                                                     
##   <chr>                                                         
## 1 Levantamento de requisitos junto ao cliente                   
## 2 Mudança de requisito                                          
## 3 Realização de testes e definição de requisitos não funcionais.

Respostas com a palavra “teste”

dados_agil %>% 
    filter(!is.na(agil_f)) %>%
    count(agil_f) %>%
    mutate(teste = agil_f %like% "test") %>%
    filter(teste == TRUE) %>%
    select(teste = agil_f)
## # A tibble: 2 x 1
##   teste                                                         
##   <chr>                                                         
## 1 Dificuldade de testar com qualidade o produto.                
## 2 Realização de testes e definição de requisitos não funcionais.

Respostas com a palavra “escopo”

dados_agil %>% 
    filter(!is.na(agil_f)) %>%
    count(agil_f) %>%
    mutate(escopo = agil_f %like% "escopo") %>%
    filter(escopo == TRUE) %>%
    select(escopo = agil_f)
## # A tibble: 3 x 1
##   escopo                                                                   
##   <chr>                                                                    
## 1 Garantir a visão de escopo global de projeto (contrato) e ainda manter a…
## 2 Que todos os membros conheçam bem o processo a ser realizado na metodolo…
## 3 Reduzir escopo do projeto em relação a expectativa do cliente.

Respostas com a palavra “estimativa”

dados_agil %>% 
    filter(!is.na(agil_f)) %>%
    count(agil_f) %>%
    mutate(estim = agil_f %like% "estim") %>%
    filter(estim == TRUE) %>%
    select(estim = agil_f)
## # A tibble: 2 x 1
##   estim                                                                    
##   <chr>                                                                    
## 1 Falhas de estimativas.                                                   
## 2 Imposições do P.O. na definição de estimativas; imposição de número de h…

Respostas com a palavra “interação / integração”

dados_agil %>% 
    filter(!is.na(agil_f)) %>%
    count(agil_f) %>%
    mutate(intera = tolower(agil_f) %like% "intera", integra = tolower(agil_f) %like% "integra") %>%
    filter(intera == TRUE | integra == TRUE) %>%
    select(interacao_integracao = agil_f)
## # A tibble: 2 x 1
##   interacao_integracao                                
##   <chr>                                               
## 1 Integração de diferentes times dentro de um projeto.
## 2 Interação entre as pessoas

Por experiência

Distribuição de quanto tempo trabalhou com metodologias ágeis

dados_agil %>% 
    ggplot(aes(x = "", y = anos_agil)) + 
    geom_boxplot(coef = 1000, width = .4) + 
    geom_jitter(width = .2, color = "salmon", alpha = .5, height = 0.1) + 
    coord_flip() + 
    scale_y_continuous(breaks = seq(0,11,1)) +
    labs(
        x = "",
        y = "Quantos anos trabalhou com metodologias ágeis"
    )

Com isto, vemos claramente que a mediana da experiência com metodologias ágeis é 3 anos. Dividiremos a distribuição em 2 grupos para análise.

  • Menos experientes: trabalharam 3 anos ou menos com metodologias ágeis (<= 3);
  • Mais experientes: trabalharam mais de 3 anos com metodologias ágeis (> 3).
dados_agil %>% 
    count(tipo_experiencia) %>% 
    ggplot(aes(x = reorder(tipo_experiencia, n), y = n)) + 
    geom_col(width = .9, fill = "salmon") +
    geom_text(aes(label=n), hjust = -0.3) +
    #geom_point(x = trabalhou_agil) + 
    #scale_x_continuous(breaks = seq(0,5,1)) + 
    scale_y_continuous(limits = c(0, 90), breaks = seq(0,90,10)) +
    coord_flip() +
    labs(x = "Experiência", y = "") +
    theme_bw()

A quantidade de respostas de cada um desses grupos pode ser vista a seguir:

Distribuição para quem trabalhou 3 anos ou menos

A distribuição das respostas para os menos experientes em ordem decrescente (do mais difícil para o mais fácil) ficou assim:

dados_agil_exp_menor = dados_agil %>%
    filter(anos_agil <= 3) %>%
    # mutate(agil_a = as.factor(agil_a),
    #        agil_b = as.factor(agil_b),
    #        agil_c = as.factor(agil_c),
    #        agil_d = as.factor(agil_d),
    #        agil_e = as.factor(agil_e)
    #        ) %>%
    select(A=agil_a,B=agil_b,C=agil_c,D=agil_d,E=agil_e) #%>%
    # summarise(media_a = mean(agil_a),
    #           media_b = mean(agil_b),
    #           media_c = mean(agil_c),
    #           media_d = mean(agil_d),
    #           media_e = mean(agil_e)
    #           ) %>%


#    ggplot(data = dados_agil_media_menor) +
    # geom_bar() +
    # geom_histogram(data = dados_agil, mapping = aes(x = mean(agil_a)), binwidth = 1, boundary = 0, fill = "white", color = "grey10") +
    # geom_col(data = dados_agil, mapping = aes(x = agil_a , y = agil_b, color = agil_c)) +
    # geom_line(data = dados_agil, mapping = aes(x = ProjectCode , y=erro_medio_abs, group = 1), , color = "salmon") +
    # geom_point(data = dados_agil, mapping = aes(x = ProjectCode , y=erro_medio_abs, group = 1), color = "red") +
    # 
    # geom_hline(data = dados_agil, aes(yintercept=mean(devs)), show.legend = FALSE, color = "blue") +
    
    #theme(axis.text.x = element_text(angle = 90)) +
    #scale_y_continuous(breaks = seq(0,100,5)) +
    #facet_wrap(~ reorder(titulo, aula))
    
#    labs(title = "teste",
#        x = "",
#        y = "   "
#    )

dados_agil_exp_menor <- lapply(dados_agil_exp_menor, factor, levels=1:5, labels=c("Muito fácil","Fácil", "Neutro","Difícil","Muito difícil"))
likt <- likert(as.data.frame(dados_agil_exp_menor))
plot(likt) 

    1. Criar boas histórias de usuário
    1. Estimar o esforço e tempo de histórias de usuário
    1. Dividir épicos (histórias muito grandes) em histórias menores
    1. Avaliar a qualidade do código feita por um time de desenvolvimento que utiliza metodologia ágil
    1. Validação, por parte do usuário, do que foi feito pelo time de desenvolvimento, antes da implantação do sistema

Distribuição para quem trabalhou mais que 3 anos

A distribuição das respostas para os mais experientes em ordem decrescente (do mais difícil para o mais fácil) ficou assim:

dados_agil_exp_maior = dados_agil %>%
    filter(anos_agil > 3) %>%
    # mutate(agil_a = as.factor(agil_a),
    #        agil_b = as.factor(agil_b),
    #        agil_c = as.factor(agil_c),
    #        agil_d = as.factor(agil_d),
    #        agil_e = as.factor(agil_e)
    #        ) %>%
    select(A=agil_a,B=agil_b,C=agil_c,D=agil_d,E=agil_e) #%>%
    # summarise(media_a = mean(agil_a),
    #           media_b = mean(agil_b),
    #           media_c = mean(agil_c),
    #           media_d = mean(agil_d),
    #           media_e = mean(agil_e)
    #           ) %>%

dados_agil_exp_maior <- lapply(dados_agil_exp_maior, factor, levels=1:5, labels=c("Muito fácil","Fácil", "Neutro","Difícil","Muito difícil"))
likt <- likert(as.data.frame(dados_agil_exp_maior))
plot(likt) 

    1. Criar boas histórias de usuário
    1. Estimar o esforço e tempo de histórias de usuário
    1. Dividir épicos (histórias muito grandes) em histórias menores
    1. Avaliar a qualidade do código feita por um time de desenvolvimento que utiliza metodologia ágil
    1. Validação, por parte do usuário, do que foi feito pelo time de desenvolvimento, antes da implantação do sistema

Por papeis

Considerando que os papeis que podem ser exercidos em metodologias ágeis são os seguintes:

  • PO = Product Owner
  • SM = Scrum Master
  • DEV = Membro do time de desenvolvimento

E sabendo que os participantes poderiam escolher uma, duas ou três respostas, a distribuição ficou assim:

dados_agil %>% 
    count(papel_agil) %>% 
    ggplot(aes(x = reorder(papel_agil, n), y = n)) + 
    geom_col(width = .9, fill = "red") +
    geom_text(aes(label=n), hjust = -0.3) +
    #geom_point(x = trabalhou_agil) + 
    #scale_x_continuous(breaks = seq(0,5,1)) + 
    scale_y_continuous(limits = c(0, 90), breaks = seq(0,90,10)) +
    coord_flip() +
    labs(x = "Papeis exercidos", y = "") +
    theme_bw()

Portanto, a grande maioria dos que responderam à pesquisa são desenvolvedores.

Distribuição para quem trabalhou como PO

A distribuição para quem trabalhou como Product Owner em ordem decrescente (do mais difícil para o mais fácil) ficou assim:

dados_agil_po = dados_agil %>%
    filter(papel_agil %like% "PO") %>%
    # mutate(agil_a = as.factor(agil_a),
    #        agil_b = as.factor(agil_b),
    #        agil_c = as.factor(agil_c),
    #        agil_d = as.factor(agil_d),
    #        agil_e = as.factor(agil_e)
    #        ) %>%
    select(A=agil_a,B=agil_b,C=agil_c,D=agil_d,E=agil_e) #%>%
    # summarise(media_a = mean(agil_a),
    #           media_b = mean(agil_b),
    #           media_c = mean(agil_c),
    #           media_d = mean(agil_d),
    #           media_e = mean(agil_e)
    #           ) %>%

dados_agil_po <- lapply(dados_agil_po, factor, levels=1:5, labels=c("Muito fácil","Fácil", "Neutro","Difícil","Muito difícil"))
likt <- likert(as.data.frame(dados_agil_po))
plot(likt) 

    1. Criar boas histórias de usuário
    1. Estimar o esforço e tempo de histórias de usuário
    1. Dividir épicos (histórias muito grandes) em histórias menores
    1. Avaliar a qualidade do código feita por um time de desenvolvimento que utiliza metodologia ágil
    1. Validação, por parte do usuário, do que foi feito pelo time de desenvolvimento, antes da implantação do sistema

Distribuição para quem trabalhou como SM

A distribuição para quem trabalhou como Scrum Master em ordem decrescente (do mais difícil para o mais fácil) ficou assim:

dados_agil_sm = dados_agil %>%
    filter(papel_agil %like% "SM") %>%
    # mutate(agil_a = as.factor(agil_a),
    #        agil_b = as.factor(agil_b),
    #        agil_c = as.factor(agil_c),
    #        agil_d = as.factor(agil_d),
    #        agil_e = as.factor(agil_e)
    #        ) %>%
    select(A=agil_a,B=agil_b,C=agil_c,D=agil_d,E=agil_e) #%>%
    # summarise(media_a = mean(agil_a),
    #           media_b = mean(agil_b),
    #           media_c = mean(agil_c),
    #           media_d = mean(agil_d),
    #           media_e = mean(agil_e)
    #           ) %>%

dados_agil_sm <- lapply(dados_agil_sm, factor, levels=1:5, labels=c("Muito fácil","Fácil", "Neutro","Difícil","Muito difícil"))
likt <- likert(as.data.frame(dados_agil_sm))
plot(likt) 

    1. Criar boas histórias de usuário
    1. Estimar o esforço e tempo de histórias de usuário
    1. Dividir épicos (histórias muito grandes) em histórias menores
    1. Avaliar a qualidade do código feita por um time de desenvolvimento que utiliza metodologia ágil
    1. Validação, por parte do usuário, do que foi feito pelo time de desenvolvimento, antes da implantação do sistema

Distribuição para quem trabalhou como DEV

A distribuição para quem trabalhou como membro do time de desenvolvimento em ordem decrescente (do mais difícil para o mais fácil) ficou assim:

dados_agil_dev = dados_agil %>%
    filter(papel_agil %like% "Membro do time de desenvolvimento") %>%
    # mutate(agil_a = as.factor(agil_a),
    #        agil_b = as.factor(agil_b),
    #        agil_c = as.factor(agil_c),
    #        agil_d = as.factor(agil_d),
    #        agil_e = as.factor(agil_e)
    #        ) %>%
    select(A=agil_a,B=agil_b,C=agil_c,D=agil_d,E=agil_e) #%>%
    # summarise(media_a = mean(agil_a),
    #           media_b = mean(agil_b),
    #           media_c = mean(agil_c),
    #           media_d = mean(agil_d),
    #           media_e = mean(agil_e)
    #           ) %>%

dados_agil_dev <- lapply(dados_agil_dev, factor, levels=1:5, labels=c("Muito fácil","Fácil", "Neutro","Difícil","Muito difícil"))
likt <- likert(as.data.frame(dados_agil_dev))
plot(likt) 

    1. Criar boas histórias de usuário
    1. Estimar o esforço e tempo de histórias de usuário
    1. Dividir épicos (histórias muito grandes) em histórias menores
    1. Avaliar a qualidade do código feita por um time de desenvolvimento que utiliza metodologia ágil
    1. Validação, por parte do usuário, do que foi feito pelo time de desenvolvimento, antes da implantação do sistema

Por área

Considerando que as áreas em que os participantes atuaram poderiam ser as seguintes:

  • Área Acadêmica (teórica)
  • Área Comercial (de uma fábrica de software)

E sabendo que os participantes poderiam escolher uma ou duas respostas, a distribuição ficou assim:

dados_agil %>% 
    count(area_agil) %>% 
    ggplot(aes(x = reorder(area_agil, n), y = n)) + 
    geom_col(width = .5, fill = "orange") +
    geom_text(aes(label=n), hjust = -0.3) +
    #geom_point(x = trabalhou_agil) + 
    #scale_x_continuous(breaks = seq(0,5,1)) + 
    scale_y_continuous(limits = c(0, 70),breaks = seq(0,70,5)) +
    coord_flip() +
    labs(x = "Área", y = "")

Portanto, a grande maioria é da área comercial.

Distribuição para quem trabalhou na área acadêmica

A distribuição para quem trabalhou na área acadêmica em ordem decrescente (do mais difícil para o mais fácil) ficou assim:

dados_agil_academica = dados_agil %>%
    filter(area_agil %like% "Área Acadêmica") %>%
    # mutate(agil_a = as.factor(agil_a),
    #        agil_b = as.factor(agil_b),
    #        agil_c = as.factor(agil_c),
    #        agil_d = as.factor(agil_d),
    #        agil_e = as.factor(agil_e)
    #        ) %>%
    select(A=agil_a,B=agil_b,C=agil_c,D=agil_d,E=agil_e) #%>%
    # summarise(media_a = mean(agil_a),
    #           media_b = mean(agil_b),
    #           media_c = mean(agil_c),
    #           media_d = mean(agil_d),
    #           media_e = mean(agil_e)
    #           ) %>%

dados_agil_academica <- lapply(dados_agil_academica, factor, levels=1:5, labels=c("Muito fácil","Fácil", "Neutro","Difícil","Muito difícil"))
likt <- likert(as.data.frame(dados_agil_academica))
plot(likt) 

    1. Criar boas histórias de usuário
    1. Estimar o esforço e tempo de histórias de usuário
    1. Dividir épicos (histórias muito grandes) em histórias menores
    1. Avaliar a qualidade do código feita por um time de desenvolvimento que utiliza metodologia ágil
    1. Validação, por parte do usuário, do que foi feito pelo time de desenvolvimento, antes da implantação do sistema

Distribuição para quem trabalhou na área comercial

A distribuição para quem trabalhou na área comercial em ordem decrescente (do mais difícil para o mais fácil) ficou assim:

dados_agil_comercial = dados_agil %>%
    filter(area_agil %like% "Área Comercial") %>%
    # mutate(agil_a = as.factor(agil_a),
    #        agil_b = as.factor(agil_b),
    #        agil_c = as.factor(agil_c),
    #        agil_d = as.factor(agil_d),
    #        agil_e = as.factor(agil_e)
    #        ) %>%
    select(A=agil_a,B=agil_b,C=agil_c,D=agil_d,E=agil_e) #%>%
    # summarise(media_a = mean(agil_a),
    #           media_b = mean(agil_b),
    #           media_c = mean(agil_c),
    #           media_d = mean(agil_d),
    #           media_e = mean(agil_e)
    #           ) %>%

dados_agil_comercial <- lapply(dados_agil_comercial, factor, levels=1:5, labels=c("Muito fácil","Fácil", "Neutro","Difícil","Muito difícil"))
likt <- likert(as.data.frame(dados_agil_comercial))
plot(likt) 

    1. Criar boas histórias de usuário
    1. Estimar o esforço e tempo de histórias de usuário
    1. Dividir épicos (histórias muito grandes) em histórias menores
    1. Avaliar a qualidade do código feita por um time de desenvolvimento que utiliza metodologia ágil
    1. Validação, por parte do usuário, do que foi feito pelo time de desenvolvimento, antes da implantação do sistema

Gamificação em metodologias ágeis

A abordagem para a gamificação foi a de perguntar sobre como a pessoa pensa que os problemas que ocorrem em metodologias ágeis poderiam ser resolvidos com gamificação. As perguntas foram feitas pedindo para que os itens fossem classificados em escala Likert de 1 a 5, com o seguinte significado:

O texto e os itens a serem classificados foram escritos da seguinte maneira:

Pensamos transformar partes dos processos ágeis em jogos (gamificar) para tentar resolver ou diminuir os problemas mencionados anteriormente. Você acha que pode funcionar? Classifique de acordo a efetividade das soluções propostas.


Distribuição total

Sem considerar experiência, papel e área, a distribuição das respostas sobre as maiores dificuldades em metodologias ágeis que poderiam ser resolvidas com gamificação em ordem decrescente (do mais efetivo para o menos efetivo) ficou assim:

dados_gamificacao_exp = dados_agil %>%
    # filter(anos_agil <= 3) %>%
    # mutate(agil_a = as.factor(agil_a),
    #        agil_b = as.factor(agil_b),
    #        agil_c = as.factor(agil_c),
    #        agil_d = as.factor(agil_d),
    #        agil_e = as.factor(agil_e)
    #        ) %>%
    select(A=gamificacao_a,B=gamificacao_b,C=gamificacao_c,D=gamificacao_d,E=gamificacao_e) #%>%
    # summarise(media_a = mean(agil_a),
    #           media_b = mean(agil_b),
    #           media_c = mean(agil_c),
    #           media_d = mean(agil_d),
    #           media_e = mean(agil_e)
    #           ) %>%

# mostrar distribuição escala likert #
dados_gamificacao_exp <- lapply(dados_gamificacao_exp, factor, levels=1:5, labels=c("Pouco efetivo","Não muito efetivo", "Neutro","Efetivo","Muito efetivo"))
likt <- likert(as.data.frame(dados_gamificacao_exp))
plot(likt) 

    1. Criar boas histórias de usuário
    1. Estimar o esforço e tempo de histórias de usuário
    1. Dividir épicos (histórias muito grandes) em histórias menores
    1. Avaliar a qualidade do código feita por um time de desenvolvimento que utiliza metodologia ágil
    1. Validação, por parte do usuário, do que foi feito pelo time de desenvolvimento, antes da implantação do sistema

Analisando a densidade da distribuição:

# mostrar a densidade da distribuição #
# # usar caso seja necessário mostrar correlação
# dados_agil %>%
#   select(A = gamificacao_a, B = gamificacao_b, C = gamificacao_c, D = gamificacao_d, E = gamificacao_e) %>%
#     ggpairs()

plot(likt,
     type="density",
           facet = TRUE,
           bw = 0.5)

    1. Criar boas histórias de usuário
    1. Estimar o esforço e tempo de histórias de usuário
    1. Dividir épicos (histórias muito grandes) em histórias menores
    1. Avaliar a qualidade do código feita por um time de desenvolvimento que utiliza metodologia ágil
    1. Validação, por parte do usuário, do que foi feito pelo time de desenvolvimento, antes da implantação do sistema

F) Outros

A distribuição das respostas opcionais, caso algum problema que poderia ser resolvido com gamificação e que não foi contemplado no questionário, além de como isso poderia ser feito, ficou assim:

dados_agil %>% 
    filter(!is.na(gamificacao_f)) %>%
    count(gamificacao_f) %>%
    select(outros = gamificacao_f)
## # A tibble: 3 x 1
##   outros                                                                   
##   <chr>                                                                    
## 1 Criar uma relação entre estimado e realizado, premiando quem acerta.     
## 2 Estimativa de termino do projeto muito apertada                          
## 3 Qualquer atividade rotineira braçal (chata) que a maioria das pessoas ev…
#     
# ggplot(aes(x = paste(substr(gamificacao_f, 1, 80), ".."), y = n)) + 
#     geom_col(width = .5, fill = "light pink") +
#     #geom_text(aes(label=n)) +
#     coord_flip() +
#     #geom_point() + 
#     #scale_x_continuous(breaks = seq(0,5,1)) + 
#     scale_y_continuous(breaks = seq(0,5,1)) +
#     labs(x = "", y = "")

Por experiência

Distribuição para quem trabalhou 3 anos ou menos

A distribuição das respostas para os menos experientes em ordem decrescente (do mais efetivo para o menos efetivo) ficou assim:

dados_gamificacao_exp_menor = dados_agil %>%
    filter(anos_agil <= 3) %>%
    # mutate(agil_a = as.factor(agil_a),
    #        agil_b = as.factor(agil_b),
    #        agil_c = as.factor(agil_c),
    #        agil_d = as.factor(agil_d),
    #        agil_e = as.factor(agil_e)
    #        ) %>%
    select(A=gamificacao_a,B=gamificacao_b,C=gamificacao_c,D=gamificacao_d,E=gamificacao_e) #%>%
    # summarise(media_a = mean(agil_a),
    #           media_b = mean(agil_b),
    #           media_c = mean(agil_c),
    #           media_d = mean(agil_d),
    #           media_e = mean(agil_e)
    #           ) %>%


dados_gamificacao_exp_menor <- lapply(dados_gamificacao_exp_menor, factor, levels=1:5, labels=c("Pouco efetivo","Não muito efetivo", "Neutro","Efetivo","Muito efetivo"))
likt <- likert(as.data.frame(dados_gamificacao_exp_menor))
plot(likt) 

    1. Criar boas histórias de usuário
    1. Estimar o esforço e tempo de histórias de usuário
    1. Dividir épicos (histórias muito grandes) em histórias menores
    1. Avaliar a qualidade do código feita por um time de desenvolvimento que utiliza metodologia ágil
    1. Validação, por parte do usuário, do que foi feito pelo time de desenvolvimento, antes da implantação do sistema

Distribuição para quem trabalhou mais de 3 anos

A distribuição das respostas para os mais experientes em ordem decrescente (do mais efetivo para o menos efetivo) ficou assim:

dados_gamificacao_exp_maior = dados_agil %>%
    filter(anos_agil > 3) %>%
    # mutate(agil_a = as.factor(agil_a),
    #        agil_b = as.factor(agil_b),
    #        agil_c = as.factor(agil_c),
    #        agil_d = as.factor(agil_d),
    #        agil_e = as.factor(agil_e)
    #        ) %>%
    select(A=gamificacao_a,B=gamificacao_b,C=gamificacao_c,D=gamificacao_d,E=gamificacao_e) #%>%
    # summarise(media_a = mean(agil_a),
    #           media_b = mean(agil_b),
    #           media_c = mean(agil_c),
    #           media_d = mean(agil_d),
    #           media_e = mean(agil_e)
    #           ) %>%


dados_gamificacao_exp_maior <- lapply(dados_gamificacao_exp_maior, factor, levels=1:5, labels=c("Pouco efetivo","Não muito efetivo", "Neutro","Efetivo","Muito efetivo"))
likt <- likert(as.data.frame(dados_gamificacao_exp_maior))
plot(likt) 

    1. Criar boas histórias de usuário
    1. Estimar o esforço e tempo de histórias de usuário
    1. Dividir épicos (histórias muito grandes) em histórias menores
    1. Avaliar a qualidade do código feita por um time de desenvolvimento que utiliza metodologia ágil
    1. Validação, por parte do usuário, do que foi feito pelo time de desenvolvimento, antes da implantação do sistema

Por papeis

Distribuição para quem trabalhou como PO

A distribuição para quem trabalhou como Product Owner em ordem decrescente (do mais efetivo para o menos efetivo) ficou assim:

dados_gamificacao_papeis = dados_agil %>%
    filter(papel_agil %like% "PO") %>%
    # mutate(agil_a = as.factor(agil_a),
    #        agil_b = as.factor(agil_b),
    #        agil_c = as.factor(agil_c),
    #        agil_d = as.factor(agil_d),
    #        agil_e = as.factor(agil_e)
    #        ) %>%
    select(A=gamificacao_a,B=gamificacao_b,C=gamificacao_c,D=gamificacao_d,E=gamificacao_e) #%>%
    # summarise(media_a = mean(agil_a),
    #           media_b = mean(agil_b),
    #           media_c = mean(agil_c),
    #           media_d = mean(agil_d),
    #           media_e = mean(agil_e)
    #           ) %>%

dados_gamificacao_papeis <- lapply(dados_gamificacao_papeis, factor, levels=1:5, labels=c("Pouco efetivo","Não muito efetivo", "Neutro","Efetivo","Muito efetivo"))
likt <- likert(as.data.frame(dados_gamificacao_papeis))
plot(likt) 

    1. Criar boas histórias de usuário
    1. Estimar o esforço e tempo de histórias de usuário
    1. Dividir épicos (histórias muito grandes) em histórias menores
    1. Avaliar a qualidade do código feita por um time de desenvolvimento que utiliza metodologia ágil
    1. Validação, por parte do usuário, do que foi feito pelo time de desenvolvimento, antes da implantação do sistema

Distribuição para quem trabalhou como SM

A distribuição para quem trabalhou como Scrum Master em ordem decrescente (do mais efetivo para o menos efetivo) ficou assim:

dados_gamificacao_papeis = dados_agil %>%
    filter(papel_agil %like% "SM") %>%
    # mutate(agil_a = as.factor(agil_a),
    #        agil_b = as.factor(agil_b),
    #        agil_c = as.factor(agil_c),
    #        agil_d = as.factor(agil_d),
    #        agil_e = as.factor(agil_e)
    #        ) %>%
    select(A=gamificacao_a,B=gamificacao_b,C=gamificacao_c,D=gamificacao_d,E=gamificacao_e) #%>%
    # summarise(media_a = mean(agil_a),
    #           media_b = mean(agil_b),
    #           media_c = mean(agil_c),
    #           media_d = mean(agil_d),
    #           media_e = mean(agil_e)
    #           ) %>%

dados_gamificacao_papeis <- lapply(dados_gamificacao_papeis, factor, levels=1:5, labels=c("Pouco efetivo","Não muito efetivo", "Neutro","Efetivo","Muito efetivo"))
likt <- likert(as.data.frame(dados_gamificacao_papeis))
plot(likt) 

    1. Criar boas histórias de usuário
    1. Estimar o esforço e tempo de histórias de usuário
    1. Dividir épicos (histórias muito grandes) em histórias menores
    1. Avaliar a qualidade do código feita por um time de desenvolvimento que utiliza metodologia ágil
    1. Validação, por parte do usuário, do que foi feito pelo time de desenvolvimento, antes da implantação do sistema

Distribuição para quem trabalhou como DEV

A distribuição para quem trabalhou como membro do time de desenvolvimento em ordem decrescente (do mais efetivo para o menos efetivo) ficou assim:

dados_gamificacao_papeis = dados_agil %>%
    filter(papel_agil %like% "Membro do time de desenvolvimento") %>%
    # mutate(agil_a = as.factor(agil_a),
    #        agil_b = as.factor(agil_b),
    #        agil_c = as.factor(agil_c),
    #        agil_d = as.factor(agil_d),
    #        agil_e = as.factor(agil_e)
    #        ) %>%
    select(A=gamificacao_a,B=gamificacao_b,C=gamificacao_c,D=gamificacao_d,E=gamificacao_e) #%>%
    # summarise(media_a = mean(agil_a),
    #           media_b = mean(agil_b),
    #           media_c = mean(agil_c),
    #           media_d = mean(agil_d),
    #           media_e = mean(agil_e)
    #           ) %>%

dados_gamificacao_papeis <- lapply(dados_gamificacao_papeis, factor, levels=1:5, labels=c("Pouco efetivo","Não muito efetivo", "Neutro","Efetivo","Muito efetivo"))
likt <- likert(as.data.frame(dados_gamificacao_papeis))
plot(likt) 

    1. Criar boas histórias de usuário
    1. Estimar o esforço e tempo de histórias de usuário
    1. Dividir épicos (histórias muito grandes) em histórias menores
    1. Avaliar a qualidade do código feita por um time de desenvolvimento que utiliza metodologia ágil
    1. Validação, por parte do usuário, do que foi feito pelo time de desenvolvimento, antes da implantação do sistema

Por área

Distribuição para quem trabalhou na área acadêmica

A distribuição para quem trabalhou na área acadêmica em ordem decrescente (do mais efetivo para o menos efetivo) ficou assim:

dados_agil_academica = dados_agil %>%
    filter(area_agil %like% "Área Acadêmica") %>%
    # mutate(agil_a = as.factor(agil_a),
    #        agil_b = as.factor(agil_b),
    #        agil_c = as.factor(agil_c),
    #        agil_d = as.factor(agil_d),
    #        agil_e = as.factor(agil_e)
    #        ) %>%
    select(A=gamificacao_a,B=gamificacao_b,C=gamificacao_c,D=gamificacao_d,E=gamificacao_e) #%>%
    # summarise(media_a = mean(agil_a),
    #           media_b = mean(agil_b),
    #           media_c = mean(agil_c),
    #           media_d = mean(agil_d),
    #           media_e = mean(agil_e)
    #           ) %>%

dados_agil_academica <- lapply(dados_agil_academica, factor, levels=1:5, labels=c("Pouco efetivo","Não muito efetivo", "Neutro","Efetivo","Muito efetivo"))
likt <- likert(as.data.frame(dados_agil_academica))
plot(likt) 

    1. Criar boas histórias de usuário
    1. Estimar o esforço e tempo de histórias de usuário
    1. Dividir épicos (histórias muito grandes) em histórias menores
    1. Avaliar a qualidade do código feita por um time de desenvolvimento que utiliza metodologia ágil
    1. Validação, por parte do usuário, do que foi feito pelo time de desenvolvimento, antes da implantação do sistema

Distribuição para quem trabalhou na área comercial

A distribuição para quem trabalhou na área comercial em ordem decrescente (do mais efetivo para o menos efetivo) ficou assim:

dados_agil_academica = dados_agil %>%
    filter(area_agil %like% "Área Comercial") %>%
    # mutate(agil_a = as.factor(agil_a),
    #        agil_b = as.factor(agil_b),
    #        agil_c = as.factor(agil_c),
    #        agil_d = as.factor(agil_d),
    #        agil_e = as.factor(agil_e)
    #        ) %>%
    select(A=gamificacao_a,B=gamificacao_b,C=gamificacao_c,D=gamificacao_d,E=gamificacao_e) #%>%
    # summarise(media_a = mean(agil_a),
    #           media_b = mean(agil_b),
    #           media_c = mean(agil_c),
    #           media_d = mean(agil_d),
    #           media_e = mean(agil_e)
    #           ) %>%

dados_agil_academica <- lapply(dados_agil_academica, factor, levels=1:5, labels=c("Pouco efetivo","Não muito efetivo", "Neutro","Efetivo","Muito efetivo"))
likt <- likert(as.data.frame(dados_agil_academica))
plot(likt) 

    1. Criar boas histórias de usuário
    1. Estimar o esforço e tempo de histórias de usuário
    1. Dividir épicos (histórias muito grandes) em histórias menores
    1. Avaliar a qualidade do código feita por um time de desenvolvimento que utiliza metodologia ágil
    1. Validação, por parte do usuário, do que foi feito pelo time de desenvolvimento, antes da implantação do sistema

Outros filtros

Participantes com maior experiência, que tenham trabalhado na área comercial, como desenvolvedor

dados_agil_maisexp_com_dev = dados_agil %>%
    filter(anos_agil > 3, 
           area_agil %like% "Área Comercial",
           papel_agil %like% "Membro do time de desenvolvimento") %>%
    select(A=agil_a,B=agil_b,C=agil_c,D=agil_d,E=agil_e) 

dados_agil_maisexp_com_dev <- lapply(dados_agil_maisexp_com_dev, factor, levels=1:5, labels=c("Muito fácil","Fácil", "Neutro","Difícil","Muito difícil"))
likt <- likert(as.data.frame(dados_agil_maisexp_com_dev))
plot(likt) 

Participantes com menor experiência, que tenham trabalhado na área comercial, como desenvolvedor

dados_agil_menosexp_com_dev = dados_agil %>%
    filter(anos_agil <= 3, 
           area_agil %like% "Área Comercial",
           papel_agil %like% "Membro do time de desenvolvimento") %>%
    select(A=agil_a,B=agil_b,C=agil_c,D=agil_d,E=agil_e) 

dados_agil_menosexp_com_dev <- lapply(dados_agil_menosexp_com_dev, factor, levels=1:5, labels=c("Muito fácil","Fácil", "Neutro","Difícil","Muito difícil"))
likt <- likert(as.data.frame(dados_agil_menosexp_com_dev))
plot(likt) 

Inferência Estatística

Como foi tomada apenas uma amostra do total de uma população, faz-se necessário inferir dados dessa população. A seguir faremos essas inferências com um intervalo de confiança de 95% (N = 4000, n = 119).

Por experiência

Experiência inferida da população.

theta_f = function(d, i){
    d %>% 
        slice(i) %>% 
        summarise(media_anos_agil = mean(anos_agil)) %>% 
        pull(media_anos_agil)
}

theta_c = theta_f(dados_agil, 1:NROW(dados_agil))
ci_ano = dados_agil %>% 
    boot(statistic = theta_f, 
         R = 4000) %>%
    tidy(conf.level = 0.95, 
         method = "bca",
         conf.int = TRUE)

ci_ano
## # A tibble: 1 x 5
##   statistic     bias std.error conf.low conf.high
##       <dbl>    <dbl>     <dbl>    <dbl>     <dbl>
## 1      3.01 -0.00242     0.207     2.61      3.42

Gráfico

ci_ano %>%
    ggplot(aes(
        x = "",
        y = statistic,
        ymin = conf.low,
        ymax = conf.high
    )) +
    geom_pointrange() +
    geom_point(size = 3) + 
    scale_y_continuous(limits = c(0, 10), breaks = seq(0,10,0.5)) +
    labs(x = "anos", 
         y = "anos")

Inferência sobre Problemas em metodologias ágeis

A seguir faremos a inferência estatística para cada um dos problemas na população total.

A. Criar boas histórias de usuário

Resultados para o problema de “Criar boas histórias de usuário” inferida da população.

theta_f = function(d, i){
    d %>% 
        slice(i) %>% 
        summarise(media_agil_a = mean(agil_a)) %>% 
        pull(media_agil_a)
}

theta_c = theta_f(dados_agil, 1:NROW(dados_agil))
ciaa = dados_agil %>% 
    boot(statistic = theta_f, 
         R = 4000) %>%
    tidy(conf.level = 0.95, 
         method = "bca",
         conf.int = TRUE)

ciaa
## # A tibble: 1 x 5
##   statistic    bias std.error conf.low conf.high
##       <dbl>   <dbl>     <dbl>    <dbl>     <dbl>
## 1      2.82 0.00120    0.0889     2.64      2.98
grafico_ciaa = ciaa %>%
    ggplot(aes(
        x = "",
        y = statistic,
        ymin = conf.low,
        ymax = conf.high
    )) +
    geom_pointrange() +
    geom_point(size = 3) +
    scale_y_continuous(limits = c(1, 5), breaks = seq(1,5,0.2)) +
    labs(x = "A", 
         y = "")

B. Estimar o esforço e tempo de histórias de usuário

Resultados para o problema de “Estimar o esforço e tempo de histórias de usuário” inferida da população.

theta_f = function(d, i){
    d %>% 
        slice(i) %>% 
        summarise(media_agil_b = mean(agil_b)) %>% 
        pull(media_agil_b)
}

theta_c = theta_f(dados_agil, 1:NROW(dados_agil))
ciab = dados_agil %>% 
    boot(statistic = theta_f, 
         R = 4000) %>%
    tidy(conf.level = 0.95, 
         method = "bca",
         conf.int = TRUE)

ciab
## # A tibble: 1 x 5
##   statistic      bias std.error conf.low conf.high
##       <dbl>     <dbl>     <dbl>    <dbl>     <dbl>
## 1      3.56 -0.000116    0.0937     3.39      3.75
grafico_ciab = ciab %>%
    ggplot(aes(
        x = "",
        y = statistic,
        ymin = conf.low,
        ymax = conf.high
    )) +
    geom_pointrange() +
    geom_point(size = 3) + 
    scale_y_continuous(limits = c(1, 5), breaks = seq(1,5,0.2)) +
    labs(x = "B", 
         y = "")

C. Dividir épicos (histórias muito grandes) em histórias menores

Resultados para o problema de “Dividir épicos (histórias muito grandes) em histórias menores” inferida da população.

theta_f = function(d, i){
    d %>% 
        slice(i) %>% 
        summarise(media_agil_c = mean(agil_c)) %>% 
        pull(media_agil_c)
}

theta_c = theta_f(dados_agil, 1:NROW(dados_agil))
ciac = dados_agil %>% 
    boot(statistic = theta_f, 
         R = 4000) %>%
    tidy(conf.level = 0.95, 
         method = "bca",
         conf.int = TRUE)

ciac
## # A tibble: 1 x 5
##   statistic    bias std.error conf.low conf.high
##       <dbl>   <dbl>     <dbl>    <dbl>     <dbl>
## 1      2.50 0.00194    0.0907     2.32      2.68
grafico_ciac= ciac %>%
    ggplot(aes(
        x = "",
        y = statistic,
        ymin = conf.low,
        ymax = conf.high
    )) +
    geom_pointrange() +
    geom_point(size = 3) + 
    scale_y_continuous(limits = c(1, 5), breaks = seq(1,5,0.2)) +
    labs(x = "C", 
         y = "")

D. Avaliar a qualidade do código feita por um time de desenvolvimento que utiliza metodologia ágil

Resultados para o problema de “Avaliar a qualidade do código feita por um time de desenvolvimento que utiliza metodologia ágil” inferida da população.

theta_f = function(d, i){
    d %>% 
        slice(i) %>% 
        summarise(media_agil_d = mean(agil_d)) %>% 
        pull(media_agil_d)
}

theta_c = theta_f(dados_agil, 1:NROW(dados_agil))
ciad = dados_agil %>% 
    boot(statistic = theta_f, 
         R = 4000) %>%
    tidy(conf.level = 0.95, 
         method = "bca",
         conf.int = TRUE)

ciad
## # A tibble: 1 x 5
##   statistic      bias std.error conf.low conf.high
##       <dbl>     <dbl>     <dbl>    <dbl>     <dbl>
## 1      3.12 -0.000334    0.0901     2.93      3.29
grafico_ciad= ciad %>%
    ggplot(aes(
        x = "",
        y = statistic,
        ymin = conf.low,
        ymax = conf.high
    )) +
    geom_pointrange() +
    geom_point(size = 3) + 
    scale_y_continuous(limits = c(1, 5), breaks = seq(1,5,0.2)) +
    labs(x = "D", 
         y = "")

E. Validação, por parte do usuário, do que foi feito pelo time de desenvolvimento, antes da implantação do sistema

Resultados para o problema de “Validação, por parte do usuário, do que foi feito pelo time de desenvolvimento, antes da implantação do sistema” inferida da população.

theta_f = function(d, i){
    d %>% 
        slice(i) %>% 
        summarise(media_agil_e = mean(agil_e)) %>% 
        pull(media_agil_e)
}

theta_c = theta_f(dados_agil, 1:NROW(dados_agil))
ciae = dados_agil %>% 
    boot(statistic = theta_f, 
         R = 4000) %>%
    tidy(conf.level = 0.95, 
         method = "bca",
         conf.int = TRUE)

ciae
## # A tibble: 1 x 5
##   statistic     bias std.error conf.low conf.high
##       <dbl>    <dbl>     <dbl>    <dbl>     <dbl>
## 1      3.19 0.000775     0.117     2.97      3.43
grafico_ciae = ciae %>%
    ggplot(aes(
        x = "",
        y = statistic,
        ymin = conf.low,
        ymax = conf.high
    )) +
    geom_pointrange() +
    geom_point(size = 3) + 
    scale_y_continuous(limits = c(1, 5), breaks = seq(1,5,0.2)) +
    labs(x = "E", 
         y = "")

Gráfico

Pode-se observar o gráfico já com os intervalos de confiança de todos os problemas apresentados.

grid.arrange(grafico_ciaa, grafico_ciab, grafico_ciac, grafico_ciad, grafico_ciae, ncol = 5)

Inferência sobre Gamificação em metodologias ágeis

A seguir faremos a inferência estatística na população total em cada um dos tópicos sobre como a gamificação pode ajudar a mitigar cada um dos problemas.

A. Criar boas histórias de usuário

Resultados sobre a mitigação do problema de “Criar boas histórias de usuário” utilizando gamificação inferida da população.

theta_f = function(d, i){
    d %>% 
        slice(i) %>% 
        summarise(media_gamificacao_a = mean(gamificacao_a)) %>% 
        pull(media_gamificacao_a)
}

theta_c = theta_f(dados_agil, 1:NROW(dados_agil))
ciga = dados_agil %>% 
    boot(statistic = theta_f, 
         R = 4000) %>%
    tidy(conf.level = 0.95, 
         method = "bca",
         conf.int = TRUE)

ciga
## # A tibble: 1 x 5
##   statistic    bias std.error conf.low conf.high
##       <dbl>   <dbl>     <dbl>    <dbl>     <dbl>
## 1      3.34 0.00118     0.107     3.13      3.55
grafico_ciga = ciga %>%
    ggplot(aes(
        x = "",
        y = statistic,
        ymin = conf.low,
        ymax = conf.high
    )) +
    geom_pointrange() +
    geom_point(size = 3) + 
    scale_y_continuous(limits = c(1, 5), breaks = seq(1,5,0.2)) +
    labs(x = "A", 
         y = "")

B. Estimar o esforço e tempo de histórias de usuário

Resultados sobre a mitigação do problema de “Estimar o esforço e tempo de histórias de usuário” utilizando gamificação inferida da população.

theta_f = function(d, i){
    d %>% 
        slice(i) %>% 
        summarise(media_gamificacao_b = mean(gamificacao_b)) %>% 
        pull(media_gamificacao_b)
}

theta_c = theta_f(dados_agil, 1:NROW(dados_agil))
cigb = dados_agil %>% 
    boot(statistic = theta_f, 
         R = 4000) %>%
    tidy(conf.level = 0.95, 
         method = "bca",
         conf.int = TRUE)

cigb
## # A tibble: 1 x 5
##   statistic    bias std.error conf.low conf.high
##       <dbl>   <dbl>     <dbl>    <dbl>     <dbl>
## 1      3.39 0.00149     0.104     3.18      3.59
grafico_cigb = cigb %>%
    ggplot(aes(
        x = "",
        y = statistic,
        ymin = conf.low,
        ymax = conf.high
    )) +
    geom_pointrange() +
    geom_point(size = 3) +
    scale_y_continuous(limits = c(1, 5), breaks = seq(1,5,0.2)) +
    labs(x = "B", 
         y = "")

C. Dividir épicos (histórias muito grandes) em histórias menores

Resultados sobre a mitigação do problema de “Dividir épicos (histórias muito grandes) em histórias menores” utilizando gamificação inferida da população.

theta_f = function(d, i){
    d %>% 
        slice(i) %>% 
        summarise(media_gamificacao_c = mean(gamificacao_c)) %>% 
        pull(media_gamificacao_c)
}

theta_c = theta_f(dados_agil, 1:NROW(dados_agil))
cigc = dados_agil %>% 
    boot(statistic = theta_f, 
         R = 4000) %>%
    tidy(conf.level = 0.95, 
         method = "bca",
         conf.int = TRUE)

cigc
## # A tibble: 1 x 5
##   statistic    bias std.error conf.low conf.high
##       <dbl>   <dbl>     <dbl>    <dbl>     <dbl>
## 1      2.97 0.00165     0.123     2.73      3.21
grafico_cigc = cigc %>%
    ggplot(aes(
        x = "",
        y = statistic,
        ymin = conf.low,
        ymax = conf.high
    )) +
    geom_pointrange() +
    geom_point(size = 3) + 
    scale_y_continuous(limits = c(1, 5), breaks = seq(1,5,0.2)) +
    labs(x = "C", 
         y = "")

D. Avaliar a qualidade do código feita por um time de desenvolvimento que utiliza metodologia ágil

Resultados sobre a mitigação do problema de “Avaliar a qualidade do código feita por um time de desenvolvimento que utiliza metodologia ágil” utilizando gamificação inferida da população.

theta_f = function(d, i){
    d %>% 
        slice(i) %>% 
        summarise(media_gamificacao_d = mean(gamificacao_d)) %>% 
        pull(media_gamificacao_d)
}

theta_c = theta_f(dados_agil, 1:NROW(dados_agil))
cigd = dados_agil %>% 
    boot(statistic = theta_f, 
         R = 4000) %>%
    tidy(conf.level = 0.95, 
         method = "bca",
         conf.int = TRUE)

cigd
## # A tibble: 1 x 5
##   statistic     bias std.error conf.low conf.high
##       <dbl>    <dbl>     <dbl>    <dbl>     <dbl>
## 1      3.24 -0.00160     0.101     3.04      3.44
grafico_cigd= cigd %>%
    ggplot(aes(
        x = "",
        y = statistic,
        ymin = conf.low,
        ymax = conf.high
    )) +
    geom_pointrange() +
    geom_point(size = 3) +
    scale_y_continuous(limits = c(1, 5), breaks = seq(1,5,0.2)) +
    labs(x = "D", 
         y = "")

E. Validação, por parte do usuário, do que foi feito pelo time de desenvolvimento, antes da implantação do sistema

Resultados sobre a mitigação do problema de “Validação, por parte do usuário, do que foi feito pelo time de desenvolvimento, antes da implantação do sistema” utilizando gamificação inferida da população.

theta_f = function(d, i){
    d %>% 
        slice(i) %>% 
        summarise(media_gamificacao_e = mean(gamificacao_e)) %>% 
        pull(media_gamificacao_e)
}

theta_c = theta_f(dados_agil, 1:NROW(dados_agil))

theta_c
## [1] 3.579832
cige = dados_agil %>% 
    boot(statistic = theta_f, 
         R = 4000) %>%
    tidy(conf.level = 0.95, 
         method = "bca",
         conf.int = TRUE)

cige
## # A tibble: 1 x 5
##   statistic     bias std.error conf.low conf.high
##       <dbl>    <dbl>     <dbl>    <dbl>     <dbl>
## 1      3.58 -0.00235     0.105     3.36      3.77
grafico_cige = cige %>%
    ggplot(aes(
        x = "",
        y = statistic,
        ymin = conf.low,
        ymax = conf.high,
    )) +
    geom_pointrange() +
    geom_point(size = 3) + 
    scale_y_continuous(limits = c(1, 5), breaks = seq(1,5,0.2)) +
    labs(x = "E", 
         y = "")

Gráfico

Pode-se observar o gráfico já com os intervalos de confiança sobre a mitigação de todos os problemas apresentados utilizando gamificação.

grid.arrange(grafico_ciga, grafico_cigb, grafico_cigc, grafico_cigd, grafico_cige, ncol = 5)

Escolha do problema mais importante

# menos experiente, desenvolvedor, comercial
dados_expmenor_dev_com = dados_agil %>% 
  filter(anos_agil <= 3, 
         papel_agil %like% "Membro do time de desenvolvimento", 
         area_agil %like% "Área Comercial")

# mais de 3 anos de experiencia AND desenvolvedor AND comercial
dados_expmaior_dev_com = dados_agil %>%
                filter(anos_agil > 3) %>%
                filter(papel_agil %like% "Membro do time de desenvolvimento") %>%
                filter(area_agil %like% "Área Comercial")

dados_expmaior_dev_com2 = filter(dados_agil,
                                 anos_agil > 3 &
                                   papel_agil %like% "Membro do time de desenvolvimento" &
                                    area_agil %like% "Comercial")
# Multiple arguments are equivalent to and
#OU: filter(dados_agil, anos_agil > 3, area_agil %like% "Comercial") 

glimpse(dados_expmaior_dev_com)
## Observations: 29
## Variables: 17
## $ trabalhou_agil   <chr> "Sim", "Sim", "Sim", "Sim", "Sim", "Sim", "Sim"…
## $ anos_agil        <dbl> 7.0, 5.0, 5.0, 8.0, 6.0, 8.0, 3.5, 5.0, 4.0, 4.…
## $ papel_agil       <chr> "Membro do time de desenvolvimento", "SM - Scru…
## $ area_agil        <chr> "Área Comercial (de uma fábrica de software)", …
## $ agil_a           <dbl> 3, 5, 3, 4, 2, 3, 2, 3, 3, 3, 5, 3, 3, 3, 4, 4,…
## $ agil_b           <dbl> 3, 5, 3, 4, 2, 3, 4, 4, 3, 3, 5, 4, 2, 5, 4, 4,…
## $ agil_c           <dbl> 4, 2, 2, 4, 3, 2, 3, 2, 4, 4, 4, 2, 1, 3, 4, 2,…
## $ agil_d           <dbl> 4, 3, 2, 4, 3, 2, 2, 4, 4, 2, 2, 1, 3, 4, 5, 3,…
## $ agil_e           <dbl> 5, 3, 3, 4, 2, 3, 1, 2, 2, 3, 3, 1, 1, 3, 2, 3,…
## $ agil_f           <chr> NA, "Reduzir escopo do projeto em relação a exp…
## $ gamificacao_a    <dbl> 5, 3, 5, 4, 4, 2, 4, 5, 3, 2, 3, 4, 2, 4, 4, 2,…
## $ gamificacao_b    <dbl> 4, 2, 4, 3, 4, 2, 3, 4, 5, 2, 3, 2, 5, 2, 4, 3,…
## $ gamificacao_c    <dbl> 3, 2, 4, 4, 3, 2, 3, 4, 1, 4, 3, 3, 2, 4, 4, 2,…
## $ gamificacao_d    <dbl> 1, 2, 2, 3, 3, 2, 2, 4, 2, 4, 2, 3, 4, 1, 5, 3,…
## $ gamificacao_e    <dbl> 5, 2, 3, 4, 3, 1, 2, 3, 4, 3, 4, 4, 1, 4, 2, 3,…
## $ gamificacao_f    <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ tipo_experiencia <chr> "mais experientes", "mais experientes", "mais e…
glimpse(dados_expmaior_dev_com2)
## Observations: 29
## Variables: 17
## $ trabalhou_agil   <chr> "Sim", "Sim", "Sim", "Sim", "Sim", "Sim", "Sim"…
## $ anos_agil        <dbl> 7.0, 5.0, 5.0, 8.0, 6.0, 8.0, 3.5, 5.0, 4.0, 4.…
## $ papel_agil       <chr> "Membro do time de desenvolvimento", "SM - Scru…
## $ area_agil        <chr> "Área Comercial (de uma fábrica de software)", …
## $ agil_a           <dbl> 3, 5, 3, 4, 2, 3, 2, 3, 3, 3, 5, 3, 3, 3, 4, 4,…
## $ agil_b           <dbl> 3, 5, 3, 4, 2, 3, 4, 4, 3, 3, 5, 4, 2, 5, 4, 4,…
## $ agil_c           <dbl> 4, 2, 2, 4, 3, 2, 3, 2, 4, 4, 4, 2, 1, 3, 4, 2,…
## $ agil_d           <dbl> 4, 3, 2, 4, 3, 2, 2, 4, 4, 2, 2, 1, 3, 4, 5, 3,…
## $ agil_e           <dbl> 5, 3, 3, 4, 2, 3, 1, 2, 2, 3, 3, 1, 1, 3, 2, 3,…
## $ agil_f           <chr> NA, "Reduzir escopo do projeto em relação a exp…
## $ gamificacao_a    <dbl> 5, 3, 5, 4, 4, 2, 4, 5, 3, 2, 3, 4, 2, 4, 4, 2,…
## $ gamificacao_b    <dbl> 4, 2, 4, 3, 4, 2, 3, 4, 5, 2, 3, 2, 5, 2, 4, 3,…
## $ gamificacao_c    <dbl> 3, 2, 4, 4, 3, 2, 3, 4, 1, 4, 3, 3, 2, 4, 4, 2,…
## $ gamificacao_d    <dbl> 1, 2, 2, 3, 3, 2, 2, 4, 2, 4, 2, 3, 4, 1, 5, 3,…
## $ gamificacao_e    <dbl> 5, 2, 3, 4, 3, 1, 2, 3, 4, 3, 4, 4, 1, 4, 2, 3,…
## $ gamificacao_f    <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ tipo_experiencia <chr> "mais experientes", "mais experientes", "mais e…
###
# # formatacao na tabela
# # kableExtra
# kableExtra::kable(dados_expmaior_dev_com, "html") %>%
#   kableExtra::kable_styling(
#     bootstrap_options = c("striped", "hover", "condensed", "responsive"),
#                             fixed_thead = T)

# DT
DT::datatable(dados_expmaior_dev_com, 
          extensions = c('FixedColumns',"FixedHeader"),
          options = list(scrollX = TRUE,
                         scrollY = TRUE,
                         paging=TRUE,
                         pageLength = 3, 
                         autoWidth = TRUE,
                         searching=FALSE,
                         fixedHeader=TRUE))
# 
# DT::datatable(dados_expmaior_dev_com2, 
#           extensions = c('FixedColumns',"FixedHeader"),
#           options = list(scrollX = FALSE,
#                          scrollY = FALSE,
#                          paging=TRUE,
#                          pageLength = 3, 
#                          autoWidth = TRUE,
#                          searching=FALSE,
#                          fixedHeader=TRUE))
###

summary(dados_expmaior_dev_com)
##  trabalhou_agil       anos_agil      papel_agil         area_agil        
##  Length:29          Min.   :3.500   Length:29          Length:29         
##  Class :character   1st Qu.:4.000   Class :character   Class :character  
##  Mode  :character   Median :6.000   Mode  :character   Mode  :character  
##                     Mean   :5.741                                        
##                     3rd Qu.:7.000                                        
##                     Max.   :9.000                                        
##      agil_a          agil_b          agil_c          agil_d     
##  Min.   :1.000   Min.   :1.000   Min.   :1.000   Min.   :1.000  
##  1st Qu.:2.000   1st Qu.:2.000   1st Qu.:1.000   1st Qu.:2.000  
##  Median :3.000   Median :3.000   Median :2.000   Median :3.000  
##  Mean   :2.862   Mean   :3.069   Mean   :2.172   Mean   :3.034  
##  3rd Qu.:3.000   3rd Qu.:4.000   3rd Qu.:3.000   3rd Qu.:4.000  
##  Max.   :5.000   Max.   :5.000   Max.   :4.000   Max.   :5.000  
##      agil_e         agil_f          gamificacao_a   gamificacao_b  
##  Min.   :1.000   Length:29          Min.   :1.000   Min.   :1.000  
##  1st Qu.:3.000   Class :character   1st Qu.:2.000   1st Qu.:2.000  
##  Median :3.000   Mode  :character   Median :3.000   Median :3.000  
##  Mean   :3.586                      Mean   :3.069   Mean   :2.655  
##  3rd Qu.:5.000                      3rd Qu.:4.000   3rd Qu.:3.000  
##  Max.   :5.000                      Max.   :5.000   Max.   :5.000  
##  gamificacao_c   gamificacao_d   gamificacao_e   gamificacao_f     
##  Min.   :1.000   Min.   :1.000   Min.   :1.000   Length:29         
##  1st Qu.:1.000   1st Qu.:2.000   1st Qu.:3.000   Class :character  
##  Median :2.000   Median :3.000   Median :4.000   Mode  :character  
##  Mean   :2.172   Mean   :2.793   Mean   :3.862                     
##  3rd Qu.:3.000   3rd Qu.:3.000   3rd Qu.:5.000                     
##  Max.   :4.000   Max.   :5.000   Max.   :5.000                     
##  tipo_experiencia  
##  Length:29         
##  Class :character  
##  Mode  :character  
##                    
##                    
## 
# funcoes extras para skim
funs <- list(cv = function(x) sd(x, na.rm = TRUE) / mean(x, na.rm = TRUE))
variancia <- list(variancia = function(x) var(x))
moda <- list(moda = function(x) getModa2(x))

# append adiciona as suas funcoes nas existentes
skim_with(numeric = funs, append = TRUE)
skim_with(numeric = variancia, append = TRUE)
skim_with(numeric = moda, append = TRUE)

# retirar histograma
skim_with(numeric = list(hist = NULL))

skimr::skim(dados_expmaior_dev_com)
## Skim summary statistics
##  n obs: 29 
##  n variables: 17 
## 
## ── Variable type:character ───────────────────────────────────────────────────────────────────────────────────────
##          variable missing complete  n min max empty n_unique
##            agil_f      26        3 29  62 163     0        3
##         area_agil       0       29 29  43  68     0        2
##     gamificacao_f      29        0 29  NA  NA     0        0
##        papel_agil       0       29 29  33  70     0        4
##  tipo_experiencia       0       29 29  16  16     0        1
##    trabalhou_agil       0       29 29   3   3     0        1
## 
## ── Variable type:numeric ─────────────────────────────────────────────────────────────────────────────────────────
##       variable missing complete  n mean   sd  p0 p25 p50 p75 p100   cv
##         agil_a       0       29 29 2.86 1.06 1     2   3   3    5 0.37
##         agil_b       0       29 29 3.07 1.1  1     2   3   4    5 0.36
##         agil_c       0       29 29 2.17 1.2  1     1   2   3    4 0.55
##         agil_d       0       29 29 3.03 0.91 1     2   3   4    5 0.3 
##         agil_e       0       29 29 3.59 1.45 1     3   3   5    5 0.4 
##      anos_agil       0       29 29 5.74 1.5  3.5   4   6   7    9 0.26
##  gamificacao_a       0       29 29 3.07 1.19 1     2   3   4    5 0.39
##  gamificacao_b       0       29 29 2.66 1.2  1     2   3   3    5 0.45
##  gamificacao_c       0       29 29 2.17 1.23 1     1   2   3    4 0.56
##  gamificacao_d       0       29 29 2.79 1.11 1     2   3   3    5 0.4 
##  gamificacao_e       0       29 29 3.86 1.3  1     3   4   5    5 0.34
##  variancia moda m_ajust
##       1.12    3    3.21
##       1.21    3    3.71
##       1.43    1    3.11
##       0.82    3    2.49
##       2.11    5    7.56
##       2.26    6   12.98
##       1.42    3    4.37
##       1.45    3    3.85
##       1.5     1    3.27
##       1.24    3    3.47
##       1.69    5    6.54

Correlação entre mitigação do problema com gamificação e dificuldade do problema

Um pouco de teoria…

O coeficiente de correlação assume valores entre -1 e 1. O significado é:

Alguns tipos de coeficientes de correlação:

Calcularemos os 3 tipos de coeficientes neste trabalho para saber se há correlação entre a dificuldade do problema e o potencial de mitigação desse problema utilizando gamificação.

Problema A x Gamificação A

  1. Criar boas histórias de usuário
# geral
dados_agil %>% 
  summarise(pearson = cor(agil_a, gamificacao_a, method = "pearson"), 
            spearman = cor(agil_a, gamificacao_a, method = "spearman"), 
            kendall = cor(agil_a, gamificacao_a, method = "kendall"), )
## # A tibble: 1 x 3
##   pearson spearman kendall
##     <dbl>    <dbl>   <dbl>
## 1   0.148   0.0992  0.0785
# mais experiente, desenvolvedor, comercial
dados_expmaior_dev_com %>%
  summarise(pearson = cor(agil_a, gamificacao_a, method = "pearson"), 
            spearman = cor(agil_a, gamificacao_a, method = "spearman"), 
            kendall = cor(agil_a, gamificacao_a, method = "kendall"), )
## # A tibble: 1 x 3
##   pearson spearman kendall
##     <dbl>    <dbl>   <dbl>
## 1   0.262    0.199   0.164
# menos experiente, desenvolvedor, comercial
dados_expmenor_dev_com %>%
  summarise(pearson = cor(agil_a, gamificacao_a, method = "pearson"), 
            spearman = cor(agil_a, gamificacao_a, method = "spearman"), 
            kendall = cor(agil_a, gamificacao_a, method = "kendall"), )
## # A tibble: 1 x 3
##   pearson spearman kendall
##     <dbl>    <dbl>   <dbl>
## 1   0.254    0.250   0.207
# # geral
# dados_agil %>% 
#   summarise(pearson = cor(gamificacao_a, agil_a, method = "pearson"), 
#             spearman = cor(gamificacao_a, agil_a, method = "spearman"), 
#             kendall = cor(gamificacao_a, agil_a, method = "kendall"), )
# 
# # mais experiente, desenvolvedor, comercial
# dados_expmaior_dev_com %>%
#   summarise(pearson = cor(gamificacao_a, agil_a, method = "pearson"), 
#             spearman = cor(gamificacao_a, agil_a, method = "spearman"), 
#             kendall = cor(gamificacao_a, agil_a, method = "kendall"), )
# 
# # menos experiente, desenvolvedor, comercial
# dados_expmenor_dev_com %>%
#   summarise(pearson = cor(gamificacao_a, agil_a, method = "pearson"), 
#             spearman = cor(gamificacao_a, agil_a, method = "spearman"), 
#             kendall = cor(gamificacao_a, agil_a, method = "kendall"), )

Problema B x Gamificação B

  1. Estimar o esforço e tempo de histórias de usuário
# geral
dados_agil %>% 
  summarise(pearson = cor(agil_b, gamificacao_b, method = "pearson"), 
            spearman = cor(agil_b, gamificacao_b, method = "spearman"), 
            kendall = cor(agil_b, gamificacao_b, method = "kendall"), )
## # A tibble: 1 x 3
##   pearson spearman kendall
##     <dbl>    <dbl>   <dbl>
## 1   0.355    0.338   0.290
# mais experiente, desenvolvedor, comercial
dados_expmaior_dev_com %>%
  summarise(pearson = cor(agil_b, gamificacao_b, method = "pearson"), 
            spearman = cor(agil_b, gamificacao_b, method = "spearman"), 
            kendall = cor(agil_b, gamificacao_b, method = "kendall"), )
## # A tibble: 1 x 3
##   pearson spearman kendall
##     <dbl>    <dbl>   <dbl>
## 1  0.0996    0.122  0.0909
# menos experiente, desenvolvedor, comercial
dados_expmenor_dev_com %>%
  summarise(pearson = cor(agil_b, gamificacao_b, method = "pearson"), 
            spearman = cor(agil_b, gamificacao_b, method = "spearman"), 
            kendall = cor(agil_b, gamificacao_b, method = "kendall"), )
## # A tibble: 1 x 3
##   pearson spearman kendall
##     <dbl>    <dbl>   <dbl>
## 1   0.477    0.504   0.440

Problema C x Gamificação C

  1. Dividir épicos (histórias muito grandes) em histórias menores
# geral 
dados_agil %>% 
  summarise(pearson = cor(agil_c, gamificacao_c, method = "pearson"), 
            spearman = cor(agil_c, gamificacao_c, method = "spearman"), 
            kendall = cor(agil_c, gamificacao_c, method = "kendall"), )
## # A tibble: 1 x 3
##   pearson spearman kendall
##     <dbl>    <dbl>   <dbl>
## 1   0.499    0.452   0.379
# mais experiente, desenvolvedor, comercial
dados_expmaior_dev_com %>%
  summarise(pearson = cor(agil_c, gamificacao_c, method = "pearson"), 
            spearman = cor(agil_c, gamificacao_c, method = "spearman"), 
            kendall = cor(agil_c, gamificacao_c, method = "kendall"), )
## # A tibble: 1 x 3
##   pearson spearman kendall
##     <dbl>    <dbl>   <dbl>
## 1   0.684    0.718   0.649
# menos experiente, desenvolvedor, comercial
dados_expmenor_dev_com %>%
  summarise(pearson = cor(agil_c, gamificacao_c, method = "pearson"), 
            spearman = cor(agil_c, gamificacao_c, method = "spearman"), 
            kendall = cor(agil_c, gamificacao_c, method = "kendall"), )
## # A tibble: 1 x 3
##   pearson spearman kendall
##     <dbl>    <dbl>   <dbl>
## 1   0.482    0.435   0.347

Problema D x Gamificação D

  1. Avaliar a qualidade do código feita por um time de desenvolvimento que utiliza metodologia ágil
# geral
dados_agil %>% 
  summarise(pearson = cor(agil_d, gamificacao_d, method = "pearson"), 
            spearman = cor(agil_d, gamificacao_d, method = "spearman"), 
            kendall = cor(agil_d, gamificacao_d, method = "kendall"), )
## # A tibble: 1 x 3
##   pearson spearman kendall
##     <dbl>    <dbl>   <dbl>
## 1   0.209    0.195   0.167
# mais experiente, desenvolvedor, comercial
dados_expmaior_dev_com %>%
  summarise(pearson = cor(agil_d, gamificacao_d, method = "pearson"), 
            spearman = cor(agil_d, gamificacao_d, method = "spearman"), 
            kendall = cor(agil_d, gamificacao_d, method = "kendall"), )
## # A tibble: 1 x 3
##   pearson spearman kendall
##     <dbl>    <dbl>   <dbl>
## 1   0.149    0.118   0.113
# menos experiente, desenvolvedor, comercial
dados_expmenor_dev_com %>%
  summarise(pearson = cor(agil_d, gamificacao_d, method = "pearson"), 
            spearman = cor(agil_d, gamificacao_d, method = "spearman"), 
            kendall = cor(agil_d, gamificacao_d, method = "kendall"), )
## # A tibble: 1 x 3
##   pearson spearman kendall
##     <dbl>    <dbl>   <dbl>
## 1   0.178    0.172   0.148

Problema E x Gamificação E

  1. Validação, por parte do usuário, do que foi feito pelo time de desenvolvimento, antes da implantação do sistema
# geral
dados_agil %>%
  summarise(pearson = cor(agil_e, gamificacao_e, method = "pearson"), 
            spearman = cor(agil_e, gamificacao_e, method = "spearman"), 
            kendall = cor(agil_e, gamificacao_e, method = "kendall"), )
## # A tibble: 1 x 3
##   pearson spearman kendall
##     <dbl>    <dbl>   <dbl>
## 1   0.414    0.425   0.346
# mais experiente, desenvolvedor, comercial
dados_expmaior_dev_com %>%
  summarise(pearson = cor(agil_e, gamificacao_e, method = "pearson"), 
            spearman = cor(agil_e, gamificacao_e, method = "spearman"), 
            kendall = cor(agil_e, gamificacao_e, method = "kendall"), )
## # A tibble: 1 x 3
##   pearson spearman kendall
##     <dbl>    <dbl>   <dbl>
## 1   0.800    0.882   0.783
# menos experiente, desenvolvedor, comercial
dados_expmenor_dev_com %>%
  summarise(pearson = cor(agil_e, gamificacao_e, method = "pearson"), 
            spearman = cor(agil_e, gamificacao_e, method = "spearman"), 
            kendall = cor(agil_e, gamificacao_e, method = "kendall"), )
## # A tibble: 1 x 3
##   pearson spearman kendall
##     <dbl>    <dbl>   <dbl>
## 1   0.369    0.391   0.310