Please enable JavaScript.
Coggle requires JavaScript to display documents.
FDD (Feature-Driven Development) - Coggle Diagram
FDD (Feature-Driven Development)
significa desenvolvimento guiado afuncionalidades, seu principal objetivoé entregar ao cliente um softwarefuncional em tempo hábil, seguindo omodelo iterativo e incremental doprocesso de desenvolvimento desoftware.
O FDD surgiu em Singapura, entre os anos de 1997 e 1999;○ Foi desenvolvido por Peter Coad e Jeff De Luca e publicado em 1999 no livro “Java Modeling in Colorwith UML”.● É uma das metodologias mais antigas, sendo criada anteriormente ao ManifestoÁgil (o manifesto ágil ocorreu apenas em 2001);● Apesar de ter algumas diferenças entre o FDD e o XP, é possível utilizar asmelhores práticas de cada metodologia.
l. Propõe um equilíbrio entre filosofias tradicionais eágeis;
II. É prático para o trabalho com projetos iniciais, comgrandes equipes, ou projetos com codificações jáexistentes.
III. Lema do FDD: “Resultados frequentes efuncionais”
Uma feature “é uma funcionalidade com valor para o cliente que pode ser desenvolvida em duas ou menos semanas”;
● Um dos objetivos do FDD é entregar para o cliente funcionalidades com rapidez;
○ Em um período fixo de tempo, em geral, duas semanas ou menos. Exemplo:
Calcular o valor de uma compra;
Calcular itens em estoque;
Listar fornecedores locais.
Um projeto que segue a metodologia FDD deve ser estruturado de acordo com as seguintes premissas:
Desenvolvimento por funcionalidades;
○ Com base na lista de funcionalidades, deve-se planejar por funcionalidade, mas este planejamento é incremental.
Um único programador é responsável pela funcionalidade desenvolvida
○ ATENÇÃO: Esse é um ponto que diverge do XP!!!
○ No FDD é incentivado que UM desenvolvedor seja o único responsável pela funcionalidade que este desenvolve, já no XP, o código deve ser comunitário.
ETVX
O FDD é composto por cinco etapas, e é indicado que cada iteração siga o padrão de etapas chamado de ETVX, oriundo de:
Entrada
(Entry)
especifica e define os critérios de entradas para as etapas
Verificação
(Verification)
especifica tipos de avaliações(internas e externas) e inspeções de projeto e código
Tarefa
(Task)
é composto por uma lista com as tarefas que deverão ser realizadas
Saída
(Exit)
especifica os critérios de saída, definindo os produtos tangíveis
Papéis
No FDD, uma pessoa podedesempenhar mais de um papel e umpapel pode ser desempenhado pormais de uma pessoa.
O FDD possui 5 papéis principais, são eles:1. Gerente de Projeto;2. Gerente de Desenvolvimento;3. Arquiteto-chefe;4. Proprietários de código/classe(Desenvolvedores);5. Especialistas do Domínio (negócio).
Gerente de ProjetoÉ o líder administrativo e financeiro do projeto: tem a palavra final no quese trata de escopo, cronograma e recursos do projeto.● É quem trata das questões administrativas do projeto;● Possui autonomia para decidir o que deverá ser feito;● Prioriza toda e qualquer funcionalidade que entregue valor e consiga serrealizada durante um período de tempo pré-determinado.É o responsável também por toda a equipe, assegurando boas condições de trabalho paraaumentar o rendimento de todos os envolvidos, além de decidir o que será realizado durante aiteração definida.
Gerente de DesenvolvimentoÉ o líder nas atividades diárias do desenvolvimento. É responsável porresolver qualquer tipo de conflito que venha a ocorrer dentro da equipe.● É responsável por retirar qualquer impedimento que a equipe possua,● Faz com que as reuniões necessárias aconteçam (principalmente com osclientes/usuários finais);● Deve avaliar se o código realizado pelo time de desenvolvimento está nospadrões do projeto.Caso não esteja, ele deverá apontar melhorias ou sugestões que colaborem no amadurecimento daequipe, em relação ao código e também de time.
Arquiteto-chefeÉ responsável pela modelagem do projeto. Deve auxiliar a equipe dedesenvolvedores e contribuir na construção do software.● É responsável por questões relacionadas à definição dos componentes desoftware, suas propriedades externas, e seus relacionamentos com outrossoftwares.Busca facilitar a organização dos componentes de um software e melhorar a flexibilidade eportabilidade do sistema, gerando mais facilidade de manutenção.
Proprietários de código(programadores-chefe)São os responsáveis pela modelagem e desenvolvimento de novasfuncionalidades de um software.● A principal atividade de um desenvolvedor/programador é aimplementação das features definidas ou pelo Gerente de Projetos ou peloGerente de Desenvolvimento.No FDD, o código deve ser realizado apenas por um desenvolvedor, ou seja, iniciado e terminadopelo mesmo programador.
Especialistas do Domínio (negócio)Pode ser qualquer pessoa que tenha o melhor conhecimento sobre osoftware em particular, e pode ajudar as Equipes a entendê-lo.● Sua responsabilidade é de adquirir e transmitir informações a respeito dofuncionamento dos requisitos do sistema.Podem ser usuários, clientes, patrocinadores (servem como base de conhecimento dosdesenvolvedores).
Gerente de Domínio:
É o líder do domínio, resolve divergências de opinião com relação aos requisitos do sistema.
Guru da
Linguagem:
Um membro da equipe comamplo conhecimento nalinguagem ou tecnologiausada no desenvolvimentodo sistema.
Gerente
de Versão:
Controla a evolução doprojeto através da análisede relatórios e reuniõescurtas com os gerentes.
Administrador
de Sistema:
Configura, gere e resolveproblemas nos servidores eredes utilizados durante odesenvolvimento.
Fases e Processos do FDD
No FDD, o planejamento é realizado por processos, onde o conjunto deprocessos se divide em duas fases:1. Concepção e Planejamento: Pensar um pouco antes de fazer(tipicamente de 1 a 2 semanas);2. Construção: Fazer de forma iterativa (tipicamente emiterações de 2 semanas).Está sendo eficaz para projetos em que o processo de desenvolvimento é uma incógnita,cheio de mudanças.Aqui, o projeto como um todo tem muita importância, mas o processo é separado poráreas.
Processos
Os cinco processos do FDD são bem definidos e integrados:
DMA (Desenvolver um Modelo Abrangente)○ Análise Orientada por Objetos
CLF (Construir a Lista de Funcionalidades)○ Decomposição Funcional
PPF (Planejar por Funcionalidade)○ Planejamento Incremental
DPF (Detalhar por Funcionalidade)○ Desenho (Projeto) Orientado por Objetos
CPF (Construir por Funcionalidade)○ Programação e Teste Orientados por Objetos
Desenvolver um Modelo Abrangente
➔ O primeiro momento é de conhecer para analisar o sistema e o contextoem que ele está inserido.
◆ A partir disso são estudados os domínios do sistema e um modelogeral é desenvolvido com base nesses estudos.
➔ Criado o modelo geral, pequenas equipes são responsáveis por criaruma modelagem superficial para cada área de domínio do sistema.
◆ Cada modelo criado é revisado por outros membros do projeto, quenão fazem parte da equipe que criou o modelo, a fim de escolher omelhor modelo de domínio para cada área.
➔ Assim, ao final do processo os modelos escolhidos são unificados no modelogeral do domínio do sistema e o trabalho é iniciado.
Construir a Lista de Funcionalidades
➔ Nesta fase é criada uma lista de funcionalidades do sistema,descrevendo e identificando a área de domínio de cada uma delas.
◆ As funcionalidades são importantes para o processo porque cadauma é uma pequena tarefa que precisa ser implementada aoprojeto.
➔ Os itens de funcionalidade não devem levar mais de duas semanas paraserem concluídos e são ordenados na lista por ordem de prioridade nodesenvolvimento.
➔ Por exemplo, uma lista de funcionalidades pode conter os seguintesitens: “validar a senha do usuário”, “liberar o login” e “gerar relatóriode vendas”.
Planejar por Funcionalidade
➔ De acordo com a lista de funcionalidades é feito o planejamento dedesenvolvimento delas.
➔ Para cada funcionalidade são designados programadores-chefeque ficarão responsáveis por algumas classes ou códigos.
➔ A partir disso são formadas as equipes de planejamento e cadaintegrante da equipe é encarregado de uma parte do projeto.
Detalhar por Funcionalidade
➔ Assim como na primeira fase, nessa etapa é criada umamodelagem com as funcionalidades a seremdesenvolvidas.
◆ A diferença dessa modelagem é que o programadorchefe a cria de acordo com uma funcionalidadeespecífica e a divide em classes, métodos e atributos.
➔ Quando finalizada, a funcionalidade passa por testagens daequipe desenvolvedora.
Construir por Funcionalidade
➔ Após a modelagem passar por diversos testes, o códigocomeça a ser implementado no sistema. Dessa forma, asfuncionalidades são incorporadas e já podem ser colocadas emprática.
◆ Efetivado o código, ele é escrito e essa funcionalidade éconcluída.
➔ Fazem parte dessa fase a implementação das regras denegócio das classes, a inspeção do código, a condução dostestes unitários e o release da funcionalidade.