Escolar Documentos
Profissional Documentos
Cultura Documentos
Universidade Rovuma
Nampula
2020
Alfredo Herculano Mabjaia
Chelsea Cherry Fonseca Bucuane
Universidade Rovuma
Nampula
2020
iii
Índice
Resumo..................................................................................................................................................6
1. Introdução......................................................................................................................................7
1.1. Objectivos...................................................................................................................................7
9. Metodologias................................................................................................................................15
9.5. Crystal..................................................................................................................................23
10. Conclusão.................................................................................................................................27
Índice de Figuras
Índice de Tabela
Abreviaturas
FDD - Feature Driven Development.
DSDM - Dynamic Systems Development Method.
XP – Programação Extrema, Extreme Programme.
ASD - Adaptive Software Development.
TDD - Test – Driven Development.
6
RESUMO
Palavras Chaves
Software, Desenvolvimento, Ágil, Métodos.
7
1. Introdução
1.1. Objectivos
Nos dias de hoje, as empresas operam em um ambiente global, com mudanças rápidas. Assim,
precisam responder a novas oportunidades e novos mercados, a mudanças nas condições
econômicas e ao surgimento de produtos e serviços concorrentes. Softwares fazem parte de
quase todas as operações de negócios, assim, novos softwares são desenvolvidos rapidamente
para obterem proveito de novas oportunidades e responder às pressões competitivas. O
desenvolvimento e entrega rápidos são, portanto, o requisito mais crítico para o
desenvolvimento de sistemas de software. Na verdade, muitas empresas estão dispostas a
trocar a qualidade e o compromisso com requisitos do software por uma implantação mais
rápida do software de que necessitam. (SOMMERVILLE, 2011).
Métodos Ágeis
A filosofia por trás dos métodos ágeis é refletida no manifesto ágil, que foi acordado por
muitos dos principais desenvolvedores desses métodos. (SOMMERVILLE, 2011).
Embora esses métodos ágeis sejam todos baseados na noção de desenvolvimento e entrega
incremental, eles propõem diferentes processos para alcançar tal objetivo. No entanto,
compartilham um conjunto de princípios, com base no manifesto ágil, e por isso têm muito
em comum. Esses princípios são resumidos em:
Métodos Ágeis são algumas vezes caracterizados como o oposto de metodologias guiadas
pelo planejamento ou disciplinadas. Uma distinção mais acurada é dizer que os métodos
10
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 com maior ê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. O progresso é geralmente medido em termos de entrega de artefactos —
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
11
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.
Algumas equipes ágeis usam o modelo em cascata em pequena escala, repetindo o ciclo de
cascata inteiro em cada iteração. Outras equipes, mais especificamente as equipes de
Programação extrema, trabalham com atividades simultaneamente.
A aplicabilidade dos métodos ágeis em geral pode ser examinada de múltiplas perspectivas:
- Da perspectiva do produto, métodos ágeis são mais adequados quando os requisitos estão
emergindo e mudando rapidamente, embora não exista um consenso completo neste ponto
(Cohen et al., 2004).
- De uma perspectiva organizacional, a aplicabilidade pode ser expressa examinando três
dimensões chaves da organização: cultura, pessoal e comunicação. (Cohen et al., 2004).
12
Desenvolvimentos ágeis vêm sendo amplamente documentados como funcionando bem para
equipes pequenas (< 10 desenvolvedores). O desenvolvimento ágil é particularmente
adequado para equipes que têm que lidar com mudanças rápidas ou imprevisíveis nos
requisitos. (BECK, 1999).
A aplicabilidade do desenvolvimento ágil para os seguintes cenários é ainda uma questão
aberta:
esforços de desenvolvimento em larga escala (> 20 desenvolvedores), embora
estratégias para maiores escalas tenham sido descritas.
esforços de desenvolvimento distribuído (equipes não co-alocadas).
esforços críticos de missão e vida.
Companhias com uma cultura de comando e controle.
13
Embora os métodos ágeis apresentem diferenças entre suas práticas, eles compartilham
inúmeras características em comum, incluindo o desenvolvimento iterativo, e um foco na
comunicação interativa e na redução do esforço empregado em artefactos intermediários.
(COHEN et AL., 2004).
Barry & Boehm e Richard Turner sugeriram que análise de risco pode ser usada para
escolher entre métodos adaptativos (ágeis) e preditivos (dirigidos pelo planejamento). Os
autores sugerem que cada lado deste contínuo possui seu ambiente ideal"
Ambiente ideal para o desenvolvimento ágil:
Baixa criticidade
Desenvolvedor sénior
Mudanças frequente de requisitos
Pequeno número de desenvolvedores
Cultura que tem sucesso no caos.
Ambiente ideal para o desenvolvimento direcionado ao planejamento:
Alta criticidade
Desenvolvedor Júnior
Baixa mudança nos requisitos
Grande número de desenvolvedores
Cultura que procura a ordem.
Um método deve ser bastante flexível para permitir ajustes durante a execução do
projeto. Há três problemas chaves relacionados ao tópico de adaptação dos métodos ágeis: a
aplicabilidade dos métodos ágeis (no geral e no particular), e finalmente, o suporte ao
gerenciamento de projeto.
Grandes projectos não poderão mais conviver com a baixa capacidade que os caracterizam
para se adequarem as mudanças de requisitos. Seus processos e produtos de planejamento se
tornarão excessivamente caros e morosos para o trabalho, quando necessário. Por sua vez, na
medida em que evolui a utilização dos métodos ágeis de pequenos para grandes projectos,
esses precisa adoptar algumas das práticas das metodologias tradicionais (BOEHM &
TURNER, 2004,p. 151).
Numa outra visão empírica sobre as praticas de desenvolvimento ágeis de software, a maioria
das equipes ágeis praticam planejamento e desenho de soluções antes de iniciar o
desenvolvimento do software. As equipes que seguem métodos formais, na verdade,
desenvolvem os projectos com interactividade com os clientes, obtendo, inclusive, taxas de
sucesso de certa forma similares.
9. Metodologias
Princípio ou Descrição
prática
Planejamento Os requisitos são gravados em cartões de história e as histórias que
incremental serão incluídas em um release são determinadas pelo tempo disponível
e sua relativa prioridade.
Pequenos releases Em primeiro lugar, desenvolve-se um conjunto mínimo de
funcionalidades útil, que fornece o valor do negócio. Releases do
sistema são frequentes e gradualmente adicionam funcionalidade ao
primeiro release.
Projecto simples Cada projeto é realizado para atender às necessidades atuais, e nada
mais.
Desenvolvimento Um framework de testes iniciais automatizados é usado para escrever
test-first os testes para uma nova funcionalidade antes que a funcionalidade em
si seja implementada.
Refatoração Todos os desenvolvedores devem refatorar o código continuamente
assim que encontrarem melhorias de código. Isso mantém o código
16
simples e manutenível.
Programação em Os desenvolvedores trabalham em pares, verificando o trabalho dos
pares outros e prestando apoio para um bom trabalho sempre.
Propriedade coletiva Os pares de desenvolvedores trabalham em todas as áreas do sistema,
de modo que não se desenvolvam ilhas de expertise. Todos os
conhecimentos e todos os desenvolvedores assumem responsabilidade
por todo o código. Qualquer um pode mudar qualquer coisa.
Integração contínua Assim que o trabalho em uma tarefa é concluído, ele é integrado ao
sistema como um todo. Após essa integração, todos os testes de
unidade do sistema devem passar.
Ritmo sustentável Grandes quantidades de horas-extra não são consideradas aceitáveis,
pois o resultado final, muitas vezes, é a redução da qualidade do
código e da produtividade a médio prazo.
Cliente no local Um representante do usuário final do sistema (o cliente) deve estar
disponíveltodo otempo à equipe de XP. Em um processo de Extreme
Programming, o cliente é um membro da equipe de desenvolvimento e
é responsável por levar a ela os requisitos de sistema para
implementação.
Conforme afirmam Palmer e Felsing (2002), FDD não cobre todo o processo de
desenvolvimento, focando especificamente nas atividades de Design e Desenvolvimento,
ainda assim, não especifica que se faz necessário integrá-lo a outro processo.
O conceito de funcionalidade proposto por FDD corresponde a expressões granulares que
representem algum valor para o cliente (AMBLER., 2005). Uma funcionalidade é nomeada
por meio da estrutura ação-resultado-objeto, por exemplo: “calcular o desconto de uma
venda”, sendo o termo “calcular desconto” a funcionalidade e o termo “de uma venda” o
17
Desenvolver um O projeto inicia por um passo a passo de alto nível para entendimento
Modelo Geral do escopo do sistema e seu contexto. Em seguida, são detalhadas as
(Develop orientações de domínio para cada área de modelagem. Como suporte
18
anOverallModel) para cada domínio, modelos de passo a passo são produzidos por grupos
pequenos, os quais são apresentados e discutidos pelo grupo. Uma das
propostas, ou mesmo a junção de várias delas, é escolhida e definida
com modelo geral.
Construir Lista O conhecimento do que foi reunido na modelagem inicial é usado para
de construir a lista de funcionalidades. Isso é realizado através da
Funcionalidades decomposição do domínio em funcionalidades por áreas de assunto
(Buid Features (subjectareas). As áreas de assunto contemplam atividades de negócio,
List) os passos para cada atividade de negócio, formando assim uma lista
categorizada de funcionalidades. As funcionalidades são expressões de
valor ao cliente compostas pela estrutura <ação><resultado><objeto>.
Funcionalidades não devem ser maiores que o tamanho da iteração (se
necessário, podem ser divididas em funcionalidades menores).
Planejar por Após a construção da lista de funcionalidades, é conduzido o
Funcionalidade planejamento do desenvolvimento, onde o conjunto de funcionalidades
(Plan By Feature) é ordenado de acordo com a prioridade as quais são atribuídas ao
Programador Chefe (vide Seção 3.8.2.). Além disso, cada Classe
identificada no Modelo Geral deve ser atribuída individualmente a um
Programador (vide Seção 3.8.2.), haja vista que o FDD propõe o
conceito de Proprietário de Classe (classownership), onde cada classe é
de responsabilidade de um único programador. Nesse processo também
é definido o cronograma.
Desenhar por Um pacote de design é produzido para cada funcionalidade. Um
Funcionalidade Programador Chefe seleciona um pequeno grupo de funcionalidades
(Design by que serão desenvolvidas dentro de uma iteração. Juntamente com os
Feature) proprietários de classes correspondentes, o programador chefe trabalha
no detalhamento de Diagramas de Sequência para cada funcionalidade e
refina o modelo geral. Em seguida, as assinaturas das classes e métodos
são escritas e, finalmente, uma inspeção de design é realizada.
Construir por Após uma inspeção de design por funcionalidade bem-sucedida, uma
Funcionalidade função de valor ao cliente é produzida. Os proprietários de classes
(Buid By Feature) desenvolvem o código das suas classes. Após a execução de um Teste
de Unidade e uma inspeção de código bem-sucedida, a funcionalidade
completa é promovida para a compilação principal.
Figure 2: Processos de Desenho por Funcionalidade (Design by Feature) e Construção por Funcionalidade
(Build by Feature) do FDD.
Os princípios que direcionam o Dynamic Systems Development Method são: Foco nas
necessidades do negócio; Entregar no prazo; Colaboração entre o time; Nunca comprometer a
20
9.5. Crystal
Ainda que seja pouco definida, Crystal considera princípios básicos em sua abordagem: as
entregas frequentes, reduzindo assim a necessidade de produtos intermediários. O time deve
possuir integração e relacionamento íntimo no projecto, entretanto, com especialidades
distintas. A comunicação eficaz é fundamental para que haja um bom fluxo de informação. Os
projectos que utilizam Crystal possuem ciclos incrementais de desenvolvimento, com
liberações de versões em um período que varia de um a quatro meses. Uma vez concluídas as
iterações, é proposta uma reflexão por parte do time sobre possíveis melhorias no processo
(COCKBURN, 2004).
Em Crystal é possível que cada organização avalie o contexto do seu projecto por duas
perspectivas distintas: número de pessoas e repercussão/consequência dos erros
24
O ciclo básico de uma abordagem baseada em TDD sugere três etapas: inicialmente o
desenvolvedor escreve um caso de teste automatizado, o qual precisa falhar para assim definir
a demanda de melhoria ou desenvolvimento da nova função; em seguida o desenvolvedor
escreve a mínima quantidade de código suficiente para que o teste passe; por fim, o
desenvolvedor refatora o código para padrões aceitáveis de codificação (SHORE &
WARDER, 2008). A abordagem proposta por TDD encoraja o design simples e implementa
na prática o conceito de “testar primeiro” sugerido por Extreme Programming (MADEYSKI
& SZALA, 2007).
10. Conclusão
Os métodos ágeis usados para o desenvolvimento de softwares ágeis, são muito utilizados nos
dias de hoje por serem apresentados de uma forma muito eficaz, tanto para os utilizadores
como para os desenvolvedores de software. O método ágil mais conhecido é a Extreme
Programming, (que foi descrito de forma detalhada no trabalho). Outras abordagens ágeis
incluem Scrum, Crystal, Desenvolvimento de Software Adaptativo (Adaptative Software
Development), DSDM e Desenvolvimento Dirigido a Características (Feature Driven
Development). O sucesso desses métodos levou a uma certa integração com métodos mais
tradicionais de desenvolvimento baseados na modelagem do sistema, resultando no conceito
de modelagem ágil e instâncias ágeis do Rational Unified Process Embora esses métodos
ágeis sejam todos baseados na noção de desenvolvimento e entrega incrementai, eles propõem
diferentes processos para alcançar tal objetivo.
27
[2] AMBLER, S. The Object Primer: Agile Model Driven Development with UML 2.
Cambridge University Press, 2004.
[3] BECK, K. Extreme Programming Explained. Addison-Wesley, 2000.
[4] BECK, K. Test-Driven Development by Example. Addison-Wesley, 2003.
[5] BOEHM, B., TURNER, R., BOOCH, G., COCKBURN, A., PYSTER, A. Balancing
Agility and Discipline: A Guide for the Perplexed. Addison-Wesley, 1st Edition, 2003.
[6] COHEN, D., Lindvall, M., & Costa, P. (2004). An introduction to agile methods. In
Advances in Computers (pp. 1-66). New York: Elsevier Science.
[7] COLEMAN, G., VERBRUGGEN, R. A Quality Software Process for Rapid Application
Development. Springer Software Quality Journal, Volume 7, Issue 2, p. 107-122, July, 1998.
[8] FIRDAUS, A., GHANI, I., YASIN, N. I. M. Developing Secure Websites Using Feature-
Driven Development (FDD): A Case Study. Jornal of Clean Energy Technologies, Vol. 1,No.
4, October, 2013.
[9] HIGHSMITH, J. A. Messy, Exciting and Anxiety-Ridden: Adaptive Software
Development. AmericanProgrammer, Volume X, No. 1, January, 1997. Disponível
em:http://www.adaptivesd.com/articles/messy.htm, acessado em 17 de Abril de 2020.
[10] HIGHSMITH, J. A. Adaptive Software Development: A Collaborative Approach to
Managing Complex Systems. New York Dorset House, 2000.
[11] HUNT, A., THOMAS, D. The Pragmatic Programmer: From Journeyman to Master.
Addison-Wesley Professional, 1st Edition, October 30, 1999.
[12] LEVINE, L. Reflections on Software Agility and Agile Methods: Challenges, Dilemmas
& the Way Ahead . Carnegie Mellon University, Software Engineering Institute, May 11,
2005.
[13] MARTIN, J. Application Development Without Programmers. Englewood Cliffs, NJ:
Prentice-Hall, 1981.
[14] MILLS, H. D.; 0'NEILL, D.; LINGER, R. C.; DYER, M.; QUINNAN, R. E. The
Management of Software Engineering. IBM Systems. 1, .v 19, n. 4,1980, p. 414-477.
28