If you can't read please download the document
Upload
ricardo-banffy
View
1.367
Download
0
Embed Size (px)
Citation preview
Extreme Programming
Extreme Programming
Ricardo L. A. BnffyHiperlgica
Motivaes
Requerimentos mutveis
No mais possvel projetar um sistema ao longo de 6 meses, implement-lo ao longo de um ano, coloc-lo em produo e esperar que ele ainda resolva algum problema real
Limitao da complexidade
Custo de manuteno de um sistema aumenta com o tempo se a complexidade no for limitada
Agilidade
Releases frequentes garantem que problemas mais crticos so resolvidos mais cedo
Internet-time e vantagens de first-to-market
12 prticas
12 prticas
Processo de Planejamento (Planning Game)
Releases Frequentes
Metfora do Sistema
O Mais Simples que Possa Funcionar
Testar Antes
Refactoring
Pair-Programming
Propriedade Coletiva do Cdigo
Integrao Contnua
Semanas de 40 Horas
Cliente Sempre Presente
Padres de Codificao
Planning Game
Equipe de negcios (Cliente) escreve estrias (curtas) sobre funcionalidades do sistema, usualmente em cartes
Equipe tcnica (Programadores) estima o custo das estrias
Cliente decide qual a durao do prximo ciclo
Cliente escolhe, com base nas estimativas dos programadores, quais estrias sero atendidas nesse ciclo e quais ficaro nos prximos ciclos
Garante que o cliente tenha o maior retorno em cada ciclo de desenvolvimento
Releases Frequentes
Minimizam a quantidade de recursos investida em cada release
Ciclos curtos, na ordem de dias ou semanas, permitem retorno rpido sobre o investimento funcionalidades importantes entraro em funcionamento mais cedo
Todo o cdigo pronto (que passa em todos os testes unitrios) deve ser integrado e o sistema todo testado aps a integrao
Metfora do Sistema
Comunica de forma clara o que se espera de um produto
Unifica a nomenclatura e estabelece uma linguagem cumum entre negcios e tecnologia
Ajuda os programadores a compreender o domnio do problema
O Mais Simples que Possa Funcionar
Menor complexidade diminui riscos A complexidade o inimigo
Software tende naturalmente a crescer e se tornar mais complexo (mais interaes entre componentes distintos aumentam o risco de quebras em alteraes)
Software alterado durante sua vida til requerimentos mudam e o software pode se tornar mais complexo que os requerimentos necessitem
Garante que no sero gastos recursos em estrias que algum acha que sero um dia necessrias
Testar Antes
Testes devem ser escritos ANTES de se codificar a funcionalidade do produto
Testes funcionam como documentao (embora no a substituam)
Escrever os testes obriga a pensar na forma como o componente ser usado ANTES de codific-lo
Um componente s est pronto se todas as formas com que ele for usado passarem nos testes correspondentes
Unit-testing (apndice)
Testes devem ser automatizados para serem executados sempre que possvel
Testes de difcil execuo sero eventualmente abandonados
Tuda a funcionalidade que no estiver sendo testada ou deveria estar sendo testado ou no necessria e deveria ser removida
Framework de testes (xUnit)
Refactoring
Cdigo tende a se deteriorar ao longo do tempo
Solues brilhantes de um dia parecem estpidas depois de uma semana
Refactoring no deve acrescentar funcionalidade apenas limpar a funcionalidade existente
sempre recomendvel fazer refactoring antes de acrescentar alguma funcionalidade
Pair-Programming
Duas cabeas pensam melhor do que uma
Uma cabea obriga a outra a pensar no problema
Se um colega no entende o cdigo ele no est suficientemente claro e no ser entendido depois
Para promover o entendimento da soluo, desejvel que as duplas sejam formadas por programadores com nveis diferentes de experincia
Funciona como um code-review em tempo real
Menos distraes (ICQ, Slashdot, e-mail)
Propriedade Coletiva do Cdigo
Se algo est quebrado, complexo demais ou poderia ser melhorado, isso seve ser corrigido
Todos os programadores devem ser capazes de consertar qualquer cdigo do sistema no pode haver especialistas numa nica parte
Evita dependncia de profissionais
Promove o entendimento global da soluo (sem caixas-pretas de funcionalidade)
Integrao Contnua
A verso oficial, passando em todos os testes unitrios e funcionais deve estar sempre disponvel
Todo o novo desenvolvimento deve partir dessa verso
Todo cdigo pronto (que passa em todos os testes) deve ser incorporado a essa verso assim que possvel
Semanas de 40 horas
Horas extras e viradas de noite produzem cdigo de baixa qualidade
Programadores devem ter uma vida prpria para se manterem felizes, saudveis e produtivos
Horas extras so um sinal de alarme para a equipe
Cliente Sempre Presente
Responde dvidas melhor e mais rapidamente
Comunicao pessoal mais eficiente do que por escrito
Programadores no devem tomar decises para as quais no esto preparados (e pelas quais sero responsabilizados)
Padres de Codificao
Se todos os programadores devem editar qualquer parte do cdigo, eles precisam ser capazes de entend-lo
Cdigo deve ser mantido legivel para a posteridade, limitando o aumento de custo de manuteno ao longo do tempo
Os padres no precisam ser arbitrrios ou impostos com uso de violncia desejvel que sejam consensuais
Dificuldades
Cliente ausente
Procure um substituto para representar o cliente: um gerente de conta ou gerente de produto (quando o cliente for algo como mercado)
Mais de um cliente
Procure obter um nico representante que tenha poder de decidir pelos vrios interesses do cliente. Os clientes devem poder se reunir entre si antes de se reunir com a equipe tcnica
Privacidade, ambiente hostil, ferramentas estranhas
Quando desenvolvedores resistem ao pair-programming, procure criar um espao para pair-programming mquinas dedicadas a isso com editores e OSs que os programadores prefiram
Dificuldades
Custos
Pair-programming caro primeira vista. Argumente que os programadores vo se dispersar menos e que o cdigo ser de melhor qualidade do que se estivessem trabalhando sozinhos
Sistemas legados
mais fcil comear o projeto em XP do que mud-lo para XP durante sua execuo. Procure fazer a transio em algum momento de descontinuidade (entrega de funcionalidade)
Dificuldades
Propriedade do cdigo
Programadores no podem ter cimes de suas criaes
Encoraje o uso das mesmas linguagens e bibliotecas por toda a aplicao
Dificuldades para testar
Sempre testar componentes quanto funcionalidade.
Separao entre contedo e apresentao ajuda
Componentes de interface podem ser testados separadamente
Alguns componentes dependem de funcionalidade externa testing frameworks podem ter que ser desenvolvidos para a sua plataforma (ex: zUnit)
Componentes devem ser construdos de forma a facilitar os testes
Dificuldades
Internet-Time
Presses nos induzem a reverter a prticas menos adequadas
Ciclos podem se tornar curtos demais para funcionar
Tendncia a abandonar testes acreditando que sacrificar qualidade poupe tempo (pode poupar, mas afeta a qualidade e a vida til do software)
Para saber mais
www.extremeprogramming.orgwww.xprogramming.comwww.hiper.com.br
[email protected], sites automticosAv. Brig. Faria Lima, 628 cj. 61So Paulo SP 05426-000(55 11) 3816 7785www.hiper.com.br