Buscar

Modelos de Processo

Prévia do material em texto

Londrina 
2014 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
GUSTAVO MAFRA 
JHONATAN SOARES 
MATEUS FERRER 
RICARDO SUZUKI 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
CENTRO DE CIÊNCIAS EMPRESARIAIS E SOCIAIS APLICADAS 
ANALISE E DESENVOLVIMENTO DE SISTEMA 
MODELOS DE PROCESSO 
 
Londrina 
2014 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
MODELOS DE PROCESSO 
 
Trabalho de Modelos de Processo apresentado à 
Universidade Norte do Paraná - UNOPAR, como 
requisito parcial para a obtenção de média bimestral na 
disciplina de Engenharia de Software 
 
Orientador: Prof. Luiz Claudio Perini 
 
GUSTAVO MAFRA 
JHONATAN SOARES 
MATEUS FERRER 
RICARDO SUZUKI 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
SUMÁRIO 
1 INTRODUÇÃO ..................................................................................................... 3 
2 MODELO DE PROCESSO AGIL ......................................................................... 4 
2.1 CONCEITOS .................................................................................................... 4 
2.2 CARACTERISTICAS ........................................................................................ 4 
2.2.1 História do Desenvolvimento Ágil.................................................................. 5 
2.2.2 Agilidade ....................................................................................................... 6 
2.2.3 O Custo das Mudanças ................................................................................. 7 
2.3 CICLO DE VIDA ............................................................................................... 7 
2.4 APLICACAO ..................................................................................................... 8 
2.4.1 Casos de Sucesso ........................................................................................ 8 
2.5 EXEMPLOS DE MODELO ............................................................................. 10 
2.5.1 FDD ............................................................................................................. 10 
2.5.1.1 CONCEITO ................................................................................................. 10 
2.5.1.2 CARACTERISTICAS .................................................................................. 11 
2.5.1.3 CICLO DE VIDA .......................................................................................... 12 
2.5.1.4 APLICAÇÕES(NA PRATICA) ..................................................................... 15 
2.5.2 EXTREME PROGRAMMING (XP) .............................................................. 17 
2.5.2.1 CONCEITOS ............................................................................................... 17 
2.5.2.2 CARACTERISTICAS .................................................................................. 17 
2.5.2.3 CICLO DE VIDA XP .................................................................................... 18 
3 MODELO DE PROCESSO EVOLUCIONÁRIO .................................................. 25 
3.1 CONCEITO ..................................................................................................... 25 
3.1.1 CARACTERISTICAS .................................................................................. 25 
3.2 CICLO DE VIDA ............................................................................................. 26 
3.3 EXEMPLOS DE PROCESSO ......................................................................... 28 
3.3.1 MODELO DE MÉTODOS FORMAIS .......................................................... 28 
3.3.1.1 CONCEITOS ............................................................................................... 28 
3.3.1.2 CARACTERISTICAS .................................................................................. 28 
3.3.1.3 CICLO DE VIDA .......................................................................................... 29 
3.3.1.4 APLICACAO ............................................................................................... 30 
3.3.2 MODELO DE PROCESSO INCREMENTAL ............................................... 31 
3.3.2.1 CONCEITO ................................................................................................. 31 
3.3.2.2 CARACTERISTICAS .................................................................................. 33 
3.3.2.3 CICLO DE VIDA .......................................................................................... 33 
3.3.2.4 APLICAÇÃO ............................................................................................... 35 
3.3.3 MODELO DE PROCESSO CONCORRENTE ............................................ 35 
3.3.3.1 CONCEITO ................................................................................................. 35 
3.3.3.2 CARACTERISTICAS .................................................................................. 36 
3.3.3.3 CICLO DE VIDA .......................................................................................... 36 
3.3.3.4 APLICAÇÃO ............................................................................................... 37 
4 CONCLUSÃO .................................................................................................... 40 
REFERÊNCIAS ......................................................................................................... 41 
 3 
1 INTRODUÇÃO 
Um processo de software é um conjunto de atividades e resultados associados que 
produzem um produto de software. Portanto, um processo de software se dá pela 
estruturação de um conjunto de atividades que resultam num produto software. Um 
processo deve contribuir na redução de custos, aumento de qualidade e de 
produção. Um processo que não suporta esses objetivos não é considerado um 
processo adequado. 
Um processo de software pode conter diversas atividades. As principais atividades 
que normalmente todo processo possui são: especificação, projeto, implementação, 
validação, manutenção e evolução. As atividades constituem um conjunto mínimo 
para se obter um produto de software. 
Quando temos um processo definido temos a garantia de uma estabilidade, controle 
e organização. 
 4 
2 MODELO DE PROCESSO AGIL 
2.1 CONCEITOS 
 
A metodologia ágil (em inglês Agile Modeling, ou AG) surgiu no início da década de 
70 após o fracasso de alguns grandes projetos de software. A deficiência no 
gerenciamento das atividades, atrasos na entrega e sistemas que não refletiam a 
verdadeira necessidade do cliente eram características habitualmente atribuídas à 
metodologia tradicional. 
A existência de uma crise do software não foi um consenso entre os profissionais da 
área naquela época. Mas para tornar possível a solução dos problemas 
enfrentados, foi criada uma nova metodologia com uma abordagem bem 
diferenciada. 
Os métodos ágeis são um conjunto de práticas onde os princípios e valores são 
aplicados por profissionais de software no dia a dia e seguidos como guia. Não é um 
processo que define detalhadamente como criar um modelo, mas indica caminhos 
para obtenção de melhores resultados. 
A expressão “Métodos Ágeis” é conhecida há muito tempo, porém, apenas 
recentemente começou a se tornar popular no Brasil. Ser ágil geralmente é 
confundido com falta de controle e completa anarquia, quando na verdade, ter 
agilidade, ao contrário do que parece, exige bastante organização. 
O objetivo da Metodologia Ágil é acelerar o desenvolvimento do software através do 
desenvolvimento de versões mínimas. Dessa forma, as funcionalidades são 
desenvolvidas por partes,há uma interatividade direta com o cliente e os testes são 
realizados em paralelo ao ciclo de desenvolvimento. 
Agilidade envolve disciplina e trabalho coordenado, podendo tratar de projetos de 
vários segmentos e portes. Agilidade é também a habilidade de criar e responder a 
mudanças com respeito ao resultado financeiro do projeto em um turbulento 
ambiente de negócios. 
Em 2001, um grupo de profissionais da área de desenvolvimento de software se 
reuniu para discutir assuntos relacionados à agilidade. Como consequência desse 
encontro, foram definidas boas práticas para utilização dos Métodos Ágeis no 
gerenciamento de projetos. Essas práticas foram denominadas “Manifesto Ágil”. 
 
 
2.2 CARACTERISTICAS 
 
O desenvolvimento ágil possui princípios que o caracterizam, são eles: a satisfação 
do cliente, a entrega incremental, equipes de projetos pequenas e altamente 
motivadas, métodos informais, poucos artefatos de engenharia de software, 
simplicidade no desenvolvimento geral. No desenvolvimento ágil procura-se entregar 
um software funcional o mais cedo possível do que gastar horas, dias, semanas ou 
até meses com a análise e projeto de um software. Também temos a priorização de 
 5 
uma comunicação muito mais ativa e contínua entre os desenvolvedores e os 
clientes. 
Todos os envolvidos e interessados no projeto, tais como os gerentes, clientes e os 
usuários finais, trabalham em conjunto e de forma auto-organizável em uma equipe 
ágil que controla o seu próprio objetivo. Essa equipe sabe que é fundamental uma 
comunicação acelerada e colaboração constante entre todos os participantes, 
sempre tirando dúvidas e ajudando uns aos outros. 
Trabalhar de maneira ágil atualmente é extremamente importante para o sucesso de 
qualquer projeto devido aos ambientes modernos que estão em constante mudança 
de forma bastante acelerada. Cada vez mais se tem provado que o desenvolvimento 
ágil tem sido disparadamente a melhor alternativa para esses tipos de projetos 
entregando sistemas corretos e completos rapidamente. 
O desenvolvimento ágil tem atividades básicas como comunicação, planejamento, 
modelagem, construção e emprego. No entanto, elas são realizadas através de um 
conjunto pequeno de tarefas que impulsiona a equipe para o desenvolvimento e 
entrega de forma imediata. 
Diferente de outras abordagens o desenvolvimento ágil considera como um artefato 
apenas o incremento de software operacional que seja entregue na data combinada 
com o cliente. Ou seja, quaisquer outros documentos como casos de uso, modelos, 
projetos não são considerados entregas. Apenas o software operacional e 
funcionando. 
2.2.1 História do Desenvolvimento Ágil 
O movimento ágil surgiu em 2001 com Kent Beck e mais dezesseis experientes e 
renomados desenvolvedores, autores, e consultores na área de software. Esses 
autores assinaram o "Manifesto para o Desenvolvimento Ágil de Software". Esse 
manifesto ágil dizia que eles estavam desenvolvendo e ajudando outros a 
desenvolver software, desvendando formas melhores de desenvolvimento. Através 
deste trabalho os autores do manifesto passaram a valorizar o seguinte: 
Indivíduos e interações acima de processos e ferramentas 
Software funcional acima de documentação completa 
Colaboração dos clientes acima de negociação contratual 
Respostas a mudanças acima de seguir um plano 
Com isso, os autores manifestaram que embora os itens do lado direito tenha valor, 
os itens da esquerda são mais ainda valorizados. 
Portanto, o desenvolvimento ágil tenta de certa forma atacar os antigos princípios da 
engenharia de software e valorizar novas formas de desenvolver software. Em 
essência os métodos ágeis foram desenvolvidos a partir de um esforço para sanar 
as fraquezas que existia na engenharia de software convencional. Vale salientar que 
o desenvolvimento ágil procura sanar as fraquezas que existiam e não apagar todo 
conhecimento já existente. Pelo contrário, os princípios, conceitos e métodos 
continuam valendo, e muito, porém sendo adaptada aos desafios atuais. 
Por muitos anos as ideias por trás do desenvolvimento ágil são conhecidas pelos 
desenvolvedores, no entanto, somente há menos de quinze anos que elas realmente 
se consolidaram como um "movimento". 
Apesar dos benefícios oferecidos pelo desenvolvimento ágil ele não é indicado para 
todos os projetos, produtos, empresas, ambientes, contextos e pessoas. Em 
algumas oportunidades já vivenciei experiências de pessoas que simplesmente não 
 6 
