Este documento apresenta uma introdução aos métodos ágeis para desenvolvimento de software, descrevendo alguns métodos como Scrum, Kanban e Extreme Programming, além de práticas como TDD, programação pareada e refatoração. O documento também discute objetivos de aprendizagem, exemplos, literatura científica e não-científica sobre o tema e oportunidades para pesquisa futura em métodos ágeis.
Pesquisa em métodos ágeis para desenvolvimento de software
1. Pesquisa em Métodos Ágeis Para
o Desenvolvimento de Software
Adolfo Neto
Departamento Acadêmico de Informática (DAINF)
Universidade Tecnológica Federal do Paraná (UTFPR)
9. Objetivos de Aprendizagem
Ao final deste mini-curso você deverá
ser capaz de:
Descrever e comparar alguns dos
principais métodos ágeis (como XP e
Scrum) e práticas ágeis
(Desenvolvimento Dirigido por Testes,
Programação Pareada, Refatoração,
entre outras)
10. Objetivos de Aprendizagem
Ao final deste mini-curso você deverá
ser capaz de:
Encontrar literatura científica e não-
científica sobre métodos ágeis
Listar alguns dos principais problemas
científicos em aberto na área de
métodos ágeis.
14. Extreme Programming
O primeiro livro (BECK, 1999).
Trechos - Foreword, Erich Gamma:
“Extreme Programming (XP) nominates
coding as the key activity throughout
a software project. This can't possibly
work!”
15. Extreme Programming
“It would be wrong to conclude that all that is
needed to deliver software is daredevil
programming. Delivering software is hard,
and delivering quality software in time is
even harder. To make it work requires the
disciplined use of additional best
practices. This is where Kent starts in his
though-provoking book on XP.”
16. Extreme Programming
“XP takes commonsense principles and practices
to extreme levels.”
– Pair programming
– Unit testing
– Functional testing
– Refactoring
– Continuous integration
18. Engenharia de Software
Não é parecida com Engenharia Civil!
– Após construir uma casa não é fácil mudar
uma parede de lugar!!!
– Mas em software, “mudar uma parede de
lugar” é sim relativamente fácil...
• Tampouco é muito parecida com outras
engenharias!!!
• Software é flexível!!!
19. Engenharia de Software
Tradicional
• Desenvolvimento ad-hoc de software em geral
produz resultados muito ruins
– Especialmente em sistemas grandes
• Desejo de criar uma engenharia para que se
tenha controle sobre desenvolvimento de
software
• Engenharias tradicionais colocam grande ênfase
em projetar antes de construir
Copyleft Walfredo Cirne
20. Engenharia de Software Tradicional:
Analogia Errada
Programadores não são pedreiros.
Programadores são os verdadeiros engenheiros.
– Quem escreve numa linguagem formal?
– O código-fonte é o documento de projeto.
Compiladores são os pedreiros.
– Quem simplesmente segue as instruções de uma
descrição formal?
Mais sobre isso no vídeo “Real Software
Engineering” de Glenn Vanderburg [link] [post]
24. Manifesto Ágil
Indivíduos e interações
processos e ferramentas
Software em funcionamento
documentação abrangente
Colaboração com o cliente
negociação de contratos
Responder a mudanças
seguir um plano
31. Scrum
Provavelmente o método mais utilizado
Gerência de projetos (de software)
Desenvolvimento iterativo: ciclos (sprints)
Certificação
Papéis:
– ScrumMaster
– ProductOwner
– Team
37. Kanban
O método com menor quantidade de regras.
– Menos prescritivo
Provavelmente o mais fácil de introduzir numa empresa
resistente a mudanças.
Regras:
– Visualizar o fluxo de trabalho (quadro Kanban)
– Limitar do trabalho em andamento (por coluna, em
no mínimo uma coluna)
– Medir o tempo médio para completar cada item
Sem papéis obrigatórios.
40. TDD: Desenvolvimento Dirigido
por Testes
Prática ágil relacionada à programação
Consiste em escrever os testes antes de escrever
o código da funcionalidade
Não é uma técnica de Testes, mas de Projeto
Testes automatizados - Ferramentas
Disciplina
Cobertura de código
41. Refatoração
• Refatorar é melhorar o código sem alterar sua
funcionalidade
• Antes de fazer uma mudança, você refatora o
código para que a mudança seja simples de
fazer
• Refatoração contínua possibilita manter um
design legal, mesmo com mudanças frequentes
Copyleft Walfredo Cirne
43. Programação Pareada
Programação pareada é a prática onde um ou
mais programadores trabalham lado a lado em
um computador colaborando no mesmo projeto,
algoritmo, código ou teste.
44. Programação Pareada
O par é composto de:
– um motorista: que digita no computador ou
registra o projeto
– um navegador: que observa o trabalho do
motorista e identifica problemas, clarifica
questões e faz sugestões.
• Os parceiros devem trocar de papéis de tempos
em tempos para compartilhar o trabalho
igualmente e obter o máximo da sua
experiência com a programação pareada.
46. Integração Contínua
“Integração Contínua é uma prática de
desenvolvimento de software onde os
membros de um time integram seu
trabalho frequentemente.
Geralmente cada pessoa integra pelo
menos diariamente – podendo haver
múltiplas integrações por dia.
47. Integração Contínua
Cada integração é verificada por um build automatizado
(incluindo testes) para detectar erros de integração o mais
rápido possível.
Muitos times acham que essa abordagem leva a uma
significante redução nos problemas de integração e
permite que um time desenvolva software coeso mais
rapidamente.”
Martin Fowler
52. Dojos de Programação
Atividade para aprender práticas ágeis na prática.
Ênfase na diversão e na socialização em paralelo
com o aprendizado.
Dojos de programação tem se espalhado pelo
mundo, em empresas, universidades, grupos de
programadores, etc.
61. Exemplos de Artigos
Are Two Heads Better than One?
On the Effectiveness of Pair
Programming
[IEEE Xplore link]
62. Exemplos de Artigos
Most Common Mistakes in Test-
Driven Development Practice:
Results from an Online Survey
with Developers
[IEEE Xplore link]
63. Outros tipos de artigos
Estudos de caso
Novas “metodologias”
Softwares que auxiliam na adoção de técnicas
e/ou práticas
Software que verificam a utilização correta de
práticas
64. Como métodos e práticas
ágeis podem ser avaliados
cientificamente?
65. Avaliação
Pesquisa Quantitativa e Qualitativa
– Estudos de caso
– Entrevistas
– Questionários
– Métricas
Colaboração com outras áreas (por exemplo,
Psicologia)
92. Referências
BECK, K. Extreme Programming Explained: embrace change. Addison-Wesley, 1999.
KNIBERG, H. SKARIN, M. Kanban and Scrum - making the most of both. InfoQ, 2010.
Disponível em: http://www.infoq.com/minibooks/kanban-scrum-minibook. Acesso em: 17 de maio de
2011.
Links ao longo da apresentação.
Mais referências em:
http://www2.dainf.ct.utfpr.edu.br/Members/adolfo/pesquisa/agile-methods/references
93. Pesquisa em Métodos Ágeis Para
o Desenvolvimento de Software
Adolfo Neto
Departamento Acadêmico de Informática (DAINF)
Universidade Tecnológica Federal do Paraná (UTFPR)