Anotações
Apresentação de slides
Estrutura de tópicos
1
Modulo I
Método Ágil
XP – Extreme Programming
  • Prof. Ismael H F Santos


2
Bibliografia
  • Vinicius Manhaes Teles, Extreme Programming,  Novatec Editora
  • Agile Software Development
  • Scrum and XP from the Trenches
  • Martin Fowler, Analysis Patterns - Reusable Object Models, Addison-Wesley,1997
  • Martin Fowler, Refatoração - Aperfeiçoando o projeto de código existente, Ed Bookman
3
Ementa
  • Introdução
  • Valores do XP
  • Bugs e Tests
  • Valores e Princípios do XP
  • Praticas do XP


4
MA-XP
5
A Quem se Destina XP?
  • Grupos de 2 a 10 programadores
  • Projetos de 1 a 36 meses (calendário)
  • De 1000 a 250 000 linhas de código
  • Papéis:
    • Programadores  (foco central)(sem hierarquia)
    • “Treinador” ou “Técnico” (coach)
    • “Acompanhador”  (tracker)
    • Cliente
6
E Se Eu Não Me Encaixo Nesses Casos?
  • Você ainda pode aprender muito sobre desenvolvimento de software.
  • Terá elementos para repensar as suas práticas.
  • No início se dizia:
    • “Ou você é 100% eXtremo ou não é eXtremo. Não dá prá ser 80% XP.”
    • XP is now like teenage sex.
    • Hoje não é mais necessariamente assim.
7
Programação eXtrema XP
  • Metodologia de desenvolvimento de software aperfeiçoada nos últimos 10 anos.
  • Ganhou notoriedade a partir da OOPSLA’2000.
  • Projetos com requisitos muito voláteis
  • Equipes pequenas (até ~10 pessoas)
  • Desenvolvimento incremental


  • Nomes: Kent Beck, Ward Cunningham, and Ron Jeffries em 2000
8
Visão Geral de XP
  • Valores:
  • Simplicidade
  • Comunicação
  • Feedback
  • Coragem


9
Práticas de XP
  • Jogo do Planejamento
  • Pequenas Versões
  • Projeto Simples
  • Refatoração
  • Teste Primeiro
  • Programação em Pares



10
Variáveis de Projeto – Visão XP
  • Modelo Tradicional:
    • Tempo
    • Escopo
    • Custo


    • Manipula-se a  Qualidade
11
Sobre o Extreme Programming (XP)
  • XP é o mais importante  movimento em nosso campo hoje em dia. Eu estou prevendo que ele será tão essencial para a geração atual quanto o SEI e o Capability Maturity Model (CMM) foram para o passado.


  • Tom DeMarco (2000)


12
 
13
Sobre o Extreme Programming (XP)
  • XP não é uma idéia totalmente terminada
  • Os limites de sua aplicação ainda não estão bem definidos
  • As práticas do método não precisam ser adotadas todas de um vez
  • O principal objetivo do XP é reduzir o cliclo de desenvolvimento de alguns anos para alguns dias ou horas...



14
Sobre o Extreme Programming (XP)
  • As práticas do XP:
    • Jogo de planejamento
      • As decisões sobre os prazos e escopo são tomadas pelos clientes...
    • Pequenas liberações
      • Devem ser feitas liberações o mais rápido possível para o ambiente de produção...
    • Metáfora
      • É definida uma metáfora para o objetivo do sistema...
    • Projeto simplificado
      • O código deve ser sempre o mais simples possível...
    • Testes
      • Os testes unitários são escritos pelos programadores com bastante frequência. Os clientes escrevem os testes de aceitação. Os resultados dos testes são pu-blicados e ficam visíveis para todos da equipe...
15
Sobre o Extreme Programming (XP)
  • As práticas do XP...
    • Redesenho
      • O código vai sendo melhorado aos poucos...
    • Programação em pares
      • Todo o código é escrito por um par de programadores...
    • Integração contínua
      • Novas classes e métodos são integrados imediatamente...
    • Propriedade coletiva do código
      • Qualquer programador, a qualquer momento, pode alterar qualquer porção do código fonte...
    • Cliente disponível
      • O cliente ou usuário fica integralmente disponível para a equipe...
