74
ESCOLA SUPERIOR ABERTA DO BRASIL ESAB CURSO DE ENGENHARIA DE SISTEMAS JORGE LUIS BUBLITZ DESENVOLVIMENTO ÁGIL DIRIGIDO A FUNCIONALIDADES CUIABÁ MT 2009

TCC FDD Jorge Bublitz

Embed Size (px)

DESCRIPTION

Trabalho de Conclusão de Curso (Monografia) do Curso de Pós-Graduação em Engenharia de Sistemas

Citation preview

Page 1: TCC FDD Jorge Bublitz

ESCOLA SUPERIOR ABERTA DO BRASIL – ESAB

CURSO DE ENGENHARIA DE SISTEMAS

JORGE LUIS BUBLITZ

DESENVOLVIMENTO ÁGIL DIRIGIDO A FUNCIONALIDADES

CUIABÁ – MT 2009

Page 2: TCC FDD Jorge Bublitz

JORGE LUIS BUBLITZ

DESENVOLVIMENTO ÁGIL DIRIGIDO A FUNCIONALIDADES

Trabalho de Conclusão de Curso de Pós-Graduação Latu Sensu em Engenharia de Sistemas apresentado a ESAB – Escola Superior Aberta do Brasil sob orientação da Profa. Me. Beatriz Christo Gobbi.

CUIABÁ – MT 2009

Page 3: TCC FDD Jorge Bublitz

JORGE LUIS BUBLITZ

DESENVOLVIMENTO ÁGIL DIRIGIDO A FUNCIONALIDADES

Aprovado em __ de __________ de 2009. _________________________________ _________________________________ _________________________________

CUIABÁ – MT 2009

Page 4: TCC FDD Jorge Bublitz

Dedico este trabalho a todas as pessoas

que sempre me apoiaram e me apóiam.

Minha esposa pelo esforço e paciência

durante essa fase de estudos.

Ao Prof. Me. Hélio Maluf, que despertou

em mim o gosto pela Matemática e conse-

quentemente pela Informática.

Page 5: TCC FDD Jorge Bublitz

AGRADECIMENTOS

Agradeço a Deus por tudo.

Aos meus pais pela oportunidade que me

deram de estudar e pelo exemplo dado.

Ao Adail Heptaman, amigo e mestre FDD.

Page 6: TCC FDD Jorge Bublitz

“Antes de partir para a guerra, é de suma

importância atacar a estratégia inimiga”

(Sun Tzu)

Page 7: TCC FDD Jorge Bublitz

RESUMO

O estudo tem como objetivo verificar e comprovar se uma metodologia ágil de desenvolvimento de software trás realmente agilidade ao processo de produção. Para tal foi realizada uma pesquisa através de estudo de caso: a equipe desenvolveu um software utilizando a metodologia de Desenvolvimento Dirigido a Funcionalidades, sendo este o primeiro projeto que se utilizou essa nova metodologia. Até então utilizávamos a técnica de estimativa do prazo de desenvolvimento por pontos de casos de uso e o desenvolvimento em cascata. Normalmente nossas estimativas de prazo de entrega não se cumpriam e era muito difícil nos adaptar e responder às mudanças de requisitos que ocorriam durante o desenvolvimento. Verificou-se que alguns membros da equipe tinham dúvidas sobre como aplicar a metodologia, apesar de terem passado por um treinamento prévio, além de certa resistência à mudança de metodologia. Através de observações, anotamos a produtividade e o tempo de desenvolvimento e o comparamos com a estimativa da técnica anterior. Concluiu-se que a metodologia realmente cumpre o que propõe, pois mesmo com mudanças nos requisitos do software, o prazo final de entrega foi cumprido, bem como a capacidade da equipe de se adequar as mudanças.

Page 8: TCC FDD Jorge Bublitz

LISTA DE FIGURAS

Figura 1 - The Extreme Chaos Report (2001) ........................................................... 16

Figura 2 - Modelo em Cascata .................................................................................. 17

Figura 3 – As Fases e os Processos da FDD............................................................ 35

Figura 4 - Desenvolver um Modelo Abrangente ........................................................ 36

Figura 5 - Construir a Lista de Funcionalidades ........................................................ 40

Figura 6 - Planejar por Funcionalidade ..................................................................... 43

Figura 7 - Detalhar por Funcionalidade ..................................................................... 47

Figura 8 - Construir por Funcionalidade .................................................................... 52

Figura 9 - Medindo o Progresso ................................................................................ 54

Figura 10 - Quadro de Progresso .............................................................................. 55

Figura 11 - Diferenças entre as metodologias ........................................................... 56

Figura 12 - Modelo Abrangente ................................................................................. 61

Figura 13 - Modelo Abrangente Final ........................................................................ 62

Figura 14 - Lista de Funcionalidades ........................................................................ 63

Figura 15 - Diagrama de Caso de Uso ...................................................................... 63

Figura 16 - Atividades e seus Programadores-Líderes ............................................. 65

Figura 17 – A nova Lista de Funcionalidades ........................................................... 67

Figura 18 - Quadro de Desenvolvimento ................................................................... 68

Figura 19 - Plano de Desenvolvimento ..................................................................... 69

Figura 20 - FddViewer e o Parking Lot ...................................................................... 71

Page 9: TCC FDD Jorge Bublitz

LISTA DE TABELAS

Tabela 1 - Peso dos Atores ....................................................................................... 25

Tabela 2 - Peso dos Fatores Técnicos ...................................................................... 26

Tabela 3 - Peso dos Fatores Ambientais .................................................................. 27

Tabela 4 - Comparação entre as Metodologias ......................................................... 57

Tabela 5 - Classes e seus Proprietários .................................................................... 65

Tabela 6 - Escala de 5 Pontos da FDD ..................................................................... 67

Page 10: TCC FDD Jorge Bublitz

LISTA DE ABREVIATURA E SIGLAS

API Application Programming Interface

CMM Capability Maturity Model

CMMI Capability Maturity Model Integration

EF Environmental Factor

FASE Formulário de Alteração da Situação do Eleitor

FDD Feature-Driven Development

FTP File Transfer Protocol

IBGE Instituto Brasileiro de Geografia e Estatística

OOSE Object-Oriented Software Engineering

RAE Requerimento de Alistamento Eleitoral

RUP Rational Unified Process

TCF Technical Complexity Factor

TCP/IP Transmission Control Protocol / Internet Protocol

UAW Unadjusted Actor Weight

UCP Use Case Points

UUCP Unadjusted Use Case Points

UUCW Unadjusted Use Case Weight

UML Unified Modeling Language

Page 11: TCC FDD Jorge Bublitz

SUMÁRIO

1. INTRODUÇÃO ................................................................................................ 13

2. FUNDAMENTAÇÃO TEÓRICA ...................................................................... 15

2.1 METODOLOGIAS DE DESENVOLVIMENTO ................................................. 15

2.2 MODELO EM CASCATA ................................................................................. 17

2.3 METODOLOGIA ORIENTADA A OBJETOS ................................................... 18

2.3.1 Conceitos Fundamentais de Orientação a Objetos ................................. 19

2.3.2 UML Em Cores ............................................................................................ 21

2.4 ESTIMATIVA PELO MÉTODO DE CASOS DE USO ...................................... 24

2.4.1 Calculando o Peso dos Atores do Sistema ............................................. 25

2.4.2 Calculando o Peso dos Casos de Uso ..................................................... 25

2.4.3 Calculando Fatores de Ajuste ................................................................... 26

2.4.4 Fatores Técnicos ........................................................................................ 26

2.4.5 Fatores Ambientais .................................................................................... 27

2.4.6 Calculando o Porte do Sistema................................................................. 28

2.5 METODOLOGIAS ÁGEIS ............................................................................... 29

2.6 DESENVOLVIMENTO DIRIGIDO A FUNCIONALIDADES ............................. 31

2.6.1 As Práticas da FDD .................................................................................... 32

2.6.2 Os papéis da FDD....................................................................................... 33

2.6.3 Os Processos da FDD ................................................................................ 34

2.6.4 DMA – Desenvolver um Modelo Abrangente ........................................... 36

2.6.5 CLF – Construir a Lista de Funcionalidades ........................................... 39

2.6.6 PPF – Planejar por Funcionalidade .......................................................... 42

2.6.7 DPF – Detalhar por Funcionalidade .......................................................... 46

2.6.8 CPF – Construir por Funcionalidade ........................................................ 51

2.6.9 Medindo o Progresso do Desenvolvimento ............................................. 54

Page 12: TCC FDD Jorge Bublitz

2.7 COMPARANDO AS METODOLOGIAS ........................................................... 55

3. ESTUDO DE CASO ........................................................................................ 58

3.1 EQUIPE DO PROJETO ................................................................................... 59

3.2 EXECUÇÃO DO PROCESSO ......................................................................... 60

3.2.1 DMA - Desenvolver um Modelo Abrangente ............................................ 60

3.2.2 CLF - Construir a Lista de Funcionalidades ............................................ 62

3.2.3 PPF - Planejar por Funcionalidade ........................................................... 64

3.2.4 Estimativas ................................................................................................. 67

4. RESULTADOS ................................................................................................ 70

5. CONCLUSÃO ................................................................................................. 72

6. REFERÊNCIAS BIBLIOGRÁFICAS ............................................................... 74

Page 13: TCC FDD Jorge Bublitz

13

1. INTRODUÇÃO

Palavras-chave: Metodologia, Mudança, Agilidade.

Na computação, o desenvolvimento de software é o ato de elaborar e implementar

um sistema computacional, isto é, transformar a necessidade de um utilizador ou de

um mercado em um produto de software (BIRRELL, 1985).

Por ser uma atividade caótica em sua maior parte, o desenvolvimento de softwares

normalmente é um eterno ciclo "programar e depurar". O software é escrito sem um

planejamento claramente definido e o projeto do sistema é repleto de várias

decisões de curto prazo. Isso funciona muito bem se o sistema é pequeno - mas à

medida que o sistema cresce, torna-se cada vez mais difícil adicionar novos

recursos (funcionalidades) a ele.

Defeitos subsequentes se tornam cada vez mais dominantes e cada vez mais

difíceis de serem eliminados. Uma longa fase de testes e depuração depois que o

software está finalizado é um sinal típico de um sistema desse tipo.

Por ser uma atividade cujo tempo é muito difícil, praticamente impossível, de ser

estimada, a fase de testes entra em confronto direto com o cronograma planejado.

Uma das soluções para esses problemas é a adoção de uma metodologia. Com o

objetivo de torná-lo mais previsível e mais eficiente, as metodologias impõem

disciplinas rígidas ao desenvolvimento de software. Elas fazem isso através de

processos detalhados com uma forte ênfase em planejamento.

Um dos principais problemas é que se tem a noção que elas são verdadeiras

panacéias, o que não o são. Outro grande problema nas metodologias tradicionais é

que estas são extremamente burocráticas: há tanta coisa a se fazer para segui-las

que o todo o ritmo de desenvolvimento fica mais lento.

Page 14: TCC FDD Jorge Bublitz

14

Como uma reação a tais metodologias, um novo grupo delas surgiu nos últimos

anos. Durante algum tempo elas foram conhecidas como metodologias leves, mas

agora o termo mais aceito é Metodologias Ágeis.

Agilidade tornou-se então uma palavra quase que mágica quando se descreve uma

metodologia de software. Tudo é ágil. Uma equipe ágil é uma equipe esperta, capaz

de responder adequadamente às mudanças. Uma equipe ágil reconhece que o

software é desenvolvido por indivíduos trabalhando em equipes e que as

