Ágil na prática

Download Ágil na Prática

If you can't read please download the document

Upload: igo-coelho

Post on 14-Jun-2015

354 views

Category:

Documents


0 download

DESCRIPTION

Slides da parte onde falei um pouco de algumas práticas no curso ágil na prática ministrado em Salvador no ano de 2009.

TRANSCRIPT

GIL na PRTICA

Igo Coelho www.igocoelho.com.br

Uma pesquisa do Departamento de Comrcio dos EUA, publicada em 2002, revelou que falhas de software so to comuns e to danosas que se estima que causem um prejuzo anual de mais de 60 bilhes de dlares para a economia americana. O estudo tambm alega que, embora no seja possvel remover todos os erros, mais de um tero destes custos poderia ser eliminado caso se utilizasse uma infra-estrutura de testes melhor, que permitisse identificar e remover defeitos mais cedo e de forma mais eficaz. Atualmente, calcula-se que cerca de 50% dos defeitos so encontrados apenas nas fases finais dos projetos, ou aps os sistemas comearem a ser utilizados em produo.

Testes

Igo Coelho www.igocoelho.com.br

Escreva o teste da implementao ANTES de escrev-la

Escreva somente cdigo suficiente para o teste passar e nada alm disso

Escreva testes pequenos: teste a menor quantidade possvel de cdigo de cada vez

Escreva testes muito rpidos: no devem demorar mais do que alguns segundos para serem executados

TDD

Regras fundamentais do TDD

Igo Coelho www.igocoelho.com.br

Criar um teste

Executar todos os testes da aplicao para ver o teste falhar

Escrever a implementao testada

Executar os testes para ver se todos esto OK

Refactoring

Executar os testes novamente para ver se eles continuam passando

TDD

Etapas da programao com TDD

Igo Coelho www.igocoelho.com.br

TDD

Design

Implementao

Teste

Igo Coelho www.igocoelho.com.br

TDD

Design

Implementao

Teste

Igo Coelho www.igocoelho.com.br

TDD

Design

Implementao

Teste

Teste

Igo Coelho www.igocoelho.com.br

TDD

Design

Implementao

Teste

Teste

Igo Coelho www.igocoelho.com.br

TDD

Igo Coelho www.igocoelho.com.br

TDD

Igo Coelho www.igocoelho.com.br

TDD

Igo Coelho www.igocoelho.com.br

TDD

Igo Coelho www.igocoelho.com.br

TDD

Igo Coelho www.igocoelho.com.br

TDD

Igo Coelho www.igocoelho.com.br

TDD

Igo Coelho www.igocoelho.com.br

TDD

Igo Coelho www.igocoelho.com.br

TDD

Igo Coelho www.igocoelho.com.br

Cdigo mais testvelEstimula um design melhor

Fora que os designs antigos que so pouco testveis sejam refatorados

Facilita o refactoring

Evita o overdesignS se escreve cdigo suficiente para o teste passar

Evita que o desenvolvedor tente advinhar o futuo

Colabora com a documentao

TDD

Consequncias:

Igo Coelho www.igocoelho.com.br

Colabora para o aumento da qualidade dos sistemas

Desenvolvedores ficam mais corajosos e confiantes ao programar!

Software cresce de forma ordenada e com qualidade de design

Software se adapta com mais facilidade a mudanas

TDD

Concluses:

No incio, 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 comeo e nos tornamos melhores medida que praticamos. Pelos problemas que foram descritos no incio e o impacto negativo que eles trazem para ns, para nossa indstria e nossos clientes, o esforo certamente vlido!

Igo Coelho www.igocoelho.com.br

Assegure que seja possvel executar o build e todos os testes automatizados do projeto em at dez minutos. Builds automatizados so importantes porque fazem a equipe ganhar tempo e garantem que os passos sejam consistentemente seguidos sempre que so executados.

Build de 10 minutos

Igo Coelho www.igocoelho.com.br

Se o build demora demais...

Build de 10 minutos

A equipe deixar de execut-lo frequentemente

Menos feedback

Erros tendem a se acumular

Aumento do stress da equipe

Igo Coelho www.igocoelho.com.br

Mantenha o build rpido para...

Build de 10 minutos

Garantir a consistncia dos passos

Testes ajudam a detectar falhas mais cedo

Diminuir o stress da equipe

Igo Coelho www.igocoelho.com.br

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 rpida para que o ideal de um build de dez minutos seja alcanado.

Build de 10 minutos

Igo Coelho www.igocoelho.com.br

o processo de alterao de um sistema de software de modo que o comportamento observvel do cdigo no mude, mas que sua estrutura interna seja melhorada. uma maneira disciplinada de aperfeioar o cdigo que minimiza a chance de introduo de falhas. Em essncia, refatorar melhorar o projeto do cdigo aps este ter sido escrito. [Fowler, Refatoraco]

Refatorao

Igo Coelho www.igocoelho.com.br