conseguiram se adaptar ao desenvolvimento ágil. Em outras situações empresas 
também não conseguiram aderir ao ágil, muito devido aos próprios clientes não 
conseguirem se encaixar na nova filosofia proposta. O desenvolvimento ágil, por 
outro lado, é fortemente indicado para negócios que mudam rapidamente, ser ágil é 
fundamental para dar respostas ao ambiente de negócios. Atualmente as condições 
de mercado estão sempre mudando e muito rapidamente. Por isso os clientes 
precisam de respostas rápidas. As mudanças são caras, ainda mais quando são 
feitas sem controle e mal gerenciadas. A abordagem ágil tem como uma 
característica bastante forte reduzir os custos destas mudanças ao longo de todo o 
processo de software. 
2.2.2 Agilidade 
Segundo o autor Ivar Jacobson, muito conhecido na engenharia de software, 
agilidade não é somente uma palavra da moda quando descrevemos um moderno 
processo de software. Agilidade é quando uma equipe é rápida e capaz de 
responder apropriadamente as mudanças no software, ou mudanças ocorridas nos 
membros da equipe, ou ainda as mudanças que envolvem o surgimento de novas 
tecnologias, ou então quaisquer outras mudanças que causem impacto no produto 
em construção ou no projeto que cria o produto. Dessa forma, o suporte para 
mudanças deve ser incorporado em tudo o que fazemos em software. Ivar Jacobson 
ainda acrescenta que uma equipe ágil também sabe reconhecer que o software é 
desenvolvido por pessoas trabalhando em equipes e que as suas habilidades e 
capacidades em colaborar estão no cerne do sucesso do projeto. 
Portanto, podemos analisar que incorporar o espírito da mudança é o principal meio 
para sermos ágeis. No entanto, ser ágil não é somente responder às mudanças, 
devemos abraçar a filosofia que é proposta no manifesto que foi discutido na seção 
"História do desenvolvimento ágil". O manifesto ágil incentiva a estruturação e as 
atitudes em equipe tornando a comunicação mais fácil entre os membros da equipe, 
entre o pessoal ligado a tecnologia e outras áreas, entre os desenvolvedores e os 
gerentes. O manifesto Também enfatiza a entrega rápida do software operacional, a 
diminuição da importância dos artefatos, assumir o cliente como parte da equipe de 
desenvolvimento de software, reconhecer que planejamento tem limites quando o 
negócio é mutável e dessa forma o planejamento também deve ser flexível o 
suficiente para acomodar essas mudanças. 
Por fim, salienta-se que a agilidade pode ser aderida em qualquer processo de 
software. No entanto, devemos considerar que a equipe deve ser adaptada e 
alinhada a essa nova realidade. Uma situação que ocorre na maioria dos projetos 
que passam a ser ágeis, deixando assim outras formas tradicionais de 
desenvolvimento, é a tentativa de tornar o projeto totalmente ágil em poucos dias ou 
semanas. Vivenciei projetos que fracassaram ao tentar essa abordagem 
desesperada de se tornar ágil. O ideal é que a agilidade seja gradativamente 
empregada ao projeto procurando inicialmente fazer um planejamento ágil de 
entregas curtas ao cliente e de forma incremental, dividindo as tarefas com os 
membros da equipe, depois tentando eliminar artefatos que não são essenciais aos 
projetos, e assim por diante. O ideal é aos poucos fazer a equipe entender como 
funciona o desenvolvimento ágil, sempre aderindo aos poucos. De preferência seria 
interessante termos um profissionalmais experiente com o desenvolvimento ágil 
 7 
para que ele possa instruir a equipe a começar e dar prosseguimento até que a 
equipe obtenha o amadurecimento necessário. 
2.2.3 O Custo das Mudanças 
Conforme os estudos realizados durante décadas afirma-se que os custos das 
mudanças aumentam cada vez mais conforme o avanço do projeto. Quando 
estamos na fase de requisitos e precisamos adicionar novas funcionalidades a um 
requisito ou alterar requisitos já existentes é simples e barato efetuá-las. No entanto, 
se já estamos testando a nossa aplicação e o cliente requisita uma mudança que 
afetará diversos componentes, requerendo novos testes, mudanças na arquitetura, 
etc., teremos um custo muito maior. Dessa forma, os custos sempre crescem 
rapidamente conforme a evolução do projeto. 
Uma das grandes características dos métodos ágeis é que se temos um processo 
ágil bem elaborado, esse custo de realizar uma mudança é menor. O segredo desse 
custo menor nas mudanças é que os métodos ágeis trabalham com entregas 
incrementais, os testes são contínuos e a programação é realizada em pares. Todas 
essas praticas e outras desenvolvidas nos métodos ágeis contribuem para essa 
mudança não ser tão significativa. Há um grande número de publicações e 
experiências compartilhadas na área de desenvolvimento de software que os 
métodos ágeis reduzem de forma bastante significativa os custos das alterações. A 
minha experiência que já vivenciou os dois lados, métodos tradicionais e métodos 
ágeis, também confirma essa afirmação. Além dos métodos ágeis mudarem a 
filosofia de que não deveríamos mexer em nada e um contrato deve ser seguido até 
o fim, também temos as práticas que se aplicadas tendem a ajudar de forma 
bastante significativa o impacto dessas mudanças. 
 
2.3 CICLO DE VIDA 
 
Para termos agilidade devemos seguir os 12 princípios estabelecidos pela Agile 
Allince, são eles: 
 
 A prioridade principal é sempre satisfazer o cliente por meio de entregas 
rápidas e contínuas de software operacional. 
 Devemos sempre acolher os pedidos de modificações, mesmo que estes 
sejam atrasados. Os processos ágeis se aproveitam das mudanças como 
uma vantagem competitiva na relação com o cliente. 
 Entregue software funcional de forma frequente, seja em algumas semanas 
ou alguns meses, dando preferência para intervalos mais curtos. 
 Os responsáveis pela área comercial e os desenvolvedores devem trabalhar 
em conjunto diariamente ao longo de todo projeto. 
 Sempre devemos construir projetos com indivíduos motivados. Devemos dar 
a eles o ambiente e apoio necessário, além de confiarmos neles para ter o 
trabalho feito. 
 A conversa aberta e de forma presencial é o método mais eficiente e efetivo 
de transmitir as informações para dentro de uma equipe de desenvolvimento. 
 8 
 A principal medida de progresso do projeto é o software em funcionamento. 
 Os processos ágeis promovem desenvolvimento sustentável, ou seja, todos 
os envolvidos devem estar capacitados a manter um ritmo constante 
indefinidamente. 
 A atenção contínua com a excelência técnica e com bons projetos aumenta a 
agilidade. 
 Manter a simplicidade é considerado essencial. 
 As melhores arquiteturas, requisitos e projetos estão ligados às equipes auto-
organizáveis. 
 A equipe se autoavalia, em intervalos regulares, no intuito de se tornarem 
cada vez mais eficientes. Dada essa autoavaliação a equipe procurar formas 
de ajustar o seu comportamento de acordo com isso. 
 
Certos modelos de processo ágil ignoram alguns princípios, outros atribuem um 
peso maior a alguns princípios. No entanto, os princípios definem um espírito ágil 
que é mantido em cada um dos modelos de processo existentes atualmente. 
 
2.4 APLICACAO 
2.4.1 Casos de Sucesso 
Svensson e Höst nos seus estudos publicados relataram os resultados da adoção do 
desenvolvimento ágil em uma organização de grande porte que tem cerca de 1.500 
pessoas. Através de um projeto piloto que durou oito meses constatou-se que 
adoção dos métodos ágeis teve um efeito bastante positivo tanto pelo ponto de vista 
da empresa quanto do cliente. 
Ilieva também relatou sua experiência com desenvolvimento ágil e desenvolvimento 
tradicional onde foram utilizados dois projetos similares em tamanho, esforço e 
tecnologia adotada. Desenvolveu-se um software primeiramente utilizando um 
projeto de desenvolvimento baseado em um modelo tradicional e depois utilizando 
desenvolvimento ágil. Constatou-se que houve um aumento de produtividade em 
41,23% com redução de esforço homem/hora de 11,45% e redução de defeitos em 
13,33%. Ou seja, trabalhou-se menos, produziu-se mais e ainda tivemos uma 
redução dos erros encontrados. 
Paulo Cheque Bernardo e Fabio Kon também relataram como foi a experiência em 
utilizar métodos ágeis na re-implementação de um sistema de grande porte 
desenvolvido para Universidade de São Paulo (USP). O sistema controla 
aproximadamente 25 mil alunos matriculados e outorga cerca de 5 mil títulos por 
ano. Além disso, o sistema também controla todos os dados do programa de pós-
graduação da universidade e todo o histórico da vida acadêmica dos alunos. Com o 
intuito de modernizar os antigos sistemas que mantinham todos esses dados criou-
se um novo sistema desenvolvido através de práticas de métodos ágeis de 
desenvolvimento. 
O desenvolvimento do novo software se deu de forma incremental e seguindo a 
filosofia dos métodos ágeis. Entre as práticas adotadas tem-se: 
 9 
 Planejamento e Fases pequenas: As iterações eram curtas com pequenas 
