6. Escreva testes muito rápidos: não devem demorar mais do que alguns segundos para serem executados TDD Regras fundamentais do TDD Igo Coelho www.igocoelho.com.br
33. Software se adapta com mais facilidade a mudanças TDD Conclusões: No início, trabalhar com TDD pode parecer um pouco doloroso, pois temos que fazer o inverso do que estamos acostumados. Mas, como em todo aprendizado, a dificuldade vem apenas no começo e nos tornamos melhores à medida que praticamos. Pelos problemas que foram descritos no início e o impacto negativo que eles trazem para nós, para nossa indústria e nossos clientes, o esforço certamente é válido! Igo Coelho www.igocoelho.com.br
34. Assegure que seja possível executar o build e todos os testes automatizados do projeto em até dez minutos. Builds automatizados são importantes porque fazem a equipe ganhar tempo e garantem que os passos sejam consistentemente seguidos sempre que são executados. Build de 10 minutos Igo Coelho www.igocoelho.com.br
42. Para algumas equipes o build de dez minutos pode parecer algo distante da realidade. Nesses casos, dez minutos devem ser vistos como um ideal. Quando a equipe possui uma boa base de testes automatizados , um dos maiores desafios é assegurar que eles executem de forma suficientemente rápida para que o ideal de um build de dez minutos seja alcançado. Build de 10 minutos Igo Coelho www.igocoelho.com.br
43. É o processo de alteração de um sistema de software de modo que o comportamento observável do código não mude, mas que sua estrutura interna seja melhorada. É uma maneira disciplinada de aperfeiçoar o código que minimiza a chance de introdução de falhas. Em essência, refatorar é melhorar o projeto do código após este ter sido escrito. [Fowler, Refatoracão] Refatoração Igo Coelho www.igocoelho.com.br
45. Refatoração /** Salva o produto no banco de dados. */ public void save() { // Verifica propriedades if (this.getName() == null) { throw new Exception("Falta nome"); } else if (this.getDescription() == null) { throw new Exception("Falta a descrição"); } this.getDatabase().save(this); } /** Salva o produto no banco de dados. */ public void save() { this.checkProperties(); this.getDatabase().save(this); } /** Verifica as propriedades do produto. */ public void checkProperties() { if (this.getName() == null) { throw new Exception("Falta nome do produto."); } else if (this.getDescription() == null) { throw new Exception("Falta a descrição do produto."); } } Igo Coelho www.igocoelho.com.br
46. Refatoração Kent Beck , um dos criadores da Programação Extrema , afirma que refatoração deve ser utilizada quando o "código cheirar mal" (do inglês bad smells in code ). Este conselho bem humorado indica uma confiança na experiência de programadores e também ressalta o valor estético do código, que deve valorizar a clareza e comunicação. Igo Coelho www.igocoelho.com.br
52. Design Incremental O objetivo é criar a solução mais simples possível que seja suficiente para implementar as funcionalidades de cada iteração . Qualquer característica que possa ser implementada para dar apoio a funcionalidades futuras, só são codificadas de fato se e quando tais funcionalidades forem priorizadas para uma iteração futura. Igo Coelho www.igocoelho.com.br
53. Design Incremental Devemos buscar concentrar os esforços da equipe naquilo que se tem certeza absoluta de que será necessário hoje, por já ter sido priorizado pelo cliente para a iteração corrente. Aquilo que poderia ser útil no futuro, deixamos para resolver no futuro, quando houver certeza da necessidade. Igo Coelho www.igocoelho.com.br
54. Integração Contínua Definição de requisitos Análise / Design Codificação Testes Integração Tempo Entrega Igo Coelho www.igocoelho.com.br
72. Informações para tomada de decisões Desafios para competir no mercado: Igo Coelho www.igocoelho.com.br
73. Integração Contínua Definição de requisitos Análise / Design Codificação / Teste Integração Ciclos de desenvolvimento Entrega Igo Coelho www.igocoelho.com.br
74. Integração Contínua “ Integração Contínua é uma prática de desenvolvimento de software em que membros de um time integram seu trabalho frequentemente, normalmente cada membro faz integrações diariamente, conduzindo a multiplas integrações diárias. Cada integração é verificada por um build automático (incluindo testes) para detectar erros o mais rápido possível.” Martin Fowler Igo Coelho www.igocoelho.com.br