Prévia do material em texto
<p>Desenvolvimento ágil de</p><p>software</p><p>Carleandro Nolêto</p><p>Desenvolvimento ágil de software</p><p>● Os processos de desenvolvimento rápido de</p><p>software são concebidos para produzir,</p><p>rapidamente, softwares úteis.</p><p>Desenvolvimento ágil de software</p><p>Ágil ≠ Rápido</p><p>Ágil = Adaptativo</p><p>Desenvolvimento ágil de software</p><p>Mudanças são imprescindíveis</p><p>Desenvolvimento ágil de software</p><p>● Características comuns e fundamentais no</p><p>desenvolvimento rápido de software:</p><p>– Os processos de especificação, projeto e</p><p>implementação são intercalados.</p><p>– O sistema é desenvolvido em uma série de versões.</p><p>– Interfaces de usuário do sistema são geralmente</p><p>desenvolvidas com um sistema interativo de</p><p>desenvolvimento que permite a criação rápida do</p><p>projeto de interface por meio de desenho e</p><p>posicionamento de ícones na interface.</p><p>Desenvolvimento ágil de software</p><p>● Os princípios dos métodos ágeis</p><p>– Envolvimento do cliente</p><p>– Entrega incremental</p><p>– Pessoas, não processos</p><p>– Aceitar as mudanças</p><p>– Manter a simplicidade</p><p>Desenvolvimento ágil de software</p><p>● Na prática, os princípios básicos dos métodos</p><p>ágeis são, por vezes, difíceis de se concretizar:</p><p>– O sucesso depende de um cliente disposto e capaz</p><p>de passar o tempo com a equipe de desenvolvimento.</p><p>– Priorizar as mudanças pode ser extremamente difícil.</p><p>– Manter a simplicidade exige um trabalho extra.</p><p>– Membros da equipe podem não ter personalidade</p><p>adequada para um intenso envolvimento.</p><p>– Difícil mudar a cultura de uma empresa.</p><p>Desenvolvimento ágil de software</p><p>● Desenvolvimento dirigido a planos</p><p>– Essa abordagem identifica estágio distintos do processo de software com</p><p>saídas associadas a cada estágio.</p><p>– As saída de um estágio são utilizadas como base para o planejamento da</p><p>atividade do processo a seguir.</p><p>– Não é necessariamente um modelo em cascata, desenvolvimentos</p><p>formais usados para estabelecer a comunicação entre os estágios do</p><p>processo.</p><p>● Desenvolvimento Ágil</p><p>– Especificação, projeto, implementação e testes são intercalados e as</p><p>saídas dos processos de desenvolvimento são decididas por um processo</p><p>de negociação durante o processo de desenvolvimento de software.</p><p>Desenvolvimento ágil de software</p><p>● A maioria dos projetos de software inclui práticas das</p><p>abordagens dirigidas a planos e ágil. Deve-se encontrar um</p><p>equilíbrio entre as abordagens:</p><p>● Questões técnicas, humanas e organizacionais:</p><p>– É importante ter uma especificação e um projeto muito detalhado</p><p>antes de passar para a implementação?</p><p>● Use a abordagem dirigida a planos</p><p>– É realista uma estratégica de entrega incremental em que você</p><p>entrega o software aos clientes e rapidamente obtém um feedback?</p><p>● Use métodos ágeis</p><p>– Quão grande é o sistema que está em desenvolvimento?</p><p>Desenvolvimento ágil de software</p><p>● Que tipo de sistema está sendo desenvolvido?</p><p>– Podem ser desenvolvidos com uma equipe pequena?</p><p>– Exigem grandes equipes de desenvolvimento?</p><p>● Qual o tempo de vida esperado pelo sistema?</p><p>– Considera a manutenção?</p><p>● Existem questões culturais que podem afetar o desenvolvimento do sistema?</p><p>– Politica da empresa, normas, planos, regras, etc..</p><p>● Que tecnologias estão disponíveis para apoiar o desenvolvimento do sistema?</p><p>– Existem IDE's ou outras ferramentas para visualização e análise do programa?</p><p>● Quão bom são os projetistas e programadores na equipe de</p><p>desenvolvimento?</p><p>– Conseguem programar rápido ou dependem de um projeto bem detalhado?</p><p>● O sistema sujeito a regulamento externo?</p><p>– FFA (Autoridade Federal de Aviação).</p><p>Extreme Programming</p><p>● Em Março de 1996, Kent Beck iniciou um projeto com</p><p>novos conceitos que resultaram na metodologia XP -</p><p>eXtreme Programming.</p><p>“Trata-se de uma metodologia ágil para equipes</p><p>pequenas e médias desenvolvendo software com</p><p>requisitos vagos e em constante mudança” Kent Beck</p><p>Extreme Programming</p><p>● Leva o desenvolvimento iterativo a níveis “extremos”.</p><p>● Novas versões podem ser construídas varias vezes</p><p>por dia.</p><p>● Incrementos são entregues a clientes a cada duas</p><p>semanas (curto intervalo entre releases do sistema).</p><p>● Todas os testes devem ser executados com sucesso.</p><p>● Os requisitos são expressos como cenários</p><p>● Estórias do usuário</p><p>Extreme Programming</p><p>Ciclo de uma release em Extreme Programming</p><p>Práticas de Extreme Programming</p><p>● Planejamento incremental</p><p>– Os requisitos são gravados em cartões de estória e as estórias que serão</p><p>incluídas em um release são determinadas pelo tempo disponível e sua</p><p>relativa prioridade. Os desenvolvedores dividem essas estórias em “Tarefas”.</p><p>● Pequenas releases</p><p>– Em primeiro lugar, desenvolve-se um conjunto mínimo de funcionalidades</p><p>útil, que fornece o valor do negócio. Releases do sistema são frequentes e</p><p>gradualmente adicionam funcionalidades ao primeiro release.</p><p>● Projeto simples</p><p>– Cada projeto é realizado para atender às necessidades atuais, e nada mais.</p><p>● Desenvolvimento test-first</p><p>– Um framework de testes iniciais automatizados é usado para escrever os</p><p>teste para uma nova funcionalidade antes que a funcionalidade em si seja</p><p>implementada.</p><p>Práticas de Extreme Programming</p><p>● Refatoração</p><p>– Todos os desenvolvedores devem refatorar o código continuamente assim que</p><p>encontrarem melhoria de código. Isso mantém o código simples e manutenível.</p><p>● Programação em Pares</p><p>– Os desenvolvedores trabalham em pares, verificando o trabalho dos outros e</p><p>prestando apoio para um bom trabalho sempre.</p><p>● Propriedade coletiva</p><p>– Os pares de desenvolvedores trabalham em todas as áreas do sistema, de</p><p>modo que não se desenvolvam ilhas de expertise. Todos os conhecimentos e</p><p>todos os desenvolvedores assumem responsabilidade por todo o código.</p><p>Qualquer um pode mudar qualquer coisa.</p><p>● Integração Continua</p><p>– Assim que o trabalho em uma tarefa é concluído, ele é integrado ao sistema</p><p>como um todo. Após essa integração, todos os testes de unidade do sistema</p><p>devem passar.</p><p>Práticas de Extreme Programming</p><p>● Ritmo sustentável</p><p>– Grandes quantidades de horas-extra não são</p><p>consideradas aceitáveis, pois o resultado final, muitas</p><p>vezes, é a redução da qualidade do código e da</p><p>produtividade a media prazo.</p><p>● Cliente no local</p><p>– Um representante do usuário final do sistema (o</p><p>cliente) deve estar disponível todo o tempo a equipe</p><p>de XP. Em um processo de XP, o cliente é um membro</p><p>da equipe de desenvolvimento e é responsável por</p><p>levar a ela os requisitos do sistema para</p><p>implementação.</p><p>Uma estória de prescrição de</p><p>medicamento</p><p>Kate é uma médica que deseja prescrever medicamentos para um</p><p>paciente de uma clínica. O prontuário do paciente já está sendo</p><p>exibido em seu computador, assim ela clica no campo “medicamento”</p><p>e pode selecionar “medicamento atual”, “nova medicação” ou</p><p>“formulário”.</p><p>Se ela selecionar “medicação atual”, o sistema pede que ela verifique</p><p>a dose. Se ela quiser mudar a dose, ela altera esta e em seguida,</p><p>confirma a prescrição.</p><p>Se ela escolher “nova medicação”, o sistema assume que ela sabe</p><p>qual medicação receitar. Ela digita os primeiras letras do nome do</p><p>medicamento. O sistema exibe uma lista de possíveis fármacos que</p><p>começam com essas letras. Ela escolhe a medicação requerida e o</p><p>sistema responde, pedindo-lhe para verificar se o medicamento</p><p>selecionado está correto. Ela insere a dose e, em seguida, confirma a</p><p>prescrição.</p><p>Uma estória de prescrição de</p><p>medicamento</p><p>Se ela escolhe “formulário”, o sistema exibe uma caixa de</p><p>busca para o formulário aprovado. Ela pode, então procurar</p><p>pelo medicamento requerido. Ela seleciona um medicamento</p><p>e é solicitado que verifique se a medicação está correta. Ela</p><p>insere a dose e, em seguida, confirma a prescrição.</p><p>O sistema verifica sempre se a dose está dentro da faixa</p><p>permita. Caso não esteja, Kate é convidada a alterar a dose.</p><p>Após Kate confirmar a prescrição, esta será exibida para</p><p>verificação. Ela pode escolher “OK” ou “Alterar”. Se clicar em</p><p>“OK”, a prescrição fica gravada nos bancos de auditoria. Se</p><p>ela clicar em “Alterar”, reiniciar o processo</p><p>de “Prescrição de</p><p>Medicamento”.</p><p>Exemplos de cartões de tarefas</p><p>para a prescrição de medicamentos</p><p>Extreme Programming</p><p>● Um preceito fundamental da engenharia de software tradicional é que</p><p>você deve projetar para mudar. XP descartou esse principio com base</p><p>na concepção de que muitas vezes a mudança e um esforço</p><p>desperdiçado.</p><p>– Mudanças são antecipadas mas nunca ocorrem ou são diferentes do esperado.</p><p>● Para evitar futuros problemas na adaptação de mudanças, a XP</p><p>constantes refatoração do código.</p><p>– Assim é mais fácil implementar as alterações.</p><p>– A refatoração melhora a legibilidade do código e reduz a necessidade de</p><p>documentação.</p><p>– Mudanças são fáceis de serem implementadas porque o código esta bem claro</p><p>e estruturado.</p><p>– Contudo, algumas mudanças requerem refatoração da arquitetura de toda, ou</p><p>parte, do programa e são bem mais caras.</p><p>Teste em Extreme Programming</p><p>● As principais características dos testes em XP</p><p>são:</p><p>– Desenvolvimento test-first.</p><p>– Desenvolvimento de teste incremental a partir de</p><p>cenários.</p><p>– Envolvimento dos usuários no desenvolvimento de</p><p>teste</p><p>– Uso de frameworks de testes automatizados.</p><p>Teste em Extreme Programming</p><p>Descrição do caso de teste para verificação de dose</p><p>Extreme Programming</p><p>● Valores que inspiram o XP:</p><p>Comunicação</p><p>CoragemFeedback</p><p>Simplicidade Respeito</p><p>Extreme Programming</p><p>● Comunicação</p><p>● Várias práticas do XP promovem uma maior comunicação</p><p>entre os membros da equipe</p><p>● A comunicação não é limitada por procedimentos formais.</p><p>● Usa-se o melhor meio possível, que pode ser</p><p>● Uma conversa ou reunião informal</p><p>● Um e-mail, um bate-papo, um telefonema</p><p>● O próprio código</p><p>● Preferência à comunicação mais ágil</p><p>Extreme Programming</p><p>● Simplicidade</p><p>– XP incentiva ao extremo práticas que reduzam a</p><p>complexidade do sistema.</p><p>– A solução adotada deve ser sempre a mais simples que</p><p>alcance os objetivos esperados.</p><p>● Use as tecnologias, algoritmos e técnicas mais</p><p>simples que permitirão atender aos requisitos do</p><p>usuário-final.</p><p>● Design, processo e código podem ser simplificados a</p><p>qualquer momento.</p><p>Extreme Programming</p><p>● Feedback</p><p>– Várias práticas de XP garantem um rápido feedback sobre</p><p>várias etapas/partes do processo.</p><p>● Feedback sobre qualidade do código (testes de unidade,</p><p>programação em pares, posse coletiva)</p><p>● Feedback sobre estado do desenvolvimento (estórias do</p><p>usuário-final, integração contínua, jogo do planejamento)</p><p>– Permite maior agilidade</p><p>● Erros detectados e corrigidos imediatamente</p><p>● Requisitos e prazos reavaliados mais cedo</p><p>● Permite estimativas mais precisas</p><p>Extreme Programming</p><p>● Coragem</p><p>● Testes, integração contínua, programação em pares e</p><p>outras práticas de XP aumentam a confiança do</p><p>programador e ajudam-no a ter coragem para:</p><p>● melhorar o código que está funcionando para torná-</p><p>lo mais simples.</p><p>● investir tempo no desenvolvimento de testes.</p><p>● mexer no design em estágio avançado.</p><p>● pedir ajuda aos que sabem mais.</p><p>● abandonar processos formais e ter o projeto e a</p><p>documentação em forma de código.</p><p>Extreme Programming</p><p>● Respeito</p><p>● Respeito é necessário para tirar o máximo desses</p><p>valores:</p><p>● Respeito pelo próximo</p><p>● Feedback, Comunicação</p><p>● Respeito por si mesmo</p><p>● Coragem, Simplicidade</p><p>Obrigado!</p><p>Slide 1</p><p>Slide 2</p><p>Slide 3</p><p>Slide 4</p><p>Slide 5</p><p>Slide 6</p><p>Slide 7</p><p>Slide 8</p><p>Slide 9</p><p>Slide 10</p><p>Slide 11</p><p>Slide 12</p><p>Slide 13</p><p>Slide 14</p><p>Slide 15</p><p>Slide 16</p><p>Slide 17</p><p>Slide 18</p><p>Slide 19</p><p>Slide 20</p><p>Slide 21</p><p>Slide 22</p><p>Slide 23</p><p>Slide 24</p><p>Slide 25</p><p>Slide 26</p><p>Slide 27</p><p>Slide 28</p><p>Slide 29</p>