Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

41
Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande

Transcript of Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

Page 1: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

Extreme Programming

Walfredo Cirne

Universidade Federal de Campina Grande

Page 2: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

Engenharia de Software

• 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

Page 3: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

Visão Tradicional da Evolução do Software

custo

momento em quefuncionalidade éadicionada

Page 4: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

Queremos Poder Alterar Software

• No inicio do projeto, normalmente não se sabe precisamente o que se quer

• Software evolui para atender ao business– Software nunca fica “pronto”

• Obviamente isso só é possível porque software é uma entidade abstrata

Page 5: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

Portanto…

• Precisamos parar de tentar evitar mudanças– Mudanças são um aspecto intrínseco da vida

do software

• Precisamos de uma metodologia de desenvolvimento que nos permita alterar constantemente o código sem comprometer sua qualidade

Page 6: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

O que queremos é…

custo

momento em quefuncionalidade éadicionada

Page 7: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

Extreme Programming (XP)

• Viva a mudança!!!

• Desenvolvimento de software é … – um aprendizado – como dirigir um carro

• Desenvolvimento de software não é …– como construir uma ponte– aponte e atire

Page 8: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

Aspectos Fundamentais de XP

• Refatoramento

• Testes automáticos

Page 9: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

Refatoramento

• Refatorar é melhorar o código sem alterar sua funcionalidade

• Antes de uma mudança, você refatora o código para que a mudança seja simples de fazer

• Refatoração continua possibilita manter um design legal, mesmo com mudanças freqüentes

Page 10: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

Testes Automáticos

• Testes automáticos são parte do software– Se você tem somente a funcionalidade, seu

software está incompleto

• Testes permitem que você refatore sem medo de quebrar o código

• Testes representam uma “redundância lógica” que você adiciona ao código

• Escrevendo testes antes da funcionalidade, você clareia dúvidas sobre o que o software deve fazer

Page 11: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

JUnit

Page 12: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

O Livro de Refatoração

• “Refactoring: Improving the Design of Existing Code”, escrito por Martin Fowler, contém dezenas de “receitas de refatoração”

• Se você ainda não sabe, este livro vai te ensinar Orientação a Objetos– Por exemplo, teu código tem switches em

atributos de tipo?

Page 13: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

Código Não-OO

