SlideShare une entreprise Scribd logo
1  sur  66
Como a prática deTDD influencia no
projeto de classes em sistemas
orientados a objetos
Mauricio FinavaroAniche
Orientador: Prof. Dr. Marco Aurélio Gerosa
Agenda
 DesenvolvimentoGuiado porTestes (TDD)
 Motivação da Pesquisa
 Planejamento e Execução do Estudo
 Trabalhos Relacionados
 AnáliseQuantitativa
 AnáliseQualitativa e Padrões de Feedback
 Ameaças aValidade
 Conclusões
 Agradecimentos
2
TDD
 Popularizado por Kent Beck [Bec04], a prática sugere ao
desenvolvedor que escreva o código de teste antes do código
de produção.
 Ciclo em 5 etapas: escreva um teste que falha, veja-o
falhar, faça o teste passar da maneira mais simples
possível, veja-o passar, refatora para remover duplicação de
dados e código.
3
Efeitos da prática
 É comum relacionar a prática deTDD com efeitos positivos
na qualidade externa do software.
 Muitos trabalhos nem mencionam possíveis efeitos da prática
no projeto de classes.
 Mas muitos autores também afirmam que a prática pode
influenciar positivamente no projeto de classes
[Bec02], [Mar6], [eNP09], [Ast03].
 Grande parte delas se baseia na ideia de que uma classe difícil
de ser testada, é uma classe que possivelmente apresenta
problemas de projeto.
4
Popularidade da prática
 Questionários feitos porWambler [Wam10] mostram o
crescimento na adoção da prática por parte da indústria.
 Empiricamente, notamos também o crescimento pela busca
sobre o assunto em eventos ágeis.
5
Motivação
 Apesar dos ditos efeitos da prática sobre o projeto de classes,
na verdade pouco se sabe sobre eles.
 Fizemos um estudo qualitativo dentro de um evento ágil, e
percebemos que os desenvolvedores não souberam afirmar
com segurança como a prática deTDD influenciava nos projetos
de classe.
 Dado a crescente adoção da prática, é importante entender
não só se a prática influencia, mas também como se dá essa
influência.
6
Caracterização da Pesquisa
 Este trabalho visa entender a influência da prática deTDD no
projeto de classes.
 A análise se baseou na percepção de programadores atuantes
na indústria brasileira de desenvolvimento de software.
 Todos eles resolveram um conjunto de problemas em Java,
utilizando ou nãoTDD.
 Em seguida, análises quantitativa e qualitativa ajudaram a
entender os efeitos da prática.
7
Objetivo da Pesquisa
 O objetivo principal: entender a relação da prática deTDD e
as decisões de projeto de classes tomados pelo
desenvolvedor.
 Qual a influência da prática deTDD no projeto de classes?
 Qual a relação entreTDD e as decisões de projeto feitas por um
desenvolvedor?
 Como a prática deTDD influencia o programador no projeto de
classes, do ponto de vista do acoplamento, coesão e
complexidade?
8
Contribuições da Pesquisa
 Padrões de feedback da prática deTDD que guiam os
desenvolvedores ao longo do projeto de classes.
 Protocolo de um estudo qualitativo sobre os efeitos da
prática, bem como um conjunto de lições aprendidas.
9
Trabalhos Relacionados
10
Discussão
 Pouco são os trabalhos que avaliam os efeitos da prática no
projeto de classes.
 E quando o fazem, apenas verificam se “existe algum efeito”.
 Não discutem exatamente como isso acontece.
 Também não levam em conta a experiência no desenvolvedor
(grande parte dos estudos foram feitos com estudantes).
 Josefsson [Jos04] comenta que os estudos encontrados na
literatura são muito limitados e pouco generalizáveis.
11
Posição desta pesquisa na literatura
12
Planejamento do Estudo
 Conduzir um estudo experimental em engenharia de
software sempre foi uma atividade difícil.
 Hoje tem-se considerado melhor a influência de projetos não-
técnicos.
 Dado a complexidade do problema a ser estudado, optamos
por uma pesquisa essencialmente qualitativa.
13
Estudos qualitativos
 Pesquisador como instrumento chave da pesquisa.
 Múltiplas fontes de dados.
 Análise de dados indutiva.
 Visão do participante levada em consideração.
 Interpretativa.
14
Projeto da pesquisa
 Participantes foram convidados a resolver problemas em
Java, usando ou não a prática deTDD.
 A partir dos dados colhidos (questionários e métrica de
código), entrevistamos alguns desses participantes.
 Com esses dados em mãos, utilizamos técnicas baseadas em
GroundedTheory para analisar os dados.
15
Participantes da Pesquisa
 Foram avaliados de acordo com os seguintes critérios:
 Experiência emTDD.
 Experiência e Desenvolvimento de Software.
 Conhecimentos em Java.
 Conhecimentos deTestes de Unidade.
 Essas informações foram avaliadas a partir de um
questionário, que continha questões abertas e fechadas.
16
Execução do Estudo
 Participantes tem 2 horas para resolver 2 problemas.
 Um deles usandoTDD; outro não.
 A ordem dos exercícios e da obrigatoriedade do uso da prática
foram randomizados.
 Ao final do estudo, respondem um questionário sobre suas as
impressões da prática deTDD.
 Perguntas sobre a qualidade do código produzido e do possível
efeito da prática deTDD sobre o código gerado.
17
Problemas Propostos
 Baseados em workshop dado naAgile Brazil e no IME/USP.
 Ao total, mais de 100 pessoas participaram.
 No exercício 1, o participante deve implementar uma calculadora
de salário, que varia de acordo com o cargo do participante.
 No exercício 2, o participante deve fazer com que uma nota fiscal
gerada seja enviada para diversos sistemas externos.
 No exercício 3, o participante deve fazer uma modificação em um
sistema de pagamento de boletos.
 No exercício 4, o participante implementa uma sequência de filtros
de faturas.
18
Escolha de candidatos para entrevista
 Os dados foram parcialmente analisados.
 Leitura dos questionários inicial e pós-experimento.
 Avaliação do código gerado com e sem a prática deTDD
(princípios SOLID foram utilizados).
 Candidatos que apresentaram alguma divergência no que
escreveram e no que produziram, foram selecionados.
 Apesar do processo, a avaliação do código gerado reflete o
ponto de vista do pesquisador.
19
Entrevista
 Entrevista semi-estruturada.
 O foco era descobrir como a prática deTDD influencia o
programador no projeto de classes.
 Sempre que algum ponto era mencionado, eu anotava e depois
retomava o ponto para discuti-lo mais a fundo, isoladamente.
 Foram gravadas, de maneira a possibilitar que os dados
fossem revistos a qualquer momento.
20
Métricas de Código
 Métricas conhecidas pela academia.
 Complexidade ciclomática
 Fan-Out
 Falta de coesão dos métodos (LCOM)
 Quantidade de linhas por método
 Quantidade de métodos
 Ferramenta de cálculo de métrica implementada.
21
Avaliação do Especialista
 Especialistas foram convidados a avaliar os código-fonte
gerados.
 Avaliaram em diferentes categorias:
 Simplicidade
 Testabilidade
 Qualidade do Projeto de Classes
 Especialistas não sabiam quais códigos foram escritos com o
uso da prática deTDD.
 Ferramenta escrita para capturar avaliação.
22
Validade e confiabilidade do estudo
 Revisão das transcrições.
 Verificação de pesquisador auxiliar.
 Rastreabilidade dos dados.
 Triangulação de diferentes fontes de dados.
 Esclarecer os possíveis vieses do estudo.
