Buscar

05_4C-XP-1


Continue navegando


Prévia do material em texto

Tema da Aula
..
..
Modelo Ágil – XP
Extreme Programming
Engenharia 
de
Software
eXtreme Programming
Criado por Kent Beck, Ron Jeffries e Ward Cunningham.
Disciplina de desenvolvimento de SW, voltada para equipes pequenas e médias e projetos com requisitos vagos ou que mudam freqüentemente.
Principal tarefa é a codificação.
Aborda: TDD, participação do cliente como membro da equipe, revisão permanente do código, refactoring, integração contínua, refinamento contínuo da arquitetura e planejamento.
Engenharia 
de
Software
XP
Engenharia 
de
Software
XP
Comunicação
	Práticas valorizam a comunicação, não limitada a procedimentos formais
Simplicidade
	Incentiva ao extremo práticas que reduzam a complexidade
Feedback
	Práticas garantem um rápido feedback sobre várias partes do projeto
Coragem
	Práticas aumentam a confiança dos desenvolvedores e do próprio cliente
Engenharia 
de
Software
Ciclo de Vida XP
Engenharia 
de
Software
Ciclo de Vida XP
Define escopo
Engenharia 
de
Software
Visão Geral XP
http://www.extremeprogramming.org/map/iteration.html
Engenharia 
de
Software
Práticas XP
Engenharia 
de
Software
Práticas XP
Whole Team (time coeso)
 Clientes faz parte da equipe
 Desenvolvedores devem ter múltiplas habilidades e competências
Engenharia 
de
Software
Práticas XP
Planning Games (jogos de planejamento)
Reunião no início da semana para priorizar as funcionalidades
Clientes apontam as prioridades, para a semana 
Uma semana = uma iteração
Desenvolvedores estimam tempo, esforço e custo
Envolvimento do cliente é imperativo
A cada iteração sabe que funcionalidades ser-lhe-ão entregues no final da semana
Escopo do projeto é revisto e atualizado semanalmente
Projeto deve ser regido por um contrato do tipo negociável
Engenharia 
de
Software
Práticas XP
Small Releases (pequenas entregas)
Disponibiliza a cada iteração SW 100% funcional
Versão disponibilizada imediatamente
Redução de riscos (se o projeto terminar, parte existe e funciona)
Detecção prévia de problemas
Comunicação entre cliente e desenvolvedor
Cada entrega possui funcionalidades prioritárias para a iteração
Release pode ser destinado a
usuário/cliente (testa, avalia e oferece feedback)
usuário/final (sempre que possível)
Engenharia 
de
Software
Práticas XP
Customer Tests (testes de aceitação)
São elaborados pelo cliente em conjunto com analistas e testadores
São automatizados
Quando rodarem com sucesso, funcionalidade foi implementada
Devem ser rodados a cada iteração
Ótimo feedback para o cliente
Pode se saber, a qualquer momento, o percentual de implementação do SW e quanto falta para concluir
Engenharia 
de
Software
Práticas XP
Collective Ownership (propriedade coletiva)
O código tem um único dono: a equipe
Qualquer par de programadores pode melhorar o código
Revisão constante do código
Aumenta a comunicação
Aumenta a qualidade (menos duplicação, maior coesão) e diminui os riscos de dependência de indivíduos
 Todos compartilham a responsabilidade pelas alterações
 Ideal que se troque os pares periodicamente
“Todos conhecem tudo”
Testes e integração contínua são essenciais e dão segurança
Engenharia 
de
Software
Práticas XP
Coding Standards (padrões para codificação)
Os padrões de codificação são definidos pela equipe
Organização de código
Nomenclaturas
Código com aspecto de escrito por um único desenvolvedor
Práticas e valores favorecidos
Posse coletiva
Comunicação
Programação em Pares
Refactoring
Projeto Simples
Engenharia 
de
Software
Práticas XP
Sustainable Pace (ritmo saudável)
Projetos vampiros não são projetos XP
Semanas de 40 horas
Código ruim, relaxamento da disciplina, stress da equipe
Tempo ganho será perdido depois
São aceitáveis eventuais horas extras quando a produtividade é maximizada
Engenharia 
de
Software
Práticas XP
Metaphor (metáfora)
Equipes XP mantém uma visão compartilhada do sistema
Analogia com outros sistemas (natural, computacional, abstrato)
Ótima fonte de comunicação entre a equipe, facilitando inclusive as estimativas
Pattern de alto nível
Corresponde ao “design arquitetural” nos demais modelos
Engenharia 
de
Software
Práticas XP
Continuous Integration (integração contínua)
XP mantém o SW integrado o tempo todo
Realizada pelo menos uma vez por dia
Para integrar, deve-se realizar os testes primeiro
“Reduz o tempo passado no inferno da integração” (Martin Fowler)
Benefícios
Expõe o estado atual de desenvolvimento
Oferece feedback
Estimula agilidade e versões freqüentes do SW
Engenharia 
de
Software
Práticas XP
Test-driven Development (Desenv. dirigido por Testes)
 XP valoriza o desenvolvimento dirigido por testes
São automatizados e executados o tempo todo
 Testes “puxam” o desenvolvimento
Cada unidade de código só tem valor se o teste funcionar 100%
 Testes dão coragem para mudar
De que adianta a OO isolar a interface da implementação se o desenvolvedor tem medo de mudar a implementação?
Engenharia 
de
Software
Práticas XP
Refactoring (refinamento do código)
 Design é melhorado continuamente por refinamento