especialidades dessas pessoas e sua capacidade de colaborar estão no âmago do

sucesso do projeto.

Mas a adoção de uma metodologia ágil traz realmente agilidade a uma equipe de

desenvolvimento? E o que seria essa agilidade?

Trocar a metodologia tradicional utilizada, que bem ou mal, fornece documentação,

estimativa de prazo e consequentemente estimativa de custo, por uma metodologia

nova não seria arriscado, ou até mesmo irresponsável?

Que impactos teríamos na equipe e nos clientes?

Verificar e responder essas questões são os objetivos deste trabalho.

Adotaremos o Desenvolvimento Dirigido a Funcionalidades (FDD) em uma equipe

de desenvolvimento que até então sempre utilizou uma metodologia tradicional. A

equipe desenvolverá seu primeiro software utilizando a FDD.

Faremos a estimativa de prazo de entrega utilizando a metodologia de Pontos de

Casos de Uso. Assim poderemos comparar os resultados e verificar a produtividade

de cada desenvolvedor e da equipe como um todo.

Page 15: TCC FDD Jorge Bublitz

15

2. FUNDAMENTAÇÃO TEÓRICA

2.1 METODOLOGIAS DE DESENVOLVIMENTO

Metodologia de desenvolvimento de software pode ser considerada um conjunto de

normas utilizadas para estruturar, planejar e controlar o processo de

desenvolvimento de software. Uma grande variedade de metodologias tem surgido e

evoluído ao longo dos anos, cada uma com suas vantagens e desvantagens.

As metodologias foram originalmente propostas para colocar ordem no caos do

desenvolvimento de software. A história tem indicado que esses modelos

convencionais têm trazido certa dose de estrutura útil para o trabalho de engenharia

de software e tem fornecido um roteiro razoavelmente efetivo para as equipes de

desenvolvimento.

Entretanto, o trabalho de desenvolvimento de software e o produto que ele produz

permanecem no “Limite do Caos”, como é definida por Nogueira (2000, p.5):

O limite do caos é definido como um estado natural entre ordem e caos, um amplo compromisso entre estrutura e surpresa. O limite do caos pode ser visualizado como um estado instável, parcialmente estruturado (...). É instável porque é constantemente atraído para o caos ou para a ordem absoluta. Temos a tendência de pensar que ordem é o estado ideal da natureza. Isso pode ser um erro. A pesquisa (...) apóia a teoria de que operação fora do equilíbrio gera criatividade, processos auto-organizados e crescentes retornos. Ordem absoluta significa a ausência de variabilidade, o que poderia ser uma vantagem em ambientes imprevisíveis. A modificação ocorre quando existe alguma estrutura tal que a modificação pode ser organizada, mas não tão rígida que não possa ocorrer. Caos em excesso, por outro lado, pode tornar impossível a coordenação e coerência. A falta de estrutura nem sempre significa desordem.

Page 16: TCC FDD Jorge Bublitz

16

Com tudo isso há uma crescente procura por metodologias de desenvolvimento.

Entre os vários relatórios e depoimentos existentes, cito particularmente o Extreme

Chaos Report, produzido em 2001 pelo Standish Group, largamente utilizado e

conhecido (Figura 1).

Figura 1 - The Extreme Chaos Report (2001)

Fonte: Site Standish Group – www.standishgroup.com

Podemos ver neste gráfico que apenas 28% dos projetos de desenvolvimento de

software são concluídos com sucesso, dentro do prazo, custo e qualidade

esperados. Melhorou em relação ao relatório anterior, o “The Chaos Report” de 1994

que era de 16%, mas ainda estamos muito longe do poderíamos chamar de ideal.

De quem é a culpa desse cenário? Dos processos, das ferramentas, dos analistas,

dos desenvolvedores ou dos clientes? Ou é de todos? Ou de ninguém? “Nenhum

floco de neve em uma avalanche se sente responsável”, citando Stanislaw J. Lec

(1962), escritor polonês.

Page 17: TCC FDD Jorge Bublitz

17

2.2 MODELO EM CASCATA

Segundo Birrel (1985), o modelo clássico ou cascata foi proposto por Winston W.

Royce em 1970. Até meados da década de 1980 foi o único modelo com aceitação

geral. Esse modelo foi derivado de modelos de atividade de engenharia com o fim

de estabelecer ordem no desenvolvimento de grandes produtos de software.

Comparado com outros modelos de desenvolvimento, este é mais rígido e menos

administrativo.

Esse é um dos mais importantes modelos, e é referência para muitos outros

modelos, servindo de base para muitos projetos modernos. A versão original deste

modelo foi melhorada e retocada ao longo do tempo e continua sendo muito utilizado

hoje em dia. Neste modelo o desenvolvimento é visto como um fluir continuamente

para baixo, como uma cascata, através das fases de levantamento de requisitos,

projeto, implementação, testes e implantação (Figura 2).

Figura 2 - Modelo em Cascata

Grande parte do sucesso do modelo cascata está no fato dele ser orientado para

documentação. No entanto deve salientar-se que a documentação abrange mais do

que arquivo de texto, abrange representações gráficas e simulações.

Page 18: TCC FDD Jorge Bublitz

18

Os princípios básicos do modelo em cascata são:

1. O projeto é dividido em fases sequenciais, com algumas sobreposições entre

as fases;

2. A ênfase está no planejamento, horários, prazos, orçamentos e

implementação de um sistema inteiro;

3. Um controle rígido é mantido ao longo do ciclo de vida do projeto através da

utilização de uma vasta documentação escrita, bem como através da

aprovação formal de cada fase antes de começar a próxima.

Esse modelo de desenvolvimento apresenta os seguintes problemas:

1. Pressão do risco no tempo;

2. Custa muito consertar erros;

3. Cada etapa tem uma documentação que precisa ser aprovada para que se de

início a etapa seguinte;

4. Aumenta o risco de cancelamento do projeto; e

5. Esse approach1 tende a mascarar os riscos.

2.3 METODOLOGIA ORIENTADA A OBJETOS

Segundo Retamal (2009), a orientação a objetos é um paradigma de análise, projeto

e programação de sistemas de software baseado na composição e interação entre

diversas unidades de software chamadas de objetos.

A análise e projeto orientados a objetos têm como meta identificar o melhor conjunto

de objetos para descrever um sistema de software. O funcionamento deste sistema

se dá através do relacionamento e troca de mensagens entre estes objetos.

1 Do inglês: postura, política, método, abordagem, linha.

Page 19: TCC FDD Jorge Bublitz

19

2.3.1 Conceitos Fundamentais de Orientação a Objetos

Classe representa um conjunto de objetos com características afins. Uma

classe define o comportamento dos objetos, através de métodos, e quais

estados ele é capaz de manter, através de atributos. Exemplo de classe: Os

seres humanos.

Objeto é uma instância de uma classe. Um objeto é capaz de armazenar

estados através de seus atributos e reagir a mensagens enviadas a ele,

assim como se relacionar e enviar mensagens a outros objetos. Exemplo de

objetos da classe Humanos: João, José, Maria.

Atributos são os dados ou informações do objeto, basicamente a estrutura de

dados que vai representar a classe. Exemplos: Funcionário: nome,

endereço,telefone, CPF, ….; Carro: nome, marca, ano, cor, …; Livro: autor,

editora, ano.

Métodos definem as habilidades dos objetos. Bidu é uma instância da classe

Cachorro, portanto tem habilidade para latir, implementada através do método

deUmLatido(). Um método em uma classe é apenas uma definição. A ação só

ocorre quando o método é invocado através do objeto, no caso Bidu. Dentro

do programa, a utilização de um método deve afetar apenas um objeto em

particular; todos os cachorros podem latir, mas você quer que apenas Bidu dê

o latido. Normalmente, uma classe possui diversos métodos, que no caso da

classe Cachorro poderiam ser sente(), coma() e morda().

Mensagem é uma chamada a um objeto para invocar um de seus métodos,

ativando um comportamento descrito por sua classe. Também pode ser

direcionada diretamente a uma classe (através de uma invocação a um

método dinâmico).

Page 20: TCC FDD Jorge Bublitz

20

Sobrecarga é a utilização do mesmo nome para símbolos ou métodos com

operações ou funcionalidades distintas. Geralmente diferenciam-se os

métodos pela sua assinatura.

Herança (ou generalização) é o mecanismo pelo qual uma classe (sub-classe)

pode estender outra classe (super-classe), aproveitando seus

comportamentos (métodos) e estados possíveis (atributos). Há Herança

múltipla quando uma sub-classe possui mais de uma super-classe. Essa

relação é normalmente chamada de relação “é um”. Um exemplo de herança:

Mamífero é super-classe de Humano. Ou seja, um Humano é um mamífero.

Associação é o mecanismo pelo qual um objeto utiliza os recursos de outro.

Pode tratar-se de uma associação simples “usa um” ou de um acoplamento

“parte de”. Por exemplo: Um humano usa um telefone. A tecla “1″ é parte de

um telefone.

Encapsulamento consiste na separação de aspectos internos e externos de

um objeto. Este mecanismo é utilizado amplamente para impedir o acesso

direto ao estado de um objeto (seus atributos), disponibilizando externamente

apenas os métodos que alteram estes estados. Exemplo: você não precisa

conhecer os detalhes dos circuitos de um telefone para utilizá-lo. A carcaça

do telefone encapsula esses detalhes, provendo a você uma interface mais

amigável (os botões, o monofone e os sinais de tom).

Abstração é a habilidade de concentrar nos aspectos essenciais de um

contexto qualquer, ignorando características menos importantes ou

acidentais. Em modelagem orientada a objetos, uma classe é uma abstração

de entidades existentes no domínio do sistema de software.

Polimorfismo é o princípio pelo qual duas ou mais classes derivadas de uma

mesma superclasse podem invocar métodos que têm a mesma assinatura

(lista de parâmetros e retorno) mas comportamentos distintos, especializados

para cada classe derivada, usando para tanto uma referência a um objeto do

Page 21: TCC FDD Jorge Bublitz

21

tipo da superclasse. A decisão sobre qual o método que deve ser

selecionado, de acordo com o tipo da classe derivada, é tomada em tempo de

execução, através do mecanismo de ligação tardia. No caso de polimorfismo,

é necessário que os métodos tenham exatamente a mesma identificação,

sendo utilizado o mecanismo de redefinição de métodos. Esse mecanismo de

redefinição não deve ser confundido com o mecanismo de sobrecarga de

métodos.

Interface é um contrato entre a classe e o mundo externo. Quando uma

classe implementa uma interface, ela está comprometida a fornecer o

comportamento publicado pela interface.

Pacotes são referências para organização lógica de classes e interfaces.

2.3.2 UML Em Cores

Segundo Coad (1999), na busca de um padrão de construção de software Orientado

ao Objeto e sua representação, em 1994 Ivar Jacobson, Grady Booch e Jim

Rumbaugh realizaram o feito de unificarem essas idéias em uma única ferramenta, a

qual deram o nome inicial de Método Unificado. Em 1995 incluíram os métodos

OOSE e Objectory e em 1996 deram o nome de UML.

UML é uma ferramenta que nos auxilia na modelagem de sistemas, dos mais

simples aos mais complexos.

A finalidade da UML é proporcionar um padrão para preparação de planos de

arquitetura de projetos de sistemas, incluindo aspectos conceituais, como processos

de negócios e funções de sistema, além de itens concretos, como as classes

escritas em determinada linguagem de programação, esquemas de bancos de

dados e componentes de software reutilizáveis (BOOCH, RUMBAUGH e

JACOBSON, 1999).