16
Sobre o Extreme Programming (XP)
  • As práticas do XP...
    • Semana de 40 horas
      • Se houver necessidade de trabalho extra, é sinal que há problemas...
    • Ambiente aberto
      • O time trabalha em um ambiente bastante espaçoso. O grupo de pro-gramação trabalha em estações de trabalho localizadas no centro do ambiente
    • Somente regras
      • As regras podem ser adaptadas e melhoradas, de acordo com a ne-cessidade. Elas são importantes mas são apenas regras...
17
Práticas XP aperfeiçoadas
  • Como vimos o XP definia um conjunto de práticas que continuam válidas até hoje, mas foram remodeladas nos últimos anos


  • O conjunto atual de práticas está dividido em dois grupos:
    • Práticas primárias
      •  são independentes das práticas atuais de sua equipe. São seguras e cada uma delas pode gerar melhoria imediata.
    • Práticas corolárias
      • dependem da aplicação efetiva das práticas primárias. É difícil aplicá-las sem ter domínio sobre as primárias antes.
18
Práticas Primárias
19
Práticas Primárias
20
Práticas Corolárias
21
Sobre o Extreme Programming (XP)
  • Sobre o processo proposto pelo XP...
    • Ele se inicia com o cliente escolhendo as funcionalidades que serão implementadas. Estas funcionalidades são chamadas de estórias do usuário (user stories). A escolha leva em conta a estimativa de custo/tempo feita pelos programadores
    • o desenvolvimento é fortemente guiado a testes (TDD: Test-Driven Development). Os programadores escrevem testes unitários, que são classes que automatizam sequências de testes sobre outras classes. São escritos antes do código estar completo...
    • Normalmente no par de programadores procura-se unir um com muita experiência em TDD e outro com pouca ou nenhuma ex-periência nesta técnica.
22
Sobre o Extreme Programming (XP)
  • Sobre as estórias dos usuários...
    • Uma estória do usuário é uma unidade funcional...
    • Ela deve ser entendida pelos clientes e usuários, deve ser testável, deve ter valor para o cliente e deve ser pequena o bastante para que os programadores possam construir dúzias delas em um ciclo de iteração...
    • Ela é formada por uma ou duas sentenças que descrevem algo com valor para o cliente:
      • o sistema deve verificar se o CPF do cliente é um número válido...
    • Os programadores deverão ser capazes de estimar o custo/tempo para implementar a estória. Caso isto não seja possível, a estória deve ser subdividida em estórias menores, para serem estimadas...
    • As estórias do usuários devem ser criadas pelos clientes e usuários. Os desenvolvedores concentram-se nas decisões técnicas...
23
Sobre o Extreme Programming (XP)
  • Priorizando as estórias dos usuários...
    • O principal critério de ordenamento das estórias é o valor para o negócio...
    • Não existe consenso nisto:
      • “vamos confessar que nós não concordamos neste ponto (priorização das estórias com base no risco técnico). Martin é muito mais inclina-do a trazer as estórias de maior risco técnico para o início do plano do que Kent o é. Kent considera Martin um covarde por esta atitude. Martin concorda.”
        • Kent Beck e Martin Fowler, em
        • Planning Extreme Programming,
        •  Addison-Wesley, 2000
    • Busca-se consenso negociado quando houver problemas de priori-zação. Entretanto, a última palavra é dos clientes: eles é que estão pagando o projeto...
24
Sobre o Extreme Programming (XP)
  • Reportanto o progresso de um projeto XP
    • O progresso de cada iteração é medido e reportado por uma pessoa chamada tracker...
    • A cada programador, o tracker faz duas perguntas básicas:
      • Quantos dias ideais você já trabalhou nesta tarefa?
      • Mais quantos dias ideais você precisa para completar a tarefa?
    • Se o tracker descobre que um programador não vai conseguir terminar sua tarefa, ele tenta redistribuir o encargo para outro programa-dor que esteja com alguma folga. Caso isto não seja possível, o cliente deve ser informado...
    • As iterações no XP terminam na data estimada. As estórias implementadas, são apresentadas aos clientes, que decidirá se está adequada, a qual, neste caso, será considerada completa. As estórias incompletas serão consideradas para a próxima iteração...