fases de desenvolvimento. Foi utilizado o software XPlanner para auxiliar no 
planejamento. 
 
 Design simples: O sistema foi bem modularizado e sem flexibilidade 
desnecessária, como enfatizado no desenvolvimento ágil. Além disso, 
técnicas como programação orientada a objetos, reflexão e AOP ajudaram no 
desenvolvimento de um design simples. 
 
 Testes: Ferramentas como JUnit, TestNG, Selenium, Emma, Ant e 
CruiseControl auxiliaram no desenvolvimento dos testes de unidade, 
aceitação, segurança e desempenho que são executadas várias vezes por 
dia. 
 
 Refatoração: Devido a segurança fornecida pelos testes automatizados o 
sistema recebe diariamente várias refatorações, algumas envolvendo grandes 
quantidades de código. A IDE Eclipse também fornece auxilio para fazer as 
refatorações no sistema. 
 
 Programação em pares: Os programadores trabalham em pares de modo a 
espalhar o conhecimento do projeto por toda a equipe. 
 
 Padronização e Propriedade coletiva do código: Ferramentas como 
CheckStyle auxiliam na criação e verificação automática de padrões de estilos 
de código. Todos os programadores trabalham em vários módulos do projeto 
sem restrições. 
 
 Integração contínua: O sistema ganhou um repositório único gerenciado pelo 
SVN. Todos os desenvolvedores podem trabalhar em qualquer parte do 
código e o processo de integração das mudanças é simples e ágil. 
 
 Cliente junto aos desenvolvedores: O feedback dos usuários é sempre muito 
rápido e com isso as correções e refinamentos são diariamente colocadas em 
produção. O contato permanente dos desenvolvedores com os clientes 
também permitiram um contato mais direto e frequente, diminuindo a 
burocracia na coleta de requisitos. 
 
Os números relatados também é algo que impressionado neste projeto da USP. O 
sistema começou a ser desenvolvido em maio de 2006 e entrou em produção em 
julho do mesmo ano. A equipe tinha uma mescla de dois programadores sênior e 
dois estagiários sendo que alguns possuíam maior conhecimento das tecnologias e 
outros tinham uma maior familiaridade com as regras de negócio e com os códigos 
já existentes nos antigos sistemas. O sistema possui cerca de 15 mil linhas de 
código com aproximadamente 100 classes Java e 50 arquivos JSP. Emrelação aos 
testes automatizados há cerca de 5 mil linhas de código de teste divididos em 50 
classes. Os testes são executados várias vezes ao dia. 
Esses são apenas alguns dos casos de sucessos encontrados na indústria de 
software. Esses estudos mostram o quanto o desenvolvimento ágil pode fazer a 
diferença em pequenos, médios e grandes projetos. É sempre interessante tirarmos 
 10 
o maior proveito possível dessas experiências até como forma de beneficiar o nosso 
projeto com práticas que já deram certo em outros projetos. 
 
2.5 EXEMPLOS DE MODELO 
2.5.1 FDD 
 
2.5.1.1 CONCEITO 
 
Entre as metodologias ágeis que existiam antes do manifesto ágil, o FDD “Feature 
Driven Developement” é uma delas. Concebido originalmente por Jeff de Luca, o 
FDD surgiu em Singapura, entre os anos de 1997 e 1999 com base no método Coad 
(Criado por Peter Coad – 1980/1990) e nos processos interativos e lean já utilizados 
por Jeff de Luca. 
O FDD, assim como a teoria de sistemas afirma, entende que a soma das partes é 
maior do que o todo. Desta forma, apesar de criar um modelo abrangente baseado 
no todo que será desenvolvido, esta fase inicia-se com o detalhamento do domínio 
do negócio com divisão de áreas que serão modeladas. O modelo só está pronto 
quando todos da equipe estiverem de acordo, o planejamento é feito com base na 
lista de funcionalidades. Se fossemos trabalhar com FDD em conjunto com o Scrum, 
a lista de funcionalidades seria utilizada no backlog de produtos, como histórias de 
usuários a serem desenvolvidas. 
Peter Coad e seus colegas criaram um modelo de processo prático para a 
engenharia de software orientada a objetos chamada Desenvolvimento Dirigido a 
Funcionalidade ou Feature Driven Development (FDD). Após o trabalho de Coad 
surgiu outro modelo de processo que aperfeiçoou o trabalho desenvolvido. Este 
trabalho foi realizado por Stephen Palmer e John Felsing que descreveram um 
processo ágil adaptativo que pode ser aplicado em projetos de médio e grande 
porte. 
 
Seguindo as outras abordagens ágeis, o FDD também evidencia a colaboração 
entre as pessoas da equipe, gerencia os problemas e complexidades de projetos 
utilizando a decomposição baseada em funcionalidades que é seguida pela 
integração dos incrementos de software e por fim também enfatiza a comunicação 
de detalhes técnicos usando formas verbais, gráficos e texto. Além disso, o FDD 
enfatiza as atividades de garantia da qualidade por meio da estratégia de 
desenvolvimento incremental, inspeções de código e de projeto, auditorias, coleta de 
métricas e o uso de padrões para análise, projeto e construção. 
 
O FDD preconiza que a funcionalidade é uma função valorizada pelo cliente passível 
de ser implementada em até duas semanas ou menos. Essa ênfase na definição de 
funcionalidades tem como benefícios uma descrição mais fácil das funcionalidades 
 11 
por parte do usuário, uma melhor compreensão como elas se relacionam entre si e 
uma melhor revisão das ambiguidades, erros ou omissões. Isso ocorre porque elas 
são pequenas, formadas em pequenos blocos. Além disso, outro benefício é que as 
funcionalidades podem ser organizadas em um agrupamento hierárquico 
relacionados com o negócio, pode ser entregue a cada duas semanas, o projeto e o 
código são mais facilmente inspecionados e o planejamento, cronograma e 
acompanhamento do projeto são guiados pela hierarquia de funcionalidades ao 
invés de tarefas de engenharia de software. 
 
Coad e seus colegas sugerem os seguintes modelos para definirmos uma 
funcionalidade: 
 
<ação> o <resultado> <por|para quem|de|para que> um <objeto> 
 
 Onde objeto é "uma pessoa, local ou coisa". 
 
 Um exemplo de funcionalidades poderia ser: 
 
 Adicione o produto ao carrinho 
 
 Mostre as especificações técnicas do produto 
 
O FDD também define cinco processos, são eles: Desenvolver um Modelo Geral, 
Construir uma Lista de Funcionalidades, Planejar por Funcionalidades, Projetar por 
Funcionalidade, Desenvolver por Funcionalidade. 
 
Um aspecto interessante do FDD em relação a outros métodos ágeis é que ele dá 
maior ênfase às diretrizes e técnicas de gerenciamento de projetos do que outros 
métodos ágeis disponíveis. 
 
 
2.5.1.2 CARACTERISTICAS 
 
O FDD busca o desenvolvimento por funcionalidade, ou seja, por um requisito 
funcional do sistema. É pratico para o trabalho com projetos iniciais ou projetos com 
codificações existentes. Apesar de ter algumas diferenças entre o FDD e o XP, é 
possível utilizar as melhores práticas de cada metodologia. O FDD atua muito bem 
em conjunto com o Scrum, pois o Scrum atua no foco do gerenciamento do projeto e 
o FDD atua no processo de desenvolvimento. 
Assim como acontece na metodologia XP, o FDD faz uso de teste de software. 
Desta forma é possível utilizar TDD, aliás, é indicada a utilização deste para manter 
a qualidade do software. 
 
 
 12 
2.5.1.3 CICLO DE VIDA 
O Feature-Driven Development (FDD) é um processo de 
desenvolvimento orientado por funcionalidades. Auxilia no 
desenvolvimento e gerenciamento da produção de software e possui 
duas fases distintas e cinco processos bem definidos, conforme 
HEPTAGON (2007). 
Suas fases são: 
• Concepção e Planejamento 
• Construção 
 
E possui cinco processos: 
 
DMA (Desenvolver um Modelo Abrangente): esta é a fase 
inicial, em que é desenvolvida a visão geral do produto, quando a equipe 
deverá começar a ser formada, a análise de domínio é produzida, assim 
como o estudo da documentação utilizada, desenvolvimento de modelos 20 
 e refinamentos destes. Ao final alguns diagramas como de classe e de 
seqüência estarão disponíveis. 
CFL (Construir a lista de Funcionalidades): neste 
Processo, a equipe irá desenvolver a lista de funcionalidades do software, 
as funcionalidades listadas são criadas a partir de valores que sejam 
gerados ao cliente e não valores técnicos. 
PPF (Planejar por Funcionalidades): neste as 
funcionalidades são estudadas, são avaliadas as dependências entre 
classes, organizadas em seqüência de desenvolvimento e as equipes de 
desenvolvimento já têm atribuídas suas atividades. O esforço para 
desenvolvimento já é identificado neste processo. 
DPF (Detalhar por Funcionalidades): aqui é realizado o 
trabalho para definição dos pacotes que atenderão as funcionalidades 
planejadas. Neste processo também é feito um refinamento dos modelos 
tanto de classe como de seqüência, além de uma inspeção nos 
documentos gerados. 
CPF (Construir por Funcionalidades): este processo é o de 
transformar tudo em código, software, até gerar o pacote de instalação, 
passando por inspeções, testes antes de chegar à versão final. 21 
 
 
 13 
 
Figura 1:Feature-Driven Development (HEPTAGON, 2007) 
 