Mudança proposital no código que está funcionando
Melhorar sua estrutura interna sem alterar a funcionalidade
Visa simplificar o código, remover o código duplicado
Principal referência é o catálogo de refactorings de Martin Fowler
Existência prévia de testes é fundamental para utilização desta prática (elimina o medo dos desenvolvedores de adotar a mudança)
Engenharia 
de
Software
Práticas XP
Simple Design (projeto simples)
Projeto está presente em todas as etapas XP
Projeto começa simples e se mantém assim através de testes e refinamento de código (refactoring)
Em XP, é levado ao extremo
Não é permitido implementar qualquer funcionalidade adicional que não será usada na iteração atual
Implementação ideal é aquela que
Passa por todos os testes
Expressa todas as idéias definidas no planejamento
Não contém código duplicado ou que “cheire”
Prever o futuro é impossível e é “anti-XP”
Engenharia 
de
Software
Práticas XP
Pair Programming (programação em pares)
SW é desenvolvido em pares
Duas cabeças juntas são melhores que duas separadas
1 piloto e 1 co-piloto
Papéis são alternados freqüentemente
Benefícios
Melhor qualidade de código (refactoring, testes)
Revisão constante do código
Nivelamento da equipe
Maior comunicação
“Um” pelo preço de “Dois”??
Pesquisas demonstram que duplas produzem código de melhor qualidade em aproximadamente o mesmo tempo que programadores que trabalham sozinhos.
Engenharia 
de
Software
Práticas XP
Test-driven Development (Desenv. dirigido por Testes)
Engenharia 
de
Software
XP
Metáforas ou histórias é escrita pelo cliente e colocada num cartão de indexação. O cliente atribui um valor para a história (priorizar) com base no valor de negócio global daquela função. Membros da equipe avaliam a história e lhe atribuem um custo, medido em semanas de desenvolvimento (Planning Poker).
	Se a história precisar de mais de 3 semanas de desenvolvimento, pede-se ao cliente para dividir a história em histórias menores e repete-se o processo.
Engenharia 
de
Software
XP
XP Projeto:
Segue o princípio “KIS” (Keep it simple).
Sugere a criação de “soluções de ponta” (spike solutions) como um protótipo operacional do projeto.
 Encoraja Refatoração (refinamento iterativo do projeto do programa).
Engenharia 
de
Software
XP
XP Codificação:
Recomenda a construção de uma unidade de teste antes de iniciar a codificação (protótipo).
Encoraja Programação Pareada
Engenharia 
de
Software
XP
XP Teste:
Todas as unidades de teste são executadas diariamente (casos).
Testes de Aceitação são realizados com o cliente para validar os releasesdo produto.
Engenharia 
de
Software
Papéis
Cliente:
Responsável por escrever “histórias” (story cards).
Muitas vezes é um programador ou é representado por um programador do grupo.
Trabalha no mesmo espaço físico do grupo.
Novas versões são enviadas para produção todo mês (ou toda semana).
Feedback do cliente é essencial.
Requisitos mudam (e isso não é mau).
Engenharia 
de
Software
Papéis
Treinador (Coacher):
Em geral, o mais experiente do grupo.
Identifica quem é bom no que.
Lembra a todos as regras do jogo (XP).
Eventualmente faz programação pareada.
Não desenha arquitetura, apenas chama a atenção para oportunidades de melhorias.
Seu papel diminui à medida em que o time fica mais maduro.
Engenharia 
de
Software
Papéis
Acompanhador (Tracker):
A “consciência” do time.
Coleta estatísticas sobre o andamento do projeto. Alguns exemplos:
Número de historias definidas e implementadas.
Número de testes unitários.
Número de testes funcionais definidos e funcionando.
Número de classes, métodos, linhas de código
Mantém histórico do progresso.
Faz estimativas para o futuro.
Engenharia 
de
Software
Adotando e Escalando XP
 Adote as práticas em doses homeopáticas
Não seja afobado, saboreie a mudança
Enfatize o problema mais importante
 Dificuldades culturais
Deixar alguém mexer no seu código
Pedir ajuda
Ânsia de tentar prever o futuro
Escrever testes antes de codificar
Refatorar com freqüência (superar o medo)
 Situações difíceis de aplicar XP
Equipes grandes e distribuídas geograficamente
Perda do controle sobre código
Feedback demorado
Engenharia 
de
Software
Adotando e Escalando XP
XP e os processos ágeis valorizam as pessoas
Bons desenvolvedores criam bons SWs
Processos ágeis são suplementos aos outros métodos
São atitudes
São efetivos
Não é um ataque à documentação e sim a criação de documentos que tem valor
Não são para todos
O segredo está na sinergia de suas práticas
Menos formalidade, mais diversão
Engenharia 
de
Software
Adotando e Escalando XP
Não provê documentação necessária
Dificuldades “após o projeto”
Funciona apenas para equipes experientes
Práticas disciplinadas e rigorosas
Pouca atenção ao projeto de software (arquitetura)
Em geral, a arquitetura é definida “de baixo pra cima”
Requer uma grande mudança cultural na organização para ser adotado
Ex.1: necessidade do cliente fazer parte da equipe
Ex.2: Patrocinadores do projeto querem saber exatamente o que será feito e quando
Engenharia 
de
Software
Quando usar o quê?
Engenharia 
de
Software
Notas sobre XP
XP não é para todo mundo, mas todo mundo pode aprender com ele.
Deixa o bom programador livre para fazer o que ele faria se não houvesse regras.
Força o [mau] programador a se comportar de uma forma similar ao bom programador.
Engenharia 
de
Software
Notas sobre XP
Engenharia 
de
Software
Notas sobre XP
http://agilemanifesto.org
http://www.agilemodeling.com
http://www.extremeprogramming.org
http://www.xprogramming.com
http://www.pairprogramming.com
http://www.martinfowler.com
http://wwwobjectmentor.com
http://www.c2.com
http://www.xispe.com.br