Page 22: TCC FDD Jorge Bublitz

22

A UML em cores é um conjunto de padrões de quatro cores associadas aos

diagramas da UML (COAD, LEFEBVRE, DE LUCA, 1999).

A UML tipicamente identifica um estereótipo com um comentário entre colchetes ou

entre “<<” e “>>” para cada objeto.

As cores adicionam uma dimensão a mais ao diagrama, como se fossem camadas

extras de informação, aumentando a quantidade de conteúdo que podemos

expressar sem ocupar mais espaço. Mas isso não é novidade. Mesmo nos

diagramas Entidade-Relacionamento já se usava cores distintas para identificar

áreas afins naquele monte de tabelas. Por exemplo: financeiro em vermelho,

controle de estoque em azul, contabilidade em verde, etc.

Além de tornarem o modelo mais agradável de ver, as cores identificam

imediatamente o propósito de cada classe, oferecendo uma compreensão muito

maior sobre o negócio e as entidades participantes.

Ao longo de centenas de modelos domínio, tornou-se claro que quatro grandes

"tipos" de classes apareceu de novo e de novo - apenas nome diferente para se

adequar ao domínio.

Estas foram denominadas arquétipos2 (depois de muita discussão), que se destina a

transmitir que as classes de um determinado arquétipo seguirão mais ou menos a

mesma forma. Ou seja, os atributos, os métodos, as associações e as interfaces são

bastante semelhantes entre as classes de um determinado arquétipo.

Embora as cores reais variem, identificamos os arquétipos usando as quatro cores

básicas, em tons pastéis por serem mais suaves: rosa, amarelo, verde e azul. Outro

motivo é porque as “notinhas autocolantes” (Post-it) também são encontradas

nessas cores, o que facilita seu uso durante a modelagem inicial (RETAMAL, 2009).

2 arquétipo. s.m. 1 modelo ou padrão passível de ser reproduzido em simulacros ou objetos

semelhantes; 2 idéia que serve de base para a classificação dos objetos sensíveis; 3 Derivação: por extensão de sentido: qualquer modelo, tipo, paradigma. (Dic. Houaiss da Língua Portuguesa).

Page 23: TCC FDD Jorge Bublitz

23

Ao tentar classificar um dado domínio classe, tipicamente uma pergunta sobre a cor

padrão nesta ordem:

Momento-Intervalo Ele representa um momento ou intervalo de tempo. Representa algo que necessita ser registrado, por razões de negócio ou até mesmo legal, que ocorre em algum momento no tempo ou durante um intervalo de tempo. São atividades, eventos e serviços. Um momento-intervalo também pode ter “mi-detalhes”, ou seja, ser composto por pequenas etapas do evento total. Exemplos: Uma venda é algo que acontece num certo momento. Uma estada é o período de tempo que se fica hospedado em um hotel. Para identificar esse arquétipo usamos a cor rosa e o estereótipo <<moment-interval>>. Também se usa a sigla MI. Para os detalhes, usamos o estereótipo <<mi-detail>>.

Pessoa, Coisa, Lugar Algo concreto, inequivocamente identificável. Representa uma pessoa (física ou jurídica), um determinado local (endereço, casa, privado ou público) ou algum objeto, geralmente concreto. São entidades que devem ser registradas no sistema por desempenharem papéis nas atividades (momentos-intervalos). Uma mesma pessoa pode participar de eventos distintos através de papéis diferentes. Identificamos esse arquétipo com a cor verde e o estereótipo correspondente: <<party>>, <<thing>> ou <<place>>.

Papel É uma forma de participar em uma atividade. É a representação de um papel que é desempenhado por alguma pessoa, lugar ou coisa, em um determinado evento do negócio (momento-intervalo). É mais comumente aplicado a pessoas, mas é possível utilizá-lo com lugares e até mesmo com coisas. Um aeroporto pode desempenhar o papel de local de origem, destino ou escala de um vôo. Sua cor é o amarelo e o estereótipo é <<role>>.

Descrição É simplesmente um catálogo, que classifica como descrição ou "rótulos" um objeto. É como um item num catálogo, definindo as características de uma determinada coisa, lugar ou até mesmo pessoa (menos comum, mas possível). Usado para concentrar dados comuns a diversos objetos, possibilitando perguntas de negócio interessantes, como a quantidade de objetos de um determinado tipo. Aparece na cor azul (quase cinza, dependendo da ferramenta de modelagem) e usa-se o estereótipo <<description>>.

Por que é importante reconhecer o arquétipo de cada objeto? Um arquétipo já nos

diz muita coisa sobre um objeto, oferecendo características, funções e

relacionamentos que nos ajudam a definir melhor cada um sem, no entanto, nos

Page 24: TCC FDD Jorge Bublitz

24

forçar a seguir o modelo. Podemos ganhar bastante em tempo e precisão seguindo

as recomendações que os arquétipos nos oferecem.

A técnica também tornou mais fácil determinar aspectos do modelo de domínio – em

especial para recém-chegados à modelagem. Por exemplo, simplesmente olhando

primeiro para a cor rosa em um diagrama, é fácil reconhecer as classes mais

importantes para um determinado domínio.

2.4 ESTIMATIVA PELO MÉTODO DE CASOS DE USO

A análise de sistemas Orientados a Objetos já utiliza, comumente, os diagramas de

Casos de Uso (Use Cases) da UML para descrever as funcionalidades do sistema

de acordo com a forma de utilização por parte dos usuários.

A técnica de análise de dimensão por Casos de Uso foi criada para permitir que seja

possível estimar o tamanho do sistema ainda na fase de levantamento de Casos de

Uso, utilizando-se dos próprios documentos gerados nesta fase de análise como

subsídio para o cálculo dimensional.

A técnica de estimativa por Pontos de Caso de Uso foi proposta em 1993 por

KARNER, da Objectory (hoje, Rational Software). Ela baseia-se em dois métodos

bastante utilizados - o mecanismo de Pontos de Função e uma metodologia

conhecida como Mk II, uma adaptação da técnica de Pontos de Função, bastante

utilizada na Inglaterra.

A forma de lançar uma estimativa é o principal diferencial da métrica por Casos de

Uso: o método trata de estimar o tamanho de um sistema de acordo com o modo

como os usuários o utilizarão, a complexidade de ações requerida por cada tipo de

usuário e uma análise em alto nível dos passos necessários para a realização de

cada tarefa.

Page 25: TCC FDD Jorge Bublitz

25

2.4.1 Calculando o Peso dos Atores do Sistema

O primeiro passo no cálculo do sistema é classificar os atores envolvidos em cada

caso de uso, de forma a obter um somatório de pontos não-ajustado. A classificação

de atores utiliza a Tabela 1: o peso total dos atores do sistema (UAW) é calculado

pela soma dos produtos do número de atores de cada tipo pelo respectivo peso.

Tabela 1 - Peso dos Atores

Tipo de Ator Peso Descrição

Ator simples 1 Outro sistema acessado através de uma API de

programação

Ator médio 2 Outro sistema interagindo através de um protocolo de

comunicação, como TCP/IP ou FTP

Ator complexo 3 Um usuário interagindo através de uma interface gráfica

2.4.2 Calculando o Peso dos Casos de Uso

Uma vez calculado o peso dos atores do sistema, partimos para o cálculo do peso

dos casos de uso (UUCW):

1. Se o caso de uso for considerado simples - isto é, contiver uma interface com usuário simplificada e utilizar apenas uma entidade em um banco de dados - caso de uso é considerado fácil e tem peso 5.

2. Se o caso de uso envolve uma interface mais trabalhada e utiliza-se de duas ou mais entidades de banco de dados, ele é definido como médio e recebe um peso 10.

3. Se o caso de uso envolver 3 ou mais entidades em um banco de dados e contiver uma interface mais complexa, este recebe um peso de 15.

O peso total não ajustado (UUCP) é calculado pelo somatório entre os pesos de

atores e casos de uso:

UUCP = UAW + UUCW

Page 26: TCC FDD Jorge Bublitz

26

2.4.3 Calculando Fatores de Ajuste

O método de ajuste é constituído de duas partes - um cálculo de fatores técnicos,

cobrindo uma série de requisitos funcionais do sistema; e um cálculo de fatores de

ambiente, requisitos não-funcionais associados ao processo de desenvolvimento –

tais como experiência da equipe, motivação e estabilidade do projeto. Estes dois

fatores geram multiplicadores distintos, que devem ser aplicados ao peso total não-

ajustado (UUCP), calculado anteriormente.

Os dois modificadores utilizam-se de um mesmo mecanismo de pesos: para cada

requisito listado em suas tabelas, deve ser atribuído um valor que determina a

influência do requisito no sistema, variando entre 0 e 5 - sendo que o valor 0 indica

nenhuma influência, 3 indica influência moderada e 5 indica forte influência.

2.4.4 Fatores Técnicos

Utilizamos a Tabela 2 para calcular o fator de complexidade técnica do sistema

(TCF)

Tabela 2 - Peso dos Fatores Técnicos

Fator Requisito Peso

T1 Sistema Distribuído 2

T2 Tempo de Resposta 2

T3 Eficiência 1

T4 Processamento Complexo 1

T5 Código Reusável 1

T6 Facilidade de Instalação 0,5

T7 Facilidade de Uso 0,5

T8 Portabilidade 2

T9 Facilidade de Mudança 1

Page 27: TCC FDD Jorge Bublitz

27

T10 Concorrência 1

T11 Recursos de Segurança 1

T12 Acessível por Terceiros 1

T13 Requer Treinamento Especial 1

O cálculo do TCF é feito pela seguinte fórmula:

TCF = 0,6 + (0,01 x TFactor)

O valor TFactor é obtido pelo somatório dos níveis de influência atribuídos a cada

fator (T1 a T13) multiplicados pelo seu peso correspondente.

2.4.5 Fatores Ambientais

A Tabela 3 mostra os fatores ambientais previstos pela metodologia de Pontos de

Caso de Uso e seus pesos associados.

Tabela 3 - Peso dos Fatores Ambientais

Fator Descrição Peso

E1 Familiaridade com RUP ou outro processo formal 1,5

E2 Experiência com a aplicação em desenvolvimento 0,5

E3 Experiência em Orientação a Objetos 1

E4 Presença de analista experiente 0,5

E5 Motivação 1

E6 Requisitos estáveis 2

E7 Desenvolvedores em meio-expediente -1

E8 Linguagem de programação difícil 2

No caso dos Fatores Ambientais, o nível de influência indica o nível de

disponibilidade de cada recurso no decorrer do projeto: desta forma, determinar que

Page 28: TCC FDD Jorge Bublitz

28

um dado fator tem nível de influência alta (isto é, atribuir a ele o valor 5) significa

dizer que este fator está presente no projeto como um todo e influencia seu

desenvolvimento. Da mesma forma, atribuir um valor de influência zero (nenhuma

influência) a um fator indica que o mesmo não está presente no processo de

desenvolvimento.

A título de ilustração podemos dizer que, um grau de influência mínimo (0) atribuído

ao fator E3 indica uma equipe com total desconhecimento de Orientação a Objetos -

enquanto que o grau máximo (5) indica a disponibilidade de uma equipe experiente

neste paradigma de desenvolvimento.

O fator ambiental (EF) é calculado pela seguinte fórmula:

EF = 1,4 + (-0,03 x EFactor)

Onde o valor de EFactor é dado pela soma dos produtos entre o peso de cada fator

(E1 a E8) e seu grau de influência atribuído, como no cálculo da variável TFactor,

abordada anteriormente.