É importante observar que o FDD é voltado ao uso de 
análise orientada a objetos. O modelo gráfico, apresentado na figura acima, 
apresenta as fases e os processos: 
• Estrutura FDD 
• Requisitos 
• Fase de concepção (DMA,CFL,PPF) 
• Construção (DPF, CPF) 
• Produto final. 
 
Com base na lista de funcionalidades, deve-se planejar por funcionalidade, mas este 
planejamento é incremental. Isto em conjunto com o Scrum, deve ser analisado 
como etapa de desenvolvimento do incremento, então este planejamento é feito com 
base no que será desenvolvido naquele incremento. 
Vamos novamente ao Scrum, separando o que será feito na Sprint. Colocamos no 
backlog da Sprint. O que está no backlog da sprint são funcionalidades que serão 
desenvolvidas durante a sprint (que pode ser de duas a quatro semanas), estas 
tarefas são então planejadas com maior rigor, neste ponto, temos então o 
planejamento incremental, ou seja, planejamos apenas o que vamos desenvolver. 
Nesta etapa os envolvidos no processo resumem-se apenas à equipe, ou seja, os 
desenvolvedores, analistas,testadores, etc., que vão atuar no processo. Eles devem 
selecionar os itens com base no tempo que eles possuem e nas qualificações atuais 
da equipe. 
Após o planejamento, é feito o detalhamento, nesta fase é de extrema importância 
que o desenho esteja de acordo com o que o cliente deseja, então é mantido contato 
constante com o cliente, como em todas as metodologias ágeis. 
Esta documentação é a base para o desenvolvimento, não deve-se perder tempo 
com documentação que não será utilizada, mas é necessário documentar. 
Posteriormente inicia-se a fase de desenvolvimento, esta fase é a etapa de 
desenvolvimento e teste real. 
 14 
O desenvolvimento também é incremental, e indica-se a utilização de testes do início 
ao fim do processo, além da utilização de integração continua. 
Um ponto que diverge do XP é que no FDD é incentivado o desenvolvedor como 
único responsável pelo módulo que este desenvolve, já no XP, o código é 
comunitário. 
 
 
Figura 2: Integração contínua 
 
A utilização da integração continua permite que a equipe esteja em contato 
constante com o cliente, tornando o processo ágil e com entregas constantes. 
Como cada fase apresentada acima é específica e curta, e as fases se completam, 
são necessários relatórios para manter o controle, para analisar a quantidade de 
recursos que estão sendo desenvolvidos, semelhante ao burndow e o burnup do 
Scrum. 
Segundo a metodologia, o percentual de tempo gasto em cada etapa é: 
Levantamento do domínio da aplicação = 1%; 
Projeto = 40%; 
Inspeção do projeto = 3%; 
Desenvolvimento = 45%; 
Inspeção do código = 10%; 
Integração = 1%. 
Além disso, o FDD possui as chamadas melhores práticas que indicam boas práticas 
ao desenvolver com o FDD, são elas: 
Modelagem Orientada a Objetos do Domínio; 
Desenvolvimento por funcionalidade; 
Classe proprietária, ou seja, a unidade é feita individualmente, evitando-se assim 
conflitos na equipe; 
Equipes de recursos: são equipes pequenas, destinadas a desenvolver recursos 
necessários ao projeto, de forma secundária; 
Inspeção é realizada constantemente para garantir a boa qualidade do código e do 
projeto; 
Gerenciamento de configuração; 
Integração contínua para demonstrar constantemente as funcionalidades ao cliente 
e; 
Visibilidade de progressos e resultados. 
 
 15 
2.5.1.4 APLICAÇÕES(NA PRATICA) 
 
FDD e Desenvolvimento Web 
 
TAMANHO DO PROJETO 
Como regra geral, FDD é extremamente eficaz em grandes projetos com lógica de 
negócios complexos. Não é tão eficaz em pequenos projectos com pouca lógica de 
negócios. Isso não quer dizer que você não pode usar elementos do FDD para 
ajudar a gerenciar seus projetos melhor, mas é muito difícil de fazer cumprir código e 
revisões de projeto (ver processos 4 e 5), quando você tiver apenas um 
desenvolvedor no projeto! 
TECNOLOGIA 
Não há nada no FDD que dita o que a tecnologia de usar. No entanto, o simples fato 
de que o primeiro processo é objeto principalmente modelagem significa que se você 
não estiver usando uma tecnologia de OO, usando FDD não vai ser simples. Dito 
isto, eu tenho usado com sucesso os aspectos da FDD em projetos web usando 
uma variedade de tecnologias web orientado como ASP, JSP e PHP. 
PESSOAS 
A chave para o FDD é um processo, a chave para processar alguém está tendo um 
grande modelador objeto e um grande gerente de projeto. Nota: não importa o 
processo que você usa, você precisa de pessoas boas. No processo, incluindo FDD 
irá ajudá-lo se você não tem as pessoas certas. Se você está pensando em FDD 
para ajudá-lo a resolver este problema, pense novamente. 
O QUE NÃO COBRE 
Você precisa estar bem ciente de que FDD, citando Fred Brooks, não é uma bala de 
prata. Não abrange todos os aspectos do desenvolvimento. Há muitos aspectos de 
um projeto padrão que você ainda precisa de gerir fora do que FDD pode 
ajudar. Estes aspectos incluem 
Levantamento de requisitos 
Design de interface 
Prova 
Desenvolvimento 
UM PONTO DE PARTIDA 
Tentando implementar um novo processo é difícil, independentemente do processo 
que você escolher. Não só você tem que aprender o processo, você também tem 
que produzir um resultado ao mesmo tempo. Esteja preparado para uma certa 
confusão e dificuldade que anda de mãos dadas com a tentativa nada de novo. Dito 
isto, a estrutura do FDD pode ser facilmente adaptado para mover-se gradualmente 
a partir de seu processo existente para uma abordagem FDD. 
O que eu encontrei para ser uma maneira eficaz de começar é olhar para projectos 
de uma forma FDD - ou seja, começar a pensar em projetos como um conjunto de 
características. Esta abordagem pode ser utilizada em quase qualquer projecto, 
independentemente do tamanho ou da tecnologia. 
Definir um projeto como uma lista de recursos ou funções 
Em algum ponto, cada projeto precisa ser definido por aquilo que ele faz ou o que a 
funcionalidade que ele proporciona. Ao listar todas essas funções (ou recursos) do 
sistema, você está definindo o que é que você precisa para construir para concluir o 
projeto. 
 16 
A chave é certificar-se você usar a mesma linguagem que o cliente, não use termos 
técnicos que o cliente não vai entender porque eles não se importam se você 
construir. Se eles entendem o recurso, eles se preocupam com se ele tem ou não foi 
construído. 
 
Plano de desenvolvimento com base em características 
Uma vez que você sabe o que você tem que construir, é uma tarefa bastante 
simples para trabalhar fora da ordem. Como alguns recursos estarão dependentes 
dos outros, eles têm claramente a ser construído. Seja qual for o fim, agora você tem 
um plano de desenvolvimento que você usa para acompanhar o seu progresso. 
Acho que é útil para obter o principal desenvolvedor para fornecê-lo com a estrutura 
da ordem e tempo para o plano de desenvolvimento, dessa forma, eles se 
comprometem com o plano e eu temos algo para voltar para quando as coisas não 
estão acontecendo quando é suposto para. 
 
Reuniões de status do projeto semanal com base em características 
concluídas 
Se você tem uma lista do que precisa ser feito e quando, é fácil então acompanhar o 
progresso e relatório de volta para o cliente. É incrível como ela é eficaz para ser 
capaz de dizer a um cliente que recursos tenham sido concluídas e que você está 
trabalhando atualmente. 
Como gerente de projeto, você também descobrir sobre problemas muito cedo no 
pedaço e ter a chance de enfrentá-los antes que se tornem um grande problema. 
 17 
2.5.2 EXTREME PROGRAMMING (XP) 
2.5.2.1 CONCEITOS 
 
O método XP, talvez seja o mais usado dos métodos de desenvolvimento ágeis. 
Este método foi escrito por Kent Beck e recentemente foi refinado, esta variação foi 
denominada IXP (Industrial XP) que tende a ser o processo ágil para grande 
organizações usarem. 
Beck definiu um conjunto de cinco valores para estabelecer as bases para todo 
trabalho realizado como parte da XP. Comunicação, simplicidade, 
feedback(realimentação ou retorno), coragem e respeito. Estes valores são usados 
como um direcionador das atividades específicas da XP. 
Para conseguir uma comunicação efetiva entres os envolvidos no desenvolvimento 
do software, a XP enfatiza a colaboração estreita entre clientes e desenvolvedores, 
o estabelecimento de metáforas eficazes para comunicar conceitos importantes, 
feedback contínuo e evitar documentação volumosa. 
Para alcançar a simplicidade a XP restringe os desenvolvedores a projetar apenas 
as necessidades imediatas. O intuito é facilitar a implementação do código. Se o 
projeto tiver que ser melhorado, ele poderá ser refabricado futuramente. 
 
