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…
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
##
##
##
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)
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:
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.
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:
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))
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)
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
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.
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:
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)
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)
Considerando que os papeis que podem ser exercidos em metodologias ágeis são os seguintes:
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.
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)
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)
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)
Considerando que as áreas em que os participantes atuaram poderiam ser as seguintes:
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.
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)
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)
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.
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)
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)
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 = "")
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)
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)
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)
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)
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)
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)
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)
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)
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)
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).
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
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")
A seguir faremos a inferência estatística para cada um dos problemas na população total.
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 = "")
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 = "")
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 = "")
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 = "")
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 = "")
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)
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.
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 = "")
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 = "")
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 = "")
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 = "")
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 = "")
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)
# 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
Um pouco de teoria…
O coeficiente de correlação assume valores entre -1 e 1. O significado é:
Alguns tipos de coeficientes de correlação:
Pearson: O coeficiente de correlação de Pearson (r) ou coeficiente de correlação produto-momento ou o r de Pearson mede o grau da correlação linear entre duas variáveis quantitativas. É um índice adimensional com valores situados ente -1,0 e 1.0 inclusive, que reflete a intensidade de uma relação linear entre dois conjuntos de dados.
Spearman: O coeficiente de correlação de postos de Spearman, denominado pela letra grega ρ (rho), é uma medida de correlação não-paramétrica. Ao contrário do coeficiente de correlação de Pearson não requer a suposição que a relação entre as variáveis é linear, nem requer que as variáveis sejam quantitativas; pode ser usado para as variáveis medidas no nível ordinal.
Kendall: O coeficiente de correlação por postos de Kendall, τ (tau) é uma medida de associação para variáveis ordinais. Uma vantagem de τ sobre o coeficiente de Spearman é que τ pode ser generalizado para um coeficiente de correlação parcial.
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.
# 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"), )
# 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
# 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
# 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
# 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