Universidade Federal de Pernambuco
Centro de Informática
Pós-graduação em Ciência da Computação
ENGENHARIA DE REQUISITOS NO
DESENVOLVIMENTO DE SOFTWARE ÁGIL
Gustavo Henrique de Carvalho Costa
MONOGRAFIA
Recife, Março de 2011
1
Universidade Federal de Pernambuco
Centro de Informática
Pós-graduação em Ciência da Computação
Gustavo Henrique de Carvalho Costa
ENGENHARIA DE REQUISITOS NO
DESENVOLVIMENTO DE SOFTWARE ÁGIL
Trabalho apresentado ao Programa de Pósgraduação em Ciência da Computação do
Centro de Informática da Universidade
Federal de Pernambuco como requisito
parcial para a disciplina de Engenharia de
Requisitos.
Professor: Prof. Dr. Jaelson Castro
Recife, Março de 2011
2
Resumo
O tema deste trabalho é a Engenharia de Requisitos (ER) no desenvolvimento
de software ágil. A primeira parte centra-se na comparação das abordagens
tradicionais de engenharia de requisitos e desenvolvimento de software ágil. Embora
os métodos tradicionais de engenharia de requisitos são frequentemente focados em
documentos, os métodos ágeis freqüentemente tentam minimizar a documentação.
Na segunda parte é analisado as semelhanças e diferenças de ambas as
abordagens e determinado como desenvolvimento ágil de software pode se
beneficiar a partir de métodos tradicionais de engenharia.
Palavras-chave: Engenharia de Requisitos, Metodologias Ágeis, Scrum, XP,
Crystal, ASD, DSDM, FDD.
3
ÍNDICE
1 INTRODUÇÃO...............................................................................................6
2 ENGENHARIA DE REQUISITOS (ER)..........................................................7
2.1 PROCESSO DE ENGENHARIA DE REQUISITOS ................................7
2.2 ELICITAÇÃO DE REQUISITOS ..............................................................9
2.2.1 Entrevistas ........................................................................................9
2.2.2 Casos de uso / cenários .................................................................10
2.2.3 Brainstorming..................................................................................10
2.2.4 Observação e análise social...........................................................11
2.2.5 Grupos focais..................................................................................11
2.2.6 Metodologia de Sistema Flexível ....................................................12
2.2.7 O reuso de requisitos......................................................................12
2.2.8 Prototipação....................................................................................13
2.3 ANÁLISE E NEGOCIAÇÃO DE REQUISITOS .....................................13
2.3.1 Joint Application Development (JAD) .............................................14
2.3.2 Priorização de Requisitos ...............................................................14
2.3.3 Modelagem .....................................................................................15
2.3.4 Desdobramento da Função Qualidade (QFD) ...............................16
2.4 DOCUMENTAÇÃO DE REQUISITOS ..................................................16
2.5 VALIDAÇÃO DE REQUISITOS.............................................................17
2.5.1 Revisão dos requisitos....................................................................17
2.5.2 Testes de requisitos........................................................................17
2.6 GERÊNCIA DE REQUISITOS ..............................................................18
3 DESENVOLVIMENTO ÁGIL........................................................................18
3.2 EXTREME PROGRAMMING (XP) ........................................................19
3.2.1 O Processo de XP ..........................................................................19
3.2.2 Práticas de XP ................................................................................21
3.2.3 XP e os requisitos...........................................................................24
3.3 MODELAGEM ÁGIL (MA) .....................................................................25
3.4 SCRUM .................................................................................................26
3.4.1 O processo Scrum ..........................................................................26
3.5 AS METODOLOGIAS DO CRYSTAL....................................................28
3.6 FEATURE DRIVEN DEVELOPMENT (FDD) ........................................30
4
3.7 MÉTODO DE DESENVOLVIMENTO DE SISTEMAS DINÂMICOS
(DSDM)..................................................................................................................31
3.8 DESENVOLVIMENTO DE SOFTWARE ADAPTATIVO (ASD).............33
4 TÉCNICAS DE ENGENHARIA DE REQUSITOS PARA MÉTODOS ÁGEIS
..................................................................................................................................35
4.2 ENVOLVIMENTO DO CLIENTE ...........................................................35
4.3 ENTREVISTAS .....................................................................................37
4.4 PRIORIZAÇÃO......................................................................................37
4.5 JAD .......................................................................................................37
4.6 MODELAGEM.......................................................................................38
4.7 DOCUMENTAÇÃO ...............................................................................39
4.8 VALIDAÇÃO..........................................................................................40
4.9 GESTÃO DOS REQUISITOS ...............................................................41
4.10 OBSERVAÇÃO, ANÁLISE SOCIAL E BRAINSTORM........................42
4.11 REQUISITOS NÃO-FUNCIONAIS ......................................................42
5 CONCLUSÃO ..............................................................................................42
6 REFERÊNCIAS ...........................................................................................44
5
1 INTRODUÇÃO
Abordagens de desenvolvimento ágil de software têm se tornado cada vez
mais populares durante os últimos anos. Práticas ágeis têm sido desenvolvidas com
o objetivo de entregar software mais rápido e garantir que o software atenda às
necessidades dinâmicas dos clientes. Em geral, estas abordagens têm alguns
princípios comuns: melhorar a satisfação do cliente, adaptando-se às necessidades
das mudanças, muitas vezes fornecendo software de trabalho, e uma estreita
colaboração do cliente com os desenvolvedores. Abordagens ágeis são baseadas
em iterações curtas, liberando uma nova versão do software a cada 1-3 meses.
Engenharia de Requisitos (ER) é um processo tradicional de engenharia de
software cujo objetivo é identificar, analisar, documentar e validar os requisitos para
o sistema a ser desenvolvido. Muitas vezes, fazer engenharia de requisitos e praticar
abordagens ágeis são vistos como incompatíveis: ER muitas vezes depende de
documentação para a distribuição do conhecimento, enquanto que o foco dos
métodos ágeis é voltado para a colaboração entre clientes e desenvolvedores. O
objetivo deste trabalho é determinar como as técnicas de engenharia de requisitos
são usados no âmbito do desenvolvimento ágil e se as abordagens ágeis poderiam
ser melhoradas pela utilização de certas técnicas de ER.
ER é um subprocesso do processo tradicional de desenvolvimento de
software. Considerando-se o modelo em cascata, um modelo padrão em engenharia
de software, a ER é a primeira de cinco fases. As cinco fases do modelo em cascata
são: definição de requisitos de sistema e projeto de software, implementação e
testes unitários, integração e testes do sistema, operação e manutenção. Estas
cinco fases são executadas de formas sucessivas e têm como objetivo resultar em
um produto de software funcionando. Mas o processo de desenvolvimento de
software passou por várias mudanças durante os últimos anos. Uma das mudanças
são as abordagens ágeis de desenvolvimento de software.
A próxima seção dá uma visão geral sobre as técnicas atuais de engenharia
de requisitos. A Seção 3 discute abordagens ágeis a partir de uma perspectiva de
engenharia de requisitos. E na Seção 4, avaliamos como a incorporação de algumas
técnicas de engenharia de requisitos podem melhorar os métodos ágeis.
6
2 ENGENHARIA DE REQUISITOS (ER)
A Engenharia de Requisitos está preocupada com a identificação,
modelagem, comunicação e documentação dos requisitos de um sistema, e em
quais contextos o sistema será utilizado. Requisitos descrevem o que será feito, mas
não como eles serão implementados [Davis, 94]. Há muitas técnicas disponíveis
para uso durante o processo de ER para garantir que os requisitos sejam completos,
consistentes e relevantes. O objetivo da ER no modelo em cascata é ajudar a saber
o que construir antes de começar o desenvolvimento do sistema a fim de evitar um
grande retrabalho. Este objetivo tem dois pressupostos principais: quanto mais tarde
os erros são descobertos, mais caro será para corrigí-los [Sommerville, 97], e é
possível determinar um conjunto estável de requisitos antes do projeto do sistema e
do começo da codificação.
A seguir, vamos examinar brevemente o processo de engenharia de
requisitos e discutir as principais técnicas que foram desenvolvidos para ele.
2.1 PROCESSO DE ENGENHARIA DE REQUISITOS
O processo de ER é composto por cinco atividades principais [Sommerville,
97]:
•
Elicitação
•
Análise e Negociação
•
Documentação
•
Validação
•
Gestão
Eles podem ser apresentadas em diferentes modelos. Os modelos mais
populares são:
•
O modelo de atividade grosseiro (ver Figura 1). Os ícones de nuvens
indicam que não há limites distintos entre as atividades.
•
O modelo em cascata. Mostra uma seqüência de fases uma após a outra.
7
•
O modelo espiral (ver Figura 2). Indica que as diferentes atividades são
repetidas até que uma decisão seja tomada, de que o documento de
requisitos seja aceito.
Figura 1: O modelo de atividade grosseiro [Sommerville, 97]
Figura 2: O Modelo Espiral [Sommerville, 97]
As entradas e saídas do processo de ER são mostrados na Figura 3. Embora
o processo de ER varie de uma organização para outra, as entradas e saídas são
similares na maioria dos casos. A ER ajuda a detectar erros anteriores, o que reduz
os custos de desenvolvimento de software. Quanto mais tarde os erros são
descobertos, mais caro será para corrigi-los [Sommerville, 97].
8
Figura 3: Processo de ER - Entradas e Saídas [Sommerville, 97]
2.2 ELICITAÇÃO DE REQUISITOS
Elicitação se refere à identificação dos requisitos e limites do sistema através
de consulta com as partes interessadas (por exemplo, clientes, desenvolvedores,
usuários). Os limites do sistema afetarão todas as técnicas de elicitação e definirão
o contexto do sistema a ser entregue. O completo entendimento das diferentes
áreas é essencial para prever o sistema que será desenvolvido.
As técnicas mais importantes para o levantamento de requisitos estão
descritas no restante desta seção.
2.2.1 Entrevistas
Entrevista é um método para descobrir fatos e opiniões de potenciais usuários
e outras partes interessadas no sistema em desenvolvimento. Os erros e equívocos
podem ser identificados e solucionados.
Existem dois tipos de entrevistas:
•
a entrevista fechada, onde o engenheiro de requisitos tem um conjunto
pré-definido de perguntas e está à procura de respostas.
9
•
a entrevista aberta, sem perguntas pré-definidas do engenheiro de
requisitos, onde há uma discussão de forma aberta com os interessados
sobre o que eles esperam do sistema.
Na verdade, muitas vezes não há limite claro entre os dois tipos de
entrevistas. Você começa com algumas questões que são discutidas e isso leva a
novas questões [Sommerville, 97]. A vantagem de entrevistas é que elas ajudam o
desenvolvedor a obter uma rica coleção de informações. Sua desvantagem é que
esta quantidade de dados qualitativos podem ser difíceis de analisar e poderá haver
informações conflitantes das diferentes partes interessadas.
2.2.2 Casos de uso / cenários
Os casos de uso descrevem as interações entre usuários e o sistema,
focando no que os usuários precisam fazer com o sistema, identificando as funções
mais importantes. Um caso de uso especifica uma seqüência de interações entre um
sistema e um agente externo (por exemplo, uma pessoa, uma peça de hardware ou
outro software), incluindo variantes e extensões que o sistema pode realizar. O caso
de uso fornece o resultado de uma tarefa específica exigida por um ator. Os casos
de uso representam os requisitos do sistema e podem ser utilizados durante as
fases iniciais do processo de desenvolvimento. Os analistas e os clientes devem
analisar cada caso de uso proposto para validá-lo [Wiegers, 99].
Os cenários são exemplos de sessões de interação, onde um único tipo de
interação entre usuário e sistema é simulado. Cenários devem incluir uma descrição
do estado do sistema antes de entrar e após a conclusão do cenário, quais
atividades podem ser realizadas simultâneamente, o fluxo normal de eventos e as
exceções para esses eventos [Sommerville, 97].
2.2.3 Brainstorming
Brainstorming é uma possibilidade de desenvolver soluções criativas
relacionadas com um determinado tópico. Normalmente, o brainstorming é uma
atividade de grupo, mas você pode também fazê-lo sozinho. Brainstorming contém
10
duas fases - a fase de geração, onde as idéias são coletadas, e a fase de avaliação,
onde as idéias coletadas são discutidas. Na fase de geração, as idéias não devem
ser criticadas nem avaliadas. Cada idéia pode levar a novas idéias. A técnica de
brainstorming leva a uma melhor compreensão do problema para todos e um
sentimento de que todos cooperaram para atingir o objetivo.
2.2.4 Observação e análise social
O método de observação envolve um investigador acompanhando usuários
enquanto eles trabalham, e tomando notas sobre as atividades que são realizadas.
A observação pode ser direta, com o pesquisador estando presente durante a tarefa,
ou indireta, quando a tarefa é observada por algum outro meio, como através da
utilização de vídeos.
O método é útil no início da especificação de requisitos para a obtenção de
dados qualitativos. Também é útil para estudar as tarefas executadas atualmente e
os seus processos. A observação permite ao observador ver o que os usuários
realmente executam em um contexto. A observação direta permite que o
investigador concentre a atenção em áreas específicas de interesse. A observação
indireta registra as atividades e permite a detecção de problemas que poderiam ter
passado despercebidos na observação direta.
2.2.5 Grupos focais
O grupo focal é uma técnica informal, onde um grupo de 4 a 9 usuários, de
diferentes origens e com diferentes habilidades discutem questões de forma livre e
se concentram nas funcionalidades ou em um protótipo do sistema.
Os grupos focais ajudam a identificar necessidades e sentimentos, as coisas
que são importantes e o que eles querem do sistema. O moderador deve seguir um
roteiro pré-planejado com diferentes temas, que são introduzidos um de cada vez
para descobrir o que as pessoas pensam sobre aquele tópico. Para os participantes,
a sessão deve ser bem aberta, uma vez que geralmente há uma grande
discrepância entre o que as pessoas dizem e o que fazem, por isso, é necessário o
11
envolvimento da técnica de observação e análise social. Os grupos focais podem
apoiar a articulação de visões, propostas do projeto e um conceito do produto.
Além disso, eles ajudam os usuários a analisar seus próprios problemas e
coisas que devem ser mudadas, e apoiam o desenvolvimento de um "sentido
comum" do sistema [Macaulay, 96], [Nielsen, 97].
2.2.6 Metodologia de Sistema Flexível
O SSM (Soft System Methodology) não foi especificamente concebido como
uma técnica de elicitação de requisitos para sistemas baseados em computadores.
Foi desenvolvido para pensar nos sistemas sócio-técnicos que incluem pessoas,
procedimentos, hardware, software, etc. A essência do SSM é que reconhece que o
sistema está embutido numa organização humana maior. Ela fornece o contexto
para entender requisitos abstratos do sistema, analisando o contexto organizacional,
e o problema em discussão. Foi um destes primeiros métodos que introduziu o
conceito de pontos de vista: diferentes pontos de vista têm percepções diferentes do
problema e dos requisitos do sistema. O SSM e outros métodos de sistema flexíveis
não são indicados para uma elicitação de requisitos detalhada. São mais eficazes
para ajudar a entender o problema, a situação organizacional. Elas produzem
requisitos abstratos para um sistema, precisando ser completado com outras
técnicas de elicitação.
2.2.7 O reuso de requisitos
O reuso de requisitos significa reutilizar especificações de requisitos ou partes
desenvolvidas em projetos anteriores. O reuso de requisitos pode ser comparado
com o uso de modelos e ser simples quando o problema dos dois projetos é
bastante semelhante [McPhee, 2001]. O reuso de requisitos só é possível em certos
casos:
•
O requisito contém informações sobre o domínio da aplicação - Requisitos
normalmente não especificam uma funcionalidade específica do sistema,
12
mas as restrições do sistema ou as operações do sistema que são
derivadas a partir do domínio da aplicação.
•
O requisito está preocupado com a forma de apresentação da informação.
•
O requisito reflete as políticas da empresa (políticas de segurança).
2.2.8 Prototipação
Um protótipo de um sistema é uma versão inicial do sistema que está
disponível no início do processo de desenvolvimento. Protótipos de sistemas de
software são frequentemente utilizados para ajudar a obter e validar requisitos do
sistema. Existem dois diferentes tipos de protótipos: o protótipo descartável que
ajuda a descobrir requisitos que causam dificuldades de compreensão, e o protótipo
evolutivo que oferece um sistema usável para o cliente e pode se tornar uma parte
do sistema final.
Esses protótipos podem ser desenvolvidos como um protótipo de papel, onde
um mock-up do sistema é desenvolvido e utilizado para experimentos sobre o
sistema, como o protótipo "O Mágico de Oz", onde uma pessoa simula as respostas
do sistema em resposta a algumas entradas do usuário ou como um protótipo
automatizado, onde uma linguagem de quarta geração ou algum outro ambiente de
desenvolvimento rápido é usado para desenvolver um protótipo executável.
2.3 ANÁLISE E NEGOCIAÇÃO DE REQUISITOS
Análise de requisitos verifica nos requisitos a necessidade (a necessidade de
exigência), consistência (os requisitos não devem ser contraditórios), completude
(nenhum serviço ou restrição deve estar ausente) e a viabilidade (se os requisitos
são viáveis no contexto do orçamento e no cronograma disponível para o
desenvolvimento do sistema). Conflitos em requisitos são resolvidos através da
negociação de prioridades. Requisitos que parecem problemáticos são discutidos e
os stakeholders envolvidos apresentam seus pontos de vista sobre os mesmos. As
soluções para os problemas dos requisitos são identificadas e um compromisso com
um conjunto de requisitos é acordado. Geralmente, isso implica em alterações de
13
algumas das exigências. As principais técnicas utilizadas para a análise de
requisitos são sessões JAD, Priorização e Modelagem.
2.3.1 Joint Application Development (JAD)
A
metodologia
JAD
foi
desenvolvida
pela
IBM
para
acelerar
o
desenvolvimento de sistemas de informação e está embasada em dinâmicas de
grupo acompanhadas de planejamento, estruturação e sistematização de reuniões.
Guiados por um líder de reunião, usuários e analistas projetam o sistema juntos, em
sessões de grupo estruturadas. JAD utiliza a criatividade e o trabalho em equipe
para definir o ponto de vista dos usuários sobre o sistema, desde os objetivos e
aplicações do sistema até a geração de telas e projetos de relatórios. O método
indica três tipos básicos de reuniões de projeto [Teitelroit e Boff, 1991]: as sessões
estratégicas, onde são discutidos o âmbito, objetivos, recursos, políticas e mudanças
organizacionais; sessões de dados e processos e; sessões de telas e relatórios.
2.3.2 Priorização de Requisitos
Em um projeto com um cronograma apertado, recursos limitados, e com altas
expectativas dos clientes é essencial fornecer os mais valiosos recursos o mais cedo
possível. Quando a prazo é curto, mas nem todas as funcionalidades foram
implementadas, algumas funcionalidades têm de ser descartadas.
O estabelecimento de prioridades no início do projeto ajuda a decidir quais
recursos podem ser descartados. A priorização dos requisitos deve ser feita pelo
cliente. Se um terceiro toma esta decisão para o cliente, poderá haver
discordardâncias sobre a definição das prioridades. Tanto o cliente quanto o
desenvolvedor
devem
prover
informações
para
essa
priorização.
Os
desenvolvedores devem apontar os riscos técnicos, custos ou dificuldades. Com
essas informações, o cliente pode alterar a prioridade de algumas funcionalidades.
Os
desenvolvedores
também
podem
propor
a
implementação
de
uma
funcionalidade, quando a mesma tem maior impacto sobre a arquitetura do sistema,
mesmo tendo uma menor prioridade [Wiegers, 99].
14
2.3.3 Modelagem
Modelos do sistema são uma importante ponte entre o processo de análise e
o de projeto. Alguns métodos utilizam diferentes técnicas de modelagem para
formular ou analisar os requisitos do sistema. As técnicas mais populares de
modelagem são [Sommerville, 97]: modelos de fluxo de dados, modelos de dados
semânticos e as abordagens orientadas a objeto.
Figura 4: Notação do diagrama de fluxo de dados [Sommerville, 97]
O modelo de fluxo de dados é baseado na notação de que os sistemas
podem ser modelados como um conjunto de funções que interagem entre si. Ela usa
diagramas de fluxo de dados (DFDs) para representar graficamente as entidades
externas, processos, fluxo de dados e armazenamento dos dados. (Veja a figura 4
para a notação do diagrama de fluxo de dados)
No modelo de dados semântico, o modelo de sistema deve ainda descrever a
forma lógica dos dados que são processados pelo sistema. Isso pode ser feito
usando o modelo relacional em que os dados são especificados como um conjunto
de
tabelas
com
algumas
colunas
que
representam
as
chaves
comuns,
independentemente da organização física do banco de dados.
O modelo de dados semântico inclui o modelo entidade-relacionamento. A
entidade em um banco de dados, os atributos que lhe pertencem e as relações
explícitas entre eles são identificados.
O princípio básico de um modelo orientado a objetos é a noção de um
objeto. Um objeto define um conjunto de atributos e operações comuns a ele
associados. Os conceitos básicos para a abordagem orientada a objetos são:
15
•
Classe
•
Operações de serviços
•
Encapsulamento
•
Herança
A comunicação entre objetos são baseadas em mensagens causando uma
operação a ser invocada. A operação executa o método apropriado e retorna uma
resposta.
2.3.4 Desdobramento da Função Qualidade (QFD)
QFD é uma das ferramentas da qualidade que foi criada na década de 60
pelo japonês Yoji Akao e que tem como objetivo principal permitir que a equipe de
desenvolvimento do produto incorpore as reais necessidades do cliente em seus
projetos de melhoria.
Na prática, o QFD corresponde a quatro matrizes onde é feito o
planejamento do produto e que costuma ser chamada genericamente de casa da
qualidade. A partir dos requisitos dos consumidores, que podem ser captados
através de pesquisas, reclamações, etc., que geralmente são coletados na forma de
idéias vagas ou conceitos generalizados, a equipe de projeto traduz estas idéias ou
conceitos em requisitos de projeto que podem ser mensuráveis e, portanto,
transformados em características efetivas do produto.
2.4 DOCUMENTAÇÃO DE REQUISITOS
O objetivo da documentação de requisitos é comunicar o entendimento dos
requisitos entre as partes interessadas e os desenvolvedores. O documento de
requisitos explica o domínio da aplicação e do sistema a ser desenvolvido. Pode ser
a base para posterior avaliação dos produtos e processos (concepção do sistema,
casos de teste, verificação e validação) e para controle das mudanças.
Um bom documento de requisitos deve ser claro / não ambíguo, completo,
correto, compreensível, consistente, conciso e viável. Dependendo da relação
16
cliente-fornecedor, o documento de especificação pode ser parte do contrato
[Macaulay, 96].
2.5 VALIDAÇÃO DE REQUISITOS
O objetivo da validação dos requisitos é certificar que os requisitos
representam uma descrição aceitável do sistema a ser desenvolvido. As entradas
para o processo de validação são o documento de requisitos, os padrões
organizacionais e o conhecimento organizacional. As saídas são uma lista de
problemas que contém os problemas relatados com o documento de requisitos e das
ações acordadas, para lidar com os problemas relatados. Técnicas utilizadas para
validação de requisitos são a revisão dos requisitos e testes dos requisitos.
2.5.1 Revisão dos requisitos
A revisão dos requisitos irá assegurar que os requisitos:
•
estão completos
•
são consistentes
•
são inequívocos
•
podem ser testados
Há revisões formais e informais dos requisitos. O objetivo das revisões
informais é criticar e melhorar as condições dos requisitos. A revisão informal ocorre
gradualmente e ao longo do processo de ER, com as partes interessadas. O objetivo
da revisão formal é aprovar o documento de requisitos e autorizar o projeto. Por
isso, ocorre quando o documento de requisitos está, teoricamente, completo [Pottts,
98].
2.5.2 Testes de requisitos
Teste de software é parte integrante da engenharia de software. Mas se o
software é escrito com base em requisitos mal-entendidos o resultado não será o
17
desejado. Por esta razão, a escrita de testes de requisitos deve ser iniciada tão logo
o trabalho sobre os requisitos para um produto seja iniciado [Robertson, 2000]. A
vantagem de se escrever testes é que os problemas com os requisitos são muitas
vezes descobertas antes de concepção e desen [McPhee, 2001].
2.6 GERÊNCIA DE REQUISITOS
O gerenciamento de requisitos engloba todas as atividades envolvidas com o
controle
de
mudanças,
controle
de
versão,
rastreamento
de
requisitos,
acompanhamento do status dos requisitos (ver figura 5). O objetivo do
gerenciamento de requisitos é o de capturar, armazenar, disseminar e gerenciar
informações. Gerenciar informação significa organização, análise e rastreabilidade.
A rastreabilidade é uma técnica usada para proporcionar relacionamentos
entre os requisitos, o projeto e o desenvolvimento de um sistema a fim de ajudar o
gerenciamento de suas mudanças [Wiegers, 99].
Figura 5: Atividades de Gerenciamento de Requisitos [Wiegers, 99]
3 DESENVOLVIMENTO ÁGIL
Em relação ao desenvolvimento tradicional, o desenvolvimento de software
ágil é menos orientado a documentos e mais orientado a código. Isso, no entanto,
18
não é sua principal característica, mas sim um reflexo de duas diferenças mais
profundas entre os dois estilos [Fowler, 2000]:
•
Métodos ágeis são adaptativos ao invés de preditivos. Com os métodos
tradicionais, o processo de software é planejado em detalhes por um longo
período de tempo. Isso funciona bem se não houver grandes mudanças, e
o domínio da aplicação e as tecnologias de software sejam bem
compreendidas pela equipe de desenvolvimento. Os métodos ágeis foram
desenvolvidos para se adaptar as mudanças.
•
Métodos ágeis são orientados às pessoas ao invés de processos. Eles
confiam na experiência das pessoas, na competência e na colaboração
direta, do que em rigor dos processos centrados em documentos, para
produzir software de alta qualidade.
Nesta seção, os métodos ágeis mais comuns são brevemente discutidos.
3.2 EXTREME PROGRAMMING (XP)
XP (eXtreme Programming) é uma disciplina de desenvolvimento de software
com base nos valores da simplicidade, comunicação e feedback. Ele trabalha,
trazendo toda a equipe, juntamente com a presença de práticas simples, com
feedback suficiente para permitir que a equipe possa ver onde estão e para ajustar
as práticas à situação desejada.
3.2.1 O Processo de XP
Um projeto XP atravessa algumas fases durante o seu ciclo de vida. Essas
fases são compostas de várias tarefas que são executadas. Abaixo será dada uma
explicação das principais fases de um projeto XP de modo a se ter uma idéia de
como o projeto flui ao longo do tempo.
Um projeto XP passa pelas seguintes fases: exploração, planejamento inicial,
iterações do release, produção, manutenção e morte.
19
A fase de exploração é anterior à construção do sistema. Nela, investigações
de possíveis soluções são feitas e verifica-se a viabilidade de tais soluções. Os
programadores elaboram possíveis arquiteturas e tentam visualizar como o sistema
funcionará considerando o ambiente tecnológico (hardware, rede, software,
desempenho, tráfego) onde o sistema irá rodar. Com isso, os programadores e os
clientes vão ganhando confiança, e quando eles possuírem estórias suficientes, já
poderão começar a construir o primeiro release do sistema. Sugere-se que seja
gasto no máximo duas semanas nessa fase.
A fase de planejamento inicial deve ser usada para que os clientes
concordem em uma data para lançamento do primeiro release. O planejamento
funciona da seguinte forma: Os programadores, juntamente com o cliente, definem
as estórias (casos de uso simplificados) a serem desenvolvidos e as descrevem em
cartões. Os programadores assinalam certa dificuldade para cada estória e,
baseados na sua velocidade de desenvolvimento, dizem quantas estórias podem
desenvolver em uma iteração. Depois, os clientes escolhem as estórias de maior
valor para serem desenvolvidas na iteração – isso é chamado planejamento de
iteração. O processo então se repete até terminar as iterações do release. O tempo
para cada iteração deve ser de uma a três semanas e para cada release de dois a
quatro meses.
Na fase das iterações do release são escritos os casos de teste funcionais e
de unidade. Os programadores vão seguindo mais ou menos o seguinte fluxo de
atividades na seguinte ordem (em cada iteração): escrita dos casos de testes;
projeto e refatoramento; codificação; realização dos testes; e integração. À medida
que esse fluxo vai sendo seguido, o sistema vai sendo construído segundo os
princípios, valores e práticas. Depois de terminado o primeiro release, já se terá uma
idéia melhor das tecnologias e do domínio do problema, de modo que as iterações
poderão ser mais curtas nos
releases subseqüentes
e já se poderá fazer
estimativas mais confiáveis com o que se aprendeu das iterações passadas.
Depois do final do primeiro release, considera-se o início da fase de produção
onde cada release subseqüente do sistema, depois de construído, é colocado para
rodar em um ambiente que simula o ambiente de produção para ver seu
comportamento em termos de desempenho. Podem-se fazer testes de aceitação
adicionais para simular o funcionamento real do sistema no ambiente alvo.
20
A fase de manutenção pode ser considerada como uma característica
inerente a um projeto XP. Em XP você está simultaneamente produzindo novas
funcionalidades, mantendo o sistema existente rodando, incorporando novas
pessoas na equipe e melhorando o código. Mecanismos como: refatoramento,
introdução de novas tecnologias, e introdução de novas idéias de arquitetura podem
ser utilizados em um projeto XP. É importante ressaltar que a manutenção dada em
um sistema que já está em produção deve ser feita com muita cautela, pois uma
alteração errada pode paralisar o funcionamento do sistema resultando em prejuízos
para o cliente.
A fase de morte corresponde ao término de um projeto XP. Existem duas
razões para se chegar ao final de um projeto, uma boa e a outra ruim. A boa razão é
quando o cliente já está satisfeito com o sistema existente e não enxerga nenhuma
funcionalidade que possa vir a ser desenvolvida no futuro. A má razão para a morte
em XP seria o projeto ter se tornado economicamente inviável, devido a dificuldades
de adicionar funcionalidades a um custo baixo e devido a uma alta taxa de erros.
3.2.2 Práticas de XP
Extreme Programming possui doze práticas que consistem no núcleo
principal do processo e que foram criadas com base nos ideais pregados pelos
valores e princípios apresentados anteriormente na seção 3.2.1. Segundo um
dos criadores de XP, Kent Beck, estas práticas não são novidades, mas sim
práticas que já vêm sendo utilizadas a muitos anos, com eficiência, em projetos de
software. Muitas das práticas de XP não são unanimidades dentro da comunidade
de desenvolvimento de software, como por exemplo, programação em pares. No
entanto, o valor e benefícios de tais práticas devem ser avaliados em conjunto e não
individualmente, pois elas foram criadas para serem usadas coletivamente, de forma
a reduzir as fraquezas umas das outras. As doze práticas de XP são comentadas
abaixo.
•
O jogo do planejamento: O planejamento de um release e das iterações
são feitos com base nas histórias (casos de uso simplificados) e conta
com a colaboração de toda a equipe de desenvolvimento, inclusive o
21
cliente. No final de um release é feita uma determinação rápida do escopo
do próximo, através da combinação de estimativas e prioridades do
negócio. As estimativas podem ser refeitas durante as iterações à medida
que os programadores aprenderem mais sobre o sistema.
•
Releases pequenos: Kent Beck (1999) diz: “cada release deve ser tão
pequeno quanto possível, contendo os requisitos mais importantes para o
negócio”. Isso possibilita ter releases freqüentes, o que resulta em maior
feedback para clientes e programadores, facilitando o aprendizado e a
correção dos defeitos do sistema. Beck sugere que os releases sejam de
curta duração, normalmente de dois a três meses.
•
Metáfora: A intenção da metáfora é oferecer uma visão geral do sistema,
em um formato simples, que possa ser compartilhada por clientes e
programadores. A idéia da metáfora é que seja feita uma analogia entre o
sistema que está sendo desenvolvido e um sistema, não necessariamente
de software, que todos entendam, com o objetivo de obter um “vocabulário
comum” para a posterior criação de nomes de classes, subsistemas,
métodos, etc.
•
Projeto simples: Pode-se explicar esta prática em duas partes: A primeira
diz que devem ser projetadas as funcionalidades que já foram definidas e
não as que poderão ser definidas futuramente. A segunda diz que deve
ser feito o melhor projeto que possa entregar tais funcionalidades. Esta
prática tem o intuito de enfatizar que o projeto simples deve se concentrar
em soluções simples e bem estruturadas para os problemas de hoje e que
não se deve perder tempo investindo em soluções genéricas que
procurem atender a funcionalidades futuras, pois como os requisitos
mudam constantemente tais soluções genéricas podem não ser mais a
realidade do futuro.
•
Testes constantes: Os testes em XP são feitos antes da programação.
Existem dois tipos de teste: teste de unidade e teste funcional. Os
testes de unidade são feitos para verificar tudo que possa dar errado. Os
testes unitários são automatizados, e toda vez que o programador
escrever código, ele irá verificar se o sistema passa em todos os testes.
Os testes funcionais são usados para verificação, junto ao cliente, do
sistema como um todo. Os testes
servem como um mecanismo para
22
assegurar que o sistema está sempre rodando livre de erros, e também
servem para dar feedback aos programadores e clientes sobre as falhas
encontradas.
•
Refatoramento: São constantes melhorias no projeto do software para
aumentar sua capacidade de se adaptar a mudanças. O refatoramento
consiste
em aplicar uma série de passos para melhorar o projeto do
código existente, tornando-o mais simples e melhor estruturado, sem
alterar sua funcionalidade.
•
Programação em pares: Todo o código produzido em XP é escrito por um
par de programadores, que possuem papéis distintos, sentados lado-alado e olhando para o computador. Um parceiro será responsável pela
codificação e pensará nos algoritmos e na lógica de programação. O outro
parceiro observa o código produzido e tenta pensar mais estrategicamente
em como melhorá-lo e torná-lo mais simples, além de apontar possíveis
erros e pontos de falha. Além disso, as duplas são constantemente
trocadas e os papéis também com o objetivo de que todos os membros da
equipe possam ter conhecimento sobre todas as partes do sistema.
•
Propriedade coletiva do código: A programação em pares encoraja duas
pessoas a trabalharem juntas procurando atingir o melhor resultado
possível. A propriedade coletiva encoraja a equipe inteira a trabalhar mais
unida em busca de qualidade no código fazendo melhorias e
refatoramentos em qualquer parte do código a qualquer tempo.
•
Integração contínua: O código das funcionalidades implementadas pode
ser integrado várias vezes ao dia. Um modo simples de fazer isso é ter
uma
máquina dedicada para integração. O importante é que na
integração as funcionalidades só podem ser integradas se não houver
erros, caso contrário os erros devem ser corrigidos.
•
Semana de quarenta horas: Essa não é uma regra que obriga as equipes
em projetos XP a trabalharem somente 40 horas por semana. No entanto,
Beck diz que não se deve trabalhar duas semanas seguidas além desse
tempo, pois o cansaço e a insatisfação de trabalhar horas extras pode
resultar numa queda de qualidade do código.
23
•
Cliente no local: Deve ser incluído na equipe uma pessoa da parte do
cliente, que irá usar o sistema, para trabalhar junto com os outros e
responder as perguntas e dúvidas. Mesmo que não seja possível obter
alguém da parte do cliente deve-se ter alguém que tenha conhecimento
suficiente do negócio para exercer este papel.
•
Padrões
de
codificação: Como XP prega a propriedade coletiva de
código, onde todos podem alterar e fazer refatoramento de qualquer parte
do código a qualquer momento, então é mais do que necessário que se
tenha padrões de codificação.
3.2.3 XP e os requisitos
XP não se refere explicitamente às técnicas de engenharia de requisitos em
detalhes, mas sobre o processo geral de desenvolvimento de software e que deve
ser feito durante o processo.
Várias práticas XP (ou técnicas utilizadas nestas práticas) podem ser
comparadas com as técnicas levemente modificadas na ER. Especificamente,
durante o jogo do planejamento, as técnicas de elicitação de ER, como entrevistas,
brainstorming e priorização são usadas. A principal "ferramenta" utilizada para
elicitação são os cartões de história em que os usuários escrevem suas histórias de
usuário. Queremos destacar que as histórias do usuário são diferentes dos casos de
uso. Uma história de usuário é uma descrição de um recurso que fornece o valor de
negócio para o cliente. Os casos de uso são descrições das interações do sistema e
de seus usuários (por exemplo, um diálogo especial) e não, necessariamente,
agregam valor aos negócios.
Antes que as histórias possam ser escritas em cartões, os clientes têm que
pensar sobre o que eles esperam do sistema e fazer com que a funcionalidade seja
necessária. Este processo é uma espécie de brainstorming.
Desenvolvedores pedem mais detalhes para determinar o que os clientes
realmente querem que o sistema faça, e estimam o esforço necessário para
desenvolvê-la. Com base nestas estimativas e do tempo disponível na próxima
iteração, os clientes estão, por sua vez, capazes para escolher as histórias a serem
desenvolvidos.
24
3.3 MODELAGEM ÁGIL (MA)
A modelagem ágil é uma metodologia baseada na prática para modelagem
e documentação eficazes de sistemas baseados em software. É um conjunto de
práticas guiado por princípios e valores para profissionais de software aplicarem em
seu dia a dia. Em outras palavras, não define procedimentos detalhados sobre como
criar um determinado tipo de modelo. Em vez disso, fornece conselhos sobre como
ser um modelador eficiente [Ambler, 2004].
Scott Ambler (2004), apresenta os princípios básicos da MA:
•
Inicialmente, a equipe deve entender que seu maior objetivo é desenvolver
software, e qualquer atividade que não auxilie no desenvolvimento deve
ser evitada, caso não seja justificável;
•
O objetivo secundário é possibilitar o próximo trabalho, e esse trabalho
será uma nova versão do software, ou então, dar suporte a versão atual.
Por isso é fundamental desenvolver uma documentação suficiente para
que os próximos envolvidos no processo dêem continuidade ao
desenvolvimento.
•
Diminuir a carga de trabalho para agilizar o processo e suportar as
mudanças. Deve-se ter o discernimento de escolher apenas o essencial.
•
Adotar soluções simples, pois elas resolvem o problema e são fáceis de
desenvolver. Se estratégias simples falham, as complexas também, por
isso, primeiramente optar pela simplicidade;
•
Mudanças ocorrem, fazem parte do processo mesmo em fases adiantadas
do projeto. Geralmente os requisitos estipulados pelo cliente mudam ao
longo do processo, e os desenvolvedores devem estar cientes para
receber essa mudança com naturalidade.
•
Mudar o software incrementalmente ao invés de efetuar grandes
mudanças com menos freqüência.
•
Modelar o software com um propósito bem definido, caso contrário a
modelagem não se justifica. Para criar um modelo, primeiramente é
necessário estipular quem precisará deste modelo, e qual o principal
motivo para sua criação.
25
•
Possuir mais de um modelo, visto que para cada parte do software um
modelo específico é mais adequado. É preferível utilizar diversos modelos
de forma simples para cada parte do software a tentar aplicar modelos
complexos que “representam o sistema como um todo”.
•
Fazer um trabalho de qualidade, pois modelar de forma ágil não significa
desenvolver de forma desleixada.
•
O retorno dos clientes deve ser maximizado, afinal, é ele que investe
tempo e dinheiro no processo. A equipe deve posicionar-se no lugar do
cliente, e imaginar se realmente investiria na solução que está sendo
proposta.
MA não se refere explicitamente a nenhuma técnica de ER, mas algumas das
práticas de MA suporta diversas técnicas de ER (por exemplo, testes e
brainstorming). A idéia básica da MA é oferecer aos desenvolvedores um guia de
como construir modelos que resolvam problemas de projeto. MA destaca a diferença
entre os modelos informais, cujo único objetivo é apoiar frente a frente à
comunicação e os modelos que são preservados e mantidos como parte da
documentação do sistema. Este último é o que é freqüentemente encontrado em
abordagens de ER.
3.4 SCRUM
Scrum é um método para gerenciar o processo de desenvolvimento de
sistemas através da aplicação de algumas idéias da teoria de controle de processos
industriais (adaptabilidade, flexibilidade e produtividade) [Schwaber & Beedle, 2001].
Scrum não propõe qualquer técnica de desenvolvimento de software específico para
a implementação. Ele se concentra em como uma equipe deve trabalhar em
conjunto para produzir um trabalho de qualidade em um ambiente em mudança
[Abrahamsson et al, 2002].
3.4.1 O processo Scrum
26
As fases do Processo de Scrum são: pré-planejamento, desenvolvimento e
pós-planejamento [Abrahamsson et al, 2002].
Na fase de pré-planejamento (pre-game phase), os requisitos são descritos
em um documento chamado backlog. A seguir os requisitos são classificados por
prioridade, onde são estimados “o esforço” para o seu desenvolvimento. Nesta fase
inclui a definição dos integrantes da equipe, identificação da necessidade de
treinamento, as ferramentas a serem utilizadas, como também uma lista com os
prováveis riscos de projeto. A fase é concluída com uma proposta de arquitetura de
software. As alterações futuras devem ser descritas no backlog.
Na fase de desenvolvimento (game phase), os riscos previamente
identificados devem ser mapeados e acompanhados ao longo do projeto para avaliar
o seu impacto. Nesta fase, o software é desenvolvido em ciclos interativos (sprints),
onde são adicionadas novas funcionalidades. Cada um desses sprints com duração
de 2 a 4 semanas são desenvolvidos de forma tradicional (análise, projeto,
implementação e testes).
Já na fase de pós-planejamento (post-game phase) é onde acontece a
integração do software, os testes finais e a documentação do usuário. A equipe se
reúne para analisar o estado do projeto e o software atual é apresentado ao cliente.
As principais técnicas são o scrum product backlog, sprints e scrums. No que
diz respeito à ER, o product backlog desempenha um papel especial no scrum.
Todos os requisitos considerados necessários ou úteis para o produto estão listados
no product backlog. Ele contém uma lista ordenada de todos as funcionalidades,
melhorias e bugs. O product backlog pode ser comparado com um documento de
requisitos incompleto e em constante mudança, contendo os requisitos necessários
para o desenvolvimento. Cada sprint, iteração com 30 dias de desenvolvimento, está
prevista com base nas informações incluídas no product backlog. Tarefas
selecionadas a partir do product backlog são movidas para o sprint backlog.
Nenhuma alteração será feita para o sprint backlog durante o sprint. Ou seja, não há
flexibilidade nos requisitos durante um sprint, mas há total flexibilidade para o cliente
escolher os requisitos do próximo sprint.
Durante uma sprint a equipe de desenvolvimento passa por várias fases
(reunião de planejamento da sprint, sprint, revisão da sprint). O objetivo da reunião
de revisão da sprint é de que os participantes (clientes e desenvolvedores) tenham
27
entendimento do sistema, sua arquitetura técnica e design, bem como as
funcionalidades entregues.
O conhecimento adquirido na reunião de revisão de sprint e o product backlog
atual é a base para a próxima reunião de planejamento do sprint. Uma parte da
reunião de revisão de sprint, onde os participantes adquirem conhecimentos sobre o
sistema, pode ser comparado à revisão de requisitos e a uma apresentação do
protótipo evolutivo para o cliente.
3.5 AS METODOLOGIAS DO CRYSTAL
As Metodologias do Crystal são uma família de metodologias diferentes, das
quais as metodologias adequadas podem ser escolhidos para cada projeto. Os
diferentes membros da família podem ser adaptados para atender diferentes
circunstâncias. Os membros da família Crystal são indexados por cores diferentes
para indicar o "peso": claro, amarelo, laranja, vermelho, magenta, azul, violeta, e
assim por diante. Quanto mais escura for a cor, mais "pesada" será a metodologia.
Um projeto com 80 pessoas precisa de metodologias mais pesadas do que um com
apenas 10 pessoas [Abrahamsson et al, 202].
Existem algumas características comuns à família Crystal, tais como o
desenvolvimento incremental com ciclos de no máximo quatro meses, ênfase maior
na comunicação e cooperação das pessoas, não limitação de quaisquer práticas de
desenvolvimento, ferramentas ou produtos de trabalho e incorporação de objetivos
para reduzir produtos de trabalho intermediários e desenvolvê-los como projetos
evoluídos.
28
Figura 6: Um incremento do Crystal Laranja [Abrahamsson et al, 2002]
O ciclo de vida desta família de metodologia é baseado nas seguintes
práticas:
•
Staging: Planejamento do próximo incremento do sistema. A equipe
seleciona os requisitos que serão desenvolvidos na iteração e o prazo
para sua entrega;
•
Edição e revisão: Construção, demonstração e revisão dos objetivos do
incremento;
•
Monitoramento: O processo é monitorado com relação ao progresso e
estabilidade da equipe. É medido em marcos e em estágios de
estabilidade;
•
Paralelismo e fluxo: No Crystal laranja, as diferentes equipes podem
operar
com
máximo
paralelismo.
Isto
é
permitido
através
do
monitoramento da estabilidade e da sincronização entre as equipes;
•
Inspeções de usuários: são sugeridas duas a três inspeções feitas por
usuários a cada incremento;
•
Workshops refletivos: são reuniões que ocorrem antes e depois de cada
iteração com objetivo de analisar o progresso do projeto.
29
•
Work Products (Produtos de Trabalho): seqüência de lançamento,
modelos de objetos comuns, manual do usuário, casos de teste e
migração de código.
•
Padrões: padrões de notação, convenções de produto, formatação e
qualidade usadas no projeto.
•
Ferramentas: ferramentas mínimas utilizadas.
3.6 FEATURE DRIVEN DEVELOPMENT (FDD)
FDD é um processo de curta iteração para desenvolvimento de software com
foco no projeto e na fase de desenvolvimento [Abrahamsson et al, 2002]. FDD não
recomenda um modelo de processo específico.
FDD é composto por cinco processos seqüenciais. Os três primeiros são
executados no início do projeto e os dois últimos durante cada iteração [Fowler,
2000].
•
Desenvolvimento de um modelo geral
•
Construção de uma lista de funcionalidades
•
Planejamento por funcionalidade
•
Projeto por funcionalidade
•
Desenvolvimento por funcionalidade
Os dois papéis mais importantes na FDD são o programador-chefe, um
desenvolvedor experiente capaz de liderar equipes pequenas de desenvolvimento e
de participar da análise de requisitos e da modelagem do projeto, e o proprietário da
classe, que trabalhará com a classe que é atribuída a ele [Lefebvre et al, 1999]. Na
primeira fase, um modelo geral é desenvolvido por membros do domínio e pelos
desenvolvedores. A lista de funcionalidades é construída na segunda fase com base
no modelo global. O modelo global é composto de diagramas de classe com
classes, links, métodos e atributos. As classes e links estabelecem a forma do
modelo. Os métodos expressam o comportamento e é a base para a construção da
lista de funcionalidades. Uma funcionalidade em FDD é uma função que agrega
valor para o cliente. As funcionalidades da lista de funcionalidades são priorizadas
30
pela própria equipe. A lista de funcionalidades é revisada pelos membros do domínio
[Lefebvre et al, 1999].
FDD propõe um encontro semanal de 30 minutos para que a situação das
funcionalidades seja discutida e um relatório sobre a reunião seja escrito [Lefebvre
et al, 1999]. Esses relatórios podem ser comparados com o monitoramento / gestão
dos requisitos.
3.7 MÉTODO DE DESENVOLVIMENTO DE SISTEMAS DINÂMICOS (DSDM)
O framework DSDM consiste em três fases sequenciais: Pré-Projeto, Projeto
e Pós-Projeto. A fase de Projeto do DSDM é a mais elaborada das três fases. Ela
consiste em cinco níveis formados por uma abordagem passo-a-passo e iterativa no
desenvolvimento do software. As três fases e os correspondentes níveis são
explicados a seguir.
Figura 7: Processo DSDM [Stapleton, 95]
Fase 1 - O Pré-Projeto: Na fase do pré-projeto, o projeto candidato é
identificado, tratando-se depois do seu plano de financiamento e sendo assegurado
um compromisso de realização. Tratar destas questões numa fase inicial evita
problemas futuros em fases mais avançadas do desenvolvimento do projeto.
31
Fase 2 - O Ciclo de Vida do Projeto: A visão geral de um processo DSDM,
presente na Figura 7, representa o ciclo de vida do projeto nesta segunda fase da
metodologia. Ela mostra os 5 níveis que a equipe de desenvolvimento terá de
percorrer para criar um software. Os dois primeiros níveis, o Estudo de Viabilidade e
o Estudo de Negócio, são fases sequenciais que se complementam. Depois destas
fases estarem concluídas, o sistema é desenvolvido iterativamente e de forma
incremental nos níveis de análise funcional, projeto e implementação.
Nível 1 - O Estudo de Viabilidade: Durante
este
nível
do
projeto,
a
viabilidade de utilização da DSDM para este projeto é examinada. Os pré-requisitos
para o uso da DSDM são encontrados, respondendo a questões como: “Este projeto
pode ir de encontro às necessidades de negócio apontadas?”, “Este projeto é
adequado ao uso da DSDM?” e “Quais são os riscos mais importantes envolvidos?”.
As técnicas mais importantes utilizadas nesta fase são os workshops.
Para entrega ao cliente, são preparados neste nível o relatório e o protótipo
de viabilidade que dizem respeito à viabilidade do projeto em mãos. A estes,
adicionam-se um esboço global do plano para o resto do projeto e um registo de
risco que identifica os riscos mais importantes no projeto.
Nível 2 - O Estudo do Negócio: O estudo do negócio incrementa todo o
trabalho realizado no estudo de viabilidade. Depois do projeto ser declarado viável
para o uso da DSDM, este nível examina as necessidades dos usuários envolvidos.
Mais uma vez, os workshops são uma das técnicas mais valiosas. A informação
retirada destas sessões é colocada numa lista de requisitos. Uma importante
propriedade desta lista de requisitos é a possibilidade de se definir prioridades.
Baseado neste escalonamento, um plano de desenvolvimento é construído como
uma linha mestra para o resto do projeto.
No final deste nível, deverão estar prontos para serem entregues ao cliente:
uma definição de área de negócio que descreve o contexto do projeto dentro da
companhia, a definição da arquitetura do sistema que fornece uma arquitectura
global inicial do software em desenvolvimento juntamente com o plano de
desenvolvimento que realça os passos mais importantes no processo de
desenvolvimento. Na base destes dois últimos documentos está a lista de
prioridades dos requisitos. Por fim, o registro de risco é atualizado com os fatos que
foram identificados durante esta fase da DSDM.
32
Nível 3 - Análise Funcional: Os requisitos que foram identificados nos níveis
anteriores são convertidos para um modelo funcional. A prototipagem é uma das
técnicas chaves dentro deste nível, que ajuda no bom envolvimento do usuário final
com o projeto. O protótipo desenvolvido é revisto pelos diferentes grupos de
usuários. Para assegurar a qualidade do projeto, os testes são desenvolvidos em
cada iteração da DSDM. Uma importante parte dos testes é realizada na análise
funcional. Isto pode ser feito através de testes com usuários finais e revisão da
documentação. Neste nível, é necessário entregar ao cliente o modelo funcional e o
protótipo funcional. Além destes dois documentos, a lista de requisições é
atualizada, sendo apagados os itens que foram desenvolvidos e repensado as
prioridades dos requisitos restantes.
Nível 4 – Projeto: O ponto central desta iteração da DSDM é a integração das
componentes funcionais do nível anterior num sistema que satisfaça as
necessidades do usuário. Mais uma vez, os testes são uma das atividades mais
importantes. Ao usuário, serão entregues o protótipo do projeto para que estes
efetuem testes ao produto-protótipo.
Nível 5 – Desenvolvimento: No nível de desenvolvimento, o sistema testado e
a sua documentação são entregues aos usuários finais que deverão começar a ser
treinados para a futura utilização do novo software. O sistema a ser entregue foi
revisto para incluir todos os requisitos que foram definidos nos primeiros níveis do
projeto.
Fase 3 - Pós-Projeto: A fase de pós-projeto assegura um sistema eficiente.
Isto é desenvolvido através da manutenção e melhoramentos de acordo com os
princípios da DSDM. Até mesmo a iniciação de novos projetos, para atualizar o
sistema existente ou desenvolver um novo sistema, é possível.
3.8 DESENVOLVIMENTO DE SOFTWARE ADAPTATIVO (ASD)
Os
princípios
do
ASD
são
provenientes
de
pesquisas
sobre
o
desenvolvimento iterativo. ASD fornece uma estrutura para o desenvolvimento de
sistemas grandes e complexos com orientação suficiente para impedir os projetos de
cair no caos. O método estimula o desenvolvimento iterativo e incremental com
33
prototipagem constante. O processo ASD contém três fases que se sobrepõem:
especulação, colaboração e aprendizagem (ver Figura 8).
Figura 8: Processo ASD [Highsmith, 96]
Highsmith (1996) diz que os nomes das fases enfatizam a diferença do
desenvolvimento de software tradicional. "Especulação" em vez de "planejamento",
porque o planejamento sempre indica que não há incertezas. A importância do
trabalho em equipe é destacada pela "colaboração". Em um ambiente imprevisível,
pessoas têm a necessidade de se comunicar para serem capazes de lidar com as
incertezas.
"Aprendizagem" salienta que os requisitos mudam durante o desenvolvimento
e existe a necessidade de um conhecimento sobre isso. Na ASD desvios não são
uma falha do sistema, mas levarão para uma solução correta.
Cada projeto começa com a definição da missão do projeto, uma breve
declaração indicando o curso do projeto. Durante a fase de iniciação do projeto, o
cronograma geral bem como os prazos e os objetivos para os ciclos de
desenvolvimento são definidos. Um ciclo em ASD dura entre quatro e oito semanas.
Como ASD é orientada a componentes em vez de orientado a tarefas, ela foca nos
resultados e sua qualidade. A próxima fase é o planejamento do ciclo adaptativo que
contém a fase de colaboração onde o ASD aborda a visão orientada a componentes.
34
Ciclos do planejamento são repetidos quando ocorrem novas exigências e os
componentes têm de ser refinados. Revisões com a presença do cliente
demonstram a funcionalidade do software durante o ciclo. A fase de release é a
última fase de um projeto ASD. Não há recomendações de como esta fase deve ser
realizada, mas a ênfase está na importância de capturar as lições aprendidas.
Como em outros processos ágeis, ASD é baseada em ciclos de
desenvolvimento iterativo. ASD destaca que um método cascata só funciona em um
ambiente bem compreendido e bem definido. Mas as mudanças são freqüentes no
desenvolvimento de software e é importante ser capaz de reagir às mudanças e
utilizar um método de tolerância às mudanças.
4 TÉCNICAS DE ENGENHARIA DE REQUSITOS PARA MÉTODOS ÁGEIS
Quase todas as técnicas de engenharia de requisitos descritas no capítulo 2
podem ser encontradas nas diferentes abordagens ágeis, embora elas não possam
ser utilizadas na mesma área ou na mesma medida. Este capítulo descreve a
maneira pelas quais as abordagens ágeis incorporam essas técnicas e dá um breve
resumo dessa análise.
4.2 ENVOLVIMENTO DO CLIENTE
Um ponto-chave em todas as técnicas de Desenvolvimento Ágil é ter 'acesso'
ao cliente ou 'in loco' (XP). Esta é a base para uma comunicação e um feedback
rápido. Ambos os levam a uma melhor compreensão dos requisitos (no lado do
desenvolvedor) e do processo de desenvolvimento (no lado do cliente). Envolver o
cliente é o primeiro objetivo das abordagens ágeis. No XP, por exemplo, assume-se
que um representante do usuário é o ideal, aquele que: pode responder
corretamente todas as perguntas que os desenvolvedores possam ter, ele/ela esteja
habilitada a tomar decisões vinculativas e sejam capazes de tomar as decisões
corretas.
35
O envolvimento dos interessados é também um ponto chave no trabalho atual
de ER. As partes interessadas têm sua própria visão sobre o sistema a ser
desenvolvido.
As diferentes técnicas de levantamento de ER têm como objetivo obter o
máximo de informações possíveis sobre o sistema, de todas as pessoas envolvidas
(usuários, especialistas do domínio, etc.) Em 1995, o relatório CHAOS do Standish
Group [Group, 1995] mostraram a importância crítica da participação do cliente. O
envolvimento do cliente foi determinado como sendo o motivo número um para o
sucesso do projeto, enquanto a falta de envolvimento do usuário foi a principal razão
dada para os projetos que tiveram dificuldades.
Assim, a ER tradicional e métodos ágeis concordam sobre a importância da
participação dos interessados. A diferença entre as abordagens tradicionais e os
métodos ágeis é que nas abordagens tradicionais o cliente está envolvido
principalmente durante a fase de ER e não durante a fase do desenvolvimento do
software em si, já os métodos ágeis envolvem o cliente no processo de
desenvolvimento como um todo.
Embora os métodos ágeis sejam baseados em um forte envolvimento do
cliente durante todo o processo de desenvolvimento, ainda há um problema. Na
maioria dos casos, os métodos pedem vários clientes com diferentes experiências,
mas às vezes apenas um cliente está disponível para trabalhar com a equipe de
desenvolvimento. Isso significa que nem todas as questões levantadas podem ser
respondidas com detalhes suficientes. Isso pode resultar em atrasos no
desenvolvimento ou em tomada de decisões potencialmente incorretas. Além disso,
algumas áreas de negócio não podem ser suficientemente compreendidas pelo
cliente, de modo que ele não pode dizer a equipe de desenvolvimento sobre os
requisitos relacionados. Mesmo que os requisitos sejam levantados em sessões de
grupo (DSDM, Scrum) não é garantido que os usuários ou clientes com a base
necessária estejam presentes.
Mas o mesmo problema surge em levantamento de requisitos tradicionais.
Apesar de existirem diversas técnicas para elicitar requisitos, ninguém pode garantir
que todas as áreas problemáticas sejam cobertas. Outras técnicas como revisões ou
testes são necessários para garantir que esses problemas sejam descobertos.
36
4.3 ENTREVISTAS
Como o envolvimento do cliente é o principal objetivo do desenvolvimento ágil
de software, a técnica mais comum relacionado com a ER são as entrevistas. As
entrevistas permitem o acesso direto para o conhecimento necessário. É conhecido
por todos que as cadeias de transferência de conhecimento levam à erros e à
desinformação. Desenvolvedores que tem contato direto com o cliente conseguem
informações com menos erros.
As
comunicações
pessoais
estabelecem
relações
entre
clientes
e
desenvolvedores, aumentando a confiança no trabalho. Todas as abordagens ágeis
enfatizam que falar com o cliente é a melhor maneira de obter as informações
necessárias para o desenvolvimento e para evitar mal-entendidos. Se alguma coisa
não está clara ou está definida de forma vaga, clientes ou colaboradores devem
tentar se comunicar com a pessoa responsável para evitar a transferência indireta
de conhecimento.
4.4 PRIORIZAÇÃO
Priorizações podem ser encontradas em todas as abordagens ágeis. Uma
prática comum é o desenvolvimento da funcionalidade com a mais alta prioridade
para ser capaz de entregar o que agrega maior valor ao cliente. Durante o
desenvolvimento, o conhecimento e a compreensão do projeto aumenta e novos
requisitos são adicionados. Portanto, a priorização é repetida com freqüência
durante todo o processo de desenvolvimento para manter as prioridades
atualizadas. A priorização ajuda os clientes a entender as diferenças entre os
requisitos e de que forma eles podem afetar o sistema.
4.5 JAD
Sessões JAD são usados em ASD para aumentar a participação do cliente.
Durante as sessões JAD, os desenvolvedores e clientes discutem as características
37
do produto desejado. Esse tipo de discussão pode ser muito produtivo,
principalmente por que o líder da sessão impede que os participantes fujam do foco
da reunião. Além disso, mesmo focando a interação com o cliente às sessões curtas
de JAD, não se consegue ter a mesma eficiência que no XP, que o cliente está
presente durante o processo. Os resultados das sessões, geralmente, são
documentados e acessíveis, caso haja dúvidas mais tarde. A exigência de
documentação pode ser descartada num contexto ágil. Para ter um feedback
constante, as sessões JAD devem ser realizadas com freqüência durante o
processo de desenvolvimento.
Em DSDM, sessões JAD são usadas para obter a compreensão do novo
sistema no início de um projeto. JAD promove a compreensão, cooperação e
trabalho em equipe entre os diferentes grupos de participantes. Elas também
estimulam a participação e a confiança do cliente. JAD está claramente em sintonia
com os princípios ágeis.
4.6 MODELAGEM
Embora a modelagem seja usada em MA, o objetivo é diferente. Na MA, os
modelos são, por exemplo, usados para comunicar o entendimento de uma pequena
parte do sistema em desenvolvimento. Estes modelos são em sua maioria modelos
descartáveis. Eles são desenhades em um quadro branco ou papel e apagados
após cumprir sua finalidade. A maioria dos modelos não se torna parte da
documentação permanente ou da modelagem final do sistema. Quando a
modelagem é usada em ER, existem diferentes modelos que começam com uma
visão geral do sistema como um todo, seguido por outros modelos que entram em
mais
detalhes.
Todos
estes
modelos
normalmente
se
tornam
parte
da
documentação do sistema e precisam ser mantidos atualizados.
O objetivo da modelagem no FDD é o mesmo que na ER: O modelo
desenvolvido representa todo o sistema e o desenvolvimento é baseado nesse
modelo. Mas como o projeto e a fase de construção são iterativos, as mudanças nos
requisitos e, em conseqüência dos modelos, podem ser feitos mais tardiamente no
processo de desenvolvimento. O modelo representa um primeiro passo para iniciar o
desenvolvimento, mas não descreve completamente o sistema final.
38
4.7 DOCUMENTAÇÃO
Uma documentação completa e consistente é geralmente escassa no
desenvolvimento ágil de software. Alguns métodos ágeis incluem um tipo de
documentação ou recomendam o uso de um documento de requisitos (DSDM,
Scrum, Crystal), mas a decisão dos principais conteúdos ou a ampliação destes
resta à equipe de desenvolvimento e não está descrito em detalhes.
A falta de documentação pode causar problemas a longo prazo em
Desenvolvimento
Ágil,
sendo
compensada
pela
velocidade
no
início
do
desenvolvimento. A documentação é usada para compartilhar o conhecimento entre
as pessoas. Um novo membro da equipe terá muitas perguntas sobre o projeto, as
quais podem ser respondidas através da leitura e compreensão devida da
documentação. Pedir para outros membros da equipe, pode atrasar o trabalho, por
causa do tempo necessário para explicar um projeto complexo.
A mesma situação surge quando mudanças são feitas em um projeto
acabado. É possível que os desenvolvedores que trabalharam inicialmente no
projeto não estejam disponíveis (mudaram-se para outra empresa ou estejam
trabalhando em um novo projeto) e uma nova equipe tenha que fazer as mudanças.
Problemas a longo prazo são minimizados nos métodos ágeis, muitas vezes, por
que o código produzido é limpo e compacto.
As abordagens tradicionais tentam produzir documentação suficiente para ser
capaz de responder a maioria das perguntas que poderiam ser feitas no futuro. Para
ser capaz de fazer isso, eles precisam antecipar futuras questões futuras e
respondê-las de uma forma concisa e compreensível. Ambos os casos são difíceis,
talvez por isso que seja tão difícil escrever bons documentos. Normalmente, para
obter uma boa cobertura das questões futuras, as abordagens tradicionais produzem
documentação em excesso (ou seja, respondendo a perguntas que, de fato, nunca
serão feitas e desperdiçam dinheiro em escrever respostas a elas). Isso resulta em
problemas com a manutenção de todos os documentos em dia e problemas com os
leitores quando tentam encontrar a informação para as suas questões atuais.
As vantagens ou desvantagens da documentação estão relacionadas com o
tamanho da equipe. Com uma grande equipe, talvez seja melhor ter uma
39
documentação mais forte, em vez de explicar a mesma coisa várias vezes para
pessoas diferentes. Quando os métodos ágeis tentam escalar até equipes maiores,
muitas vezes aumentam a quantidade de documentação a ser produzida em relação
a projetos pequenos [Cockburn, 2002].
4.8 VALIDAÇÃO
A validação de requisitos desempenha um papel importante em todas as
abordagens ágeis de desenvolvimento de software. O software é validado através de
reuniões de revisão e testes de aceitação. Isso aumenta a confiança dos clientes no
programa e na equipe de desenvolvimento, porque o sistema demonstra capacidade
de trabalhar para o qual foi proposto. Reuniões de análise também mostram se o
projeto está no escopo e dentro do cronograma.
Todas as abordagens têm uma forma semelhante para validar os requisitos.
Eles usam diferentes tipos de reuniões de avaliação para apresentar o software
desenvolvido. Os clientes podem usar o software, ter uma experiência de como o
sistema funciona em detalhes e quais funcionalidades já foram desenvolvidas. Se
houver questionamentos, estas podem ser respondidas imediatamente pelos
desenvolvedores que estão presentes em cada reunião de revisão. Os clientes
também podem discutir o modo como os recursos foram aplicados com os
desenvolvedores e pedir mudanças no projeto. Durante as reuniões de revisão eles
aprendem sobre as forças, fraquezas, as vantagens e os limites do projeto e da
tecnologia. Os clientes podem verificar se os requisitos desenvolvidos foram
entendidos e, conseqüentemente, se foram desenvolvidos corretamente. Os clientes
também podem executar testes de aceitação para validar se o sistema reage da
maneira esperada e, se não, esclarecer o problema. As perguntas e os pedidos de
mudança influenciam diretamente o desenvolvimento posterior. Dependendo das
circunstâncias do método e do projeto, o software é colocado em produção após
cada revisão. Especialmente no XP, onde o cliente deve estar sempre presente
durante o desenvolvimento, a possibilidade de ser capaz de fazer perguntas e ver
que os testes estão passando aumenta a confiança na equipe de desenvolvimento e
no software.
40
Como todos os métodos ágeis são baseados em pequenas versões, a
validação é executada fortemente. Pelo menos em cada nova versão, os
desenvolvedores obtêm um feedback do cliente. Este tipo de desenvolvimento é
comparável ao de prototipagem evolutiva, onde ambos são baseados na idéia de
entregar freqüentemente um pedaço de código funcionando para melhorar o
feedback. A diferença pode ser encontrada na forte ênfase nos testes, pelas
abordagens ágeis.
4.9 GESTÃO DOS REQUISITOS
Gerenciamento de requisitos limitado é um 'atributo' comum nos métodos
ágeis de desenvolvimento de software. Do ponto de vista de ER, deve ser possível
rastrear as mudanças feitas nos requisitos, no projeto, ou na documentação, para
ver porque as alterações foram feitas. Mas o acompanhamento dessas mudanças
resulta em mais trabalho e documentação adicional.
A falta de documentação pode ser crítica, se os requisitos formam um
contrato legal entre duas organizações. Essa é a razão pela qual os contratos de
projetos ágeis, muitas vezes são baseados em tempo e despesas, e não em preço
fixo / escopo fixo. Contratos baseados em preço fixo / escopo fixo criam uma
confiança, definindo o que o cliente deverá ter, por que preço e em que tempo.
Abordagens ágeis tentam criar essa confiança, trabalhando de forma mais próxima
do cliente. Como o cliente vê a equipe de desenvolvimento trabalhando no software
e não fazendo outra coisa, ele acredita que a equipe vai entregar o software,
satisfazendo suas necessidades.
No entanto, os métodos ágeis oferecem uma boa base para gerenciamento
de requisitos. Todos os requisitos são escritos em cartões indexados (as histórias do
usuário) ou mantidos no product backlog. A diferença é o nível de detalhe em que
um requisito, história do usuário ou funcionalidade é descrita: práticas ágeis
geralmente omitem os detalhes e posterga-os para serem esclarecidos no momento
em que o requisito esteja, literalmente, sendo desenvolvido.
41
4.10 OBSERVAÇÃO, ANÁLISE SOCIAL E BRAINSTORM
Estas técnicas não são explicitamente mencionadas em nenhum método ágil
de desenvolvimento de software. Mas como são as técnicas fundamentais no
processo de levantamento de requisitos, elas podem ser usadas com qualquer uma
das abordagens ágeis. Métodos de observação podem fornecer benefícios para o
levantamento de requisitos, como, por exemplo, um 'usuário' altamente qualificado
pode não ser a melhor pessoa para falar sobre o processo de trabalho. Essas
pessoas às vezes esquecem detalhes importantes, pois o trabalho tem se tornado
parte de sua rotina. Esses detalhes podem ser descobertos durante a observação.
4.11 REQUISITOS NÃO-FUNCIONAIS
Nas abordagens ágeis, gerenciamento de requisitos não-funcionais são mal
definidos. Quando os clientes ou usuários falam sobre o que eles querem que o
sistema
faça,
normalmente
não
se
lembram
dos
recursos,
manutenção,
portabilidade, segurança ou desempenho. Os requisitos não-funcionais tendem a ser
relacionados com os requisitos funcionais e são difíceis de serem expressos. Mas a
maioria dos requisitos não-funcionais deve ser conhecida antes da fase de
desenvolvimento, pois pode afetar a escolha do banco de dados, da linguagem de
programação ou do sistema operacional. Métodos ágeis devem incluir de forma mais
explícita a manipulação dos requisitos não-funcionais. Por outro lado, a engenharia
de requisitos, não define explicitamente um tratamento para determinar os requisitos
não-funcionais.
5 CONCLUSÃO
As fases do processo de ER: elicitação, análise e validação estão presentes
em todos os processos ágeis. As técnicas utilizadas variam nas diferentes
abordagens. Como as fases não são tão claramente separadas como no processo
de ER, elas terminam se fundindo em alguns aspectos (o Jogo de Planejamento em
42
XP, por exemplo, é uma técnica de elicitação e análise). Elas também se repetem a
cada iteração, o que torna mais difícil distingui-las entre as fases e, portanto,
compará-las com as fases do processo de ER. As técnicas utilizadas em processos
de desenvolvimento ágil são, por vezes, descritas vagamente e o desenvolvimento
efetivo dessas técnicas é feito pelos desenvolvedores. Este é o resultado da ênfase
em pessoas altamente qualificadas em métodos ágeis: "bons" desenvolvedores
farão a "coisa certa". As abordagens tradicionais, por outro lado, descrevem em
detalhes o que precisa ser feito e assim provê que qualquer desenvolvedor com um
pouco mais de experiência pode fazer a coisa "certa". Infelizmente, determinar
inicialmente o que é a coisa certa em um determinado contexto de projeto é muito
difícil.
A Gestão de ER é baseada em documentos, o que não é muito bem
representado
nas
abordagens
ágeis
de
desenvolvimento
de
software.
Documentação é uma parte do desenvolvimento ágil de software, mas não na
mesma medida como na ER tradicional. Como todas as abordagens ágeis incluem
pelo menos um mínimo de documentação, é de responsabilidade da equipe de
desenvolvimento escrever a documentação suficiente para o desenvolvimento.
De modo geral, em áreas-chave (como o envolvimento das partes
interessadas) métodos ágeis e ER estão seguindo caminhos similares. A principal
diferença é a ênfase na quantidade de documentação necessária de um projeto
efetivo. Assim, as duas abordagens são bem mais parecidas do que aparentam ser.
43
6 REFERÊNCIAS
ABRAHAMSSON, Pekka, SALO, Outi, RONKAINEN, Jussi e WARSTA,
Juhani. Agile software developlment methods. Review and analysis. Espoo 2002.
VTT Publications 478. 107 p.
AMBLER, Scott. Agile Modeling. John Wiley & Sons., 2001.
AMBLER, Scott. Modelagem Ágil: Práticas
eficazes para a Programação
eXtrema e o Processo Unificado. Bookman. 2004.
BECK, Kent. Extreme Programming explained. Addison-Wesley, 1999.
BECK, Kent. Programação extrema explicada: acolha as mudanças.
Bookman. 2004.
CHECKLAND, Peter e SCHOLES, Jim. Soft Systems Methodology in Action.
John Wiley & Sons., 1999.
COCKBURN, Alistair. Agile Software Development. Addison-Wesley, 2002.
DAVIS, Alan M. Software Requirements Revision Objects, Functions, &
States. Prentice Hall PTR, 1994.
FOWLER, Martin. The new methodology. http://www.martinfowler.com/
articles/newMethodology.html, 2000.
GROUP, Standish. Chaos Report. www.standishgroup.com, 1995.
HIGHSMITH, James A. Adaptive Software Development. Dorset House
Publishing, 1996.
LEFEBVRE, Eric, COAD, Peter Coad e De LUCA, Jeff. Java Modeling in Color
with UML. Prentice Hall PTR, 1999.
SOMMERVILLE, Ian e KONTONYA, Gerald. Requirements Engineering. John
Wiley & Sons, 1997.
MACAULAY, Linda A. Requirements Engineering. Springer Verlag, 1996.
McPHEE, Christopher. Requirements engineering for projects with critical
time-to-market. Master’s thesis, University of Calgary, 2001.
NIELSEN,
Jakob.
The
Use
and
Misuse
of
Focus
Groups.
http://www.useit.com/papers/focusgroups.html, 1997.
POTTS,
Colin.
Requirements
Reviews:
Understanding
Customer
Requirements. http://www.cc.gatech.edu/computing/classes/cs3302 98 summer/721-reqts/sld001.htm, 1998.
44
ROBERTSON, Suzanne. Requirements testing: Creating an effective
feedback loop. In FEAST 2000, London, July 2000.
SCHWABER, Ken e BEEDLE, Mike. Agile Software Development with Scrum.
Prentice Hall PTR, 2001.
STAPLETON, Jennifer. DSDM - Dynamic System Development Method.
Addison-Wesley, 1995.
TEITELROIT, Ricardo e BOFF, Luiz Henrique. Metodologia JAD – Joint
Application Design: um novo enfoque de modelagem de sistemas? Anais do
Encontro Nacional de Pós-graduação em Adminitração, 1991.
WIEGERS, Karl E. Software Requirements. Microsoft Press, 1999.
45
Download

monografia - Centro de Informática da UFPE