Note que a maioria dos fatores ambientais tendem a diminuir o valor em Pontos de

Caso de Uso do sistema: isto reflete o ganho de velocidade proporcionado pelos

diversos fatores ambientais descritos na tabela, quando os mesmos encontram-se

disponíveis.

2.4.6 Calculando o Porte do Sistema

Finalmente, podemos calcular o valor total do sistema em Use Case Points (UCP)

utilizando-se da seguinte fórmula:

UCP = UUCP x TCF x EF

Page 29: TCC FDD Jorge Bublitz

29

Segundo Karner (1993), podemos estimar o tempo necessário para o

desenvolvimento do projeto calculando-se uma média de 20 horas de trabalho por

Ponto de Caso de Uso (UCP), sendo que experiências demonstram uma variação

entre 15 e 30 horas por ponto.

2.5 METODOLOGIAS ÁGEIS

O termo “Metodologias Ágeis” tornou-se popular no ano de 2001, quando dezessete

grandes pensadores em processo de desenvolvimento de software se encontraram

para que cada um explicasse a maneira como desenvolviam projetos de software,

como trabalhavam para que a equipe respondesse rapidamente às mudanças

(MARTIN, 2003).

A partir deste encontro, foi então criada a “Aliança Ágil” e o estabelecimento dos

valores do “Manifesto Ágil”. Eles declararam (MANIFESTO, 2009):

Manifesto para o Desenvolvimento Ágil de Software Estamos descobrindo melhores maneiras de desenvolver software, fazendo-o e ajudando outros a fazê-lo. Através deste trabalho passamos a valorizar: Indivíduos e interações mais que processos e ferramentas. Software que funciona mais que documentação detalhada. Colaboração do cliente mais que negociações contratuais. Responder às mudanças mais que seguir um plano. Isto é, embora haja valor nos itens do lado direito, nós valorizamos mais os do lado esquerdo.

(Tradução livre de www.agilemanifesto.org)

O objetivo do Manifesto Ágil não é desconsiderar processos, ferramentas,

documentação, negociação de contratos ou planejamento, mas mostrar o valor

secundário que estes possuem diante dos indivíduos e interações, do bom

funcionamento do software, da colaboração do cliente e das respostas velozes às

Page 30: TCC FDD Jorge Bublitz

30

modificações. Esses conceitos estão mais relacionados à forma que as pequenas e

médias empresas trabalham, devido a estarem habituadas a mudanças.

A Aliança Ágil define 12 princípios para aqueles que querem alcançar agilidade:

1. Nossa maior prioridade é satisfazer o cliente através da entrega antecipada e

contínua de software com valor.

2. Receber mudanças nos requisitos, mesmo tarde no desenvolvimento.

Processos ágeis aproveitam a mudança para a vantagem competitiva do

cliente.

3. Entregar frequentemente software que funciona, desde poucas semanas até

poucos meses, com uma preferência pela menor escala de tempo.

4. Pessoal de negócio e desenvolvedores devem trabalhar juntos diariamente

por todo o projeto.

5. Construa projetos em torno de indivíduos motivados. Dê-lhes o ambiente e o

apoio necessários e confie neles para realizarem o trabalho.

6. O método mais eficiente e eficaz de transmitir informação para e dentro da

equipe de desenvolvimento é a conversação face a face.

7. Software que funciona é a medida primordial de progresso.

8. Processos ágeis promovem o desenvolvimento sustentável. Os

patrocinadores, desenvolvedores e usuários devem ser capazes de manter

um ritmo constante indefinidamente.

9. Atenção contínua a excelência técnica e bom desenho (design) elevam a

agilidade.

10. Simplicidade (a arte de maximizar a quantidade de trabalho não realizado) é

essencial.

11. As melhores arquiteturas, requisitos e desenhos (designs) emergem de

equipes auto-organizadas.

12. Em intervalos regulares a equipe reflete sobre como se tornar mais eficaz, e

então afina e ajusta seu comportamento de acordo.

Podemos afirmar que as Metodologias Ágeis promovem um processo de

gerenciamento de projeto que incentiva a inspeção e a adaptação frequentes.

Page 31: TCC FDD Jorge Bublitz

31

Incentiva também o trabalho em equipe, auto-organização, entrega frequente e

rápida de software com qualidade.

2.6 DESENVOLVIMENTO DIRIGIDO A FUNCIONALIDADES

Feature-Driven Development (FDD) é uma metodologia iterativa e incremental de

gerenciamento e engenharia de software, que combina as melhores práticas de

outras abordagens ágeis com técnicas centradas no modelo, que podem escalar

para equipes e projetos maiores. A FDD também é caracterizada por uma ênfase na

qualidade em todo o processo e um monitoramento de progresso direto, preciso,

intuitivo e acurado. Sua principal finalidade é a entrega tangível e frequente de

software funcional.

Foi originalmente concebido por Peter Coad e Jeff De Luca como um modelo prático

de processo para engenharia de software orientada a objetos. Stephen Palmer e

John Felsing estenderam e melhoraram o trabalho de Coad e De Luca descrevendo

um processo ágil e adaptativo que pode ser aplicado a projetos de software

(PALMER e FELSING, 2002).

“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, e a retomada da responsabilidade para as organizações que se

desiludiram com as propostas mais radicais” (RETAMAL, 2009).

A FDD inicia com a criação de um modelo de objetos do domínio do problema, em

colaboração com os especialistas no domínio. Usando a informação vinda da

atividade de modelagem e de quaisquer outras atividades de coleta de requisitos

que já possam ter ocorrido, os desenvolvedores prosseguem para a criação da lista

de funcionalidades. A seguir, um plano primordial é elaborado e atribuem-se

responsabilidades. Então, equipes pequenas e formadas dinamicamente

desenvolvem as funcionalidades, realizando repetidamente iterações de projeto

Page 32: TCC FDD Jorge Bublitz

32

(design) e construção, que duram não mais do que duas semanas e, geralmente,

são muito mais curtas (PALMER e FELSING, 2002).

No contexto da FDD, uma funcionalidade “é uma característica, uma função

valorizada pelo cliente que pode ser implementada em até duas semanas” (PALMER

e FELSING, 2002). O conceito é muito próximo de requisito funcional.

2.6.1 As Práticas da FDD

As oito práticas da FDD são:

1. Modelagem de Objetos do Domínio: Consiste na exploração e explicação do

domínio do problema;

2. Desenvolvimento por Funcionalidade: Desenvolvimento e acompanhamento

do progresso através da lista de funcionalidades;

3. Posse individual de classe (código): Cada classe possui um único

desenvolvedor responsável, e um desenvolvedor pode ter várias classes em

sua posse;

4. Equipes de Funcionalidades: Formação de equipes pequenas e dinâmicas;

5. Inspeções: Uso dos melhores métodos conhecidos de detecção de erros;

6. Builds regulares: Garantir que existe um sistema sempre disponível e

demonstrável para o cliente;

7. Gerenciamento de configuração: Habilita acompanhamento do histórico do

código-fonte. Pode ser utilizado um software de controle de versões;

8. Relatório / Visibilidade de Resultados: É feito um acompanhamento através

de análises nas informações do software e verifica-se como está o

andamento dos processos de desenvolvimento.

Page 33: TCC FDD Jorge Bublitz

33

2.6.2 Os papéis da FDD

Os principais papéis que são definidos na FDD são os seguintes:

Gerente de Projeto

► Responsável por todos os assuntos administrativos do projeto, o que

inclui o gerenciamento de recursos, orçamento, equipamentos e outros.

Sua principal meta é fornecer subsídios para que nenhum fator externo

atrapalhe a produtividade da equipe do projeto;

Gerente de Desenvolvimento

► Responsável por liderar o dia-a-dia do desenvolvimento do produto.

Por ser o responsável por resolver qualquer conflito técnico que exista

entre programadores-líderes, deve possuir boa experiência no

desenvolvimento de software e nas tecnologias que são utilizadas no

projeto;

Arquiteto

► Responsável pela última palavra em toda arquitetura do sistema.

Também possui bastante experiência técnica em modelagem orientada

a objetos, e habilidade para atuar como facilitador na absorção das

regras de negócio;

Programador-líder

► Responsável por liderar pequenos grupos de desenvolvedores durante

a construção das funcionalidades do produto. Também atua como

desenvolvedor e, normalmente, é atribuída a ele a propriedade das

classes mais complexas do sistema. Possui, ainda, papel fundamental

nas fases de absorção do conhecimento de negócio e no planejamento

das funcionalidades;

Page 34: TCC FDD Jorge Bublitz

34

Proprietários de código/classe (Desenvolvedores)

► Compõe as equipes de funcionalidades, desenvolve, diagrama, testa e

documenta as funcionalidades a ele atribuídas pelo Programador-

Líder; e

Especialistas do domínio (negócio)

► Apresenta à equipe do projeto as necessidades para que o software

possua valor real para os clientes. Fornecer aos desenvolvedores

maior detalhamento sobre determinada funcionalidade, além de

fornecer feedback das entregas para todos os envolvidos.

Em projetos maiores e que possuam tal necessidade, outros papéis podem ser

incluídos no projeto, tais como:

Gerente de Versão;

Guru da Linguagem;

Criador de Ferramentas;

Testadores;

Implantadores; e

Redator Técnico.

É importante ressaltar que é permitida, e comumente realizada, a atribuição de mais

de um papel no projeto para a mesma pessoa.

2.6.3 Os Processos da FDD

A FDD é composta por cinco processos (Figura 3), divididos em duas fases.

Page 35: TCC FDD Jorge Bublitz

35

Figura 3 – As Fases e os Processos da FDD

Fonte: Site Heptagon – www.hetpagon.com.br

Segundo Retamal (2009), a primeira fase é chamada de Concepção e

Planejamento (pensar um pouco antes de fazer) e a segunda de Construção (fazer

de forma iterativa).

Os três primeiros processos são executados no início do projeto (tipicamente duram

no máximo duas semanas):

DMA - Desenvolver um Modelo Abrangente;

CLF - Construir a Lista de Funcionalidades;

PPF - Planejar Por Funcionalidade.

Os dois últimos são feitos em cada iteração (normalmente de uma ou duas

semanas):

DPF - Detalhar Por Funcionalidade;

CPF - Construir Por Funcionalidade.

Page 36: TCC FDD Jorge Bublitz

36

Serão apresentadas detalhadamente as características que compreendem esses

processos (PALMER e FELSING, 2002) com tradução do Adail (RETAMAL, 2009).

2.6.4 DMA – Desenvolver um Modelo Abrangente

É uma atividade inicial que abrange todo o projeto, realizada por membros do

domínio do negócio e por desenvolvedores, sob a orientação de um modelador de

objetos experiente, no papel de arquiteto-líder (Figura 4).

Figura 4 - Desenvolver um Modelo Abrangente

Page 37: TCC FDD Jorge Bublitz

37

Realiza-se um estudo dirigido sobre o escopo do sistema e seu contexto. Então, são

realizados estudos mais detalhados sobre o domínio do negócio para cada área a

ser modelada. Após cada estudo dirigido sobre o domínio, pequenos grupos são

formados por membros do domínio do negócio sendo estudado e por

desenvolvedores, que comporão seus próprios modelos que satisfaçam o domínio

em questão. Os pequenos grupos apresentam seus modelos para serem revisados

por parceiros e para discussão. Um dos modelos propostos, ou uma combinação

dos modelos, é selecionado por consenso, tornando-se, assim, o modelo para

aquela área do domínio do negócio. Realiza-se, então, uma combinação do modelo