25
Premissa do desenvolvimento ágil
  • APRENDIZADO
    • O cliente aprende durante o desenvolvimento
    • Descobre novas possibilidades
    • Muda as prioridades
    • Sistema deve acompanhar o aprendizado
  • FEEDBACK
  • DESENVOLVIMENTO ITERATIVO


26
Aprendizado
  • O cliente aprende durante o desenvolvimento
  • Descobre novas possibilidades
  • Muda as prioridades
  • Sistema deve acompanhar o aprendizado
27
MA-XP
28
Valores do XP
  • Feedback
  • Comunicação
  • Simplicidade
  • Coragem


29
Vencendo os Medos
  • Escrever código.
  • Mudar de idéia.
  • Ir em frente sem saber tudo sobre o futuro.
  • Confiar em outras pessoas.
  • Mudar a arquitetura de um sistema em funcionamento.
  • Escrever testes.
30
Princípios Básicos do XP
  • Feedback rápido
  • Simplicidade é o melhor negócio
  • Mudanças incrementais
  • Abraçar mudanças - Carregue a bandeira das mudanças /  não valorize o medo (Embrace change)
  • Alta qualidade.
31
MA-XP
32
As 12 Práticas de XP (versão 2000)
33
User Stories
  • Funcionalidades são informadas através de user stories
  • Estórias devem ser simples
  • Desenvolvedores estimam tempo
34
User Stories
  • Pequenos pedaços de funcionalidades que produzem valor para os usuários do sistema.
    • Por simplicidade, são escritas em cartões.
    • Escritas pelo cliente ou por algum tipo de user proxy (gerentes, equipes de marketing, especialistas do domínio, analistas de negócio, etc).
    • Possibilidades de conversa futura, não especificações detalhadas.

35
Testes de Aceitação
  • Podem ser escritos inicialmente no verso dos cartões.
    • Podem ser documentados em um editor de texto simples.
    • Existem algumas ferramentas automatizadas (FIT e FitNesse).
    • Como as histórias, são escritos pelo cliente ou por algum tipo de UserProxy.

36
Cliente
  • Responsável por escrever “histórias”.
  • 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).
37
Coach (treinador)
  • 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.
38
Tracker (Acompanhador)
  • 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 unit tests.
    • 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.
39
Jogo do Planejamento
  • De posse das estimativas, é possível priorizar
  • Cliente entrega as estórias priorizadas para serem implementadas
  • Desenvolvedores respeitam as prioridades dos clientes
  • Projeto é dividido em partes: releases e iterações
40
Release e Iteração
41
Release Planning
  • Cliente recebe um “orçamento” dos desenvolvedores
  • Seleciona as estórias prioritárias que possam ser implementadas dentro do orçamento
  • Pode trocar estórias durante o release
42
Iteration Planning
  • Cliente recebe um “orçamento”
  • Não pode haver troca de funcionalidades durante uma iteração
  • Velocidade: quantidade de estórias que a equipe consegue implementar em uma iteração
43
Stand-up meeting
  • Reunião diária rápida ~15 min








  • Usada para atualização da equipe servindo para registrar o progresso da iteração (quadro de acompanhamento)
44
Desenvolvimento: orientação a objetos
  • Sistema é composto por pequenas peças
  • Peças têm objetivos específicos
  • Facilita construção
  • Facilita evolução


45
Pair Programming
  • Todo código é escrito em par
  • Duas pessoas trabalham em um único computador
  • Uma digita, enquanto a outra revisa, corrige e sugere
46
Programação Pareada
  • Erro de um detectado imediatamente pelo outro (grande economia de tempo).
  • Maior diversidade de idéias, técnicas, algoritmos.
  • Enquanto um escreve, o outro pensa em contra-exemplos, problemas de eficiência, etc.


  • Vergonha de escrever código feio (gambiarras) na frente do seu par.
  • Pareamento de acordo com especialidades.
    • Ex.: Sistema Multimídia Orientado a Objetos