int JobSpec::requests(){if( js_type == jst_fixed ){

return 1;} else if( js_type == jst_downey ){

return js_options;} else if( js_type == jst_nas ){

fatal( “not implemented yet" );} else {

fatal1( "unknown js_type: %s", js_type );}return 0; // this avoids a warning

}

Page 14: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

Código OO

…class DowneyJobSpec: public JobSpec {

…int requests(){

return js_options;};…

}…

Page 15: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

O Mantra do Programador XP

• Codifique, senão o software não sai• Teste, senão você não sabe se está

funcionando• Refatore, senão o código vai ficar tão ruim

que será impossível dar manutenção• Escute, para que saiba qual é o problema

a resolver• Planeje, para que você sempre faça a

coisa mais importante ainda a fazer

Page 16: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

Documento = Código

• Codificação é a atividade central do projeto

• Testes (que também são código) servem de especificação

• Comunicação oral entre desenvolvedores, baseada no código (testes e funcionalidade) que descreve o sistema

Page 17: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

Aspectos Importantes de XP

• Design mais simples possível

• Programação em pares

• Propriedade coletiva do código

• Cliente sempre disponível

• Estórias do usuário

• Planejamento do release

Page 18: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

O Design Mais Simples Possível

• Designs flexíveis são uma defesa contra mudanças imprevistas no software

• Porém, designs flexíveis também têm custos– Tempo para desenvolvimento e manutenção– O código fica mais complexo– Muita vezes a flexibilidade não é utilizada nunca

• Como mudança é barata em XP, vamos manter o design mais simples possível, modificando-o quando for necessário suportar mais funcionalidade

Page 19: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

O Design Mais Simples Possível

• O melhor design é aquele que:– Roda todos os testes– Não contém duplicação de funcionalidade– Deixa claro as decisões de design importantes– Tem o menor número possível de classes e

métodos

• O melhor design não é aquele:– Mais flexível (com mais “ganchos”)– Mais abstrato– Que resistirá ao tempo

Page 20: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

Programando em Pares

• Se revisão de código é legal, vamos fazê-la o tempo todo

• Em XP, programação é feita em pares• Pares mudam com relativa rapidez (em dias)• Programação em pares favorece comunicação e

aprendizado• Mas, você precisa estabelecer um padrão de

codificação• Há casos de redução no tempo de

desenvolvimento com programação em pares

Page 21: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

Propriedade Coletiva do Código

• Desenvolvimento com objetos leva a alterações por todo o código

• Coordenar alterações toma tempo e gera resistências no “dono” do código

• Em XP, não se coordena, simplesmente faz-se o que precisa ser feito

• Mas integra-se freqüentemente– No máximo, uma vez por dia

Page 22: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

Propriedade Coletiva do Código

• Todos são responsável por todo o código

• Qualquer um que vê uma oportunidade de adicionar valor ao código, devo fazê-lo– Mantendo em vista as prioridades do cliente– Mantendo o design mais simples possível

• Testes protegem a funcionalidade

• Padrão de codificação evita a “guerra dos parênteses”

Page 23: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

Cliente Sempre Disponível

• Um cliente (usuário da aplicação) deve trabalhar com o time para esclarecer dúvidas, resolver disputas e estabelecer pequenas prioridades

• É muito caro colocar um cliente a disposição do desenvolvimento?

• Talvez então não valha a pena fazer o sistema

Page 24: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

Estórias

• Usuários escrevem estórias descrevendo a funcionalidade que querem

• Desenvolvedores estimam o tempo necessário para implementar cada estória

• Um release é um conjunto de estórias que são disponibilizados simultaneamente– As estórias mais importantes e/ou mais difíceis

tem prioridade

Page 25: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

O Jogo do Planejamento

• Cliente decide:– escopo– prioridade– composição do release– data do release

• Programadores decidem:– estimativas– conseqüências– processo– planejamento intra-release

(o mais arriscado primeiro)

Page 26: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

Releases

• XP preconiza releases pequenos e freqüentes (a cada 2-3 meses)

• As quatro dimensões do desenvolvimento de software são Custo, Tempo, Qualidade e Escopo– XP tenta manter escopo como variável livre

Page 27: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

Iterações

• Releases são divididas em iterações de 2-3 semanas

• Uma iteração alcança algum objetivo (tipicamente a adição de nova funcionalidade)

• Nada é feito que não seja imediatamente útil e necessário para não impactar os prazos de desenvolvimento

Page 28: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

Tarefas

• Iterações são divididas em tarefas

• Tarefas são a menor quantidade de trabalho que pode ser feita até que todos os testes voltem a funcionar

• Tarefas não levam mais que um dia

• Uma vez concluídas, tarefas são integradas imediatamente

Page 29: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

Outros Aspectos de XP

• Jogue pra ganhar

• Adapte para a situação em mão

• “Travel light”

• Estimativas baseadas na experiência

• Métricas customizadas

Page 30: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

Outros Aspectos de XP

• Faça o mais arriscado primeiro

• Crie testes para cada bug encontrado

• Trabalhe a favor dos instintos dos programadores, não contra eles

• Responsabilidade é aceita, nunca imposta

• Hora extra rotineira não funciona

Page 31: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

Valores de XP

• Simplicidade

• Comunicação

• Feedback

• Coragem

Page 32: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

Simplicidade e Comunicação

Simplicidade

Comunicação

clarezaconfiança

menos a comunicarmais completo

Page 33: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

Feedback

• Feedback possibilita que o software evolva

• “Pergunte ao software, não a um documento”

• Feedback precisa ser:– Cedo (pra gente descobrir logo se está fazendo

a coisa correta)– Concreto (feedback oriundo do código)– Constante (o ciclo de desenvolvimento tem que

ser curto)

Page 34: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

Coragem

• Colocar o cliente a par do que tá acontecendo

• Acreditar na capacidade de responder a mudanças

• Aprender com os erros

• Acreditar no feedback (não na “teoria”)

• Jogar pra ganhar (não pra ter uma desculpa)

• Fazer o que precisa ser feito– Jogar fora código ruim

Page 35: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

Dificuldades em XP

• Considerar testes como parte normal do processo de desenvolvimento

• Sempre fazer a coisa mais simples

• Admitir que você não sabe

• Colaborar

• Vencer resistência nas pessoas

Page 36: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

Problemas de XP

• Times grandes

• Situações em que você não pode mudar livremente o código

• Escrever testes para sistemas não-deterministicos, distribuídos ou paralelos

Page 37: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

Concluindo, use XP se você...

• tem que lidar com mudanças freqüentes

• se depara com requerimentos vagos

• valoriza resultado mais que cerimônia

• valoriza trabalho em equipe mais que “poder”

Page 38: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

Como fica Engenharia de Software?• Dificuldades no Desenvolvimento de SW

– Complexidade + detalhes – Especificações vagas– Mutabilidade

• Soluções– Ênfase no projeto, métodos formais– Modularização– Revisão– Testes

Page 39: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

Referências Futuras

• Extreme Programming Explained por Beck

• Extreme Programming Installed por Jeffries, Anderson e Hendrickson

• Planning Extreme Programming por Beck e Fowler

• Refactoring: Improving the Design of Existing Code por Fowler

• Design Patterns pela “Gangue dos Quatro”

Page 40: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

Referências Futuras

• http://www.xispe.com.br/index.html• http://www.extremeprogramming.org• http://www.xprogramming.com• http://www.martinfowler.com/articles/

newMethology.html• http://www.pairprogramming.com• http://www.junit.org

Page 41: Extreme Programming Walfredo Cirne Universidade Federal de Campina Grande.

Referências Futuras

• http://www.objectmentor.com/ publications/RUPvsXP.pdf

• http://members.aol.com/humansandt/papers/pairprogrammingcostbene/pairprogrammingcostbene.htm