da área do domínio dentro de um modelo abrangente, ajustando a forma do modelo

se for necessário.

O modelo de objetos é, então, iterativamente atualizado em seu conteúdo pelo

processo nº 4 “Detalhar por Funcionalidade”.

Critérios de Entrada

Os especialistas no domínio do negócio, os programadores-líderes e o

arquiteto-líder foram selecionados.

Atividades:

1. Formar a Equipe de Modelagem

Responsabilidade: Gerente do Projeto

Obrigatória

A equipe de modelagem é composta de membros permanentes das áreas do

domínio do negócio e de desenvolvimento, especificamente os especialistas

no domínio e os programadores-líderes. É feito um rodízio com os outros

integrantes do projeto através das sessões de modelagem, de modo que todo

mundo tenha a chance de participar e ver o processo em ação.

2. Estudo Dirigido Sobre o Domínio

Responsabilidade: Equipe de Modelagem

Page 38: TCC FDD Jorge Bublitz

38

Obrigatória

Um especialista no domínio do negócio apresenta uma visão geral da área do

domínio que será modelada. Essa apresentação deve também incluir

informação que estiver relacionada a esta área do domínio, mas não

necessariamente uma parte de sua implementação.

3. Estudar a Documentação

Responsabilidade: Equipe de Modelagem

Opcional

A equipe estuda os documentos de referência ou de requisitos disponíveis,

tais como modelos de objetos, requisitos funcionais (tradicionais ou no

formato de casos de uso), modelos de dados e guias do usuário.

4. Desenvolver o Modelo

Responsabilidade: Equipe de Modelagem em Pequenos Grupos

Obrigatória

Formando grupos com não mais do que três componentes, cada pequeno

grupo comporá um modelo que suporte a área do domínio. O arquiteto-líder

pode propor um modelo base para facilitar o progresso das equipes. Um

membro de cada grupo apresenta o modelo proposto por seu grupo para a

área do domínio. O arquiteto-líder também pode propor outros modelos

alternativos. A equipe de modelagem seleciona um modelo proposto ou

compõe um modelo pela combinação das idéias propostas nos modelos

apresentados.

5. Refinar o Modelo de Objetos Abrangente

Responsabilidade: Arquiteto-Líder e Equipe de Modelagem

Obrigatória

Page 39: TCC FDD Jorge Bublitz

39

Frequentemente, o modelo de objetos abrangente é atualizado com novas

formas de modelo produzidas pelas iterações da atividade “Desenvolver o

Modelo” descrito acima.

Verificação

Avaliação Interna e Externa

Responsabilidade: Equipe de Modelagem, Negócio

Obrigatória

Realiza-se uma auto-avaliação ou uma avaliação interna através da

participação ativa dos especialistas no domínio. Quando necessária, uma

avaliação externa pode ser feita pedindo-se ao negócio (usuários) que

confirme ou esclareça as questões que afetam o modelo.

Critérios de Saída

O resultado do processo é o modelo de objetos:

Diagramas de classes com foco na forma do modelo, isto é, quais classes

estão no domínio, como estão conectadas umas às outras e sob quais

restrições;

Métodos e atributos identificados são colocados nas classes;

Diagrama(s) de sequência e/ou de máquina de estados se houver;

Comentários sobre o modelo para registrar o motivo pelo qual uma forma

de modelo foi escolhida e/ou quais alternativas foram consideradas.

2.6.5 CLF – Construir a Lista de Funcionalidades

É uma atividade inicial que abrange todo o projeto, para identificar todas as

funcionalidades que satisfaçam aos requisitos (Figura 5).

Page 40: TCC FDD Jorge Bublitz

40

Figura 5 - Construir a Lista de Funcionalidades

Uma equipe, geralmente composta apenas por programadores-líderes do processo

nº 1, é formada para decompor funcionalmente o domínio em áreas de negócio,

atividades de negócio dentro delas e passos dentro de cada atividade de negócio,

formando assim a lista categorizada de funcionalidades. A categorização de mais

alto nível para a lista de funcionalidades vem da divisão do domínio feita pelos

especialistas do domínio no processo nº 1.

Critérios de Entrada

Os especialistas no domínio do negócio, os programadores-líderes e o

arquiteto-líder foram selecionados.

Atividades:

1. Formar a Equipe da Lista de Funcionalidades

Responsabilidade: Gerente do Projeto, Gerente de Desenvolvimento

Page 41: TCC FDD Jorge Bublitz

41

Obrigatória

A equipe é composta por programadores-líderes da equipe de modelagem do

primeiro processo.

2. Construir a Lista de Funcionalidades

Responsabilidade: Equipe da Lista de Funcionalidades

Obrigatória

A equipe deve identificar o conjunto de funcionalidades usando o

conhecimento adquirido no processo nº 1. Esta é simplesmente uma

decomposição funcional nas áreas definidas a partir da divisão do domínio

pelos especialistas em cada domínio nos diversos estudos dirigidos

realizados no processo nº 1. Ela é decomposta em áreas que englobam

atividades de negócio, que são, por sua vez, decompostas em passos

(funcionalidades). As funcionalidades são funções granulares, expressas em

termos que possuem valor para o cliente, usando o seguinte modelo de

nomeação:

<ação> <resultado> < por | para | de | a > <objeto>

Exemplos: calcular o total de uma venda, adicionar o produto a um carrinho

de compras, exibir as especificações técnicas de um produto.

As funcionalidades são granulares, de acordo com a regra de que uma

funcionalidade não levará mais do que duas semanas para ser completada.

Duas semanas são um limite superior; a maioria das funcionalidades leva

muito menos tempo do que isso. Quando um passo de uma atividade de

negócio parece maior do que duas semanas, o passo é quebrado em passos

menores, que então se tornam funcionalidades.

Verificação

Avaliação Interna e Externa

Page 42: TCC FDD Jorge Bublitz

42

Responsabilidade: Equipe da Lista, Negócio

Obrigatória

Realiza-se uma auto-avaliação ou uma avaliação interna através da

participação ativa dos membros da equipe de modelagem. Quando

necessária, uma avaliação pode ser feita pedindo-se aos especialistas no

domínio do negócio da equipe de modelagem ou ao negócio (usuários) que

confirmem ou esclareçam as questões que afetam a lista de funcionalidades.

Critérios de Saída

O resultado do processo é a lista de funcionalidades:

Uma lista de áreas de negócio;

Para cada área, uma lista de atividades de negócio dentro daquela área;

Para cada passo da atividade de negócio, uma funcionalidade que

satisfaça ao passo.

2.6.6 PPF – Planejar por Funcionalidade

É uma atividade inicial que abrange todo o projeto, para produzir o plano de

desenvolvimento (Figura 6).

Page 43: TCC FDD Jorge Bublitz

43

Figura 6 - Planejar por Funcionalidade

O gerente de projeto, o gerente de desenvolvimento e os programadores-líderes

planejam a ordem na qual as funcionalidades serão implementadas, baseada nas

dependências entre elas, na carga de trabalho da equipe de desenvolvimento e

também na complexidade das funcionalidades a serem implementadas. As principais

atividades neste processo não são uma sequência estrita. Como muitas atividades

de planejamento, elas são consideradas em conjunto, com refinamentos feitos a

partir de uma ou mais atividades e então considerando os outros novamente.

Um cenário típico é levar em conta a sequência de desenvolvimento, depois levar

em conta a atribuição das atividades de negócio aos programadores-líderes e, ao

fazê-lo, considerar quais das classes principais (apenas) são atribuídas a quais

desenvolvedores (lembrar que o programador-líder também é um desenvolvedor).

Quando esse equilíbrio for alcançado, e a sequência de desenvolvimento e a

atribuição das atividades de negócio aos programadores-líderes estiverem

essencialmente completadas, então a posse das classes estará completada (além

das classes principais que já foram consideradas para posse).

Page 44: TCC FDD Jorge Bublitz

44

Critérios de Entrada

O processo Construir a Lista de Funcionalidades foi completado.

Atividades

1. Formar a Equipe de Planejamento

Responsabilidade: Gerente do Projeto

Obrigatória

A equipe de planejamento é composta pelo gerente de desenvolvimento e

pelos programadores-líderes.

2. Determinar Sequência de Desenvolvimento

Responsabilidade: Equipe de Planejamento

Obrigatória

A equipe de planejamento deve atribuir uma data (mês e ano apenas) para o

término de cada atividade de negócio. A identificação da atividade de negócio

e a data de término (e dessa forma a sequência de desenvolvimento) são

baseadas em:

Dependências entre as funcionalidades em termos de classes envolvidas;

Distribuição da carga de trabalho entre os proprietários das classes;

Complexidade das funcionalidades a serem implementadas;

Adiantamento das atividades de negócio de alto risco ou complexidade;

Consideração de qualquer marco externo (visível) do projeto, como

versões “beta”, demonstrações, pontos de verificação e “todos os

produtos” que satisfaçam tais marcos.

3. Atribuir Atividades de Negócio aos Programadores-Líderes

Responsabilidade: Equipe de Planejamento

Obrigatória

Page 45: TCC FDD Jorge Bublitz

45

A equipe de planejamento deve atribuir programadores-líderes como

proprietários de atividades de negócio. A atribuição é baseada em:

Sequência de desenvolvimento;

Dependências entre as funcionalidades em termos de classes

envolvidas;

Distribuição da carga de trabalho entre os proprietários das classes

(lembrar que os programadores-líderes também são proprietários de

classes);

Complexidade das funcionalidades a serem implementadas.

1. Atribuir Classes aos Desenvolvedores Responsabilidade: Equipe de Planejamento Obrigatória

A equipe de planejamento deve atribuir desenvolvedores como proprietários de classes. Os desenvolvedores são proprietários de várias classes. A atribuição das classes aos desenvolvedores é baseada em:

Distribuição da carga de trabalho entre os desenvolvedores;

Complexidade das classes;

Uso das classes (ex. alta utilização);

Sequência de desenvolvimento.

Verificação

Auto-Avaliação

Responsabilidade: Equipe de Planejamento

Obrigatória

Como o planejamento é uma atividade de equipe, realiza-se uma auto-

avaliação pela participação ativa dos programadores-líderes, gerente de

desenvolvimento e gerente de projeto.

Critérios de Saída

Page 46: TCC FDD Jorge Bublitz

46

O resultado do processo é o plano de desenvolvimento, consistindo em:

Atividades de negócio com datas de término (mês e ano);

Programadores-líderes atribuídos a atividades de negócio;

Áreas com datas de término (mês e ano), derivadas da data do último

término de suas respectivas atividades de negócio;

Lista das classes e seus respectivos desenvolvedores proprietários (a

lista de proprietários de classes).

2.6.7 DPF – Detalhar por Funcionalidade

É uma atividade executada para cada funcionalidade, para produzir o pacote de

projeto (design) para ela (Figura 7).

Page 47: TCC FDD Jorge Bublitz

47

Figura 7 - Detalhar por Funcionalidade

Existem dois tipos de desenvolvedores: os proprietários de classes e os

programadores-líderes. Os programadores-líderes são os desenvolvedores mais

experientes. A eles são atribuídos funcionalidades a serem construídas. Entretanto,

eles não as constroem sozinhos. Ao invés disso, o programador-líder identifica quais

classes estão envolvidas para se desenvolver a funcionalidade e reúne seus

proprietários de classes, criando uma equipe para desenvolver aquela

funcionalidade. O programador-líder age como um coordenador, designer e mentor,

enquanto os proprietários de classes fazem a maior parte da programação das

funcionalidades.

Certo número de funcionalidades é agendado para desenvolvimento ao atribuí-las a