Refatorao

Igo Coelho www.igocoelho.com.br

Refatorao

/** Salva o produto no banco de dados. */public void save() {// Verifica propriedadesif (this.getName() == null) {throw new Exception("Falta nome");} else if (this.getDescription() == null) {throw new Exception("Falta a descrio");}

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 descrio do produto.");}}

Igo Coelho www.igocoelho.com.br

Refatorao

Kent Beck, um dos criadores da Programao Extrema, afirma que refatorao deve ser utilizada quando o "cdigo cheirar mal" (do ingls bad smells in code). Este conselho bem humorado indica uma confiana na experincia de programadores e tambm ressalta o valor esttico do cdigo, que deve valorizar a clareza e comunicao.

Igo Coelho www.igocoelho.com.br

Refatorao

Alguns indcios j possuem uma aceitao ampla para promover refatorao:

Cdigo duplicado (duplicated code)

Mtodo longo (long method)

Classe grande (large class)

Lista de parmetros longa (long parameter list)

M indentao(Bad Indentation)

Igo Coelho www.igocoelho.com.br

Design Incremental

O objetivo criar a soluo mais simples possvel que seja suficiente para implementar as funcionalidades de cada iterao. Qualquer caracterstica que possa ser implementada para dar apoio a funcionalidades futuras, s so codificadas de fato se e quando tais funcionalidades forem priorizadas para uma iterao futura.

Igo Coelho www.igocoelho.com.br

Design Incremental

Devemos buscar concentrar os esforos da equipe naquilo que se tem certeza absoluta de que ser necessrio hoje, por j ter sido priorizado pelo cliente para a iterao corrente. Aquilo que poderia ser til no futuro, deixamos para resolver no futuro, quando houver certeza da necessidade.

Igo Coelho www.igocoelho.com.br

Integrao Contnua

Definio de requisitos

Anlise / Design

Codificao

Testes

Integrao

Tempo

Entrega

Igo Coelho www.igocoelho.com.br

Integrao Contnua

ltimo estgio do desenvolvimento

Testar apenas com o software pronto

Funcionou na minha mquina!

Qualidade um asset dispensvel

Qualidade responsabilidade do QA Team

O Mercado pode esperar

Igo Coelho www.igocoelho.com.br

Integrao Contnua

Riscos so subestimados

Interpretao errada de requisitos

Incompatibilidade entre interfaces

Muitos bugs na fase de integrao

Qualidade responsabilidade do QA Team

Testes demoram demais

Atraso na entrega

A realidade...

Igo Coelho www.igocoelho.com.br

Integrao Contnua

Como?Reduzir riscos

Responder rpido as mudanas

Reduzir custos

E se ns pudssemos reunir...Velocidade

Qualidade

Informaes para tomada de decises

Desafios para competir no mercado:

Igo Coelho www.igocoelho.com.br

Integrao Contnua

Definio de requisitos

Anlise / Design

Codificao / Teste

Integrao

Ciclos de desenvolvimento

Entrega

Igo Coelho www.igocoelho.com.br

Integrao Contnua

Integrao Contnua uma prtica de desenvolvimento de software em que membros de um time integram seu trabalho frequentemente, normalmente cada membro faz integraesdiariamente, conduzindo a multiplas integraes dirias. Cada integrao verificada por um build automtico (incluindo testes) para detectar erros o mais rpido possvel.

Martin Fowler

Igo Coelho www.igocoelho.com.br

Integrao Contnua

Igo Coelho www.igocoelho.com.br

Integrao Contnua

Sincronizao do cdigo produzido ao menos uma vez ao dia

Testes garantem a consistncia da base de cdigo unificada

Relatrios de qualidade gerados automaticamente

Problemas na construo do software tem prioridade mxima

Facilmente possvel saber a sade do projeto

Igo Coelho www.igocoelho.com.br

Integrao Contnua

Construo

Teste

Inspeo

Feedback

Elementos do processo:

Igo Coelho www.igocoelho.com.br

Integrao Contnua

Automao:Ant

NAnt

Maven

Rake

Make

...

Controle de verso:CVS

Subversion

GIT

Mercurial

...

Construo:

Igo Coelho www.igocoelho.com.br

Integrao Contnua

Testes:

JUnit

PHPUnit

DUnit

Test Unit para Rails

Selenium

WebTest

Fit / Fitnesse

...

Igo Coelho www.igocoelho.com.br

Integrao Contnua

Inspeo:

Anlise Esttica:PMD

FindBugs

...

Complexidade / Dependncias:SourceMonitor

JDepend

JavaNCSS

...

Duplicao de Cdigo:CPD

Simian

...

Igo Coelho www.igocoelho.com.br

Integrao Contnua

Feedback:

Igo Coelho www.igocoelho.com.br

Integrao Contnua

Alguns servidores:

Hudson

CruiseControl

AntHill

Continuum

TeamCity

Bamboo

Luntbuild

...