23
Estudo piloto
 Três pilotos foram executados.
 Na primeira execução, descobrimos que 4 exercícios em 2 horas
não era factível.
 Na segunda execução, o participante teve dificuldades em
montar o ambiente. Um caderno junto com um pacote com área
de trabalho pronta no Eclipse foi criado.
 No terceiro, melhoramos o roteiro de entrevista, ao
percebermos diversas perguntas repetidas.
24
Execução do Estudo
 Ao todo, tivemos 25 participantes de 6 diferentes empresas.
 A grande maioria não era experiente emTDD (40% deles
afirmam que começaram usar a prática apenas no último ano, e
52% deles entre 1 e 3 anos).
 24% desenvolve software entre 4 a 5 anos. 28% deles faz isso
entre 6 a 10 anos.
 64% utilizam Java no dia a dia, mas todos afirmam conhecer
Junit.
 64% deles utilizam objetos dublês.
25
Na academia
 21 estudantes do IME/USP.
 Surpreendentemente, 90% afirmam não conhecer Java.
 61% não conheciamTDD e 76% conhecem objetos dublês na
teoria.
 Por causa desses números, nenhum participante da academia
foi selecionado para a entrevista.
26
Análise Quantitativa
 O teste estatístico escolhido foiWilcoxon.
 Classes e métodos separados em 2 grupos: produzidos com e
semTDD.
 Olhamos apenas para o “lado” onde supostamente códigos
produzidos comTDD possuem valores de métricas menores que
os códigos produzidos semTDD.
27
Métricas de código na indústria
28
Métricas de código na academia
29
Relação com Experiência
 Ao separarmos os códigos produzidos de acordo com a
experiência do participante, percemos que ela não fez
diferença na qualidade do código gerado.
 Com exceção da falta de coesão dos métodos, que apresentou
diferença no grupo que era experiente tanto em
desenvolvimento de software quanto emTDD.
30
Avaliação dos especialistas na indústria
31
Avaliação dos especialistas na academia
32
Discussão
 Não foram encontradas diferenças entre os códigos
produzidos com e semTDD, do ponto de vista das métricas
de código e dos especialistas convidados.
 Os motivos disso precisam ser entendidos.
33
Análise Qualitativa
 Participantes, em sua maioria, afirmaram que a prática de
TDD não teria feito qualquer diferença no código gerado.
 A principal justificativa foi a de que a experiência e
conhecimento em orientação a objetos os guiaram durante a
resolução dos exercícios.
 Dois exemplos foram dados pelos participantes.
 Um deles comentou que fez uso de um Padrão de Projeto que
aprendera dias antes.
 Outro comentou que seus estudos sobre os princípios SOLID lhe
ajudaram.
34
Efeitos na qualidade externa
 Segundo eles,TDD tem efeitos na qualidade externa do
sistema.
35
Efeitos na qualidade interna
 Apesar de afirmarem queTDD não faria diferença no código,
todos eles afirmaram que enxergam benefícios no projeto de
classes quando usamTDD.
 Segundo eles, o ideal é unir a prática deTDD com a experiência.
36
Segurança na refatoração
 11 participantes afirmaram que os testes gerados durante a
prática dão segurança para refatorar código.
 Um participante inclusive mencionou uma experiência real.
 Experiência foi novamente mencionada.
37
Passos menores e simplicidade
 TDD sugere passos de bebê.
 Oito participantes afirmaram que tomar passos menores lhes
ajudam a pensar melhor no projeto de classes.
 Um deles afirmou que a ideia de ter um objetivo mais
curto, aumenta o foco.
38
Espaço para pensar
 Testes são como “folha de rascunho”, onde o desenvolvedor
pode pensar melhor sobre o projeto de classes.
 Segundo eles, quando não fazemTDD, eles estão tão focados
no código que estão escrevendo que acabam por não pensar no
projeto de classes.
39
Feedback mais rápido
 Praticantes afirmaram queTDD dá feedback constante ao
desenvolvedor.
40
Busca pela testabilidade
 Muitos afirmaram que a grande maneira na qual a prática
influencia no projeto de classes é observando a relação entre
código difícil de testar e um projeto de classes com
problemas.
 Código mais fácil de invocar.
 Código menos acoplado.
 Código mais simples.
41
Padrões de Feedback
 Levantamos um conjunto de padrões de feedback que a
prática deTDD pode dar ao desenvolvedor.
 Alguns deles vão de encontro ao que outros autores já
comentaram.
 Esses padrões foram separados em:
 Padrões de Acoplamento.
 Padrões de Coesão.
 Padrões de Falta de Abstração.
42
Padrões ligados à coesão
 MuitosTestes para um Método.
 MuitosTestes para uma Classe.
 Cenário Muito Grande.
 Testes Em Método Que Não É Público.
43
MuitosTestes Para um Método
 Quando um único método necessita de diversos testes para
garantir seu comportamento, o método em questão
provavelmente é complexo e/ou possui diversas
responsabilidades. Códigos assim possuem geralmente
diversos caminhos diferentes e tendem a alterar muitos
atributos internos do objeto, obrigando o desenvolvedor a
criar muitos testes, caso queira ter uma alta cobertura de
testes. A esse padrão, demos o nome de MuitosTestes Para
Um Método.
44
MuitosTestes Para Uma Classe
 O mesmo pode ser entendido quando o desenvolvedor
escreve muitos testes para a classe como um todo. Classes
que expõem muitos métodos para o mundo de fora também
tendem a possuir muitas responsabilidades. Chamamos este
padrão de MuitosTestes Para Uma Classe.
45
Cenário Muito Grande
 Outro problema de coesão pode ser encontrado quando o
programador sente a necessidade de escrever cenários de
teste muito grandes para uma única classe ou método. É
possível inferir que essa necessidade surge em códigos que
lidam com muitos objetos e fazem muita coisa. Nomeamos
esse padrão de Cenário Muito Grande.
46
Testes em Método Que Não É Público
 Um padrão não explicitamente levantado pelos
participantes, mas notado por nós, é quando o
desenvolvedor sente a necessidade de se testar um método
que não é público. Métodos privados geralmente servem
para transformar o método público em algo mais fácil de ler.
Ao desejar testá-lo de maneira isolada, o programador pode
estar de frente a um método que possua uma responsabi-
lidade suficiente para ser alocada em uma outra classe. A
esse padrão, chamamos deTestes em Método Que Não É
Público.
47
Padrões Ligados ao Acoplamento
 Objetos Dublê em Excesso
 Objetos Dublê não Utilizados
48
Objetos Dublê em Excesso
 O uso abusivo de objetos dublês para testar uma única classe
indica que a classe sob teste possui problemas de
acoplamento. É possível deduzir que uma classe que faz uso
de muitos objetos dublês depende de muitas classes, e
portanto, tende a ser uma classe instável. A esse padrão,
demos o nome de Objetos Dublê em Excesso.
49
Objetos Dublê não Utilizados
 Outro padrão percebido por nós é a criação de objetos dublês
que não são utilizados em alguns métodos de testes. Isso
geralmente acontece quando a classe é altamente acoplada,
e o resultado da ação de uma dependência não interfere na
outra.Quando isso acontece, o programador acaba por
escrever conjuntos de testes, sendo que, em alguns deles
lidam com um sub-conjunto dos objetos dublês, enquanto
outros testes lidam com o outro sub-conjunto de objetos
dublês. Isso indica um alto acoplamento da classe, que
precisa ser refatorada. A esse padrão demos o nome de
Objetos Dublê Não Utilizados.
50
Padrões Ligados à Falta de Abstração
 Mesma Alteração em DiferentesTestes.
 Testes Repetidos para Entidades Diferentes.
 Interface não Amigável.
 Condicional no Nome doTeste.
