Please enable JavaScript.
Coggle requires JavaScript to display documents.
Aula 10 - Coggle Diagram
Aula 10
Feature Driven Development
Foi desenvolvido por Peter Coad e Jeff De Luca e publicado em 1999
no livro “Java Modeling in Color with UML”.
I. Propõe um equilíbrio entre filosofias tradicionais e
ágeis
II. É prático para o trabalho com projetos iniciais, com
grandes equipes, ou projetos com codificações já
existentes.
III. Lema do FDD: “Resultados frequentes e
funcionais”
Características
● 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.
Premissas
● Desenvolvimento por funcionalidades;
○ Com base na lista de funcionalidades, deve-se
planejar por funcionalidade, mas este
planejamento deve ser incremental.
Um projeto que segue a metodologia FDD deve ser estruturado de
acordo com as seguintes premissas:
● 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.
Papéis
Gerente de Projeto (Project Manager): O Gerente de Projeto é responsável por supervisionar todo o processo de desenvolvimento. Ele coordena as atividades da equipe, gerencia recursos, elabora planos de projeto, controla prazos e assegura que o projeto esteja progredindo conforme o planejado.
Arquiteto Chefe (Chief Architect): O Arquiteto Chefe é responsável por definir a estrutura geral do sistema. Ele trabalha na identificação de componentes-chave, define padrões de design e garante que a arquitetura do sistema seja robusta, escalável e eficiente. O Arquiteto Chefe também lidera a equipe técnica na implementação desses padrões.
Gerente de Lista de Funcionalidades (Feature List Manager): O Gerente de Lista de Funcionalidades é encarregado de criar e manter a lista de funcionalidades do sistema. Ele trabalha em estreita colaboração com os clientes e as partes interessadas para entender os requisitos do sistema e decompor esses requisitos em funcionalidades menores e mais gerenciáveis. O Gerente de Lista de Funcionalidades também prioriza as funcionalidades com base nas necessidades do cliente.
Líder Técnico (Technical Lead): O Líder Técnico é responsável por guiar a equipe de desenvolvimento na implementação das funcionalidades. Ele supervisiona os desenvolvedores, garante que as melhores práticas de codificação sejam seguidas, resolve problemas técnicos e contribui para o design e a arquitetura do sistema. O Líder Técnico também realiza revisões de código para manter a qualidade do software.
Desenvolvedor de Domínio (Domain Expert): O Desenvolvedor de Domínio é um especialista no domínio do problema, ou seja, ele possui um profundo conhecimento sobre o negócio ou o setor para o qual o software está sendo desenvolvido. O Desenvolvedor de Domínio trabalha em estreita colaboração com os clientes e a equipe para garantir que as funcionalidades desenvolvidas atendam às necessidades do usuário final e estejam alinhadas com as práticas do setor.
Fases e
Processos do
FDD
Fase de Desenvolvimento da Lista de Funcionalidades (Develop Overall Model)
Nesta fase inicial, a equipe de desenvolvimento trabalha em estreita colaboração com os clientes e outras partes interessadas para criar uma lista abrangente de funcionalidades que o sistema deve incluir. Essa lista é uma visão geral das funcionalidades que o software precisa oferecer para atender aos requisitos do cliente. Durante esta fase, os processos incluem:
Desenvolver Lista de Funcionalidades: Identificar e documentar todas as funcionalidades necessárias com base nas necessidades do cliente e nas informações coletadas durante as interações com os stakeholders.
Priorizar Funcionalidades: Avaliar e classificar as funcionalidades de acordo com sua importância e urgência. Isso ajuda a equipe a determinar a ordem em que as funcionalidades serão implementadas durante o desenvolvimento.
Fase de Projeto por Funcionalidade (Build Feature List):
Nesta fase, as funcionalidades identificadas na fase anterior são atribuídas a equipes de desenvolvimento específicas para serem implementadas. Cada equipe é responsável por projetar, implementar, testar e entregar uma ou mais funcionalidades do sistema. Durante esta fase, os processos incluem:
Projeto de Funcionalidade: Cada equipe realiza um processo de design orientado a objetos para criar modelos de classes que detalham a estrutura e o comportamento da funcionalidade a ser implementada.
Construção de Lista de Funcionalidades: As funcionalidades são agrupadas e atribuídas às equipes de acordo com a capacidade e a especialização dos desenvolvedores. Cada equipe é responsável por desenvolver e entregar as funcionalidades atribuídas.
Processos
Desenvolver Lista de Funcionalidades (Develop Overall Model):
Neste processo, a equipe de desenvolvimento trabalha em colaboração com os clientes e stakeholders para identificar e elaborar uma lista completa de funcionalidades do sistema. Isso envolve compreender as necessidades dos usuários finais e criar uma lista detalhada de funcionalidades que o sistema deve oferecer.
Construir Lista de Funcionalidades (Build Feature List):
Neste processo, as funcionalidades são atribuídas a equipes de desenvolvimento específicas. Cada equipe é responsável por projetar, implementar, testar e entregar uma ou mais funcionalidades. As funcionalidades são agrupadas e atribuídas às equipes com base na especialização e capacidade dos membros da equipe.
Projeto por Funcionalidade (Design by Feature):
Neste processo, as equipes de desenvolvimento trabalham nas funcionalidades atribuídas a elas. Elas seguem um processo de design orientado a objetos para criar modelos de classes que formam a base para a implementação das funcionalidades. O design é detalhado e focado em implementar cada funcionalidade de forma eficiente e eficaz.
Construção por Funcionalidade (Build by Feature):
Neste processo, as funcionalidades são implementadas com base nos modelos de classes criados na fase de projeto por funcionalidade. Cada funcionalidade é desenvolvida, testada e integrada ao sistema principal. A implementação é realizada de maneira iterativa e incremental, com foco na entrega contínua de funcionalidades operacionais.
Inspeção (Client Inspection):
Neste processo, as funcionalidades implementadas são revisadas pelos clientes ou pelas partes interessadas para garantir que atendam às expectativas e requisitos. Qualquer ajuste ou correção necessário é identificado e implementado para garantir que as funcionalidades estejam alinhadas com as necessidades do usuário final.
O FDD é composto por cinco etapas, e é indicado que
cada iteração siga o padrão de etapas chamado de
ETVX, oriundo de:
Especificação (E): Nesta etapa, o problema é claramente definido e descrito em detalhes. É importante identificar todas as informações relevantes sobre o problema e entender completamente o que precisa ser resolvido. A especificação envolve coletar dados, analisar requisitos e definir claramente o escopo do problema.
Tentativa (T): Nesta fase, são geradas várias soluções ou abordagens para resolver o problema especificado. Os profissionais tentam diversas alternativas para encontrar a melhor solução. Durante esta etapa, a criatividade e a inovação são incentivadas para explorar diferentes caminhos e ideias.
Verificação (V): Após gerar várias soluções na etapa de tentativa, essas soluções são avaliadas e comparadas. A verificação envolve analisar as soluções propostas em relação aos critérios definidos durante a especificação do problema. As soluções são avaliadas quanto à viabilidade, eficácia, eficiência e outros critérios relevantes para determinar qual delas é a melhor opção.
Execução (X): Nesta última etapa, a solução escolhida na etapa de verificação é implementada. Isso envolve a aplicação prática da solução para resolver o problema. Durante a execução, é importante monitorar o progresso para garantir que a solução esteja funcionando conforme o esperado e fazer ajustes, se necessário.