Escolar Documentos
Profissional Documentos
Cultura Documentos
Desenvolvimento de Software
Aula 05
Feature Driven Development (FDD)
Objetivos Específicos
• Compreender os conceitos relacionados com o desenvolvimento guiado por
funcionalidade, ou Feature Driven Development(FDD).
Temas
Introdução
1 Feature Driven Development (FDD)
Considerações finais
Referências
Professor Autor
Everton Michels
Gestão de Processos Ágeis de Desenvolvimento de Software
Introdução
Nesta aula, abordaremos o tema Feature Driven Development(FDD), ou desenvolvimento
guiado por funcionalidade. Primeiramente, veremos um breve histórico do FDD e em que
ponto ele se encontra com o “Manifesto ágil”.
Logo após, abordaremos os papéis da equipe para o FDD e quais as suas funções.
Por fim, veremos quais são as práticas fundamentais que o FDD preconiza para garantir
a melhor qualidade do produto e do processo.
Para melhor contemplar todos os conceitos do FDD, dividimos a aula em 4 tópicos que
serão abordados a seguir: funcionalidade, equipe, processo e práticas.
1.1 Funcionalidade
Para o FDD, feature é uma funcionalidade pequena. A feature deve gerar valor para o
cliente no seu ambiente de negócio e não poderá ocupar mais do que uma iteração, logo,
não deverá ultrapassar 80 horas, ou 2 semanas, de desenvolvimento. No entanto, com base
nos relatos, as features não demoram mais do que algumas horas para serem desenvolvidas
(PRIKLADNICKI; WILLI; MILANI, 2014).
Plano de
Realizar
recepção
recepção
criado
Event-Driven Process Chain (EPC)
Como mostra a Figura 1, é feita uma decomposição dos processos em 3 níveis menores.
No nível mais baixo, é possível destacar as tarefas do processo- a automatização dessas tarefas
é mais usual e facilitada, e é nesse ponto que o FDD atua de forma mais eficiente.
No FDD, existe uma abreviatura que fornece a base para a escrita de funcionalidades.
Essa abreviatura é conhecida por ARO, a qual significa: Ação, Resultado e Objeto. Com base
nesse conceito, são criadas ou elaboradas as funcionalidades, facilitando assim tanto a escrita
quanto a leitura, além de auxiliar na alocação das responsabilidades e no estabelecimento de
alguns parâmetros para as operações (PRIKLADNICKI; WILLI; MILANI, 2014).
Na prática, também vemos as empresas inverterem a sequência das letras ARO para
AOR na construção das features. Embora não seja o adequado ou sugerido pelo método, na
prática essa inversão também se mostra funcional (PRIKLADNICKI; WILLI; MILANI, 2014).
Prikladnicki, Willi e Milani explicitam alguns motivos pelos quais os clientes classificam
as funcionalidades como boas:
• Você pode escrever um teste de aceitação para cada uma delas (PRIKLADNICKI; WILLI;
MILANI, 2014, p. 70).
Para os autores, o nível de detalhe de uma funcionalidade pode ser identificado pela
resposta às seguintes situações:
• O testador deve se sentir seguro para escrever um teste que prove que a funcionalidade
funciona (PRIKLADNICKI; WILLI; MILANI, 2014, p. 70).
1.2 Equipe
Para o FDD, a equipe é o ponto fundamental que sustenta e dá a forma final ao produto
que será entregue pelo projeto. A equipe é quem faz acontecer, por meio de processos bem
estabelecidos ou não, principalmente pela interação entre pessoas, processos e tecnologias,
abordando tudo isso de forma sistêmica (PRIKLADNICKI; WILLI; MILANI, 2014).
Além destes, existem ainda os papéis de apoio, que, embora não façam parte da estrutura
principal, são peças fundamentais para o desenvolvimento dos projetos (PRIKLADNICKI;
WILLI; MILANI, 2014):
Testadores – são os responsáveis pela qualidade final do produto por meio de testes,
sejam eles de integração, aceitação ou regressão.
Escritores técnicos – são os responsáveis pela escrita tanto dos manuais do produto
quanto dos materiais de treinamento do mesmo, podendo ou não obter auxílio de profissionais
desse ramo.
Agora que vimos todos os papéis para o desenvolvimento de software segundo o FDD, o
próximo passo é conhecer o processo. Vamos ao próximo tópico.
1.3 Processo
O FDD é baseado em 5 processos principais, os quais estão distribuídos em 2 grandes
fases. A figura 2 detalha essas 2 fases e esses 5 processos, as quais compõem o ciclo de vida
do FDD.
Requisitos
Inicialização
Mais forma que conteúdo Desenvolver Construir a Planejar
1 um modelo 2 lista de 3 por
abrangente funcionalidades funcionalidades
Plano de desenvolvimento
Construção
Modelo do
domínio
Progresso
Detalhar por Construir por
funcionalidade funcionalidade
Produtos
Pacotes de trabalho
Conforme apresentado na figura 2, podemos ver as duas fases do método, são elas:
Inicialização – Esta fase tem como objetivos principais o entendimento geral do projeto,
por meio de uma visão genérica do que irá entregar e das suas funcionalidades, bem como a
elaboração do plano inicial de como serão entregues tais funcionalidades ao longo do tempo.
Dura de 2 a 4 semanas, dependendo do tamanho do projeto. Em outros métodos, essa fase
pode ser denominada como “iteração 0 (zero)”. Essa fase se inicia geralmente antes do início
do desenvolvimento, para o fornecedor ter claro o que deverá ser feito, para daí tomar uma
decisão de prosseguir ou não com o projeto.
Tem por objetivo a criação de um modelo abrangente de requisitos, para sua posterior
análise e síntese. Neste processo, os profissionais mais envolvidos são especialistas do domínio
do negócio, desenvolvedores e um modelador de objetos na figura de arquiteto-líder.
A função dos especialistas de domínio é realizar estudos com a equipe, a fim de melhor
compreender e detalhar o escopo do sistema e o contexto onde está inserido, seja para
obter o conhecimento tácito – que está nas mentes das pessoas -, seja para socializar o
conhecimento explícito – que é aquele distribuído por meio de documentos ou bases de
dados (PRIKLADNICKI; WILLI; MILANI, 2014). Assim, são realizados eventos para detalhar o
domínio de negócio, para compreender melhor cada área que será modelada. Também são
criados grupos menores de especialistas dos negócios e desenvolvedores, os quais detalharão
cada domínio para que as partes gerem um todo de forma sistêmica.
Este processo contempla duas atividades, e seus devidos papéis, são elas:
Segundo Prikladnicki, Willi e Milani (2014, p. 80), a lista de funcionalidades pode ser
categorizada em 3 níveis: área de negócio, atividades de negócio e passos da atividade de
negócio.
Prikladnicki, Willi e Milani (2014, p. 81) explicitam também que existe uma nomenclatura
para cada nível de funcionalidade:
Por fim, é importante ressaltar que este processo não tem o objetivo de priorizar as
funcionalidades nem mesmo categorizá-las se são necessárias ou desejáveis.
Inspeção de código
Inspeção desenho
Desenvolvimento
Funcionalidade
Estudo dirigido
Promoção
Atividade
Desenho
Área
P.L
A’rea
A1 Ativ. 1.1 F.1.1.1 AB dd/mm dd/mm dd/mm dd/mm dd/mm dd/mm
A equipe tem a possibilidade de definir ou não as datas dos marcos. Pode trabalhar
apenas com as datas das iterações ou das entregas das atividades de negócio. Além disso,
diferentemente de outros métodos ágeis, o FDD não estabelece um time box para uma
iteração. Este também fica a critério da equipe em conjunto com gerente do projeto e gerente
do desenvolvimento, que definem a melhor opção para cada equipe (o time box comum são
2 semanas) (PRIKLADNICKI; WILLI; MILANI, 2014).
Assim, neste processo poderão ser gerados alguns diagramas definidos pela Unified
Modeling Language (UML), como o diagrama de sequência, de máquina de estado, entre
outros. Além disso, inspeções ou reuniões para revisar funcionalidades geradas também
poderão ocorrer a fim de garantir maior qualidade por meio da detecção antecipada de
problemas.
Neste processo se dará a execução do que foi detalhado no processo anterior. Aqui
os proprietários de classes irão desenvolver suas respectivas classes para que atendam às
funcionalidades requisitadas. O código implementado passará pelos testes, sejam eles
unitários, funcionais, de comportamento ou outros, e pela inspeção, determinada pelo
programador-líder. Após a inspeção, o código é levado à compilação, também chamada de
build.
Desenvolvimento por funcionalidades – Para o FDD, faz muito sentido o projeto ser
direcionado por funcionalidades, já que são elas que o cliente compra e utiliza. É por meio
delas que o cliente enxergará o valor, entenderá os termos e compreenderá o progresso,
além de poder facilmente priorizá-las. Somado a isso tudo, fica mais fácil os testes funcionais,
pois o resultado será 0 ou 1, ou se funciona ou não.
Inspeções – A inspeção faz parte do FDD tanto no processo DPF, que inspeciona o desenho
das features, quanto no processo CPF, que inspeciona o código gerado. Enquanto os testes
se concentram nos estágios finais e detectam apenas os sintomas do defeito, as inspeções já
atuam no início do desenvolvimento e são capazes de detectar não só os sintomas do defeito,
mas também a sua causa, além de detectar mais defeitos e de forma antecipada, o que gera
benefícios para o cronograma do projeto. A inspeção também permite o compartilhamento
de conhecimento, no que tange às melhores práticas, entre os desenvolvedores.
Montagens (builds) frequentes – A compilação frequente, seja ela qual for, com as
funcionalidades desenvolvidas até o momento ajuda a identificar erros de integração de
forma precoce, além de ter o que disponibilizar ao cliente. Além disso, é um bom momento
para os documentos serem gerados, bem como para realizar auditorias, testes de integração
e regressão.
Gestão de configuração – Para que haja um melhor versionamento e para que este não
gere problemas na versão atual, este trabalho é feito em um ambiente diferente do utilizado
em produção, justamente para que não ocasione problemas.
Considerações finais
Nesta aula, vimos primeiramente um breve resumo da história do FDD, quando surgiu,
quem o desenvolveu e onde foi desenvolvido.
Por fim, apresentamos as práticas fundamentais de que FDD faz uso para que as
funcionalidades sejam devidamente desenvolvidas, inspecionadas, testadas, compiladas,
acompanhadas e entregues ao cliente, fornecendo e gerando valor.
Referências
PRIKLADNICKI, R.; WILLI, R.; MILANI, F. Métodos ágeis para desenvolvimento de software.
Porto Alegre: Bookman, 2014.