51
Testes Repetidos
 A falta de abstração geralmente faz com que uma simples
mudança precise ser feita em diferentes pontos do código.
Quando uma mudança acontece e o programador é obrigado
a fazer a mesma alteração em diferentes testes, isso indica a
falta de uma abstração correta para evitar a repetição
desnecessária de código. A esse padrão damos o nome de
Mesma Alteração Em Diferentes Testes. Analogamente, o
programador pode perceber a mesma coisa quando ele
começa a criar testes repetidos para entidades diferentes.
Chamamos esse padrão de Testes Repetidos Para
Entidades Diferentes.
52
Interface não Amigável
 Quando o desenvolvedor começa o teste e percebe que a
interface pública da classe não está amigável, pode indicar
que abstração corrente não é clara o suficiente e poderia ser
melhorada. A esse padrão, chamamos de Interface Não
Amigável.
53
Condicional no Nome doTeste
 Outro padrão não mencionado explícitamente pelos
participantes é a existência da palavra "se" no nome do teste.
Testes que possuem nomes como esse geralmente indicam a
existência de um "if" na implementação do código de
produção. Essas diversas condições podem, geralmente, ser
refatoradas e, por meio do uso de poliformismo, serem
eliminadas. A falta de abstração nesse caso é evidenciada
pelo padrão Condicional No Nome DoTeste.
54
Relação dos princípios e SOLID
55
Ameaças aValidade
 Alguns pontos podem ameaçar os dados encontrados por
esta pesquisa.
56
Validade de Construção
 Exercícios de pequeno porte.
 Eles são pequenos perto do mundo real, mas participantes
afirmaram que todos eles contém problemas parecidos com os
que enfrentam no dia a dia.
57
Validade Interna
 Efeitos recentes deTDD na memória
 Por serem praticantes deTDD, eles podem ter “esquecido”
como é pensar no projeto de classes. Por esse motivo, todos
participantes resolveram exercícios com e semTDD.
 Exercícios inacabados
 Alguns participantes não terminaram a implementação dos
exercícios. Isso pode ter afetado a análise das métricas de
código.
 Influência do Pesquisador
 Em uma pesquisa qualitativa, o pesquisador faz a diferença. Por
esse motivo, outro pesquisador revisou os resultados
encontrados dessa pesquisa.
58
Validade Externa
 Desejabilidade social
 Enviesamento pela desejabilidade social é o termo científico
usado para descrever a tendência dos participantes de
responder às questões de modo que sejam bem vistos pelos
outros membros da comunidade [CM60].
 Eliminamos toda e qualquer informação dada, mas não
justificada pelo participante.
 Quantidade de participantes insuficiente
 Não suficiente para generalizar os resultados encontrados.
59
LiçõesAprendidas
 Deixar ambiente fácil de ser configurado.
 Muitos participantes de uma só vez dificultam o trabalho do
pesquisador.
 Estudos com estudantes levam mais tempo para serem
executados.
 Participantes da indústria são difíceis de encontrar (e os mais
diversos problemas podem acontecer).
 Apenas um piloto fez o estudo por completo, devido a
limitações de tempo.
60
Conclusões
 A prática deTDD pode influenciar no processo de criação do
projeto de classes.
 No entanto, ao contrário do que é comentado pela indústria, a
prática deTDD não guia o desenvolvedor para um bom projeto de
classes de forma automática; a experiência e conhecimento do
desenvolvedor são fundamentais ao criar software orientado a
objetos.
 A prática, por meio dos seus possíveis feedbacks em relação ao
projeto de classes pode servir de guia para o desenvolvedor. Esses
feedbacks, quando observados, fazem com que o desenvolvedor
perceba problemas de projeto de classes de forma antecipada,
facilitando a refatoração do código.
61
Trabalhos Futuros
 Continuar a busca por outros padrões.
 Avaliar se um desenvolvedor que conhece os padrões aqui
levantados encontram problemas de projeto antes de
desenvolvedores que não conhecem os mesmos.
62
Produções ao longo do mestrado
 Artigo entitulado Most Common Mistakes inTest-Driven Development
Practice: Results from an Online Survey with Developers, aceito no Primeiro
Workshop Internacional sobreTDD, em 2010.
 Artigo entituladoWhatConcerns BeginnerTest-Driven Development
Practitioners: A Qua- litative Analysis of Opinions in an Agile Conference, aceito
noWBMA em 2011.
 Relato de experiência entitulado Increasing Learning in anAgile Environment:
Lessons Learned in an AgileTeam, aceito no Agile de 2011.
 Curso sobre evolução de software no CBSoft 2011.
 Apresentação sobreTDD e seus possíveis efeitos no projeto de classes na
QCON 2011.
 Escrita da ferramenta de mineração de repositório de códigos rEvolution,
utilizado para calcular as métricas em cima do código produzido pelos
participantes.
63
Resultados Esperados
 Nós esperamos que o resultado deste estudo ajude
desenvolvedores de software a antecipar pro- blemas de
projeto de classes, gerando melhorias constantes e, por
consequência, diminuindo o custo de manutenção e evolução
do sistema.
 Além disso, esperamos que agora o ditado sobre a influência
deTDD no projeto de classes esteja melhor explicado, e que
desenvolvedores entendam que experiência e conhecimento
em boas práticas de codificação são necessários para que
TDD os guie em direção a um bom projeto de classes.
64
Agradecimentos
 Gostaria de agradecer ao prof. Marco por ter me ensinado
mais do que eu poderia imaginar ao longo destes 3 anos.
 Gostaria de agradecer aos profs. Rafael e Ismar que me
deram excelentes feedbacks na banca de qualificação.
 Agradeço também a toda minha família, namorada e amigos,
que me apoiaram o tempo todo!
 Por fim, agradeço a todos que participaram do meu estudo!
65
Não ganhei uma bola…
66
Obrigado, pai!

Contenu connexe

Tendances

Guru SP: Decodificando o code review
Guru SP: Decodificando o code reviewGuru SP: Decodificando o code review
Guru SP: Decodificando o code reviewElaine Naomi
 
Aula 1 Analise e Projeto
Aula 1   Analise e ProjetoAula 1   Analise e Projeto
Aula 1 Analise e ProjetoSergio Silva
 
Recursos Educacionais Abertos em formato audiovisual: Fluência Tecnológico-Pe...
Recursos Educacionais Abertos em formato audiovisual: Fluência Tecnológico-Pe...Recursos Educacionais Abertos em formato audiovisual: Fluência Tecnológico-Pe...
Recursos Educacionais Abertos em formato audiovisual: Fluência Tecnológico-Pe...Lóren Kellen Carvalho Jorge
 
Gamificação na Engenharia de Requisitos
Gamificação na Engenharia de RequisitosGamificação na Engenharia de Requisitos
Gamificação na Engenharia de RequisitosDaniel Ferreira
 
Análise e Utilização de Gestão do Conhecimento no Apoio ao Desenvolvimento de...
Análise e Utilização de Gestão do Conhecimento no Apoio ao Desenvolvimento de...Análise e Utilização de Gestão do Conhecimento no Apoio ao Desenvolvimento de...
Análise e Utilização de Gestão do Conhecimento no Apoio ao Desenvolvimento de...Luiz Matos
 
TDD e sua influência no design
TDD e sua influência no designTDD e sua influência no design
TDD e sua influência no designFelipe Benevides
 
Uso do GitHub no processo de desenvolvimento de software na Administração Púb...
Uso do GitHub no processo de desenvolvimento de software na Administração Púb...Uso do GitHub no processo de desenvolvimento de software na Administração Púb...
Uso do GitHub no processo de desenvolvimento de software na Administração Púb...Anne Caroline
 
