Top Banner
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)
93

Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

Dec 18, 2014

Download

Education

Adolfo Neto

Slides do mini-curso apresentado em 10.06.2011 no X Simpósio Brasileiro em Qualidade de Software (Curitiba-PR).

Mais informações em http://bit.ly/eyYo8Y
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

Pesquisa em Métodos Ágeis Para o Desenvolvimento de Software

Adolfo NetoDepartamento Acadêmico de Informática (DAINF)

Universidade Tecnológica Federal do Paraná (UTFPR)

Page 2: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

OBJETIVOS

Page 3: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

MÉTODOSÁGEIS

Page 4: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

DESCREVER

Page 5: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

COMPARAR

Page 6: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

LITERATURACIENTÍFICA

Page 7: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

LITERATURANÃO-CIENTÍFICA

Page 8: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

PROBLEMASEM ABERTO

Page 9: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

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)

Page 10: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

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.

Page 11: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

EXEMPLO DE MÉTODO ÁGIL:

PROGRAMAÇÃO EXTREMA

Page 12: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

PROGRAMAR:ATIVIDADE-CHAVE

Page 13: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

DISCIPLINA

Page 14: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

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!”

Page 15: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

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.”

Page 16: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

Extreme Programming

“XP takes commonsense principles and practices to extreme levels.”

– Pair programming– Unit testing– Functional testing– Refactoring– Continuous integration

Page 17: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

Um Episódio de Desenvolvimento

Page 18: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

Engenharia de Software

Não é parecida com Engenharia Civil!– Após construir uma casa não é fácil mudaruma parede de lugar!!!– Mas em software, “mudar uma parede delugar” é sim relativamente fácil...• Tampouco é muito parecida com outrasengenharias!!!• Software é flexível!!!

Page 19: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

Engenharia de SoftwareTradicional

• 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

Page 20: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

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]

Page 21: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

Manifesto para oDesenvolvimento Ágil de

Software

Page 22: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

http://agilemanifesto.org/iso/ptbr/

Page 23: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

http://agilemanifesto.org/iso/ptbr/

Page 24: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

Manifesto ÁgilIndiví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

Page 25: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software
Page 27: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

10 anos do Manifesto Ágil

Impacto crescente:– Livros– Conferências (AgileBrazil)– Casos (SalesForce)– Publicações (IEEE Software)– Software (Testes unitários)

Page 28: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

Métodose

Práticas Ágeis

Page 29: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

Métodos e Práticas Ágeis

TDD Programação

Pareada Refatoração Integração Contínua Dojos de

Programação

Extreme Programming

Scrum Kanban Lean

Page 30: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

SCRUM

Page 31: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

Scrum

Provavelmente o método mais utilizadoGerência de projetos (de software)Desenvolvimento iterativo: ciclos (sprints)CertificaçãoPapéis:

– ScrumMaster– ProductOwner– Team

Page 34: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

KANBAN

Page 37: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

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.

Page 38: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

TDD

Page 39: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

TDD: Desenvolvimento Dirigido por Testes

TDD = Test-Driven DevelopmentNão é uma técnica de Testes, mas de Projeto

Page 40: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

TDD: Desenvolvimento Dirigido por Testes

Prática ágil relacionada à programaçãoConsiste em escrever os testes antes de escrever

o código da funcionalidadeNão é uma técnica de Testes, mas de ProjetoTestes automatizados - FerramentasDisciplinaCobertura de código

Page 41: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

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

Page 42: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

PROGRAMAÇÃO

PAREADA

Page 43: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

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.

Page 44: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

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.

Page 45: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

INTEGRAÇÃO

CONTÍNUA

Page 46: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

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.

Page 47: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

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

Page 48: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

REFATORAÇÃO

Page 49: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

Refatoração

Reescrever código que já está funcionando!

Com o apoio de ferramentas.

Page 50: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

DOJOS DE

PROGRAMAÇÃO

Page 51: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software
Page 52: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

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.

Page 53: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

Comparação entre Métodos Ágeis

Page 54: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

Comparação entre Práticas Ágeis

Page 56: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

Panorama da Pesquisa em Métodos Ágeis

Page 57: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

Alguns Artigos

Page 59: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

Exemplos de Artigos

What Do We Know about Agile Software Development?

[IEEE Xplore link]

Page 60: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

Exemplos de Artigos

What Do We Know about Test-Driven Development?

[IEEE Xplore link]

Page 61: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

Exemplos de Artigos

Are Two Heads Better than One? On the Effectiveness of Pair

Programming[IEEE Xplore link]

Page 62: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

Exemplos de Artigos

Most Common Mistakes in Test-Driven Development Practice: Results from an Online Survey

with Developers[IEEE Xplore link]

Page 63: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

Outros tipos de artigos

Estudos de casoNovas “metodologias”Softwares que auxiliam na adoção de técnicas

e/ou práticasSoftware que verificam a utilização correta de

práticas

Page 64: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

Como métodos e práticas ágeis podem ser avaliados

cientificamente?

Page 65: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

Avaliação

Pesquisa Quantitativa e Qualitativa– Estudos de caso– Entrevistas– Questionários– Métricas

Colaboração com outras áreas (por exemplo, Psicologia)

Page 66: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

LITERATURA

NÃO-CIENTÍFICA

Page 67: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

LIVROS

Page 69: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

BLOGS

Page 70: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software
Page 71: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

SITES

Page 72: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software
Page 73: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

CONFERÊNCIAS

Page 74: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software
Page 75: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software
Page 76: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

Há impacto da pesquisa científica sobre métodos

ágeis na prática da indústria?

Page 77: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software
Page 78: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

Exemplo de Produto Desenvolvido com XP

Page 79: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

Exemplo de Produto Desenvolvido com XP

Page 80: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

Quais são as oportunidades de pesquisa

em métodos ágeis?

Page 81: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

TDD é efetivo?

Page 82: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

TDD melhora

o design?

Page 83: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

TDDaumenta

a produtividade?

Page 84: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

Quem diz que está fazendo TDD

está MESMO fazendo TDD?

Page 85: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

Programação Pareada aumenta ou diminui a

produtividade?

Page 86: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

Programação Pareada aumenta ou diminui a

qualidade?

Page 87: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

Como aplicar métodos ágeis no Setor Público?

Page 88: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

Dojos de programação são uma boa técnica para o

ensino de técnicas ágeis?

Page 89: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

Dojos de programação são uma boa técnica para o

ensino de técnicas ágeis?

Page 90: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

Dojos de programação são apenas um placebo?

Page 91: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

CONSIDERAÇÕES FINAIS

Page 92: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

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

Page 93: Pesquisa em Métodos Ágeis para o Desenvolvimento de Software

Pesquisa em Métodos Ágeis Para o Desenvolvimento de Software

Adolfo NetoDepartamento Acadêmico de Informática (DAINF)

Universidade Tecnológica Federal do Paraná (UTFPR)