Baixe o app para aproveitar ainda mais
Prévia do material em texto
MODELOS ÁGEIS © PROF. RAUL SIDNEI WAZLAWICK UFSC-CTC-INE 2010 MODELOS ÁGEIS � Os modelos ágeis de desenvolvimento de software seguem uma filosofia diferente dos modelos prescritivos. � Ao invés de apresentar uma receita de bolo com fases ou tarefas a serem executados, eles focam fases ou tarefas a serem executados, eles focam em valores humanos e sociais. MANIFESTO ÁGIL � Nós estamos descobrindo formas melhores de desenvolver software fazendo e ajudando outros a fazer. Através deste trabalho chegamos aos seguintes valores: � Indivíduos e interações estão acima de processos e ferramentas. � Software funcionando está acima de documentação � Software funcionando está acima de documentação compreensível. � Colaboração do cliente está acima de negociação de contrato. � Responder às mudanças está acima de seguir um plano. � Ou seja, enquanto forem valorizados os itens à esquerda, os itens à direita valerão mais. PRINCÍPIOS DO MANIFESTO ÁGIL � Nossa maior prioridade é satisfazer o cliente através da entrega rápida e contínua de software com valor. � Mudanças nos requisitos são bem vindas, mesmo nas etapas finais do projeto. Processos ágeis usam a mudança como um diferencial competitivo para o cliente. � Entregar software freqüentemente, com intervalos que viam de Entregar software freqüentemente, com intervalos que viam de duas semanas a dois meses, preferindo o intervalo mais curto. � Administradores (business people) e desenvolvedores devem trabalhar juntos diariamente durante o desenvolvimento do projeto. � Construa projetos em torno de indivíduos motivados. Dê a eles o ambiente e o suporte e confie que eles farão o trabalho. � O meio mais eficiente e efetivo de tratar a comunicação entre e para a equipe de desenvolvimento é a conversa face a face. PRINCÍPIOS DO MANIFESTO ÁGIL � Software funcionando é a medida primordial de progresso. � Processos ágeis promovem desenvolvimento sustentado. Os financiadores, usuários e desenvolvedores devem ser capazes de manter o ritmo indefinidamente. � Atenção contínua à excelência técnica e bom projeto melhora a agilidade.melhora a agilidade. � Simplicidade – a arte de maximizar a quantidade de trabalho não feito – é essencial. � As melhores arquiteturas, requisitos e projetos emergem de equipes auto-organizadas. � Em intervalos regulares a equipe reflete sobre como se tornar mais efetiva e então ajusta seu comportamento de acordo. SCRUM � Scrum é um modelo ágil para gestão de projetos de software. � No Scrum um dos conceitos mais importantes é o sprint, que consiste em um ciclo de desenvolvimento, usualmente de duas semanas a desenvolvimento, usualmente de duas semanas a um mês. PERFIS � O Scrum master, que não é um gerente no sentido dos modelos prescritivos. O Scrum master não é um líder, já que as equipes são auto- organizadas, mas um facilitador (pessoa que conhece bem o modelo) e resolvedor de conflitosconhece bem o modelo) e resolvedor de conflitos � O product owner, ou seja, a pessoa responsável pelo projeto em si. O product owner tem, entre outras atribuições, a de indicar quais são os requisitos mais importantes a serem tratados em cada sprint. O product owner é o responsável pelo ROI (Return Of Investment), e também por conhecer e avaliar as necessidades do cliente. SCRUM TEAM � É a equipe de desenvolvimento. � Essa equipe não é necessariamente dividida em papeis como analista, projetista e programador, mas todos interagem para desenvolver o produto em conjunto. em conjunto. � Usualmente são recomendadas equipes de 6 a 10 pessoas. � No caso de projetos muito grandes é possível aplicar o conceito de Scrum of Scrums, onde vários Scrum teams trabalham em paralelo e cada um contribui com uma pessoa para a formação do Scrum of Scrums, quando então as várias equipes são sincronizadas. PRODUCT BACKLOG � As funcionalidades a serem implementadas em cada projeto (requisitos) são mantidas em uma lista chamada de product backlog. � Um dos princípios das metodologias ágeis é usado aqui: adaptação ao invés e planejamento. aqui: adaptação ao invés e planejamento. � O product backlog não precisa então ser completo no início do projeto. � Pode-se iniciar apenas com as funcionalidades mais evidentes para depois, à medida que o projeto avança tratar novas funcionalidades que vão sendo descobertas. SPRINT � No início de cada sprint é feito um sprint planning meeting, no qual a equipe prioriza os elementos do product backlog a serem implementados e transfere estes elementos do product backlog para o sprint backlog, ou seja, a product backlog para o sprint backlog, ou seja, a lista de funcionalidades a serem implementadas no ciclo que se inicia. � A equipe se compromete a desenvolver as funcionalidades e o product owner se compromete a não trazer novas funcionalidades durante o mesmo sprint. � Se novas funcionalidades forem descobertas, serão abordadas em sprints posteriores. SPRINT BACKLOG � Pode-se dizer que os dois backlogs têm naturezas diferentes: � O product backlog apresenta requisitos de alto nível, bastante voltados às necessidades diretas do cliente. � Já o sprint backlog apresenta uma visão desses � Já o sprint backlog apresenta uma visão desses requisitos de forma mais voltada à maneira como a equipe vai desenvolvê-los. � Durante o sprint, cabe ao product owner manter o sprint backlog atualizado, indicando as tarefas já concluídas e as ainda por concluir, preferencialmente mostradas em um gráfico atualizado diariamente e à vista de todos.atualizado diariamente e à vista de todos. REVIEW � Ao final de cada sprint a equipe deve fazer um sprint review meeting (retrospectiva) para verificar o que foi feito e a partir daí partir para uma nova sprint. � O sprint review meeting avalia o sucesso do plano.� O sprint review meeting avalia o sucesso do plano. DAILY SCRUM � Mais importante ainda, o modelo sugere que a equipe realize uma reunião diária, chamada daily scrum, onde o objetivo é que cada membro da equipe fale sobre o que fez no dia anterior, o que vai fazer no dia que se segue e, se for o caso, o que o impede de prosseguir. � Essas reuniões devem ser rápidas. � Essas reuniões devem ser rápidas. � Por isso, se sugere que sejam feitas com as pessoas em pé e em frente a um quadro de anotações. � Além disso, recomenda-se que sejam feitas logo após o almoço, quando os participantes estarão mais imersos nas questões do trabalho (longe dos problemas pessoais), além de ser uma boa maneira de dissipar o cansaço que atinge os desenvolvedores no início da tarde. MODELO SCRUM SPRINT DEVEM SEGUIR A FILOSOFIA PDCA � Plan: planejar uma meta ou identificar um problema que esteja impedindo o progresso, analisar o fenômeno ou os dados relacionados ao problema, analisar o processo, ou as causas fundamentais do problema, elaborar um plano de ação para atingir o objetivo ou resolver o problema. � Do: executar as atividades previstas no plano de ação.� Do: executar as atividades previstas no plano de ação. � Check: avaliar e monitorar periodicamente os resultados. Avaliar os processos utilizados. Produzir relatórios, se necessário. � Act: agir de acordo com os planos ou melhorar os planos e processos se necessário. ORIGENS � A concepção inicial do Scrum deu-se na indústria automobilística (Takeuchi & Nonaka, 1986), e o modelo pode ser adaptado a várias outras áreas diferentes da produção de software. � Na área de desenvolvimento de software, Scrum� Na área de desenvolvimento de software, Scrum deve sua popularidade inicialmente ao trabalho de Schwaber. � Uma boa referência para quemdeseja adotar o método é o livro de Schwaber e Beedle (2001), que apresenta o método de forma completa e sistemática. XP – EXTREME PROGRAMMING � É um modelo ágil inicialmente adequado a equipes pequenas e médias que é baseado em uma série de valores, princípios e regras. � XP surgiu no final da década de 1990, nos Estados Unidos.Estados Unidos. VALORES � Simplicidade � Respeito � Comunicação � Feedback Coragem� Coragem SIMPLICIDADE � Segundo o Chaos Report (Standish Group, 1995) mais da metade das funcionalidades introduzidas em sistemas nunca são usadas. � XP sugere como valor a simplicidade, ou seja, a equipe deve se concentrar nas funcionalidades equipe deve se concentrar nas funcionalidades efetivamente necessárias e não naquelas que poderiam talvez ser necessárias, mas que ainda não se tem evidência de que são essenciais. RESPEITO � Respeito entre os membros da equipe e entre a equipe e o cliente é um valor dos mais básicos, que dá sustentação a todos os outros. � Sem respeito a comunicação é falha e o projeto afunda.afunda. COMUNICAÇÃO � Em desenvolvimento de software a comunicação é essencial para que o cliente consiga dizer o que realmente precisa. � XP preconiza comunicação de boa qualidade, preferindo encontros presenciais ao invés de preferindo encontros presenciais ao invés de videoconferências, videoconferências, ao invés de telefonemas, telefonemas ao invés de emails e assim por diante. � Ou seja, quanto mais pessoal e expressiva a forma de comunicação melhor. FEEDBACK � O projeto de software é reconhecidamente um empreendimento de alto risco. � Cientes disso, os desenvolvedores devem buscar obter feedback o quanto antes para que eventuais falhas de comunicação sejam corrigidas o mais falhas de comunicação sejam corrigidas o mais rapidamente possível antes que os danos se alastrem e o custo da correção seja alto. CORAGEM � Pode-se dizer que a única coisa constante no projeto de um software é a necessidade de mudança. � Para os desenvolvedores XP é necessário confiar nos mecanismos de gerenciamento da mudança nos mecanismos de gerenciamento da mudança para ter a coragem de abraçar as inevitáveis modificações ao invés de simplesmente ignorá- las, por estarem eventualmente fora do contrato formal, ou por serem muito difíceis de acomodar. PRINCÍPIOS SÃO DEFINIDOS A PARTIR DOS VALORES � Priorização de funcionalidades mais importantes de forma que, se o trabalho não puder ser todo concluído, pelo menos as partes mais importantes terão sido. �Mudanças incrementais, feedback rápido, e �Mudanças incrementais, feedback rápido, e considerar a mudança como algo positivo, que deve ser considerado parte do processo. � Qualidade: pequenos ganhos a curto prazo pelo sacrifício da qualidade não são compensados pelas perdas a médio e longo prazo PRÁTICAS � Jogo de planejamento �Metáfora � Equipe coesa � Reuniões em pé Projeto simples � Desenvolvimento orientado a testes � Refatoração � Integração contínua � Projeto simples � Versões pequenas � Ritmo sustentável � Posse coletiva � Programação em pares � Padrões de codificação � Testes de aceitação JOGO DE PLANEJAMENTO (PLANNING GAME) � Semanalmente a equipe deve se reunir com o cliente para priorizar as funcionalidades a serem desenvolvidas. � Cabe ao cliente identificar as principais necessidades e à equipe de desenvolvimento necessidades e à equipe de desenvolvimento estimar quais podem ser implementadas no ciclo semanal que se inicia. � Ao final da semana essas funcionalidades são entregues ao cliente. � Esse tipo de modelo de relacionamento com o cliente é adaptativo, em oposição aos contratos rígidos usualmente estabelecidos. METÁFORA (METAPHOR) � É preciso conhecer a linguagem do cliente e seus significados. � A equipe deve aprender a se comunicar com o cliente na linguagem que ele compreende. EQUIPE COESA (WHOLE TEAM) � O cliente faz parte da equipe de desenvolvimento. REUNIÕES EM PÉ (STAND-UP MEETING). � Como no caso de Scrum, reuniões em pé tendem a serem mais objetivas. PROJETO SIMPLES (SIMPLE DESIGN) � Isso implica em atender a funcionalidade solicitada pelo cliente sem sofisticar desnecessariamente. � Deve-se fazer o que o cliente precisa, não o que o desenvolvedor gostaria que ele precisasse. desenvolvedor gostaria que ele precisasse. � Por vezes, projeto simples pode ser confundido com projeto fácil. � Nem sempre o projeto simples é o mais fácil de implementar. � O projeto fácil pode não atender às necessidades, ou pode gerar problemas de arquitetura. VERSÕES PEQUENAS (SMALL RELEASES) � A liberação de versões pequenas do sistema pode ajudar o cliente a testar as funcionalidades de forma contínua. � XP leva ao extremo este princípio, sugerindo versões ainda menores do que as de outros versões ainda menores do que as de outros processos incrementais como UP. RITMO SUSTENTÁVEL (SUSTAINABLE PACE). � Trabalhar com qualidade um número razoável de horas por dia (não mais do que 8). � Horas extras só são recomendadas quando efetivamente trouxerem um aumento de produtividade, mas não podem ser rotina.produtividade, mas não podem ser rotina. POSSE COLETIVA (COLLECTIVE OWNERSHIP) � O código não tem dono e não é necessário pedir permissão a ninguém para modificá-lo. PROGRAMAÇÃO EM PARES (PAIR PROGRAMMING) � A programação é sempre feita por duas pessoas em cada computador. � Usualmente trata-se de um programador mais experiente e um aprendiz. � O aprendiz deve usar a máquina enquanto o mais � O aprendiz deve usar a máquina enquanto o mais experiente o ajuda a evoluir em suas capacidades. � Com isso, o código gerado terá sempre sido verificado por pelo menos duas pessoas, reduzindo drasticamente a possibilidade de erros. PADRÕES DE CODIFICAÇÃO (CODING STANDARDS) � A equipe deve estabelecer e seguir padrões de codificação, de forma que parecerá que o código foi todo desenvolvido pela mesma pessoa, mesmo que tenham sido dezenas. TESTES DE ACEITAÇÃO (CUSTOMER TESTS) � São testes planejados e conduzidos pela equipe em conjunto com o cliente para verificar se determinados requisitos foram atendidos. DESENVOLVIMENTO ORIENTADO A TESTES (TEST DRIVEN DEVELOPMENT) � Antes de programar uma unidade deve-se estabelecer os testes pelos quais ela deverá passar. REFATORAÇÃO (REFACTORING) � Não se deve fugir da refatoração quando necessária. � Ela permite manter a complexidade do código em um nível gerenciável. � É um investimento que traz benefícios a médio e � É um investimento que traz benefícios a médio e longo prazo. INTEGRAÇÃO CONTÍNUA (CONTINUOUS INTEGRATION) � Nunca esperar até ao final do ciclo para integrar uma nova funcionalidade. � Assim que estiver viável ela deve ser integrada ao sistema para evitar surpresas. REGRAS XP �Wells (2009) vai mais além das práticas XP apontando um conjunto sucinto e bastante objetivo de regras para XP. � Ele divide as regras em 5 grandes grupos: � Planejamento� Planejamento � Gerência � Projeto � Codificação � Teste REGRAS XP DE PLANEJAMENTO � Escrever histórias de usuário � O planejamento de entregas cria o cronograma de entregas � Faça entregas pequenas freqüentes O projeto é dividido em iterações� O projeto é dividido em iterações � O planejamento da iteração inicia cada iteração ESCREVER HISTÓRIAS DE USUÁRIO � Servem ao mesmo propósito de casos de uso, mas não são a mesma coisa. � São usadas no lugar do documento de requisitos. � Devem ser escritas pelos usuários como sendo as coisas que eles precisam que o sistema faça para coisasque eles precisam que o sistema faça para eles. � Podem ser usadas para definir os testes de aceitação. ESCREVER HISTÓRIAS DE USUÁRIO � A equipe deve estimar se a história pode ser implementada em uma, duas ou três semanas. � Tempos maiores do que este significam que a história deve ser subdividida em duas ou mais histórias. histórias. �Menos de uma semana significa que a história está em um nível de detalhe muito alto e precisa ser combinada com outras. � Como as histórias são escritas pelo cliente, espera-se que não sejam contaminadas com aspectos técnicos e de interfaces. O PLANEJAMENTO DE ENTREGAS CRIA O CRONOGRAMA DE ENTREGAS � É feito um encontro de planejamento de entregas para delinear o projeto como um todo. � É importante que os técnicos tomem as decisões técnicas e os administradores as decisões de negócio. negócio. � Deve-se estimar o tempo de cada história de usuário em termos de semanas de programação ideais e priorizar as histórias mais importantes do ponto de vista do cliente. � Uma semana de programação ideal é aquela em que uma pessoa trabalha todas as horas da semana unicamente em um projeto, dedicando-se apenas a ele. O PLANEJAMENTO DE ENTREGAS CRIA O CRONOGRAMA DE ENTREGAS � As histórias são agrupadas em iterações, que só são planejadas pouco antes de iniciarem. � Essa priorização pode ser feita com histórias impressas em cartões que são movidos na mesa ou num quadro para indicar prioridades. ou num quadro para indicar prioridades. FAÇA ENTREGAS PEQUENAS FREQÜENTES � Algumas equipes entregam software diariamente, mas no pior caso, deveria acontecer a cada uma ou duas semanas. � A decisão de colocar a entrega em operação ou não é do cliente.não é do cliente. O PROJETO É DIVIDIDO EM ITERAÇÕES � Prefira iterações de uma a duas semanas. � Não planeje as atividades com muita antecedência. � Deixe para planejar a iteração pouco antes de ela iniciar. iniciar. � Planejamento just-in-time é uma forma de estar sempre sintonizado com as mudanças de requisitos e arquitetura. � Não tente implementar coisas que virão depois. � Leve os prazos a sério. O PROJETO É DIVIDIDO EM ITERAÇÕES � Acompanhe a produtividade. � Se perceber que não vai vencer o cronograma, convoque uma nova reunião de planejamento de entregas e repasse algumas entregas para outros ciclos. ciclos. � Concentre-se em completar as tarefas, e não em deixar várias coisas inacabadas. O PLANEJAMENTO DA ITERAÇÃO INICIA CADA ITERAÇÃO � No planejamento, que inicia cada iteração seleciona-se as histórias de usuário mais importantes a serem desenvolvidas e partes de sistema que falharam em testes de aceitação, os quais são quebrados em tarefas de programação. quais são quebrados em tarefas de programação. � As tarefas serão escritas em cartões, assim como as histórias de usuário. � Enquanto as histórias de usuário estão na linguagem do cliente, as tarefas de programação estão na linguagem dos desenvolvedores. O PLANEJAMENTO DA ITERAÇÃO INICIA CADA ITERAÇÃO � Cada desenvolvedor que seleciona uma tarefa estima quanto tempo ela levará para ser concluída. � Tarefas devem ser estimadas em um, dois ou três dias ideais de programação. dias ideais de programação. � Um dia ideal de programação é uma jornada de trabalho normal em que uma pessoa dedique-se unicamente ao projeto. REGRAS XP DE GERENCIAMENTO � Dê à equipe um espaço de trabalho aberto e dedicado � Defina uma jornada sustentável � Inicie cada dia com uma reunião em pé A velocidade do projeto é medida� A velocidade do projeto é medida �Mova as pessoas � Conserte XP quando for inadequado DÊ À EQUIPE UM ESPAÇO DE TRABALHO ABERTO E DEDICADO � É importante eliminar barreiras físicas entre os membros da equipe para melhorar a comunicação. � Sugere-se colocar os computadores em um espaço central para a programação em pares e mesas central para a programação em pares e mesas nas laterais da sala para que pessoas que precisem trabalhar a sós não se desconectem do ambiente. � Inclua uma área para as reuniões em pé com um quadro branco e uma mesa de reuniões DEFINA UMA JORNADA SUSTENTÁVEL � Trabalhar além da jornada normal é desgastante e desmoralizante. � Se o projeto atrasa é melhor reprogramar as tarefas em uma release planning meeting. � Descubra a velocidade ideal para sua equipe e � Descubra a velocidade ideal para sua equipe e atenha-se a ela. � Não tente fazer uma equipe trabalhar na velocidade de outra. � Faça planos realistas. INICIE CADA DIA COM UMA REUNIÃO EM PÉ � Em uma reunião típica nem sempre todos contribuem, mas pelo menos ouvem. �Mantenha o mínimo de pessoas o mínimo de tempo em reuniões. � As reuniões em pé não são perda de tempo, mas � As reuniões em pé não são perda de tempo, mas uma forma rápida de manter a equipe sincronizada, pois cada um dirá o que fez ontem, o que vai fazer hoje e o que o impede de prosseguir. A VELOCIDADE DO PROJETO É MEDIDA � Conta-se ou estima-se quantas histórias de usuário e tarefas de programação são desenvolvidas em cada iteração. � A cada encontro de planejamento de iteração os clientes podem selecionar um número de clientes podem selecionar um número de histórias de usuário igual à estimativa de velocidade do projeto. � O mesmo vale para os programadores em relação às tarefas de programação. � Isso permite que a equipe se recupere de eventuais iterações difíceis. � Aumentos e diminuições de velocidade são esperadas. MOVA AS PESSOAS �Mobilidade de pessoas em projetos é importante para evitar perda de conhecimento e gargalos de programação. � Ficar na dependência de um único funcionário é perigoso. perigoso. � Deve-se evitar criar ilhas de conhecimento porque elas são susceptíveis a perda. � Se precisar de conhecimento especializado, contrate um consultor por prazo determinado. CONSERTE XP QUANDO FOR INADEQUADO � Não hesite em mudar aquilo que não funciona em XP. � Isso não significa que se pode fazer qualquer coisa. � Segue-se as regras até que se perceba que elas � Segue-se as regras até que se perceba que elas precisam ser mudadas. � Todos os desenvolvedores devem saber o que se espera deles e o que eles esperam dos outros. � A existência de regras é a melhor forma de garantir isso. REGRAS XP DE PROJETO (DESGIN) � Simplicidade � Escolha uma metáfora de sistema � Use Cartões CRC durante reuniões de projeto � Crie soluções afiadas para reduzir risco Nenhuma funcionalidade é adicionada cedo� Nenhuma funcionalidade é adicionada cedo � Use refatoração sempre e onde for possível SIMPLICIDADE � Um projeto simples sempre é executado mais rápido do que um projeto complexo. � Porém, simplicidade é subjetiva e difícil de ser medida. � Então a equipe é que deve decidir o que é � Então a equipe é que deve decidir o que é simples. � Uma das melhores formas de obter simplicidade em um projeto é levar a sério o Design Pattern “Alta Coesão” (Wazlawick, 2004). QUALIDADES PARA OBTER SIMPLICIDADE � Testabilidade � Browseabilidade � Compreensibilidade e Explicabilidade TESTABILIDADE � Pode-se escrever testes de unidade para verificar se o código está correto. � O sistema deve ser quebrado em unidades testáveis. BROWSEABILIDADE � Pode-se encontrar os elementos quando se precisa deles. � Bons nomes e uso de boas disciplinas como polimorfismo, herança e delegação ajudam nisso. COMPREENSIBILIDADE E EXPLICABILIDADE � Compreensibilidade é uma qualidade subjetiva porque um sistema pode ser bastante compreensível para quem está trabalhando nele, mas difícil para quem está de fora.� Então essa propriedade pode ser definida em � Então essa propriedade pode ser definida em termos de quão fácil é explicar o sistema para quem não participou do desenvolvimento. ESCOLHA UMA METÁFORA DE SISTEMA � Uma boa metáfora de sistema ajuda a explicar seu funcionamento a alguém de fora do projeto. � Deve-se evitar que a compreensão sobre o sistema resida em pilhas de documentos. � Nomes significativos e padrões de nomeação de � Nomes significativos e padrões de nomeação de elementos de programa devem ser cuidadosamente escolhidos e seguidos para que fragmentos de código sejam efetivamente reusáveis. USE CARTÕES CRC DURANTE REUNIÕES DE PROJETO � Trata-se de uma técnica para encontrar responsabilidades e colaborações entre objetos. � A equipe se reúne em torno de uma mesa e cada membro recebe um ou mais cartões representando instâncias de diferentes classes. representando instâncias de diferentes classes. � Uma atividade (operação ou consulta) é simulada e a medida que ela ocorre os detentores dos cartões anotam responsabilidades do objeto no lado esquerdo do cartão e colaborações do objeto no lado direito. � A documentação dos processos pode ser feita com diagramas de seqüência ou de comunicação da UML. CRIE SOLUÇÕES AFIADAS PARA REDUZIR RISCO � Em face de riscos importantes de projeto deve-se explorar o risco de forma definitiva e exclusiva, ou seja, uma solução afiada ou spike para o problema identificado. � Um spike é então um desenvolvimento ou teste projetado especificamente para analisar e possivelmente resolver um risco. possivelmente resolver um risco. � Caso o risco se mantenha, deve-se colocar um par de programadores durante uma ou duas semanas exclusivamente trabalhando para examinar e mitigar este risco. � A maioria dos spikes não serão aproveitados no projeto, podendo ser classificados como uma das formas de prototipação (throw-away). NENHUMA FUNCIONALIDADE É ADICIONADA CEDO � Deve-se evitar a tentação de adicionar funcionalidade desnecessária só porque seria fácil fazer isso agora e deixaria o sistema melhor. � Apenas o necessário é feito no sistema. � Desenvolver o que não é necessário é jogar tempo � Desenvolver o que não é necessário é jogar tempo fora. �Manter o código aberto a possíveis mudanças futuras tem a ver com simplicidade de projeto, mas adicionar funcionalidade ou flexibilidade desnecessária, sempre deixa o projeto mais complexo. � Requisitos futuros só devem ser considerados quando estritamente exigidos pelo cliente. USE REFATORAÇÃO SEMPRE E ONDE FOR POSSÍVEL � Refatore sem pena. � XP não recomenda que se continue usando design antigo e ruim só porque ele funciona. � Deve-se remover redundâncias, eliminar funcionalidades desnecessárias e rejuvenecer funcionalidades desnecessárias e rejuvenecer designs antiquados. REGRAS XP PARA CODIFICAÇÃO DE PROGRAMAS � O cliente está sempre disponível � O código deve ser escrito de acordo com padrões aceitos � Escreva o teste de unidade primeiro Todo o código é produzido por pares� Todo o código é produzido por pares � Só um par faz integração de código de cada vez � Integração deve ser freqüente � Defina um computador exclusivo para integração � A posse do código deve ser coletiva O CLIENTE ESTÁ SEMPRE DISPONÍVEL � XP necessita que o cliente esteja disponível preferencialmente pessoalmente ao longo de todo o processo de desenvolvimento. � Entretanto, devido ao longo tempo de um projeto, a empresa cliente pode ser tentada a associar um funcionário pouco experiente ou estagiário ao projeto. Ele não serve. pouco experiente ou estagiário ao projeto. Ele não serve. � Deve ser um especialista. Ele deverá escrever as histórias de usuário, bem como priorizá-las e negociar sua inclusão em iterações. � Pode parecer um investimento alto em tempo de funcionários, mas é compensado por ser desnecessário um levantamento de requisitos detalhado ao início, bem como pela não entrega de um sistema inadequado. O CÓDIGO DEVE SER ESCRITO DE ACORDO COM PADRÕES ACEITOS � Padrões de codificação mantêm o código compreensível e passível de refatoração por toda a equipe. � Além disso, código que se parece encoraja a posse coletiva do mesmo.coletiva do mesmo. ESCREVA O TESTE DE UNIDADE PRIMEIRO � Usualmente, escrever o teste antes do código ajuda a escrever o código melhor. � O tempo para escrever o teste e código passa a ser o mesmo que se gastaria para escrever apenas o código.apenas o código. TODO O CÓDIGO É PRODUZIDO POR PARES � Embora pareça contra-sensual, duas pessoas trabalhando em um computador produzem tanto código quanto duas pessoas trabalhando separadamente, mas com mais qualidade. � Embora seja recomendado que haja um � Embora seja recomendado que haja um programador mais experiente, a relação não deve ser de professor/aluno, mas de iguais. SÓ UM PAR FAZ INTEGRAÇÃO DE CÓDIGO DE CADA VEZ � A integração em paralelo pode trazer problemas de compatibilidade imprevistos, pois duas partes do sistema que nunca foram testadas juntas acabam sendo integradas sem serem testadas. � Deve haver versões claramente definidas do � Deve haver versões claramente definidas do produto. � Então, para que equipes trabalhando em paralelo não tenham problemas na hora de integrar seu código ao produto, elas devem esperar a sua vez. � Deve-se estabelecer turnos de integração que sejam obedecidos. INTEGRAÇÃO DEVE SER FREQÜENTE � Desenvolvedores devem estar integrando código ao repositório a cada poucas horas. � Postergar integração pode agravar o problema de todos estarem trabalhando em versões desatualizadas do sistema.desatualizadas do sistema. DEFINA UM COMPUTADOR EXCLUSIVO PARA INTEGRAÇÃO � Este computador funciona como uma ficha de exclusividade (token) para a integração. � A existência dele no ambiente de trabalho permite que toda a equipe veja quem está integrando funcionalidade e qual a funcionalidade. � O resultado da integração deve passar nos testes de unidade, de � O resultado da integração deve passar nos testes de unidade, de forma que se obtém estabilidade em cada versão e localidade nas mudanças e possíveis erros. � Se os testes de unidade falharem, a unidade deve ser depurada. � Se a atividade de integração levar mais do que cerca de dez minutos, é porque a unidade ainda precisa de alguma depuração adicional antes de ser integrada. � Neste caso, a integração deve ser abortada, retornando o sistema à ultima versão estável, e a depuração da unidade deve seguir sendo feita pelo par. A POSSE DO CÓDIGO DEVE SER COLETIVA � Não devem ser criados gargalos pela existência de donos de código. � Todos devem ter autorização para modificar, consertar ou refatorar partes do sistema. � Para isso funcionar os desenvolvedores devem � Para isso funcionar os desenvolvedores devem sempre desenvolver os testes de unidade juntamente com o código, seja novo ou modificado. � Desta forma existe sempre uma garantia de que o software satisfaz as condições de funcionamento. � Não ter um dono de partes do sistema também diminui o impacto da perda de membros da equipe. REGRAS XP PARA TESTE DE SOFTWARE � Todo o código deve ter testes de unidade � Todo código deve passar pelos testes de unidade antes de ser entregue � Quando um erro de funcionalidade é encontrado, testes são criadostestes são criados � Testes de aceitação são executados com freqüência e os resultados são publicados TODO O CÓDIGO DEVE TER TESTES DE UNIDADE � Esta é uma das pedras fundamentais do XP. � Inicialmente o desenvolvedor XP deve criar ou obter um framework de teste de unidade. � Depois ele deve testartodas as classes do sistema, ignorando usualmente os métodos básicos triviais como getters e setters. getters e setters. � Testes de unidade favorecem a posse coletiva do código porque protegem o código de ser acidentalmente danificado. � Um bom local para baixar frameworks para testes de unidade para várias linguagens é http://www.xprogramming.com/software. � Além disso, em http://www.junit.org/ pode-se encontrar o JUnit, que vem se tornando um padrão para desenvolvimento dirigido por testes em Java. TODO CÓDIGO DEVE PASSAR PELOS TESTES DE UNIDADE ANTES DE SER ENTREGUE � Exigir que o código passe por todos os testes de unidade antes de ser integrado ajuda a garantir que sua funcionalidade está corretamente implementada. � Os testes de unidade também favorecem a � Os testes de unidade também favorecem a refatoração, porque protegem o código de mudanças indesejadas de funcionalidade. � A introdução de nova funcionalidade deverá provocar a adição e mais testes no teste de unidade específico. QUANDO UM ERRO DE FUNCIONALIDADE É ENCONTRADO, TESTES SÃO CRIADOS � Um erro de funcionalidade identificado exige que testes de aceitação sejam criados para proteger o sistema. � Assim, os clientes explicam claramente aos desenvolvedores o que eles esperam que seja desenvolvedores o que eles esperam que seja modificado. TESTES DE ACEITAÇÃO SÃO EXECUTADOS COM FREQÜÊNCIA E OS RESULTADOS SÃO PUBLICADOS � Testes de aceitação são criados a partir de histórias de usuário. � Durante uma iteração, as histórias de usuário selecionadas serão traduzidas em testes de aceitação. aceitação. � Estes testes são do tipo caixa preta e representam uma ou mais funcionalidades desejadas. � Testes de aceitação devem ser automatizados, de forma que possam ser executados com freqüência. BIBLIOGRAFIA � Beck, K. et al. (2001). Manifesto for Agile Software Development. Disponível em: http://agilemanifesto.org/. Consultado em: 08/03/2010. � Standish Group (1995). Chaos Report. Acessível em: http://www.projectsmart.co.uk/docs/chaos-report.pdf. Consultado em: 10/03/2010.Consultado em: 10/03/2010. � Takeuchi, H., Nonaka, I. (1986). The new product development game. Harvard Business Review 137-146. January-February. � Wazlawick, R. S. (2004). Análise e Projeto de Sistemas de Informação Orientados a Objetos. Rio de Janeiro: Elsevier. � Wells, D. (2009). The Rules of Extreme Programming. Disponível em: http://www.extremeprogramming.org/rules.html. Acessado em 10/03/2010.
Compartilhar