2.5.2.2 CARACTERISTICAS 
O feedback provém de três fontes: software implementado, cliente e outros 
membros da equipe de software. Através da elaboração e implementação de uma 
estratégia eficaz, o software propicia um feedback para a equipe ágil. No métodoXP, 
todos os requisitos são expressos como cenários, que são implementados 
diretamente como uma serie de tarefas. Os programadores trabalham em pares e 
desenvolvem testes para cada tarefa antes da escrita do código, assim exercitando 
cada operação de acordo com sua funcionalidade especificada. Sempre que um 
incremento é entregue para o cliente, os casos de uso são usados para base de 
testes de aceitação e gera uma forma de feedback. Conforme o surgimento de 
novas necessidades, rapidamente a equipe informa o cliente sobre o impacto nos 
custos e no cronograma do desenvolvimento do software. 
Um preceito fundamental na engenharia de software é que você deve projetar para a 
mudança, antecipando melhorias futuras para o software e projeta-lo para que seja 
facilmente implementado. Beck afirmou este preceito, apontando que certas praticas 
da XP exige coragem, uma palavra melhor seria disciplina. A maioria das equipes de 
software argumentam que “projetar para o amanhã” poupará tempo e esforços a 
longo prazo. Uma equipe XP ágil deve ter disciplina (coragem) para projetar hoje, 
reconhecendo que as necessidades futuras podem mudar dramaticamente exigindo, 
consequentemente, substancial retrabalho em relação ao projeto e ao código 
implementado. 
 
 18 
2.5.2.3 CICLO DE VIDA XP 
A XP emprega uma abordagem orientada a objetos como seu paradigma de 
desenvolvimento preferido, envolvendo um conjunto de regras e práticas constantes 
no contexto de quatro atividades metodológicas . 
Planejamento – Esta atividade se inicia com a pratica de ouvir, que é uma atividade 
de levantamento de requisitos que capacita os membros da equipe que irá 
desenvolver o software a entender o ambiente de negócio e possibilitando observar 
os resultados solicitados, fatores principais e funcionalidades. 
A atividade de “ouvir” conduz a criação de “histórias” que descrevera requisitos para 
a construção do software. Cada história é escrita pelo cliente e é colocada em uma 
ficha. O cliente atribui uma valor (uma propriedade) à história baseando-se no valor 
do negócio global do recurso ou função. Então a equipe de software avaliam e 
atribuem um custo que é baseado em semanas de desenvolvimento. Se for avaliado 
em mais de três semanas é solicitado ao cliente dividir a história, ocorrendo uma 
nova atribuição de custo. É importante notar que novas histórias podem ser escritas 
a qualquer momento. 
Clientes e desenvolvedores decidem juntos como agrupar historias para o próximo 
incremento a ser desenvolvido. Assim chegam a uma concordância sobre quais 
histórias serão incluídas, data de entrega e outras questões. A equipe ordena as 
histórias em uma das três formas: (1) Todas serão implementadas imediatamente. 
(2) As histórias de maior valor serão deslocadas para cima e serão implementadas 
primeiro. (3) As histórias de maior risco serão deslocadas para cima e serão 
implementadas primeiro. 
Depois da entrega do primeiro incremento, a equipe calcula a velocidade do projeto, 
este calculo é utilizado para estimar as datas de entrega e o cronograma para as 
versões subsequentes e determinar se foi assumido um compromisso exagerado 
para todas as histórias. Caso tenha ocorrido o exagero, o conteúdo dos incrementos 
é modificado ou as datas de entregas são alteradas. 
Projeto – O projeto XP adota um princípio que é preferível sempre um projeto 
simples do que uma representação mais complexa. 
A XP encoraja o uso de cartões CRC como mecanismo eficaz para pensar sobre o 
software em um contexto orientado a objetos. Estes cartões identificam e organizam 
as classes orientadas a objetos relevantes para o incremento do software corrente. 
Se for encontrado uma problema difícil no projeto, é recomendado imediatamente a 
criação de um protótipo operacional dessa parte do projeto (Solução Pontual). O 
objetivo é reduzir o risco para quando a verdadeira implementação iniciar e validar 
as estimativas originais para a história contendo o problema de projeto. 
Como o projeto XP não usa praticamente nenhuma notação e produz poucos 
artefatos, o projeto é visto como algo transitório que pode ser continuamente 
modificado. É importante lembrar que o esforço necessário para a refabricação pode 
aumentar à medida que o tamanho de uma aplicação cresça. 
Codificação – Depois de desenvolvidas as histórias e o trabalho preliminar de 
elaboração ter sido feito, a equipe passa a desenvolver uma serie de testes de 
unidades que exercitarão cada uma das histórias a ser inclusas na incrementação 
corrente. Estando o código completo, este pode ser testado em unidade 
imediatamente e gerar feedback para os desenvolvedores. 
Um conceito-chave na atividade de codificação é a programação em dupla. Isso 
fornece um mecanismo para resolução de problemas em tempo real e garantia da 
 19 
qualidade em tempo real. Cada pessoa assume um papel ligeiramente diferente, 
enquanto um poderia pensar nos detalhes da codificação o outro assegura que 
padrões de codificação sejam seguidos. 
Conforme a dupla completa o trabalho, o código é integrado ao trabalho de outros 
por uma equipe de integração ou pela própria dupla. 
Testes – Os testes de unidade criados devem ser implementados usando-se uma 
metodologia que os capacite a ser automatizados. Isso encoraja uma estratégia de 
testes de regressão em que o código for modificado. 
Os testes de integração e validação do sistema podem ocorrer diariamente. Isso dá 
a equipe uma indicação contínua do progresso e também permite lançar alertas logo 
no início, caso as coisas não andem bem. 
Os testes de aceitação, são especificados pelo cliente e mantêm o foco nas 
características e na funcionalidade do sistema total que são visíveis e que podem 
ser revista pelo cliente. 
 
 
2.5.3 LEAN 
2.5.3.1 Conceito 
O termo Lean foi utilizado pela primeira vez em 1990, dando destaque ao sistema de 
produção aplicado pela Toyota na década de 1960 para construção de automóveis 
(POPPENDIECK e POPPENDIECK, 2011). 
Sua aplicação em desenvolvimento de software surgiu em conjunto com o Manifesto 
Ágil (BECK, BEEDLE, et al., 2001) e das metodologias que foram aplicadas a partir 
dessa abordagem. Os princípios discutidos pelo Lean deixam claro o foco na 
necessidade do cliente e contrastam, em alguns momentos, com conceitos básicos 
defendidos em outros modelos da Engenharia de Software. 
São sete os princípios defendidos pelo Lean para desenvolvimento de software 
(POPPENDIECK e POPPENDIECK, 2011), descritos no Quadro 2. Dentre eles, 
podem-se destacar a eliminação de desperdícios e a entrega rápida de parte do 
produto, discutidos e enfatizados por diversos trabalhos. 
 
2.5.3.2 Características do Lean 
 Eliminar o desperdício 
 Fortalecer o time 
 Entregas rápidas 
 Otimizar o todo 
 Construir qualidade 
 Adiar decisões 
 Amplificar conhecimento 
 
 
 20 
São considerados como desperdícios: 
 Trabalho parcialmente feito – O famoso “está pronto, só falta testar”. É 
fundamental que as equipes criem uma boa definição de “pronto/done” para 
evitar retrabalhos em itens teoricamente finalizados. 
 Processos extras – Documentação “pesada” exigida que não agrega valor ao 
software final. 
Fortalecer o time 
Criar um ambiente onde a equipe trabalhe de forma auto-organizada e auto-dirigida, 
evitando micro-gerenciamento. 
Entregas rápidas 
Maximizar o ROI (Return Of Investiment) do projeto, entregando software de valor de 
forma rápida e contínua. 
 Otimizar o todo 
Entender que o software concluído é muito mais que a soma das partes entregues e 
verificar como ele está alinhado com os objetivos da empresa. 
 Construir qualidade 
Garantir qualidade no desenvolvimento do software utilizando técnicas como: 
Teste unitário através de TDD : Escrever o teste / teste falho / escrever o código 
para passar o teste 
Fatoração: Melhorar e refinar o código escrito,evitando manter legados de débitos 
técnicos e fazendo com o que o software continue se comportando da mesma 
maneira. 
Integração contínua: Compilação automática do repositório de código, verificando se 
o código inserido não prejudicou demais funcionalidades do software. 
 Adiar decisões 
Deixar as decisões e comprometimentos para o último momento responsável, 
permitindo coletar informações e ter experiências para fortalecer a tomada de 
decisão. 
Amplificar conhecimento 
Priorizar a comunicação e o feedback contínuos entre equipes e usuários durante o 
processo de desenvolvimento de software. 
 
2.5.3.3 Ciclo de Vida 
Ciclo de vida do Lean em uma empresa 
 21 
 
 
 
O ponto chave aqui é que embora a maioria dos esforços de melhoria tenham sido 
gastos na produção, isso é geralmente a menor área de impacto, uma vez que 
 22 
tipicamente mais de 80% do custo é comprometido antes mesmo dele ir para a 
produção. Ainda, apenas 20% do custo pode ser adicionado antes desse ponto, 
então esse fato pode facilmente permanecer escondido. A maioria dos re-projetos de 
processos em operações existentes é o desperdício da correção do pobre projeto 
inicial do sistema. 
 
 
2.5.3.4 Aplicações 
Esta cada vez mais evidente que o Lean é um sistema de negócios que pode ser 
aplicado a qualquer setor, pois permite atender os clientes com alta qualidade 
,baixos custos e prazos de entrega adequados. 
O sucesso ao longo prazo dessa filosofia de negócios deve-se ao modo de pensar 
Lean que deve estar presente em todos os lugares e áreas de negócios incluindo os 
trabalhos de desenvolvimento de software. 
As aplicações dos conceitos Lean fazem o trabalho e informações fluírem mais 
visivelmente. 
 
 
2.5.4 KANBAM 
2.5.4.1 Conceito Kanban 
Kanban significa cartão visual e isso explica todo o seu processo. O sistema é 
originado no Japão, onde o executivo Taiichi Ohno observou nos supermercados 
americanos a reposição de produtos nas prateleiras dos mercados, onde os próprios 
clientes eram quem alertam a reposição da mercadoria. 
O sistema está relacionado ao sistema de “puxar” a produção. Onde se pode 
controlar o fluxo da geração a fim de se obter a mercadoria. Com isso o executivo 
resolveu implantar esse sistema em sua empresa, que era a Toyota, adaptando-a 
para a linha de produção. Ao se implantar este método, foi possível reparar melhoras 
na produção da Toyota. 
O Kanban é baseado na ideia onde atividades em andamento devem ser limitadas. 
Um novo item só pode ser iniciado quando o item em andamento é finalizado ou 
quando uma função automática inicia o mesmo instantaneamente. 
O Kanban, basicamente, tem como principal objetivo transformar o trabalho em 
andamento visível para toda equipe, criando um sinal visual que indica que o novo 
trabalho pode ou não ser iniciado e se o limite acordado para cada fase está sendo 
respeitado. 
Dadas as prescrições, percebe-se que o Kanban baseia-se em um processo onde o 
fluxo de trabalho é contínuo, ou seja, diferente de Scrum, não há um ciclo de 
trabalho definido onde, conhecida uma atividade, a mesma é estimada e colocada 
neste ciclo. 
 23 