O desafio de implantar métodos ágeis em uma organização com processo trad...
O desafio de implantar métodos ágeis em uma organização com processo trad...O desafio de implantar métodos ágeis em uma organização com processo trad...
O desafio de implantar métodos ágeis em uma organização com processo trad...eduardohabib
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven DevelopmentWaldyr Felix
 
Aula 1 introducao
Aula 1   introducaoAula 1   introducao
Aula 1 introducaolicardino
 
Análise de aderência de práticas ágeis na cultura de startups de software: o ...
Análise de aderência de práticas ágeis na cultura de startups de software: o ...Análise de aderência de práticas ágeis na cultura de startups de software: o ...
Análise de aderência de práticas ágeis na cultura de startups de software: o ...Marvin Ferreira
 

Tendances (11)

Guru SP: Decodificando o code review
Guru SP: Decodificando o code reviewGuru SP: Decodificando o code review
Guru SP: Decodificando o code review
 
Aula 1 Analise e Projeto
Aula 1   Analise e ProjetoAula 1   Analise e Projeto
Aula 1 Analise e Projeto
 
Recursos Educacionais Abertos em formato audiovisual: Fluência Tecnológico-Pe...
Recursos Educacionais Abertos em formato audiovisual: Fluência Tecnológico-Pe...Recursos Educacionais Abertos em formato audiovisual: Fluência Tecnológico-Pe...
Recursos Educacionais Abertos em formato audiovisual: Fluência Tecnológico-Pe...
 
Gamificação na Engenharia de Requisitos
Gamificação na Engenharia de RequisitosGamificação na Engenharia de Requisitos
Gamificação na Engenharia de Requisitos
 
Análise e Utilização de Gestão do Conhecimento no Apoio ao Desenvolvimento de...
Análise e Utilização de Gestão do Conhecimento no Apoio ao Desenvolvimento de...Análise e Utilização de Gestão do Conhecimento no Apoio ao Desenvolvimento de...
Análise e Utilização de Gestão do Conhecimento no Apoio ao Desenvolvimento de...
 
TDD e sua influência no design
TDD e sua influência no designTDD e sua influência no design
TDD e sua influência no design
 
Uso do GitHub no processo de desenvolvimento de software na Administração Púb...
Uso do GitHub no processo de desenvolvimento de software na Administração Púb...Uso do GitHub no processo de desenvolvimento de software na Administração Púb...
Uso do GitHub no processo de desenvolvimento de software na Administração Púb...
 
O desafio de implantar métodos ágeis em uma organização com processo trad...
O desafio de implantar métodos ágeis em uma organização com processo trad...O desafio de implantar métodos ágeis em uma organização com processo trad...
O desafio de implantar métodos ágeis em uma organização com processo trad...
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
Aula 1 introducao
Aula 1   introducaoAula 1   introducao
Aula 1 introducao
 
Análise de aderência de práticas ágeis na cultura de startups de software: o ...
Análise de aderência de práticas ágeis na cultura de startups de software: o ...Análise de aderência de práticas ágeis na cultura de startups de software: o ...
Análise de aderência de práticas ágeis na cultura de startups de software: o ...
 

Similaire à Defesa de mestrado: Como a prática de TDD influencia no projeto de classes em projetos OO

Apresentação tcc final
Apresentação tcc finalApresentação tcc final
Apresentação tcc finalJhool Flores
 
SBESEdu2019_Fabio-BDD.pdf
SBESEdu2019_Fabio-BDD.pdfSBESEdu2019_Fabio-BDD.pdf
SBESEdu2019_Fabio-BDD.pdfssuserf131f8
 
Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?Maurício Aniche
 
Escolas de testes de software
Escolas de testes de softwareEscolas de testes de software
Escolas de testes de softwareAlan Carlos
 
Efeitos da Prática de Revisão de Código na Caelum: Um Estudo Preliminar em Du...
Efeitos da Prática de Revisão de Código na Caelum: Um Estudo Preliminar em Du...Efeitos da Prática de Revisão de Código na Caelum: Um Estudo Preliminar em Du...
Efeitos da Prática de Revisão de Código na Caelum: Um Estudo Preliminar em Du...Maurício Aniche
 
Ferramentas Case de Teste
Ferramentas Case de TesteFerramentas Case de Teste
Ferramentas Case de TesteBeatriz Marques
 
Desenvolvimento dirigido por comportamento e por teste
Desenvolvimento dirigido por comportamento e por testeDesenvolvimento dirigido por comportamento e por teste
Desenvolvimento dirigido por comportamento e por testeUniversidade Tiradentes
 
Obtendo métricas com TDD utilizando build automatizado e deploy no Azure
Obtendo métricas com TDD utilizando build automatizado e deploy no AzureObtendo métricas com TDD utilizando build automatizado e deploy no Azure
Obtendo métricas com TDD utilizando build automatizado e deploy no AzureMikaeri Ohana
 
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...tdc-globalcode
 
Testes de Caixa Branca e Métricas de Código
Testes de Caixa Branca e Métricas de CódigoTestes de Caixa Branca e Métricas de Código
Testes de Caixa Branca e Métricas de CódigoAricelio Souza
 
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Developer Academy
 
Introdução a Engenharia de Software - Prof.ª Cristiane Fidelix
Introdução a Engenharia de Software - Prof.ª Cristiane FidelixIntrodução a Engenharia de Software - Prof.ª Cristiane Fidelix
Introdução a Engenharia de Software - Prof.ª Cristiane FidelixCris Fidelix
 

Similaire à Defesa de mestrado: Como a prática de TDD influencia no projeto de classes em projetos OO (20)

Cesar.Edu Turma S2I
Cesar.Edu Turma S2ICesar.Edu Turma S2I
Cesar.Edu Turma S2I
 
Apresentação tcc final
Apresentação tcc finalApresentação tcc final
Apresentação tcc final
 
SBESEdu2019_Fabio-BDD.pdf
SBESEdu2019_Fabio-BDD.pdfSBESEdu2019_Fabio-BDD.pdf
SBESEdu2019_Fabio-BDD.pdf
 
Instituto Stela S&T#001, Projeto de software com testes unitários
Instituto Stela S&T#001, Projeto de software com testes unitáriosInstituto Stela S&T#001, Projeto de software com testes unitários
Instituto Stela S&T#001, Projeto de software com testes unitários
 
Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?
 
Teste de software
Teste de softwareTeste de software
Teste de software
 
Coding Dojo Aplicado ao Ambiente Organizacional
Coding Dojo Aplicado ao Ambiente OrganizacionalCoding Dojo Aplicado ao Ambiente Organizacional
Coding Dojo Aplicado ao Ambiente Organizacional
 
Escolas de testes de software
Escolas de testes de softwareEscolas de testes de software
Escolas de testes de software
 
Efeitos da Prática de Revisão de Código na Caelum: Um Estudo Preliminar em Du...
Efeitos da Prática de Revisão de Código na Caelum: Um Estudo Preliminar em Du...Efeitos da Prática de Revisão de Código na Caelum: Um Estudo Preliminar em Du...
Efeitos da Prática de Revisão de Código na Caelum: Um Estudo Preliminar em Du...
 
Tdd x testes unidades
Tdd x testes unidadesTdd x testes unidades
Tdd x testes unidades
 
Teste Driven Development
Teste Driven DevelopmentTeste Driven Development
Teste Driven Development
 
Ferramentas Case de Teste
Ferramentas Case de TesteFerramentas Case de Teste
Ferramentas Case de Teste
 
