Please enable JavaScript.
Coggle requires JavaScript to display documents.
FDD - Feature Driven Development - Coggle Diagram
FDD - Feature Driven Development
o que é:
desenvolvimento guiado a
funcionalidades, seu principal objetivo é
entregar ao cliente um software
funcional em tempo hábil, seguindo o
modelo iterativo e incremental do
processo de desenvolvimento de
software.
características:
Modelagem de Domínio: O FDD começa com a criação de um modelo de domínio que representa os principais objetos e suas relações no sistema.
Desenvolvimento por Funcionalidades: O desenvolvimento é dividido em funcionalidades distintas, com equipes responsáveis por desenvolver cada funcionalidade.
Inspeções Regulares: Inspeções regulares do progresso são realizadas para garantir a qualidade e o alinhamento com os objetivos do projeto.
Listas de Funcionalidades (Feature Lists): As funcionalidades a serem desenvolvidas são listadas e priorizadas com base nas necessidades do cliente e na viabilidade técnica.
Iterações Curtas: O FDD utiliza iterações curtas, normalmente de duas semanas, para desenvolver funcionalidades específicas.
Liderança por Características: As equipes são lideradas com base nas características ou funcionalidades a serem desenvolvidas, promovendo uma abordagem centrada em resultados.
Desenvolvimento Orientado a Objetos: O FDD é fortemente baseado em programação orientada a objetos, utilizando conceitos como encapsulamento, herança e polimorfismo.
Padrões de Desenvolvimento: O FDD promove o uso de padrões de desenvolvimento para garantir consistência e qualidade no código.
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
● Tarefa (Task),
é composto por uma lista
com as tarefas que deverão
ser realizadas
● Verificação (Verification) e
especifica tipos de
avaliações (internas e
externas) e inspeções de
projeto e código
● Saída (Exit).
especifica os critérios de
saída, definindo os produtos
tangíveis
papéis:
No FDD, uma pessoa pode
desempenhar mais de um papel e
um papel pode ser desempenhado
por mais de uma pessoa.
O FDD possui 5 papéis principais, são eles:
Gerente de Projeto; É o líder administrativo e financeiro do projeto: tem a palavra final no que se trata de escopo,
cronograma e recursos do projeto.
Gerente de Desenvolvimento; É o líder nas atividades diárias do desenvolvimento. É responsável por resolver qualquer tipo de
conflito que venha a ocorrer dentro da equipe.
Arquiteto-chefe; É responsável pela modelagem do projeto. Deve auxiliar a equipe de desenvolvedores e
contribuir na construção do software.
Proprietários de código/classe (Desenvolvedores); São os responsáveis pela modelagem e desenvolvimento de novas funcionalidades de um
software. (programadores-chefe)
Especialistas do Domínio (negócio).: Pode ser qualquer pessoa que tenha o melhor conhecimento sobre o software em
particular, e pode ajudar as Equipes a entendê-lo.
fases:
:
No FDD, o planejamento é realizado por processos, onde o
conjunto de processos se divide em duas fases:
Concepção e 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).
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
1. Desenvolver um Modelo Abrangente
➔ O primeiro momento é de conhecer para analisar o sistema e o
contexto em que ele está inserido.
◆ A partir disso são estudados os domínios do sistema e um modelo
geral é desenvolvido com base nesses estudos.
➔ Criado o modelo geral, pequenas equipes são responsáveis por criar
uma modelagem superficial para cada área de domínio do sistema.
◆ Cada modelo criado é revisado por outros membros do projeto, que
não fazem parte da equipe que criou o modelo, a fim de escolher o
melhor modelo de domínio para cada área.
➔ Assim, ao final do processo os modelos escolhidos são unificados no
modelo geral do domínio do sistema e o trabalho é iniciado.
2.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
cada uma é uma pequena tarefa que precisa ser implementada
ao projeto.
➔ Os itens de funcionalidade não devem levar mais de duas semanas
para serem concluídos e são ordenados na lista por ordem de
prioridade no desenvolvimento.
➔ Por exemplo, uma lista de funcionalidades pode conter os seguintes
itens: “validar a senha do usuário”, “liberar o login” e “gerar relatório de
vendas”.
3.Planejar por Funcionalidade
➔ De acordo com a lista de funcionalidades é feito o planejamento de
desenvolvimento delas.
➔ Para cada funcionalidade são designados programadores-chefe
que ficarão responsáveis por algumas classes ou códigos.
➔ A partir disso são formadas as equipes de planejamento e cada
integrante da equipe é encarregado de uma parte do projeto.
4.Detalhar por Funcionalidade
➔ Assim como na primeira fase, nessa etapa é criada uma
modelagem com as funcionalidades a serem
desenvolvidas.
◆ A diferença dessa modelagem é que o programador
chefe a cria de acordo com uma funcionalidade
específica e a divide em classes, métodos e atributos.
➔ Quando finalizada, a funcionalidade passa por testagens da
equipe desenvolvedora.
5.Construir por Funcionalidade
➔ Após a modelagem passar por diversos testes, o código
começa a ser implementado no sistema. Dessa forma, as
funcionalidades são incorporadas e já podem ser colocadas
em prática.
◆ Efetivado o código, ele é escrito e essa funcionalidade é
concluída.
➔ Fazem parte dessa fase a implementação das regras de
negócio das classes, a inspeção do código, a condução dos
testes unitários e o release da funcionalidade.