Kanban controla as entradas de itens de trabalho e a vazão que é dada de acordo 
com o WIP definido. 
A esta vazão dos itens de trabalho dá-se o nome de leadtime, que representa o 
tempo de um item de trabalho desde a sua entrada no fluxo de trabalho mapeado 
até a sua saída. Kanban permite a combinação de ferramentas de diversos métodos 
até se obter o processo adequado. Baseia-se fortemente no pensamento Lean 
[Poppendieck 2003] e estimula a melhoria contínua do processo, de forma a tornar 
possível dar respostas rápidas ao cliente. 
Kanban é um método de desenvolvimento de software com fortes bases em práticas 
Lean, e que tem como objetivo aperfeiçoar o processo de desenvolvimento de 
software pré-existente. Este método limita o trabalho em progresso, apresentando a 
evolução de forma visual, tornando os problemas evidentes e cultivando uma cultura 
de melhoria contínua. 
 
PRÉ-REQUISISTOS PARA IMPLANTAÇÃO DO KANBAN 
 • Produção nivelada: produzir apenas a quantidade necessária para o processo 
subseqüente de acordo com a demanda de quantidade e variedade; 
• Redução de tempo de Preparação: adaptar os equipamentos produtivos para 
setups mais rápidos. 
 • Layout das máquinas: buscar o melhor layout para um trabalho mais produtivo, 
permitindo que um operador execute várias funções. 
• Padronização dos trabalhos: padronizar as rotinas e os processos, criando 
manuais que facilitem o uso por qualquer operador;. 
• Aperfeiçoamento das atividades: as atividades devem ser constantemente 
reavaliadas, proporcionando uma melhoria contínua nas rotinas e processos. 
• Automação: automatizar o máximo 
possível cada processo de fabricação, 
garantindo a qualidade e a velocidade das atividades. 
 
2.5.4.2 Caracteristicas Kanban 
Recorrendo aos conceitos anteriores e focalizando suas características básicas, 
pode-se dizer que o sistema kanban é um sistema de controle do fluxo de 
informações e produção em um ambiente JIT, que controla harmoniosamente a 
produção dos produtos necessários nas quantidades e no tempo necessário, 
reduzindo os tempos de espera, diminuindo os estoques, melhorando a 
produtividade e interligando todas as operações de produção interna na fábrica e os 
processos de fornecimento de materiais de fornecedores externos. 
Minimizar o inventário em processo e os estoques de produtos acabados;Minimizar a 
flutuação dos materiais em processo, visando simplificar o seu controle; 
Reduzir o "lead time" de produção, 
Evitar a transmissão de flutuações ampliadas de demanda ou do volume de 
produção entre processos; 
Descentralizar o controle da fábrica, fornecendo aos operadores e supervisares de 
área tarefas no controle de produção e de estoque; 
Permitir uma maior capacidade reativa do setor produtivo à mudança da demanda; 
Reduzir os defeitos através da diminuição dos lotes de fabricação; 
Permitir o controle visual ao longo das etapas de fabricação; e 
 24 
Fornecer os materiais sincronizadamente, em tempo e quantidade, conforme sua 
necessidade, no local certo. 
Uma outra característica importante do modelo Kanban é o conceito de "puxar 
tarefa" quando há capacidade de processá-la. Esse recurso vai de encontro ao 
tradicional modelo de "empurrar tarefa" conforme sua demanda, mantendo assim o 
bom desempenho da equipe. Portanto, ao invés dos membros que produzem o 
produto receberem atividades conforme suas demandas, os requisitos são 
adicionados a lista de backlog e "puxados" pelos membros que liberam suas 
atividades correntes e se tornam disponíveis para iniciar uma nova tarefa. 
 
2.5.4.3 Ciclo de vida 
Existem várias técnicas interessantes para o modelo Kanban em termos de 
planeamento de entregas e gestão de compromissos, no entanto não há nenhuma 
técnica específica ou obrigatória a ser seguida. 
Neste sentido Kanban deixa-nos abertos a novas formas e técnicas até 
encontrarmos a que melhor se encaixe no contexto do Projecto. 
Provavelmente veremos algumas “boas práticas” surgir ao longo do tempo. Conceito 
Kanban 
O ciclo de vida mais usado é um painel com colunas e cores para cada etapa a ser 
cumprida. 
2.5.4.4 Aplicação do Kanban 
Pode ser usado em modelos ágeis ou tradicionais, moldando a cultura da 
organização e encorajando a melhoria contínua. É baseado na ideia de que as 
atividades em andamento devem ser limitadas (WIP – work in progress). Novas 
funcionalidades só devem ser iniciadas quando uma peça de trabalho existente é 
liberada ou quando uma função automática inicia isso. 
O processo é mapear o fluxo de valor e limitar as atividades em andamento para 
cada estágio desse processo. Existe o risco do processo ficar parado, caso certa 
quantidade de itens detrabalho ficar bloqueada. Isso exige que toda a equipe de 
software se mobilize para resolver o problema e restaurar o fluxo habitual. Kanban 
usa um quadro branco com post-its, ou um sistema de cartões eletrônicos, provendo 
transparência ao processo e ao fluxo e encorajando a evolução incremental. A 
abordagem Kanban não demanda revolução drástica na empresa, mas sim uma 
adaptação gradual. 
Como consequência das atividades em andamento limitadas, Kanban fornece 
previsibilidade de tempo em ciclos e faz as entregas mais confiáveis. A obrigação de 
focar os esforços nas tarefas que estão paradas encoraja melhoria de qualidade e 
diminuição de retrabalho. 
 
 25 
3 MODELO DE PROCESSO EVOLUCIONÁRIO 
3.1 CONCEITO 
 
O software evolui ao longo do tempo e conforme o desenvolvimento deste software 
avança também temos mudanças nas necessidades de negócio e de produtos que 
mudam frequentemente. Isso torna inadequado seguirmos um planejamento em 
linha reta de um produto. Os modelos de processo evolucionário tornaram-se 
realidade para que possamos desenvolver um produto que evolua ao longo do 
tempo. 
Tem como base a ideia de desenvolver uma implementação inicial, expor o resultado 
ao comentário do usuário e fazer seu aprimoramento por meio de muitas versões, 
até que um sistema adequado tenha sido desenvolvido. 
Em vez de ter as atividades de especificação, desenvolvimento e validação em 
separado, todo esse trabalho é realizado concorrentemente com um rápido feedback 
por meio dessas atividades. 
A abordagem evolucionária do desenvolvimento de software, muitas vezes, é mais 
eficaz do que a abordagem em cascata, no sentido de produzir sistemas que 
atendam às necessidades imediatas dos clientes. 
A especificação pode ser desenvolvida gradativamente. À medida que os usuários 
desenvolvem uma compreensão melhor de seus problemas, isso pode ser refletido 
na melhoria do software em construção. 
3.1.1 CARACTERISTICAS 
 
Modelos evolucionários são caracterizados por serem iterativos e apresentarem 
características que possibilitem desenvolvermos versões cada vez mais completas 
do software. 
Os processos evolucionários se caracterizam por dois modelos comuns: 
Prototipação e Espiral. 
 
- Prototipação: A prototipação é utilizada quando o desenvolver não tem certeza 
quanto à eficiência de um algoritmo, ou quanto à adaptabilidade de um sistema 
operacional ou ainda quanto à forma em que deva ocorrer a interação entre o cliente 
e o sistema. Quando temos essa situação a prototipação é uma excelente 
alternativa. Vale ressaltar que a prototipação pode ser utilizada em qualquer 
processo de software, visto que a prototipação auxilia os interessados a 
compreender melhor o que está para ser construído. 
- Modelo espiral: O famoso modelo espiral foi proposto por Boehm. Esse é um 
modelo de processo de software evolucionário que também é iterativo como a 
prototipação, porém com aspectos sistemáticos e controlados do modelo cascata. O 
modelo espiral fornece um grande potencial para que possamos ter rápido 
desenvolvimento de versão cada vez mais completas. 
 
 26 
 
3.2 CICLO DE VIDA 
A prototipação se dá basicamente com a comunicação que ocorre através de uma 
reunião com todos os envolvidos a fim de definir objetivos gerais do software e 
identificar quais requisitos já estão bem conhecidos e esquematizar as áreas que 
realmente necessitam de uma definição mais ampla. Uma iteração de prototipação 
deve ser planejada rapidamente e dessa forma ocorre a modelagem na forma de um 
projeto rápido. O projeto rápido foca na representação dos aspectos do software que 
serão visíveis aos usuários como layout da interface e os formatos de exibição. Esse 
projeto rápido leva à construção de um protótipo que será avaliado pelo cliente. O 
cliente por sua vez retornará um feedback á equipe de software que irá aprimorar os 
requisitos. A iteração vai ocorrendo conforme vamos ajustando o protótipo às 
necessidades dos usuários. A Figura 1 demonstra essas etapas 
 
