Engenharia de Software | Gerenciamento de Projetos de Software | Métodos Ágeis
Métodos de gerenciamento
Diferentes tipos de projetos necessitam de diferentes métodos de gerenciamento. A abordagem ágil é muito utilizada em projetos orientados a valor. Como vimos, projetos orientados a valor geralmente são realizados por profissionais do conhecimento e possuem elevado grau de incerteza, por grande indefinição do escopo e elevado número de mudanças.
A maior parte dos conceitos e princípios ágeis surgiram com foco em projetos de desenvolvimento de software e atualmente são utilizados em diversos tipos de projetos que possuem grandes incertezas, como campanhas publicitárias, novos produtos, planejamento de orçamento e muitas outras áreas. Nesta aula iremos manter o foco em projetos de software, porém esses conceitos não são específicos para esses tipos de projetos.
Existem diversos tipos de abordagens ágeis, e essas abordagens ágeis buscam estar alinhadas com diversos princípios definidos no documento “Manifesto for Agile Software Development”, criado em Fevereiro de 2001, por diversos especialistas em projetos de software.
Indivíduos e interações
Devemos, sempre, privilegiar indivíduos e interações a processos e ferramentas. Observe que essa afirmação traz uma importante mensagem, processo e as ferramentas provavelmente serão necessários no projeto, porém, devemos tentar concentrar a atenção da equipe sobre os indivíduos e interações envolvidos no projeto. Lembre-se de que projetos são realizados por pessoas, e não por ferramentas, assim como os problemas são resolvidos por pessoas, e não processos.
Focando primariamente no desenvolvimento dos indivíduos envolvidos no projeto e enfatizando as interações produtivas e eficazes, melhoramos as chances de sucesso do projeto. Lembre-se de que isso não é dizer que processos e ferramentas não podem ajudar na conclusão com êxito de um projeto. Processos e ferramentas bem desenhados e adequados são ativos de grande importância.
Software em funcionamento
O segundo valor pregado destaca a necessidade entregar o software em funcionamento mais do que documentação abrangente. Projetos de software são normalmente iniciados com os objetivos de criação de valor para a empresa por meio de um produto de software de alta qualidade, mas muitas vezes há entregas em partes intermediárias (incrementos), raramente a documentação é completamente atualizada e reflete a realidade do software, porém é essencial se documentar o que precisa ser documentado em um software, mas sem exagero. Lembre-se sempre de que software sem documentação é certamente problemático e dificulta o suporte e a manutenção. Mas uma documentação completa sem software não agrega absolutamente nada a nenhuma organização.
Colaboração com o cliente
O terceiro valor reforça a necessidade de ser flexível e eficiente, ao invés de rígido e não cooperativo. É semelhante à diferença entre “estar certo” e fazer a coisa certa”. Poderíamos construir o produto exatamente como originalmente especificado, mas se o cliente mudar de ideia ou de prioridade, você não concorda que devemos ser flexíveis e trabalhar para a nova meta? É claro que sim, as mudanças e ajustes deverão ser refletidos em aditivos contratuais ou ajustes, mas não deve ser um impeditivo para a continuidade do desenvolvimento e entrega do software.
Atualmente existem diversas novas formas de contratos para acolher projetos com características ágeis, como pagamento de preço fixo por interação (ou sprint), pagamento por pontos, histórias, ou outras que permitem a flexibilidade necessária para projetos orientados a valor.
Responder às mudanças
Em projetos com grande número de incertezas, é quase certo que os planos iniciais serão alterados. Em vez de investir esforços na tentativa de trazer o projeto de volta aos planos originais, nós deveríamos gastar esforço e energia em responder às inevitáveis mudanças no projeto. Observe que este valor não está sugerindo abandonar o planejamento e apenas reagir às mudanças.
Nós ainda precisamos planejar, mas temos de reconhecer que os planos iniciais foram criados quando conhecíamos menos o Projeto (no início), e com o desenvolvimento do trabalho, vamos precisar atualizar o plano. Muitos dos métodos ágeis focam em macroplanos superficiais (criação de histórias, product release, casos de uso etc.), e um planejamento mais específico para iterações (ou sprints).
Os doze princípios do Manifesto
Listamos para você os doze princípios básicos do Manifesto para Desenvolvimento Ágil de Software.
1 – Nossa maior prioridade é satisfazer o cliente através da entrega contínua e adiantada de software com valor agregado.
2 – Mudanças nos requisitos são bem-vindas, mesmo tardiamente no desenvolvimento. Processos ágeis tiram vantagem das mudanças visando vantagem competitiva para o cliente.
3 – Entregar frequentemente software funcionando, de poucas semanas a poucos meses, com preferência à menor escala de tempo.
4 – Pessoas de negócio e desenvolvedores devem trabalhar diariamente em conjunto por todo o projeto.
5 – Construa projetos em torno de indivíduos motivados. Dê a eles o ambiente e o suporte necessário e confie neles para fazer o trabalho.
6 – O método mais eficiente e eficaz de transmitir informações para e entre uma equipe de desenvolvimento é através de conversa face a face.
7 – Software funcionando é a medida primária de progresso.
8 – Os processos ágeis promovem desenvolvimento sustentável. Os patrocinadores, desenvolvedores e usuários devem ser capazes de manter um ritmo constante indefinidamente.
9 – Contínua atenção à excelência técnica e bom design aumenta a agilidade.
10 – Simplicidade – a arte de maximizar a quantidade de trabalho não realizado é essencial.
11 – As melhores arquiteturas, requisitos e designs emergem de equipes auto-organizáveis.
12 – Em intervalos regulares, a equipe reflete sobre como se tornar mais eficaz e então refina e ajusta seu comportamento de acordo.
Declaração de Interdependência
Em 2005, The Agile Leadership Network (ALN) criou a Declaração de Interdependência para Gerenciamento de Projetos Ágeis. Esse documento promove abordagens ágeis e adaptáveis para unir as pessoas, projetos e valor. Para alcançar esses resultados, os seguintes procedimentos foram adotados:
• Aumento do retorno sobre o investimento, fazendo fluxo contínuo de valor o nosso foco;
• Entrega dos resultados confiáveis por envolver os clientes em interações frequentes e compartilharmos a propriedade;
• Espera da incerteza e gerenciamento através de iterações, antecipações, e adaptações.
• Liberdade de criatividade e inovação, reconhecimento de que os indivíduos são a melhor fonte de valor, e criação um ambiente onde eles podem fazer a diferença.
• Melhoramento o desempenho através de prestação de contas do grupo para resultados e responsabilidade compartilhada para a eficácia do time.
• Melhorias da eficácia e confiabilidade por meio de estratégias específicas, processos e práticas
Existem diversas metodologias e frameworks ágeis, os mais comuns e utilizados são o Scrum, Extreme Programming (XP), Feature Driven Development (FDD), Dynamic Systems Development Method (DSDM), Crystal, Lean, KanBan, e outros. O Scrum e o XP serão mais detalhados na próximas aulas pois são os de maior aceitação e uso no Brasil, porém todos possuem características muito valiosas para o gerenciamento de projetos orientados a valor.
Desenvolvimento dirigido a funcionalidades
É uma abordagem simples de entender e poderosa para o desenvolvimento de produtos. Uma equipe de projeto seguindo o método FDD irá primeiro desenvolver um modelo global para o produto, construir lista de recursos e planejar o trabalho. A equipe então se move através da concepção e construção de iterações para desenvolver cada recurso. O FDD busca apresentar resultados frequentes, tangíveis e funcionais.
Boas práticas
O FDD recomenda uma série de boas práticas oriundas da Engenharia de Software, como:
1 – Modelagem de Domínio do Objeto: as equipes devem explorar e explicar o domínio (ou ambiente de negócios) do problema a ser resolvido.
2 – Desenvolvimento por Funcionalidade: Esta prática envolve decompor as necessidades em funcionalidades e definir períodos de desenvolvimento de uma ou mais funcionalidades em intervalos de duas semanas ou mais curtos.
3 – Propriedade Individual (código): as áreas de código devem ter um único proprietário para garantir consistência, desempenho e integridade conceitual. (Nota: Propriedade individual é um bem diferente da ideia de propriedade código coletiva do XP que visa difundir o conhecimento para outros membros da equipe).
4 – Times Dinâmicos: são pequenas equipes, formadas dinamicamente de acordo com características de cada projeto. Os times ajudam a mitigar o risco associado à propriedade individual.
5 – Inspeções: são revisões que ajudam a garantir boa qualidade e design de código.
6 – Gerenciamento de Configuração: Essa prática envolve rotulagem de código, controle de alterações e gerenciamento do código-fonte.
7 – Construções Regulares: através de entregas pequenas e constantes, o time incrementa o produto de software com a nova funcionalidade desenvolvida. Essa prática também permite criar facilmente uma versão demo.
8 – Visibilidade: controle e acompanhamento do progresso e dos resultados baseado em funcionalidades desenvolvidas.
Metodologia de desenvolvimento de sistemas dinâmicos
DSDM foi um dos pioneiros dos métodos ágeis. É uma metodologia de desenvolvimento bastante prescritiva, baseada em Rapid Application Development (RAD) – Desenvolvimento Rápido de Aplicações, o DSDM enfatiza o envolvimento constante do usuário durante todo o projeto. Cria um amplo ciclo de vida de projeto, abrangendo aspectos de um projeto ágil analisando sempre a viabilidade e necessidade do negócio para a implementação.
Ciclo de vida DSDM
O ciclo de vida do DSDM é iterativo e incremental. Portanto, a solução não pode ser entregue à empresa de uma só vez , mas por uma série de incrementos que compõem a solução com cada entrega.
Desta forma, as necessidades de negócios urgentes podem ser priorizadas e abordadas cedo, enquanto características menos importantes são implementadas e entregues mais tarde.
A natureza iterativa permite que os representantes de negócios vejam e se envolvam no trabalho em construção, analisando e já sugerindo os ajustes e alterações necessárias durante o desenvolvimento de um incremento da solução. Fazem parte do ciclo de vida DSDM o ciclo de vida de um projeto de gestão e um ciclo de vida de desenvolvimento de produtos em um único processo.
O DSDM pode ser utilizado sozinho como metodologia ágil, porém o uso do DSDM com outros métodos e boas práticas de gerenciamento de projetos ou técnicas de desenvolvimento detalhados podem contribuir para a melhora nos processos e resultados.
O DSDM é centrado em 8 princípios (definidos antes da criação do Manifesto Ágil, porém bem alinhados com os valores defendidos no Manifesto Ágil). São eles:
Crystal
O Crystal é uma família de metodologias desenvolvidas por Alistair Cockburn, em meados da década de 90, destinadas para projetos que vão desde aqueles executados por pequenas equipes de desenvolvimento com baixa criticidade e poucas abordagens até por grandes equipes que implementam sistemas de alta criticidade. A família Crystal promove uma série de princípios ágeis, como:
1 – Entregas frequentes.
2 – Melhoria reflexiva (verificação constante e busca contínua de promoção de melhoria e implementação de novos métodos).
3 – Comunicação osmótica (membros são alocados próximos uns dos outros para melhorar a comunicação, esse conceito também é conhecido como War Room – Sala de Guerra. Veremos mais sobre comunicação adiante).
4 – Segurança pessoal (Crystal defende um ambiente seguro para que todos possam apresentar suas dúvidas e questionamentos) .
5 – Foco (cada membro do time deve saber o que precisa fazer e ter liberdade suficiente para trabalhar no que é necessário).
6 – Fácil acesso ao usuário (fácil acesso aos usuários-chaves e rápido feedback) .
7 – Ambiente automatizado (testes automatizados, controle de configurações, integração contínua.
Atividade proposta
Analisando o conteúdo da aula, faça uma reflexão sobre as características dos princípios ágeis e das metodologias apresentadas e verifique se você utiliza (ou poderia utilizar) alguma dessas características em seu dia a dia nos projetos de software.
Chave de resposta:
Nesta atividade tem como objetivo a identificação de oportunidades de uso das técnicas apresentadas em seu dia a dia. Por exemplo, podemos iniciar o uso dos princípios como os listados abaixo.
Trabalhar com Modelagem de Domínio do Objeto: As equipes de explorar e explicar o domínio (ou ambiente de negócios) do problema a ser resolvido.
Direcionar o Desenvolvimento por Funcionalidade: Esta prática envolve decompor as necessidades em funcionalidades e definir períodos de desenvolvimento de uma ou mais funcionalidades em intervalos de duas semanas ou mais curtos.
Propriedade Individual (código): As áreas de código devem ter um único proprietário para garantir consistência, desempenho e integridade conceitual. (Nota: que é um bem diferente da ideia de Propriedade Código Coletiva do XP que visa difundir o conhecimento para outros membros da equipe).
Times Dinâmicos: Estes são pequenas equipes, formadas dinamicamente de acordo com características de cada projeto. Os times ajudam a mitigar o risco associado à propriedade individual.
Inspeções: São revisões que ajudam a garantir boa qualidade e design de código.
Gerenciamento de Configuração: Essa prática envolve rotulagem de código, controle de alterações e gerenciamento do código fonte.
Construções Regulares: Através de entregas pequenas e constantes, o time incrementa o produto de software com a nova funcionalidade desenvolvida. Esta prática também permite criar facilmente uma versão demo.
Visibilidade: Controle e acompanhamento do progresso e dos resultados baseado em funcionalidades desenvolvidas.
• Foco na necessidade de negócio;
• Entregas no prazo;
• Colaboração;
• NUNCA comprometa a qualidade;
• Desenvolvimento incremental com bases sólidas;
• Desenvolva iterativamente;
• Comunicação contínua e clara;
• Demonstre Controle (VISIBILIDADE SOBRE PROCESSOS E PRODUTOS).
Referências
DSDM. Disponível em: <http://www.dsdm.org/>
CRYSTAL. Disponível em: .FDD. Disponível em: <http://www.featuredrivendevelopment.com/>.
MANIFESTO FOR AGILE SOFTWARE DEVELOPMENT. Disponível em: <http://agilemanisfesto.org>.
MANIFESTO FOR AGILE SOFTWARE DEVELOPMENT. Os 12 Princípios por trás do Manifesto. Disponível em: <http://agilemanifesto.org/iso/ptbr/principles.html>.
THE AGILE LEADERSHIP NETWORK (ALN). Declaração de Interdependência para Gerenciamento de Projetos Ágeis. Disponível em: <http://pmdoi.org/>.
Engenharia de Software | Gerenciamento de Projetos de Software | Métodos Ágeis