FDD (Feature-driven development) Desenvolvimento Orientado a Funcionalidades Isabel Xavier / Rafael Barbosa Engenharia de Software – FA7 O estado atual dos projetos Planejamento pobre ou incompleto Falta de entendimento das questões de negócio ou técnico Falha em não colocar as necessidades dos clientes ou dos usuários finais em primeiro lugar Estouro de cronograma, e entrega de produtos indesejáveis O que é? Feature Driven Development (Desenvolvimento Guiado por Funcionalidades):É uma metodologia ágil para gerenciamento e desenvolvimento de software. Ela combina as melhores práticas do gerenciamento ágil de projetos com uma abordagem completa para Engenharia de Software orientada por objetos. O que é Feature? Funcionalidade É uma funcionalidade para o detalhamento e uma característica pequena para ser implementada, no máximo em uma iteração, oferecendo assim o valor ao cliente <ação><resultado><objeto> História da FDD FDD foi criado em 1997 num grande projeto em Java para o United Overseas Bank, em Singapura. Nasceu a partir da experiência de análise e modelagem orientadas por objetos de Peter Coad e de gerenciamento de projetos por Jeff de Luca. Jeff de Luca Peter Coad Introduzido aqui... Primeira publicação em 1999, no do livro Java Modeling in Color with UML, de Peter Coad, Eric Lefebvre e Jeff De Luca; Expandido aqui... Em 2002, Stephen Palmer Mac Felsing publicaram o Pratical Guide to Feature Development, com a completa; e John livro A Driven versão Em 2003, David Anderson, o livro Agile Management for Software Engineering: Using the Theory of Constraints for Business Results, considerado por muitos como um marco na literatura ágil. Por que usar? Clientes têm resultados rápidos e relatório do status numa linguagem que eles entendem Gerentes de projeto têm uma visão completa e exata do status do projeto Desenvolvedores conseguem trabalhar em novas coisas em poucos dias e ficam mais envolvidos em análise, projeto e codificação Caracteristicas da FDD A FDD chama a atenção por algumas características peculiares: Resultados úteis a cada duas semanas ou menos Blocos bem pequenos de funcionalidade valorizada pelo cliente,chamados "Features“ Não existem restrições quanto à complexidade do sistema e tamanho da equipe Planejamento detalhado e guia para medição Rastreabilidade e relatórios com precisão Monitoramento detalhado dentro do projeto, com resumos de alto nível para clientes e gerentes, tudo em termos de negócio Fornece uma forma de saber, dentro dos primeiros 10% de um projeto, se o plano e a estimativa são sólidos Práticas Modelagem de objetos de domínio Desenvolver por funcionalidade(feature) Formação de equipes pequenas e dinâmicas. Inspeção (Inspection) Uso dos melhores métodos conhecidos de detecção de erros. Releases freqüentes Cada classe possui um único desenvolvedor responsável Equipe de funcionalidades Desenvolvimento e acompanhamento do progresso através de da lista de funcionalidades. Proprietários de classes individuais Exploração e explicação do problema do domínio Resulta em um framework Garantir que existe um sistema sempre disponível e demonstrável. Administração de Configuração Habilita acompanhamento do histórico do código-fonte. Papeis Principais • • • • • • • De apoio • • • • • Gerente de projeto (Project Manager) Arquiteto líder (Chief architect) Gerente de desenvolvimento (Development Manager) Programador líder (Chief programmer) Proprietário de classe (Class owner) Especialista do domínio (Domain experts) Gerente do domínio (Domain manager) Gerente de versão (Release manager) Guru de linguagem (Language lawyer/language guru) Engenheiro de construção (Build engineer) “Ferramenteiro” (Toolsmith) Administrador de sistemas (System Administrator) Adicionais • Testadores (Testers) • Instaladores (Deployers) • Escritores técnicos (Technical writes) Papeis Suporte Documentador Testador Gestor de projeto Adm. de sistemas Eng. de builds Gestor de desenvolvimento Chefe de design CLIENTE Programador chefe Dono de classe Guru de linguagem Gestor de atividade Especialista Papéis: Primário Secundário Adicionais Fases do FDD A FDD é uma metodologia muito objetiva. Possui apenas duas fases: Concepção & Planejamento: Pensar um pouco antes de fazer (tipicamente de 1 a 2 semanas); Construção: Fazer de forma iterativa (tipicamente em iterações de 2 semanas). Fases do FDD Concepção & Planejamento Desenvolver um modelo abrangente Construir a lista de funcionalidades Planejar por funcionalidade Construção Detalhar por funcionalidade Construir por funcionalidade Fases do FDD Fases do FDD - Concepção & Planejamento Desenvolver modelo abrangente Formar o time de modelagem. Conduzir o Domain Walkthrough. Estudar documentação. Desenvolver modelos de pequenos grupos. Desenvolver modelo da equipe. Refinar o Modelo Abrangente. Escrever Notas. O Modelo de Domínio Criado Será decomposto por 3 camadas: Área de Negócio. Atividade de Negócio. Automatização da Atividade (Funcionalidade). Fases do FDD - Concepção & Planejamento Construir a lista de funcionalidades Construção de uma lista de funcionalidades importantes para o cliente onde a lista representara o produto final a ser desenvolvido, podendo ser necessário a inclusão de novas funcionalidades no modelo de domínio a cada iteração. Fases do FDD - Concepção & Planejamento Planejar por funcionalidade Determinar a seqüência do desenvolvimento . Atribuir atividades de Negócio aos Programadores-chefes. Atribuir Classes aos Desenvolvedores. Fases do FDD – Construção Detalhar por funcionalidade Já dentro de uma iteração de construção, a equipe detalha os requisitos e outros artefatos para a codificação de cada funcionalidade, incluindo os testes. O projeto para as funcionalidades é inspecionado e o modelo abrangente é atualizado. O resultado é o modelo de domínio mais detalhado e os esqueletos de código como declaração de métodos, tipagem, atributos e parâmetros prontos para serem preenchidos. Fases do FDD – Construção Construir por funcionalidade Cada esqueleto de código é preenchido, testado e inspecionado de acordo com o modelo abrangente. O resultado é um incremento do produto integrado ao repositório principal do código após ter sido devidamente testado por um outro membro da equipe se necessário, com qualidade e potencial para ser usado pelo cliente. Vantagens e Desvantagens Vantagens Recomendado para qualquer tipo de desenvolvimento; Foco em “características de valor para o cliente”; FDD prioriza aquilo que o cliente prioriza; FDD possui requisitos mais formais; Seus princípios e práticas proporcionam um equilíbrio entre as filosofias tradicionais e as mais extremas, proporcionando uma transição mais suave para organizações mais conservadoras; Desvantagens Ainda existem questionamento sobre a eficácia / aplicabilidade de FDD; Controvérsias sobre o tamanho mínimo de um time FDD; Conclusão É um método ágil e altamente adaptativo; Oferece vantagens dos métodos pesados; Oferece vantagens dos métodos extremamente ágeis; É orientada às necessidades dos clientes,gerentes e desenvolvedores; Bibliografia Heptagon: <http://www.heptagon.com.br/fdd> FDD numa casca de banana. Um guia de rápido aprendizado para a Feature – Driven Development de Alexandre Magno-mar.2007. Disponível em: <http://pt.scribd.com/doc/34365766/FDD-em-Uma-Casca-de-Banana > FDD – Feature Driven Development: <http://pt.scribd.com/doc/37146865/FDDCompleto> FDD – Um método ágil e eficiente: < http://imasters.com.br/artigo/13370/agile/fddum-metodo-agil-e-eficiente> FDD – Feature Driven Development: http://www2.dc.uel.br/~rlarruda/trab/fdd.pdf