Figura 1. Etapas da Prototipação de forma iterativa. 
De forma geral o protótipo auxilia na identificação dos requisitos do software. Os 
protótipos podem ser descartados quando usamo-los apenas para entender um 
determinado requisito ou pode ser utilizado como um produto evolucionário que 
servirá para o cliente. 
 
Um modelo espiral possui diversas atividades definidas pela engenharia de software, 
onde cada uma dessas atividades representa um segmento do caminho espiral. 
Para termos uma ideia melhor, a Figura 2 demonstra o modelo espiral. 
 27 
 
Figura 2. Ilustrando o Modelo espiral. 
Sempre iniciamos pelo centro da espiral e prosseguimos no sentido horário. Os 
riscos são considerados à medida que cada evolução é realizada. A primeira 
atividade se dá com o desenvolvimento de uma especificação de produto, as 
próximas passagens podem ser usadas para desenvolver um protótipo e, assim 
sucessivamente vamos evoluindo para versões cada vez mais sofisticadas do 
software. Cada passagem pela parte de planejamento, por exemplo, resulta em 
ajustes no planejamento do projeto. O custo e o cronograma são sempre ajustados 
de acordo com o feedback obtido do cliente após uma entrega. Também teremos um 
ajuste no número de iterações planejadas para completar o software. 
Podemos notar que diferente de outros modelos que terminam quando o software é 
entregue, o modelo espiral pode ser adaptado a cada entrega. O projeto finaliza 
quando o cliente fica satisfeito, quando o software é retirado de operação ou uma 
data encerra definitivamente o projeto. 
O modelo espiral é largamente utilizado e é considerada uma abordagem realista 
para desenvolver sistemas em larga escala. 
Neste artigo vimos o que são os modelos prescritivos e quais são os modelos que 
fazem parte deles. Também vimos mais especificamente dois modelos bastante 
utilizados que é o modelo incremental e o modelo evolucionário. Também vimos 
outros dois modelos que os modelos evolucionários se caracterizam, são eles a 
prototipação e o modelo espiral. Dois modelos muitos utilizados e que servem como 
base para outros modelos atuais. 
 
 28 
3.3 EXEMPLOS DE PROCESSO 
3.3.1 MODELO DE MÉTODOS FORMAIS 
3.3.1.1 CONCEITOS 
As propriedades desejadas de uma especificação formal (consistência, totalidade e 
ausência de ambiguidade) são os objetivos de todos os métodos de especificação. 
No entanto, a linguagem de especificação com base matemática, usada para 
métodos formais, resulta em uma possibilidade de obter essas propriedades. A 
sintaxe formal de uma linguagem de especificação possibilita que os requisitos 
sejam interpretados de uma única maneira ou uma notação gráfica deve ser 
interpretada por um leitor. 
Sem aprofundar em detalhes da matemática, vamos consideram um exemplo para 
introduzirmos os conceitos da matemática e ilustrar o uso da especificação 
matemática. 
 
O modelo de métodos formais engloba um conjunto de atividades que conduzem à 
especificação matemática formal do software. Os métodos formais possibilitam 
especificar, desenvolver e verificar um sistema baseado em computador através da 
aplicação de uma notação matemática rigorosa. Uma variação dessa abordagem, 
chamada engenharia de software ‘cleanroom’ (sala limpa/leve), é aplicada 
atualmente por algumas organizações de desenvolvimento de software. 
Quando são utilizados métodos formais durante o desenvolvimento, este oferecem 
um mecanismo que elimina muitos dos problemas difíceis de ser superados com o 
uso de outros paradigmas de engenharia de software. Ambiguidade, incompletude e 
inconsistência podem ser descobertas e corrigidas com mais facilidade, devido à 
aplicação de analise matemática. Quando são utilizados métodos formais durante o 
projeto, servem como base para verificar a programação e possibilitando que se 
descubra e se corrijam erros quepoderiam passar despercebidos. 
 
3.3.1.2 CARACTERISTICAS 
 
Embora não seja uma abordagem predominante, o modelo de métodos formais 
oferece a promessa de software sem defeitos. No entanto, foram mencionados 
motivos para preocupação a respeito de sua aplicabilidade em um ambiente de 
negócios: 
 Atualmente, o desenvolvimento de modelos formais consome muito tempo e 
dinheiro. 
 29 
 Pelo fato de poucos desenvolvedores de software possuírem formação e 
experiência necessária para aplicação dos métodos formais, é necessário 
treinamento extensivo. 
 É difícil usar os modelos como um meio de comunicação com cliente 
tecnicamente despreparados. 
Apesar dessas preocupações, a abordagem de métodos formais tem conquistado 
adeptos entre os desenvolvedores de software que precisam desenvolver software 
com fator critico de segurança. 
 
3.3.1.3 CICLO DE VIDA 
 
A engenharia de software sala limpa usa uma versão especializada do modelo de 
métodos formais. Uma sequencia de incrementos de software é desenvolvida por 
pequenas equipes de software independentes. À medida que cada incremento é 
certificado, ele é integrado no todo. Daí o motivo pelo qual o sistema cresce com o 
tempo. 
A sequencia das tarefas sala limpa esta ilustrada abaixo. 
 
 
 De acordo com a sequencia para incrementos cleanrun, ocorrem as seguinte 
tarefas: 
Planejamento de incremento – É desenvolvido um plano de projeto que adota a 
estratégia incremental. São criados a funcionalidade de cada incremento, seu 
tamanho projetado e um cronograma de desenvolvimento sala limpa. Deve ter 
cuidado para garantir que os incremento certificados serão integrados no seu devido 
tempo. 
Coleta dos requisitos – Usando técnicas similares à engenharia de requisitos, é 
 30 
desenvolvida uma descrição mais detalhada dos requisitos no nível do cliente. 
Especificação da estrutura de caixa. É usando um método de especificação que 
emprega estruturas de caixas para descrever a especificação funcional. As 
estruturas de caixas isolam e separam a definição criativa de comportamento, dados 
e procedimentos em casa nível de refinamento. 
Projeto formal – Por meio da abordagem de estrutura de caixas, o projeto sala 
limpa é uma extensão natural e contínua da especificação. As especificações são 
refinadas iterativamente para se tornarem análogas aos projetos arquitetônicos e no 
nível de componentes. 
Verificação de correção - A equipe sala limpa executa uma série de atividades de 
verificação rigorosa de correção sobre o projeto e depois sobre o código. A 
verificação começa com a estrutura de caixas de nível mais alto e se move em 
direção ao detalhe do projeto. O primeiro nível de verificação de correção ocorre 
aplicando uma série de perguntas de correção. Se as perguntas não demonstrarem 
que a especificação esta correta, utilizam-se métodos mais formais. 
Geração de código, inspeção e verificação – As especificações de estrutura de 
caixa, representadas em uma linguagem especializada, são traduzidas e linguagem 
de programação apropriada. São usadas revisões técnicas para garantir a 
conformidade da semântica do código e das estruturas de caixa e correção sintática 
do código. Então é executada a verificação de correção para o código fonte. 
Planejamento do teste estatístico – É analisado o uso do software e é planejada e 
projetada uma série de casos de teste que experimentam uma distribuição de 
probabilidades de uso. Essa atividade sala limpa é executada em paralelo à 
especificação, verificação e geração de código. 
Teste estatístico de uso – É sempre necessário projetar um número finito de casos 
de teste. As técnicas estatísticas de uso executam uma série de testes derivados de 
uma amostragem estatística de todas as execuções de programa possíveis por 
todos os usuários de uma população-alvo. 
Certificação – Uma vez completadas a verificação, inspeção e teste de uso, o 
incremento é certificado como pronto para a integração. 
As quatros primeiras atividades no processo sala limpa preparam o cenário para as 
atividades de verificação formal que vem em seguida. Por isso, começa a discussão 
da abordagem sala limpa com as atividades de modelagem que são essências para 
a verificação formal a ser aplicada. 
 
 
3.3.1.4 APLICACAO 
Exemplo (Um tratador de blocos): Uma das partes mais importantes de um SO 
simples é o subsistema que mantém os arquivos criados pelos usuários. Parte do 
subsistema de arquivos é o tratador de blocos. Os arquivos no sistema de 
armazenamento de arquivos são formados por blocos de armazenamento mantidos 
em um dispositivo de armazenamento. Durante a operação do computador, arquivos 
são criados e excluídos, e isso requer a aquisição e liberação de blocos de 
armazenamento. Para enfrentar a tarefa, o subsistema de arquivamento devera 
manter um reservatório de blocos não utilizados e manter controle de blocos que 
estão correntemente em uso. Quando os blocos são liberados porque um arquivo foi 
excluído, eles normalmente são acrescentados a uma fila de blocos à espera de 
 31 
serem acrescentados ao reservatório de blocos não utilizados. 
Para esse subsistema, o estado é a coleção de blocos livres, a coleção de blocos 
utilizados e a fila de blocos devolvidos. A invariante de dados, expressão em 
linguagem natural é 
 Nenhum bloco será marcado como não usado e usado ao mesmo tempo. 
 Todos os conjuntos de blocos mantidos na fila serão subconjuntos da coleção 
de blocos usados correntemente . 
 Nenhum elemento da fila terá o mesmo número de blocos. 
 A coleção formada por blocos usados e blocos não usados será a coleção 
total dos blocos que formam os arquivos. 
 A coleção de blocos não usados não terá número de blocos duplicados. 
 A coleção de blocos usados não terá número de blocos duplicados. 