Desenvolvimento dirigido por comportamento e por teste
Desenvolvimento dirigido por comportamento e por testeDesenvolvimento dirigido por comportamento e por teste
Desenvolvimento dirigido por comportamento e por teste
 
Obtendo métricas com TDD utilizando build automatizado e deploy no Azure
Obtendo métricas com TDD utilizando build automatizado e deploy no AzureObtendo métricas com TDD utilizando build automatizado e deploy no Azure
Obtendo métricas com TDD utilizando build automatizado e deploy no Azure
 
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
 
Testes de Caixa Branca e Métricas de Código
Testes de Caixa Branca e Métricas de CódigoTestes de Caixa Branca e Métricas de Código
Testes de Caixa Branca e Métricas de Código
 
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
 
Questionario CTFL - Foundation Level
Questionario CTFL - Foundation LevelQuestionario CTFL - Foundation Level
Questionario CTFL - Foundation Level
 
Aula 1 analise e projeto
Aula 1   analise e projetoAula 1   analise e projeto
Aula 1 analise e projeto
 
Introdução a Engenharia de Software - Prof.ª Cristiane Fidelix
Introdução a Engenharia de Software - Prof.ª Cristiane FidelixIntrodução a Engenharia de Software - Prof.ª Cristiane Fidelix
Introdução a Engenharia de Software - Prof.ª Cristiane Fidelix
 

Plus de Maurício Aniche

Can ML help software developers? (TEQnation 2022)
Can ML help software developers? (TEQnation 2022)Can ML help software developers? (TEQnation 2022)
Can ML help software developers? (TEQnation 2022)Maurício Aniche
 
Tracing Back Log Data to its Log Statement: From Research to Practice
Tracing Back Log Data to its Log Statement: From Research to PracticeTracing Back Log Data to its Log Statement: From Research to Practice
Tracing Back Log Data to its Log Statement: From Research to PracticeMaurício Aniche
 
Pragmatic software testing education - SIGCSE 2019
Pragmatic software testing education - SIGCSE 2019Pragmatic software testing education - SIGCSE 2019
Pragmatic software testing education - SIGCSE 2019Maurício Aniche
 
Software Testing with Caipirinhas and Stroopwafels
Software Testing with Caipirinhas and StroopwafelsSoftware Testing with Caipirinhas and Stroopwafels
Software Testing with Caipirinhas and StroopwafelsMaurício Aniche
 
Code smells in MVC applications (Dutch Spring meetup)
Code smells in MVC applications (Dutch Spring meetup)Code smells in MVC applications (Dutch Spring meetup)
Code smells in MVC applications (Dutch Spring meetup)Maurício Aniche
 
A Collaborative Approach to Teach Software Architecture - SIGCSE 2017
A Collaborative Approach to Teach Software Architecture - SIGCSE 2017A Collaborative Approach to Teach Software Architecture - SIGCSE 2017
A Collaborative Approach to Teach Software Architecture - SIGCSE 2017Maurício Aniche
 
Code quality in MVC systems - BENEVOL 2016
Code quality in MVC systems - BENEVOL 2016Code quality in MVC systems - BENEVOL 2016
Code quality in MVC systems - BENEVOL 2016Maurício Aniche
 
A Validated Set of Smells for MVC Architectures - ICSME 2016
A Validated Set of Smells for MVC Architectures - ICSME 2016A Validated Set of Smells for MVC Architectures - ICSME 2016
A Validated Set of Smells for MVC Architectures - ICSME 2016Maurício Aniche
 
SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...
SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...
SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...Maurício Aniche
 
DNAD 2015 - Métricas de código, pra que te quero?
DNAD 2015 - Métricas de código, pra que te quero?DNAD 2015 - Métricas de código, pra que te quero?
DNAD 2015 - Métricas de código, pra que te quero?Maurício Aniche
 
Como eu aprendi que testar software é importante?
Como eu aprendi que testar software é importante?Como eu aprendi que testar software é importante?
Como eu aprendi que testar software é importante?Maurício Aniche
 
Proposta: Métricas e Heurísticas para Detecção de Problemas em Aplicações Web
Proposta: Métricas e Heurísticas para Detecção de Problemas em Aplicações WebProposta: Métricas e Heurísticas para Detecção de Problemas em Aplicações Web
Proposta: Métricas e Heurísticas para Detecção de Problemas em Aplicações WebMaurício Aniche
 
O que estamos temos feito com mineração de repositório de código no IME?
O que estamos temos feito com mineração de repositório de código no IME?O que estamos temos feito com mineração de repositório de código no IME?
O que estamos temos feito com mineração de repositório de código no IME?Maurício Aniche
 
MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013
MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013
MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013Maurício Aniche
 
Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study - W...
Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study - W...Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study - W...
Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study - W...Maurício Aniche
 
Minicurso sobre Evolução de Software no CBSoft 2011
Minicurso sobre Evolução de Software no CBSoft 2011Minicurso sobre Evolução de Software no CBSoft 2011
Minicurso sobre Evolução de Software no CBSoft 2011Maurício Aniche
 
MTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary Study
MTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary StudyMTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary Study
MTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary StudyMaurício Aniche
 
[TDC 2014] Métricas de código, pra que te quero?
[TDC 2014] Métricas de código, pra que te quero?[TDC 2014] Métricas de código, pra que te quero?
[TDC 2014] Métricas de código, pra que te quero?Maurício Aniche
 
Code coverage for MSR Researches [Work in Progress]
Code coverage for MSR Researches [Work in Progress]Code coverage for MSR Researches [Work in Progress]
Code coverage for MSR Researches [Work in Progress]Maurício Aniche
 

Plus de Maurício Aniche (20)

Can ML help software developers? (TEQnation 2022)
Can ML help software developers? (TEQnation 2022)Can ML help software developers? (TEQnation 2022)
Can ML help software developers? (TEQnation 2022)
 
Tracing Back Log Data to its Log Statement: From Research to Practice
Tracing Back Log Data to its Log Statement: From Research to PracticeTracing Back Log Data to its Log Statement: From Research to Practice
Tracing Back Log Data to its Log Statement: From Research to Practice
 
Pragmatic software testing education - SIGCSE 2019
Pragmatic software testing education - SIGCSE 2019Pragmatic software testing education - SIGCSE 2019
Pragmatic software testing education - SIGCSE 2019
 
Test Automation Day 2018
Test Automation Day 2018Test Automation Day 2018
Test Automation Day 2018
 
Software Testing with Caipirinhas and Stroopwafels
Software Testing with Caipirinhas and StroopwafelsSoftware Testing with Caipirinhas and Stroopwafels
Software Testing with Caipirinhas and Stroopwafels
 
Code smells in MVC applications (Dutch Spring meetup)
Code smells in MVC applications (Dutch Spring meetup)Code smells in MVC applications (Dutch Spring meetup)
Code smells in MVC applications (Dutch Spring meetup)
 
A Collaborative Approach to Teach Software Architecture - SIGCSE 2017
A Collaborative Approach to Teach Software Architecture - SIGCSE 2017A Collaborative Approach to Teach Software Architecture - SIGCSE 2017
A Collaborative Approach to Teach Software Architecture - SIGCSE 2017
 
Code quality in MVC systems - BENEVOL 2016
Code quality in MVC systems - BENEVOL 2016Code quality in MVC systems - BENEVOL 2016
Code quality in MVC systems - BENEVOL 2016
 
A Validated Set of Smells for MVC Architectures - ICSME 2016
A Validated Set of Smells for MVC Architectures - ICSME 2016A Validated Set of Smells for MVC Architectures - ICSME 2016
A Validated Set of Smells for MVC Architectures - ICSME 2016
 
SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...
SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...
SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...
 
DNAD 2015 - Métricas de código, pra que te quero?
DNAD 2015 - Métricas de código, pra que te quero?DNAD 2015 - Métricas de código, pra que te quero?
DNAD 2015 - Métricas de código, pra que te quero?
 
Como eu aprendi que testar software é importante?
Como eu aprendi que testar software é importante?Como eu aprendi que testar software é importante?
Como eu aprendi que testar software é importante?
 
Proposta: Métricas e Heurísticas para Detecção de Problemas em Aplicações Web
Proposta: Métricas e Heurísticas para Detecção de Problemas em Aplicações WebProposta: Métricas e Heurísticas para Detecção de Problemas em Aplicações Web
Proposta: Métricas e Heurísticas para Detecção de Problemas em Aplicações Web
 
O que estamos temos feito com mineração de repositório de código no IME?
O que estamos temos feito com mineração de repositório de código no IME?O que estamos temos feito com mineração de repositório de código no IME?
O que estamos temos feito com mineração de repositório de código no IME?
 
MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013
MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013
MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013
 
Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study - W...
Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study - W...Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study - W...
Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study - W...
 
Minicurso sobre Evolução de Software no CBSoft 2011
Minicurso sobre Evolução de Software no CBSoft 2011Minicurso sobre Evolução de Software no CBSoft 2011
Minicurso sobre Evolução de Software no CBSoft 2011
 
MTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary Study
MTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary StudyMTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary Study
MTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary Study
 
[TDC 2014] Métricas de código, pra que te quero?
[TDC 2014] Métricas de código, pra que te quero?[TDC 2014] Métricas de código, pra que te quero?
[TDC 2014] Métricas de código, pra que te quero?
 
Code coverage for MSR Researches [Work in Progress]
Code coverage for MSR Researches [Work in Progress]Code coverage for MSR Researches [Work in Progress]
Code coverage for MSR Researches [Work in Progress]
 