47
Collective code ownership
  • Todos são responsáveis por todas as partes do sistema
  • Código tem que estar sempre “limpo”
  • Todos são capazes de modificá-lo
48
Propriedade Coletiva do Código
  • Modelo tradicional: só autor de uma função pode modificá-la.
  • XP: o código pertence a todos.
  • Se alguém identifica uma oportunidade para simplificar, consertar ou melhorar código escrito por outra pessoa, que o faça.
  • Mas rode os testes!
49
O Código
  • Padrões de estilo adotados pelo grupo inteiro sendo o mais claro possível.
    • XP não se baseia em documentações detalhadas e extensas (perde-se a sincronia facilmente).
  • Comentários sempre que necessários.
  • Comentários padronizados.
  • Programação Pareada ajuda muito!
  • Alguns mantras ajudam a entender o espírito de desenvolvimento XP:
    • Do simplest thing that could possibly work.
    • Your aren’t going to need it.
    • Once and only once.
50
Refactoring
  • Melhorar o código permanentemente
  • Alterações na implementação sem afetar a interface
51
Refatoramento (Refactoring)
  • Uma [pequena] modificação no sistema que não altera o seu comportamento funcional
  • mas que melhora alguma qualidade não-funcional:
    • simplicidade
    • flexibilidade
    • clareza
    • desempenho
52
Exemplos de Refatoramento
  • Mudança do nome de variáveis
  • Mudanças nas interfaces dos objetos
  • Pequenas mudanças arquiteturais
  • Encapsular código repetido em um novo método
  • Generalização de métodos
    • raizQuadrada(float x)Þ raiz(float x, int n)
53
O Ciclo de Vida de XP
54
 
55
O ritmo do XP
56
Um Projeto XP
  • Fase de Exploração
    • duração: 2 a 6 meses.
    • termina quando a primeira versão do software é enviada ao cliente.
    • clientes escrevem “estórias” (story cards).
    • programadores interagem com clientes e discutem tecnologias.
    • Não só discutem, experimentam diferentes tecnologias e arquiteturas para o sistema.
    • Planejamento: 1 a 2 dias.
57
Um Dia na Vida de um Programador XP
  • Escolhe uma estória do cliente.
  • Procura um par livre e escolhe um computador para programação pareada (pair programming).
  • Seleciona uma tarefa claramente relacionada a uma característica (feature) desejada pelo cliente.
  • Discute modificações recentes no sistema e discute estória do cliente
  • Planeja e implementa Testes (TDD no caso ideal)
  • Implementa o código
  • Aprimora desenho da funcionalidade
  • Integração
58
Um Dia na Vida de um Programador XP
  • Atos constantes no desenvolvimento:
    • Executa testes antigos.
    • Busca oportunidades para simplificação.
    • Modifica desenho e implementação incrementalmente baseado na funcionalidade exigida no momento.
    • Escreve novos testes.
    • Enquanto todos os testes não rodam a 100%, o trabalho não está terminado.
    • Integra novo código ao repositório.
59
Desenvolvimento em equipe
  • Como conciliar diversos desenvolvedores?
  • Estrutura de diretórios
  • Atualização do código por várias pessoas diferentes
60
XP no Brasil
  • 2000: algumas práticas começam a ser usadas em projetos no Sul
  • Dez/2002: primeiro XP Brasil
  • Jan/2003: fundação do XP Rio
  • Fev/2003: projeto full-XP em uma grande empresa brasileira (em andamento)
  • Set/2003: lançamento previsto do primeiro livro brasileiro sobre XP


61
Referências sobre XP
  • Site Xispê
  • http://www.xispe.com.br
  • XP Rio
  • http://www.yahoogroups.com/groups/xprio
  • Lista Xpers
  • http://www.yahoogroups.com/groups/xpers


62
Referências sobre as ferramentas
  • jUnit
  • http://www.junit.org
  • CVS
  • http://www.cvshome.org
  • Ant
  • http://ant.apache.org
  • IntelliJ
  • http://www.intellij.com