Algumas das operações associadas a esses dados são: Acrescentar uma coleção 
de blocos ao fim da fila, remover uma coleção de blocos usados da frente da fila e 
coloca-los em uma coleção de blocos não usados e verificar se uma fila de blocos 
está vazia. 
A precondição de acrescentar é que os blocos a ser adicionados devem estar na 
coleção de blocos usados. A pós-condição é que a coleção de blocos agora se 
encontra no fim da fila. A precondição de remover é que a fila deve ter pelo menos 
um item nela. A pós-condição é que os blocos devem ser adicionados à coleção de 
blocos não usados. A operação verificar não tem precondição. Isso significa que a 
operação é sempre definida, independente do valor do do estado. A pós-condição 
fornece o valor ‘true’ se a fila estiver vazia e ‘false’ caso contrario. 
 
 
3.3.2 MODELO DE PROCESSO INCREMENTAL 
3.3.2.1 CONCEITO 
Em várias situações, os requisitos iniciais do software são razoavelmente bem 
definidos, entretanto, devido ao escopo geral do trabalho de desenvolvimento, o uso 
de um processo puramente linear não é utilizado. Pode ser necessário o rápido 
fornecimento de um determinado conjunto funcional aos usuários, para somente 
após esse fornecimento, refinar e expandir sua funcionalidade em versões de 
software posteriores. Em tais casos, pode-se optar por um modelo de processo 
projetado para desenvolver o software de forma incremental. 
Podemos definir o modelo incremental como um processo de ciclo de vida iterativo e 
incremental com características do ciclo de vida sequencial (TRAMMELL, 1996). No 
modelo em cascata as fases são sequenciais: os requisitos são definidos, o projeto 
do sistema é criado, implementado e testado, é feita a integração e teste de sistema 
para finalmente entrar em produção. 
“O modelo incremental combina elementos do modelo em cascata aplicado de 
maneira iterativa” (PRESSMAN, 2006), ou seja, a cada incremento é fornecida uma 
parte do sistema aos clientes. O cliente define quais são os serviços principais e a 
 32 
partir da identificaçãodos serviços é feito o levantamento de requisitos e mapeado o 
primeiro incremento. 
Os processos de especificação, projeto, implementação e testes são feitos a cada 
incremento até o produto final ser entregue ao cliente gerando um sistema completo, 
conforme mostra a Figura 2.1. 
 
 
Figura 2.1: Modelo incremental 
“Quando um modelo incremental é usado, o primeiro incremento é frequentemente 
chamado de núcleo do produto” (PRESSMAN, 2006). O núcleo do produto serve de 
base para os outros incrementos. 
A cada incremento entregue ao cliente é desenvolvido um plano para o próximo 
incremento. Este processo é feito a cada termino e início dos incrementos e tem por 
objetivo alterar o núcleo do produto para atender o cliente (PRESSMAN, 2006). 
A interação do usuário é primordial no desenvolvimento incremental principalmente 
na definição dos principais serviços e no retorno (feedback) da utilização do sistema. 
As principais características do modelo incremental segundo Sommerville (2007) 
são: 
 Os processos de especificação, projeto e implementação são concorrentes. 
 O sistema é desenvolvido em uma série de incrementos. 
 Ferramentas de apoio ao desenvolvimento interativo. 
De acordo com Sommerville (2007), as vantagens do desenvolvimento incremental 
são: 
 Entrega dos incrementos ao cliente, ou seja, partes do sistema em 
funcionamento. 
 Participação dos clientes ou usuários no processo de desenvolvimento 
incremental. 
Alguns dos problemas do desenvolvimento incremental segundo Sommerville (2007) 
são: 
 Problemas no gerenciamento de grandes sistemas 
 Problemas em montar um contrato para atender ambas as partes 
interessadas 
 
 
 33 
3.3.2.2 CARACTERISTICAS 
 
O modelo incremental combina elementos dos fluxos de processos lineares e 
paralelos. O modelo aplica sequências lineares, de forma escalonada, à medida que 
o tempo vai avançando. Cada sequência linear gera “incrementais” do software de 
maneira similar aos incrementais gerados por um fluxo de processos evolucionários. 
Por exemplo, um software de processamento de texto desenvolvido com o emprego 
do paradigma incremental, poderia liberar funções básicas de gerenciamento de 
arquivos, edição de produção de documentos no primeiro incremento; recursos mais 
sofisticados de edição e produção de documentos no segundo; revisão ortográfica e 
gramatical no terceiro; e, finalmente, recursos avançados de formatação (layout) de 
página no quarto incremento. Deve-se notar que o fluxo de processo para qualquer 
incremento pode incorporar o paradigma de prototipação. 
Quando se utiliza um modelo incremental, frequentemente, o primeiro incremento é 
um produto essencial. Isto é, as os requisitos básicos são atendidos, porém, muito 
recursos complementares (alguns conhecidos, outros não) ainda não são entregues. 
Esse produto essencial é utilizado pelo cliente (ou passa por uma avaliação 
detalhada). Como resultado do uso e/ou avaliação, é desenvolvido um planejamento 
para o incremento seguinte. O planejamento já considera a modificação do produto 
essencial para melhor se adequar as necessidades do cliente e a entrega de 
recursos e funcionalidades adicionais. Esse processo é repetido após a liberação de 
cada incremento, até que seja produzido o produto completo. 
O modelo de processo incremental tem seu foco voltado para a entrega de um 
produto operacional com cada incremento. Os primeiros incrementos são versões 
seccionadas do produto final, mas eles realmente possuem capacidade para atender 
ao usuário e também oferecem uma plataforma para avaliação do usuário. 
O desenvolvimento incremental é particularmente útil nos casos em que não há 
pessoal disponível para uma completa implementação na época de vencimento do 
prazo estabelecido para o projeto. Os primeiros incrementos podem ser 
implementados com número mais reduzido de pessoal. Se o produto essencial for 
bem acolhido, então um pessoal adicional (se necessário) poderá ser acrescentado 
para implementar o incremento seguinte. Alem disso, os incrementos podem ser 
planejados para administrar riscos técnicos. Por exemplo, um sistema importante 
pode exigir a disponibilidade de novo hardware que ainda está em desenvolvimento 
e cuja data de entrega é incerta. Poderia ser possível planejar incrementos iniciais 
de modo a evitar o uso desse hardware, possibilitando, portanto, a liberação de 
funcionalidade parcial aos usuários finais, sem um atraso excessivo. 
 
3.3.2.3 CICLO DE VIDA 
 
O modelo de processo incremental é interativo igual à prototipagem, mais diferente a 
prototipagem o incremental tem como objetivo, apresentar um produto operacional a 
cada incremento realizado. 
Esse modelo é muito útil quando a empresa não possui mão de obra disponível no 
momento para uma implementação completa, dentro do prazo estipulado. 
 34 
O desenvolvimento de um produto comercial de software é uma grande tarefa que 
pode ser estendida por vários meses, possivelmente um ano ou mais. Por isso, é 
mais prático dividir o trabalho em “pedaços” menores ou iterações. Cada iteração 
resultará num incremento. 
Iterações são passos em fluxo de trabalho e incrementos são crescimentos do 
produto. 
O princípio subjacente ao processo incremental e iterativo é que a equipa envolvida 
possa refinar e alargar pouco-a-pouco a qualidade, detalhe e âmbito do sistema 
envolvido. 
Por exemplo, numa primeira iteração deve-se identificar a visão global e determinar 
a viabilidade econômica do sistema, efetuar a maior parte da análise e um pouco de 
desenho e implementação.Numa segunda iteração, deve-se concluir a análise, fazer 
uma parte significativa do desenho e um pouco mais de implementação. 
Numa terceira iteração, deve-se concluir o desenho, fazer-se parte substancial da 
implementação, testar e integrar um pouco, etc. Ou seja, a principal consequência 
da aproximação iterativa é que os produtos finais de todo o processo vão sendo 
amadurecidos e completados ao longo do tempo, mas cada iteração produz sempre 
um conjunto de produtos finais. 
 
A cada iteração é feito: 
 
- Análise (refinamento de requisitos, refinamento do modelo conceitual) 
- Projeto (refinamento do projeto arquitetural, projeto de baixo nível) 
- Implementação (codificação e testes) 
- Transição para produto (documentação, instalação, ...) 
 
 
 
Vantagens do processo incremental e iterativo 
 
- Possibilidade de avaliar mais cedo os riscos e pontos críticos do projeto, e 
identificar medidas para eliminá-los ou controlar; 
 
 35 
- Redução dos riscos envolvendo custos a um único incremento. Se a equipa que 
desenvolve o software precisar repetir a iteração, a organização perde somente o 
esforço mal direcionado de uma iteração, não o valor de um produto inteiro; 
 
- Definição de uma arquitetura que melhor possa orientar todo o desenvolvimento; 
- Disponibilização natural de um conjunto de regras para melhor controlar os 
inevitáveis pedidos de alterações futuras; 
 
- Permite que os vários intervenientes possam trabalhar mais efetivamente pela 
interação e partilha de comunicação daí resultante; 
 
 - Existe sempre algo para entregar ao cliente apressado (a última iteração); 
 
- Os requisitos mudam com o tempo e um processo iterativo e incremental mantém 
frequentes os contactos com o cliente, o que ajuda a manter os requisitos 
sincronizados; 
 
- Redução do risco de lançar o projeto no mercado fora da data planeada. 
Identificando os riscos numa fase inicial, o esforço despendido para gerenciá-los 
ocorre cedo, quando as pessoas estão sob menos pressão do que numa fase final 
de projeto; 
 
- Aceleração do tempo de desenvolvimento do projeto como um todo, porque a 
equipa que desenvolve o software trabalha de maneira mais eficiente quando 
pretende alcançar resultados de escopo pequeno e

Outros materiais

Materiais relacionados

Perguntas relacionadas

Materiais recentes

Perguntas Recentes