um programador-líder. Ele seleciona as funcionalidades para desenvolvimento a

partir de sua “caixa de entrada” de funcionalidades atribuídas. Ele pode escolher

diversas funcionalidades que utilizem as mesmas classes. Operacionalmente, com

frequência acontece o caso de “conjuntos” de funcionalidades serem agendados

Page 48: TCC FDD Jorge Bublitz

48

para desenvolvimento de uma vez pelo programador-líder. Tal conjunto é chamado

de Pacote de Trabalho do Programador-Líder (PTPL).

O programador-líder, então, forma uma equipe de funcionalidades, identificando os

proprietários das classes (desenvolvedores) que provavelmente serão envolvidos no

desenvolvimento das funcionalidades que ele selecionou. Esta equipe produz o(s)

diagrama(s) de sequência para a(s) funcionalidade(s) atribuída(s). O programador-

líder, então, refina o modelo de objetos, baseado no conteúdo do(s) diagrama(s) de

sequência. Os desenvolvedores escrevem os prefácios das classes e métodos.

Realiza-se uma inspeção no projeto (design).

Critérios de Entrada

O processo de planejamento foi completado.

Atividades

1. Formar a Equipe de Funcionalidades

Responsabilidade: Programador-Líder

Obrigatória

O programador-líder identifica as classes que provavelmente serão envolvidas

no projeto deste conjunto de funcionalidades e, consequentemente, atualiza o

banco de dados de funcionalidades. Da lista de proprietários de classes, o

programador-líder identifica os desenvolvedores necessários para formar a

equipe de funcionalidades. Como parte deste passo, o programador-líder cria

um novo pacote de projeto (design) para a(s) funcionalidade(s) como parte do

Pacote de Trabalho.

2. Estudo Dirigido do Domínio

Responsabilidade: Especialista no Domínio

Opcional

O especialista no domínio apresenta uma visão geral da área do domínio para

a funcionalidade a ser projetada. Essa apresentação deve também incluir

Page 49: TCC FDD Jorge Bublitz

49

informação que estiver relacionada a esta funcionalidade, mas que não seja

necessariamente uma parte de sua implementação. Esta é uma atividade

opcional, baseada na complexidade da funcionalidade e/ou de suas

interações.

3. Estudar a Documentação de Referência

Responsabilidade: Equipe de Funcionalidades

Opcional

A equipe de funcionalidades estuda o(s) documento(s) de referência para a

funcionalidade a ser projetada, todos os memorandos de confirmação,

desenhos de telas, especificações de interface com sistemas externos e

qualquer outra documentação de suporte. Esta é uma atividade opcional,

baseada na complexidade da funcionalidade e/ou de suas interações.

4. Desenvolver o(s) Diagrama(s) de Sequência

Responsabilidade: Equipe de Planejamento

Opcional

Desenvolver o(s) diagrama(s) de sequência necessário(s) para a

funcionalidade a ser projetada. Os arquivos do(s) diagrama(s) devem ser

submetidos ao sistema de controle de versões. Quaisquer projetos (designs)

alternativos, decisões de projeto, esclarecimentos de requisitos e comentários

também são registrados e descritos na seção de alternativas de projeto

(design) do Pacote de Projeto (Design).

5. Refinar o Modelo de Objetos

Responsabilidade: Programador-Líder

Obrigatória

O programador-líder cria uma área para a equipe de funcionalidades para a(s)

funcionalidade(s). Esta área pode ser um diretório em um servidor de arquivos

ou um diretório em seus próprios computadores, que são copiados para o

servidor pelo programador-líder quando necessário, ou utiliza-se uma área de

Page 50: TCC FDD Jorge Bublitz

50

trabalho fornecida pelo sistema de controle de versões. O propósito da área

da equipe de funcionalidades é para que o trabalho em andamento possa ser

compartilhado e estar visível pelos membros da equipe de funcionalidades,

mas invisível para o resto do projeto.

O programador-líder refina o modelo para adicionar novas classes, métodos,

atributos e/ou fazer alterações aos já existentes, baseado no(s) diagrama(s)

de sequência definido(s) para a(s) funcionalidade(s). Isto resulta na

atualização dos arquivos fontes da linguagem de implementação na área da

equipe de funcionalidades. O programador-líder cria diagramas do modelo

num formato publicável. Esses arquivos devem ser submetidos ao sistema de

controle de versões e publicados na intranet do projeto.

6. Escrever Prefácios de Classes e Métodos

Responsabilidade: Equipe de Funcionalidades

Obrigatória

Utilizando os arquivos fontes da linguagem de implementação atualizados

pela atividade “Refinar o Modelo de Objetos”, que estão na área da equipe de

funcionalidades, o proprietário das classes escreve os prefácios de classe e

métodos para cada item definido pela funcionalidade e pelo(s) diagrama(s) de

sequência. Isto inclui tipos de parâmetros, tipos de retorno, exceções e

mensagens. Uma vez que cada desenvolvedor completou sua tarefa, o

programador-líder gera a documentação da API usando e a submete para

publicação na intranet do projeto.

Verificação

Inspeção do Projeto (Design)

Responsabilidade: Equipe de Funcionalidades

Obrigatória

Realiza-se uma inspeção no projeto (design) com os membros da equipe de

funcionalidades ou com outros membros do projeto. A decisão de inspecionar

Page 51: TCC FDD Jorge Bublitz

51

com a equipe de funcionalidades ou com outros membros do projeto cabe ao

programador-líder. Após o aceite, uma lista de tarefas é gerada para cada

classe afetada, e cada membro da equipe inclui suas tarefas à sua agenda de

tarefas. O programador-líder também deve combinar as alterações da área

compartilhada pela equipe de funcionalidades de volta ao sistema de controle

de versões.

Critérios de Saída

O resultado do processo é um Pacote de Projeto (Design) inspecionado com

sucesso. O pacote de projeto consiste em:

Uma capa com comentários, que completa e descreve o pacote de projeto

de tal forma a ser suficiente para futuros revisores;

Os requisitos referenciados (se houver) na forma de documentos e de

todos os memorandos de confirmação relacionados, e documentação de

apoio;

O(s) diagrama(s) de sequência;

Alternativas de projeto (design) (se houver);

O modelo de objetos com classes, métodos e atributos novos/atualizados;

A saída gerada para os prefácios de classes e métodos, criados ou

modificados por esse projeto (design);

Lista de tarefas e agendamentos para itens de ação nas classes afetadas

para cada membro da equipe.

2.6.8 CPF – Construir por Funcionalidade

É uma atividade executada para cada funcionalidade, para produzir uma função com

valor para o cliente (Figura 8).

Page 52: TCC FDD Jorge Bublitz

52

Figura 8 - Construir por Funcionalidade

Começando com o pacote de projeto (design), os proprietários de classes

implementam os itens necessários para que suas classes suportem o projeto para

esta funcionalidade. O código desenvolvido passa pelo teste de unidade e pela

inspeção – a ordem aqui é determinada pelo programador-líder. Após passar pela

inspeção, o código é promovido à versão atual (build).

Critérios de Entrada

O processo Detalhar por Funcionalidade foi completado, isto é, o pacote de projeto (design) passou com sucesso pela inspeção.

Atividades

1. Implementar Classes e Métodos

Responsabilidade: Equipe de Funcionalidades

Obrigatória

Os proprietários de classes implementam os itens necessários para satisfazer

aos requisitos de suas classes para esta funcionalidade.

Page 53: TCC FDD Jorge Bublitz

53

2. Inspecionar o Código

Responsabilidade: Equipe de Funcionalidades

Obrigatória

Uma inspeção no código, com membros da equipe de funcionalidades ou

outros membros do projeto (a decisão cabe ao programador-líder), é realizada

antes ou após o teste de unidade (a decisão também cabe ao programador-

líder).

3. Teste de Unidade

Responsabilidade: Equipe de Funcionalidades

Obrigatória

Os proprietários de classes testam seus códigos para certificar que todos os

requisitos de suas classes foram satisfeitos. O programador-líder determina

quais testes de unidade no nível da equipe de funcionalidades são

necessários (se houver). Isto é, se algum teste envolvendo as classes

desenvolvidas para esta funcionalidade é exigido.

4. Promover à Versão Atual (Build)

Responsabilidade: Programador-Líder e Equipe de Funcionalidades

Obrigatória

As classes somente podem ser promovidas para a versão atual (build) após

uma inspeção de código com sucesso. O programador-líder monitora as

classes sendo promovidas individualmente, através de informações dos

desenvolvedores, e é o ponto de integração para a funcionalidade inteira.

Verificação

Inspeção do Código e Teste de Unidade

Responsabilidade: Programador-Líder e Equipe de Funcionalidades

Obrigatória

Page 54: TCC FDD Jorge Bublitz

54

Uma inspeção de código com sucesso, juntamente com o término dos testes

de unidade com sucesso, forma a verificação da saída deste processo. A

inspeção do código e o teste de unidades são descritos acima.

Critérios de Saída

O resultado do processo é:

Classe(s) e/ou método(s) que passaram na inspeção de código com sucesso;

Classe(s) que foi(ram) promovida(s) à versão atual (build);

O término de uma função com valor para o cliente (funcionalidade).

2.6.9 Medindo o Progresso do Desenvolvimento

O progresso do desenvolvimento na FDD é medido na Etapa de Construção –

Detalhar por Funcionalidade e Construir por Funcionalidade.

Figura 9 - Medindo o Progresso

Page 55: TCC FDD Jorge Bublitz

55

São 6 marcos (milestones) bem definidos, conforme a Figura 9. A cada etapa o

percentual respectivo é agregado ao total de progresso da funcionalidade.

E assim podemos montar um quadro de progresso por Atividade de Negócio (Figura

10):

Figura 10 - Quadro de Progresso Fonte: Site Heptagon – www.hetpagon.com.br

2.7 COMPARANDO AS METODOLOGIAS

O desenvolvimento ágil tem pouco em comum com o modelo em cascata. Na visão

de alguns este modelo é desacreditado, apesar de ser um modelo de uso comum. O

modelo em cascata é uma das metodologias tradicionais com mais ênfase no

planejamento, seguindo seus passos através da captura dos requisitos, análise,

projeto, codificação e testes em uma sequência pré-planejada e restrita.

Page 56: TCC FDD Jorge Bublitz

56

O progresso é geralmente medido em termos de entrega de artefatos –

especificação de requisitos, documentos de projeto, planos de teste, revisão do

código e outros. O modelo em cascata resulta em uma substancial integração e

esforço de teste para alcançar o fim do ciclo de vida, um período que tipicamente se

estende por vários meses ou anos. O tamanho e dificuldade deste esforço de

integração e teste é uma das causas das falhas do projeto em cascata. Métodos

ágeis, pelo contrário, produzem um desenvolvimento completo e teste de aspectos

(mas um pequeno subconjunto do todo) num período de poucas semanas ou meses.

Enfatiza a obtenção de pequenos pedaços de funcionalidades executáveis para

agregar valor ao negócio cedo, e continuamente agregar novas funcionalidades

através do ciclo de vida do projeto (Figura 11).

Figura 11 - Diferenças entre as metodologias

Algumas equipes ágeis usam o modelo em cascata em pequena escala, repetindo o

ciclo de cascata inteiro em cada iteração.

A Tabela 4 resume as principais diferenças entre as duas metodologias.

Page 57: TCC FDD Jorge Bublitz

57

Tabela 4 - Comparação entre as Metodologias

Metodologia Tradicional Metodologia Ágil

Previsibilidade Adaptabilidade

