Metodologias ágeis são abordagens ao desenvolvimento de produtos que estão alinhadas com os valores e princípios descritos no Manifesto Ágil para o desenvolvimento de software. As metodologias ágeis visam entregar o produto certo, com entrega incremental e frequente de pequenos pedaços de funcionalidades, através de pequenas equipes auto-organizadoras interfuncionais, permitindo um feedback frequente do cliente e correção do curso quando necessário.
Ao fazer isso, o Agile visa corrigir os desafios enfrentados pelas abordagens tradicionais de “cascata” de entregar produtos grandes em longos períodos de tempo, durante os quais os requisitos do cliente mudavam com frequência, resultando na entrega de produtos errados
Durante a maior parte de sua breve história (desde 1999-2000), “Agile” tem sido predominantemente uma abordagem ao desenvolvimento de software e projetos de desenvolvimento de aplicações de TI. Desde então, porém, agora se estende também a outros campos, especialmente nas indústrias de conhecimento e serviços.
Agile é sobre ser responsivo ao mercado e ao cliente, respondendo rapidamente às suas necessidades e demandas e sendo capaz de mudar de direção conforme a situação exige. Seja TI ou desenvolvimento de software ou qualquer outro campo onde haja um fluxo de trabalho e entrega de produtos de trabalho, as metodologias ágeis são aplicáveis. As metodologias ágeis tentam maximizar a entrega de valor ao cliente e minimizar o risco de construir produtos que não atendem — ou não mais — às necessidades do mercado ou do cliente.
Eles fazem isso dividindo o ciclo de entrega tradicionalmente longo (típico das “metodologias de cascata” legadas) em períodos mais curtos, chamados de sprints ou iterações. A iteração fornece a cadência para a entrega ao cliente de um produto funcional, obtendo feedback e fazendo mudanças com base no feedback.
Assim, as metodologias Agile procuraram reduzir os tempos de entrega (entrega antecipada, entrega frequente) para garantir que pedaços verticais menores do produto cheguem ao mercado, permitindo que os clientes forneçam feedback antecipadamente e garanta que o produto que eles finalmente recebem atenda às suas necessidades.
O Agile tornou-se um termo abrangente para uma variedade de metodologias e processos de planejamento, gerenciamento e técnicas para gerenciar projetos, desenvolver software e outros produtos e serviços de forma iterativa. Estes métodos incluem Scrum, de longe a metodologia mais prevalente e popular para software, XP (Programação Extrema ou Programação em Pares), e mais recentemente o Kanban.
As metodologias ágeis também incluem práticas técnicas — a maioria das quais se enquadra no termo de referência DevOps — que permitem Automação de Testes, Integração Contínua/Entrega Contínua/Implantação (CI/CD) e, de modo geral, um ciclo de entrega cada vez mais curto para software e outros produtos e serviços.
O uso do Agile como uma abordagem ao gerenciamento de projetos tem aumentado drasticamente nos últimos anos. A Gartner prevê que metodologias de desenvolvimento ágil serão usados em breve em 80% de todos os projetos de desenvolvimento de software.
O Manifesto Ágil é uma declaração de valores e princípios fundamentais para o desenvolvimento de software. O Manifesto Ágil para o desenvolvimento de software foi criado em 2001 e é uma declaração de 4 regras vitais e 12 princípios que servem como guia para as pessoas no desenvolvimento ágil de software. Foi criado por 17 profissionais que já praticavam metodologias ágeis como XP, DSDM, SCRUM, FDD, etc., reunidos nas montanhas nevadas do estado americano de Utah, reunidos por Kent Beck.
Indivíduos e interações acima de processos e ferramentas – O primeiro valor enfatiza o trabalho em equipe e a comunicação. Devemos entender que o desenvolvimento de software é uma atividade humana e que a qualidade da interação entre as pessoas é vital. As ferramentas são uma parte importante do desenvolvimento de software, mas fazer um grande software depende muito mais do trabalho em equipe, independentemente das ferramentas que a equipe possa utilizar.
Software funcional acima de documentação abrangente — A documentação tem seu lugar e pode ser um grande recurso ou referência tanto para usuários quanto para colegas de trabalho. O principal objetivo do desenvolvimento de software, entretanto, é desenvolver software que ofereça benefícios comerciais ao invés de documentação abrangente.
Colaboração do cliente acima da negociação de contratos — As equipes de desenvolvimento devem trabalhar de perto e se comunicar com seus clientes com frequência. Ao ouvir e obter feedback, as equipes entenderão o que todas as partes interessadas realmente querem.
Responder às mudanças seguindo um plano — As mudanças são uma realidade no desenvolvimento de Software, uma realidade que seu processo de Software deve refletir. Um plano de projeto deve ser flexível o suficiente para mudar, como a situação exige.
Agile é um termo abrangente para diversas modalidades e práticas. Vejamos algumas das metodologias populares:
A metodologia Scrum é um framework simples para trabalhar com projetos complexos, e foi criada por Ken Schwaber e Jeff Sutherland.
As metodologias ágeis de desenvolvimento de software são iterativas, o que significa que o trabalho é dividido em iterações, que são chamadas Sprints no caso do Scrum. O Scrum é executado por pequenas equipes de 7 a 9 pessoas, incluindo um Scrum Master e um Product Owner.
No Scrum, os projetos são divididos em ciclos (normalmente ciclos de 2 ou 3 semanas) chamados de Sprints. O Sprint representa um intervalo de tempo dentro do qual um conjunto de funcionalidades deve ser desenvolvido. Vários sprints podem ser combinados para formar um Lançamento — onde a entrega formal de software/produto é feita ao cliente/mercado.
A funcionalidade geral do produto é dividida pelo Product Owner em funcionalidades menores (normalmente descritas como Épicos e Histórias de Usuários — ou apenas Histórias). Estas Histórias são priorizadas e retomadas em cada Sprint ou Iteração. A intenção da metodologia é que a equipe seja capaz de demonstrar no final de cada Sprint partes funcionais do produto ao Product Owner, para garantir que o produto esteja funcionando como pretendido.
Em geral, a metodologia Scrum quebra o longo processo de cascata em ciclos menores, o que permite que as equipes de produto e o cliente final revisem frequentemente o software funcional e se certifiquem de que ele atende seus requisitos comerciais. Isso garante que o produto final também atenda às exigências finais do cliente.
A metodologia Scrum é caracterizada por cerimônias específicas tais como a reunião Daily Standup, a Reunião de Revisão de Sprint, a Demonstração ao Product Owner e a Reunião Retrospectiva de Sprint. Todas estas reuniões proporcionam colaboração e oportunidades de revisão à equipe para garantir que o desenvolvimento esteja progredindo como pretendido, e quaisquer questões sejam resolvidas rapidamente.
Programação Extrema (XP) — ou Programação em Pares é uma metodologia desenvolvida por Kent Beck no início dos anos 90. Esta metodologia ágil foca no aprimoramento das relações interpessoais como uma chave para o sucesso no desenvolvimento de software. A XP também se concentra em promover o trabalho em equipe, cuidar do aprendizado dos desenvolvedores e promover um bom ambiente de trabalho. Ele é caracterizado por desenvolvedores que trabalham em pares, onde um desenvolvedor programa enquanto o outro programa observa; e eles trocam essas funções regularmente durante todo o Sprint. Desta forma, eles permitem a revisão contínua do código e o feedback que melhora a qualidade do código e a capacidade do desenvolvedor.
A Programação Extrema (XP) promove um feedback contínuo entre o cliente e as equipes de desenvolvimento, comunicação fluida entre todos os participantes, simplicidade nas soluções implementadas e prontidão para enfrentar mudanças. A XP é especialmente adequada para projetos com requisitos indistintos e altamente mutáveis, e onde há alto risco técnico.
O Desenvolvimento de Software Adaptativo (ASD) foi desenvolvido por Jim Highsmith e Sam Bayer no início dos anos 90. Ele incorpora os princípios da adaptação contínua, ou seja, adaptar-se à mudança e não lutar contra ela. O Desenvolvimento de Software Adaptativo utiliza um ciclo de desenvolvimento dinâmico conhecido como Especular, Colaborar e Aprender. Este ciclo é dedicado ao aprendizado constante e intensa colaboração entre desenvolvedores e clientes devido à constante mudança no ambiente de negócios.
Ao contrário da maioria das metodologias de desenvolvimento de Software que utilizam um ciclo de vida estático, ou seja, Planejar-Design-Construir, o ASD oferece um ciclo de vida iterativo não linear, onde cada ciclo pode iterar e ser modificado enquanto outro ciclo está sendo executado. Ele aponta para o Desenvolvimento Rápido de Aplicações (RAD), que enfatiza a velocidade de desenvolvimento para criar um produto de alta qualidade e baixa manutenção envolvendo o usuário na medida do possível. As principais características do ASD são:
A Metodologia de Desenvolvimento de Sistemas Dinâmicos (DSDM) foi desenvolvida no ano de 1994 por um grupo de fornecedores e especialistas na área de desenvolvimento de Software. DSDM concentra-se em projetos de Software que são caracterizados por orçamentos e cronogramas apertados. Ele se concentra na entrega frequente de ciclos de produtos, e o desenvolvimento é iterativo e incremental.
Com a Metodologia de Desenvolvimento de Sistemas Dinâmicos (DSDM), pode-se projetar um roadmap de entregas antecipadas e contínuas para o projeto, implementando uma solução incremental, adaptando-se a partir do feedback obtido ao longo do processo, e verificando se os benefícios esperados estão sendo atingidos.
A DSDM é um modelo ágil que pode sem dúvida ajudar as organizações que estão acostumadas a trabalhar em projetos a mudar sua mentalidade e sua maneira de trabalhar para melhorar sua capacidade de entregar valor e reduzir o tempo de colocação no mercado.
A metodologia Feature Driven Development (FDD) é voltada principalmente para equipes maiores com mais pessoas do que aquelas às quais outras metodologias ágeis, como o Scrum, são normalmente aplicadas. O FDD foi desenvolvido por Jeff De Luca e Peter Coad no ano de 1997. Esta metodologia foca em iterações curtas, que permitem entregas tangíveis do produto em um curto período de tempo (2 semanas).
Projetos com várias equipes e um grande número de pessoas representam o desafio de que nem todos serão igualmente talentosos e disciplinados. O FDD inclui atividades específicas que ajudam a enfrentar os desafios de comunicação e coordenação de tais projetos.
O FDD é um processo de 5 etapas, sendo as 3 primeiras sequenciais e as duas etapas finais iterativas (como mostrado no diagrama acima). Todas as metodologias ágeis seguem uma série de princípios que as fazem assemelhar-se umas às outras. O FDD, entretanto, oferece soluções sobre como organizar a equipe e como programar o código, o que o torna especialmente viável para grandes equipes de desenvolvimento que constroem software complexo.
Um dos livros mais populares sobre o método FDD foi publicado por Stephen Palmer em 2002, intitulado “A Practical Guide to Feature-Driven Development”.
A Metodologia Kanban foi definida por David Anderson no início dos anos 2000, em resposta a alguns dos desafios das diversas metodologias Agile, especialmente o Scrum. Estas metodologias, enquanto tentavam resolver os desafios das metodologias tradicionais/cascata, tornaram-se vítimas de alguns dos mesmos desafios propriamente ditos.
O Behavior Driven Development (BDD) é uma metodologia de desenvolvimento ágil e orientada para o comportamento. Foi criado por Dan North em 2003 como uma evolução da metodologia TDD. O objetivo de Dan North era reunir pessoas não técnicas no processo de criação da funcionalidade técnica do sistema. Acontece que quando desenvolvemos software, falhamos involuntariamente em incluir conceitos comerciais presentes na funcionalidade, resultando em um possível fluxo para bugs recorrentes e até mesmo graves.
O BDD utiliza conceitos de linguagem universal que incentivam a colaboração entre pessoas com ou sem conhecimento técnico em um projeto de software. O processo de desenvolvimento do BDD é baseado em escrever cenários de teste e funcionalidades. Estes contêm os requisitos e critérios de aceitação para o comportamento do sistema. Ele diz o que a funcionalidade precisa para começar, o que fará a seguir e quais serão os resultados após a sua execução.
O BDD ajuda as equipes a comunicar com mais precisão os requisitos, descobrir falhas antecipadamente e construir software que permaneça sustentável ao longo do tempo.
O BDD utiliza conceitos de linguagem universal que incentivam a colaboração entre pessoas com ou sem conhecimento técnico em um projeto de software. O processo de desenvolvimento do BDD é baseado em escrever cenários de teste e funcionalidades. Estes contêm os requisitos e critérios de aceitação para o comportamento do sistema. Ele diz o que a funcionalidade precisa para começar, o que fará a seguir e quais serão os resultados após a sua execução.
O BDD ajuda as equipes a comunicar com mais precisão os requisitos, descobrir falhas antecipadamente e construir software que permaneça sustentável ao longo do tempo.