Académique Documents
Professionnel Documents
Culture Documents
Especialização em
Engenharia de Software
(EngSw) a Distância
Disciplina/Aula: Engenharia de
Software e Engenharia de Requisitos
Elisamara de Oliveira
1
Sumário
Apresentação ...................................................................................................................... 4
Capítulo 1 – Software e Engenharia de Software ............................................................ 5
1.1. Antecedentes Históricos da Engenharia de Software ................................................ 5
1.2. Definições e Conceitos de Software e Engenharia de Software ................................ 8
1.3. O Produto Software .................................................................................................. 13
1.4. Aplicações do Software ............................................................................................ 15
1.5. Mitos do Software ..................................................................................................... 17
Exercícios do Capítulo 1 ................................................................................................. 21
Capítulo 2 – Processo de Software ................................................................................. 23
2.1. Conceitos Básicos de Processo de Software ........................................................... 23
2.2. Padrões, Avaliação e Tecnologias de Processo ...................................................... 27
Exercícios do Capítulo 2 ................................................................................................. 31
Capítulo 3 – Modelos de Processo ................................................................................. 32
3.1. Ciclo de Vida e Modelos de Processo ...................................................................... 32
3.2. Modelos Prescritivos de Processo ........................................................................... 37
3.3. Modelo em Cascata ................................................................................................. 38
3.4. Modelos Evolucionários de Processo ....................................................................... 40
3.4.1. Prototipação ....................................................................................................... 40
3.4.2. Modelo Espiral ................................................................................................... 43
3.4.3. Modelo de Desenvolvimento Concorrente ......................................................... 45
3.5. Modelos Incrementais de Processo ......................................................................... 47
3.5.1. Modelo Incremental............................................................................................ 48
3.5.2. Modelo RAD - Rapid Application Development .................................................. 49
3.6. Desenvolvimento Baseado em Componentes.......................................................... 51
3.7. Modelo de Métodos Formais .................................................................................... 54
3.8. Processo Unificado .................................................................................................. 56
3.9. Desenvolvimento Ágil ............................................................................................... 60
Exercícios do Capítulo 3 ................................................................................................. 65
Capítulo 4 – Engenharia de Requisitos .......................................................................... 68
4.1. Requisitos e Engenharia de Requisitos .................................................................... 68
4.2. Objetivos e Classificação dos Requisitos ................................................................ 70
2
4.3. Tarefas da Engenharia de Requisitos ...................................................................... 77
Exercícios do Capítulo 4 – parte 1 .................................................................................. 77
4.4. Elicitação de Requisitos ........................................................................................... 84
4.4.1. Técnicas de Coleta de Requisitos ...................................................................... 88
4.4.2. Considerações sobre as Técnicas de Coleta de Requisitos .............................. 95
Exercícios do Capítulo 4 – parte 2 .................................................................................. 97
Considerações Finais....................................................................................................... 99
Respostas Comentadas dos Exercícios ....................................................................... 100
Glossário de Siglas ........................................................................................................ 107
Bibliografia ...................................................................................................................... 108
Apresentação
Marcelo Pintaud
Elisamara de Oliveira
Capítulo 1 – Software e Engenharia de Software
Caro aluno, neste capítulo abordaremos os antecedentes históricos da
engenharia de software, falaremos sobre os principais conceitos de software e da
engenharia de software, sobre a crise do software, mostraremos as diferenças entre os
produtos “software” x ‘hardware”, exemplificaremos algumas das principais
aplicações do software e o alertaremos sobre o que é mito e realidade na área de
desenvolvimento.
caracterizado por um
Fonte:http://profcarolinadgs.webnode.com.br/unip/engenharia-de-software/
conjunto de componentes
5
de software (estruturas de dados, métodos, técnicas) encapsulados na forma de
procedimentos, funções, módulos, objetos ou agentes, interconectados entre si, compondo
a arquitetura do software, que deverão ser executados em sistemas computacionais.
A Crise do Software
A “crise do software” foi um termo criado para descrever as dificuldades
enfrentadas no desenvolvimento de software no final da década de 1960. A
complexidade dos problemas, a ausência de técnicas bem estabelecidas e a
crescente demanda por novas aplicações começavam a se tornar um problema
sério. Essa crise teve como origem a introdução de computadores “mais poderosos”.
O advento deste hardware com mais recursos tornava viáveis softwares bem
maiores e mais complexos que os sistemas existentes. A experiência inicial de
construção desses sistemas mostrou que uma abordagem informal de
desenvolvimento de software não era suficiente. Projetos importantes sofriam
atrasos (às vezes, de alguns anos). Os custos eram muito maiores do que os
inicialmente projetados. As soluções de software não eram confiáveis. Os
programas eram de difícil manutenção. Novas técnicas e novos métodos eram
necessários para controlar a complexidade inerente aos grandes sistemas de
software.
Desta forma, como o principal objetivo dessa conferência foi estabelecer práticas
mais maduras para o processo de desenvolvimento de software, é considerado como o
evento que deu origem à disciplina de Engenharia de Software.
6
Uma década mais tarde, em 1995, a organização The Standish Group (1995)
publicou um estudo analisando as estatísticas sobre sucesso e fracasso dos projetos de
desenvolvimento de software: o Chaos Report. Neste estudo foi revelado que:
• quase 84% dos projetos de software eram mal-sucedidos, sejam por serem
cancelados ou apresentarem falhas críticas (dentre elas conclusão fora do tempo
previsto, fora do orçamento previsto ou com menos funcionalidades do que o
planejado)
• 31.1% dos projetos eram cancelados antes de serem concluídos
• 52.7% dos projetos apresentavam custo real 189% maior que o estimado e o tempo
de conclusão 222% maior que o previsto
• 16.2% dos projetos eram concluídos dentro de prazo, custo e escopo estimados
• estimou-se que, naquele ano, as agências governamentais e companhias privadas
americanas teriam gasto US$ 81 bilhões apenas em projetos cancelados, e mais
US$ 59 bilhões em projetos concluídos fora do tempo previsto.
7
Observando estes números, fica claro que de 1960 até hoje, mais de 50 anos de
experiência no desenvolvimento de software não bastaram para melhorar efetivamente a
qualidade do software, a despeito da evolução ocorrida na área de Engenharia de Software
e do ferramental disponível.
Fonte: http://www.virtuadesigner.com/keynotes.html
8
Apesar da sua indiscutível importância, caro, aluno, as técnicas e métodos da
Engenharia de Software são, atualmente, amplamente, mas não universalmente,
utilizadas.
Dicionário
10
• O software geralmente é desenvolvido sob medida, ao contrário do hardware, no
qual o projetista tem acesso a componentes existentes que executam tarefas
definidas. O projetista do software nem sempre terá acesso a módulos prontos
para utilização e quando o faz, pode elevar o risco do produto devido a questões
de segurança;
• Os custos do software estão concentrados no desenvolvimento e não no
processo de manufatura. Isto significa que não pode ser gerido como projeto de
manufatura;
• Ao longo do tempo, o produto de software não se desgasta, mas se deteriora em
função da introdução de erros oriundos de atividades de manutenção ou
evoluções implícitas no processo que devem ser reconsideradas no modelo
original.
Desta forma, o software sofre deterioração ocasionada por diversos fatores sendo
uma característica peculiar do produto. Segundo Pressman (2010), no caso do hardware,
temos um alto índice de falhas no início do seu ciclo de vida ocasionadas por defeitos de
fabricação e projeto. Posteriormente os defeitos são corrigidos dando estabilidade nas
falhas ou mantendo-a em um nível muito baixo e suportável para a estrutura. Já no final do
ciclo de vida do produto podem surgir problemas relacionados ao envelhecimento, acúmulo
de poeira, vibração, abuso, temperaturas extremas, entre outros. Este processo pode ser
visto no gráfico apresentado na figura 1.
11
Diferentemente da curva teórica de falhas do hardware, a de software leva em conta
que o software não sofre processos de envelhecimento como o hardware, pois o software
não é algo físico.No início do ciclo de vida do software, teremos problemas (bugs) que
serão ajustados no decorrer do desenvolvimento e se estabilizarão gerando uma tendência
de achatamento da curva. Notemos que esta é apenas uma teoria, já que a curva real do
índice de falhas de um software considera o processo de manutenção e mudanças.
Durante o processo de refinamento do produto ou mudanças aumenta-se,
consideravelmente, a probabilidade de inserção de novos erros, gerando picos na curva de
falhas. As sucessivas alterações do software tendem a introduzir mais erros antes da
estabilização dos erros de alterações anteriores, ocasionando a tendência crescente do
índice de falhas, conforme pode ser visto na figura 2.
12
Quando o hardware é projetado e construído, faz-se uso de catálogos de
componentes digitais. Cada circuito integrado tem um código de componente, uma função
definida e validada, uma interface bem delineada e um conjunto padrão de integração.
Depois que cada componente é selecionado, ele pode ser requisitado do estoque e
utilizado em diferentes projetos de hardware com alta confiabilidade.
No mundo do software, isso é algo que está apenas começando a ser utilizado
numa escala mais ampla, apesar de existirem alguns casos antigos de “reuso”, como as
bibliotecas de subrotinas científicas. Atualmente, a visão de reuso foi ampliada para
abranger não apenas algoritmos consagrados, mas também estruturas de dados,
interfaces gráficas e diferentes classes e componentes orientados a objetos.
13
O programador solitário de antigamente foi substituído por uma equipe de
especialistas de software, com cada um se concentrando numa parte da tecnologia
necessária para produzir uma aplicação complexa. Mas, os mesmos questionamentos
feitos ao “programador solitário” continuam sendo feitos quando modernos sistemas
baseados em computador estão sendo construídos:
• Por que se leva tanto tempo para concluir um software?
• Por que não podemos achar todos os erros antes de entregar o software aos
clientes?
Assim, caro aluno, o desenvolvimento de software deve ser feito cercando todo o
processo de bastante cuidado. Numa abordagem mais madura do processo de
desenvolvimento, podemos considerar diversos fatores, dentre os quais podemos citar:
• Há similaridades e diferenças entre os projetos de software, assim os modelos
definidos não são aplicáveis a todos os projetos;
• Existe uma estreita relação entre o processo de desenvolvimento e manutenção,
e o produto de software, sendo a escolha do processo fundamental para o
alcance das características desejadas do produto;
• Para uma boa visibilidade do processo é essencial o estabelecimento de critérios
de medição apoiados em objetivos e modelos apropriados;
• O software é um processo experimental, no qual o aprendizado com
realimentação para o processo de desenvolvimento e manutenção dos produtos
é atividade natural;
• Avaliação e realimentação repetitiva são necessárias para o aprendizado e
inclusão de melhorias, além do controle individual de projetos;
• Gerir, registrar e distribuir corretamente as experiências (ou cases) permitirá a
construção de uma competência de software na organização;
14
• Uma variedade de experiências em relação ao processo, produto, recursos,
defeitos e modelos de qualidade podem formar uma base de experiências
atualizável;
• O processo de desenvolvimento e manutenção de software deve considerar a
reutilização de experiências com definições de quando, como e onde reutilizar;
• As experiências podem ser armazenadas e disponibilizadas de formas variadas
e integradas em repositórios de informações relacionando a similaridade de
projetos, produtos, características, fenômenos e outros.
15
• Software científico e de engenharia:
caracterizado por algoritmos que “processam
números” e realizam operações matemáticas
e cálculos mais complexos (astronomia,
análise automotiva de tensões, manufatura
automatizada, previsão de tempo,
simuladores, etc).
• Software embutido: produtos “inteligentes”. São programas armazenados em
ROMs – Read Only Memories, como controle
de teclado para um forno de microondas,
funções digitais em um automóvel – controle
de combustível, mostradores do painel,
sistemas de frenagem, etc. Estes programas
são chamados de firmware, que são
programas gravados no hardware que controlam as funções dos dispositivos
eletrônicos.
• Software para web: as páginas da web
recuperadas por um browser constituem software
que incorpora instruções executáveis na forma de
scripts, permitindo a inclusão de elementos
dinâmicos, animações, acesso a banco de dados
e diversas características que fazem as páginas
HTML estáticas de antigamente parecerem apenas folhas de um livro em papel.
• Software para computadores pessoais: esse mercado “explodiu” nos últimos
anos, englobando uma enorme lista de aplicativos para os desktops e notebooks,
como processadores de texto, planilhas, aplicações
gráficas, aplicações multimídia, etc.
• Software para inteligência artificial: faz uso de
algoritmos não numéricos para resolver problemas
complexos, como sistemas de reconhecimento de
padrões (de imagem e de voz), redes neurais artificiais,
sistemas de controle de robôs, etc.
16
1.5. Mitos do Software
Muitas crenças ou mitos foram
criados acerca de acontecimentos ligados
ao processo de desenvolvimento de
software, desde os primeiros programas.
Mas são informações, muitas vezes,
traiçoeiras. Os mitos podem parecer
verdadeiros, trazer informações sobre fatos
razoáveis e muitas vezes serem divulgados
por pessoas que “entendem do assunto”.
Hoje os profissionais que conhecem a Fonte: http://biosferams.org/2011/07/10-mitos-
sobre-computadores/
Engenharia de Software reconhecem os
mitos pelo o que eles são na realidade: afirmações enganosas que já causaram prejuízo a
diversos profissionais.
Para que você, caro aluno, não seja enganado pelos mitos, pois eles ainda estão
presentes em nosso meio, vamos apresentá-los a você nesta seção, com base na
abordagem de Pressman (2010).
Gerentes estão frequentemente sob pressão para manter o orçamento, cumprir prazos e
aumentar a qualidade. Devido a isso, é comum agarrarem-se a mitos que diminuem
(temporariamente) essa pressão.
• Mito:
Já temos o manual repleto de padrões e procedimentos para a construção do
software. Isso não oferecerá ao meu pessoal tudo o que eles precisam saber?
• Realidade:
- O manual existe. Mas é usado?
- Os profissionais sabem da sua existência?
- Ele reflete as práticas mais modernas de engenharia de software?
- É completo?
- Está voltado p/ melhorar o prazo de entrega focado na qualidade?
Na maioria dos casos a resposta é “não”.
17
• Mito:
Meu pessoal tem ferramentas de software de última geração; afinal de contas lhes
compramos os mais novos computadores.
• Realidade:
É necessário mais do que computadores de última geração para fazer um
desenvolvimento de software de alta qualidade. Ferramentas Case são mais
importantes. Contudo, a maioria dos desenvolvedores não as usam ainda, ou
subutilizam-nas.
• Mito:
Se nós estamos atrasados nos prazos, podemos adicionar mais programadores e
tirar o atraso.
• Realidade:
Desenvolvimento de software não é um processo mecânico. Quando novas pessoas
são adicionadas, pessoas que estavam trabalhando devem gastar tempo educando
os novatos. Pessoas podem ser adicionadas, mas de um modo planejado e bem
coordenado.
• Mito:
Se decidirmos terceirizar um projeto vamos poder relaxar e deixar que a empresa o
elabore.
• Realidade:
Se uma organização não sabe como gerir e controlar seus projetos de software,
terceirizá-los certamente trará outros problemas, talvez maiores.
Mitos do Cliente
Um cliente que encomenda um software pode ser uma pessoa na mesa vizinha, um grupo
técnico em outra sala, o departamento de promoção/vendas ou uma empresa que
encomendou software sob contrato.
18
O cliente acredita em mitos de software, geralmente porque os gerentes e profissionais de
software fazem pouco para corrigir essa desinformação. Mitos levam a falsas expectativas
(pelo cliente) e à insatisfação com o desenvolvedor.
• Mito:
Uma declaração geral dos objetivos é suficiente para se começar a escrever
programas – podemos preencher os detalhes mais tarde.
• Realidade:
Uma definição inicial ruim é a principal causa de falhas nos esforços de software. É
essencial uma descrição formal do domínio da informação, função, comportamento,
performance, interface, restrições de projeto e critérios de validação. Necessária
intensa comunicação entre cliente e desenvolvedor.
• Mito:
Os requisitos de projeto modificam-se continuamente, mas as mudanças podem ser
facilmente acomodadas, porque o software é flexível.
• Realidade:
É verdade que os requisitos de software mudam, mas o impacto das mudanças
varia de acordo com o momento na qual ela ocorre. Em termos de custos, na fase
de definição (x1), na fase de desenvolvimento (1,5 a 6x) e na fase de manutenção
(60 a 100x). Deve ser dada muita atenção às definições iniciais.
Mitos do Profissional
• Mito:
Assim que escrevermos o programa e o
colocarmos em funcionamento nosso Fonte:http://www.nic.br/imprensa/clipping/20
trabalho estará completo. 11/midia628.htm
19
• Realidade:
Estudos mostram que, entre 60% a 80%, de todo o esforço gasto em um programa
serão despendidos depois dele ter sido entregue, pela primeira vez, para o usuário.
• Mito:
Enquanto não tiver o programa “funcionando”, eu não terei realmente nenhuma
maneira de avaliar sua qualidade.
• Realidade:
Um dos mecanismos mais efetivos para garantia de qualidade do software pode ser
aplicado desde o seu início – a Revisão Técnica Formal (um filtro de qualidade).
• Mito:
A única coisa a ser entregue em um projeto bem-sucedido é o programa
funcionando.
• Realidade:
O programa executável é uma das partes da configuração do software. A
documentação é um fator importante também (alicerce para o desenvolvimento e
guia para a manutenção).
• Mito:
A engenharia de software vai nos fazer criar documentação volumosa e
desnecessária que certamente nos atrasará.
• Realidade:
A engenharia de software não se relaciona à criação de documentos. Refere-se à
criação de qualidade. Melhor qualidade leva à redução de retrabalho. E menor
retrabalho resulta em tempos de entrega mais rápidos.
20
Exercícios do Capítulo 1
1) Qual das questões abaixo não é mais uma das grandes preocupações de um
engenheiro de software?
a) Por que normalmente se gasta tanto tempo para desenvolver software?
b) Por que, via de regra, software custa tão caro?
c) Por que quase sempre não se consegue remover todos os erros do software
antes da sua entrega?
d) Por que hardware é tão caro?
21
5) O que caracterizou a chamada “crise do software”?
22
Capítulo 2 – Processo de Software
Caro aluno, neste capítulo descreveremos o que é um processo de software,
mostraremos as camadas em que a Engenharia de Software se divide, descreveremos
os padrões de processo, a avaliação e as ferramentas que apoiam o processo.
23
de alta qualidade
produzido de maneira econômica
que seja confiável
que trabalhe eficientemente em máquinas reais
que seja entregue no prazo
que satisfaça o cliente
Figura 3
Engenharia de Software: uma tecnologia em camadas
24
Para que a Engenharia de Software possa ser aplicada como uma abordagem
disciplinada para o desenvolvimento, operação e manutenção de um software, um
processo deve ser definido. De uma forma geral, um processo é caracterizado por fases:
1. Fase de Definição
2. Fase de Desenvolvimento
3. Fase de Manutenção
25
Nesta fase, 3 etapas técnicas específicas ocorrerão:
i. Projeto do Software
ii. Geração de Código
iii. Teste de Software
26
2.2. Padrões, Avaliação e Tecnologias de Processo
De acordo com Pressman (2010), um processo de software pode ser definido como
uma coleção de padrões que definem um conjunto de atividades, ações, tarefas de
trabalho e produtos de trabalho necessários para o desenvolvimento de software de
computador.
Em termos gerais, um padrão de processo nos fornece um gabarito que permite
que sejam listadas as características mais importantes do processo de software. Mas é
interessante notar, caro aluno, que uma equipe de desenvolvimento pode construir, pela
combinação de padrões, um processo que melhor satisfaça às necessidades do projeto.
Descrever um padrão de projeto é uma tarefa muito importante, pois permite se
identificar particularidades que facilitem a comparação entre os padrões, auxiliando na
decisão de escolha por um padrão específico. Gamma et al (1994) propõem um gabarito
para esta definição, dividido em seções, como apresentado a seguir:
• Nome do padrão e Classificação: o nome é muito importante para um padrão,
pois deve indicar a essência do padrão em poucas palavras.
• Intenção do padrão: descreve o que o padrão faz, qual a sua intenção e qual
problema o padrão se propõe a resolver.
• Também conhecido como: um outro nome pelo qual o padrão é conhecido, caso
exista.
• Motivação: um exemplo de problema de projeto e como a utilização do padrão
resolve este problema.
• Aplicabilidade: condições em que o padrão pode ser aplicado, exemplo de
situação em que o padrão é aplicado e como identificar essas situações.
• Estrutura: uma representação gráfica das classes no padrão utilizando uma
linguagem de modelagem, em que possam ser representados os relacionamentos
entre os objetos e sequências de requisições.
• Participantes: apresenta as classes e objetos que fazem parte do padrão e quais
as suas responsabilidades.
• Colaborações: como os participantes colaboram para atender as suas
responsabilidades.
• Consequências: descreve como o padrão alcança seus objetivos, quais as
decisões e resultados de usar o padrão e que aspectos da estrutura do sistema
podem ser variados independentemente.
27
• Implementação: que detalhes de implementação devem ser observados se o
padrão for implementado. Deve ser observado se existem detalhes específicos para
uma determinada linguagem.
• Exemplo de código: um exemplo de código que mostre como o padrão deve ser
implementado em alguma linguagem.
• Usos conhecidos: exemplos do padrão encontrados em sistemas reais.
• Padrões relacionados: padrões que se assemelham a este padrão e quais as
diferenças. Apresenta também outros padrões que podem ser utilizados em
conjunto.
Processo de Software
É examinado por
Conduz a
Melhoria de Processo Determinação da
de Software Capacidade
Motiva
Figura 4
Processo de Software, Avaliação e Melhoria de Processo
28
Como vimos, os modelos de processo podem e devem ser adaptados para o uso de
uma determinada equipe de projeto de software. Para que se possa conseguir isso, foram
desenvolvidas diversas ferramentas de tecnologia de processo de forma a ajudar as
organizações a analisar o processo que utiliza, organizar as tarefas de trabalho, controlar e
monitorar o progresso do desenvolvimento e ainda gerenciar sua qualidade técnica.
Os componentes da equipe de desenvolvimento podem utilizar as ferramentas para
desenvolver um checklist das tarefas de trabalho a seu cargo. As ferramentas de
tecnologia de processo também podem ser utilizadas para coordenar e gerenciar o uso de
outras ferramentas de engenharia de software apoiadas por computador adequadas às
diversas tarefas de trabalho.
Vimos, também, que padrões de processo podem ser utilizados para definir
as características de um processo.
29
(Animação 1) Casa Segura – Como o Projeto Começa
A Cena: Sala de reunião na empresa CPI, uma empresa (fictícia) que fabrica produtos de
consumo para uso residencial e comercial.
Locutor (voz): Caros alunos, vamos dar início a uma sequência de animações para ajudá-lo a
entender como funciona todo o ciclo de desenvolvimento de um projeto de software, desde a
sua concepção até a entrega do produto aos clientes. Estas animações referem-se ao projeto
“Casa Segura”, proposto por Roger Pressman, em seu livro Engenharia de Software, 6ª edição.
A conversa:
Oscar: Tudo bem, Paulo, o que é isto que eu ouvi sobre vocês desenvolverem o quê? Uma caixa
sem-fio universal genérica?
Paulo: É muito interessante, quase do tamanho de uma caixa de fósforo pequena. Pode-se ligá-
la a sensores de todas as naturezas, a uma câmera digital, a praticamente qualquer coisa. Usa o
protocolo sem fio 802.11b. Permite acessar a saída de um dispositivo sem fio. Estamos
pensando que ela vai levar a toda uma nova geração de produtos.
Roberto: Sim. De fato, com as vendas tão achatadas como elas têm estado este ano,
precisamos de algo novo. Vanessa e eu estivemos fazendo um pouco de pesquisa de mercado e
achamos que temos uma linha de produtos que pode ser grande.
Vanessa: É toda uma geração do que chamamos de “produtos de gestão doméstica”. Nós a
chamamos de CasaSegura. Eles usam a nossa interface sem fio, fornecendo a usuários
domésticos ou de pequenos negócios um sistema que é controlado pelo seu PC – segurança
residencial, vigilância residencial, controle de eletrodomésticos e dispositivos. Você sabe, ligar o
ar condicionado da residência enquanto está indo para casa, essa espécie de coisa.
Paulo (entrando na conversa): A engenharia fez um estudo de viabilidade técnica dessa ideia,
Oscar. É exequível e tem baixo custo de fabricação. A maior parte do hardware é de prateleira.
Software já é mais complicado, mas nada que não possamos fazer.
Roberto: Os PCs têm penetrado 60% de todos os domicílios do país. Se pudéssemos dar a essa
coisa o preço adequado, ela poderia ser um eletrodoméstico campeão. Ninguém mais tem a
nossa caixa sem fio – ela é de nossa propriedade intelectual. Vamos ter uma vantagem de dois
anos sobre a concorrência. Receita? Pode ser tanto quanto 30 a 40 milhões de dólares no
segundo ano.
30
Oscar (sorrindo): Vamos levar isso para o nível acima. Eu estou interessado.
Exercícios do Capítulo 2
3) Qual dos itens listados abaixo não se constitui numa das camadas da engenharia
de software?
a) Processo
b) Manufatura
c) Métodos
d) Ferramentas
31
Capítulo 3 – Modelos de Processo
Caro aluno,, neste capítulo definiremos o que é ciclo de vida
vida de software,
software quais
suas principais etapas e descreveremos os principais modelos de processo de software:
Modelo em Cascata, Modelos Evolucionários (Modelo de Prototipagem, Modelo Espiral
e Modelo Concorrente), Modelos Incrementais (Modelo RAD e Modelo Incremental),
In
Modelo Baseado em Componentes,
Componentes Modelo de Métodos Formais, Processo Unificado e
Métodos Ágeis de Desenvolvimento.
1. Fase de Definição
2. Fase de Desenvolvimento
34
Definição Desenvolvimento Operação Retirada
3. Fase de Operação
• Distribuição e entrega
• Instalação e configuração
figuração
• Utilização
• Manutenção
A distribuição e entrega pode ser feita diretamente pelo desenvolvedor (em caso de
software personalizado) ou em um pacote a ser vendido em prateleiras de lojas ou para ser
baixado pela internet.
O processo de instalação e configuração, normalmente, pode ser feito com a ajuda
de software de instalação disponibilizados pelos fabricantes dos ambientes operacionais.
A utilização é a efetiva entrada em operação do software.
are. A qualidade da utilização
reflete a usabilidade do software.
tware.
A manutenção
enção normalmente ocorre de forma corretiva
corretiva, adaptativa, de
aperfeiçoamento e evolutiva. As
A manutenções podem ser relativas à resolução de
problemas referentes à qualidade do software (falhas, baixo desempenho, baixa
usabilidade, falta de confiabilidade,
fiabilidade, etc.),
etc.) à produção de novas versões do software de
forma a atender aos novos requisitos dos clientes, ou adaptar-se
adaptar se às novas tecnologias que
surgem (hardware, plataformas operacionais, novas linguagens e paradigmas,
paradigmas etc).
Mudanças no domínio de
e aplicação implicam em novos requisitos e incorporação de novas
funcionalidades. Surgimento de novas tecnologias de software e hardware e mudanças
para uma plataforma mais avançada também requerem evolução.
35
Definição Desenvolvimento Operação Retirada
4. Fase de retirada
37
(Animação 2) Casa Segura – Seleção de um Modelo de Processo, Parte I
A cena: Sala de reuniões do grupo de engenharia de software na empresa CPI, uma empresa
(fictícia) que fabrica produtos de consumo para uso residencial e comercial.
A conversa:
Paulo: Então, vamos recapitular. Eu gastei algum tempo discutindo a linha de produtos CasaSegura como a
vemos no momento. Sem dúvida, temos muito trabalho a fazer para simplesmente definir a coisas, mas eu
gostaria que vocês começassem a pensar como vão abordar a parte do software desse projeto.
Douglas: Parece que temos sido bastante desorganizados em nossa abordagem de software no passado.
Douglas: Isso é verdade, mas não sem muito sofrimento, e esse projeto parece ser maior e mais complexo
do que qualquer coisa que tenhamos feito no passado.
Júnior: Não parece tão difícil, mas eu concordo... Nossa abordagem ad hoc para os projetos anteriores não
vai funcionar aqui, particularmente se tivermos um prazo muito apertado.
Douglas (sorrindo): Eu quero ser um pouco mais profissional na nossa abordagem. Fui a um curso rápido
na última semana e aprendi bastante sobre engenharia de software... boa coisa. Precisamos de um
processo aqui.
Douglas: Dê uma chance antes de ficar bravo comigo. Eis o que eu quero dizer. [Douglas prossegue
descrevendo o arcabouço de processo e os modelos prescritivos de processo apresentados até agora.]
Douglas: Assim, de qualquer modo, parece que um modelo em cascata não é adequado para nós... ele
considera que tenhamos todos os requisitos antecipadamente e, conhecendo esta empresa, isso não é
provável.
Viviane: Sim, e aquele modelo RAD parece orientado demais à tecnologia da informação... provavelmente
bom para construir um sistema de controle de estoque ou alguma outra coisa, mas não é adequado para o
CasaSegura.
Douglas: Eu concordo.
Edson: Essa abordagem de prototipagem parece boa. Muito parecida com o que nós fazemos aqui.
Viviane: Esse é que é o problema. Estou preocupado que ela não vai nos dar estrutura suficiente.
Douglas: Não se preocupe, temos muitas outras opções e eu quero que vocês escolham o que é melhor
para a equipe e para o projeto.
Júnior (franzindo a testa): Meu trabalho é construir programas de computador, não ficar manipulando
papel.
38
3.3. Modelo em Cascata
No modelo em cascata, também conhecido como ciclo de vida clássico, o processo
de desenvolvimento de software é visto como uma abordagem sistemática e sequencial
sequencia
que começa com a especificação dos requisitos do cliente e progride seguindo as etapas
de planejamento, modelagem, construção e implantação do sistema, conforme ilustra a
figura 5,, culminando na manutenção progressiva do produto entregue.
entregue
•Iniciação do Estimativas
•Estimativas •Análise •Codificação •Entrega
projeto Cronogramação
•Cronogramação •Projeto •Teste •Manutenção
•Levantamento Monitoração
•Monitoração •Feedback
de requisitos
Figura 5
Modelo em Cascata
Os modelos que são agrupados nesta categoria são: Prototipação, Modelo Espiral e
Modelo Concorrente, que são apresentados no que se segue.
3.4.1. Prototipação
40
Modelagem
Plano Rápido
Especificação
Projeto
Rápido
Entrega e
Construção do
Feedback
Protótipo
Figura 6
Modelo de Prototipação
41
Um dos riscos envolvidos neste modelo é o descomprometimento com a
análise do produto, visto que os envolvidos podem se apoiar totalmente no
modelo prototipado gerando uma expectativa muitas vezes irrealista de
desempenho, em função do protótipo ser muito mais enxuto do que o produto
final e estar em ambiente controlado.
Além disso, o cliente não sabe que o software que ele vê não considerou,
durante o desenvolvimento, a qualidade global e a manutenibilidade a longo
prazo. Ele pode, também, não
n aceitar facilmente a ideia
ia de que a versão final do
software está sendo construída e tentar forçar a utilização do protótipo como
produto final.
Outro risco deste modelo é que o desenvolvedor frequentemente
entemente faz uma
implementação comprometida (utilizando partes de programas existentes,
geradores de relatórios, geradores de janelas) com o objetivo de produzir
rapidamente um protótipo executável. Depois de um tempo ele se familiariza com
essas escolhas, e pode se esquecer que elas não são apropriadas para o produto
final.
42
3.4.2. Modelo Espiral
Planejamento
Análise de Riscos
Especificação
Modelagem
Implantação
Entrega e Construção do Código
Feedback
Testes
Figura 8
Modelo Espiral
43
As principais características deste modelo são:
44
3.4.3. Modelo de Desenvolvimento Concorrente
Figura 9
Transições de Estado no Modelo de Desenvolvimento Concorrente
45
De forma geral, as principais características deste modelo são:
• Todas as atividades ocorrem em paralelo, mas estão em diferentes estados.
• O modelo define uma série de eventos que vão disparar transições de estado
para estado, para cada uma das atividades.
• Em vez de usar uma sequência como o modelo em cascata, ele define uma
rede de atividades.
• Eventos gerados dentro de uma certa atividade ou em algum outro lugar da
rede de atividades disparam transições entre estados de uma atividade
• Pode ser aplicado a todo tipo de desenvolvimento de software e fornece uma
visão exata de como está o estado do projeto.
• Em vários projetos pode existir uma simultaneidade (concorrência) entre as
várias atividades de desenvolvimento e de gestão de projetos.
• É representado como uma série de grandes atividades técnicas, tarefas e
seus estados associados (fornece um panorama preciso do estado atual do
projeto).
46
(Animação 3) Casa Segura – Seleção de um Modelo de Processo, Parte II
A cena: Sala de reuniões de engenharia de software na empresa CPI, uma empresa que fabrica
produtos de consumo para uso doméstico e comercial.
A conversa:
Edson: Agora estou vendo alguma coisa da qual gosto. Uma abordagem incremental faz
sentido e eu realmente gosto do fluxo daquela coisa de modelo espiral. Isso é manter a coisa
real.
Paulo: Espere um pouco, você disse que reformamos o plano em cada volta em torno da
espiral, Douglas? Isso não é tão bom, precisamos de um plano, de um cronograma e
precisamos nos ater a ele.
Douglas: Essa é uma escola de pensamento antiga, Paulo. Como o Edson disse, temos de
manter a coisa real. Eu proponho que é melhor adaptar o plano à medida que aprendemos
mais e à medida que modificações são solicitadas. É muito mais realista. Qual o sentido de um
plano se ele não reflete a realidade?
Paulo (franzindo a testa): Eu penso que sim, mas a gerência superior não vai gostar disso...
eles querem um plano fixo.
Douglas (sorrindo): Então você vai ter que reeducá-los, meu amigo.
47
3.5. Modelos Incrementais de Processo
Caro aluno, há diversas situações em que os requisitos iniciais do software estão
razoavelmente bem definidos, mas o escopo global do processo de desenvolvimento
claramente elimina uma abordagem puramente linear ou sequencial. Adicionalmente pode
haver a necessidade de se fornecer rapidamente um conjunto limitado de funcionalidades
do software aos usuários e depois refinar, melhorar e expandir aquela funcionalidade em
versões mais avançadas do software. Nestes casos, os modelos de processo que
produzem software em incrementos são os mais indicados.
Figura 10
Modelo de Processo Incremental
48
De uma forma geral, o Modelo Incremental apresenta as características:
• Combina elementos do Modelo em Cascata (aplicado repetitivamente) com a
filosofia iterativa da Prototipação.
• Aplica sequências lineares de uma forma racional à medida que o tempo
passa.
• Cada sequência linear produz um incremento do software e pode gerar uma
entrega parcial do produto.
• Os primeiros incrementos são versões simplificadas do produto final.
• O primeiro incremento é chamado de “núcleo do produto” (core).
49
O RAD enquadra-se no modelo de atividades de arcabouço do Modelo em Cascata:
• Especificação: atividade em que se entende o problema de negócio, as
características das informações e é realizado o levantamento de requisitos.
• Planejamento: atividade essencial. Várias equipes trabalham em paralelo em
diferentes funções.
• Modelagem: estabelece representações de projeto que servem como base
para a atividade de construção. Abrange três fases:
o Modelagem de negócio
o Modelagem de dados
o Modelagem de processo
• Construção: faz uso de componentes de software preexistentes e geração de
códigos.
• Implantação: estabelece a base para iterações subsequentes, se
necessárias.
A figura 10 apresenta a representação esquemática do modelo RAD em relação ao
modelo sequencial tradiconal.
50
• Projetos em que os requisitos estão bem definidos, o objetivo do sistema é
restrito e se deseja criar um “sistema plenamente funcional” dentro de
períodos muito curtos (por exemplo, de 60 a 90 dias, como a figura 11
sugere)
• Projetos em que há fortes restrições de tempo impostas pelo cliente .
• Aplicações que podem ser modularizadas de forma que cada função principal
possa ser completada em menos de 3 meses.
• Projetos em que cada função principal possa ser alocada para uma equipe
distinta e depois integradas para formar o todo do produto.
Mas, a utilização do modelo RAD também pode implicar em problemas. Para
projetos grandes, mas mensuráveis, o RAD requer um número elevado de recursos
humanos que sejam suficientes para criar um número adequado de equipes. Além disso, o
RAD requer um comprometimento entre desenvolvedores e clientes para que as atividades
possam ser realizadas rapidamente e o sistema seja concluído em um tempo curto. Se o
comprometimento for abandonado por qualquer das partes, o projeto falhará. O uso do
RAD também não é apropriado quando os riscos técnicos são grandes (por exemplo,
quando a aplicação faz uso de uma nova tecnologia).
51
componentes candidatos. Esses componentes podem ser projetados como módulos de
software convencional ou como classes ou pacotes de classes orientadas a objeto.
No paradigma orientado a objetos uma classe encapsula dados e algoritmos,
algoritmos que
também podem ser utilizados para manipular os dados. Através desta abordagem,
abordagem uma
biblioteca de classes pode ser construída com as classes identificadas no desenvolvimento
do software e a partir de então toda iteração
iteração da espiral deverá verificar o conteúdo da
biblioteca que pode ser reutilizado.
reutilizado A figura 12 ilustra este processo.
Planejamento
Análise de Riscos
Especificação
Modelagem
Implantação
Entrega e Construção do Código
Feedback Testes
Figura 12
Modelo do Desenvolvimento Baseado em Componentes
52
O reuso de software se refere à utilização de software existente para o
desenvolvimento de um novo software. A decisão quanto à utilização de componentes
reutilizáveis envolve comparações entre o investimento necessário para a sua
aquisição e os gastos para o desenvolvimento de uma solução customizada. Devem
ser estimados os custos e benefícios líquidos no investimento em reuso de software e
serem avaliados os ganhos com a adoção do reuso.
Muitos métodos para o reuso estão em prática no mercado atual, sendo sua
escolha determinada pela sua adequação ao modelo de negócio ou às tecnologias
utilizadas.
O RiSE - Reuse in Software Engineering, por exemplo, é um esforço em
direção a um efetivo framework de métodos, processos, ferramentas e boas práticas
relacionados ao reuso de software que compreende aspectos técnicos e não técnicos.
O CRUISE - Component Reuse in Software Engineering, no formato de livro on
line e livre com foco em reuso de software, é um dos primeiros esforços em mapear o
reuso de software que cita as áreas chave, desenvolvimento baseado em
componentes, reengenharia, ferramentas, qualidade de componentes de software,
métricas para reuso, repositórios, engenharia de domínio, linhas de produtos, entre
outros aspectos.
O RAD - Rapid Application Development, visto anteriormente, é um modelo de
processo de desenvolvimento de software iterativo e incremental que enfatiza um
ciclo de desenvolvimento extremamente curto (entre 60 e 90 dias) tendo um foco
considerável no reuso para se atingir um prazo tão justo tornando-o uma técnica de
quarta geração que reutiliza componentes de programas existentes ou cria
componentes reutilizáveis.
53
3.7. Modelo de Métodos Formais
Os métodos formais são técnicas baseadas em formalismos matemáticos que
podem ser usados para a especificação, desenvolvimento
e verificação de sistemas de software. Seu uso para o
desenvolvimento de software é motivado pela base que
fornecem garantindo confiabilidade e robustez a um
projeto, uma vez que executam análises matemáticas
apropriadas. No entanto, o alto custo do uso de métodos
formais restringe o seu uso ao desenvolvimento de
sistemas de alta integridade, no qual há alta probabilidade
das falhas conduzirem à perda de vidas ou sérios
prejuízos (como nas missões espaciais e no controle de
vôos, por exemplo).
No modelo de Métodos Formais, também conhecido como Engenharia de Software
Cleanroom (Sala Limpa), uma questão fundamental é garantir que o software é realmente
uma solução para o problema proposto. Para realizar tal tarefa, deve-se primeiro construir
um modelo da solução (especificação) utilizando uma linguagem formal. Tendo este
modelo formal como base, o método permite:
• realizar provas matemáticas que garantem que este modelo possui as
propriedades requisitadas (verificação);
54
De uma maneira mais abrangente, podemos caracterizar assim o modelo de
Métodos Formais:
Links interessantes
Caro aluno,
http://www.tiosam.org/enciclopedia/index.asp?q=Métodos_formais
http://youtu.be/7wsrs3a-y3M
55
3.8. Processo Unificado
O Processo Unificado (PU) ou Unified Process (UP) surgiu como um processo para
o desenvolvimento de software visando à construção de sistemas orientados a objetos (o
RUP – Rational Unified Process é um refinamento do Processo Unificado). É um processo
iterativo e adaptativo de desenvolvimento e vem ganhando cada vez mais adeptos devido
à maneira organizada e consistente que oferece na condução de um projeto.
O PU utiliza uma abordagem evolucionária paro o desenvolvimento de software. O
ciclo de vida iterativo é baseado em refinamentos e incrementos sucessivos a fim de
convergir para um sistema adequado. Em cada iteração, procura-se incrementar um pouco
mais o produto, baseando-se na experiência obtida nas iterações anteriores e no feedback
do usuário. Cada iteração pode ser considerada um miniprojeto de duração fixa, sendo que
cada um destes inclui suas próprias atividades de análise de requisitos, projeto,
implementação e testes.
O PU foi modelado usando o Software Process Engineering Model (SPEM) que é
um padrão para modelagem de processos baseado em UML- Unified Modeling Language.
O processo tem duas estruturas, ou duas dimensões, a saber:
- Estrutura dinâmica - representa a dimensão do tempo no processo.
- Estrutura estática - descreve como elementos do processo são agrupados em
disciplinas.
A estrutura que representa o tempo é denominada fase e a estrutura que representa
os elementos do processo são as disciplinas, conforme mostra a figura 13.
Fases
Uma fase é definida como a dimensão de tempo entre duas maiores marcas (major
milestones) de processos, durante a qual um conjunto bem definido de objetivos é
encontrado, artefatos são completados e a decisão é tomada no sentido de ir para a
próxima fase ou não. "Maiores marcas" podem ser definidas como eventos de grandes
sistemas organizados no final de cada fase de desenvolvimento para fornecer visibilidade
aos seus problemas, sincronizar o gerenciamento com as perspectivas de engenharia e
verificar se os objetivos de cada fase foram obtidos. Este conceito está intimamente
relacionado ao risco que deve ser considerado na medida em que o sistema estiver
evoluindo. Para cada fase os maiores milestones buscam identificar e antecipar os riscos.
56
Figura 13
Fonte: http://isosoftware.blogspot.com/2010/02/processo-unificado-pu-unified-process.html
57
alta qualidade, os principais riscos tenham sido tratados e haja condições
para se fazer estimativas mais realistas.
[3] Construção: implementação iterativa dos elementos restantes de menor
risco e mais fáceis e preparação para a implantação.
[4] Transição: testes finais e implantação.
Disciplinas
Uma disciplina é uma coleção de atividades relacionadas que estão ligadas à maior
área de interesse dentro do processo em geral. Cada disciplina possui, resumidamente, os
seguintes objetivos específicos:
58
Implantação: descrever as atividades associadas à verificação para que o produto
esteja disponível ao usuário final.
Gerenciamento de Configuração e Mudança: identificar itens de configuração;
restringir alterações para aqueles itens; auditar as alterações neles feitas; definir e
gerenciar as alterações daqueles itens.
Gerenciamento de Projeto: fornecer uma estrutura para gerenciamento de projeto
de software; fornecer um guia prático para planejamento, recrutamento, execução e
monitoramento de projeto; fornecer uma estrutura para o gerenciamento de riscos.
Ambiente: identificar as atividades necessárias para configurar o processo para o
projeto; descrever as atividades requeridas para desenvolver as guias mestras no
suporte ao projeto; fornecer para a organização de desenvolvimento de software, o
ambiente de processos e ferramentas que suportarão a equipe de desenvolvimento.
59
3.9. Desenvolvimento Ágil
As definições modernas de desenvolvimento de software ágil evoluíram a partir de
meados de 1990 como parte de uma reação contra métodos caracterizados por uma
regulamentação complexa e rígida e contra a regimentação e sequenciamento usados no
modelo em cascata. O objetivo era desburocratizar os procedimentos que tornavam as
etapas dos processos lentas, o que era contrário ao modo de trabalho usual dos
engenheiros de software.
Inicialmente, os métodos ágeis foram denominados de “métodos leves”. Em 2001,
Kent Beck e 16 outros notáveis profissionais da área de Engenharia de Software se
reuniram, adotaram o nome métodos ágeis, e publicaram o Manifesto Ágil, documento
que reúne os princípios e práticas desta metodologia de desenvolvimento. Esses veteranos
formaram a Agile Alliance ou Aliança Ágil, uma organização não lucrativa que promove e
fomenta o desenvolvimento ágil.
60
Os principais modelos baseados na concepção de Desenvolvimento Ágil incluem o
Scrum, criado em 1986, o ASD- Adaptive Software Development, o FDD- Feature Driven
Development, o DSDM - Dynamic Systems Development Method de 1995, o Crystal e a
XP – eXtreme Programming ou Programação Extrema, criados em 1996.
O Desenvolvimento Ágil de Software - Agile Software Development, envolve uma
metodologia que visa minimizar os riscos por meio de desenvolvimentos em curtos
períodos ou iterações, como mostra a figura 14. A iteração típica envolve o
desenvolvimento em fases curtas, de 1 a 4 semanas, envolvendo todas as tarefas
necessárias para implantar uma funcionalidade. Considerando-se o período curto de cada
iteração, a comunicação mantida entre os stakeholders é em tempo real sendo,
preferencialmente, tratada por meio verbal (embora documentada), ou “face-a-face”,
visando minimizar entendimentos parciais ou errôneos. Para tanto é necessário
estabelecer-se um local físico (uma sala) onde toda a equipe necessária ficará focada no
projeto.
Alguns críticos do processo ágil afirmam que o maior risco deste tipo de abordagem
é a baixa qualidade ou mesmo inexistência de documentação do projeto devido à interação
humana “face-a-face” que, se por um lado traz agilidade na comunicação, por outro traz a
informalidade nas definições. Assim sendo, é necessário um bom acompanhamento do
61
gestor do projeto para garantir a qualidade dos trabalhos independente do processo
utilizado.
De uma forma geral, os processos ágeis atendem aos projetos de software que,
normalmente, apresentam:
• Dificuldade em prever com antecedência quais requisitos vão persistir e quais
serão modificados, bem como prever quais prioridades dos clientes sofrerão
mudanças ao longo do projeto;
• Intercalação das etapas de projeto e construção, que vão sendo realizadas
juntas de modo que os modelos de projeto vão sendo comprovados na
medida em que são criados;
• Análise, projeto, construção e testes não são tão previsíveis, do ponto de
vista do planejamento, como seria desejado.
Caro aluno, em defesa dos métodos ágeis e fazendo uma crítica ao chamado
“desenvolvimento tradicional”, encontramos a seguinte comparação na pesquisa que
fizemos na internet:
Fonte: http://icarovinicius.com.br/blog/tag/metodologias-ageis/
62
A metodologia ágil vem gerando grande debate, fazendo muitos desenvolvedores
apaixonados e muitos outros críticos ferrenhos. Mas temos que manter a imparcialidade
profissional e questionarmos o que realmente tem que ser observado, como:
• Qual é a melhor forma de se alcançar a agilidade nos processos e práticas do
desenvolvimento de software?
• Como construir softwares que satisfaçam às necessidades do cliente e
possua características de qualidade que permitam sua extensão e ampliação
para satisfazer as necessidades do cliente no longo prazo?
Scrum e Extreme Programming são algumas metodologias ágeis que estão em voga no momento. Elas refletem
o espírito deste manifesto ágil?
Com a nossa cultura de fast food, de querer achar uma receita mágica para tudo, o mundo ágil ganhou força
dentro de um certo nicho de desenvolvimento. A gente ouve falar muito hoje de Scrum, de Extreme Programming,
mas se usam essas ferramentas apenas como ferramentas. Isso não funciona. Tem gente que até discute se o pico
recente de Scrum não foi mais negativo que positivo, porque muita gente está aplicando e não atinge os
resultados, simplesmente porque usa o raciocínio antigo com ferramentas novas. Os valores não foram
entendidos. Scrum é um template. Ele te diz que você tem esse papel chamado product owner, você tem este tempo
chamado sprint, tem essa atividade chamada scrum diário, e essas coisas chamadas retrospectiva e backlog. Ele
te dá nomes e elementos que você aplica. Mas não é só aplicar e ponto. Isso é só o começo. A grande mensagem
da forma ágil de pensar é que o procedimento não é importante. É irrelevante se eu chamo o meu tempo de
trabalho de sprint ou o dono do projeto de product owner. É absolutamente irrelevante, se eu não entendi os
valores que são entregar valor ao cliente, criar uma organização de aprendizado, acreditar nas pessoas e dar
suporte a elas. Esses princípios é que são importantes, mas não são explícitos. Em vez disso eu tenho papéis,
cargos e atividades. Não se explicam os porquês e não entendendo os porquês você vai fazer exatamente a mesma
coisa, mas em vez de chamar o sujeito de gerente de projeto você vai chamá-lo de product owner. Mas nada
mudou.
63
(Animação 4) Casa Segura – Considerando o Desenvolvimento Ágil de Softwares
A cena: escritório do Douglas.
Os personagens: Douglas, gerente de engenharia de software, Júnior, membro da equipe de software,
Viviane, membro da equipe de software.
A conversa:
(Uma batida na porta)
Júnior: Douglas, você tem um minuto?
Douglas: Lógico, Júnior, o que há?
Júnior: Estivemos pensando em nossa discussão de processo de ontem... Você sabe... que processo vamos
escolher para esse novo projeto Casasegura.
Douglas: E?
Viviane: Eu estava falando com um amigo de outra empresa, e ele me falou sobre Extreme Programming. É
um modelo ágil de processo, você já ouviu falar?
Douglas: Já, um pouco bem e um pouco mal.
Júnior: Bem, parece bastante bom para nós. Deixa a gente desenvolver software d e modo realmente
rápido, usa uma coisa chamada programação aos pares para fazer verificações de qualidade em tempo
real... É bastante interessante, na minha opinião.
Douglas: De fato, tem idéias realmente boas. Eu gosto do conceito de “programação aos pares”, por
exemplo, e da ideia de que os interessados devam fazer parte da equipe.
Júnior: Anh? Você quer dizer que o pessoal de marketing vai trabalhar na equipe de projeto conosco?
Douglas (concordando): Eles são os interessados, não são?
Júnior: É mas... eles vão ficar fazendo pedidos de modificação a cada cinco minutos.
Viviane: Não necessariamente. Meu amigo disse que existem modos de “acolher” modificações durante um
projeto XP.
Douglas: Então vocês pensam que nós poderíamos usar o XP?
Júnior: Definitivamente, vale a pena considerar.
Douglas: Concordo. E, mesmo que escolhamos um modelo incremental para nossa abordagem, podemos
incorporar muito do que o XP tem a oferecer.
Viviane: Douglas, antes você disse “ um pouco bem e um pouco mal”. O que era o “mal”?
Douglas: O que eu não gosto é o modo como o XP menospreza a análise e o projeto ... parece dizer que é na
escrita de código que a ação reside.
Viviane: Talvez nós possamos agir dos dois modos, agilidade com um pouco de disciplina.
64
Exercícios do Capítulo 3
5) O modelo de prototipagem é:
a) Uma abordagem razoável quando os requisitos estão bem definidos
b) A melhor abordagem para usar em projetos com grandes equipes de desenvolvimento
c) Uma abordagem razoável quando o cliente não consegue definir os requisitos claramente
d) Um modelo de alto risco que raramente produz software de qualidade
65
6) O modelo espiral de desenvolvimento de software:
a) Finaliza com a entrega do software
b) É mais caótico que o modelo incremental
c) Inclui avaliação de riscos a cada iteração
d) Todas as afirmativas anteriores estão corretas
10) Qual dos nomes abaixo não representa uma das fases do modelo de processo unificado?
a) Fase de iniciação
b) Fase de validação
c) Fase de elaboração
d) Fase de construção
66
11) O que se entende por “ciclo de vida”?
15) Cite uma das principais diferenças entre o Modelo Incremental e o Modelo de
Prototipagem.
20) Nos modelos de processos ágeis o único produto de trabalho gerado é o programa de
trabalho.
a) Verdadeiro
b) Falso
67
Capítulo 4 – Engenharia de Requisitos
Caro aluno, neste capítulo definiremos o que são requisitos de software e a sua
importância dentro da Engenharia de Requisitos. Todas as etapas, conceitos e
definições ligadas à ER serão apresentadas.
Caro aluno, a Engenharia de Requisitos (ER) pode ser vista como uma sub-área da
Engenharia de Software, cujo principal objetivo é a obtenção de uma especificação correta
e completa dos requisitos de um sistema de software.
A Engenharia de Requisitos tem se tornado cada vez mais necessária para resolver
os problemas encontrados nas organizações com relação à definição de sistemas. De
acordo com estudos realizados pelas empresas GTE, TRW e IBM (na década de 1970), foi
mostrado que o custo relativo de um erro localizado durante a análise de requisitos seria
0.1, um erro localizado na fase de implementação seria 1 (10 vezes mais), na fase de
testes seu custo relativo subiria para 2 (20 vezes mais), terminando com um custo relativo
de 20 (200 vezes mais) na fase final de manutenção. Apesar de este estudo ser antigo, os
dados atuais ainda o confirmam, como pode ser visto na figura 15.
68
Na figura 15, a fase de Análise, corresponde à análise de requisitos. Como pode ser
visto, o custo aumenta com o tempo de descoberta do erro e os erros mais caros são
aqueles cometidos na Análise de Requisitos. Muitas vezes estes erros são descobertos
pelo próprio cliente, mesmo antes da entrega do produto, quando ele participa ativamente.
Assim, os requisitos deficientes são considerados uma das maiores causas de falhas nos
projetos de software.
Mas, afinal, o que são os requisitos?
69
4.2. Objetivos e Classificação dos Requisitos
Os requisitos têm por objetivo:
• Estabelecer e manter concordância com os clientes e outros envolvidos sobre o
que o sistema deve fazer;
• Oferecer aos desenvolvedores uma compreensão melhor do sistema a ser
desenvolvido;
• Delimitar o sistema;
• Planejar o desenvolvimento do sistema;
• Fornecer uma base para estimar o custo e o tempo de desenvolvimento do
sistema.
1. Requisitos Funcionais
São requisitos que descrevem a funcionalidade (funções que o sistema deve
realizar) ou os serviços que se espera que o sistema faça. Exemplos de requisitos
funcionais: cadastro de cliente; emissão de nota fiscal; consulta ao estoque; geração
de pedido.
2. Requisitos Não-Funcionais
São requisitos que não dizem respeito diretamente à funcionalidade do sistema,
mas expressam propriedades do sistema e/ou restrições sobre os serviços ou
funções por ele providas. Sua classificação é mostrada na figura 16.
Podem ser categorizados em:
2.1.1. Requisitos de Produto
São requisitos que especificam o comportamento do produto, como por
exemplo:
• Requisitos de Facilidade de Uso ou de Usabilidade: referem-se ao
esforço para utilizar ou aprender a utilizar o produto. Estão
relacionados com a interação do usuário junto ao sistema.
70
• Requisitos de Confiabilidade: referem-se à frequência de ocorrência de
falhas e recuperabilidade em caso de falha, como: tempo médio de
falhas; probabilidade de indisponibilidade; taxa de ocorrência de falhas;
tempo de reinício após falha; percentual de eventos causando falhas;
probabilidade de corrupção de dados após falha.
• Requisitos de Eficiência: referem-se ao desempenho do sistema e
estão associados à eficiência, uso de recursos e tempo de resposta da
aplicação, como: transações processadas/segundo; tempo de resposta
do usuário/evento, entre outros.
• Requisitos de Portabilidade: são relativos à capacidade de transferir o
produto para outros ambientes
2.1.2. Requisitos Organizacionais
São requisitos derivados das políticas organizacionais do cliente e do
desenvolvedor, como por exemplo:
• Requisitos de Implementação: ligados às regras de codificação e
restrições de software e hardware usados para desenvolver ou
executar o sistema
• Requisitos de Padrões: referem-se à definição da linguagem de
programação e às normas que devem ser seguidas pelo sistema ou no
processo de desenvolvimento
• Requisitos de entrega: referem-se ao modo como será implantada a
solução como configurações necessárias e ordem de instalação dos
pacotes
2.1.3. Requisitos Externos
São requisitos procedentes de fatores externos ao sistema e ao seu processo
de desenvolvimento, como por exemplo:
• Requisitos Éticos
• Requisitos Legais (como política de privacidade e direitos autorais)
• Requisitos de Interoperabilidade
Exemplos: o sistema não deverá revelar aos operadores nenhuma
informação pessoal sobre os clientes, além de seus nomes e o número de
referência (legislação de privacidade); em razão das restrições referentes
71
aos direitos autorais, alguns documentos devem ser excluídos imediatamente
ao serem fornecidos.
3. Requisitos de Domínio
São requisitos derivados do domínio da aplicação do sistema. Ao invés de
serem obtidos a partir das necessidades específicas dos usuários do sistema,
eles podem se transformar em novos requisitos funcionais, ou serem regras de
negócios específica do domínio do problema. Por exemplo:
Utilização de uma interface padrão utilizando a norma Z39.50;
Disponibilização de arquivos somente para leitura devido aos direitos
autorais;
4. Requisitos do Usuário
São os requisitos funcionais e não funcionais do sistema sob o ponto de vista do
usuário. Em geral apresentam problemas como falta de clareza, confusão e
fusão, ou seja, requisitos diferentes escritos como um único requisito.
5. Requisitos do Sistema
São descrições mais detalhadas dos requisitos do usuário. São a base para que
os engenheiros de software possam fazer o projeto do sistema. Servem como
base para um contrato destinado à implementação do sistema.
72
Dicionário
• Stakeholders (Influenciadores/Envolvidos)
São as partes interessadas no projeto, ou seja, são pessoas e organizações
envolvidas no projeto ou que possuem interesses que podem ser afetados pelo
projeto, podendo exercer influência sobre os resultados do projeto.
• Baseline
Conjunto de artefatos de software que servem de base para o seu
desenvolvimento.
• DERS - Documento de Especificação de Requisitos de Software
De acordo com o IEEE este documento deve ser completo e não ambíguo, sendo
responsável por auxiliar os clientes de software a descrever com precisão o que
eles desejam obter, e desenvolvedores de software a entender exatamente o que
o cliente deseja. Para os clientes, desenvolvedores e outros indivíduos ligados ao
projeto, um bom DERS deve prover diversos benefícios, tais como:
• Estabelecer a base de acordo entre os clientes e a empresa fornecedora
sobre o que o software irá fazer;
• Reduzir o esforço de desenvolvimento;
• Prover uma base para estimativas de custo e prazos;
• Prover uma base para validação e verificação do produto;
• Facilitar a manutenção do produto de software final.
Um DERS conta com alguns padrões indicados para sua elaboração. O IEEE
elaborou um documento que contém padrões e práticas recomendadas para a
criação do DERS chamado IEEE Recommended Practice for Software
Requirements Specification - Práticas Recomendadas para a Especificação de
Requisitos de Software. Este documento está disponível em:
http://www6.conestogac.on.ca/~set/courses/year1/sef/documents/IEEE830-
1998Standard.pdf
73
A Engenharia de Requisitos reúne as primeiras atividades a serem realizadas nos
diversos modelos de processo de
software. Seu objetivo é definir o que
deve ser feito e não a forma como será Projeto do
Software
implementado o sistema. Serve
erve como
ponte entre o projeto e a construção do
Engenharia
software e define as bases do contrato de
Requisitos
entre o desenvolvedor e o cliente.
Construção do
Realiza a aquisição, o refinamento e a Software
• o engenheiro de sistemas:
sistemas
especifique
specifique a função
fu e o desempenho do software
indique
ndique a interface do software com outros elementos do sistema
sist
estabeleça
stabeleça quais são as restrições
restrições de projeto que o software deve
enfrentar.
• o engenheiro de software:
software
aprimore
primore a alocação de software e construa modelos do processo, dos
dados e dos domínios comportamentais que
que serão tratados pelo software
• o projetista de software:
software
tenha
enha uma representação
representação da informação e da função que pode ser
traduzida em projeto procedimental,
pr cedimental, arquitetônico e de dados
• o desenvolvedor e o cliente:
definam os critérios para avaliar a qualidade logo que o software seja
construído.
74
O analista ou engenheiro de de requisitos possui
um papel fundamental na Engenharia de Requisitos.
Geralmente possui um perfil que inclui capacidade de:
• compreender conceitos abstratos, reorganizá-los
em divisões lógicas e sintetizar "soluções"
baseadas em cada divisão
• absorver fatos pertinentes de fontes conflitantes ou confusas
• entender os ambientes operacionais do cliente e aplicar soluções de hardware e/ou
software aos ambientes do cliente
• comunicar-se bem nas formas escrita e verbal
O analista ou engenheiro de requisitos executa ou coordena as tarefas associadas à
análise de requisitos de software. O analista deve estabelecer a comunicação com a
atividade de análise. Ele estabelece o contato com os stakeholders, quais sejam, pessoas
da administração e da equipe técnica da organização do cliente e a equipe de
desenvolvimento do software. A meta do analista é identificar os elementos básicos dos
problemas da organização, conforme percebidos pelo cliente. O analista deve ser capaz de
criar modelos do sistema objetivando compreender melhor o fluxo de dados e de controle,
o processamento funcional e a operação comportamental do sistema a ser construído.
Este modelo servirá como base para o projeto de software e para a criação de sua
especificação. O analista geralmente é o responsável pelo desenvolvimento de uma
Especificação de Requisitos de Software e participa de todas as revisões.
O perfil dos stakeholders, ou pessoas envolvidas na definição dos requisitos, pode
ser assim definido:
75
(Animação 5) Casa Segura – Erros de Comunicação
A conversa:
Júnior: Bem, eu dei um telefonema para a Vanessa. Ela é a pessoa de marketing nessa coisa.
Viviane: E..?
Júnior: Eu queria que ela me contasse quais as funções e características do Casasegura... esse tipo
de coisa. Em vez disso, ela começou a me fazer perguntas sobre sistemas de segurança, sistemas
de vigilância... eu não sou especialista.
Viviane: Que o marketing vai precisar da gente agindo como consultores, e que é melhor nós
fazermos a lição de casa sobre essa área de produto antes da reunião de partida. Douglas disse
que queria que “ colaborássemos” com nosso cliente, assim é melhor que a gente aprenda a fazer
isso.
Edson: Provavelmente teria sido melhor se você tivesse ido até a sala dela. Telefonemas não
funcionam tão bem para esse tipo de coisa.
Júnior: Vocês dois estão certos. Nós precisamos juntar a nossa ação ou nossas comunicações
iniciais vão ser uma luta.
Viviane: Eu vi o Douglas lendo um livro sobre “ engenharia de requisitos”. Aposto que lista alguns
princípios de boa comunicação. Vou pedir emprestado o livro para ele.
76
Exercícios do Capítulo 4 – parte 1
Responda:
a) Aponte as ambiguidades e omissões.
b) Descreva os requisitos funcionais.
c) Descreva os requisitos não-funcionais.
d) Identifique os Stakeholders.
77
O sistema contribui para os objetivos gerais da empresa?
O sistema pode ser implementado com a utilização de tecnologia atual dentro
das restrições de custo e prazo?
O sistema pode ser integrado com outros sistemas já em operação?
Após responder essas questões é necessário questionar as fontes de informação
(stakeholders). Para isso, são recomendadas algumas perguntas, como:
Como a empresa se comportaria, se esse sistema não fosse implementado?
Quais são os problemas com os processos atuais e como um novo sistema
ajudaria a diminuir esses problemas?
Que contribuição direta o sistema trará para os objetivos da empresa?
As informações podem ser transferidas para outros sistemas e também
podem ser recebidas a partir deles?
O sistema requer tecnologia que não tenha sido utilizada anteriormente na
empresa?
O que precisa e o que não precisa ser compatível com a empresa?
Quem vai usar o sistema?
Após obter essas respostas, deve-se preparar um relatório de viabilidade.
78
surgir por parte dos novos stakeholders, que não haviam sido consultados
inicialmente.
3. Análise de Requisitos
As informações obtidas do cliente durante a concepção e o levantamento são
expandidas e refinadas durante a análise (ou elaboração) de requisitos. Esta
atividade da ER tem por objetivo desenvolver um modelo técnico refinado das
funções, características e restrições do software. É guiada pela criação e
refinamento de cenários do usuário que descrevem como o usuário final (e outros
atores) vão interagir com o sistema.
79
Cada requisito é limitado e não-ambíguo?
Cada requisito tem atribuição? (Será utilizado por alguém)
Algum requisito conflita com outros requisitos?
Cada requisito é realizável no ambiente técnico?
Cada requisito pode ser testado, quando estiver implementado?
Qual é a prioridade desse requisito?
80
podem ser implementados. Essas verificações devem também levar em conta
o orçamento e os prazos para o desenvolvimento do sistema.
Facilidade de verificação: Para reduzir o potencial de divergências entre
cliente e desenvolvedor, os requisitos do sistema devem sempre ser escritos
de modo que possam ser verificados. Isso significa que um conjunto de
verificações pode ser projetado para mostrar que o sistema entregue cumpre
com esses requisitos.
O requisito é realmente passível de ser testado, como foi definido?
O requisito pode ser adequadamente compreendido pelos
compradores ou usuários finais do sistema?
A origem do requisito é claramente definida?
O requisito é adaptável?
Ele pode ser modificado sem que isso provoque efeitos em grande
escala em outros requisitos do sistema?
Um dos mecanismos de validação de requisitos é a RTF- Revisão Técnica Formal
(Capítulo 26, item 26.4.1. Pressman, 2006). Em uma RTF com esse propósito, a
equipe de desenvolvimento deve conduzir o cliente pelos requisitos do sistema,
explicando as implicações de cada requisito. A equipe de revisão deve verificar cada
requisito, em termo de sua consistência e verificar os requisitos como um todo sob o
ponto de vista de sua completeza. A RTF é uma atividade que garante a qualidade
do software.
7. Gestão de Requisitos
81
requisitos surgem. A gestão de requisitos precisa de apoio automatizado como
ferramentas CASE - Computer Aided Software Engineering para:
Armazenamento de requisitos: os requisitos devem ser mantidos em um
depósito de dados seguro, gerenciado, que seja acessível por todos os
envolvidos no processo de engenharia de requisitos.
Gerenciamento de mudanças: esse processo pode ser simplificado se o
apoio de ferramentas estiver disponível.
Gerenciamento de facilidade de rastreamento: o apoio de ferramentas para a
rastreabilidade permite que sejam descobertos requisitos relacionados.
1)
82
Com base na animação que você
acabou de assistir, caro aluno, as dicas
que podemos lhe dar para quando você
estiver tentando descobrir o que o seu
cliente quer do seu novo software são:
83
4.4. Elicitação de Requisitos
• Coleta
Processo de definir e documentar as funções e funcionalidades do projeto e do produto
necessárias para atender às necessidades e expectativas dos stakeholders. O sucesso
do projeto é diretamente influenciado pela atenção na coleta e gerenciamento dos
requisitos do projeto e do produto. Os requisitos incluem as necessidades quantificadas
e documentadas e as expectativas do patrocinador, cliente e demais stakeholders.
Estes requisitos precisam ser obtidos, analisados e registrados com detalhes
suficientes para serem medidos uma vez que a execução do projeto se inicie. Coletar
os requisitos reúne as atividades de definir e gerenciar as expectativas do cliente.
• Entrevistas
Uma entrevista é um meio que pode ser formal ou informal de se descobrir informações
dos stakeholders por meio de conversas diretas. Normalmente é feita por meio de
perguntas preparadas ou espontâneas e do registro das respostas. São
frequentemente conduzidas individualmente, mas podem envolver múltiplos
entrevistadores e/ou entrevistados. Entrevistar participantes experientes, stakeholders e
especialistas no assunto do projeto pode auxiliar na identificação e definição das
características e funções das entregas desejadas.
• Documentação
Os componentes da documentação podem incluir, mas não estão limitados a:
A necessidade do negócio ou oportunidade a ser aproveitada, descrevendo as
limitações da situação atual e por que o projeto foi empreendido
Objetivos do negócio e do projeto para permitir rastreamento
Requisitos funcionais descrevendo processos de negócio, informações e
interação com o produto de forma apropriada a ser documentada textualmente
84
Requisitos não funcionais, tais como nível de serviço, desempenho, cuidados,
segurança, atendimento
ento a leis e regulamentos, etc
Impactos em outras áreas organizacionais
organizaci
Impactos em outras entidades internas
internas ou externas à organização
A figura 17 ilustra o fluxo ao qual é submetida uma análise de requisitos toda vez
que o cliente manifesta uma (nova) necessidade.
85
Para que este processo ocorra com sucesso, os requisitos devem ser claros,
completos, sem ambiguidade, implementáveis, consistentes e testáveis como mostra a
tabela 1. Os requisitos que não apresentem estas qualidades são problemáticos: eles
devem ser revistos e renegociados com os clientes e usuários.
86
(Animação 7) Casa Segura – Engenharia de Sistema Preliminar
Locutor (voz): Esta conversa se passa depois do encontro inicial ter ocorrido.
A conversa:
Viviane: Sim...mas tudo o que fizemos foi olhar o sistema global – temos bastante trabalho de
levantamento de requisitos a fazer para o software.
Júnior: É por isso que temos reuniões adicionais programadas para os próximos cinco dias.
Aliás, sugeri que dois dos “clientes” se deslocassem até aqui por algumas das próximas
semanas. Você sabe, viver conosco de modo que possamos realmente nos comunicar, quer
dizer, colaborar.
Júnior: Bem, eles me olharam como se eu fosse louco, mas Douglas [o gerente de engenharia
de software] gosta da ideia – ela é ágil – assim ele está falando com eles.
Edson: Fiz anotações usando meu tablet durante a reunião, e cheguei a uma lista de funções
básicas.
(Como a lista é grande e não cabe relacioná-la inteira, o som vai diminuindo e a imagem se
esvaindo até finalizar).
87
4.4.1. Técnicas de Coleta de Requisitos
4.4.1.1 Entrevistas
88
Diamante: Combina as duas abordagens anteriores. A entrevista fica menos
cansativa, pois varia o tipo de questão. Na entrevista não deve-se induzir
respostas, como “O relatório deveria ser gerado semanalmente?”
[3] Finalização da Entrevista:
Deve-se reservar um tempo, o menor possível, que seja adequado para
sumarizar as informações recebidas. O analista deve explicar os próximos
passos ao cliente e apresentar a importância da entrevista, agradecendo o
entrevistado.
[4] Análise de Resultados:
Deve-se produzir um documento da entrevista e descobrir ambiguidades, conflitos e
omissões. As informações devem ser consolidadas e documentadas.
4.4.1.2. Questionários
É uma forma rápida de se obter dados de uma grande quantidade de usuários que
podem estar em lugares geograficamente distintos. Os tipos de dados que podem ser
coletados através de questionários são:
Dados sobre a utilização do sistema atual
Problemas e dificuldades que os usuários enfrentam em seu trabalho
Expectativa dos usuários em relação ao novo sistema
As questões devem ser claras e objetivas. Deve-se preparar mais de uma questão
para um tópico a fim de confirmar a resposta e deixá-la mais completa.
89
Os tipos de questões que compõem os questionários são:
• Abertas-dirigidas: Antecipam o tipo de resposta. Devem ser utilizadas quando
não é possível ou não deve-se criar alternativas. Por exemplo: “Por que você
acha que os manuais do usuário do sistema financeiro não funcionam?”
• Fechadas: Utilizadas quando é possível listar as possíveis alternativas. Por
exemplo: “Os dados sobre vendas são entregues com que frequência?
Alternativas: diariamente, semanalmente, quinzenalmente, mensalmente,
trimestralmente”.
Na elaboração do questionário, os seguintes cuidados devem ser tomados:
Questões mais importantes devem vir primeiro.
Questões com conteúdo semelhante e relacionadas devem estar próximas.
Questões que podem gerar controvérsias devem ser deixadas para depois.
4.4.1.3. Brainstorming
É uma técnica básica para geração de ideias. Devem ser realizadas uma ou várias
reuniões que permitam que as pessoas sugiram e explorem ideias sem que sejam
criticadas ou julgadas. Deve existir um líder responsável por conduzir a reunião sem
restringi-la. É especialmente útil no começo do processo de extração de requisitos. Mas
apresenta uma desvantagem, já que não é uma técnica não muito estruturada, pode não
produzir a mesma qualidade ou nível de detalhe que se consegue com outras técnicas. O
brainstorming (ou tempestade cerebral) basicamente é dividido em duas etapas:
[1] Geração das ideias:
São as reuniões que tem como objetivo fornecer ideias,
sem discussões sobre o mérito delas. Existem 4 regras:
É proibido criticar ideias.
Ideias não convencionais ou estranhas são
encorajadas.
Número de ideias geradas deve ser bem grande.
Os participantes devem ser encorajados a
enriquecer as ideias dos outros participantes.
[2] Consolidação das ideias:
As ideias geradas são discutidas, revisadas, organizadas, avaliadas, consolidadas,
descartadas e priorizadas.
90
(Animação 8) Casa Segura – Condução de uma Reunião de Coleta de Requisitos
A Cena: Uma sala de reunião. A primeira reunião de coleta de requisitos está em progresso.
A conversa:
Facilitador (apontando para o quadro): Então, esta é a lista atual de objetos e serviços para a
função de segurança residencial.
Viviane: Alguém não mencionou que queria toda a funcionalidade da CasaSegura acessível via
Internet? Isso incluiria a função de segurança residencial, não?
Júnior: Precisamos estar certos de que uma pessoa de fora não pode invadir o sistema,
desarmá-lo e roubar o lugar ou pior. Pesada responsabilidade de nossa parte.
Marketing: Mas nós ainda precisamos de conectividade via Internet...basta nos certificarmos
de impedir a invasão de uma pessoa de fora.
Facilitador (interrompendo): Eu não quero discutir esse ponto agora. Vamos anotá-lo como
um item de ação e prosseguir.
4.1.1.5. 5W1H
Quem fornece?
Quem participa das decisões? 5W1H
• What (O Que) – refere-se
se às etapas
Why Where
Quais
uais são as entradas do
sistema?
How
Quais são as saídas?
Quais são os indicadores?
Quais são as metas?
92
Quais são os recursos?
Quais são os problemas?
Quais são os métodos / tecnologias empregados?
Que informações ou insumos são necessários para o trabalho? Quem as
fornecem?
Quais são as regras que determinam como o trabalho será feito?
Há alguma coisa que possa parar, atrasar ou impedir o processo?
Há espera para completar o processo?
Quais são as exceções?
Quais são as alternativas, caso o sistema não funcione conforme as
expectativas?
Qual ação é tomada quando uma etapa falha?
• When (Quando) – refere-se ao tempo
Quando é planejado o processo?
Quando é executado?
Quando é avaliado?
Quanto tempo leva o processo?
Com que frequência a atividade é executada?
• Where (Onde) refere-se aos locais
Onde é planejado o processo?
Onde é executado?
Onde é avaliado?
• Why (Porque) – refere-se às justificativas
Porque / para que esse processo existe?
Quais são os fatores que determinam quando um produto é aceitável?
• How (Como) – refere-se aos métodos
Como é planejado o processo?
Como é executado?
Como é avaliado?
Como as informações são registradas e disseminadas?
Como é avaliada a satisfação do cliente?
Como são as medidas específicas associadas ao sistema, caso existam?
93
4.4.1.6. PIECES - Performance, Informação, Economia, Controle, Eficiência,
Serviços
4.4.1.7. Prototipação
Técnica que tem como objetivo extrair, entender e validar os requisitos. É baseada
no conceito do processo de desenvolvimento de software de prototipação, já estudado
anteriormente. Um protótipo do produto pode ser construído. Através do protótipo, os
usuários podem descobrir quais são as suas reais necessidades. É benéfica somente se
protótipo puder ser construído de forma mais rápida que o sistema real. É especialmente
útil para superar dificuldades de comunicação de necessidades por parte dos usuários.
94
4.4.2. Considerações sobre as Técnicas de Coleta de Requisitos
A conversa:
Facilitador: Estivemos conversando sobre segurança de acesso à funcionabilidade do
CasaSegura que vai ficar acessível via Internet. Eu gostaria de tentar algo.
Vamos desenvolver um cenário de usuário para acesso à função de segurança residencial.
Júnior: Como?
Facilitador: Podemos fazê-lo de diferentes modos, mas, por agora, eu gostaria de conservar as
coisas realmente informais. Conte-nos (ele aponta para uma pessoa de marketing) como você
imagina o acesso ao sistema.
Pessoa de Marketing: Hmm, bem, isso é o tipo de coisa que eu faria se estivesse longe de casa
e tivesse de deixar alguém entrar nela, por exemplo, uma arrumadeira ou uma pessoa de
manutenção que não tivesse o código de segurança.
Facilitador (sorrindo): Essa é razão pela qual você faria isso... diga-me como você realmente
faria isso.
Pessoa do Marketing: Hmm... a primeira coisa que eu precisaria seria de um PC. Eu entraria no
site que nós manteríamos para todos os usuários do CasaSegura. Forneceria a minha ID de
usuário e...
Viviane (interrompendo): A página web teria de ser segura, criptografada para garantir que
estivéssemos seguros e...
Facilitador ( interrompendo): Essa é uma boa informação, Viviane, mas é técnica. Vamos
apenas nos concentrar sobre como usuário final vai usar a possibilidade, certo?
Viviane: Sem problemas.
Pessoa de Marketing: Então, como eu estava dizendo, eu entraria em um site e forneceria
minha ID de usuário e dois níveis de senha.
Júnior: E se eu esquecesse minha senha?
Facilitador (interrompendo): Boa ideia, Júnior, mas não vamos cuidar disso agora. Vamos fazer
uma anotação sobre isso e chamá-la de “exceção”. Estou certo de que haverá outras.
Pessoa de Marketing: Depois que eu introduzisse as senhas, uma tela representando todas as
funções CasaSegura apareceria . Eu selecionaria a função segurança residencial. O sistema
poderia solicitar que eu verificasse quem sou, digamos perguntando o meu endereço ou o
número de telefone ou alguma outra coisa. Depois, ele exibiria uma figura do painel de controle
do sistema de segurança junto com uma lista de funções que eu poderia realizar – armar o
sistema, desarmar o sistema, desarmar um ou mais sensores. Acho que ele poderia também me
permitir reconfigurar zonas de segurança e outras coisas análogas, mas não estou certo disso.
( Locutor(voz): À medida que a pessoa de marketing continua a falar, Douglas faz várias
anotações. Elas formam a base do primeiro cenário de caso de uso informal. Alternativamente,
a pessoa de marketing poderia ter sido solicitada a redigir o cenário, mas isso seria feito fora da
reunião.)
96
Exercícios do Capítulo 4 – parte 2
2) É relativamente comum para diferentes usuários propor requisitos conflitantes, cada qual
argumentando que sua versão é a mais adequada ou melhor.
a) Verdadeiro
b) Falso
97
5) Qual é o principal objetivo da Engenharia de Requisitos?
98
Considerações Finais
Caro aluno, essa disciplina introduziu muitos aspectos essenciais para a prática da
Engenharia de Software. Vimos que o processo de desenvolvimento de software envolve
atividades, recursos e produtos.
Vimos que um modelo de processo é útil para orientar o comportamento quando
você estiver trabalhando em grupo. Modelos de processo detalhados nos dizem como
coordenar e colaborar com nossos colegas, enquanto se projeta e se contrói um sistema.
Os modelos também mostram a cada membro da equipe quais atividades ocorrem, quando
e por quem elas são realizadas, de modo a tornar clara a divisão de tarefas.
Vimos que os requisitos podem ser modificados até mesmo enquanto analisamos o
problema e desenvolvemos a solução. E que a solução deve estar bem documentada e ser
flexível, devendo-se documentar as suposições e os algoritmos utilizados, de tal modo que
seja fácil mudá-los posteriormente.
Possivelmente, caro aluno, você fará grande parte do seu trabalho como membro de
uma equipe de desenvolvimento maior. Como vimos nessa disciplina, o desenvolvimento
de software envolve análise de requisitos, projeto, implementação, teste, gerência de
configuração, garantia da qualidade, dentre outras atividades. Você e outras pessoas de
sua equipe podem desempenhar vários papéis, e o sucesso do projeto depende em larga
escala da comunicação e coordenação entre os membros da equipe.
Vimos também que você pode ajudar no sucesso de seu projeto, selecionando um
processo de desenvolvimento apropriado ao tamanho da equipe, ao nível de risco do
projeto e ao domínio do aplicativo, bem como utilizando ferramentas bem integradas que
apóiem o tipo de comunicação necessária ao seu projeto.
No andamento do nosso curso, vários aspectos fundamentais estudados nesta
disciplina serão abordados em maiores detalhes, proporcionando a você, caro aluno, um
entendimento e um conhecimento maior dos conceitos, métodos, técnicas e ferramentas
da Engenharia de Software que auxiliam na obtenção de um produto de qualidade,
respeitando os prazos, custos e escopo estabelecidos.
99
Respostas Comentadas dos Exercícios
Capítulo 1
1) Qual das questões abaixo não é mais uma das grandes preocupações de um engenheiro de software?
d) Por que hardware é tão caro?
2) Software é um produto que pode ser manufaturado usando as mesmas tecnologias usadas para
outros artefatos de engenharia.
b) Falso
4) Atividades “guarda-chuva” de engenharia de software são aplicadas somente durante as fases iniciais
do desenvolvimento de software:
b) Falso
6) Conforme vimos, Engenharia de Software é uma disciplina da Engenharia que se ocupa de todos os
aspectos da produção de software. Seu principal objetivo é fornecer uma estrutura metodológica para a
construção de software com alta qualidade. O que é necessário para que isso aconteça?
aplicar teorias, métodos e ferramentas nas situações apropriadas nas diversas etapas do
desenvolvimento
trabalhar de acordo com as restrições organizacionais e financeiras procurando soluções que
estejam dentro dessas restrições
gerenciar os projetos de software para que o resultado final esteja dentro do escopo, custo e prazos
planejados
adotar uma abordagem sistemática e organizada (maneira mais eficaz de produzir software de alta
qualidade)
7) Normalmente, para o leigo, software se constitui no “código fonte + código executável”. Vimos
que para a Engenharia de Software, o conceito de software é algo mais abrangente. Como Pressman
conceitua software?
“Instruções (programas de computador) que, quando executadas, produzem a função e o desempenho
desejados; (2) Estruturas de dados que possibilitam que os programas manipulem adequadamente a
informação; (3) Documentos que descrevem a operação e o uso dos programas”.
100
8) O processo de desenvolvimento do software apresenta diferenças fundamentais em relação ao
hardware. Cite algumas dessas diferenças.
O processo criativo do hardware gera algo físico (por exemplo, placas de circuitos). O
desenvolvimento de software resulta em um elemento pertencente a um sistema lógico, intangível;
O software geralmente é desenvolvido sob medida, ao contrário do hardware, no qual o projetista
tem acesso a componentes existentes que executam tarefas definidas.
O projetista do software nem sempre terá acesso a módulos prontos para utilização e quando o faz,
pode elevar o risco do produto devido a questões de segurança;
Os custos do software estão concentrados no desenvolvimento e não no processo de manufatura.
Isto significa que não pode ser gerido como projeto de manufatura;
Ao longo do tempo, o produto de software não se desgasta, mas se deteriora em função da
introdução de erros oriundos de atividades de manutenção ou evoluções implícitas no processo que
devem ser reconsideradas no modelo original.
Diferenças: no caso do hardware, há um alto índice de falhas no início do seu ciclo de vida originadas de
defeitos de fabricação e projeto; depois os defeitos são corrigidos dando estabilidade nas falhas; no final
do ciclo de vida do produto podem surgir problemas relacionados ao desgaste do uso. Diferentemente
da curva teórica de falhas do hardware, o software não sofre processos de envelhecimento como o
hardware, pois o software não é algo físico. No início do ciclo de vida do software, há problemas que
serão ajustados no decorrer do desenvolvimento e se estabilizarão gerando uma tendência de
achatamento da curva; durante o processo de refinamento do produto ou mudanças aumenta-se a
probabilidade de inserção de novos erros, gerando picos na curva de falhas; as sucessivas alterações do
software tendem a introduzir mais erros antes da estabilização dos erros de alterações anteriores,
ocasionando a tendência crescente do índice de falhas.
101
Capítulo 2
3) Qual dos itens listados abaixo não se constitui numa das camadas da engenharia de software?
b) Manufatura
5) As atividades “guarda-chuva” dão “cobertura” para as fases envolvidas na produção de software. Cite
algumas dessas atividades.
Controle e Rastreamento do Projeto
Gestão de Riscos
Revisões Técnicas Formais
Garantia de Qualidade
Gestão de Configuração de Software
Produção e Preparação de Produtos do Trabalho (documentos)
Gestão de Reusabilidade
Medição
6) Há uma ilusão por parte de alguns desenvolvedores que basta selecionar um modelo de processo e
aplicá-lo para se obter software de qualidade, dentro do prazo e custos estabelecidos. Comente sobre
esse “mito”.
A existência ou a simples escolha de um processo de software não garante que o software será entregue
no prazo, que ele atenda as necessidades do projeto e possua as características técnicas que garantirão
sua qualidade no longo prazo. Os padrões de processo precisam estar ligados de forma sólida às práticas
da Engenharia de Software. Além disso, o processo em si deve ser avaliado para garantir que ele
satisfaça a um conjunto de critérios essenciais para o desenvolvimento bem sucedido.
102
Capítulo 3
5) O modelo de prototipagem é:
c) Uma abordagem razoável quando o cliente não consegue definir os requisitos claramente
10) Qual dos nomes abaixo não representa uma das fases do modelo de processo unificado?
b) Fase de validação
15) Cite uma das principais diferenças entre o Modelo Incremental e o Modelo de Prototipagem.
O modelo de processo incremental é interativo como a prototipagem, mas diferentemente da
prototipagem, o incremental tem como objetivo apresentar um produto operacional a cada incremento
realizado.
20) Nos modelos de processos ágeis o único produto de trabalho gerado é o programa de trabalho.
b) Falso
104
Capítulo 4 – parte 1
d) Identifique os stakeholders.
Usuários
Desenvolvedores
?outros stakeholders podem ser supostos, mas não estão identificados no texto
Capítulo 4 – parte 2
2) É relativamente comum para diferentes usuários propor requisitos conflitantes, cada qual
argumentando que sua versão é a mais adequada ou melhor.
a) Verdadeiro
3) Na validação de requisitos, o modelo de requisitos é revisto para assegurar sua viabilidade técnica.
b) Falso
4) Faça a associação e assinale a resposta correta sobre a técnica PIECES:
a) i-C ii-E iii-A iv-B v-F vi-D
10) Um dos principais pontos a se considerar em qualquer projeto é o chamado estudo de viabilidade.
Para projetos de software não é diferente. Relacione as principais questões que se deve considerar no
estudo de viabilidade de um projeto de software.
O estudo de viabilidade é um estudo breve, direcionado, que se destina a responder a algumas
perguntas:
O sistema contribui para os objetivos gerais da empresa?
O sistema pode ser implementado com a utilização de tecnologia atual dentro das restrições de
custo e prazo?
O sistema pode ser integrado com outros sistemas já em operação?
Após responder essas questões é necessário questionar as fontes de informação (stakeholders). Para
isso, são recomendadas algumas perguntas, como:
Como a empresa se comportaria, se esse sistema não fosse implementado?
Quais são os problemas com os processos atuais e como um novo sistema ajudaria a diminuir
esses problemas?
Que contribuição direta o sistema trará para os objetivos da empresa?
As informações podem ser transferidas para outros sistemas e também podem ser recebidas a
partir deles?
O sistema requer tecnologia que não tenha sido utilizada anteriormente na empresa?
O que precisa e o que não precisa ser compatível com a empresa?
Quem vai usar o sistema?
106
Glossário de Siglas
ASD- Adaptive Software Development (Desenvolvimento de Software Adaptativo)
BPM – Business Process Modeling (Modelagem de Processos de Negócio)
CASE - Computer-Aided Software Engineering (Engenharia de Software Auxiliada por
Computador)
CBD - Component-based Development (Desenvolvimento Baseado em Componentes)
CBSE - Component-based Software Engineering (Engenharia de Software Baseada em
Componentes)
COTS– commercial-off-the-shelf (software comercial de prateleira)
CRUISE - Component Reuse in Software Engineering (Reuso de Componentes em
Engenharia de Software)
DERS - Documento de Especificação de Requisitos de Software
DSDM - Dynamic Systems Development Method (Método de Desenvolvimento de
Sistemas Dinâmico)
FDD- Feature Driven Development (Desenvolvimento Dirigido por Característica)
IDEF0 - Integration Definition for Function Modeling (Definição Integrada para Modelagem
de Função)
IEEE - Institute of Electrical and Electronics Engineers (Instituto de Engenheiros Eletricistas
e Eletrônicos)
JAD - Joint Application Development (ou Design)(Desenvolvimento de Aplicações em
Equipe)
PMI - Project Management Institute (Instituto de Gerenciamento de Projetos)
PMBoK – Project Management Body of Knowledge. (Conjunto de Melhores Práticas em
Gerenciamento de Projetos)
UML – Unified Modeling Language (Linguagem de Modelagem Unificada)
RAD – Rapid Application Development (Desenvolvimento Rápido de Aplicação).
RiSE - Reuse in Software Engineering (Reuso em Engenharia de Software)
ROM – Read Only Memory (Memória Somente de Leitura)
RTF- Revisão Técnica Formal
XP – eXtreme Programming (Programação Extrema)
107
Bibliografia
ANDRADE, Adriana; ROSSETTI, José P. Governança Corporativa. São Paulo: Atlas,
2007.
BLAHA, Michael. Modelagem e projetos baseados em objetos com UML. Rio de
Janeiro: Elsevier, 2006.
BOEHM, Barry W. A Spiral Model of Software Development and Enhancement.
Computer, vol. 21, no. 5. May, 1988. p. 61-72.
BOOCH, G., RUMBAUGH, J., JACOBSON, I. UML – guia do usuário. Rio de Janeiro:
Editora Campus, 2006.
BLOOGS, Wendy. Mastering UML com Rational Rose 2002: A Bíblia. Rio de Janeiro:
Alta Books, 2002.
CRUZ, Márcia; GONSALES, Samuel. 2010. Disponível em
http://blogbohm.com/2010/10/18/analise-de-requisitos-como-ferramenta-de-
planejamento/. Acesso em 03 dez. 2011.
FONSECA, Ijar M. Princípios Fundamentais da Análise de Requisitos. Disponível
em: http://www2.dem.inpe.br/ijar/AnalEstr.html. Acesso em 01 dez. 2011.
GASTALDO, Denise L.; MIDORIKAWA, Edson T. Processo de Engenharia de
Requisitos Aplicado a Requisitos Não-Funcionais de Desempenho – Um
Estudo de Caso. 2002. Disponível em: http://wer.inf.puc-
rio.br/wer03/artigos/denise_gastaldo.pdf. Acesso em 30 nov. 2011.
HERITAGE. Dicionário web. Disponível em:
http://www.thefreedictionary.com/information+technology. Acesso em: 13 nov.
2011.
LEITE, Jair C. Ciclo de vida de Software. 2007. Disponível em:
http://engenhariadesoftware.blogspot.com/2007/02/ciclo-de-vida-do-software-
parte-1.html. Acesso em: 11 nov. 2011.
PAULA FILHO, Wilson P. Engenharia de software: fundamentos, métodos e
padrões. 3.ed. Rio de Janeiro: LTC, 2009.
PETERS, J. F.; PEDRYC, W. Engenharia de software: teoria e prática. Rio de
Janeiro: Campus, 2001.
108
PMI - Project Management Institute. Um guia do Conjunto de Melhores Práticas em
gerenciamento de Projetos (Guia PMBOK) – Quarta Edição. Atlanta: PMI Book
Service Center, 2008.
109