Controlar a incerteza Lidar com a incerteza

Burocrática Documentação essencial

Excesso de documentação Mudanças rápidas

Enfatizam os aspectos de engenharia do desenvolvimento

Enfatizam os aspectos humanos do desenvolvimento

Teorias Básicas:

Gerenciamento Total da Qualidade

Controle Estatístico de Processo

Teorias Básicas:

Produção Enxuta

Teoria das Restrições

A FDD coloca mais ênfase em diretrizes e técnicas de gestão de projeto do que

muitas outras metodologias ágeis. À medida que os projetos crescem em tamanho e

complexidade, a gestão de projeto ad hoc é frequentemente inadequada. É

essencial que os desenvolvedores, os gerentes e o cliente entendam o estado do

projeto – que avanços foram feitos e que problemas foram encontrados. Se a

pressão quanto ao prazo de entrega for significativa, é crítico determinar se as

funcionalidades foram adequadamente planejadas.

Page 58: TCC FDD Jorge Bublitz

58

3. ESTUDO DE CASO

Este capítulo apresenta a aplicação da metodologia FDD em um projeto concreto de

desenvolvimento de um novo produto.

Para ilustrar a aplicação do modelo proposto num cenário real e analisar os

resultados obtidos, foi realizado um estudo de caso no ano de 2007 no Tribunal

Regional Eleitoral de Mato Grosso, através de observação pessoal junto a equipe de

desenvolvimento e a comparação da estimativa de entrega entre a metodologia

tradicional e a metodologia ágil.

Esta empresa foi selecionada pela facilidade de acesso às informações, uma vez

que o autor deste trabalho é funcionário concursado, chefe da Seção de Análise e

Desenvolvimento.

A empresa não possuía qualquer nível de maturidade de processo (como CMM,

CMMI, etc.), nem utilizava metodologia padronizada (por exemplo: RUP,

metodologias ágeis, etc.). O modelo de ciclo de vida de desenvolvimento

predominante nos projetos realizados pela empresa era o modelo em cascata,

estando mais para “aos trancos e barrancos”, com as estimativas de prazo de

desenvolvimento sendo calculadas por pontos de casos de uso.

O projeto selecionado para realizar este estudo foi o desenvolvimento de um novo

produto denominado Acompanhamento Permanente do Eleitorado.

A aplicação do modelo proposto contou com o apoio dos diretores da empresa, o

que facilitou a realização do trabalho de pesquisa.

Apesar de contar com o apoio da direção da empresa para a realização do estudo

de caso, o inicio do projeto foi cercado de incertezas, por parte de todos os

envolvidos no projeto. O modelo proposto significou uma mudança com relação às

metodologias que se tornaram norma na indústria de software, e desta forma,

necessitou uma mudança na mentalidade da gerência.

Page 59: TCC FDD Jorge Bublitz

59

O Gerente de Projeto, que neste caso coincidiu com o Treinador, constantemente

estava empenhado em identificar quem deveria estar fazendo o que, ao mesmo

tempo em que estava construindo o ambiente de desenvolvimento adequado

(ferramentas, cultura, comunicação etc.).

Tínhamos um pouco mais de dois meses para concluir o projeto. Estávamos no dia

19/06/2007 e o prazo de entrega foi definido para ser no máximo em 31/08/2007.

Para tornar o processo mais adaptável às incertezas e conseguir responder mais

rápido aos requisitos emergentes, as iterações foram definidas com o período de

duas semanas.

3.1 EQUIPE DO PROJETO

A equipe que participou deste projeto foi composta por sete pessoas com

experiência e que trabalhavam de forma bastante integrada em um mesmo espaço

físico, facilitando a troca de informações e conhecimentos (inclusive com a presença

dos clientes do produto, que no caso era a Corregedoria).

Estas considerações são importantes para definir o contexto onde foi realizado o

ensaio e reduzir o escopo das discussões, não levando em consideração as

complexidades referentes à comunicação de grandes equipes, dispersas

geograficamente, e inexperiência do pessoal envolvido.

A equipe foi assim formada:

Um Gerente de Projeto, que também exerceu os papéis de Treinador e de Programador-Líder (autor do trabalho);

Um Especialista de Negócio, que também exerceu o papel de Arquiteto;

Um Gerente de Desenvolvimento, que também exerceu o papel de Programador-Líder;

Um Especialista de Negócio; e

Três Desenvolvedores.

Page 60: TCC FDD Jorge Bublitz

60

3.2 EXECUÇÃO DO PROCESSO

3.2.1 DMA - Desenvolver um Modelo Abrangente

Formar a Equipe de Modelagem

Sendo a equipe pequena, resolvemos que todos os membros do projeto fariam parte

da Equipe de Modelagem.

Estudo Dirigido Sobre o Domínio

O objetivo do projeto é ser uma ferramenta de Acompanhamento Estatístico do

Eleitorado. Isso ajudará a Corregedoria Eleitoral a identificar possíveis fraudes e

determinar revisões no eleitorado. Através de gráficos e relatórios faremos esse

acompanhamento.

Para isso ele terá que:

1. Acompanhar as Inscrições e as Transferências de Títulos de Eleitor no

Cadastro de Eleitores do Estado de Mato Grosso, pois de acordo com a

legislação eleitoral, se o total de transferências de títulos do ano em curso for

10% maior em relação às transferências do ano anterior, é preciso fazer uma

revisão eleitoral; e

2. Acompanhar o percentual do eleitorado em relação às estimativas de

população dos municípios feitas pelo IBGE. De acordo com a legislação

eleitoral, quando esse percentual for superior a 80%, é preciso fazer uma

revisão eleitoral.

Page 61: TCC FDD Jorge Bublitz

61

Desenvolver o Modelo

Depois de conhecer melhor os objetivos do projeto, começamos a elaborar um

modelo, utilizando a UML em Cores. Dividimos a equipe em duas para que cada

uma apresenta-se uma proposta.

Alguns problemas sugiram aqui, com alguns membros se preocupando com a

Interface Gráfica, se iria ser uma aplicação Web, questionamentos sobre o Banco de

Dados e outros fatores. Neste momento tive que intervir e lembrá-los que naquele

momento estávamos focados em entender O QUE o sistema deverá fazer e não

COMO irá fazê-lo.

As duas propostas apresentadas foram muito semelhantes. Juntamos as idéias de ambos e chegamos ao seguinte modelo abrangente (Figura 12).

«moment-interval»

revisao

«party»

eleitor

«moment-interval»

inscricao

«moment-interval»

transferencia

«place»

municipio

0..*1 0..*1

0..*1 0..*1

0..*

1

0..*

1

0..* 10..* 1

Figura 12 - Modelo Abrangente

Refinar o Modelo de Objetos Abrangente

Após mais algumas explanações, como a necessidade de cadastramento dos postos

eleitorais e necessidade de autenticação de usuário, o Modelo Abrangente Final foi

o seguinte (Figura 13):

Page 62: TCC FDD Jorge Bublitz

62

«party»

eleitor

«moment-interval»

inscricao

«party»

usuario

«moment-interval»

revisao

«place»

municipio

«description»

posto_eleitoral

«moment-interval»

transferencia

0..*1 0..*1

0..*1 0..*1

0..*

1

0..*

1

0..* 10..* 1

0..*

1

0..*

1

0..*

1

Tem Munic. Próximo

0..*

1

Tem Munic. Próximo

0..* 10..* 1

0..*

1

0..*

1

0..*

1

0..*

1

Figura 13 - Modelo Abrangente Final

3.2.2 CLF - Construir a Lista de Funcionalidades

Formar a Equipe da Lista de Funcionalidades

A equipe foi formada pelos dois Programadores-Líderes, assim definido pelo

Gerente de Projeto.

Construir a Lista de Funcionalidades

Identificamos o conjunto de funcionalidades usando o conhecimento adquirido na

Fase DMA – Desenvolver um Modelo Abrangente. Também identificamos as Áreas

de Negócio apresentadas. Depois estas áreas foram decompostas em Áreas de

Atividades de Negócio, que, por sua vez, foram decompostas em funcionalidades.

A Lista de Funcionalidades é a seguinte:

Page 63: TCC FDD Jorge Bublitz

63

Nº Nome da Feature

1 Quadro Comparativo Eleitorado x IBGE

1.1 Cadastrar as Estimativas do IBGE

1.2 Gerar Gráfico com Percentual Eleitorado x IBGE

2 Cadastros

2.1 Cadastrar os Municípios Sede de Zona e seus Postos Eleitorais

2.2 Cadastrar os Municípios Vizinhos

2.3 Cadastrar Usuários do Sistema

2.4 Controlar o Acesso de Usuários

3 Operações do Cadastro

3.1 Gerar Gráfico de Operações Geral Anual

3.2 Gerar Gráfico de Operações Geral Mensal

3.3 Gerar Gráfico de Operações Comparativo Anual

3.4 Gerar Gráfico de Operações Comparativo Mensal

4 Quantitativo de Transferências

4.1 Gerar Gráfico de Transferências para um Munic. Por UF

4.2 Gerar Gráfico de Transferências para um Munic. Por Munic. Origem

4.3 Gerar Gráfico de Transferências por Bairro de Origem

4.4 Gerar Relatório de Detalhe da Lista de Transferência

4.5 Gerar Relatório de Histórico do Eleitor (RAE/FASE)

Acompanhamento Permanente do Eleitorado

Figura 14 - Lista de Funcionalidades

Para que pudéssemos fazer a estimativa de prazo pelo método de Pontos de Caso

de Uso, desenvolvemos o diagrama de Caso de Uso (Figura 15).

Gerar Gráfico 3.4

Gerar Gráfico 4.1

Gerar Gráfico 3.1

Operador

Gerar Gráfico 4.5

Gerar Gráfico 3.3

Cadastrar Mun. Vizinhos

Usuário Avançado

Gerar Gráfico 3.2

Gerar Gráfico 4.2

Cadastrar Mun. Sede e P.E.

Administrador

Gerar Gráfico Eleitorado x IBGE

Gerar Gráfico 4.4

Cadastrar Usuários

Cadastrar Estimativas IBGE

Gerar Gráfico 4.3

Figura 15 - Diagrama de Caso de Uso

Page 64: TCC FDD Jorge Bublitz

64

A estimativa por Pontos de Caso de Uso ficou assim:

UAW = 3 x 3 = 9 (3 Atores complexos)

UUCW = 15 + 10 + 150 = 175 (3 Simples + 1 Médio + 10 Complexos)

UUCP = 175 + 9 = 184

TCF = 0,6 + (0,1 x 36) = 0,96

EF = 1,4 + (-0,03 x 17) = 0,89

UCP = 184 x 3,8 x 1,04 = 157,21

Tempo médio de desenvolvimento ........... 3.144,2h - 56 dias úteis - ± 2,5 meses

Tempo máximo de desenvolvimento ........ 4.716,3h - 84 dias úteis - ± 4 meses

Tempo mínimo de desenvolvimento ......... 2.358,1h - 42 dias úteis - ± 2 meses

Isso considerando a equipe de 7 pessoas trabalhando 8h/dia. Ou seja, na melhor

estimativa estaríamos muito próximos do prazo máximo de desenvolvimento.

3.2.3 PPF - Planejar por Funcionalidade

Formar a Equipe de Planejamento

A Equipe de Planejamento será formada pelo Gerente de Desenvolvimento, pelos

Programadores-Líderes, pelo Especialista de Negócio e pelo cliente.

Determinar Seqüência de Desenvolvimento

Esta sequência é baseada em:

Dependência entre as funcionalidades em termos de classes envolvidas;