Defesa de mestrado: Como a prática de TDD influencia no projeto de classes em projetos OO

  • 1. Como a prática deTDD influencia no projeto de classes em sistemas orientados a objetos Mauricio FinavaroAniche Orientador: Prof. Dr. Marco Aurélio Gerosa
  • 2. Agenda  DesenvolvimentoGuiado porTestes (TDD)  Motivação da Pesquisa  Planejamento e Execução do Estudo  Trabalhos Relacionados  AnáliseQuantitativa  AnáliseQualitativa e Padrões de Feedback  Ameaças aValidade  Conclusões  Agradecimentos 2
  • 3. TDD  Popularizado por Kent Beck [Bec04], a prática sugere ao desenvolvedor que escreva o código de teste antes do código de produção.  Ciclo em 5 etapas: escreva um teste que falha, veja-o falhar, faça o teste passar da maneira mais simples possível, veja-o passar, refatora para remover duplicação de dados e código. 3
  • 4. Efeitos da prática  É comum relacionar a prática deTDD com efeitos positivos na qualidade externa do software.  Muitos trabalhos nem mencionam possíveis efeitos da prática no projeto de classes.  Mas muitos autores também afirmam que a prática pode influenciar positivamente no projeto de classes [Bec02], [Mar6], [eNP09], [Ast03].  Grande parte delas se baseia na ideia de que uma classe difícil de ser testada, é uma classe que possivelmente apresenta problemas de projeto. 4
  • 5. Popularidade da prática  Questionários feitos porWambler [Wam10] mostram o crescimento na adoção da prática por parte da indústria.  Empiricamente, notamos também o crescimento pela busca sobre o assunto em eventos ágeis. 5
  • 6. Motivação  Apesar dos ditos efeitos da prática sobre o projeto de classes, na verdade pouco se sabe sobre eles.  Fizemos um estudo qualitativo dentro de um evento ágil, e percebemos que os desenvolvedores não souberam afirmar com segurança como a prática deTDD influenciava nos projetos de classe.  Dado a crescente adoção da prática, é importante entender não só se a prática influencia, mas também como se dá essa influência. 6
  • 7. Caracterização da Pesquisa  Este trabalho visa entender a influência da prática deTDD no projeto de classes.  A análise se baseou na percepção de programadores atuantes na indústria brasileira de desenvolvimento de software.  Todos eles resolveram um conjunto de problemas em Java, utilizando ou nãoTDD.  Em seguida, análises quantitativa e qualitativa ajudaram a entender os efeitos da prática. 7
  • 8. Objetivo da Pesquisa  O objetivo principal: entender a relação da prática deTDD e as decisões de projeto de classes tomados pelo desenvolvedor.  Qual a influência da prática deTDD no projeto de classes?  Qual a relação entreTDD e as decisões de projeto feitas por um desenvolvedor?  Como a prática deTDD influencia o programador no projeto de classes, do ponto de vista do acoplamento, coesão e complexidade? 8
  • 9. Contribuições da Pesquisa  Padrões de feedback da prática deTDD que guiam os desenvolvedores ao longo do projeto de classes.  Protocolo de um estudo qualitativo sobre os efeitos da prática, bem como um conjunto de lições aprendidas. 9
  • 11. Discussão  Pouco são os trabalhos que avaliam os efeitos da prática no projeto de classes.  E quando o fazem, apenas verificam se “existe algum efeito”.  Não discutem exatamente como isso acontece.  Também não levam em conta a experiência no desenvolvedor (grande parte dos estudos foram feitos com estudantes).  Josefsson [Jos04] comenta que os estudos encontrados na literatura são muito limitados e pouco generalizáveis. 11
  • 12. Posição desta pesquisa na literatura 12
  • 13. Planejamento do Estudo  Conduzir um estudo experimental em engenharia de software sempre foi uma atividade difícil.  Hoje tem-se considerado melhor a influência de projetos não- técnicos.  Dado a complexidade do problema a ser estudado, optamos por uma pesquisa essencialmente qualitativa. 13
  • 14. Estudos qualitativos  Pesquisador como instrumento chave da pesquisa.  Múltiplas fontes de dados.  Análise de dados indutiva.  Visão do participante levada em consideração.  Interpretativa. 14
  • 15. Projeto da pesquisa  Participantes foram convidados a resolver problemas em Java, usando ou não a prática deTDD.  A partir dos dados colhidos (questionários e métrica de código), entrevistamos alguns desses participantes.  Com esses dados em mãos, utilizamos técnicas baseadas em GroundedTheory para analisar os dados. 15
  • 16. Participantes da Pesquisa  Foram avaliados de acordo com os seguintes critérios:  Experiência emTDD.  Experiência e Desenvolvimento de Software.  Conhecimentos em Java.  Conhecimentos deTestes de Unidade.  Essas informações foram avaliadas a partir de um questionário, que continha questões abertas e fechadas. 16
  • 17. Execução do Estudo  Participantes tem 2 horas para resolver 2 problemas.  Um deles usandoTDD; outro não.  A ordem dos exercícios e da obrigatoriedade do uso da prática foram randomizados.  Ao final do estudo, respondem um questionário sobre suas as impressões da prática deTDD.  Perguntas sobre a qualidade do código produzido e do possível efeito da prática deTDD sobre o código gerado. 17
  • 18. Problemas Propostos  Baseados em workshop dado naAgile Brazil e no IME/USP.  Ao total, mais de 100 pessoas participaram.  No exercício 1, o participante deve implementar uma calculadora de salário, que varia de acordo com o cargo do participante.  No exercício 2, o participante deve fazer com que uma nota fiscal gerada seja enviada para diversos sistemas externos.  No exercício 3, o participante deve fazer uma modificação em um sistema de pagamento de boletos.  No exercício 4, o participante implementa uma sequência de filtros de faturas. 18
  • 19. Escolha de candidatos para entrevista  Os dados foram parcialmente analisados.  Leitura dos questionários inicial e pós-experimento.  Avaliação do código gerado com e sem a prática deTDD (princípios SOLID foram utilizados).  Candidatos que apresentaram alguma divergência no que escreveram e no que produziram, foram selecionados.  Apesar do processo, a avaliação do código gerado reflete o ponto de vista do pesquisador. 19
  • 20. Entrevista  Entrevista semi-estruturada.  O foco era descobrir como a prática deTDD influencia o programador no projeto de classes.  Sempre que algum ponto era mencionado, eu anotava e depois retomava o ponto para discuti-lo mais a fundo, isoladamente.  Foram gravadas, de maneira a possibilitar que os dados fossem revistos a qualquer momento. 20
  • 21. Métricas de Código  Métricas conhecidas pela academia.  Complexidade ciclomática  Fan-Out  Falta de coesão dos métodos (LCOM)  Quantidade de linhas por método  Quantidade de métodos  Ferramenta de cálculo de métrica implementada. 21
  • 22. Avaliação do Especialista  Especialistas foram convidados a avaliar os código-fonte gerados.  Avaliaram em diferentes categorias:  Simplicidade  Testabilidade  Qualidade do Projeto de Classes  Especialistas não sabiam quais códigos foram escritos com o uso da prática deTDD.  Ferramenta escrita para capturar avaliação. 22
  • 23. Validade e confiabilidade do estudo  Revisão das transcrições.  Verificação de pesquisador auxiliar.  Rastreabilidade dos dados.  Triangulação de diferentes fontes de dados.  Esclarecer os possíveis vieses do estudo. 23
  • 24. Estudo piloto  Três pilotos foram executados.  Na primeira execução, descobrimos que 4 exercícios em 2 horas não era factível.  Na segunda execução, o participante teve dificuldades em montar o ambiente. Um caderno junto com um pacote com área de trabalho pronta no Eclipse foi criado.  No terceiro, melhoramos o roteiro de entrevista, ao percebermos diversas perguntas repetidas. 24
  • 25. Execução do Estudo  Ao todo, tivemos 25 participantes de 6 diferentes empresas.  A grande maioria não era experiente emTDD (40% deles afirmam que começaram usar a prática apenas no último ano, e 52% deles entre 1 e 3 anos).  24% desenvolve software entre 4 a 5 anos. 28% deles faz isso entre 6 a 10 anos.  64% utilizam Java no dia a dia, mas todos afirmam conhecer Junit.  64% deles utilizam objetos dublês. 25
  • 26. Na academia  21 estudantes do IME/USP.  Surpreendentemente, 90% afirmam não conhecer Java.  61% não conheciamTDD e 76% conhecem objetos dublês na teoria.  Por causa desses números, nenhum participante da academia foi selecionado para a entrevista. 26
  • 27. Análise Quantitativa  O teste estatístico escolhido foiWilcoxon.  Classes e métodos separados em 2 grupos: produzidos com e semTDD.  Olhamos apenas para o “lado” onde supostamente códigos produzidos comTDD possuem valores de métricas menores que os códigos produzidos semTDD. 27
  • 28. Métricas de código na indústria 28
  • 29. Métricas de código na academia 29
  • 30. Relação com Experiência  Ao separarmos os códigos produzidos de acordo com a experiência do participante, percemos que ela não fez diferença na qualidade do código gerado.  Com exceção da falta de coesão dos métodos, que apresentou diferença no grupo que era experiente tanto em desenvolvimento de software quanto emTDD. 30
  • 31. Avaliação dos especialistas na indústria 31
  • 33. Discussão  Não foram encontradas diferenças entre os códigos produzidos com e semTDD, do ponto de vista das métricas de código e dos especialistas convidados.  Os motivos disso precisam ser entendidos. 33
  • 34. Análise Qualitativa  Participantes, em sua maioria, afirmaram que a prática de TDD não teria feito qualquer diferença no código gerado.  A principal justificativa foi a de que a experiência e conhecimento em orientação a objetos os guiaram durante a resolução dos exercícios.  Dois exemplos foram dados pelos participantes.  Um deles comentou que fez uso de um Padrão de Projeto que aprendera dias antes.  Outro comentou que seus estudos sobre os princípios SOLID lhe ajudaram. 34
  • 35. Efeitos na qualidade externa  Segundo eles,TDD tem efeitos na qualidade externa do sistema. 35
  • 36. Efeitos na qualidade interna  Apesar de afirmarem queTDD não faria diferença no código, todos eles afirmaram que enxergam benefícios no projeto de classes quando usamTDD.  Segundo eles, o ideal é unir a prática deTDD com a experiência. 36
  • 37. Segurança na refatoração  11 participantes afirmaram que os testes gerados durante a prática dão segurança para refatorar código.  Um participante inclusive mencionou uma experiência real.  Experiência foi novamente mencionada. 37
  • 38. Passos menores e simplicidade  TDD sugere passos de bebê.  Oito participantes afirmaram que tomar passos menores lhes ajudam a pensar melhor no projeto de classes.  Um deles afirmou que a ideia de ter um objetivo mais curto, aumenta o foco. 38
  • 39. Espaço para pensar  Testes são como “folha de rascunho”, onde o desenvolvedor pode pensar melhor sobre o projeto de classes.  Segundo eles, quando não fazemTDD, eles estão tão focados no código que estão escrevendo que acabam por não pensar no projeto de classes. 39
  • 40. Feedback mais rápido  Praticantes afirmaram queTDD dá feedback constante ao desenvolvedor. 40
  • 41. Busca pela testabilidade  Muitos afirmaram que a grande maneira na qual a prática influencia no projeto de classes é observando a relação entre código difícil de testar e um projeto de classes com problemas.  Código mais fácil de invocar.  Código menos acoplado.  Código mais simples. 41
  • 42. Padrões de Feedback  Levantamos um conjunto de padrões de feedback que a prática deTDD pode dar ao desenvolvedor.  Alguns deles vão de encontro ao que outros autores já comentaram.  Esses padrões foram separados em:  Padrões de Acoplamento.  Padrões de Coesão.  Padrões de Falta de Abstração. 42
  • 43. Padrões ligados à coesão  MuitosTestes para um Método.  MuitosTestes para uma Classe.  Cenário Muito Grande.  Testes Em Método Que Não É Público. 43
  • 44. MuitosTestes Para um Método  Quando um único método necessita de diversos testes para garantir seu comportamento, o método em questão provavelmente é complexo e/ou possui diversas responsabilidades. Códigos assim possuem geralmente diversos caminhos diferentes e tendem a alterar muitos atributos internos do objeto, obrigando o desenvolvedor a criar muitos testes, caso queira ter uma alta cobertura de testes. A esse padrão, demos o nome de MuitosTestes Para Um Método. 44
  • 45. MuitosTestes Para Uma Classe  O mesmo pode ser entendido quando o desenvolvedor escreve muitos testes para a classe como um todo. Classes que expõem muitos métodos para o mundo de fora também tendem a possuir muitas responsabilidades. Chamamos este padrão de MuitosTestes Para Uma Classe. 45
  • 46. Cenário Muito Grande  Outro problema de coesão pode ser encontrado quando o programador sente a necessidade de escrever cenários de teste muito grandes para uma única classe ou método. É possível inferir que essa necessidade surge em códigos que lidam com muitos objetos e fazem muita coisa. Nomeamos esse padrão de Cenário Muito Grande. 46
  • 47. Testes em Método Que Não É Público  Um padrão não explicitamente levantado pelos participantes, mas notado por nós, é quando o desenvolvedor sente a necessidade de se testar um método que não é público. Métodos privados geralmente servem para transformar o método público em algo mais fácil de ler. Ao desejar testá-lo de maneira isolada, o programador pode estar de frente a um método que possua uma responsabi- lidade suficiente para ser alocada em uma outra classe. A esse padrão, chamamos deTestes em Método Que Não É Público. 47
  • 48. Padrões Ligados ao Acoplamento  Objetos Dublê em Excesso  Objetos Dublê não Utilizados 48
  • 49. Objetos Dublê em Excesso  O uso abusivo de objetos dublês para testar uma única classe indica que a classe sob teste possui problemas de acoplamento. É possível deduzir que uma classe que faz uso de muitos objetos dublês depende de muitas classes, e portanto, tende a ser uma classe instável. A esse padrão, demos o nome de Objetos Dublê em Excesso. 49
  • 50. Objetos Dublê não Utilizados  Outro padrão percebido por nós é a criação de objetos dublês que não são utilizados em alguns métodos de testes. Isso geralmente acontece quando a classe é altamente acoplada, e o resultado da ação de uma dependência não interfere na outra.Quando isso acontece, o programador acaba por escrever conjuntos de testes, sendo que, em alguns deles lidam com um sub-conjunto dos objetos dublês, enquanto outros testes lidam com o outro sub-conjunto de objetos dublês. Isso indica um alto acoplamento da classe, que precisa ser refatorada. A esse padrão demos o nome de Objetos Dublê Não Utilizados. 50
  • 51. Padrões Ligados à Falta de Abstração  Mesma Alteração em DiferentesTestes.  Testes Repetidos para Entidades Diferentes.  Interface não Amigável.  Condicional no Nome doTeste. 51
  • 52. Testes Repetidos  A falta de abstração geralmente faz com que uma simples mudança precise ser feita em diferentes pontos do código. Quando uma mudança acontece e o programador é obrigado a fazer a mesma alteração em diferentes testes, isso indica a falta de uma abstração correta para evitar a repetição desnecessária de código. A esse padrão damos o nome de Mesma Alteração Em Diferentes Testes. Analogamente, o programador pode perceber a mesma coisa quando ele começa a criar testes repetidos para entidades diferentes. Chamamos esse padrão de Testes Repetidos Para Entidades Diferentes. 52
  • 53. Interface não Amigável  Quando o desenvolvedor começa o teste e percebe que a interface pública da classe não está amigável, pode indicar que abstração corrente não é clara o suficiente e poderia ser melhorada. A esse padrão, chamamos de Interface Não Amigável. 53
  • 54. Condicional no Nome doTeste  Outro padrão não mencionado explícitamente pelos participantes é a existência da palavra "se" no nome do teste. Testes que possuem nomes como esse geralmente indicam a existência de um "if" na implementação do código de produção. Essas diversas condições podem, geralmente, ser refatoradas e, por meio do uso de poliformismo, serem eliminadas. A falta de abstração nesse caso é evidenciada pelo padrão Condicional No Nome DoTeste. 54
  • 56. Ameaças aValidade  Alguns pontos podem ameaçar os dados encontrados por esta pesquisa. 56
  • 57. Validade de Construção  Exercícios de pequeno porte.  Eles são pequenos perto do mundo real, mas participantes afirmaram que todos eles contém problemas parecidos com os que enfrentam no dia a dia. 57
  • 58. Validade Interna  Efeitos recentes deTDD na memória  Por serem praticantes deTDD, eles podem ter “esquecido” como é pensar no projeto de classes. Por esse motivo, todos participantes resolveram exercícios com e semTDD.  Exercícios inacabados  Alguns participantes não terminaram a implementação dos exercícios. Isso pode ter afetado a análise das métricas de código.  Influência do Pesquisador  Em uma pesquisa qualitativa, o pesquisador faz a diferença. Por esse motivo, outro pesquisador revisou os resultados encontrados dessa pesquisa. 58
  • 59. Validade Externa  Desejabilidade social  Enviesamento pela desejabilidade social é o termo científico usado para descrever a tendência dos participantes de responder às questões de modo que sejam bem vistos pelos outros membros da comunidade [CM60].  Eliminamos toda e qualquer informação dada, mas não justificada pelo participante.  Quantidade de participantes insuficiente  Não suficiente para generalizar os resultados encontrados. 59
  • 60. LiçõesAprendidas  Deixar ambiente fácil de ser configurado.  Muitos participantes de uma só vez dificultam o trabalho do pesquisador.  Estudos com estudantes levam mais tempo para serem executados.  Participantes da indústria são difíceis de encontrar (e os mais diversos problemas podem acontecer).  Apenas um piloto fez o estudo por completo, devido a limitações de tempo. 60
  • 61. Conclusões  A prática deTDD pode influenciar no processo de criação do projeto de classes.  No entanto, ao contrário do que é comentado pela indústria, a prática deTDD não guia o desenvolvedor para um bom projeto de classes de forma automática; a experiência e conhecimento do desenvolvedor são fundamentais ao criar software orientado a objetos.  A prática, por meio dos seus possíveis feedbacks em relação ao projeto de classes pode servir de guia para o desenvolvedor. Esses feedbacks, quando observados, fazem com que o desenvolvedor perceba problemas de projeto de classes de forma antecipada, facilitando a refatoração do código. 61
  • 62. Trabalhos Futuros  Continuar a busca por outros padrões.  Avaliar se um desenvolvedor que conhece os padrões aqui levantados encontram problemas de projeto antes de desenvolvedores que não conhecem os mesmos. 62
  • 63. Produções ao longo do mestrado  Artigo entitulado Most Common Mistakes inTest-Driven Development Practice: Results from an Online Survey with Developers, aceito no Primeiro Workshop Internacional sobreTDD, em 2010.  Artigo entituladoWhatConcerns BeginnerTest-Driven Development Practitioners: A Qua- litative Analysis of Opinions in an Agile Conference, aceito noWBMA em 2011.  Relato de experiência entitulado Increasing Learning in anAgile Environment: Lessons Learned in an AgileTeam, aceito no Agile de 2011.  Curso sobre evolução de software no CBSoft 2011.  Apresentação sobreTDD e seus possíveis efeitos no projeto de classes na QCON 2011.  Escrita da ferramenta de mineração de repositório de códigos rEvolution, utilizado para calcular as métricas em cima do código produzido pelos participantes. 63
  • 64. Resultados Esperados  Nós esperamos que o resultado deste estudo ajude desenvolvedores de software a antecipar pro- blemas de projeto de classes, gerando melhorias constantes e, por consequência, diminuindo o custo de manutenção e evolução do sistema.  Além disso, esperamos que agora o ditado sobre a influência deTDD no projeto de classes esteja melhor explicado, e que desenvolvedores entendam que experiência e conhecimento em boas práticas de codificação são necessários para que TDD os guie em direção a um bom projeto de classes. 64
  • 65. Agradecimentos  Gostaria de agradecer ao prof. Marco por ter me ensinado mais do que eu poderia imaginar ao longo destes 3 anos.  Gostaria de agradecer aos profs. Rafael e Ismar que me deram excelentes feedbacks na banca de qualificação.  Agradeço também a toda minha família, namorada e amigos, que me apoiaram o tempo todo!  Por fim, agradeço a todos que participaram do meu estudo! 65
  • 66. Não ganhei uma bola… 66 Obrigado, pai!