Distribuição de carga de trabalho entre os proprietários das classes;

Complexidade das funcionalidades a serem implementadas;

Adiantamento das atividades de negócio de alto risco ou complexidades; e

Prioridade do cliente.

Page 65: TCC FDD Jorge Bublitz

65

Segundo o cliente, suas prioridades são: 1 – Quadro comparativo do Eleitorado x

IBGE; 2 – Gráficos das Operações do Cadastro; e 3 – Gráficos e Relatórios do

Quantitativo de Transferências.

Por questão de dependência, definimos que faríamos primeiro a etapa Cadastro e

depois as demais de acordo com a necessidade do cliente.

Atribuir Atividades de Negócio aos Programadores-Líderes

A distribuição ficou de acordo com a Figura 16, onde PL-1 é o Programador-Líder 1

e PL-2 é o Programador-Líder 2.

Acompanhamento Permanente do Eleitorado

Nº Nome da Atividade de Negócio Prog. Líder

1 Quadro Comparativo Eleitorado x IBGE PL-1

2 Cadastros PL-2

3 Operações do Cadastro PL-2

4 Quantitativo de Transferências PL-1

Figura 16 - Atividades e seus Programadores-Líderes

Atribuir Classes aos Desenvolvedores

A distribuição das classes ficou assim (Tabela 5):

Tabela 5 - Classes e seus Proprietários

Classe Proprietário

INSCRICAO D1

TRANSFERENCIA D2

REVISAO D3

ELEITOR D3

MUNICIPIO D1

USUARIO D2

POSTO_ELEITORAL D1

Page 66: TCC FDD Jorge Bublitz

66

Onde D1, D2 e D3 são, respectivamente, Desenvolvedor 1, Desenvolvedor 2 e

Desenvolvedor 3.

Nesta etapa do projeto, o cliente surgiu com novas necessidades, ou seja, novas

funcionalidades.

Essas novas funcionalidades atenderiam a situação em que o eleitor se encontra

com inscrição cancelada em razão de sentença prolatada em processo de revisão

de eleitorado. O Código FASE para essa situação é o 469.

Demos esse nome (FASE 469) a essa nova atividade de negócio.

Com isso tivemos que atualizar a Lista de Funcionalidades e definir seus

Desenvolvedores, que ficou então assim (Figura 17):

Acompanhamento Permanente do Eleitorado

Nº Nome da Feature Desenv.

1 Quadro Comparativo Eleitorado x IBGE PL-1

1.1 Cadastrar as Estimativas do IBGE D3

1.2 Gerar Gráfico com Percentual Eleitorado x IBGE D1,D2

2 Cadastros PL-2

2.1 Cadastrar os Municípios Sede de Zona e seus Postos Eleitorais D1

2.2 Cadastrar os Municípios Vizinhos D1

2.3 Cadastrar Usuários do Sistema D2

2.4 Controlar o Acesso de Usuários D2

3 Operações do Cadastro PL-2

3.1 Gerar Gráfico de Operações Geral Anual D1,D2,D3

3.2 Gerar Gráfico de Operações Geral Mensal D1,D2,D3

3.3 Gerar Gráfico de Operações Comparativo Anual D1,D2,D3

3.4 Gerar Gráfico de Operações Comparativo Mensal D1,D2,D3

4 Quantitativo de Transferências PL-1

4.1 Gerar Gráfico de Transferências para um Munic. Por UF D2

4.2 Gerar Gráfico de Transferências para um Munic. Por Munic. Origem D2

4.3 Gerar Gráfico de Transferências por Bairro de Origem D2

4.4 Gerar Relatório de Detalhe da Lista de Transferência D1

4.5 Gerar Relatório de Histórico do Eleitor (RAE/FASE) D3

4.6 Gerar Documento para Revisão Eleitoral (Carta ao Eleitor) D3

4.7 Gerar Gráfico Geral - Comparação Ano Anterior D1

5 Fase 469 PL-2

Page 67: TCC FDD Jorge Bublitz

67

5.1 Gerar Gráfico de Gráfico Geral Anual D1

5.2 Gerar Gráfico de Gráfico Geral Mensal D2

5.3 Gerar Gráfico de Gráfico Comparativo Anual D3

Figura 17 – A nova Lista de Funcionalidades

3.2.4 Estimativas

A FDD não define uma prática “oficial” para estimativas. RETAMAL (2009) sugere

uma tabela de medidas não-lineares, baseadas em certo grau de dificuldade para

serem utilizadas em projetos FDD que façam uso dos arquétipos da UML em Cores,

a qual chamou de Tabela de 5 Pontos (Tabela 6).

Tabela 6 - Escala de 5 Pontos da FDD

Nº Estimado de Classes na Funcionalidade

Complexidade Esforço (Pessoa-Dia)

1 1 0,5

2 2 1

3 3 2

4 4 4

5 5 8 (ou mais)

Depois que estimamos o tempo de desenvolvimento de cada funcionalidade,

montamos o seguinte quadro de desenvolvimento (Figura 18):

Page 68: TCC FDD Jorge Bublitz

68

Figura 18 - Quadro de Desenvolvimento

Assim, estimamos a entrega do sistema para 17/08/2007.

Page 69: TCC FDD Jorge Bublitz

69

A fase de Concepção e Planejamento durou do dia 20 de junho a 29 de junho de

2007. O início da fase de Construção ficou marcado para o dia 02/07/2007.

Pacotes de Entrega

Os pacotes de entrega foram assim definidos (Figura 19):

Figura 19 - Plano de Desenvolvimento

Plataforma e Ferramentas de Desenvolvimento

Na Justiça Eleitoral o banco de dados utilizado é o Oracle. Assim esse foi o banco

de dados utilizado.

Desenvolvemos o sistema com o Borland Delphi – RAD Studio 2007. A plataforma

escolhida foi Web (Asp.Net 2.0). Para os relatórios e gráficos utilizamos o Crystal

Page 70: TCC FDD Jorge Bublitz

70

Reports XI. E para o controle de versões utilizamos o Borland StarTeam. Toda a

equipe já era familiarizada e treinada nessas ferramentas.

4. RESULTADOS

O software foi desenvolvido no prazo estipulado pela equipe. O cliente ficou muito

satisfeito com o resultado final3, superando as suas expectativas.

A forma como a FDD define o processo de desenvolvimento é muito agradável e

todos na equipe gostaram da experiência.

O fato de termos alguns prazos pré-estabelecidos não torna a metodologia rígida,

pois na maioria dos casos as funcionalidades foram concluídas antes do prazo.

A maneira como é dividida as tarefas e o fato das classes terem seus proprietários,

faz com que os desenvolvedores não fiquem presos a um só tipo de tarefa.

Antes, dividíamos o trabalho assim: o desenvolvedor 1 fará os cadastros, o

desenvolvedor 2 fará os relatórios e assim por diante.

Com a metodologia anterior, nós raramente conseguíamos desenvolver os projetos

dentro do prazo. Como não havia a definição certa de quem faria o que, o

desenvolvimento ia meio que “aos trancos e barrancos”.

Em nível gerencial, a FDD nos fornece alguns relatórios de acompanhamento,

dentre eles destaco o Parking Lot.

Utilizando a ferramenta freeware FDDViewer, é bem fácil gerar esse gráfico e assim

acompanhar o progresso de desenvolvimento.

3 Observação: Por questões de sigilo dos dados do Cadastro Nacional de Eleitores, bem como

normas definidas pelo próprio Código Eleitoral Brasileiro, não foi permitido que fossem mostradas aqui as telas do sistema desenvolvido.

Page 71: TCC FDD Jorge Bublitz

71

Veja na Figura 20 a visão do Parking Lot no dia 20 de julho de 2007:

Figura 20 - FddViewer e o Parking Lot

Page 72: TCC FDD Jorge Bublitz

72

5. CONCLUSÃO

A ênfase na definição de funcionalidades fornece os seguintes benefícios:

1. Como as funcionalidades são pequenas, os usuários podem descrevê-las

com maior facilidade, entender melhor como elas se relacionam umas com as

outras mais prontamente e revisá-las melhor quanto a erros ou omissões;

2. As funcionalidades podem ser organizadas em um agrupamento hierárquico

relacionado ao negócio;

3. Como uma funcionalidade é um incremento de software passível de entrega,

a equipe desenvolve características operacionais a cada uma ou duas

semanas;

4. As representações de projeto e código são mais fáceis de inspecionar; e

5. Planejamento de projeto, cronograma e monitoramento são guiados pela

hierarquia de funcionalidades e não por um conjunto de tarefas de engenharia

de software arbitrariamente adotado.

Só lembrando que “ágil” não é necessariamente “rápido”. Agilidade aqui tem a ver

com a flexibilidade para lidar com mudanças, obter resultados em produção, entre

outros. Ao adotar uma metodologia ágil para projetos de um ano não quer dizer que

vamos finalizar em seis meses ou algo assim.

Usar uma metodologia ágil não é para todos. Existem várias coisas para se ter em

mente se você decidir trilhar este caminho. Entretanto, eu acredito que estas novas

metodologias são amplamente aplicáveis e deveriam ser utilizadas por mais pessoas

que hoje consideram em fazê-lo.

No ambiente de hoje, onde a metodologia mais comum é a de codificar e consertar,

aplicar mais disciplina que o caos certamente irá ajudar.

A abordagem ágil tem a vantagem de ser um passo muito menos largo que usar

uma metodologia pesada. Aqui, uma das principais vantagens das metodologias

Page 73: TCC FDD Jorge Bublitz

73

ágeis é justamente sua leveza. Processos simples são muito mais propensos de

serem seguidos quando você está acostumado a eles, do que nenhum processo.

A adoção de uma Metodologia Ágil de Projetos como qualquer tecnologia, deve ser

acompanhada de uma revisão no comportamento, nas políticas, nas métricas e nas

regras da organização e das pessoas.

Page 74: TCC FDD Jorge Bublitz

74

6. REFERÊNCIAS BIBLIOGRÁFICAS

BIRRELL, Nick. A Practical Handbook for Software Development. 1.ed.

Cambridge University Press, 1985.

COAD, Peter; LEFEBVRE; Eric, DE LUCA, Jeff. Java Modeling In Color With UML:

Enterprise Components and Process. 1.ed. Prentice Hall, 1999.

JACOBSON, Ivar; BOOCH, Grady; RUMBAUGH, James. The Unified Software

Development Process. 1.ed. Indianápolis: Addison Wesley, 1999.

KARNER, Gustav. Resource Estimation for Objectory Projects. Objectory

Systems, 1993.

MANIFESTO for Agile Software Development, 2001. NET. Disponível em:

<http://www.agilemanifesto.org>. Acesso em: 28 Jan.2009.

MARTIN, Robert. Agile Software Development: Principles, Patterns, and

Practices. 1.ed. Prentice Hall. 2003.

NOGUEIRA, Juan C.; JONES, Carl e LUQI. Surfing the Edge of Chaos:

Applications to Software Engineering, Command and Control Research and

Technology Symposium, Naval Post Graduate School. 2000. NET. Disponível em:

<http://www.dodccrp.org/events/2000_CCRTS/html/pdf_papers/Track_4/075.pdf>.

Acesso em 26 Jan. 2009.

PALMER, Stephen R.; FELSING, John M. A Practical Guide to Feature-Driven

Development. 1.ed. Prentice Hall. 2002.

RETAMAL, Adail M. FDD – Feature-Driven Development, 2009. NET. Disponível

em: <http://www.heptagon.com.br/fdd>. Acesso em: 28 Jan. 2009.