/
Author: Amui S.F.
Tags: software requisitos de sistema tecnologia de computador
ISBN: 978-85-5548-031-7
Year: 2015
Text
REQUISITOS DE
SISTEMA
autor
SAULO FRANÇA AMUI
1ª edição
SESES
rio de janeiro
2015
Conselho editorial regiane burger; roberto paes; gladis linhares; karen bortoloti;
helcimara affonso de souza.
Autor do original saulo frança amui
Projeto editorial roberto paes
Coordenação de produção gladis linhares
Coordenação de produção EaD karen fernanda bortoloti
Projeto gráfico paulo vitor bastos
Diagramação bfs media
Revisão linguística amanda carla duarte aguiar
Imagem de capa alphaspirit | dreamstime.com
Todos os direitos reservados. Nenhuma parte desta obra pode ser reproduzida ou transmitida
por quaisquer meios (eletrônico ou mecânico, incluindo fotocópia e gravação) ou arquivada em
qualquer sistema ou banco de dados sem permissão escrita da Editora. Copyright seses, 2015.
Dados Internacionais de Catalogação na Publicação (cip)
A529r Amui, Saulo
Requisitos de sistemas / Saulo Amui.
Rio de Janeiro : SESES, 2015.
152 p. : il.
isbn: 978-85-5548-031-7
1. Requisitos de software. 2. Qualidade de software.
3. Processos de software. 4. Gestão de requisitos. I. SESES. II. Estácio.
cdd 005.1
Diretoria de Ensino — Fábrica de Conhecimento
Rua do Bispo, 83, bloco F, Campus João Uchôa
Rio Comprido — Rio de Janeiro — rj — cep 20261-063
Sumário
Prefácio
7
1. Conceitos Gerais
9
Objetivos
1.1 Introdução
1.2 Conceitos de qualidade
1.2.1 Histórico
1.2.2 Conceitos
1.2.3 Gestão da Qualidade
1.2.4 Processos de Software Sem Controle
1.2.5 Processos de Software Bem Controlados
1.2.6 Implantação de um Programa de Qualidade
1.3 Processo de Qualidade de Software
1.4 Métricas de Qualidade de Software
1.5 Garantia da Qualidade de Software (SQA)
1.6 Estatística da Garantia da Qualidade de Software
1.7 Revisões técnicas
1.8 Revisões informais
1.9 Revisões Técnicas Formais
10
11
11
12
14
16
17
17
18
19
22
25
30
31
34
35
1.9.1 Diretrizes de revisão
1.10 Confiabilidade de software
Atividades
Reflexão
Referências bibliográficas
35
37
40
41
42
2. Processos de Ciclo de Vida e Qualidade
Objetivos
2.1 Introdução
2.2 Normas de qualidade de produtos de software
2.2.1 Qualidade de Produtos de Software - ISO 9126
45
46
47
48
48
2.2.2 Guias para a Avaliação da Qualidade - ISO 14598
2.2.3 Qualidade de Pacotes de Software - ISO 12119
2.2.4 A Série ISO 9000
2.3 Processos Fundamentais
2.4 Processos de apoio
2.5 Processos organizacionais
2.6 Processos de Adaptação
Atividades
Reflexão
Referências bibliográficas
3. Análise e Especificação de Requisitos
50
52
53
60
62
63
65
66
66
67
69
Objetivos
3.1 Introdução
3.2 Descrição do projeto do software
3.2.1 Plano de Projeto
3.3 O entendimento das necessidades do projeto
3.4 Levantamento de Requisitos
3.4.1 Levantamento orientado a ponto de vista
3.4.2 Cenários
3.4.3 Etnografia
3.5 A especificação dos requisitos
70
71
71
75
76
78
80
84
86
87
3.5.1 Requisitos funcionais e não funcionais
3.5.1.1 Requisitos funcionais
3.5.1.2 Requisitos não-funcionais
3.6 A definição do software
Atividades
Reflexão
Referências bibliográficas
90
90
91
92
93
94
95
4. Gerenciamento de Requisitos
Objetivos
4.1 Introdução
97
98
99
4.2 Gerenciamento de Requisitos
4.3 Gerenciamento de mudanças
4.4 Rastreabilidade de requisitos
4.5 Gerência da qualidade de requisitos
4.6 Validação de requisitos
Atividades
Reflexão
Referências bibliográficas
5. Modelagem do Projeto - UML
99
103
108
110
114
115
116
117
119
Objetivos
5.1 Introdução
5.2 A modelagem do software
5.2.1 Modelagem ágil
5.3 UML (Unified Modeling Language)
5.3.1 Aplicação
5.4 Casos de Uso
5.4.1 Diagramas de Caso de Uso
5.4.2 Descrição de Casos de Uso
5.5 Diagramas de Classes
5.6 Diagrama de Objetos
5.7 Diagramas de estados
120
121
121
124
128
130
130
132
135
135
136
137
5.8 Diagramas de sequência
5.9 Diagrama de Colaboração
5.10 Diagrama de Atividade
5.11 Diagrama de Componentes
5.12 Diagrama de Execução
Atividades
Reflexão
Referências bibliográficas
137
139
139
140
141
142
142
143
Gabarito
144
Prefácio
Prezados(as) alunos(as),
Os requisitos de um sistema são as peças fundamentais para o desenvolvimento de software e sistemas de qualquer natureza. A qualidade dos requisitos
de um sistema irá influenciar diretamente na qualidade do resultado final do
produto de software. Conhecer seus conceitos, padrões, aspectos de seu gerenciamento e saber analisá-los é de extrema importância em todo o processo de
desenvolvimento de software e há uma grande necessidade das pessoas envolvidas conhecê-los muito bem.
Inicialmente, discutiremos os principais conceitos de requisitos, relacionando-os com a qualidade de software e observando suas relações com a garantia da qualidade, bem como a importância das revisões técnicas, tanto formais
quanto às informais. Veremos como que este conjunto de associações estão relacionadas à confiabilidade do software.
O uso de normas de qualidade, por meio de institutos e órgãos responsáveis
por normatizar certos processos e itens de verificação, muito contribuem para
o avanço da maturidade das empresas, devido à busca constante de melhorias
e por atenderem a padrões internacionais que visam a qualidade. Além destes
pontos, algumas normas ainda trazem uma relação direta com os processos da
organização, separando-as em níveis de maturidade, o que favorece a atuação
ou o foco em áreas chaves para irem sendo incorporadas a cada estágio. Os requisitos de sistemas vão sendo cada vez mais bem estruturados por meio de
documentos adequados e completos para a organização.
Um dos principais pontos para o desenvolvimento de um software está associado à análise e especificação de requisitos, além de uma completa descrição
do projeto do software que está sendo proposta, compreendendo bem as necessidades do projeto. Com isto, o uso adequado e eficaz nos métodos de levantamento de requisitos bem como sua especificação, tornam-se fatores essenciais
para um bom desenvolvimento.
Veremos ainda que os requisitos de sistemas sofrem mudanças e por isto é
necessário o uso de um gerenciamento de requisitos, para que seja capaz de gerenciar mudanças, efetuar rastreabilidade de requisitos e validação dos mesmos.
7
Por fim, uma vez que estes requisitos de sistemas foram devidamente levantados, anotados e especificados, parte-se para a modelagem do projeto de
software e, para isto, utiliza-se algumas técnicas e ferramentas que irão contribuir para o desenho do software, modelando-o e expressando algumas situações funcionais, comportamentais por meio de diagramase outras formas de
notação visual.
Aproveite a leitura e os estudos para tentar transportar os conceitos aprendidos em sua vida prática, ou tentando observá-los em uso em empresas e nos
ambientes adequados.
Bons estudos!
1
Conceitos Gerais
Neste primeiro capítulo começaremos tratando de um assunto de extrema
importância para o software e que lida com aspectos essenciais para o seu bom
funcionamento, que é a qualidade de software. Introduziremos o conceito de
requisitos sob a ótica da qualidade, envolvendo qualidade de software, revisões
técnicas e confiabilidade.
Requisitos de software eram conhecidos antigamente como as funções que
um sistema oferecia. Atualmente, requisitos de software é tratado com maior
abrangência do que simplesmente suas funções, envolvendo pontos como os
objetivos, propriedades, padrões, restrições, especificações e tudo aquilo que
for necessário para atender a necessidade do cliente dentro dos objetivos propostos em um software. Assim, podemos entender requisitos de software como
algo que é proposto no sistema ou alguma restrição em seu desenvolvimento.
Para se ter um software de qualidade, os seus processos de desenvolvimento e a qualidade de seus requisitos são fundamentais para que isto aconteça.
Compreender bem as necessidades do cliente, suas funcionalidades, suas limitações e todos os aspectos associados à estes requisitos, também contribuem
fortemente para um produto final de qualidade.
Veremos a importância das revisões técnicas neste processo e também trataremos de assuntos relacionados à confiabilidade, já que falhas nos requisitos
representam uma das maiores causas de insucesso nos projetos de software.
Bons estudos!
OBJETIVOS
Neste capítulo teremos como objetivo:
• Aprender os principais conceitos de qualidade.
• Conhecer a garantia da qualidade de software
• Aprender sobre revisões técnicas.
• Discutir sobre os aspectos relacionados à confiabilidade de software.
10 •
capítulo 1
1.1 Introdução
Requisitos são fundamentais para projetos de desenvolvimento de software,
uma vez que documenta as definição de uma propriedade ou comportamento
esperado de um produto ou serviço.
De acordo com Dorfman e Thayer, requisitos podem ser definidos como
“uma capacidade de software que o usuário necessita de modo a resolver um
problema ou alcançar um objetivo”. Uma outra definição também apresentada
pelos mesmos autores pode ser vista como: “uma capacidade de software que
deve ser disponibilizada por um sistema ou componente de sistema de modo a
satisfazer um contrato, padrão, especificação ou outra formalidade imposta”.
Os requisitos definem características, atributos, qualidade ou habilidades
que um sistema, ou parte deste, deve constar para atender as necessidades dos
usuários.
Segundo Ian Sommerville, os requisitos são geralmente definidos nas fases inciais de um projeto e tem a utilidade de especificar o que deverá ser implementado na fase de codificação ou desenvolvimento, propriamente dita,
podendo descrever uma facilidade encontrada do ponto de vista do usuário,
qualquer propriedade ou restrição geral do sistema ou ainda uma restrição ao
desenvolvimento do sistema (SAYÃO e BREITMAN, 2014).
Um ponto bem importante de ser observado é relação direta e significativa
que existe entre a qualidade dos requisitos e qualidade do produto final do software. Deste modo, vamos estudar melhor os conceitos de qualidade para compreendermos suas relações com os processos de desenvolvimento de software
e a importância dos requisitos neste contexto.
1.2 Conceitos de qualidade
Qualidade é uma palavra muito difícil de ser definida, não é?
O que é bom para um pode ser ruim para outros, o bonito para uma pessoa
pode ser feio ou não tão bonito para outros e enfim, chega a ser uma questão
pessoal sobre o que é ter qualidade.
Se perguntarmos para um empresário que trabalha na administração de
uma manufatura ele terá uma definição na ponta da língua a qual diz que “qualidade é estar em conformidade com as exigências dos clientes”. Esta é uma
capítulo 1
• 11
definição muito usada na área da administração e é baseada na visão da operação, na área de engenharia de produção.
Segundo Slack et al. (1996), a definição de Qualidade é bem mais ampla
e obedece a cinco categorias ou abordagens: Abordagem Transcendental,
Baseada em Manufatura, Baseada no Usuário, Baseada em Produto e Baseada
em Valor. Como percebemos, é um assunto bastante vasto!
Mas a engenharia de software, lembrando, é uma área que provém da engenharia tradicional logo, os conceitos que existem na administração e engenharia de produção serão aplicados também na engenharia de software.
A Qualidade de software pode ser definida segundo alguns autores
(KOSCIANSKI e SOARES, 2007) como um conjunto de atributos de software
que devem ser satisfeitos de modo que o software atenda às necessidades dos
usuários. Como podemos ver, o conceito aplicado ao software é parecido com o
encontrado na administração e engenharia tradicional.
Portanto, qualidade não é apenas um diferencial de mercado para a empresa conseguir vender e lucrar mais, é um pré-requisito que a empresa deve conquistar para conseguir colocar o produto no Mercado Global.
1.2.1 Histórico
Quando tratamos sobre qualidade, é necessário buscar os princípios que compõem esta área de estudo.
Nas empresas em geral, a palavra qualidade está relacionada com uma
técnica de administração chamada Qualidade Total. Esta técnica é multidisciplinar, ou seja, envolve várias áreas administrativas simultaneamente e em
conjunto com o objetivo de obter melhores bens e serviços pelo menor custo e
atender às expectativas dos clientes.
A Qualidade Total está baseada nos estudos de Frederick Taylor, Walter
Shewhart e Peter Drucker, principalmente após o fim da segunda guerra mundial, momento no qual as indústrias precisavam repor as baixas em várias áreas.
Estes estudos buscavam conceber um modelo para aumentar a eficiência,
racionalizar os métodos de trabalho, a crença no homem econômico, a divisão
e a hierarquização do trabalho, a relevância da organização formal.
Baseado nestes objetivos, podemos notar que são os mesmos que qualquer
empresa de software ou relacionada com software deseja. Sendo assim, a qualidade de software provém destes estudos também.
12 •
capítulo 1
Na verdade a qualidade de software praticamente nasceu junto com a engenharia de software pois foi um momento em que era necessário estabelecer regras, práticas e processos para o desenvolvimento de melhores softwares. Logo,
é um conceito contemporâneo à engenharia de software.
A Engenharia de Software, iniciou-se na década de 70 quando especialistas
em computação de vários países se reuniram para discutir os problemas de
desenvolvimento de software da época. Durante esta conferência houve uma
grande quantidade de debate sobre o tema que os participantes escolheram
chamar de “Software Crisis” ou “Software Gap”. Entre os principais problemas,
relacionados a este tema, que foram descritos durante a conferência estavam:
•
•
•
•
•
Projetos realizados acima do orçamento;
Projetos finalizados acima do tempo esperado;
Produtos de software de baixa qualidade;
Produtos de software sem atender aos requisitos do cliente;
Projetos ingerenciáveis e com código difícil de se manter.
Comparando com a década de 70 percebemos que a Engenharia de Software
evoluiu bastante. Muitos métodos, técnicas e teorias com o objetivo de resolver
(ou tentar) os problemas tratados na conferência foram desenvolvidos.
A maioria destas evoluções veio como resultado do aprendizado produzido
em projetos reais e fizeram com que a Engenharia de Software amadurecesse
muito e fosse divulgada na comunidade em geral.
Ao longo desta história uma subárea que tem ganhado forças na luta contra
o que foi denominado de “Crise de Software” é a área de conhecimento denominada Qualidade de software, que está onipresente na Engenharia de Software
como um todo, pois ela está incluída nas preocupações das demais subáreas.
Esta área de conhecimento tem como objetivo principal garantir a qualidade do software através da definição e normatização de processos de desenvolvimento. Por este motivo, os modelos aplicados na garantia da qualidade de
software focam no processo de desenvolvimento como forma de garantir a qualidade final do produto.
Saber os conceitos, técnicas, abordagens e demais conceitos sobre qualidade de software é um fator fundamental para saber como consegui-la.
Comparando com a administração, que toma como base as normas de qualidade da ISO, segundo a norma ISO 9000, a qualidade é o grau em que um conjunto de características inerentes a um produto, processo ou sistema cumpre
os requisitos inicialmente estipulados para estes.
capítulo 1
• 13
A ISO (International Organization for Standardization – Organização Internacional para
Padronização) 9000 é na verdade um grupo de normas técnicas que estabelecem
um modelo de gestão da qualidade para qualquer tipo de organização, de qualquer
tamanho. A ISSO foi fundada em 1947 e possui como função a promoção de normas
de produtos e serviços, para que a qualidade dos mesmos seja permanentemente melhorada. Estas normas estabelecem requisitos para a melhoria dos processos internos,
maior capacitação dos colaboradores, monitoramento do ambiente de trabalho, verificação da satisfação dos clientes, colaboradores e fornecedores, num processo contínuo de melhoria do sistema de gestão da qualidade. O uso das normas ISO é vantajosa
para as organizações uma vez que lhes confere maior organização, produtividade e
credibilidade.
1.2.2 Conceitos
Qualidade de software pode ser definida como um conjunto de atributos de software que devem ser satisfeitos de modo que o software atenda às necessidades
dos usuários. A determinação dos atributos relevantes a cada sistema depende
do domínio da aplicação, das tecnologias utilizadas, das características específicas do projeto e das necessidades do usuário e da organização.
Vários fatores afetam a percepção da qualidade do desenvolvimento e do
software, entre eles podemos destacar:
•
•
•
•
•
Tamanho e complexidade do software;
Numero de pessoas envolvidas;
Métodos técnicas e ferramentas utilizadas;
Custo x Benefício do sistema;
Custo associado aos erros;
A qualidade pode ser vista por vários pontos de vista diferentes, como o ponto de vista do usuário, que busca a facilidade de uso, desempenho, confiabilidade e preço, entre outros. Ponto de vista do desenvolvedor que espera que
software tenha baixa taxa de erros, facilidade de manutenção e conformidade
com os requisitos, entre outros. E da organização que deseja que o software seja
desenvolvido dentro dos prazos propostos e viáveis para ela, que tenha uma boa
previsão de custos e boa produtividade depois de implantado.
14 •
capítulo 1
Para que tenhamos a qualidade total do software precisamos garantir a qualidade do processo de desenvolvimento, mesmo que esta não garanta a qualidade do produto final, mas é um indicativo que a organização é capaz de produzir
bons produtos.
As duas vertentes - qualidade de produto e qualidade de processo - são complementares e interdependentes. Espera-se que a qualidade do processo e fabricação tenha um impacto positivo sobre o software obtido. Entretanto, tal
objetivo será atingido se houver uma compreensão clara de que os processos
devem fornecer todos os mecanismos necessários para especificar o produto e
controlar a fabricação.
Sendo assim, para alcançar a qualidade, utiliza-se de melhoria de processos, implementada através de modelos abstratos ou formais que permitem aos
engenheiros especificar, projetar, implementar e manter sistemas de software,
avaliando e garantindo suas qualidades. Além disto, deve oferecer mecanismos
para se planejar e gerenciar o processo de desenvolvimento.
A implantação de um sistema de qualidade no desenvolvimento de software
permite um aumento de produtividade, uma melhoria da qualidade do produto final e um aumento da satisfação dos clientes e da própria empresa.
Para que um software seja considerado “de qualidade”, é necessário que
este tenha conformidade com alguns conceitos:
• Correção: deve funcionar de forma correta. Satisfazendo as suas especificações sem falhas ou erros;
• Integridade: suas especificações satisfazem os requisitos dos usuários e
da organização;
• Flexibilidade: deve prever que o usuário pode agir de forma não esperada
e deve ser capaz de resistir a eventuais situações sem falhas;
• Confiabilidade: deve se comportar como esperado e não falhar em situações inesperadas;
• Eficiência: deve realizar suas tarefas em tempo adequado à complexidade
de cada um deles. E devem utilizar de modo eficiente os recursos de hardware
disponíveis;
• Reusabilidade: os componentes do software devem permitir ser reutilizados em outras aplicações;
• Usabilidade: deve ser fácil de aprender e de usar, permitindo maior produtividade do usuário, flexibilidade de utilização e aplicação e proporcionar
satisfação ao usuário;
capítulo 1
• 15
• Manutenibilidade: deve permitir fácil manutenção para que correções ou
atualizações sejam realizadas de modo fácil e eficiente;
• Evolutibilidade: deve permitir expansão de suas funcionalidades para
atender novos requisitos ou incorporar novas tecnologias;
• Portabilidade: deve poder ser executado no maior número possível de
equipamentos;
• Interoperabilidade: deve ser capaz de interagir com diferentes sistemas
e plataformas.
1.2.3 Gestão da Qualidade
A gestão da qualidade de software visa assegurar o nível de qualidade que o software exige. A gestão da qualidade de software esta calcada na gestão do processo de desenvolvimento de software.
O processo de desenvolvimento de software é composto basicamente de
três etapas básicas de acordo com a figura 1.1.
Definição
Análise de sistema
Análise de requisitos
Construção
Projeto
Codificação
Teste
Manutenção
Entendimento
Modificação
Revalidação
Figura 1.1 – Processo de desenvolvimento de software.
A qualidade do software será proveniente do gerenciamento deste processo,
através do controle eficaz de suas atividades. Inclui-se também no processo de
gerenciamento o controle e treinamento de pessoal, procedimentos e utilização de ferramentas, obtendo desta forma um processo de software muito bem
definido.
16 •
capítulo 1
O controle do processo consiste na competência em controlar o processo de
software e influencia na capacidade da organização de atingir metas de custo,
qualidade e cronograma.
1.2.4 Processos de Software Sem Controle
Um processo de software sem controle resulta em processos improvisados pelos desenvolvedores e gerência. Não é rigorosamente seguido e o cumprimento
das metas não é controlado. O processo passa a ser altamente dependente da
qualidade e experiência dos profissionais envolvidos.
E diminui a visão de progresso e qualidade do processo.
A qualidade do produto fica comprometida e os prazos dificilmente são
cumpridos. Possui alto risco quando é necessária a utilização de novas tecnologias, por depender diretamente da experiência dos profissionais. Além de tornar muito difícil prever a qualidade final do produto.
O processo passa a ser constantemente reativo a situações inesperadas e
problemas ao invés de ser pró-ativas, não havendo tempo para melhorias. De
forma geral, o “fogo” esta sob controle, mas esta quase sempre “apagando incêndios”, fazendo com que os envolvidos tenham “queimaduras” constantes.
Com isso sempre sobram “cinzas” que podem facilmente voltar a se incendiar
mais tarde.
1.2.5 Processos de Software Bem Controlados
Um processo de software bem controlado deve ser coerente com as linhas de
ação para que o trabalho seja efetivamente concluído. Deve ser definido, documentado e melhorado constantemente. Um processo de software precisa ser
bem compreendido e utilizado de forma efetiva e completa, deve estar sempre
ativo mesmo nas situações mais complicadas em que aparentemente possam
tornar as atividades mais complexas.
Desta forma será visível o apoio da alta administração e até mesmo de outras gerências.
Um processo bem controlado precisa de fidelidade ao processo e deve
ser objeto de auditoria constante. Para tal são utilizadas medições do produto e do processo. Além disso, é necessário que o processo seja institucionalizado, tornando-se parte da infraestrutura da organização, pois processos
capítulo 1
• 17
institucionalizados permanecem, mesmo depois que as pessoas que originalmente os definiram deixam a organização ou o processo. Ficando a cargo da
cultura organizacional transmitir o processo adiante.
1.2.6 Implantação de um Programa de Qualidade
Na instalação de um programa de qualidade, é necessário que se estabeleça
uma anistia geral, ou seja, o que aconteceu até aquele momento, não é culpa de
ninguém. A principal meta é enfrentar os problemas existentes, em benefício
de todos. Contudo, os seguintes aspectos devem ser contínua e dinamicamente avaliados e melhorados: a estratégia geral da empresa, o planejamento, e os
meios disponíveis com vistas ao estabelecimento de condições favoráveis, para
se alcançar os objetivos almejados.
Um programa de melhoria da qualidade leva ao estabelecimento de um
sistema de qualidade, que deve envolver aspectos técnicos e culturais, que são
igualmente importantes. O aspecto técnico envolve o desenvolvimento de padrões e procedimentos para implementar a qualidade em todas as atividades.
O aspecto cultural está diretamente relacionado com a aceitação da qualidade
por todos os indivíduos da organização. Para se iniciar um programa de qualidade pode-se seguir as seguintes etapas:
• Preparação de uma política de qualidade: a iniciativa da elaboração de
um programa de qualidade deve advir do topo da gerência, formulando uma
política de qualidade, a ser publicada e comunicada de tal forma que seja entendida e implementada em todos os níveis da organização.
• Estabelecimento de um suporte à qualidade: criação de um comitê de
condução da qualidade e uma equipe de melhoria da qualidade. O comitê direciona as estratégias, estabelece a equipe de melhoria da qualidade, autoriza e
aprova o orçamento, e fornece suporte de alto nível para o programa de qualidade. A equipe de melhoria da qualidade estima as necessidades da organização,
e projeta, planeja e monitora o sistema de qualidade.
O planejamento de um programa de qualidade tem as seguintes etapas:
• Estimativa da organização: medição da prática corrente, através de um
padrão apropriado, onde a organização seleciona o índice que melhor lhe
satisfaça.
18 •
capítulo 1
• Projeto do sistema de qualidade: os resultados da estimativa da organização são analisados, os objetivos de seu sistema de qualidade são definidos e,
então, a equipe de melhoria da qualidade projeta-o, gerando a primeira versão
do manual de qualidade.
• Plano de implementação do programa de qualidade: com a primeira versão do manual de qualidade, a equipe de melhoria da qualidade pode determinar o montante de trabalho necessário para a implementação do sistema de
qualidade e, convenientemente, elaborar cronogramas e atividades, estabelecer marcos e alocar recursos para este fim.
• Implementação de um programa cultural: para um programa de qualidade ter sucesso é necessário o suporte de toda a organização e, para isto, um
programa cultural deve ser cuidadosamente planejado e implementado desde
cedo, para a formação de consciências voltadas para a qualidade, e encorajar a
participação de todos.
• Implementação do programa técnico: envolve a adoção de um ciclo de
vida, o desenvolvimento de procedimentos e padrões, a seleção e implementação de métodos e ferramentas, a definição e implementação de um programa
de medição, e o treinamento.
• Revisão e avaliação: componentes do sistema de qualidade, procedimentos e padrões, métodos, ferramentas e recursos devem ser revistos regularmente e devem ser tomadas ações para assegurar sua contínua efetividade.
1.3 Processo de Qualidade de Software
Um processo de software consiste de uma série de atividades que garantem,
técnica e administrativamente, que o software pode ser desenvolvido de maneira organizada, disciplinada e previsível.
Uma das maiores dificuldades encontradas pelas empresas de software é o
gerenciamento de seus processos de software, para tal são utilizados modelos
de processo de software.
O objetivo de um modelo de processo é descrever formalmente e organizadamente todas as atividades que devem ser seguidas para obtenção segura de
um produto de software.
A escolha de um modelo apropriado é importante para poder ir de encontro
às metas da organização e saber o grau em que esse modelo será implementado.
capítulo 1
• 19
Um modelo de processo ao ser usado, é estabelecida uma linguagem comum a todos a qual facilita a comunicação e o entendimento entre todos. Uma
estrutura é oferecida para se priorizar as ações e auxilia-se nas comparações
com diversas comunidades diferentes.
Por outro lado os modelos são simplificações do mundo real não sendo suficientemente abrangentes. Interpretações e adaptações dos modelos a situações particulares devem ser ajustadas aos objetivos do negócio e serem realizadas com muito cuidado e estudo. E é necessário muito bom senso para se
utilizar modelos corretamente e com visão de negócio.
Existem diversos modelos de qualidade de software que podem ser utilizados de acordo com os objetivos e organização da empresa. Estes modelos serão
estudados mais profundamente em um tema futuro. Por hora nos basta saber
que existem e do que tratam, de acordo com a tabela 1.1.
Os modelos de qualidade normalmente são exemplificados tomando grandes empresas
como clientes. Porém existem alguns modelos específicos para pequenas equipes de
desenvolvimento. Entre eles podemos destacar o PSP (Personal Software Process)
• http://www.sei.cmu.edu/library/abstracts/reports/05sr003.cfm: é o artigo principal
e introdutório ao PSP. Em inglês
• http://campus.fortunecity.com/princeton/117/psp/psp.htm. Este artigo traz alguns
dos principais conceitos e técnicas do PSP.
• http://wwww.doctum.com.br/unidades/cataguases/graduacao/sistemade
informacao/artigos/Renato_PSPm_JIISIC06.pdf: artigo muito interessante sobre
melhoria de processo de software individual.
NORMA
ISO 9126
NBR 13596
ISO 14598
ISO 12119
IEEE P1061
ISO 12207
NBR ISO 9001
20 •
COMENTÁRIOS
Características da qualidade de produtosde software.
Versão brasileira da ISO 9126.
Guias para a avaliação de produtos de software, baseados na utilização prática
da norma ISO 9126.
Características da qualidade de pacotes de software (software de prateleira, vendido com um produto embalado).
Standard for Software Quality Metrics Methodology (produto de software).
Software Life Cycle Process. Norma para a qualidade do processo de desenvolvimento de software.
Sistemas de qualidade – Modelo para garantia de qualidade em projeto, desenvolvimento, instalação e assistência técnica (processo).
capítulo 1
NORMA
NBR ISO 9000-3
CMM
SPICE ISO 15504
COMENTÁRIOS
Gestão de qualidade e garantia de qualidade. Aplicação da norma ISO 9000 para
o processo de desenvolvimento de software.
Capability Maturity Model. Modelo da SEI (Instituto de Engenharia de Software
do Departamento de Defesa dos USA) para avaliação da qualidade do processo
de desenvolvimento de software. Não é uma norma ISO, mas é muito bem aceita
no mercado.
Projeto da ISO/IEC para avaliação de processo de desenvolvimento de software.
Ainda não é uma norma oficial ISO, mas o processo está em andamento.
Tabela 1.1 – Modelos de qualidade. Fonte: adaptado de BARRETO JÚNIOR (2014, p. 1).
O CMM é um modelo de qualidade de software bastante usado no mercado. Ele, assim
como outros modelos, quantifica o nível de maturidade na qual uma determinada equipe ou organização possui em relação ao desenvolvimento de software.
O CMM em especial divide as organizações em cinco níveis de maturidade: Inicial, Repetível, Definido, Gerenciado e Otimizado. O objetivo do CMM é fazer com que
a organização atinja níveis de excelência na produção de software. Além disso, por
meio desta classificação de maturidade, muitos clientes usam estes níveis como forma
de pré-requisito para que um determinado fornecedor de software possua para poder
prestar o serviço.
Como é mostrado na tabela 1.1, não existe uma norma ISO 9000 especificamente para o software porém ela estabelece princípios gerais que podem ser
aplicados ao software.
A ISO 9000 descreve vários aspectos do processo de qualidade e exibe os
padrões e procedimentos organizacionais que a empresa deve definir. Eles
devem ser documentados em um manual de qualidade da organização. A definição do processo deve incluir descrições da documentação necessária para
demonstrar que os processos definidos foram seguidos durante o desenvolvimento do produto.
Porém, como foi dito que a ISO9000 pode ser aplicada com variantes para
o software. A figura 1.2 mostra o relacionamento entre o manual de qualidade
e os planos de qualidade de projeto individual e estes podem ser projetos de
software.
capítulo 1
• 21
Modelos de
Qualidade ISO 9000
É usado para desenvolver
Manual de
qualidade da
organização
Documentos
É usado para desenvolver
Plano de qualidade Plano de qualidade Plano de qualidade
Projeto 1
Projeto 2
Projeto 3
Processo de qualidade
da organização
Conhecido
como
Gerenciamento de
qualidade do projeto
Figura 1.2 – ISO 9000 e o gerenciamento de qualidade.
1.4 Métricas de Qualidade de Software
Um projeto de software é um processo de tomada de decisão, onde métricas
podem ser usadas para fornecer uma base de identificação de procedimentos,
que não estejam em conformidade com os alvos pretendidos, e medidas de atributos de projeto, além de auxiliar na elaboração de novas soluções, que levem
à melhoria da qualidade.
Em 1977, McCall propôs um modelo para avaliação da qualidade de software. Esse modelo envolve um conjunto de fatores que avalia o software de três
pontos de vista distintos, que englobam todos os conceitos de qualidade.
• Operação do produto (usando-o): correção, confiabilidade, eficiência, integrabilidade e usabilidade.
• Revisão do produto (mudando-o): manutenibilidade, flexibilidade e
evolutibilidade
• Transição do produto (mudando-o para que funcione em um ambiente
diferente): portabilidade, reusabilidade e interoperabilidade.
22 •
capítulo 1
O modelo de McCall esta organizado em três níveis:
• Fatores (para especificar): descrevem a visão externa do software, como
visto pelo usuário.
• Critérios (para construir): descrevem a visão interna do software, ou seja,
como é vista por quem está desenvolvendo.
• Métricas (para controlar): composta por escalas e medidas para avaliar
(com notas de 0 a 10, sim/não, Proporção)
Mas existem fatores subjetivos de qualidade que influenciam as notas, portanto é difícil ou até mesmo impossível desenvolver medidas diretas dos fatores de qualidade.
Sendo assim, é definido um conjunto de métricas para desenvolver expressões que poderão ser utilizadas para avaliar cada um dos fatores, por exemplo:
Fq = c1 x1 + c2 m2 + + cn x m
Onde:
Fq: Nota para o fator de qualidade de software
cn : coeficiente (peso) da métrica m
mn: métricas que afetam o fator de qualidade
Segundo McCall, as métricas podem estar na forma de uma lista de
conferência (checklist), que é usada para “graduar” atributos específicos
do software. O esquema de graduação proposto por McCall é uma escala
de 0 (baixo) a 10 (elevado). As seguintes métricas são usadas no esquema de
graduação.
• Auditabilidade: a facilidade com que se pode checar a conformidade aos
padrões.
• Acurácia: a precisão das computações e do controle.
• Comunidade de comunicação (Communication Commonality): o grau
em que interfaces padrões, protocolos e larguras de banda (bandwidths) são
usados.
• Inteireza: o quanto a implementação total da função requerida foi
conseguida.
capítulo 1
• 23
• Concisão: a compactação do programa em termos de linhas de código.
• Consistência: o uso de técnicas de projeto e documentação uniformes ao
longo do projeto de desenvolvimento de software.
• Comunidade de dados (Data Commonality): o uso de estruturas e tipos
de dados padrões ao longo do programa.
• Tolerância a erros: o dano que ocorre quando o programa encontra um erro.
• Eficiência de execução: o desempenho de run-time de um programa.
• Expansibilidade: o quanto o projeto de arquitetura, procedimental e de
dados podem ser ampliados.
• Generalidade: a amplitude de aplicação em potencial de componentes do
programa.
• Independência de hardware: o quanto o software é desvinculado do hardware em que opera.
• Instrumentação: o quanto o programa monitora sua própria operação e
identifica erros que venham a ocorrer.
• Modularidade: a independência funcional dos componentes do
programa.
• Operabilidade: a facilidade de operação de um programa.
• Segurança: a disponibilidade de mecanismos que controlem ou protejam
programas e dados.
• Auto-documentação: o quanto o código-fonte apresenta documentação
significativa.
• Simplicidade: o quanto um programa pode ser entendido sem dificuldade.
• Independência do software básico: o quanto um programa é independente de particularidades não-padronizadas de linguagens de programação
não padrão, das características de sistemas operacionais e de outras situações
ambientais.
• Rastreabilidade: a capacidade de rastrear uma representação de projeto
ou componente de programa até os requisitos.
• Treinamento: o quanto o software auxilia no sentido de ajudar novos usuários a aplicarem o sistema.
O peso dado a cada métrica de qualidade de software depende dos produtos
e preocupações locais. Os fatores de qualidade descritos por McCall e seus colegas representam uma dentre uma série de “listas de conferência” sugeridas
para a qualidade de software.
24 •
capítulo 1
Existem algumas ferramentas que podem auxiliar uma equipe nas questões de qualidade de software. Entre elas podemos destacar:
• http://www-142.ibm.com/software/products/br/pt/subcategory/rational/SW730:
É o pacote da Rational (IBM) para suporte ao desenvolvimento de software. Esta página contém links para os seus diversos produtos na área de qualidade de software.
Destaque para o Quality Manager.
• http://www.microsoft.com/visualstudio/pt-br/solutions/software-quality:
alternati-
vas da Microsoft por meio de seu ambiente integrado de desenvolvimento Visual Studio.
• http://blog.prasabermais.com/category/ferramentas-de-software/: Links para diversas ferramentas gratuitas e open-source para a qualidade de software.
1.5 Garantia da qualidade de software (SQA)
De acordo com Rapchan (2011, p. 5), a Garantia da qualidade de software
(Software Quality Assurance - SQA) pode ser definida como “o conjunto de
atividades executadas com o propósito de gerar confiança para o cliente e para a
administração da organização de que os requisitos da qualidade especificados
serão atingidos”, e de acordo com a ISO 8402, como o “conjunto de atividades
planejadas e sistemáticas, implementadas no sistema da qualidade e
demonstradas como necessárias, para prover confiança adequada de que uma
entidade atenderá os requisitos para a qualidade” (RAPCHAN, 2011, p. 5).
As normas básicas para Garantia da Qualidade são: ISO 9001, ISO 9002 e ISO
9003 (RAPCHAN, 2011, p. 5).
A garantia da qualidade é o “processo de auditoria dos requisitos da qualidade e dos resultados das medições de controle da qualidade para garantir
que sejam usados os padrões de qualidade e definições operacionais (métricas)
apropriados”. (MARSHALL, 2006, p.175). Este processo proporciona a melhoria
contínua de todos os processos da qualidade, com o propósito de reduzir os
desperdícios e as atividades sem valores agregados, o que contribui para que
os processos sejam operados com mais eficiência e eficácia. A auditoria verifica se todas “as atividades estão de acordo com a política, os processos e os
procedimentos” (PMBOK, 2004, p.189) que foram previamente estabelecidas
pela organização, objetivando registrar as conformidades e não conformidades
e recomendar as ações corretivas e/ou preventivas que forem necessárias.
capítulo 1
• 25
Desta forma, todo o esforço a ser empregado para efetuar correções do
problema deve ter como resultado uma redução no custo da qualidade e uma
maior aceitação do produto por parte do cliente (BUENO, 2010, p. 6).
A Garantia da qualidade assegura a qualidade do produto final e por isso
ela está presente em todas as fases do desenvolvimento de um software. Sendo
assim, o SQA envolve todo o processo de desenvolvimento de software, executando monitorações e melhorias de processos de acordo com a necessidade.
Isto faz com que os padrões e procedimentos acordados estejam sendo seguidos e garantindo que problemas sejam encontrados e que as ações corretivas
também sejam aplicadas adequadamente. Esse tipo de ação tem uma orientação preventiva. O IEEE 610.12-1990 cita qualidade de software como “(1) Um
padrão planejado e sistemático de todas as ações necessárias para fornecer
confiança adequada que um item ou produto está em conformidade com os requisitos técnicos estabelecidos. (2) Um conjunto de atividades projetadas para
avaliar o processo pelo qual produtos são desenvolvidos ou manufaturados”
(MARTINHO, 2008).
Segundo Martinho (2008), a SQA pode também ser entendida e formada por
um grupo de pessoas que estão relacionadas e empregadas através de todo o
ciclo de vida de engenharia de software que positivamente influenciam e quantificam a qualidade do software que está sendo entregue. Assim, a SQA não é
somente uma atividade associada de forma exclusiva às atividades de desenvolvimento de software, mas sim atividades que se expandem durante todo o ciclo
de vida de desenvolvimento de software.
Ainda de acordo com Martinho (2008), a garantia da qualidade de software
envolve:
1.
Um processo de SQA;
2.
Tarefas específicas de garantia da qualidade e controle da qualidade (inclusive
revisões técnicas e uma estratégia de testes multiescalonados);
3.
Prática efetiva de engenharia de software (métodos e ferramentas;
4.
Controle de todos os artefatos de software e as mudanças feitas nesses produtos;
5.
Um procedimento para garantir a conformidade com os padrões de desenvolvi-
mento de software (quando aplicáveis) e;
6.
Mecanismos de medição e de relatórios.
(PRESSMAN, 2011, p. 388)
26 •
capítulo 1
No entanto, empresas que não possuem o grupo ou processos de SQA tem
uma tendência a apresentar os seguintes indicadores de falta de qualidade,
conforme Lewis (2004) (MARTINHO, 2008):
• O software que foi entregue frequentemente apresenta falhas;
• Inaceitáveis consequências de falhas de sistemas, desde financeiras até cenários
reais de aplicação;
• Sistemas não estão frequentemente disponíveis para uso pretendido;
• Sistemas são frequentemente muito caros;
• Custo de detectar e remover defeitos são excessivos.
Por outro lado, empresas que possuem o grupo ou processo de SQA implementados e a sua aplicação de maneira adequada e correta, apresenta que
(MARTINHO, 2008):
• A remoção de erros acontece no momento em que se é barato corrigir;
• Melhoria da qualidade do produto;
• O SQA é um recurso para a melhoria de processo;
• Estabelecimento de um banco de dados de métricas como: planejamento, taxas de
falhas e outros indicadores da qualidade.
Elementos de Garantia da Qualidade de Software
"A garantia da qualidade de software engloba um amplo espectro de preocupações e
atividades que se concentram na gestão da qualidade de software e que podem ser
sintetizadas da seguinte maneira:
Padrões: o IEEE, a ISO e outras organizações de padronizações produziram uma
ampla gama de padrões para engenharia de software e os respectivos documentos. Os
padrões podem ser adotados voluntariamente por uma organização de engenharia de
software ou impostos pelo cliente ou outros interessados. O papel da SQA é garantir
que padrões que tenham sido adotados sejam seguidos e que todos os produtos resultantes estejam em conformidade com eles.
capítulo 1
• 27
Revisões e auditorias: As revisões técnicas são uma atividade de controle de
qualidade realizada por engenheiros de software para engenheiros de software. Seu
intuito é o de revelar erros. Auditorias são um tipo de revisão efetuado pelo pessoal de
SQA com o intuito de assegurar-se de que as diretrizes de qualidade estejam sendo seguidas no trabalho de engenharia de software. Por exemplo, uma auditoria do processo
de revisão pode ser realizada para garantir que as revisões estejam sendo realizadas de
maneira que conduza à maior probabilidade de descoberta de erros.
Testes: Os testes de software são uma função de controle de qualidade com um
objetivo principal - descobrir erros. O papel da SQA é garantir que os testes sejam planejados apropriadamente e conduzidos eficientemente de modo que se tenha a maior
probabilidade possível de alcançar seu objetivo primário.
Coleta e análise de erros/defeitos: A única forma de melhorar é medir o nosso
desempenho. A SQA reúne e analisa dados de erros e defeitos para melhor compreender como os erros são introduzidos e quais atividades de engenharia de software
melhor se adequam para sua eliminação.
Gerenciamento de mudanças: As mudanças são um dos aspectos mais negativos de qualquer projeto de software. Se não forem administradas apropriadamente,
podem gerar confusão, e confusão quase sempre leva a uma qualidade inadequada.
A SQA garante que práticas adequadas de gerenciamento de mudanças tenham sido
instituídas.
Educação: Toda organização de software quer melhorar suas práticas de engenharia de software. Um fator fundamental para o aperfeiçoamento é a educação dos
engenheiros de software, seus gerentes e outros interessados. A organização de SQA
assume a liderança no processo de aperfeiçoamento do software e é um proponente
fundamental e patrocinador de programas educacionais.
Gerência dos fornecedores: Adquirem-se três categorias de software de fornecedores externos de software - pacotes prontos, comerciais (por exemplo, Microsoft
Office, oferecidos ao usuário em embalagens), um shell personalizado que fornece um
esqueleto básico, personalizado de acordo com as necessidades do comprador e software sob encomenda que é projetado e construído de forma personalizada a partir de
especificações fornecidas pela empresa-cliente. O papel do grupo de SQA é garantir
software de alta qualidade por meio da sugestão de práticas específicas de garantia da
qualidade que o fornecedor deve (sempre que possível) seguir, e incorporar exigências
de qualidade como parte de qualquer contrato com um fornecedor externo.
28 •
capítulo 1
Administração da segurança: Com o aumento dos crimes cibernéticos e novas
regulamentações governamentais referentes à privacidade, toda organização de software deve instituir políticas que protejam os dados em todos os níveis, estabelecer
proteção através de firewalls para as aplicações da Internet (WebApps) e garantir que
o software não tenha sido alterado internamente, sem autorização. A SQA garante o
emprego de processos e tecnologias apropriadas para ter a segurança de software
desejada.
Proteção: O fato de o software ser quase sempre um componente fundamental
de sistemas que envolvem vidas humanas (por exemplo, aplicações na indústria automotiva ou aeronáutica), o impacto de defeitos ocultos pode ser catastrófico. A SQA
pode ser responsável por avaliar o impacto de falhas de software e por iniciar as etapas
necessárias para redução de riscos.
Administração de riscos: Embora a análise e a redução de riscos seja preocupação dos engenheiros de software, o grupo de SQA garante que as atividades de gestão
de riscos sejam conduzidas apropriadamente e que planos de contingência relacionados a riscos tenham sido estabelecidos.
Além de cada uma dessas preocupações e atividades, a SQA trabalha para garantir que atividades de suporte ao software (por exemplo, manutenção, suporte on-line,
documentação e manuais) sejam realizadas ou produzidas tendo a qualidade como
preocupação dominante."
(PRESSMAN, 2011, p. 389)
CONEXÃO
Recursos para a Gestão da Qualidade
(PRESSMAN, 2011, p. 390) relaciona em seu livro dezenas de recursos para a gestão
da qualidade disponíveis na internet, incluindo associações de profissionais, organizações de
padrões e fontes de informação genéricas. Veja a relação:
• American Society for Quality (ASQ) Software Division
• www.migre.me/oIuNQ
• Association for Computer Machinery
• www.acm.org
capítulo 1
• 29
• Data and Analysis Center for Software (DACS)
• www.dacs.dtic.mil
• lnternational Organization for Standardization (ISO)
• www.iso.ch
• ISO SPICE
• www.isospice.com
• Malcolm Baldridge National Quality Award
• www.quality.nist.gov
• Software Engineering lnstitute
• www.sei.cmu.edu
• Testes de Software e Engenharia da Qualidade
• www.stickyminds.com
• Recursos sobre o Seis Sigma
• www.isixsigma.com
• www.asq.org/sixsigma
• TickiT lnternational: Tópicos sobre certificação em qualidade
• www.tickit.org/international.htm
1.6 Estatística da Garantia da Qualidade de
Software
A garantia da qualidade de software também pode ter um componente estatístico, por meio de uso de técnicas estatísticas para estimar a qualidade de
software. Ao executar o código com um pequeno conjunto de casos de testes
aleatórios pode gerar resultados úteis para estimar a qualidade. Este processo
também é chamado pode prova do software.
A média dos erros encontrados pode ser usada como estimativa para a média de erros no projeto final.
Se a porcentagem de execuções corretas é alta, obviamente é um sinal que
o desenvolvimento está seguindo na direção correta, caso contrário, algumas ações de correção devem ser tomadas para poder alterar o processo de
desenvolvimento.
30 •
capítulo 1
Pressman (2011, p. 393) propõe as seguintes etapas para a estatística da
qualidade de software:
1.
Informações sobre erros e defeitos de software são coletadas e classificadas.
2.
É feita uma tentativa de associar cada erro e defeito a sua causa subjacente (por
exemplo, a não adequação às especificações, erros de projeto, violação de padrões,
comunicação inadequada com o cliente).
3.
Usando o princípio de Pareto (80% dos defeitos podem ser associados a 20% de
todas as possíveis causas), são isoladas os 20% (as poucas causas vitais) .
4.
Assim que as poucas causas vitais tiverem sido identificadas, prossegue-se para
a correção dos problemas que provocaram os erros e defeitos.
Estas etapas propostas e ações representam um passo importante para a
adoção de uma gestão de qualidade relacionada às mudanças e adaptações aos
processos de acordo com os erros encontrados.
1.7 Revisões técnicas
As revisões técnicas (RT) de software tem um papel muito valioso para a gestão
da qualidade, já que elas funcionam como uma espécie de filtro e podem ser
aplicadas em diferentes momentos ao longo do processo de desenvolvimento de software, contribuindo para a revelação de erros, falhas ou defeitos que
podem ser sanados e eliminados. Assim, as revisões técnicas deixam o trabalho mais purificado, do ponto de vista da engenharia de software, incluindo os
aspectos de modelos de requisitos e de projeto, bem como dados de teste e o
código-fonte.
De acordo com Pressman (2011, p. 376), as revisões técnicas fazem parte das
muitas ações exigidas como parte de boas práticas da engenharia de software.
É requerido muita dedicação de nossa parte, em cada ação realizada para este
fim. Definir um conjunto de métricas para poder avaliar a eficácia é muito importante para a organização, já que o esforço disponível para o projeto é finito.
capítulo 1
• 31
Freedman e Weinberg discutem a necessidade de revisões da seguinte maneira:
O trabalho técnico precisa de revisão pela mesma razão que o lápis precisa de
borracha: Errar é humano. A segunda razão para precisarmos de revisões técnicas é
que embora as pessoas sejam boas para “descobrir” alguns de seus próprios erros,
vários tipos de erros escapam mais facilmente daquele que os cometeu do que de
outras pessoas externas. O processo de revisão é, portanto, a resposta para a oração
de Robert Burns:
Oh! que uma força conceda poder para nos vermos como os outros nos veem.
Uma revisão - qualquer revisão - é uma forma de usar a diversidade de um grupo
de pessoas para :
1.
Apontar aperfeiçoamentos necessários no produto de uma única pessoa ou de
uma equipe.
2.
Confirmar aquelas partes de um produto em que aperfeiçoamentos são indesejá-
veis ou desnecessários.
3.
Obter trabalho técnico de qualidade mais uniforme, ou pelo menos mais previsível;
qualidade que possa ser alcançada sem revisões, de modo a tornar o trabalho técnico
mais gerenciável.
Mesmo um pequeno subconjunto de métricas, reunidas para cada revisão
a ser realizada, podem oferecer uma boa visão da situação, muito embora possam ser difinidas muitas outras métricas para as RTs. Pressman (2011, p. 376)
relaciona alguma destas métricas:
• Esforço de preparação, Ep - o esforço (em homens/hora) exigido para revisar um
produto resultante antes da reunião de revisão.
• Esforço de avaliação, Ea - o esforço (em homens/hora) que é despendido durante
a revisão em si.
• Reformulação esforço, Re - o esforço (em homens/hora) dedicado à correção dos
erros revelados durante a revisão.
• Tamanho do artefato de software, TPS - uma medida do tamanho do artefato
de software que foi revisto (por exemplo, o número de modelos UML ou o número de
páginas de documento ou então o número de linhas de código).
32 •
capítulo 1
• Erros secundários encontrados, Errsec - o número de erros encontrados que
podem ser classificados como secundários (exigindo menos para ser corrigidos do que
algum esforço pré-especificado).
• Erros graves encontrados, Errgraves - o número de erros encontrados que podem
ser classificados como graves (exigindo mais para ser corrigidos do que algum esforço
pré-especificado).
Vale ainda ressaltar que essas métricas podem ser ainda mais refinadas se
associar o tipo de artefato de software que foi revisto para as métricas.
Bugs, erros e defeitos
O objetivo do controle da qualidade de software e da gestão da qualidade em geral é,
em sentido mais amplo, eliminar problemas de qualidade no software. Tais problemas
são conhecidos por diversos nomes - bugs, falhas, erros ou defeitos, apenas para citar
alguns. Esses termos são sinônimos ou existem diferenças sutis entre eles?
Existe uma distinção clara entre erro (um problema de qualidade encontrado antes
de o software ser liberado aos usuários finais) e defeito (um problema de qualidade
encontrado apenas depois de o software ter sido liberado aos usuários finais). Essa
distinção é feita porque os erros e os defeitos podem acarretar impactos econômicos,
comerciais, psicológicos e humanos muito diferentes. Os engenheiros de software têm
a missão de encontrar e corrigir o maior número possível de erros antes dos clientes
e/ ou usuários finais. Devem-se evitar defeitos - pois (de modo justificável) criam uma
imagem negativa do pessoal de software.
É importante notar, entretanto, que a distinção temporal entre erros e defeitos feita
neste livro não é um pensamento dominante. O consenso geral na comunidade de
engenharia de software é que defeitos e erros, falhas e bugs são sinônimos. Ou seja,
o momento em que o problema foi encontrado não tem nenhuma influência no termo
usado para descrevê-lo. Parte do argumento a favor desta visão é que, muitas vezes,
fica difícil fazer uma distinção clara entre pré e pós-entrega (consideremos, por exemplo, um processo incrementai usado no desenvolvimento ágil).
capítulo 1
• 33
Independentemente da maneira escolhida para interpretar esses termos ou do
momento em que um problema é descoberto, o que importa efetivamente é que os
engenheiros de software devem se esforçar - muitíssimo - para encontrar problemas
antes que seus clientes e usuários finais os façam. Caso tenha maior interesse nessa questão, uma discussão razoavelmente completa sobre a terminologia envolvendo
bugs pode ser encontrada em www.softwaredevelopment.ca/bugs.shtml.
(PRESSMAN, 2011, p. 374)
As revisões técnicas também podem possuir diferentes abordagens em relação ao seu nível de formalidade. Elas podem ser categorizadas em revisões
informais ou em revisões técnicas mais formais, sendo que cada uma possui
suas formas de abordagem.
1.8 Revisões informais
As revisões informais podem ser constituídas de ações que visam revisar, discutir, mas de modo informal, como o próprio nome sugere. Teste de mesa de
um artefato de engenharia de software, juntamente com um colega, bem como
reuniões informais (com pelo menos mais de duas pessoas), são exemplos de
reuniões informais e estas visam geralmente, revisar um artefato ou ainda alguns aspectos orientados a revisões da programação em pares.
Devido a falta de planejamento ou preparação para estas reuniões informais, sua eficácia pode ser muito inferior em relação às reuniões com abordagens mais formais, pois são desprovidas de uma série de pontos importantes
para dar continuidade ou atender os pontos que são discutidos ou que foram
tratados nesta reunião. O fato de não ter um follow-up, uma agenda e uma estrutura adequada para condução e anotação de uma pauta, podem comprometem sua eficácia. No entanto, um simples teste pode revelar erros que, de outra
forma, poderiam propagar ainda mais na gestão da qualidade.
Uma maneira de tentar aumentar esta eficácia, nas reuniões informais do
tipo teste de mesa, seria desenvolver um conjunto de listas de verificação simples para cada artefato produzido pela equipe de software. As questões levantadas na lista de verificação são genéricas, mas servirão como guia para os revisores verificarem o produto resultante (PRESSMAN, 2011, p. 380).
34 •
capítulo 1
1.9 Revisões Técnicas Formais
A revisão técnica formal ou RTF pode ser tratada como uma atividade de controle da qualidade de software realizada por engenheiros de software (e outros
profissionais). Neste tipo de revisão a abordagem é mais formal e exige uma estrutura em termos de planejamento e organização para que ela ocorra. Segundo Pressman (2011, p. 381), as RTF tem como objetivos: (1) descobrir erros na
função, lógica ou implementação para qualquer representação do software; (2)
verificar se o software que está sendo revisado atende aos requisitos propostos;
(3) garantir que o software foi representado de acordo com padrões predefinidos; (4) obter software que seja desenvolvido de maneira uniforme; e (5) tornar
os projetos mais gerenciáveis. Um ponto interessante de se observar é que além
disso, a RTF também serve como base de treinamento, possibilitando que engenheiros mais novos observem diferentes abordagens para análise, projeto e
implementação de software, contribuindo ainda mais para a qualidade.
Para ter sucesso e ser bem-sucedida, em cada reunião formal técnica, é
imprescindível a participação de todos os envolvidos e que esta seja planejada e controlada apropriadamente, como por exemplo, por meio de diretrizes
estabelecidas.
1.9.1 Diretrizes de revisão
Para a realização de uma RTF, devem-se estabelecer previamente diretrizes, e
estas serem distribuídas a todos os revisores, contar com a anuência de todos
e, então, segui-las à risca. Em algumas situações uma revisão não controlada
pode ser pior do que não fazer nenhuma revisão. Pressman (2011, p. 383) apresenta um conjunto mínimo de diretrizes para revisões técnicas formais:
1.
Revisar o produto, não o produtor. Uma RTF envolve pessoas e egos. Con-
duzida de forma apropriada, a RTF deve deixar todos os seus participantes com uma
agradável sensação de dever cumprido. Conduzido de forma imprópria, a RTF pode
assumir a aura de uma inquisição. Os erros devem ser apontados gentilmente; o clima
da reunião deve ser descontraído e construtivo; o intuito não deve ser o de causar
embaraços ou menosprezo. O líder da revisão deve conduzir a reunião de revisão de tal
forma a garantir que o clima seja mantido e as atitudes sejam apropriadas; além disso,
deve interromper imediatamente uma revisão que começou a sair do controle.
capítulo 1
• 35
Estabelecer uma agenda e mantê-la. Um dos principais males de reuniões
2.
de todos os tipos é desviar do foco. Uma RTF deve ser mantida em seu rumo e prazo
estabelecidos. O líder da revisão tem a responsabilidade de manter o cronograma da
reunião e não deverá ficar receoso em alertar as pessoas quando ela estiver saindo do
foco.
3.
Limitar debates e refutação. Quando uma questão é levantada por um revisor,
talvez não haja um acordo universal sobre seu impacto. Em vez de perder tempo debatendo a questão, o problema deve ser registrado para posterior discussão, fora da
reunião.
4.
Enunciar as áreas do problema mas não tentar resolver todo o problema
registrado. Uma visão não é uma sessão para resolução de problemas. A solução de
um problema pode, muitas vezes, ser realizada pelo próprio produtor ou com a ajuda de
apenas outro colega. A resolução de problemas deve ser adiada para depois da reunião
de revisão.
5.
Tomar notas. Algumas vezes é uma boa ideia para o registrador fazer aponta-
mentos em um quadro, de modo que os termos e as prioridades possam ser avaliados
por outros revisores à medida que as informações são registradas. Alternativamente, as
anotações podem ser introduzidas diretamente em um notebook.
6.
Limitar o número de participantes e insistir na preparação antecipada.
Duas cabeças funcionam melhor do que uma, mas catorze cabeças não funcionam,
necessariamente, melhor do que quatro. Mantenha o número de pessoas envolvidas
no mínimo necessário. Entretanto, todos os membros da equipe de revisão devem se
preparar com antecedência. O líder da revisão deve solicitar comentários escritos (fornecendo uma indicação de que o revisor reviu o material).
7.
Desenvolver uma lista de verificação para cada artefato que provavelmen-
te será revisado. A lista de verificação ajuda o líder da revisão a estruturar a RTF e
auxilia cada revisor a se concentrar nas questões importantes. As listas de verificação
devem ser desenvolvidas para análise, projeto, código e até mesmo para o teste dos
artefatos.
8.
Alocar os recursos e programar o tempo para as RTFs. Para as revisões
serem eficazes, elas devem ser programadas como tarefas durante a gestão de qualidade . Além disso, deve-se programar o tempo para as inevitáveis modificações que
ocorrerão como resultado de uma RTF.
36 •
capítulo 1
9.
Realizar treinamento significativo para todos os revisores. Para serem efica-
zes, todos os participantes de uma revisão deveriam receber algum treinamento formal.
O treinamento deve enfatizar tanto questões relacionadas a processos, como o lado
psicológico das revisões.
10. Revisar revisões iniciais. Um interrogatório pode ser benéfico na descoberta de
problemas com o próprio processo de revisão. Os primeiros artefatos a serem revisados
devem ser as próprias diretrizes de revisão.
Devido às diversas variáveis envolvidas, como por exemplo o número de
participantes, o tipo de artefatos resultantes, o momento, o tempo adequado,
a duração e a abordagem que será feita, é importante notar que estes fatores
podem causar impactos significativos na revisão. Assim, em função deste conjunto de fatores, é recomendado que a organização avalie as melhores práticas
e abordagens, avaliando seus resultados dentro do contexto local de onde está
sendo realizado as RTFs.
1.10 Confiabilidade de software
A confiabilidade é um importante elemento da qualidade global do software,
tanto que, se um sistema falhar com frequência e de modo repetitivo, pouco
importará se outros fatores de qualidade de software estão de acordo. O software em questão estará com a confiança e credibilidade comprometida, com sua
qualidade final afetada.
O uso de dados históricos e de desenvolvimento permitem mensurar e estimar, diferentemente de outros fatores de qualidade. Pressman (2011, p. 395)
define a confiabilidade de software em termos estatísticos como “a probabilidade de operação sem falhas de um programa de computador em um dado ambiente por um determinado tempo”. Para exemplificar este conceito, estima-se
que o programa X tenha uma confiabilidade de 0,999 depois de decorridas dez
horas de processamento. Portanto, isto quer dizer que, se o programa X tiver
que ser executado 1.000 vezes e precisar de um total de dez horas de tempo de
processamento (tempo de execução), é provável que ele opere corretamente
(sem falhas) 999 vezes (PRESSMAN, 2011, p. 395).
capítulo 1
• 37
Uma questão sempre presente quando se trata do assunto de confiabilidade
é a respeito do significado do termo “falha”. Falha pode ser considerada como a
falta de conformidade com os requisitos de software. Mesmo dentro dessa definição existem algumas variações, podendo ser apenas problemáticas ou catastróficas. Conforme Pressman (2011, p. 395), uma determinada falha pode ser
corrigida em segundos, enquanto outras podem necessitar de semanas ou até
mesmo meses para serem corrigidas. Em outras situações, complicando ainda
mais o problema, a correção de uma falha pode, na realidade, resultar na introdução de outros erros que resultarão em outras falhas.
Silva Filho (2014) ressalta um importante ponto, dizendo que a confiabilidade de software acaba se tornando uma propriedade determinante para o
produto, pois ela é observável pelos usuários, mostrando a necessidade de assegurar a qualidade e sua capacidade de não apresentar falhas quando está em
produção (uso).
Outro atributo importante dos sistemas de software é a disponibilidade, que
pode ser compreendida como sendo a probabilidade de, em qualquer instante de
tempo, um sistema funcionar de modo satisfatório num determinado ambiente.
Ou seja, é a probabilidade de um sistema estar disponível quando necessário. A
disponibilidade pode ser determinada pela relação (SILVA FILHO, 2014):
Disponibilidade = ((MTTF) / (MTTF + MTTR)) x 100%
onde:
MTTF (Mean Time to Failure) é o tempo médio até a ocorrência de falha.
MTTR (Mean Time to Repair) é o tempo médio de reparo.
A confiabilidade e a disponibilidade, como atributos de qualidade, constituem a base da Engenharia de Confiabilidade de Software (ECS), a qual é definida “como o estudo quantitativo do comportamento operacional de sistemas de
software com base nos requisitos de usuários relativo à confiabilidade” (SILVA
FILHO, 2014).
A Engenharia de Confiabilidade de Software ou ECS, abrange técnicas de
engenharia para desenvolver e oferecer manutenção a sistemas de software nos
quais a confiabilidade pode ser avaliada de modo quantitativo. Com o objetivo
de estimar e prever adequadamente a confiabilidade de sistemas de software,
dados das falhas de software necessitam ser medidos durante as fases de desenvolvimento e operacional (SILVA FILHO, 2014).
38 •
capítulo 1
De acordo com Silva Filho (2004), a ECS inclui:
• Medição de confiabilidade de software, a qual inclui estimativa e previsão com o uso
de modelos de confiabilidade de software.
• Atributos e métricas de projeto de produtos, processo de desenvolvimento, arquitetura de sistema, ambiente operacional do software e suas implicações sobre a confiabilidade.
• Aplicação deste conhecimento na especificação e projeto da arquitetura de software
do sistema, desenvolvimento, testes, uso e manutenção.
• Para tanto, torna-se necessária a coleta de dados de falhas. Esses dados são coletados para se fazer a medição da confiabilidade de software. Essa coleta compreende:
• Contagem de falhas – esse tipo de dado faz o rastreamento da quantidade de falhas
detectadas por unidade de tempo;
• Tempo médio entre falhas – esse tipo de dado faz o rastreamento dos intervalos entre
falhas consecutivas.
Além destes pontos, a ECS também requer a medição de confiabilidade de
software que envolve duas atividades: estimação e previsão de confiabilidade. A
atividade de estimação determina a confiabilidade de software atual aplicando
técnicas estatísticas de inferência aos dados de falhas obtidos durante o teste
do sistema ou durante a operação do sistema. Esta é uma importante medida
que considera a confiabilidade obtida desde um instante passado até o instante atual. Seu principal objetivo é avaliar a confiabilidade atual e determinar se o
modelo de confiabilidade está bem ajustado (SILVA FILHO, 2014).
Já a atividade de previsão determina a confiabilidade de software em uma
perspectiva futura baseada em métricas de software e medidas disponíveis.
Dependendo do estágio de desenvolvimento, a previsão pode envolver diferentes técnicas como (SILVA FILHO, 2014):
• Quando os dados de falhas estão disponíveis – Por exemplo, o software encontra-se em testes ou no estágio operacional. Neste caso, as técnicas de estimação podem ser usadas para parametrizar e verificar os modelos de confiabilidade de software,
os quais realizam previsão de confiabilidade de software futura.
capítulo 1
• 39
• Quando os dados de falhas não estão disponíveis – Por exemplo, quando o software ainda encontra-se na fase de projeto ou implementação. Neste caso, as métricas
obtidas do processo de desenvolvimento de software e as características do produto
resultante podem ser utilizadas para determinar a confiabilidade de software durante
a fase de testes.
Segurança e Confiabilidade
“Não obstante, a confiabilidade e a segurança de software estejam estreitamente relacionadas, é importante compreender a sutil diferença entre elas. A confiabilidade de
software usa a análise estatística para determinar a probabilidade de que uma falha de
software venha a ocorrer. Entretanto, a ocorrência de uma falha não necessariamente
resulta num risco ou deformação. A segurança de software examina as maneiras segundo as quais as falhas resultam em condições que podem levar a uma deformação.
Ou seja, as falhas não são consideradas no vazio, mas são avaliadas no contexto de um
sistema inteiro computadorizado
Segurança de software é um atividade de garantia de qualidade de software que
se concentra na identificação e avaliação de casualidades em potencial que possam
exercer um impacto negativo sobre o software e fazer com que todo o sistema falhe.
Logo que as casualidades a nível de sistema são identificadas, técnicas de análise
são usadas para definir a gravidade e a probabilidade de ocorrência, tais como, análise
em árvore, lógica de tempo real ou modelos de rede de Petri. Após as casualidades
serem identificadas e analisadas, os requisitos relacionados à segurança podem ser
especificados para o software”.
(BUENO e CAMPELO, 2014, p. 16)
ATIVIDADES
Vamos praticar um pouco os conceitos aprendidos. Responda às seguintes questões:
01. A qualidade de software é uma área de conhecimento da engenharia de software que
objetiva garantir a qualidade do software através da definição e normatização de processos
de desenvolvimento. Para que um software seja considerado “de qualidade”, é necessário
que este tenha conformidade com alguns conceitos. Marque a alternativa que representa o
conceito de Eficiência:
40 •
capítulo 1
a)
Deve realizar suas tarefas em tempo adequado à complexidade de cada um deles. E
devem utilizar de modo eficiente os recursos de hardware disponíveis.
b)
Deve permitir expansão de suas funcionalidades para atender novos requisitos ou incorporar novas tecnologias.
c)
Deve funcionar de forma correta. Satisfazendo as suas especificações sem falhas ou
erros.
d)
Deve ser fácil de aprender e de usar, permitindo maior produtividade do usuário, flexibilidade de utilização e aplicação e proporcionar satisfação ao usuário.
e)
Suas especificações satisfazem os requisitos dos usuários e da organização.
02. Quais são os principais objetivos da revisões técnicas fomais (RTF)?
03. Usando a definição de qualidade de software proposta neste capítulo, você acredita que
seja possível criar um produto útil que gere valor mensurável sem usar um processo eficaz?
Justifique sua resposta.
04. Na sua avaliação, o que pode ser considerado um software de boa qualidade? Justifique.
05. Qualidade e segurança são a mesma coisa? Explique.
REFLEXÃO
A área de qualidade, tanto na engenharia tradicional, quanto na engenharia de software é
sem dúvida bastante polêmica e discutida. Porém, após termos estudado os tópicos deste
capítulo, podemos perceber que o comprometimento da organização em adotar esses padrões é muito importante.
Não adiantaria um esforço somente da equipe de software de uma organização para a
equipe atingir padrões de excelência no desenvolvimento de software.
Normalmente, a adoção de um programa de qualidade aplicado ao software está relacionada com a adoção da empresa como um todo a assumir compromissos de melhoria da qualidade de seus produtos e serviços. Porém, isso é um pouco difícil de encontrar no mercado,
mas felizmente tem mudado, pois as empresas estão sentindo a necessidade de mudança
em busca de melhores padrões e práticas, pois os seus clientes começaram a exigi-los e
cobram as empresas de software por eles.
capítulo 1
• 41
Portanto, trata-se de um fator de vantagem competitiva para as empresas de software. O
gestor de TI também tem que se preocupar com estas questões porque lidar com fornecedores de software e suas equipes é um fator muito importante para o sucesso de seus projetos.
LEITURA
Existem muitos materiais, artigos e livros bons na área de qualidade de software.
• Qualidade de Software - 2ª ed., Novatec, livro dos autores André Koscianski e Michel dos
Santos Soares, de 2007. Este livro aborda as principais tecnologias, metodologias e processos utilizados atualmente em desenvolvimento de software.
• Molinari, L. Testes de Software: produzindo sistemas melhores e mais confiáveis. São
Paulo: Érica, 2006.
• Rocha, A.R.C.; Maldonado, J. C.; Weber, K. C. Qualidade de Software: teoria e prática. São
Paulo: Prentice Hall, 2001.
Anualmente, a Sociedade Brasileira de Computação (SBC) promove um simpósio nacional na área de qualidade de software. Os anais destes eventos são grandes referências e
recomendações de ampliação dos horizontes nesta área.
REFERÊNCIAS BIBLIOGRÁFICAS
BARRETO JÚNIOR, J.; Qualidade de Software. Disponível em: <http://www2.unemat.br/
rhycardo/download/qualidade_em_software.pdf>. Acessado em: 16 dez 2014.
BUENO, C. F. S.; CAMPELO, G. B.; Qualidade de Software. UFPE. Disponível em: <http://
sistemas.riopomba.ifsudestemg.edu.br/dcc/materiais/1022789570_Qualidade%20
de%20Software.pdf>. Acesso em: 17 dez 2014.
BUENO, L. C.; Gestão da Qualidade Como um Desafio à Manutenção de Software.
Monografia. Instituto Superior de Administração e Economia do Mercosul. 2010. 8p.
DORFMAN, M.; THAYER, R.; Standards, Guidelines and Examples of System and Software Requirements Engineering, Institute of Electrical and Electronics Engineers,
Inc., 1990.
KOSCIANSKI, A.; SOARES, S. Qualidade de software. 2. ed. São Paulo: Novatec, 2007.
MARTINHO, F.; Qualidade, Qualidade de Software e Garantia da Qualidade de Software são
as mesmas coisas?. 2008. Disponível em: <http://www.testexpert.com.br/?q=node/669>.
Acesso em: 17 jan 2015.
42 •
capítulo 1
PRESSMAN, R. S. Engenharia de Software, 7ª edição. São Paulo: McGraw-Hill, 2011.
780p.
RAPCHAN, F.; A Norma ISO 9000-3. UFES. 2011. Disponível em: <http://www.geocities.
ws/chicorapchan/artigos/9000-3.pdf>. Acesso em: 17 jan 2015.
SAYÃO, M; BREITMAN, K K. Gerência de Requisitos. Disponível em <http://www-di.inf.
puc-rio.br/~karin/TELECOM/index_files/gerencia_req.pdf>. Acesso em: 24 nov de 2014.
SILVA FILHO, A. M.; Confiabilidade de Software. Revista Engenharia de Software Magazine. Ed. 8. Disponível em: <http://www.devmedia.com.br/artigo-engenharia-de-software8-confiabilidade-de-software/11312>. Acesso em: 11 dez 2014.
SLACK, N. et al. Administração da produção. São Paulo: Atlas, 1996.
capítulo 1
• 43
44 •
capítulo 1
2
Processos de Ciclo
de Vida e Qualidade
Neste capítulo vamos estudar alguns modelos ou padrões de qualidade aplicados ao software. Veremos que existem muito mais detalhes do que simplesmente documentar o sistema por meio de manuais técnicos.
Vimos no capítulo 1 o conceito de qualidade aplicada ao processo de software. Verificamos que a qualidade está muito mais ligada ao processo do que
necessariamente ao produto final.
É muito importante que o profissional de TI conheça esses modelos e os
avalie a fim de aplicá-los em possíveis projetos nos quais possa haver algum
tipo de desenvolvimento ou até mesmo em empresas de desenvolvimento.
Trataremos dos processos de ciclo de vida e qualidade, com uma abordagem sobre as normas de qualidade de produtos de software e os processos fundamentais, de apoio, organizacionais e de adaptação.
Bons estudos!
OBJETIVOS
Neste capítulo teremos como objetivo:
• Conhecer algumas das principais normas de qualidade de produtos de software.
• Abordar sobre os processos fundamentais.
• Abordar sobre os processos de apoio.
• Abordar sobre os processos organizacionais.
46 •
capítulo 2
2.1 Introdução
Para que a organização que produz software tenha sua qualidade reconhecida
em todo o mundo, seus processos devem respeitar padrões de qualidade definidos pela comunidade de software (SILVA, 2006, p. 9).
Um aspecto interessante da qualidade é que não basta que ela exista. Ela
deve ser reconhecida pelo cliente. Por causa disso, é necessário que exista algum tipo de certificação oficial, emitida com base em um padrão ou modelo
de qualidade. Alguns tipos de certificados são bastante conhecidos, como por
exemplo os certificados de qualidade da série ISO-9000 (BARRETO JÚNIOR,
2014, p. 1).
A norma ISO-9000, por exemplo, foi criada pela ISSO (International
Organization for Standardization) para permitir que todas as empresas do mundo possam avaliar e julgar sua qualidade. Existindo um padrão único mundial,
uma empresa do Brasil, mesmo não tendo nenhum contato com uma outra empresa na Europa, pode garantir a ela a qualidade de seu trabalho (BARRETO
JÚNIOR, 2014, p. 1).
A certificação em uma norma ou padrão ocorre quando uma empresa obtém um certificado oficial (documento) o qual indica que a empresa possui
conformidade com uma determinada norma ou padrão.
Segundo Silva (2006, p. 9), desde a década de 1980, iniciaram-se esforços
para melhoria de processos de software, com o objetivo de melhorar a qualidade, aumentar a produtividade e diminuir os custos. Diferentes modelos são utilizados dependendo do mercado alvo das organizações de software (ROCHA et
al., 2001). As principais normas e modelos de qualidade difundidos atualmente
são: ISO 9000 (ISO, 2000), ISO/IEC 12207 (ISO/IEC, 1995), ISO/IEC 15504 (ISO/
IEC, 2003), CMMI (SEI, 2001) e MPS.BR (SOFTEX, 2006).
Neste capítulo iremos abordar alguns dos modelos ou padrões mais conhecidos e utilizados, relacionados à qualidade de software.
A ISO é uma entidade internacional criada com o objetivo de padronizar normas, testes
e certificações entre os países.
Para se obter um certificado da ISO 9000 são necessários alguns passos:
11. Adquirir e estudar as normas pretendidas
capítulo 2
• 47
12. Implementar um sistema de gestão da qualidade segundo os requisitos da norma
pretendida, inclusive para software
13. Solicitar que um órgão certificador credenciado faça a avaliação do sistema implantado.
O certificado obtido normalmente tem validade por 3 anos a contar da data de auditoria de certificação. A empresa passa por avaliações periódicas durante esse período
de 3 anos. No Brasil, o INMETRO é o órgão do governo responsável pelo credenciamento das instituições avaliadora que realizam a certificação de sistemas de qualidade.
2.2 Normas de qualidade de produtos de
software
Quando pensamos em qualidade, normalmente pensamos em parâmetros de
comparação do tipo físicos como forma, tamanho, conforto, velocidade e etc.
Mas e no caso de software? Como estabelecer estes padrões de comparação?
Nas próximas seções vamos estudar alguns deles.
2.2.1 Qualidade de Produtos de Software - ISO 9126
A ISO publicou uma norma que representa uma padronização mundial para a
qualidade de produtos de software, trata-se da norma ISO/IEC 9126 e foi publicada em 1991.
Esta norma é uma das mais antigas da área de qualidade de software e possui uma tradução para o Brasil, publicada em agosto de 1996 como NBR 13596.
Esta norma apresenta um conjunto de características que devem ser verificadas em um software para que ele seja considerado um “software de qualidade”. O conjunto consiste de 6 grupos divididos em alguns subgrupos (BARRETO
JÚNIOR, 2014, p. 5).
48 •
capítulo 2
A figura 2.1 e a tabela 2.1 mostram o conjunto desta norma.
Adeq
uaç
Acurácia ão
Interoperabilidade
Segurança
e
idad
cional
n
u
f
a
Conformidade com
Conformidade
Inteligibil
idad
e
Apreensibilid
ade
Operabilidade
Atratividade
de
bilida
com a usa
Us
l
a bi
de
i da
Po
rt
Confi
ab
ilid
ade
abi
lida
de
Fu
a de
alid
ion
nc
Maturida
de
Tolerância e falh
as
Recuperabilidade
ilidade
Conformidade com a confiab
de
abilida
apt
Ad
e de instalação
uldad
Fac
Coexistência
Capacidade para substituir
Con
form
idade co
m a portabilidade
ute
Man
ISO 9126-1
Ef
ici
ê
nc
ade
nibilid
ia
bilidade
alisa
An
ificabilidade
Mod
Estabilidade
Testabilidade
Con
formi
dade co
m a manutenibilidade
m relação ao tempo
ento e
rtam
mpo
Co
lação aos recursos
Comportamento em re
Confo
rmidade com
a eficiência
Figura 2.1 – Norma ISO 9126-1. Fonte: Elaborado pelo autor.
CARACTERÍSTICA
SUBCARACTERÍSTICA
Adequação
Acurácia
Funcionalidade
(satisfaz as necessidades?)
Interoperabilidade
Conformidade
Segurança de acesso
Maturidade
Confiabilidade
(é imune a falhas?)
Tolerância a falhas
Recuperabilidade
Inteligibilidade
Usabilidade
(é fácil de usar?)
PERGUNTA CHAVE
Propõe-se a fazer o que é
apropriado?
Faz o que foi proposto de forma
correta?
Interage com os sistemas especificados?
Está de acordo com as normas,
leis, etc.?
Evita acesso não autorizado aos
dados?
Com que frequência apresenta
falhas?
Ocorrendo falhas, como ele
reage?
É capaz de recuperar dados em
caso de falha?
É fácil entender o conceito e a
aplicação?
Apreensibilidade
É fácil aprender a usar?
Operacionabilidade
É fácil de operar e controlar?
capítulo 2
• 49
Eficiência
(é rápido e enxuto?)
Tempo
Recursos
Analisabilidade
Manutenibilidade
(é fácil de modificar?)
Modificabilidade
Estabilidade
Testabilidade
Adaptabilidade
Portabilidade
(é fácil de usar em outro
ambiente?)
Capacidade de ser instalado
Conformidade
Capacidade. de substituir
Qual é o tempo de execução?
Quanto recurso usa? Durante
quanto tempo?
É fácil de encontrar uma falha,
quando ocorre?
É fácil modificar e adaptar?
Há grande risco quando se faz
alterações?
É fácil testar quando se faz
alterações?
É fácil adaptar a outros ambientes?
É fácil instalar em outros ambientes?
Está de acordo com padrões de
portabilidade?
É fácil usar para substituir
outro?
Tabela 2.1 – Norma ISO 9126. Fonte: BARRETO JÚNIOR (2014, p. 5).
Essa norma não é muito extensa porém define detalhadamente o que se
pretende avaliar em cada grupo e subgrupo.
Embora a norma ISO 9126/NBR 13596 enumere as características e subcaracterísticas de um software, ela ainda não define como dar uma nota a um software em cada um destes itens. Se você não está familiarizado com o processo
de avaliação de software, pode ter dificuldades em tentar utilizar a norma. Se
você pretende avaliar um software segundo esta norma, deve tentar atribuir valores (como se fossem notas ou conceitos) a cada uma das subcaracterísticas.
2.2.2 Guias para a Avaliação da Qualidade - ISO 14598
É fácil perceber a necessidade de mais detalhes sobre como avaliar a qualidade de
um software. As características e subcaracterísticas da norma ISO/IEC 9126 apenas
começaram o trabalho. Faltava definir, em detalhes, como atribuir um conceito
para cada item. Afinal, sem uma padronização, que valor teria uma avaliação?
A ISO, consciente deste problema, está finalizando o trabalho em um conjunto de Guias para a Avaliação da Qualidade segundo a norma ISO/IEC 9126.
Estes guias descrevem, detalhadamente, todos os passos para que se avalie um
software (BARRETO JÚNIOR, 2014, p. 8).
50 •
capítulo 2
Esta nova norma traz muitos recursos interessantes aos avaliadores, já que
trata o processo de avaliação em grande detalhe. Ela leva em conta a existência de
três grupos interessados em avaliar um software, o que define os três tipos básicos de certificação conforme mostra a tabela 2.2 (BARRETO JÚNIOR, 2014, p. 8):
CERTIFICAÇÃO
QUEM REALIZA?
FINALIDADE
De 1ª parte
Empresas que desenvolvem
software
Melhorar a qualidade de seu próprio
produto
De 2ª parte
Empresas que adquirem software
Determinar a qualidade do produto que
irão adquirir
De 3ª parte
Empresas que fazem certificação
Emitir documento oficial sobre a qualidade
de um software
Tabela 2.2 – Certificações da ISO14598. Fonte: BARRETO JÚNIOR (2014, p. 8).
Esta norma é constituída, na verdade, de seis documentos distintos, relacionados entre si mostrados na tabela 2.3:
NORMA
NOME
FINALIDADE
14598-1
Visão Geral
Ensinar a utilizar as outras normas do grupo
14598-2
Planejamento e Gerenciamento
Sobre como fazer uma avaliação, de forma geral
14598-3
Guia para Desenvolvedores
14598-4
Guia para Aquisição
14598-5
Guia para Avaliação
14598-6
Módulos de Avaliação
Como avaliar sob o ponto de vista de quem desenvolve
Como avaliar sob o ponto de vista de quem vai
adquirir
Como avaliar sob o ponto de vista de quem certifica
Detalhamento sobre como avaliar cada característica
Tabela 2.3 – Documentos da ISO14598. Fonte: adaptado de BARRETO JÚNIOR (2014, p. 8).
Resumidamente, esta nova norma complementa a ISO/IEC 9126 e permite
uma avaliação padronizada das características de qualidade de um software.
É importante notar que esta norma entra em detalhes mínimos, incluindo
modelos para relatórios de avaliação, técnicas para medição das características, documentos necessários para avaliação e fases da avaliação, o que não
ocorre na norma ISO 9126.
capítulo 2
• 51
2.2.3 Qualidade de Pacotes de Software - ISO 12119
Esta norma foi publicada em 1994 e trata da avaliação de pacotes de software,
também conhecidos como “software de prateleira”. Além de estabelecer os requisitos de qualidade para este tipo de software, ela também destaca a necessidade de instruções para teste deste pacote, considerando estes requisitos. A
norma divide-se em itens, da seguinte forma (BARRETO JÚNIOR, 2014, p. 9):
1.
Escopo
2.
Definições
3.
Requisitos de qualidade
a) Descrição do Produto: descreve o produto, de forma a ajudar o comprador
em potencial, servindo como base para testes. Cada declaração deve ser correta
e testável. Deve incluir declarações sobre funcionalidade, confiabilidade, usabilidade, eficiência, manutenibilidade e portabilidade.
b) Documentação do usuário: deve ser completa, correta, consistente, fácil de
entender e capaz de dar uma visão geral do produto.
c)
Programas e dados: descreve em detalhes cada uma das funções do sof-
tware, incluindo declarações sobre funcionalidade, confiabilidade, usabilidade, eficiência, manutenibilidade e portabilidade.
4.
Instruções para teste
a) Pré-requisitos de teste: Lista de itens necessários ao teste, incluindo documentos incluídos no pacote, componentes do sistema e material de treinamento.
b) Atividades de teste: Instruções detalhadas sobre os procedimentos de teste, inclusive instalação e execução de cada uma das funções descritas.
c)
Registro de teste: Informações sobre como os testes foram realizados, de tal
forma a permitir uma reprodução destes testes. Deve incluir parâmetros utilizados,
resultados associados, falhas ocorridas e até a identidade do pessoal envolvido.
d) Relatório de teste: Relatório incluindo: identificação do produto, hardware
e software utilizado, documentos utilizados, resultados dos testes, lista de não
conformidade com os requisitos, lista de não conformidade com as recomendações, datas, etc.
Tabela 2.4 – Divisão da norma ISO 12119.
Um dos grandes méritos desta norma está na profundidade com que são
descritas cada uma das características e subcaracterísticas mencionadas na
52 •
capítulo 2
norma 9126. A norma inclui detalhes que devem estar presentes no produto,
tais como (BARRETO JÚNIOR, 2014, p. 10):
• Documentação do usuário de fácil compreensão
• Um sumário e um índice remissivo na documentação do usuário
• Presença de um Manual de instalação com instruções detalhadas
• Possibilidade de verificar se uma instalação foi bem sucedida
• Especificação de valores limites para todos os dados de entrada, que deverão ser
testados
• Operação normal mesmo quando os dados informados estão fora dos limites especificados
• Consistência de vocabulário entre as mensagens e a documentação
• Função de auxílio (help) com recursos de hipertexto
• Mensagens de erro com informações necessárias para a solução da situação de erro
• Diferenciação dos tipos de mensagem: confirmação, consulta, advertência e erro
• Clareza nos formatos das telas de entrada e relatórios
• Capacidade de reverter funções de efeito drástico
• Alertas claros para as consequências de uma determinada confirmação
• Identificação dos arquivos utilizados pelo programa
• Identificação da função do programa que está sendo executada no momento
• Capacidade de interromper um processamento demorado
• Outras características importantes são a ênfase nos testes e os modelos de relatórios incluídos. Tudo isso facilita grandemente o trabalho do avaliador.
2.2.4 A Série ISO 9000
Esta série é um conjunto de normas da ISO que define padrões para garantia e
gerenciamento da qualidade. Veja algumas destas normas a seguir:
NORMA
TRATA DE
ISO 9001
Modelo para garantia da qualidade em projeto, desenvolvimento, produção,
instalação e assistência técnica
ISO 9002
Modelo para garantia da qualidade em produção e instalação
capítulo 2
• 53
NORMA
TRATA DE
ISO 9003
Modelo para garantia da qualidade em inspeção e ensaios finais
ISO 9000-1
Diretrizes para a escolha entre as normas ISO 9001, 9002 e 9003
ISO 9000-3
Orientação para a aplicação da ISO 9001 em Software
Tabela 2.5 – Normas da ISO 9000. Fonte: BARRETO JÚNIOR (2014, p. 11).
De acordo com Barreto Júnior (2014, p. 11), entre as normas 9001, 9002 e
9003, a primeira é a que mais possui aderência ao desenvolvimento e manutenção de software. Como toda norma deste grupo, ela é usada para garantir
que um fornecedor atende aos requisitos especificados nos diversos estados do
desenvolvimento. Estes estágios incluem projeto, desenvolvimento, produção,
instalação e suporte.
O Padrão ISO 9001:2000
A descrição a seguir define os elementos básicos do padrão ISO 9001:2000.
Informações completas sobre o padrão podem ser obtidas da lnternational Organization
for Standardization (www.iso.ch) e outras fontes na Internet (por exemplo, www.praxiom.
com).
• Estabelecer os elementos de um sistema de gestão da qualidade.
• Desenvolver, implementar e aperfeiçoar o sistema.
• Definir uma política que enfatize a importância do sistema.
• Documentar o sistema de qualidade.
• Descrever o processo.
• Produzir um manual operacional.
• Desenvolver métodos para controlar (atualizar) documentos. Estabelecer métodos
para manutenção de registros.
• Dar suporte ao controle e à garantia da qualidade.
• Promover a importância da qualidade entre todos os interessados.
• Focar na satisfação do cliente.
• Definir um plano de qualidade que atenda aos objetivos, às responsabilidades e à
autoridade.
• Definir mecanismos de comunicação entre os interessados. Estabelecer mecanismos
de revisão para um sistema de gestão da qualidade.
54 •
capítulo 2
• Identificar métodos de revisão e mecanismos de feedback. Definir procedimentos de
acompanhamento.
• Identificar recursos de qualidade, incluindo elementos de pessoal, treinamento e infraestrutura. Estabelecer mecanismos de controle. Para planejamento.
• Para as necessidades do cliente.
• Para as atividades técnicas (por exemplo, análise, projeto, testes).
• Para monitoramento e gerenciamento de projetos. Definir métodos para reparação.
• Avaliar dados e métricas de qualidade.
• Definir a abordagem para processos e aperfeiçoamento contínuos da qualidade.
(PRESSMAN, 2011, p. 398)
A ISO 9000:2000 é baseada em um conjunto de princípios de gerenciamento de
qualidade, definidos a partir da experiência de várias organizações (ISO, 2000):
• Princípio 1 - Foco no cliente: Dado que as organizações dependem de seus clientes,
é recomendável que atendam às suas necessidade atuais e futuras e aos seus requisitos e procurem exceder as suas expectativas.
• Princípio 2 - Liderança: Líderes estabelecem a unidade de propósito e o rumo da
organização. Convém que criem e mantenham um ambiente onde as pessoas estejam
totalmente envolvidas no propósito de atingir os objetivos da organização.
• Princípio 3 - Envolvimento de pessoas: Pessoas de todos os níveis são a essência de
uma organização. Seu envolvimento possibilita o aproveitamento de suas habilidades
por toda a organização.
• Princípio 4 - Abordagem de processo: Um resultado desejado é alcançado mais
eficientemente quando suas atividades e recursos são gerenciados como um processo.
• Princípio 5 - Abordagem sistêmica para a gestão: Identificar, entender e gerenciar
os processos inter-relacionados como um sistema contribui para a eficácia e eficiência
da organização no sentido desta atingir os seus objetivos.
• Princípio 6 - Melhoria contínua: Convém que a melhoria contínua do desempenho
global da organização seja seu objetivo permanente.
• Princípio 7 - Abordagem factual para tomada de decisão: Decisões eficazes são
baseadas na análise de dados e informações.
• Princípio 8 - Benefícios mútuos nas relações com os fornecedores: Pelo fato de organização e fornecedores serem interdependentes, uma relação de benefícios mútuos
aumenta a capacidade de ambos em agregar valor.
(SILVA, 2006, p. 10)
capítulo 2
• 55
A norma ISO 9000-3 (não confundir com ISO 9003!) traz os roteiros para
aplicar a ISO 9001 especificamente na área de desenvolvimento, fornecimento
e manutenção de software. Todas as orientações giram em torno de uma “situação contratual”, onde uma outra empresa contrata a empresa em questão para
desenvolver um produto de software. Veja na tabela 2.6 abaixo os processos definidos na ISO 9000-3 (BARRETO JÚNIOR, 2014, p. 12):
GRUPO
ESTRUTURA DO SISTEMA DE QUALIDADE
ATIVIDADES DO CICLO DE VIDA
ATIVIDADES DE APOIO
ATIVIDADE
Responsabilidade do fornecedor
Responsabilidade do comprador
Análise crítica conjunta
Análise crítica do contrato
Especificação dos requisitos do comprador
Planejamento do desenvolvimento
Projeto e implementação
Testes e validação
Aceitação
Cópia, entrega e instalação
Manutenção
Gerenciamento de configuração
Controle de documentos
Registros da qualidade
Medição
Regras, convenções
Aquisição
Produto de software incluído
Treinamento
Tabela 2.6 – Processos definidos na ISO 9000-3. Fonte: BARRETO JÚNIOR (2014, p. 10).
O processo de certificação de uma empresa de software segundo as normas ISO 9001 / 9000-3 segue um conjunto de passos bem definidos (BARRETO
JÚNIOR, 2014, p. 10):
1.
A empresa estabelece o seu sistema de qualidade.
2.
A empresa faz uma solicitação formal a um órgão certificador, incluindo detalhes do
negócio da empresa, escopo da certificação solicitada e cópia do manual de qualidade.
3.
O órgão certificador faz uma visita à empresa, colhe mais dados e explica o pro-
cesso de certificação.
4.
O órgão certificador verifica se a documentação do sistema de qualidade está de
acordo com a norma ISO.
56 •
capítulo 2
5.
O órgão certificador envia uma equipe à empresa com fins de auditoria. Nesta vi-
sita, será verificado se todos na empresa cumprem o que está documentado no manual
de qualidade.
6.
O órgão certificador emite o certificado de qualidade.
7.
O órgão certificador realiza visitas periódicas à empresa para assegurar que o
sistema continua sendo efetivo.
CONEXÃO
No site http://www.12207.com há uma página que lista os padrões de processo de software.
Por meio desta página você consegue maiores informações sobre o cada norma e encontra os links que lhe direcionará diretamente à página de cada norma. Vale a pena conferir:
http://migre.me/oIBCn
De acordo com Wazlawick (2013, p. 363), a série 9000 é conhecida como um conjunto de normas que enfatiza a documentação de processos e procedimentos. Ela
estabelece quatro níveis de documentação cada vez mais detalhados e complexos:
a)
Nível 1: neste nível genérico é exigido basicamente um manual geral de qualida-
de explicando a política e o sistema de qualidade, bem como a estrutura organizacional
da empresa e os papéis ou responsabilidades.
b)
Nível 2: neste nível, os processos são documentados pelos manuais de proce-
dimentos. Eles devem abranger todas as atividades ligadas ao desenvolvimento e fornecimento de software, independentemente do ciclo de vida adotado, estabelecendo
como as atividades devem ser executadas, quais suas dependências e quais os perfis
de responsáveis (Capítulo 2).
c)
Nível 3: neste nível devem ser detalhadas as instruções sobre como proceder
para o eficaz funcionamento do sistema de qualidade, abrangendo as atividades de
teste, inspeção, especificações, modelo e requisitos de qualidade etc. (Zahran, 1997).
d)
Nível 4: neste nível devem ser mantidos os registros de qualidade, ou seja, resul-
tados de testes e inspeções que comprovam que as atividades do sistema de qualidade
documentado no nível 3 são efetivamente executadas.
(WAZLAWICK, 2013, p. 363)
capítulo 2
• 57
A documentação relacionada ao sistema de qualidade também pode ser
classificada segundo outros critérios, de acordo com Wazlawick (2013, p. 363):
• Documentação da qualidade: todos os documentos que estabelecem processos,
políticas e regras sobre como executar as atividades relacionadas à qualidade.
• Registros da qualidade: resultados dos processos de avaliação da qualidade que
indicam que os documentos da qualidade não são apenas letra morta, mas que são
efetivamente usados na empresa.
Espera-se que os documentos de qualidade sejam estabelecidos e, à medida
que amadurecem, alcancem certa estabilidade, embora nunca devam estagnar.
Já os registros da qualidade são criados diariamente para cada projeto em desenvolvimento na empresa.
Além das normas relacionadas à qualidade, existem outras normas e modelos voltados para processos e entre estas normas vale destacar a ISO/IEC 12207,
que atua com praticamente todos os aspectos do ciclo de vida de um software,
servindo de base para várias outras normas, pois trata de assuntos que envolvem desde a concepção do software até a sua descontinuidade. Esta norma,
apresenta uma divisão de processos que podem ser assim divididas: Processos
Fundamentais, Processos de Apoio, Processos Organizacionais e ainda os
Processos de Adaptação (figura 2.2 e tabela 2.7).
Processos Fundamentais
Processos de Apoio
Aquisição
Documentação
Fornecimento
Gerencia de Configuração
Garantia de Qualidade
Verificação
Operação
Validação
Desenvolvimento
Revisão Conjunta
Manutenção
Auditoria
Resolução de Problemas
Processos Organizacionais
Gerência
Infra-estrutura
Melhoria
Treinamento
Figura 2.2 – Estrutura de processos da ISO/IEC 12207.
58 •
capítulo 2
Adapatação
Aquisição
PROCESSOS FUNDAMENTAIS DO CICLO DE VIDA
Fornecimento
Desenvolvimento
Operação
Manutenção
Iniciação
Preparação de pedido de proposta
Preparação e atualização do contrato
Monitoração do fornecedor
Aceitação e conclusão
Iniciação
Preparação de resposta
Contrato
Planejamento
Revisão e avaliação
Entrega e conclusão
Implementação do processo
Análise dos requisitos do sistema
Projeto da arquitetura do sistema
Análise dos requisitos do software
Projeto da arquitetura do software
Projeto detalhado do software
Codificação e teste do software
Integração do software
Teste de qualificação do software
Integração do sistema
teste de qualificação do sistema
Apoio à aceitação do software
Implementação do processo
Teste operacional
Operação do sistema
Suporte ao usuário
Implementação do processo
Análise do problema e da modificação
Implementação da modificação
Revisão/aceitação da manutenção
Migração
Descontinuação do software
capítulo 2
• 59
Documentação
PROCESSOS DE APOIO
Gerência de
configuração
Garantia da qualidade
Verificação
Validação
Revisão conjunta
Auditoria
PROCESSOS ORGANIZACIONAIS
Resolução de
problema
Gerência
Melhoria
Infra-estrutura
Treinamento
Implementação do processo
Projeto e desenvolvimento
Produção
Manutenção
Implementação do processo
Identificação da configuração
Controle da configuração
Relato da situação da configuração
Avaliação da configuração
Gerência da liberação e distribuição
Implementação do processo
Garantia do produto
Garantia do processo
Sistemas de garantia da qualidade
Implementação do processo
Verificação
Implementação do processo
Validação
Implementação do processo
Revisões de gerenciamento do projeto
Revisões técnicas
Implementação do processo
Auditoria
Implementação do processo
Resolução de problema
Iniciação e definição do escopo
Planejamento
Execução e controle
Revisão e avaliação
Conclusão
Estabelecimento do processo
Avaliação do processo
Melhoria do processo
Implementação do processo
Estabelecimento da infra-estrutura
Manutenção da infra-estrutura
Implementação do processo
Desenvolvimento do material de treinamento
Implementação do plano de treinamento
Tabela 2.7 – Processos de ciclo de vida de software da ISO/IEC 12207.
2.3 Processos Fundamentais
A fim de alcançar diferencial competitivo, muitas empresas de todo o mundo,
inclusive do Brasil, vem usando a norma ISO/IEC 12207 como referência em re-
60 •
capítulo 2
lação aos seus processos, já que a globalização da economia tem influenciado
as empresas produtoras e prestadoras de serviços a atingirem níveis de qualidade e produtividade de forma bem competitiva (NOGUEIRA, 2003, p. 7). De
acordo com Nogueira (2003, p. 7), “ela tem por objetivo auxiliar os envolvidos
na produção de software a definir seus papéis, por meio de processos bem definidos, e assim proporcionar às organizações que a utilizam um melhor entendimento das atividades a serem executadas nas operações que envolvem, de
alguma forma, o software”.
Os processos fundamentais inicialmente atendem à contratação entre o adquirente e o fornecedor (aquisição e fornecimento) e a execução do desenvolvimento, da operação ou manutenção de produtos de software durante o ciclo de
vida do software (NOGUEIRA, 2003, p. 7).
O planejamento é realizado de modo precário nas empresas de desenvolvimento devido a ausência constante de documentação entre o desenvolvedor e
o adquirente, que está realizando a aquisição do produto ou do serviço. A ilusão
de pensarem que estas ações de planejamento, com especificações adequadas
de requisitos, poderiam ser “perda de tempo”, traz uma resistência em ambas
as partes interessadas em gerar documentação, afetando todo o planejamento do projeto. Isto faz com que muitos desenvolvedores iniciem diretamente o
desenvolvimento (codificação) e como consequência, depois são levados a um
processo interminável de correção e manutenção, causando um significativo
desgaste da relação comercial entre as partes, além do não cumprimento dos
prazos de entrega e do custo do projeto que acumula prejuízos intangíveis, a
partir de estimativas aleatórias e inadequadas.
De maneira sintética, os processos fundamentais envolvem o início e execução do desenvolvimento, operação ou manutenção do software durante o seu
ciclo de vida (BARRETO JÚNIOR, 2014, p. 13). Para efeito de organização, a 12207
divide os processos em quatro grandes famílias (WAZLAWICK, 2013, p. 40):
• Aquisição: visa à obtenção do produto ou serviço relacionado à informática que satisfaça as necessidades da empresa. Define as atividades do adquirente, bem como as necessidades de adquirir um produto, sistema ou serviço de
software. Trata também da seleção do fornecedor.
• Fornecimento: seu objetivo é fornecer um produto ou serviço a terceiros.
Aqui é definido as atividades do fornecedor e determina os procedimentos e
recursos necessários.
capítulo 2
• 61
• Desenvolvimento: é definido como o processo de transformar um conjunto de requisitos em um produto executável, definindo as atividades do desenvolvedor em análise de requisitos, projeto, codificação, integração, testes,
instalação e aceitação.
• Operação: tem como objetivo iniciar e manter o produto operando em
seu local definitivo, bem como prestar serviços aos usuários. É definido as atividades do operador, como a operação do produto de software e o suporte operacional aos usuários.
• Manutenção: seu propósito é modificar o produto, removendo erros e
adequando-o a novos contextos. É definido as atividades do mantenedor, tratando ainda dos problemas envolvidos, necessidades de melhoria e adaptação.
2.4 Processos de apoio
De acordo com Nogueira (2003, p. 9) os processos de apoio auxiliam e contribuem para o sucesso e a qualidade do projeto de software, sendo “empregado
e executado quando necessário para documentação, gerência de configuração,
garantia da qualidade, processo de verificação, processo de validação, revisão
conjunta, auditoria e resolução de problemas”.
Nogueira (2003, p. 9) ainda faz uma observação importante sobre a documentação do software e os processos de verificação e validação, relacionados
aos processos de apoio:
A documentação do software será a última tarefa que o desenvolvedor irá se preocupar,
sendo tratado como se não tivesse que acontecer antes do desenvolvimento propriamente dito, a fim de ser possível acompanhar se os requisitos do projeto foram atendidos ou se nem foram especificados no momento oportuno. Os processos de verificação
e validação ocorrem unilateralmente, ou seja, “este requisito era óbvio, nem precisava
mencionar”, e para atender as necessidades do adquirente, este processo será repetido
por inúmeras vezes, alongando a manutenção e atrasando o funcionamento e atendimento as necessidades do negócio (NOGUEIRA, 2003, p. 9).
É importante ressaltar que embora o objetivo dos processos de apoio seja
apoiar os processos fundamentais, não são eles que compõem as atividades
62 •
capítulo 2
de desenvolvimento propriamente ditas. Os processos de apoio envolvidos são
(WAZLAWICK, 2013, p. 40):
• Documentação: tem como propósito criar e manter informações sobre o
produto e o processo de desenvolvimento. Envolvem os registros de informações do processo e atividade do ciclo de vida, de forma que estes documentos
possam ser distribuídos a todos os envolvidos.
• Gerência de configuração: seu objetivo é gerenciar e manter a consistência entre todas as versões dos produtos do trabalho, de forma a manter também
sua integridade. Para isto, é necessário realizar a identificação e definição dos
itens que irão compor o software, gerenciar e controlar as modificações, além
de garantir a integridade.
• Garantia de qualidade: tem como objetivo garantir que os produtos e serviços estejam em conformidade com normas e padrões predefinidos, sendo
consistentes em relação aos requisitos.
• Verificação: tem como propósito garantir ou confirmar que os produtos
refletem e atendem completamente os requisitos especificados.
• Validação: objetiva garantir ou confirmar que os requisitos especificados
são os realmente desejados pelo cliente, validando o produto de software.
• Revisão conjunta: tem como objetivo manter um entendimento comum
entre os diversos interessados a respeito do produto, do processo ou do serviço.
As revisões são realizadas nos níveis de gerenciamento e técnico e são executadas durante toda a vigência do contrato.
• Auditoria: tem o propósito de prover uma avaliação, independentemente
dos produtos e processos, determinando ainda uma adequação do produto aos
requisitos, planos e contrato.
• Resolução de problemas: objetiva assegurar que todos os problemas levantados sejam resolvidos, definindo um processo para analisá-los e resolvê
-los, bem como identificar tendências de novas ocorrências.
2.5 Processos organizacionais
Os processos organizacionais tem como propósito estabelecer e implementar
uma estrutura constituída pelos processos de ciclo de vida e pelo pessoal envolvido no desenvolvimento do software. Estes processos geralmente são em-
capítulo 2
• 63
pregados fora do domínio de projetos e contratos específicos, no entanto, o
aprendizado a partir dos ensinamentos destes projetos e contratos muito contribuem para a melhoria da organização, por meio dos processos de Gerência,
Infra-estrutura, Melhoria e Treinamento (NOGUEIRA, 2003, p. 10).
O porte da empresa influencia no processo de gerência, sendo que existem
casos em que poderá existir uma pessoa responsável e em outras situações, o
próprio desenvolvedor pode assumir este papel de gerente. Note que, assumir
o papel não é o mesmo que ter a função. Assim, uma pessoa com a função de
desenvolvedor poderá assumir um papel de gerente, com responsabilidades
sobre o projeto, diferentemente de ser o gerente de projetos e executar práticas
pertinentes à esta função.
Sobre este assunto, Nogueira (2003, p. 10) comenta sobre a importância da
figura do gerente:
Para implementar os processos de infra-estrutura, melhoria e treinamento, é fundamental a figura de gerência que exercerá acompanhamento das necessidades do projeto e seus devidos ajustes quanto a estrutura necessária para um desenvolvimento
dentro dos requisitos do projeto, do dinamismo necessário para melhoria contínua do
processo e os devidos treinamentos para adequação das tecnologias especificadas
nos requisitos (NOGUEIRA, 2003, p. 10).
Segundo Barreto Júnior (2014, p. 14), os processos organizacionais implementam uma estrutura constituída de processo de ciclo de vida e pessoal associados, o que faz melhorar de forma contínua a estrutura da organização e os
seus processos.
Desta forma, os processos organizacionais garantem o funcionamento da
organização. São eles (WAZLAWICK, 2013, p. 40):
• Gerência: visa organizar e controlar a realização dos projetos, bem como
seu desempenho, abrangendo as atividades genéricas de gerenciamento. O gerente é o responsável pelo gerenciamento do produto, do projeto, das tarefas
de aquisição, fornecimento, desenvolvimento, operação, manutenção e apoio
e outras atividades relacionadas.
64 •
capítulo 2
• Infraestrutura: tem como objetivo manter um ambiente de trabalho adequado para qualquer outro processo, incluindo hardware, software, ferramentas, um conjunto de técnicas, padrões e recursos. São utilizados no desenvolvimento, operação e manutenção do software.
• Melhoria: visa permitir que os processos sejam continuamente adaptados, visando à otimização do trabalho, por meio de atividades de medição,
avaliação, controle e melhoria de processos do ciclo de vida de software. Estes
processos são aplicados pelo adquirente, fornecedor, desenvolvedor, operador,
mantenedor ou até mesmo por gerentes de outros processos.
• Treinamento ou recursos humanos: objetiva manter os recursos humanos capacitados para o melhor desempenho possível de suas funções. considerando ainda que outros processos são dependentes de pessoal qualificado.
2.6 Processos de Adaptação
Os processos de adaptação definem as atividades necessárias para adaptar a
norma ISO/IEC 12207 para ser aplicada na organização ou em projetos. De acordo com Nogueira (2003, p. 10), “a adaptação deve ser executada com base em
alguns fatores que diferenciam uma organização ou projeto de outros, dentre
os quais a estratégia de aquisição, modelos de ciclo de vida de projeto, características de sistemas e software e cultura organizacional”. Com a existência dos
processos de adaptação, a organização consegue adaptar a norma a qualquer
projeto desta ou em até mesmo ao modelo de ciclo de vida, cultura e técnica de
desenvolvimento nela empregada.
Ainda, segundo Nogueira (2003, p. 10), tem-se notado um movimento das
empresas para adoção de normas e modelos de maturidade do processo de desenvolvimento de software, buscando melhor produtividade e com ênfase em
promover uma reengenharia nos processos de desenvolvimento de software,
que até então eram basicamente vindos da experiência dos “desenvolvedores
de código” e não de gestores de projetos de grande expressão, e que assumem
papel de alta relevância nas empresas para se obter vantagens competitivas
num mercado global que busca a informação certa no momento certo.
Cada organização possui seus fatores que a fazes diferenciar das outras,
abrangendo diferentes estratégias de aquisição, modelos de ciclo de vida de
projeto, características de sistemas e a cultura organizacional. Neste contexto,
capítulo 2
• 65
pode-se mencionar ainda a norma ISO/IEC 15504, por tratar de qualidade e níveis de capacidade em processo de software. A norma 15504, também conhecida como SPICE, é considerada uma evolução da ISO/IEC 12207 (WAZLAWICK,
2013, p. 41).
ATIVIDADES
Vamos praticar um pouco os conceitos aprendidos. Responda às seguintes questões:
01. Na sua opinião, quais seriam as principais dificuldades para uma empresa ou organização implantar uma norma de qualidade de produtos de software? Justifique.
02. É possível desenvolver softwares sem qualquer tipo de controle de processos? Quais
seriam os impactos na qualidade deste software? Explique.
03. Toda empresa de desenvolvimento de softwares devem implantar uma norma de qualidade a ser seguida? Qual sua opinião sobre este ponto? Justifique.
04. Quais as principais normas de qualidade associadas à software utilizadas no Brasil. Explique.
05. Por que processos afetam a qualidade do software? Explique.
REFLEXÃO
Vimos neste capítulo que existem algumas normas de qualidade de produtos de software
que são fundamentais para as empresas seguirem padrões e oferecerem produtos de qualidade com vantagem competitiva.
Será que todas as empresas de desenvolvimento de software estão preparadas para
aplicarem normas de qualidade ou ainda aplicarem processos estruturados de acordo com
certos padrões? Podemos notar que há a necessidade de um envolvimento de toda a empresa para que estas normas e padrões sejam efetivadas dentro da organização, sendo necessário principalmente o apoio da alta gerência e das diferentes áreas funcionais.
Os processos fundamentais, de apoio, organizacionais e adaptativos são importantes
para que a empresa tenha uma estrutura sólida e madura em relação aos seus processos, e
se isto ocorrer, ela está garantindo o resultado final principal que é a produção de softwares
como produtos finais de qualidade.
66 •
capítulo 2
LEITURA
Além dos materiais e documentos das próprias normas de qualidade, há umam infinidade de
materiais e artigos relacionados à elas, bem como capítulos exclusivos em livros de Engenharia de Software em partes que tratam de qualidade de software e, naturalmente, nos livros
específicos deste assunto (Qualidade de Software).
Kiscianski, A.; Soares, M. S. Qualidade de Software. São Paulo: Novatec, 2007.
PRESSMAN, Roger S. Engenharia de Software, 7ª edição. São Paulo: McGraw-Hill, 2011.
WAZLAWICK, R. S. Engenharia de Software: Conceitos e Práticas, 1a Edição, Elsevier, 2013.
Qualidade de Software - artigo de José Barreto Júnior com uma excelente abordagem sintetizada
sobre qualidade de software e suas principais normas.
http://migre.me/oKTuZ
Qualidade de Software - outro artigo sobre qualidade de software, com uma abordagem mais técnica e
comparativa, de autoria de Bueno, C. F. S. e Campelo, G. B., ambos da UFPE.
http://migre.me/oKTyu
REFERÊNCIAS BIBLIOGRÁFICAS
BARRETO JÚNIOR, J.; Qualidade de Software. Disponível em: <http://www2.unemat.br/rhycardo/
download/qualidade_em_software.pdf>. Acessado em: 16 dez 2014.
ISO/IEC 12207, Information Technology - Software life cycle processes, 1995.
ISO/IEC 15504 Information Technology – Process Assessment – Part 1: Concepts ans
Vocabulary, 2003.
ISO 9000:2000, Sistemas de gestão da qualidade – Fundamentos e vocabulário, 2000.
NOGUEIRA, M. Qual a Importância da Adoção da Norma ISO 12207 Nas Empresas de
Desenvolvimento de Software?. X SIMPEP. 2003. Disponível em: <http://www2.dem.inpe.br/ijar/
ISO%2012207%20Artigo.pdf>. Acesso em: 18 dez 2014.
PRESSMAN, R. S. Engenharia de Software, 7ª edição. São Paulo: McGraw-Hill, 2011. 780p.
ROCHA, A. R. C.; MALDONADO, J. C.; WEBER K. C. Qualidade de Software: Teoria e Prática. 1a.
Edição. Editora Prentice Hall. São Paulo. 2001.
SEI, Standard CMMI Appraisal Method for Process Improvement (SCAMPI), Version 1.1: Method
Definition Document, CMU/SEI-2001-HB-001, 2001.
SILVA, B. C. C.; Processos e Ferramentas para o Desenvolvimento de Software Livre: Um estudo
de caso. Mestrado; UFES; 2006; 93p.
capítulo 2
• 67
SOFTEX, MPS.BR – Melhoria de Processo do Software Brasileiro: Guia Geral, Versão 1.0, 2005b.
Disponível em: <www.softex.br/mpsbr>. Acesso em: 12 jan 2015.
WAZLAWICK, R. S. Engenharia de Software: Conceitos e Práticas, 1ª Edição, Elsevier, 2013. 506p.
68 •
capítulo 2
3
Análise e
Especificação de
Requisitos
A análise e especificação de requisitos compõem uma etapa de grande importância e impacto no projeto de software. Veremos neste capítulo sobre alguns
pontos que envolvem as etapas de projeto, partindo desde a sua descrição, o
entendimento das necessidades envolvidas, levantamento e especificação de
requisitos até a definição do software propriamente dito.
Muitos projetos se iniciam sem a devida clareza de seus requisitos e muitas
vezes estes são levantados a partir das necessidades dos clientes. Estes clientes,
por sua vez, também nem sempre estão seguros de tudo o que querem para
o software ou sistema a ser desenvolvido e com isso muitos requisitos podem
surgir ou serem modificados ao longo do processo de desenvolvimento. A análise prévia, bem estruturada, o uso de técnicas adequadas para levantamento de
requisitos e a sua especificação, contribuem para o sucesso do projeto.
A especificação de requisitos determina e limita com maior segurança as
atividades que deverão ser cumpridas, já que é a partir destes requisitos que
foram levantados e agora especificados, validados pelo cliente, que se iniciará e
apoiará todo o processo de desenvolvimento do software.
A partir deste capítulo, poderemos aprofundar um pouco mais nos conceitos de requisitos de sistema e conseguiremos cada vez mais ampliar o nosso entendimento acerca da importância e de suas aplicações em projetos de
software.
Bons estudos!
OBJETIVOS
Neste capítulo teremos como objetivo:
• Abordar sobre a descrição do projeto do software.
• Discutir a importância e o entendimento das necessidades do projeto.
• Aprender sobre levantamento de requisitos.
• Aprender sobre a especificação dos requisitos.
• Discutir a definição do software.
70 •
capítulo 3
3.1 Introdução
O entendimento completo dos requisitos de software é um ponto fundamental
para o sucesso de um projeto de software e este certamente trará problemas ao
cliente/usuário se a sua análise de requisitos tiver sido mal realizada, independente da precisão com a qual um software venha a ser projetado e implementado (MAZZOLA, 2010, p. 63).
De acordo com Mazzola (2010, p. 63), a Análise de Requisitos “é uma tarefa
que envolve, antes de mais nada um trabalho de descoberta, refinamento, modelagem e especificação das necessidades e desejos relativos ao software que
deverá ser desenvolvido”. A tarefa de análise de requisitos envolve tanto o cliente como o desenvolvedor, que desempenharão um papel de grande importância, cabendo ao cliente a formulação (de modo concreto) das necessidades em
termos de funções e desempenho, enquanto que o desenvolvedor atua como
questionador, consultor e busca solucionar os problemas levantados.
A Análise de requisitos é uma etapa muito significativa no processo de desenvolvimento de um software, principalmente porque ela faz a associação entre os elementos que irão constituir o software e o projeto deste. Assim, ela permite que o engenheiro de sistemas especifique as necessidades do software em
termos de funcionalidades e de desempenho, estabeleça as interfaces do software com os outros elementos do sistema e também especificar as restrições
de projeto (MAZZOLA, 2010, p. 63). Além disto, ela ainda permite que engenheiros de software, analistas ou modeladores elaborem mais as necessidades básicas estabelecidas durante as tarefas de concepção, levantamento e negociação,
que fazem parte da engenharia de requisitos (PRESSMAN, 2011, p. 151).
3.2 Descrição do projeto do software
De acordo com Pressman (2011, p. 207), o projeto de software reside no núcleo
técnico da engenharia de software e é adotado em qualquer modelo de processos de software utilizado. O projeto é iniciado assim que os requisitos de software tiverem sido analisados e modelados, preparando e deixando apto para
avançar para a fase de construção (geração de código e testes).
Primeiramente, um projeto de software consiste na elaboração de uma proposta para a obtenção de um contrato a fim da realização do trabalho, incluindo a estimativa de custos e de cronograma (ZAMPAR e SOUZA, 2014).
capítulo 3
• 71
O projeto é o início de qualquer coisa ligada a engenharia, por exemplo, um engenheiro
civil não manda construir um prédio sem antes elaborar um planta, verificar o terreno
e outras coisas que denominamos de projeto, assim também é no desenvolvimento de
software você não pode construir nada sem antes projetar, mas como todo engenheiro,
antes mesmo de projetar alguma coisa deve-se ser desenvolvido um estudo para verificar se o desenvolver do projeto é viável, cria-se também mecanismos de rastreamento
deste projeto para ver se tudo o que ele projetou esta acontecendo conforme o previsto, isto na engenharia de software é chamado de Gerência de Projeto que é o primeiro
aspecto do projeto de software (FORCHESATTO, 2012, p. 12).
Qualidade é a palavra que define a importância do projeto de software, e é
na etapa de Projeto em que a qualidade é incorporada na engenharia de software. O projeto nos fornece representações de software que podem ser avaliadas
e analisadas em termos de qualidade. A única maneira em que podemos traduzir precisamente os requisitos dos interessados em um produto ou sistema de
software finalizado, é por meio de Projeto . O projeto de software serve como
base para todas as demais atividades de apoio e da engenharia de software que
seguem. Sem a existência de projeto, aumenta-se o risco de construir um sistema instável - um sistema que apresentará falhas quando forem feitas pequenas
alterações; um sistema com grande possibilidade de ser difícil de ser testado;
um sistema em que a qualidade qualidade não pode ser avaliada até uma fase
mais avançada do processo de software, quando o tempo é diminuto e muito
dinheiro já foi gasto (PRESSMAN, 2011, p. 208).
O projeto de software é um processo iterativo, com ciclos que se repetem
através do qual os requisitos são traduzidos em uma espécie de “planta” para
construir o software. Inicialmente, a planta representa uma visão geral (holística) do software. O projeto é representado em um alto nível de abstração - um
nível que pode ser associado diretamente ao objetivo específico do sistema e
aos requisitos mais detalhados de dados, funcionalidade e comportamento
(PRESSMAN, 2011, p. 209). À medida em que as iterações ocorrem, esta representação vai mudando mais para o baixo nível, tornando-se cada vez mais próximo de especificações que permitirão sua execução, do ponto de vista do desenvolvimento das atividades.
72 •
capítulo 3
Vale a pena salientar que o planejamento e o gerenciamento de projetos de
software abrangem produto, processo e pessoas que vão estar envolvidas no
projeto (ZAMPAR e SOUZA, 2014). As pessoas envolvidas e interessadas no projeto, como um todo, também são chamadas de stakeholders.
Stakeholder: é uma palavra muito usada em várias áreas como administração, projetos
e obviamente em software. Ela se refere a uma pessoa ou a um grupo interessado em
um determinado assunto e que deve estar de acordo em comum com o que está sendo
proposto. Normalmente o stakeholder é a parte que financia o projeto financeiramente
e responde na empresa por ele.
Zampar e Souza (2014) destacam que o gerenciamento de projetos de software é fundamental na Engenharia de Software e que quando o gerenciamento é realizado de forma incorreta resulta em falha, acarretando atraso, custo
elevado e requisitos mal especificados. Ou seja, um projeto de Engenharia de
Software deve estar estruturado em um planejamento adequado, para que se
possa gerenciar de forma condizente a sua realização.
A necessidade de gerenciamento é um fator claro na distinção entre o desenvolvimento profissional de software e a programação em nível amador. De
acordo com Sommerville (2006, p. 60), “o gerenciamento de projetos de software é necessário porque a engenharia de software profissional está sempre
sujeita a restrições de orçamento e de prazo”. A organização que desenvolve o
software é que estabelece estas restrições e o trabalho do gerente de projeto
de software deve garantir e assegurar que o projeto de software cumpra todas
essas restrições e entregar um produto de software que contribua para as metas
da empresa. Segundo Zampar e Souza (2004), o gerente de software tem a função de administrar os cronogramas e planos, para que não ocorram imprevistos no prazo e no orçamento do projeto.
Os gerentes de software executam o mesmo tipo de trabalho que outros gerentes de projeto de engenharia. No entanto, a engenharia de software difere de
outros tipos de engenharia em uma série de pontos e modos que podem tomar
o gerenciamento de software particularmente difícil. Sommerville (2006, p. 60)
cita algumas dessas diferenças:
capítulo 3
• 73
1.
O produto é intangível - O gerente do projeto de construção de um navio ou de
um projeto de engenharia civil pode ver o produto sendo desenvolvido. Se há um atraso
na programação, o efeito no produto é visível. Partes da estrutura estão obviamente
inacabadas. O software é intangível; não pode ser visto ou tocado. Os gerentes de projeto de software não podem ver o progresso, eles dependem de outras pessoas para
produzir a documentação necessária, a fim de examinar o progresso.
2.
Não há processo de software-padrão - Não temos uma compreensão clara
das relações entre o processo de software e os tipos de produto. Nas disciplinas de
engenharia com longo histórico, o processo é experimentado e testado. O processo de
engenharia para determinados tipos de sistema, como uma ponte, é bem compreendido. Nossa compreensão do processo ele software se desenvolveu significativamente
nos últimos anos. Contudo, ainda não podemos prever com certeza quando um processo de software específico poderá causar problemas de desenvolvimento.
3.
Grandes projetos de software são, frequentemente, projetos únicos - Os
grandes projetos de software são normalmente diferentes de projetos anteriores. Os
gerentes, portanto, na verdade, têm ampla experiência anterior, que pode ser utilizada
para reduzir a incerteza nos planos. Consequentemente, é mais difícil prever problemas.
Além disso, as rápidas mudanças tecnológicas em computadores e nas comunicações
desatualizam as experiências prévias. As lições aprendidas com essas experiências
podem não ser transferíveis para novos projetos.
Segundo Sommerville (2006, p. 61), é impossível dar uma descrição do trabalho-padrão de um gerente de software, pois o trabalho varia muito, dependendo da organização e do produto a ser desenvolvido. No entanto, a maioria
dos gerentes assume a responsabilidade, em algum estágio, por algumas das
seguintes atividades ou por todas elas, como:
•
•
•
•
•
elaboração de propostas
planejamento e programação de projetos
custo do projeto
monitoramento e revisões de projetos seleção e avaliação de pessoal
elaboração de relatórios e apresentações
No planejamento de projeto são descritos as atividades que vão ser executadas, os marcos de referências a serem atingidos e os produtos gerados por
um projeto. É elaborado um plano para controlar o desenvolvimento e nele são
colocados os objetivos do projeto (ZAMPAR e SOUZA, 2014).
74 •
capítulo 3
A gestão de projetos define alguns pontos importantes, como quem, o que,
quando e o porquê dos projetos. Ela ainda faz uso de processos e ferramentas
de gestão os quais servem para ajudar o gerente de projetos e equipe a organizar, documentar, rastrear e relatar as atividades e progresso de um projeto.
Dentro desse contexto, o plano de projeto compreende (SILVA FILHO, 2015):
• Escopo de projeto bem definido;
• Um roadmap dos artefatos a serem entregues;
• Documentação de papéis e responsabilidades dos participantes;
• Uma linguagem ‘comum’ para comunicação das atividades do projeto,
bem como a rastreabilidade e relatórios dessas atividades;
• Mecanismos de resolução de conflitos e mitigação ou atenuação de riscos.
3.2.1 Plano de Projeto
De acordo com Silva Filho (2015), o plano de projeto é um dos documentos produzidos na condução de um projeto, funcionando como :
• Um ‘integrador’ entre diversas ações do projeto;
• Mecanismo de comunicação para os stakeholders;
• Captura e documenta a evolução do projeto à medida que ele vai sendo
executado e novas informações vão sendo disponibilizadas.
O gerenciamento da execução do plano de projeto tem o objetivo de realizar
o trabalho definido na descrição do escopo do projeto. Durante toda a execução
do plano de projeto, o gerente de projeto se baseia nesse documento para tomar ações corretivas visando alcançar o conjunto de metas planejadas em concordância com o que foi definido no plano. Nesse sentido, o plano de projeto
deve conter (SILVA FILHO, 2015):
•
•
•
•
•
Como os processos de gerência serão utilizados;
Como as mudanças serão monitoradas e controladas;
Milestones com datas de pontos estratégicos para avaliação do projeto;
Baselines para cronograma, custo e qualidade;
Calendário para recursos utilizados;
capítulo 3
• 75
• Mecanismos de comunicação para os stakeholders;
• Definição de revisões para resolução de pontos em aberto e/ou pendentes;
• Planos de outras áreas de conhecimento (como, comunicação e qualidade).
O plano de projeto é determinante para o sucesso de um projeto, pois ele
identifica os artefatos que deverão ser entregues e quando e, igualmente importante, informa os recursos necessários para realizar as entregas (de artefatos)
indicando as dependências existentes para essas entregas (SILVA FILHO, 2015).
Conjunto de tarefas genéricas para projeto
1.
Examinar o modelo do domínio de informação e projetar estruturas de dados
apropriadas para objetos de dados e seus atributos.
2.
Usar o modelo de análise, selecionar um estilo de arquitetura apropriada ao sof-
tware.
3.
Dividir o modelo de análise em subsistemas de projeto e alocá-los na arquitetura:
• Certificar-se de que cada subsistema seja funcionalmente coeso.
• Projetar interfaces de subsistemas.
• Alocar classes ou funções de análise para cada subsistema.
4.
Criar um conjunto de classes ou componentes de projeto:
• Traduzir a descrição de classes de análise em uma classe de projeto.
• Verificar cada classe de projeto em relação aos critérios de projeto; considerar
questões de herança.
• Definir métodos e mensagens associadas a cada classe de projeto.
• Avaliar e selecionar padrões de projeto para uma classe ou um subsistema de
projeto.
(PRESSMAN, 2011, p. 212)
3.3 O entendimento das necessidades do
projeto
No levantamento de requisitos deve-se atentar para quatro entendimentos fundamentais que deve-se levar em consideração, segundo Medeiros (2015):
76 •
capítulo 3
1. Entendimento do Domínio da Aplicação onde entende-se, de uma maneira geral, a área na qual o sistema será aplicado;
2. Entendimento do Problema onde entende-se os detalhes do problema
específico a ser resolvido com o auxílio do sistema a ser desenvolvido;
3. Entendimento do Negócio onde busca o entendimento de como o sistema afetará a organização e como contribuirá para que os objetivos do negócio e
os objetivos gerais da organização sejam atingidos; e por fim o
4. Entendimento das Necessidades e das Restrições dos Interessados
onde entende-se as demandas de apoio para a realização do trabalho de cada
um dos interessados no sistema, entende-se os processos de trabalho a serem
apoiados pelo sistema e o papel de eventuais sistemas existentes na execução e
condução dos processos de trabalho.
Mello (2005) aborda que o entendimento das necessidades do cliente podem ser fornecidas por processos adequados da engenharia de requisitos, que
trata de negociar uma solução possível, descrever os requisitos de forma clara e
concisa e gerenciar as mudanças que ocorrem ao longo do ciclo de vida do software. O processo de engenharia de requisitos pode ser descrito como um processo interativo e continuado de entendimento das necessidades do usuário
e tradução destas necessidades em um futuro produto de software. De acordo
com Mello (2005), este processo pode ser dividido em cinco atividades:
1.
Levantamento (ou elicitação) de requisitos, que envolve a coleta organizada
dos requisitos de negócio;
2.
Análise e negociação de requisitos, que procura catalogar e classificar os re-
quisitos em subconjuntos, negociar prazos de liberações de acordo com a importância
dos requisitos para o cliente;
3.
Especificação de requisitos, que documenta a funcionalidade do software, me-
tas de qualidade e restrições que irão servir de base para o processo de desenvolvimento de software;
4.
Validação de requisitos, que verifica se todos os requisitos do sistema foram
declarados de forma não ambígua e em sintonia com as necessidades do cliente; e,
5.
Gestão de requisitos, que procura identificar, controlar e rastrear requisitos e
modificações de requisitos a qualquer momento no ciclo de vida do software.
Destas atividades, vamos aprofundar um pouco mais nas que envolvem o
levantamento de requisitos e a especificação destes.
capítulo 3
• 77
3.4 Levantamento de Requisitos
O levantamento de requisitos (também chamado elicitação de requisitos) envolve uma das principais partes do processo que terá como resultado o desenvolvimento de um software, pois é esta a atividade responsável por entender
aquilo que o cliente deseja ou necessita, ou ainda, aquilo que o cliente consegue enxergar como necessidade para o seu negócio.
De acordo com Pressman (2011, p. 133), no levantamento de requisitos há
uma combinação de elementos que abrangem a resolução de problemas, elaboração, negociação e especificação. Para estimular e encorajar uma abordagem colaborativa e orientada às equipes em relação ao levantamento de requisitos, os interessados trabalham juntos para identificar o problema, propondo
elementos da solução, negociando diferentes abordagens e especificando um
conjunto preliminar de requisitos da solução.
Medeiros (2015) aponta que o levantamento de requisitos é a fase inicial do
processo de engenharia de requisitos, sendo que nessa atividade levam-se em
conta as necessidades dos usuários e clientes, informações de domínio, sistemas já existentes na organização, regulamentos vigentes, leis, etc, com o objetivo de entender a organização como um todo, seus processos, necessidades,
possibilidades de melhorias e as restrições existentes, preocupando-se na descoberta dos requisitos.
Existem diversas técnicas que podem ser utilizadas para o levantamento de
requisitos, como por exemplo: entrevistas; questionários; observação do ambiente e dos indivíduos nas suas tarefas cotidianas na organização; análise de
documentos existentes na organização; cenário de interação entre o usuário
final e o sistema onde o usuário pode simular a sua interação com o sistema explicando para o analista o que ele está fazendo e de que informações ele precisa
para realizar a tarefa; prototipagem onde uma versão preliminar do sistema,
muitas vezes não operacional e descartável, é apresentada ao usuário para capturar informações específicas sobre seus requisitos de informação, observação
reações; dinâmica de grupo; e diversas outras técnicas que também podem ser
empregadas (MEDEIROS, 2015).
A figura 3.1 apresenta um modelo genérico do processo de levantamento e
análise. É importante ressaltar que cada organização terá sua própria versão ou
uma versão mais definida desse modelo geral, dependendo de fatores locais,
como a perícia da equipe, o tipo de sistema em desenvolvimento, os padrões
utilizados, entre outros (SOMMERVILLE, 2006, 105).
78 •
capítulo 3
As atividades do processo de levantamento de requisitos, segundo
Sommerville (2006, p. 105) são:
• Compreensão do domínio - Os analistas devem desenvolver sua compreensão do
domínio da aplicação. Por exemplo. se for exigido um sistema para um supermercado,
o analista deverá descobrir como operam os supermercados.
• Coleta de requisitos - É o processo de interagir com os stakeholders do sistema
para descobrir seus requisitos. Obviamente, a compreensão do domínio se desenvolve
mais durante essa atividade.
• Classificação - Essa atividade considera o conjunto não estruturado dos requisitos
e os organiza em grupos coerentes.
• Resolução de conflitos - Quando múltiplos stakeholders estão envolvidos, os requisitos apresentarão conflitos. Essa atividade se ocupa de encontrar e solucionar esses
conflitos.
• Definição das prioridades - Em qualquer conjunto de requisitos, alguns serão mais
importantes do que outros. Esse estágio envolve a interação com os stakeholders, para
descobrir os requisitos mais importantes.
• Verificação de requisitos - Os requisitos são verificados, a fim de se descobrir se
eles são completos e consistentes e se estão em concordância com o que os stakeholders realmente desejam do sistema.
Especificações
dos requisitos
Validação dos
requisitos
Início do
processo
Compreensão
do domínio
Priorização
Coleta de
requisitos
Resolução de
conflitos
Documento de
requisitos
Classficação
Figura 3.1 – Processo de levantamento e análise de requisitos. Fonte: Sommerville (2006
p. 106).
capítulo 3
• 79
O levantamento e a análise de requisitos é um processo iterativo, com
feedback contínuo de cada atividade para as outras, como pode ser observado
na figura X. O ciclo começa com a compreensão do domínio e termina com a
verificação dos requisitos. Com sito, a compreensão dos requisitos pelo analista
melhora a cada fase do ciclo.
Diversos problemas podem ocorrer durante a atividade de levantamento de
requisitos, sendo que os principais identificados, de acordo com Santos (2004,
p. 24), são:
• O conhecimento do domínio do negócio encontra-se espalhado por diversos meios,
tais como: livros, sistemas existentes, manuais de operação, envolvidos, etc.;
• O tempo escasso e a disponibilidade dos envolvidos;
• Fatores políticos e organizacionais, podendo não ser muito clara sua existência aos
envolvidos;
• Os envolvidos não sabem exatamente o que fazem, o que precisam e o que querem
que seja desenvolvido.
Outro ponto a ser considerado, conforme ressalta Santos (2004, p. 24), além
dos itens dos principais problemas, citados acima, há, principalmente no
Brasil, a instabilidade política e social que faz com que os requisitos sejam freqüentemente alterados, de forma muito dinâmica.
Como vimos, existem várias técnicas para realizar o levantamento e análise
dos requisitos, como entrevistas, leitura de documentos, questionários, análise
de protocolos, participação dos usuários, reuso de requisitos, prototipagem,
levantamento orientado a ponto de vista, cenários, observação e análises sociais ou etnografia. Veremos três técnicas relevantes e eficientes:
3.4.1 Levantamento orientado a ponto de vista
A concepção e utilização de um sistema é composto por vários stakeholders,
sendo que cada um tem uma visão do sistema. A visão de um conjunto comum
de stakeholders é chamada de ponto de vista.
Esta abordagem é conhecida como análise de multiperspectivas, e é importante, pois não há uma única maneira ou perspectiva de analisar um sistema e
80 •
capítulo 3
seus requisitos. Estes requisitos podem ser vistos de maneiras diferentes por
stakeholders diferentes.
Por exemplo, se considerar um sistema de biblioteca de forma ampla, podemos identificar facilmente pelo menos cinco pontos de vista:
1. Ponto de vista dos gestores: preocupado Preocupado com os serviços
prestados pela biblioteca e seu impacto nos resultados;
2. Ponto de vista do atendente: preocupado na maneira de utilização do
sistema para atender os clientes
3. Ponto de vista do usuário: preocupado em buscas eficientes e acesso ao
sistema via Internet;
4. Ponto de vista do Sindicato: preocupado nos efeitos da implantação do
sistema sobre a alteração no nível de ocupação e deveres, assim como o oferecimento de novas vagas, ou cortes dos trabalhadores;
5. Ponto de vista das leis de direitos autorais: preocupado com a reprodução, digitalização e disponibilização do conteúdo dos livros pelo sistema.
Os pontos de vista podem ser encarados de três formas diferentes, como fontes ou drenos de dados, frameworks de representação e receptores de serviços.
Quando os pontos de vista são responsáveis por produzir ou consumir dados dizemos que eles são fontes ou drenos de dados. Neste caso a análise envolve verificar quais dados são produzidos e consumidos e que suposições sobre
as fontes de dados são válidas.
Os pontos de vista que representam tipos específicos de modelos de sistema são conhecidos como Frameworks de Representação. Eles podem ser comparados entre si para saber quais são os requisitos existentes usando uma única representação.
Os pontos de vistas que são externos ao sistema e recebem seus serviços são
conhecidos como receptores de serviços.
Nesta técnica utilizamos o método VORD (Viewpoint Oriented Requisites
Definition) para obtenção e análise, a Figura 3.2 representa um esquema deste
método.
capítulo 3
• 81
Identificação dos
pontos de
Estruturação dos
vista
pontos de
Documentação dos
vista
pontos de
Mapeamento dos
vista
PV para o
sistema
Figura 3.2 – Método VORD.
O processo começa com a Identificação dos pontos de vista, os quais recebem serviços do sistema, assim são identificados os serviços fornecidos a cada
um.
Após isso, inicia-se a estruturação dos pontos de vista agrupando-os
hierarquicamente.
Serviços comuns são fornecidos em níveis mais altos na hierarquia e herdados por ponto de vista de nível inferior. Feita a estruturação é necessário
revisar a documentação, refinando a descrição dos pontos de vista e serviços
identificados.
Finalizada a documentação, deve-se transformar a análise em um projeto
orientado a objetos, mapeando os pontos de vista no sistema planejado.
Durante a identificação do ponto de vista utilizam-se formulários padrões
para o ponto de vista para o serviço, nas tabelas 3.3 e 3.4 são apresentados no
modelo.
Projeto orientado a objetos (POO) é um tipo de projeto de sistema que leva em consideração a tecnologia de orientação a objetos.
Por ora, a orientação a objetos é um paradigma de análise, projeto e programação
de sistemas de software baseado na composição e interação entre diversas unidades
de software chamadas de objetos.
82 •
capítulo 3
MODELO DE PONTO DE VISTA
REFERÊNCIA
Nome do ponto de vista.
ATRIBUTOS
Atributos que fornecem informações sobre o ponto de vista.
EVENTOS
Referência para um conjunto de cenários de eventos descrevendo
como o sistema reage a eventos do ponto de vista.
SERVIÇOS
Referência a um conjunto de descrições de serviço.
SUB_PVS
Nomes dos sub-pontos de vista.
MODELO DE SERVIÇO
REFERÊNCIA
Nome do serviço.
RAZÕES
Razões pelas quais o serviço é fornecido.
ESPECIFICAÇÃO
Referência para uma lista de especificações de serviço, que podem
ser expressas em diversas notações.
PVS
Nomes de pontos de vista que recebem o serviço.
REQUISITOS
Requisitos não funcionais que restringem o serviço.
FORNECEDOR
Referência a uma lista de objetos do sistema que fornecem os
serviços.
Tabelas 3.3 e 3.4 – Modelo de formulários.
A identificação dos pontos de vista é provavelmente o estágio mais difícil.
Aqui devem ser identificados todos os serviços e ponto de vista do sistema. Uma
boa abordagem para isto realização de um brainstorming (do inglês - tempestade de ideias). Um brainstorming nada mais é do que uma reunião em que todos
falam acerca de um assunto ou, no caso no sistema a ser desenvolvido, com o
objetivo de se obter ideias, ou o caso, requisitos.
Uma pessoa fica então responsável por anotar os serviços e pontos de vista,
referenciando as cores, por exemplo, preto para serviço precisa parar. De vista,
Picada serviço deve ser alocado um ponto de vista.
Com todos os serviços e pontos de vista identificados e separados, deve-se
então agrupá-los e definir as entradas de cada um, organizando-os em hierarquia de herança. Depois de organizados detalham-se cada um utilizando-se as
tabelas apresentadas anteriormente.
capítulo 3
• 83
3.4.2 Cenários
Em algumas situações é mais fácil reunir analistas e usuários para simular situações reais e necessárias no futuro sistema do que tentar estabelecer as necessidades por meio de outros métodos mais abstratos. Para isto são usados os
cenários.
Os cenários servem para revelar detalhes que não foram percebidos e adicioná-los aos esboços dos requisitos. O estabelecimento dos cenários pode ser
feito informalmente com os analistas trabalhando com os usuários principais
ou fomentadores do projeto a fim de identificar os usuários operacionais e captar detalhes, ou outras formas.
Os cenários são muito usados nos métodos ágeis de desenvolvimento. Por
permitir um ambiente de simulação e ser simples, os envolvidos compreendem
facilmente o objetivo das sessões e atividades e conseguem assim avaliar, criticar e fazer sugestões tendo como consequência a reorganização dos componentes e tarefas do sistema. O interessante é que os participantes podem ter conhecimentos e formações heterogêneas contribuindo assim para um ambiente
propício de elicitação dos requisitos.
Desta forma, o cenário permite que situação futuras possam ser previstas
pelos analistas e usuários levando a ações para tratá-las no sistema e nos processos envolvidos.
Cenários podem ser descritos de duas formas, como Cenários de Eventos e
como Casos de Usos.
Cenários de eventos podem ser usados para descrever como um sistema responde à ocorrência de um algum evento específico, tal como “iniciar uma transação”. Cada evento distinto é mostrado em um cenário de evento separado.
Segundo Vord, há uma convenção diagramática para cenários de eventos.
Os cenários de eventos devem conter os dados fornecidos e saídas, as informações de controle, o processamento das exceções e o próximo evento esperado.
Nele os dados de entrada são representados por Elipses. As informações de
controle são setas que entram no topo da caixa, os dados saem pelo lado direito
da caixa. Exceções são mostradas na base da caixa e o nome do próximo é representado pela caixa com borda espessa. Assim mostra a figura 3.4.
84 •
capítulo 3
Cartão
Presente
Cartão
PIN
Cartão
Válido
Número da
conta
Número da
conta
Tempo esgotado
Devolver cartão
Cartão inválido
Devolver cartão
Cartão roubado
Validar
usuário
PIN incorreto
Usuário OK
Número da
conta
Selecionar
serviço
Informar PIN
PIN incorreto
Devolver cartão
Reter cartão
Figura 3.4 – Diagrama de cenário de eventos.
A maioria dos métodos não inclui formas para descrever exceções. No exemplo acima as exceções são: tempo-esgotado, cliente não fornece PIN, cartão inválido e cartão roubado.
Casos de uso é uma alternativa mais estruturada do uso de cenários. Um
caso de uso representa uma unidade discreta da interação entre um usuário
(humano ou máquina) e o sistema. É importante notar que não descreve como
o software deverá ser construído, mas sim como ele deverá se comportar quando estiver pronto.
Casos de uso é uma técnica do padrão UML que será estudado no capítulo
5, ele baseia-se em cenários, identifica os atores em interação e descreve como
a interação ocorrerá. Um conjunto de casos de uso deveria descrever todas as
possíveis interações com o sistema.
A UML (Unified Modeling Language) não é uma metodologia de desenvolvimento e
está bastante relacionada com o paradigma de orientação a objetos que será visto nas
próximas unidades também.
A UML permite que desenvolvedores visualizem os produtos de seus trabalhos em
diagramas padronizados por meio de uma notação gráfica. É uma notação independente de processos de software.
capítulo 3
• 85
A figura 3.5 apresenta um diagrama com um caso de uso de um sistema de
biblioteca onde o usuário da biblioteca pode fazer o empréstimo do livro e administrar sua conta. O pessoal da biblioteca pode alterar cadastro e cadastrar
usuário e administrar o catálogo de livros. E o Fornecedor pode fornecer e cadastrar novos livros no catálogo de livros.
Usuário da
biblioteca
Serviços de empréstimo
Administração de usuário
Fornecedor
Pessoal da
biblioteca
Serviços de catálogo
Figura 3.5 – Casos de uso.
3.4.3 Etnografia
Etnografia consiste no estudo por vivência direta da realidade em que se insere.
Permite analisar o componente social e organizacional das tarefas, tornandose extremamente útil nas dificuldades do levantamento de requisitos.
Na prática um cientista social, externo à organização, passa algum tempo
analisando as atividades das pessoas e os processos da organização, sem que
estas necessitem lhe explicar o seu trabalho. Este estudo geralmente mostra
com mais riqueza de detalhes o trabalho e os processos, em comparação com
as descrições e modelos de sistema que por ventura possam existir.
O estudo etnográfico mostra os requisitos derivados da maneira como as
pessoas realmente trabalham em vez da maneira como as definições sugerem
que elas deveriam trabalhar. Mostra também requisitos que são derivados da
cooperação e conhecimento das atividades de outras pessoas.
86 •
capítulo 3
Entretanto ele não é uma técnica completa, e sempre deve ser usada com
outra técnica de elicitação.
3.5 A especificação dos requisitos
A especificação é, também outra fase importante, pois é por meio dela que tanto o desenvolvedor quanto o cliente terão uma forma de documentar o que foi
acordado nas fases anteriores.
De modo objetivo, a especificação é a descrição sistemática e abstrata do
que o software deve fazer, a partir daquilo que foi analisado. Ela apresenta a
solução de como os problemas levantados na análise serão resolvidos pelo software. Tem como objetivo descrever de maneira sistemática quais as propriedades funcionais são necessárias para resolver o problema do domínio. Além dela
servir para este detalhamento da funcionalidade que deverá ser implementada,
a especificação é também a forma de comunicação sistemática entre analistas
e projetistas do software (LEITE, 2000b).
Os softwares e sistemas computacionais, em sua maioria, são desenvolvidos
para sanarem uma necessidade existente no mundo real, levantadas e trazidas
pelo cliente ou por aqueles que compreendem o domínio do negócio em que
o problema a ser solucionado está inserido. Desta forma, modelar uma parte
do mundo real, bem como o domínio de aplicação em que este software estará inserido, é uma atividade extremamente importante para se compreender a
necessidade e a importância do sistema a ser construído e definir os requisitos
que tornam o sistema útil.
Neste contexto, é imprescindível conhecermos o significado de requisitos.
De acordo com Leite (2000b), “requisitos são objetivos ou restrições estabelecidas por clientes e usuários do sistema que definem as diversas propriedades do sistema. Os requisitos de software são, obviamente, aqueles dentre os
requisitos de sistema que dizem respeito a propriedades do software”. Sendo
assim, um conjunto de requisitos pode ser definido como uma condição ou
capacidade necessária que o software deve possuir para que o usuário possa
resolver um problema ou atingir um objetivo ou para atender as necessidades
ou restrições da organização ou dos outros componentes do sistema (LEITE,
2000b).
capítulo 3
• 87
Sommerville (2006, p. 82) traz ainda algumas outras definições sobre requisitos, como os requisitos do usuário e requisitos de sistema, além de apresentar sua
definição sobre especificação de projeto de software, como pode ser visto abaixo:
1.
Requisitos do usuário são declarações, em linguagem natural e também em
diagramas, sobre as funções que o sistema deve fornecer e as restrições sob as quais
deve operar.
2.
Requisitos de sistema estabelecem detalhadamente as funções e as restri-
ções de sistema. O documento de requisitos de sistema, algumas vezes chamado de
especificação funcional, deve ser preciso. Ele pode servir como um contrato entre o
comprador do sistema e o desenvolvedor do software.
3.
Especificação de projeto de software é uma descrição abstrata do projeto
de software que é uma base para o projeto e a implementação mais detalhados. Essa
especificação acrescenta mais detalhes à especificação de requisitos do sistema.
(SOMMERVILLE, 2006, p. 82)
Estes dois tipos de requisitos apresentam diferentes níveis de especificação
de sistema. Isto é muito útil porque comunicam informações sobre o sistema
para diferentes tipos de leitores (usuários e desenvolvedores). A Tabela 3.5 ilustra a diferença entre os requisitos de usuários e os de sistemas, mostrando como
um requisito de usuário pode ser expandido em diversos requisitos de sistema,
já que estes trazem um maior detalhamento das funções e restrições de sistema.
Os requisitos do usuário são escritos para gerentes do cliente e dos fornecedores que, geralmente, não possuem um conhecimento técnico detalhado do
sistema, como pode ser visto na figura 7. Por outro lado, a especificação de requisitos de sistema deve ser destinada aos profissionais técnicos de nível sênior e
os gerentes de projeto envolvidos. Novamente, ela será utilizada pelo gerente do
cliente e do fornecedor. Nada impede que os usuários finais de sistemas possam
ler ambos os documentos. Assim, a especificação de projeto de software é um
documento orientado à implementação. Ele deve ser escrito para os engenheiros
de software que desenvolverão o sistema (SOMMERVILLE, 2006, p. 82).
Existem outros tipos de requisitos utilizados dentro da Engenharia de
Requisitos, relacionados com taxonomia das qualidades do software. Esta
identificação do tipo de requisito auxilia no tratamento específico a ele ofertado, de forma a garantir coesão e agilidade na tradução tanto para quando da
88 •
capítulo 3
especificação de requisitos (FAGUNDES,2011, p. 9). Estes requisitos podem ser
divididos em requisitos funcionais e requisitos não funcionais.
Definição dos requisitos do usuário
1.
O software deve permitir acesso a arquivos remotamente pela internet.
Especificação dos requisitos de sistema
1.
O usuário deve ter a possibilidade de definir o tipo dos arquivos que serão aces-
sados.
2.
Cada tipo de arquivo pode ter uma ferramenta online associada que pode ser
aplicada a ele para abrí-lo.
3.
Poderá existir um ícone específico para cada tipo de arquivo.
4.
Devem ser fornecidos recursos para o ícone que representa um arquivo, a ser
definido pelo usuário.
5.
Quando um usuário seleciona um ícone que representa um arquivo, o efeito dessa
seleção é aplicar a ferramenta associada com o tipo de arquivo ao arquivo representado
pelo ícone selecionado.
Tabela 3.5 – Requisitos do usuário e do Sistema. Fonte: Adaptado de Sommerville (2006, p. 83).
Requisitos
do usuário
Gerentes de clientes
Usuários finais de sistemas
Engenheiros do cliente
Gerentes do fornecedor
Arquitetos de sistemas
Requisitos
do sistema
Usuários finais de sistemas
Engenheiros do cliente
Gerentes do fornecedor
Arquitetos de sistemas
Desenvolvedores de software
Especificação
de projeto
de software
Usuários finais de sistemas
Engenheiros do cliente
Gerentes do fornecedor
Arquitetos de sistemas
Desenvolvedores de software
Figura 3.6 – Leitores de diferentes tipos de especificações. Fonte: SOMMERVILLE (2006,
p. 83).
capítulo 3
• 89
3.5.1 Requisitos funcionais e não funcionais
Segundo Sommerville (2006, p. 83), os requisitos de sistema de software são,
freqüentemente, classificados como funcionais ou não-funcionais ou como requisitos de domínio:
• Requisitos funcionais: São declarações de funções que o sistema deve fornecer,
como o sistema deve reagir a entradas específicas e como deve se comportar em
determinadas situações. Em alguns casos, os requisitos funcionais podem também explicitamente declarar o que o sistema não deve fazer.
• Requisitos não-funcionais: São restrições sobre os serviços ou as funções oferecidos pelo Sistema. Entre ele: destacam-se restrições de tempo, restrições sobre o
processo de desenvolvimento, padrões, entre outros.
• Requisitos de domínio: São requisitos que se originam do domínio de aplicação do
sistema e que refletem características desse domínio. Podem ser requisitos funcionais
ou não funcionais.
(SOMMERVILLE, 2006, p. 83)
Sommerville (2006, p. 84) ainda afirma que a distinção entre esses diferentes tipos de requisitos não é tão clara como sugerem essas definições simples.
Para exemplificar, pode-se imaginar um requisito de usuário relacionado à
proteção. Inicialmente, parece ser um requisito não funcional. No entanto,
quando desenvolvido com mais detalhes, pode levar a outros requisitos que
são claramente funcionais, como a necessidade de incluir recursos de autorização de usuários no sistema. Assim, embora seja útil classificar os requisitos de
maneira quando os discutimos, devemos lembrar que essa é, na verdade, uma
distinção artificial.
3.5.1.1 Requisitos funcionais
Os requisitos funcionais definem uma função que deverá existir no sistema,
descrevendo a funcionalidade desejada ou os serviços que se espera que o sistema forneça. O termo função é usado no sentido genérico de operação que
pode ser realizada pelo sistema, seja por meio de comandos dos usuários ou
seja pela ocorrência de eventos internos ou externos ao sistema (LEITE, 2000b).
90 •
capítulo 3
Eles dependem do tipo de software que está sendo desenvolvido, dos usuários
de software que se espera verificar e do tipo de sistema que está sendo desenvolvido. Quando expressos como requisitos de usuário, eles são normalmente
descritos de um modo bastante geral, mas os requisitos funcionais de sistema
descrevem a função de sistema detalhadamente, suas entradas e saídas, exceções etc (SOMMERVILLE, 2006, p. 84).
Aqui podemos citar alguns exemplos de requisitos funcionais:
• “o sistema deve permitir calcular a receita diária, semanal, mensal, trimestral, semestral e anual das compras efetuadas durante estes períodos.”
• “o software deverá realizar notificações por email a cada compra efetuada.”
• “os participantes do curso poderão emitir seus certificados online em formato PDF.”
• “deverá existir um bloco no alto e à direta da tela para o usuário efetuar
login no sistema.”
É importante salientar que o a especificação de um requisito funcional tem
como objetivo determinar o que se espera que o software ou sistema faça, sem
se preocupar neste momento em como ele irá fazer esta ação ou solicitação. De
acordo com Leite (2000b), é importante diferenciar a atividade de especificar
requisitos da atividade de especificação que ocorre durante a fase de desenho
(design) do software, pois nesta fase deve-se tomar a decisão de quais serão as
funções que o sistema efetivamente terá para satisfazer àquilo que os usuários
desejam. Outro ponto que merece ser lembrado é que estes requisitos funcionais terão diferentes níveis de detalhamento, de acordo com a sua destinação,
como descritos no documento de especificação entre requisitos de usuários e
requisitos de sistema.
3.5.1.2 Requisitos não-funcionais
Requisitos não-funcionais estão relacionados ao uso do sistema e quanto às
qualidades globais de um software, como manutenibilidade, confiabilidade,
usabilidade, desempenho, segurança, disponibilidade, custos e várias outras
como também as tecnologias envolvidas. Normalmente estes requisitos são
descritos de maneira informal, podendo ainda ser controversos (por exemplo,
o gerente quer segurança mas os usuários querem facilidade de uso) e difíceis
de validar (LEITE, 2000b).
capítulo 3
• 91
Alguns exemplos de requisitos não-funcionais podem ser vistos na tabela 3.6:
ID
RNF01
RNF02
RNF03
RNF04
RNF05
RNF06
REQUISITOS NÃO-FUNCIONAIS
TIPO
Não poderão ocorrer perdas de informações
Segurança
Visitantes anônimos não poderão ter acesso à Extranet
Segurança
Um perfil de usuários pode ter mais de um tipo de permissão
Segurança
O sistema deverá comportar com velocidade satisfatória
Desempenho
O sistema deverá ter alta disponibilidade
Confiabilidade
O sistema deverá ser executado em qualquer navegador
Usabilidade
Tabela 3.6 – Requisitos não-funcionais.
Leite (2000b) faz uma importante observação ao tratar que a necessidade de
se estabelecer os requisitos de forma precisa é crítica na medida que o tamanho
e a complexidade do software aumentam, pois os requisitos exercem influência
uns sobre os outros. Para ilustrar esta situação, pode se ver em um caso onde o
requisito deve ter grande portabilidade, como por exemplo, ser implementado
em Java, e isto pode implicar em que o requisito desempenho não seja satisfeito, pois programas em Java são, em geral, mais lentos.
3.6 A definição do software
A definição do software representa a definição de todos os seus componentes.
Uma vez estabelecido seus requisitos, suas funcionalidades e todos os seus
componentes, além dos domínios da regra de negócio de onde ele estará inserido, o software tem a sua definição e quanto mais claro isto for, melhor para o
negócio e para todos os envolvidos.
A fase de definição do software ocorre em conjunto com outras atividades
como a modelagem de processos de negócios e análise de sistemas, mais no
início dos processos de desenvolvimento de software. Nesta atividade, diversos
profissionais buscam conhecer a situação atual e a identificar os problemas
para que possam elaborar propostas de solução de sistemas computacionais
que resolvam tais problemas levantados ou conhecidos. Dentre as propostas
apresentadas, deve-se fazer um estudo de viabilidade, incluindo análise custo
-benefício, para que seja decidido qual solução será a escolhida (LEITE, 2007).
O resultado desta atividade deve incluir a decisão realizada entre a aquisição ou desenvolvimento do sistema, devendo ainda indicar informações sobre
92 •
capítulo 3
hardware, software, pessoal, procedimentos, informação e documentação.
Desta forma, a decisão tenha sido tomada pelo desenvolvimento do sistema,
no escopo da engenharia de software, é necessário elaborar o documento de
proposta de desenvolvimento de software. Esse documento, na maioria das vezes é a base de um contrato de desenvolvimento (LEITE, 2007).
Esta atividade de definição do software conta também com os profissionais
de engenharia de software, visando identificar os requisitos de software e modelos de domínio que serão utilizados na fase de desenvolvimento (codificação).
Leite (2007) ressalta que, além destes pontos, o engenheiro pode vir a elaborar
um plano de desenvolvimento de software, a partir dos requisitos, indicando
em detalhes os recursos necessários (humanos e materiais), bem como as estimativas de prazos e custos (cronograma e orçamento). Outro ponto apontado pelo autor é que não existe um consenso sobre o que caracteriza o final da
fase de definição do software, de forma clara. Isto pode variar de acordo com
o modelo de processo de desenvolvimento adotado. Em algumas propostas, a
fase de definição é considerada concluída com a apresentação da proposta de
desenvolvimento apenas. Em outros modelos de processo, considera que o software apenas está completamente definido com a especificação de requisitos e
com a elaboração do plano de desenvolvimento de software. Assim, de acordo
com o modelo de processo adotado, as atividades da fase de desenvolvimento
podem ser iniciadas mesmo que a fase de definição não esteja ainda completamente concluída.
ATIVIDADES
Vamos praticar um pouco os conceitos aprendidos. Responda às seguintes questões:
01. Cite pelo menos 3 problemas que podem ocorrer durante a atividade de levantamento
de requisitos.
02. Explique a técnica de levantamento de requisitos baseada em cenários e dê um exemplo.
03. Cite um exemplo de requisito não-funcional e explique o seu conceito.
04. A elicitação dos requisitos é a tarefa de comunicar-se com os usuários e clientes para
determinar quais são os requisitos de sistema. Analise a frase abaixo, referente à requisitos
de software especificados para um sistema de gestão de pessoal, expresso por um cliente:
capítulo 3
• 93
“É necessário que o software calcule os salários dos diaristas e mensalistas e emita
relatórios mensais sumarizados por tipo de salário. Entretanto, a base de dados deve estar
protegida e com acesso restrito aos usuários autorizados. De qualquer forma, o tempo de
resposta das consultas não deve superar os quinze segundos, pois inviabilizaria todo o investimento nesse sistema. Devo lembrar que os relatórios individuais dos departamentos,
nos quais constam os salários dos funcionários, devem ser emitidos quinzenalmente em
razão dos adiantamentos e vales que recebem. É fundamental que o software seja operacionalizado usando código aberto. Necessito, ainda, forte gerenciamento de risco, prazo e
custo, porque a entrega do produto final não pode ultrapassar o prazo de oito meses a contar
da data de início do projeto.”
Assinale a alternativa que contém apenas requisitos funcionais:
a)
emita relatórios mensais sumariados por tipo de salário e necessito, ainda, forte gerenciamento de risco, prazo e custo.
b)
necessito, ainda, forte gerenciamento de risco, prazo e custo e a base de dados deve
estar protegida e com acesso restrito aos usuários autorizados.
c)
calcule os salários dos diaristas e mensalistas e os relatórios individuais dos departamentos, nos quais constam os salários dos funcionários, devem ser emitidos quinzenalmente.
d)
a base de dados deve estar protegida e com acesso restrito aos usuários autorizados e
entrega do produto final não pode ultrapassar o prazo de oito meses.
e)
é fundamental que o software seja operacionalizado usando código aberto e emita relatórios mensais sumariados por tipo de salário.
05. Defina o que são requisitos, com suas palavras.
REFLEXÃO
Um projeto de software pode ser mais complexo do que aparenta. Definir o software também
pode ser uma tarefa árdua e não tão simples como inicialmente pode parecer ser. Compreender bem as necessidades do projeto, levantar com precisão os requisitos e ter certeza que
todos os requisitos foram levantados, lembrados, considerados e bem descritos, por meio de
sua especificação, pode ser algo que nem sempre seja possível de se realizar. Em muitos
projetos, nem mesmo o cliente sabe ao certo o que ele quer e mesmo que saiba, lidamos
com requisitos voláteis, sujeitos a alterações no decorrer do projeto e desdobramentos de
situações inesperadas ou não previstas.
94 •
capítulo 3
O levantamento e a especificação de requisitos são fundamentais para o sucesso de
um projeto de software, afinal, é por meio deles que os requisitos serão definidos e consequentemente as atividades serão distribuídas e gerenciadas para atingir as expectativas e
necessidades do cliente, por meio de diferentes processos. Neste meio, há uma camada
de gerenciamento de projetos que trabalha diretamente com aspectos da engenharia de
software, que irá estabelecer seus processos dentro de um método escolhido, com técnicas
de levantamento de requisitos, documentação e outras atividades relacionadas ao desenvolvimento do produto de software, enquanto que a área de projeto, cuidará, entre outras coisas,
da estimativa de custo, recursos, prazo e tudo que envolve negociações com o cliente antes
e durante todo o processo.
Assim, podemos considerar que a análise e especificação de requisitos são essenciais
para o desenvolvimento de software e que suas atividades relacionadas determinam a qualidade e o andamento do projeto, juntamente com os seus processos. O levantamento de requisitos é uma das partes mais importantes do processo de software e fazê-lo sem nenhuma
metodologia ou qualquer tipo de conhecimento desta atividade, certamente trará um projeto
com grandes chances de fracasso ou vários retrabalhos.
LEITURA
Em geral, a maioria dos livros de engenharia de software são excelentes fontes de estudo na
área da engenharia de requisitos, envolvendo suas técnicas de levantamento, especificação
e tudo o que é necessário para a definição do software.
• PRESSMAN, Roger S. Engenharia de Software, 7ª edição. São Paulo: McGraw-Hill,
2011.
• MACHADO, F. N. Análise e gestão de requisitos de software: onde nascem os sistemas. São Paulo: Érica, 2011.
• LIMA, A. S. UML 2.0: do requisito à solução. São Paulo: Érica, 2009.
• WAZLAWICK, R. S. Engenharia de Software: Conceitos e Práticas, 1a Edição, Elsevier,
2013.
REFERÊNCIAS BIBLIOGRÁFICAS
FAGUNDES, R. M., Engenharia de Requisitos - Do perfil do analista de requisitos ao
desenvolvimento de requisitos com UML e RUP. Salvador, 2011. 216p.
capítulo 3
• 95
FORCHESATTO, A. L.; Apostila Engenharia de Software. UNOESC. 2012. 43p.
LEITE, J. C.; Análise e Especificação de Requisitos. 2000b. Disponível em: <http://www.dimap.ufrn.
br/~jair/ES/c4.html>. Acesso em: 10 dez 2014.
LEITE, J. C.; Engenharia de Software: Ciclo de Vida do Software. 2007. Disponível em: <http://
engenhariadesoftware.blogspot.com.br/2007/02/ciclo-de-vida-do-software-parte-1.html>. Acesso
em: 19 dez 2014.
LEITE, J. C.; O Processo de Desenvolvimento de Software. 2000. Disponível em: <http://www.
dimap.ufrn.br/~jair/ES/c2.html>. Acesso em: 10 dez 2014.
MAZZOLA, V. B. Engenharia de Software - Conceitos Básicos, Apostila, 2010. Disponível em:
<https://jalvesnicacio.files.wordpress.com/2010/03/engenharia-de-software.pdf>. Acesso em: 17
dez 2014.
MEDEIROS, H.; Introdução a Engenharia de Requisitos. Disponível em: <http://www.devmedia.
com.br/introducao-a-engenharia-de-requisitos/29454>. Acesso em: 11 jan 2015.
MELLO, J. A. B.; Uma Metodologia para Engenharia de Requisitos para Pequenas Equipes de
Desenvolvimento de Software. Rev. Ciên. Empresariais da UNIPAR, Toledo, v.6, n.1, 2005. 97-111p.
PRESSMAN, R. S. Engenharia de Software, 7ª edição. São Paulo: McGraw-Hill, 2011. 780p.
SANTOS, J. H. A.; Gerência de Mudanças de Requisitos: uma proposta de aplicação a um
estudo de caso. Mestrado. UFRGS. 2004. 107p. Disponível em: <http://www.lume.ufrgs.br/
bitstream/handle/10183/4118/000452937.pdf?sequence=1>. Acesso em: 12 jan 2015.
SILVA FILHO, A. M.; Plano de Projeto. Revista Engenharia de Software Magazine. Ed. 3. Disponível
em: <http://www.devmedia.com.br/artigo-engenharia-de-software-3-plano-de-projeto/9527>. Acesso
em: 16 jan 2015.
SOMMERVILLE, I. Engenharia de Software, 6ª edição. Editora Pearson do Brasil, 2003. 292p.
ZAMPAR, F.; SOUZA, K.; Gestão de projeto e a metodologia ITIL. Disponível em: <http://www.
devmedia.com.br/gestao-de-projeto-e-a-metodologia-itil/25617>. Acesso em: 08 dez 2014.
96 •
capítulo 3
4
Gerenciamento de
Requisitos
Neste capítulo estudaremos sobre o gerenciamento de requisitos, envolvendo
suas mudanças, a rastreabilidade destes requisitos, bem como a gerência da
qualidade de requisitos e validação.
Como discutimos no capítulo anterior, alguns requisitos não são totalmente estáveis e estes são passíveis de mudanças ou alterações ao longo do ciclo
de desenvolvimento do software. Existem muitas causas para estas mudanças
ou alterações nos requisitos, podendo envolver falta de clareza inicial por parte do cliente, falta de clareza das regras de negócio de onde o software estará
inserido, mudanças de leis ou fatores externos e ainda a descoberta de novas
funcionalidades não previstas inicialmente ou ajustes à requisitos que foram
definidos inicialmente.
Para estas mudanças, alterações, adições e até mesmo exclusão de requisitos, é necessário que haja uma eficiente gestão destes requisitos, bem como o
controle das mudanças, sabendo e sendo possível efetuar o seu rastreamento
até a origem destes requisitos, como por exemplo o contexto ao qual ele foi criado, a área funcional de uma empresa e o pessoal envolvido no levantamento
destes requisitos.
Após todo o processo de gerenciamento de requisitos e gerenciamento das
mudanças, é necessário ainda que se tenha um bom controle da gerência da
qualidade destes requisitos, bem como um processo seguro e que atendas ambas as partes do projeto envolvendo a validação destes requisitos.
Vamos lá?!
OBJETIVOS
Neste capítulo teremos como objetivo:
• Aprender sobre o gerenciamento de requisitos.
• Compreender o gerenciamento de mudanças.
• Conhecer sobre rastreabilidade de requisitos.
• Aprender sobre gerência da qualidade de requisitos.
• Conhecer a validação de requisitos.
98 •
capítulo 4
4.1 Introdução
Uma das atividades fundamentais no desenvolvimento de software é a etapa de
Gerenciamento de Requisitos. Os Requisitos são essenciais para a definição da
arquitetura do sistema, para a implementação e validação do sistema final. É
um processo de controle do desenvolvimento, tendo como referência a baseline de requisitos. Assim, durante este processo são mantidos planos, artefatos e
atividades de desenvolvimento consistentes com os requisitos definidos para o
software (SAYÃO e BREITMAN, 2014 , p. 1).
O gerenciamento de requisitos deve manter um controle padrão sobre implementações e manutenções, de forma que as demandas dos clientes e usuários possam ser atendidas em todas as fases do projeto, garantindo a excelência
do produto (De BONA e SANTOS, 2012)..
Na Gerência de Requisitos os requisitos necessários para a construção do
produto devem ser entendidos, documentados, revisados e controlados, tanto
quanto a sua inclusão, mas, principalmente, quanto às modificações. O controle possibilita trabalhar com estimativas de realização do desenvolvimento do
produto, dentro de um cronograma definido, e o seu devido acompanhamento
(SANTOS, 2004, p. 29).
4.2 Gerenciamento de Requisitos
Gerenciamento de requisitos é o processo de gerenciar as alterações no requisito durante o processo de levantamento de requisitos e desenvolvimento de
sistemas. É um conjunto de atividades que ajuda a equipe do projeto a identificar, controlar e rastrear requisitos e e modificações em qualquer época do
desenvolvimento.
“O Gerenciamento de Requisitos é uma área chave importante dentro do
CMM (Capability Maturity Model – SEI/CMU), a qual visa identificar a necessidade de se estabelecer um entendimento entre o que o Cliente está solicitando
e o que a Equipe de Projeto entende ser a solicitação” (SANTOS, 2004, p. 29).
No processo de desenvolvimento de software as modificações nos requisitos ocorrem sistematicamente, desde o levantamento de requisitos até durante
a operação do sistema em produção. Isso se justifica pois há o aparecimento de
erros, conflitos, inconsistência nos requisitos, novas demandas e prioridades
capítulo 4
• 99
dos clientes, problemas técnicos, mudanças no negócio, concorrentes, mudanças no ambiente externo e no ambiente de software, bem como possíveis mudanças organizacionais (MEDEIROS, 2015).
Há, durante o processo de desenvolvimento e operação de software, o possível e provável surgimento de novos requisitos e a necessidade de mudanças
nos requisitos existentes. Este processo, também conhecido como evolução
de sistemas, acontece como resultado de mudanças no meio ambiente onde o
próprio sistema de software está inserido. Se o macrosistema muda os sistemas
de software devem acompanhar esta mudança ou ficarão cada vez menos úteis
(SAYÃO e BREITMAN, 2014 , p. 5).
O gerenciamento dos requisitos visa, justamente, dirimir problemas ocasionados por estas mudanças. “O Processo de Gerencia de Requisitos envolve
atividades que ajudam a equipe a identificar, controlar e rastrear requisitos e
gerenciar mudanças de requisitos em qualquer momento ao longo do ciclo de
vida do software” (MEDEIROS, 2015).
A primeira etapa á a identificação de novo requisito, com o uso de tabelas
de rastreamento, que identificam como os requisitos novos interagem com os
requisitos ou funções já existentes.
Devido a novas necessidades do negócio ou melhora na compreensão do
sistema e dos requisitos, é usual que surjam novos requisitos durante o processo. Além de alterações nos requisitos podem ocorrer mudanças nas prioridades
dos requisitos, devido a mudanças nos pontos de vista e alterações no negócio
durante o desenvolvimento.
Os requisitos podem ser divididos em dois grupos:
• Requisitos permanentes: são requisitos estáveis. Derivam da atividade
principal e por isso não sofrem alterações durante o processo. Ex: requisitos do
sistema hospitalar - médico, pacientes, etc.
• Requisitos voláteis: são requisitos que podem mudar durante ou depois
do desenvolvimento. Ex: Políticas governamentais sobre assistência médica.
Para Sommerville (2007), os requisitos voláteis podem ser cartacterizados
como mutáveis, emergentes, consequentes e de compatibilidade.
• Mutáveis: se modificam por causa das mudanças, do ambiente no qual a
empresa está operando.
100 •
capítulo 4
• Emergentes: surgem à medida que a compreensão do sistema evolui durante o desenvolvimento.
• Consequentes: resultam da introdução do sistema computacional.
• Compatibilidade: dependem de sistemas ou processos específicos das
organização.
Não há um processo ideal para as organizações, mas processos adaptados e
apropriadas para cada realidade, permitindo orientações mais precisas e reduzindo a probabilidade de erros e esquecimentos. “Adaptar um processo para as
necessidades internas é sempre a melhor escolha ao invés de impor um processo à organização” (MEDEIROS, 2015).
O planejamento é o primeiro estágio do processo de gerenciamento de requisitos. É um estágio dispendioso, sendo que para cada projeto há o estabelecimento do nível de detalhes exigidos para o gerenciamento de requisitos.
Durante o estágio de gerenciamento de requisitos, decide-se sobre:
• Identificação de requisitos - Cada requisito precisa ser identificado de modo único,
para que possa ser feita a referência cruzada deste com os outros requisitos e para que
ele possa ser utilizado nas avaliações de facilidade de rastreamento.
• Processo de gerenciamento de mudanças - Trata-se do conjunto de atividades
que avalia o impacto e o custo das mudanças.
• Políticas de facilidade de rastreamento - Essas políticas definem as relações entre os requisitos e entre os requisitos e o projeto de sistema que devem ser registrados
e também como esses registros devem ser mantidos.
• Suporte de ferramentas CASE - O gerenciamento de requisitos envolve processar
uma grande quantidade de informações sobre os requisitos. As ferramentas que podem ser utilizadas vão desde sistemas especializados de gerenciamento de requisitos
até planilhas de cálculo e sistemas simples de bancos de dados.
(SOMMERVILLE, 2006, p. 119)
O gerenciamento de requisitos demanda um apoio automatizado e é na fase
de planejamento que as ferramentas CASE utilizadas devem ser escolhidas. O
apoio de ferramentas é necessário para:
capítulo 4
• 101
• 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
ele engenharia de requisitos.
• Gerenciamento de mudanças - Esse processo é simplificado se o apoio de ferramentas ativas estiver disponível.
• Gerenciamento de facilidade de rastreamento - Como foi discutido antes, o apoio
de ferramentas para a rastreabilidade permite que são descobertos requisitos relacionados. Estão disponíveis algumas ferramentas que utilizam técnicas de processamento
de linguagem natural, para ajudar a descobrir as possíveis relações entre os requisitos.
(SOMMERVILLE, 2006, p. 121)
Requisitos segundo Agilistas
[...] “a corrente agilista defende a simplificação dos requisitos, legando todo detalhamento a acordos tácitos firmados com o cliente, que deve ter presença constante. Essa
escola defende a definição simplificada das funcionalidades pelo uso de Histórias de
Usuário.
A forma dada a essas histórias assemelham-se muito à maneira como os Casos
de Uso eram descritos em seu princípio, numa fase pré-UML que costumo chamar de
gestacional (dos Casos de Uso), quando surgiram estudos propondo a Análise Orientada a Objetos. Consiste na identificação do ator seguido da ação que ele deseja realizar,
seguido das regras de negócio vigentes sobre aquele uso.
Essa é uma forma simplificada e mais livre de redigir. Porém, o preço dessa liberdade é a abertura a ambiguidades, indefinições e até mesmo histórias descritas exaustivamente. Esta última tendo sido a maior queixa sobre Casos de Uso, abrindo espaço
para o surgimento da técnica de Histórias de Usuário.
Todavia, num cenário em que os problemas não se apresentem e a descrição seja
realmente resumida, esse conjunto de histórias são, em verdade, uma lista das necessidades do cliente, aproximando-se da visão do sistema. Isso exatamente porque não se
deseja, com as histórias, obter uma descrição detalhadas de todos os usos.
Por ser representada mais por uma corrente do que por um processo definido, não
há declaração formal sobre como obter as informações, embora seja mais difundido o
uso de mapas mentais para orientar as partes interessadas nessa atividade.”
(FAGUNDES, 2011, p. 22 )
102 •
capítulo 4
Neste artigo você pode encontrar ferramentas que auxiliam no controle do gerenciamento de requisitos:
• http://migre.me/oIEKM
Neste outro artigo, além de abordar as normas de qualidade utilizadas em desenvolvimento de softwares, no final há também uma análise de ferramentas para a gestão
de requisitos e mudanças:
• http://migre.me/oIEZg
4.3 Gerenciamento de mudanças
As mudanças em um ambiente de desenvolvimento são inevitáveis. Quando o
sistema ainda está sendo desenvolvido os requisitos continuam mudando. As
razões para mudanças são de vários tipos, entre outras (SAYÃO e BREITMAN,
2014 , p. 6):
• Os sistemas são complexos e isso impõe mudanças
• Requisitos equivocados ou mal definidos devem sofrer ajustes ao longo
do processo de desenvolvimento,
• Mudanças no ambiente: regras de negócios, leis, políticas internas,
• Adição de novas funcionalidades mais avançadas com o intuito de criar
vantagens,
• Mudanças tecnológicas,
• Mudanças no comportamento dos clientes.
O fato é que os sistemas de informação devem evoluir constantemente,
de maneira que atenda às necessidades de seus usuários no atual ambiente
corporativo.
Este fenômeno é particular a sistemas de informação e foi destacado por
Manny Lehman. “Este tipo de sistema, também conhecido como sistema
do tipo E (evolutionary) se caracteriza por, uma vez instalado, tornar-se parte do meio ambiente e acabar alterando seus próprios requisitos” (SAYÃO e
BREITMAN, 2014 , p. 6).
capítulo 4
• 103
A mudança nos requisitos é denominada de volatilidade; a gerência de requisitos tem como parte das suas atividades controlar mudanças. O CMM define mudanças como: As alterações que precisam ser feitas nos requisitos e artefatos de software.
É necessário que as alterações dos requisitos sejam:
•
•
•
•
•
•
Identificadas e avaliadas
Avaliadas considerando o risco
Documentadas
Planejadas
Comunicadas aos grupos e indivíduos envolvidos
Acompanhadas até a finalização
O gerenciamento de mudanças de requisitos (figura 4.1) deve ser aplicado a
todas as mudanças propostas para os requisitos. O benefício de se ter um processo formalizado para gerir as mudanças é que, desta forma, todas as propostas de mudanças são tratadas de maneira consistente e de forma controlada.
Há três estágios principais em um processo de gerenciamento de mudanças
(SOMMERVILLE, 2006, p. 121):
6. Análise do problema e especificação da mudança - O processo começa
com uma proposta de mudança ou com a identificação de um problema com os
requisitos. Nesse estágio, é realizada a análise do problema ou da proposta de
mudança, a fim de verificar sua validade.
7. Análise e custo da mudança - O efeito da mudança proposta é avaliado,
de acordo com a facilidade de rastreamento e o conhecimento geral dos requisitos do sistema. O custo da mudança é estimado de acordo com as modificações no documento de requisitos, no projeto de sistemas e na implementação.
Concluindo essa etapa, decide-se sobre prosseguir com a alteração de requisitos ou não.
8. Implementação de mudanças - O documento de requisitos e, se necessário, o projeto de sistema e a implementação são modificados. De modo a facilitar, o documento de requisitos deve ser organizado, bem como os programas,
minimizando referências externas e tornando as seções do documento tão modulares quanto possível.
104 •
capítulo 4
Problema identificado
Análise do
problema e
especificação
da mudança
Análise e custo
da mudança
O processo de gerenciamento demanda um conjunto de tarefas que proporcionem o gerenciamento
e mapeamento entre as dependências dos requisitos e as solicitações de modificações e/ou inclusões
(SANTOS, 2004, p. 18).
Em função de possíveis divergências na percepção do projeto, podem ocorrer problemas na dificuldade, por parte de analistas de requisitos e de
negócios, de se estabelecer o entendimento com as
partes interessadas sobre o tratamento de definições
posteriores de requisitos ou alteração de escopo da
solução (FAGUNDES, 2011, p. 206).
Implementação de
mudanças
Figura 4.1 – Gerenciamento de mudanças de requisitos.
Requisitos revisados
Fonte: (SOMMERVILLE, 2006, p. 122).
Na visão do cliente, qualquer resolução sobre o projeto que facilite que este
cumpra sua missão é bem vinda, incluindo alterações. Porém para os desenvolvedores não é assim:
já para a equipe de desenvolvimento, o objeto é tudo aquilo que foi definido no projeto
e alterações de escopo demandam necessariamente renegociação de prazo e custo modificações que não impliquem mudança do escopo são toleráveis, mas podem ser
sujeitas, sob a ótica do desenvolvedor, a mudanças no cronograma em função de fatores como criticidade, proximidade com o prazo, dimensão da mudança (FAGUNDES,
2011, p. 206).
capítulo 4
• 105
Uma forma de resolver ou gerir estas discrepâncias é a separação precisa
entre o escopo do produto, como definido na disciplina de Gerenciamento de
Projetos, e a especificação de requisitos, elaborada durante a Engenharia de
Requisitos (FAGUNDES, 2011, p. 206).
Desta forma, toda mudança que resulte na modificação do Documento de
Visão deve passar por uma negociação. Sendo assim, determinadas inclusões
ou exclusões no projeto devem passar por um ajuste no acordo, por modificar o
escopo do produto (FAGUNDES, 2011, p. 206).
Alterações que não modificam a visão e o escopo do projeto não demandam
tantos ajustes, mas também não são nulas do ponto de vista de negociação. O
esforço de modificação é variável de acordo com o momento em que ela é suscitada e de acordo com a análise de impacto fundamentada na rastreabilidade
dos requisitos (FAGUNDES, 2011, p. 206).
Assim, é muito importante firmar previamente com o cliente uma visão
compartilhada de como se dará o processo de solicitações de mudança, bem
como as revisões do planejamento decorrentes destas mudanças. É uma forma
de evitar surpresas e fortalecer os laços de confiança e parceria entre a equipe
de desenvolvimento e o cliente (FAGUNDES, 2011, p. 210).
Para o gerente de requisitos o mais importante é estabelecer uma prática
consistente para a mudança dos requisitos. É fundamental o estabelecimento
de um processo claro para o tratamento de mudanças. Este processo precisa estar acertado e definido com os membros da equipe de desenvolvimento e usuários (SAYÃO e BREITMAN, 2014 , p. 8). Os pontos que devem ser observados
com relação a possíveis mudanças, dentro do processo de gerenciamento de
requisitos podem ser divididos em:
• Entradas - quais condições devem ser satisfeitas antes de iniciar o
processo
• Tarefas - detalhar quais são as tarefas envolvidas neste processo, determinando quem será responsável pela sua execução e o formato em que os resultados devem ser comunicados
• Verificação - definir etapas onde os resultados obtidos são verificados de
modo a garantir consistência e qualidade
• Saídas - definir um critério claro que indique que o processo chegou ao fim.
106 •
capítulo 4
Na figura 4.2 apresentamos um exemplo de processo de mudança de requisitos, proposto por Karl Wiegers.
Solicitante submete
solicitação de mudança
Submetida
Avaliador realiza
análise de impacto
Avaliada
Gerente decide NÃO
realizar a mudança
Rejeitada
Gerente decide
realizar mudança.
Aponta reponsável
para execução
Aprovada
Verificação
falhou
Mudança Cancelada
Responsável fez
a mudança e
pesquisa verificação
Mudança
Realizada
Mudança Cancelada
Cancelada
Verificador
confirma
mudança
Verificação não
foi necessária.
Modificador
instala produto
Verificada
Mudança Cancelada
Modificador
instala
produto
Final
Figura 4.2 – processo de requisição de mudança em requisito, proposto por Karl Wiegers.
Fonte: Sayão e Breitman (2014 , p. 8).
capítulo 4
• 107
4.4 Rastreabilidade de requisitos
A rastreabilidade não é algo físico ou garantido simplesmente pelo registro dos
requisitos, mas é a possibilidade de se identificar, a partir certo requisito, as dependências diretas e indiretas. Esta e uma qualidade do registro de requisitos,
que auxilia a avaliar o impacto de uma mudança nos requisitos de uma solução
(FAGUNDES, 2011, p.12).
A rastreabilidade de requisitos é uma das atividades preconizadas pelos
modelos de qualidade como CMM, CMMI, MPS.BR e ISO 9001. Em suma, a
rastreabilidade pode ser compreendida como o conjunto de ligações entre as
fontes dos requisitos, os requisitos propriamente ditos e outros artefatos como
componentes e casos de teste. “Por fontes dos requisitos consideramos tanto
o cliente ou usuário que trouxe uma necessidade, como documentos da organização, padrões a serem seguidos e também legislação pertinente” (SAYÃO e
BREITMAN, 2014 , p. 12).
Para que seja possível realizar de modo eficiente o gerenciamento de requisitos, principalmente quanto a modificação de requisitos é necessário que
cada requisito seja identificado de modo único, para que seja possível realizar
a transferência cruzada com os outros requisitos, possibilitando, deste modo,
utilizá-lo nas avaliações de rastreamento em possíveis alterações de requisitos.
Cada alteração deve ter seu impacto e custos avaliados, para tal, utilizam-se
políticas de rastreamento que define as relações entre os requisitos e o projeto
do sistema.
O rastreamento pode ser realizado de diferentes formas, entre elas devemos
destacar as seguintes:
• Rastreamento de origem, em que é realizada a associação entre os requisitos e os stakeholders que propuseram tal requisito.
• Rastreamento de requisitos, em que é identificada a associação de um
determinado requisito com a dependência existente com outros requisitos.
• Rastreamento de projeto, em que é identificada a associação de um requisito com o projeto como um todo.
Para a melhor visualização do rastreamento o ideal é utilizar-se de uma
representação gráfica de referência cruzada ou matriz de rastreamento.
Neste modelo os requisitos são dispostos nas linhas e colunas de uma tabela e
108 •
capítulo 4
suas dependências são representadas por letras ou símbolos, de acordo com a
tabela 4.3.
RED. ID
1.1
1.2
1.3
2.1
2.2
2.3
3.1
3.2
1.1
1.2
1.3
U
R
2.1
2.2
U
R
2.3
3.1
R
3.2
U
R
R
U
U
U
R
U
R
R
U = utiliza recursos especificados no requisito da coluna
R = relação fraca entre os requisitos
Tabela 4.3 – Matriz de rastreamento.
Rastreabilidade (por Raul S. Wazlawick)
"Rastreabilidade ou controle de rastros refere-se a um dos princípios da Engenharia de
Software cuja implementação ainda implica significativa dificuldade.
Manter um controle de rastros entre módulos de código não é difícil, porque as
dependências entre os módulos costuma ser indicada de forma sintática pelos próprios
comandos da linguagem (importou uses, por exemplo). Contudo, manter controle de
rastros entre artefatos de análise e design não é tão simples. A rastreabilidade é importante, porque, quando são feitas alterações em artefatos de análise, design ou código, é
necessário manter a consistência com outros artefatos, caso contrário a documentação
fica rapidamente desatualizada e inútil.
A técnica de rastreabilidade mais utilizada nas ferramentas CASE é a matriz de
rastreabilidade, que associa elementos entre si, por exemplo, casos de uso e seus respectivos diagramas de sequência ou classes e módulos de programa. Porém, esse tipo
de visualização matricial torna-se impraticável à medida que a quantidade de elementos
cresce, especialmente se o controle das relações entre os elementos precisar ser feito
manualmente (Cleland-Huang, Zemont & Lukasik, 2004).
Também são reportadas pesquisas que procuram automatizar a recuperação de
relações de rastreabilidade entre artefatos a partir de evidências sintáticas. Porém, em
razão das escolhas arbitrárias dos nomes de artefatos (falta de padrão), esses sistemas
capítulo 4
• 109
de recuperação costumam retornar muitos falso-positivos, o que inviabiliza seu uso
(Settimi, Cleland-Huang, Khadra, Mody, Lukasik & de Palma, 2004).
Outra abordagem, ainda experimental, é apresentada por Santos e Wazlawick
(2009). Consiste em modificar a maneira como os elementos são criados nos editores
de diagramas das ferramentas CASE, de forma que, com exceção dos requisitos que
são produzidos externamente, outros elementos quaisquer (como casos de uso, classes, código, diagramas etc.) só podem ser criados como uma derivação de algum outro
elemento que já exista.
Dessa forma, sempre que um item é criado no repositório do projeto, um rastro é
automaticamente criado entre ele e o elemento que lhe deu origem. Apenas itens que
representam requisitos (que vêm do cliente, ou seja, são externos ao projeto) podem
ser adicionados ao repositório sem que isso ocorra por derivação de outros itens."
(WAZLAWICK, 2013, p. 320)
4.5 Gerência da qualidade de requisitos
Buscando a qualidade é importante que a Especificação de Requisitos de Software atenda a alguns preceitos de qualidade de software, conforme definidos
por padrões internacionais (como, por exemplo, o IEEE, o CMM e o SPICE).
Para tanto a especificação deve ser (SANTOS, 2004, p. 22):
ESPECIFICAÇÕES:
CORRETA
PRECISA
COMPLETA
110 •
capítulo 4
DETALHAMENTO
Tudo o que está sendo descrito sobre os requisitos deve
realmente expressar sua realidade – ser o que realmente
é.
Os requisitos devem ter apenas uma interpretação, acordada entre os usuários e os desenvolvedores. As dúvidas
podem ser dirimidas com um dicionário de termos, que
deve ser declarado para resolver as dúvidas que surgirem.
Deve refletir todas as decisões de especificação que
foram tomadas ao longo de sua discussão, envolvendo
os usuários e os desenvolvedores. Deve trazer de forma
bem clara e definida a sua funcionalidade, desempenho
desejado, restrições de projeto (técnicas e não técnicas),
atributos necessários e, caso exista, relacionamento com
outras aplicações. Procurar contemplar todas as situações
possíveis.
ESPECIFICAÇÕES:
CONSISTENTE
DETALHAMENTO
Não ter nenhum conflito ou sobreposição a outros requisitos.
Definir prioridades de acordo com a importância, estabilidade e complexidade. Dentro destes critérios, os
requisitos podem ser:
a)
essencial: requisito sem o qual o produto não
atende às necessidades do usuário;
b)
PRIORIZADA
desejável: sua existência aumenta o valor do
produto, mas se por alguma necessidade não for
contemplado não afeta de forma substancial a utilização do produto;
c)
opcional: requisito que poderá ser incluído caso
haja disponibilidade de prazo e orçamento, caracterizando-se como a última prioridade a ser atendida;
VERIFICÁVEL
MODIFICÁVEL
RASTREÁVEL
REUTILIZÁVEL
A princípio todos os requisitos devem ser verificáveis. Ele
será verificável se existir um processo finito que possa ser
executado por uma pessoa ou máquina e, principalmente,
que mostre sua conformidade com o solicitado.
A mudança de todo e qualquer requisito pode ser realizada de forma fácil, completa e consistente.
Permite que seja facilmente verificada sua consequência
quando ocorrer uma modificação. Há a necessidade de se
fazer a rastreabilidade nos dois sentidos, ou seja, verificar
qual o impacto a ser causado nos requisitos dependentes
e dos quais depende.
Que a especificação dos requisitos seja facilmente
reutilizável, ou seja, se tivermos alguma funcionalidade
a ser referenciada por um outro requisito que não seja
necessário descrevê-la novamente.
Tabela 4.4 – Qualidade de requisitos. Fonte: Adaptado de ÁVILA e SPÍNOLA (2014).
A gerência precisa, neste sentido, se responsabilizar pela criação e manutenção de uma infra-estrutura necessária para atividades de verificação que
tornem possível a investigação da qualidade dos requisitos que estão sendo definidos (ÁVILA e SPÍNOLA, 2014).
capítulo 4
• 111
Gestão de Qualidade efetiva
Uma gestão de qualidade efetiva estabelece a infraestrutura que dá suporte a qualquer tenta- tiva de construir um produto de software de alta qualidade. Os aspectos
administrativos do processo criam mecanismos de controle e equilíbrio de poderes que
ajudam a evitar o caos no projeto - um fator-chave para uma qualidade inadequada. As
práticas de engenharia de software permitem ao desenvolvedor analisar o problema e
elaborar uma solução consistente , aspectos críticos na construção de software de alta
qualidade. Finalmente, as atividades de apoio como o gerenciamento de mudanças e
as revisões técnicas têm muito a ver com a qualidade, assim como qualquer outra parte
da prática de engenharia de software (PRESSMAN, 2011, p. 360).
Segundo o CMM a gerência de requisitos é a revisão dos requisitos antes de
serem incorporados ao projeto. É necessário (SAYÃO e BREITMAN, 2014, p. 19):
• Identificar requisitos incompletos ou ausentes
• Determinar a clareza dos requisitos e se são possíveis de serem implementados, consistentes e verificáveis
• Revisar requisitos com problemas potenciais
• Negociar compromissos com os grupos envolvidos
A maior parte dos requisitos de software para sistemas de informação são
escritos utilizando-se linguagem natural. Uma série de potenciais problemas
podem surgir por esta falta de formalidade na captura dos requisitos. Os problemas mais comuns são:
PROBLEMAS
Ambiguidade
Requisitos incompletos
112 •
capítulo 4
DESCRIÇÃO
EXEMPLO
Falta de clareza ou duplo sentido de frases ou expressões.
Este tipo de requisito leva a
interpretações erradas ou inconsistentes das necessidades
reais dos usuários.
Requisitos que deixam de fora
parte da informação necessária
à sua compreensão.
“O sistema deve enviar relatórios
de produtividade dos programadores, analistas ou desenvolvedores do projeto mensalmente
ou quando requisitado.”
Curva S (Planejado X Realizado)
de um projeto
Cadastro de iniciativas estratégicas
PROBLEMAS
Requisitos múltiplos
Requisitos com alternativas
DESCRIÇÃO
EXEMPLO
Estes são requisitos que concatenam vários requisitos em um
só. Estes requisitos devem ser
separados para facilitar a tarefa
de priorização e gerência de
mudanças.
São aqueles requisitos que não
estabelecem claramente qual
deve ser a ação do sistema
frente a uma dada situação. De
modo geral contém frases do
tipo mas, com exceção, apesar,
e quando.
São requisitos mal redigidos que
podem causar confusão e mal
entendidos. Um erro muito comum é o excesso de informação
No evento de falha da rede
elétrica, o sistema deve enviar
mensagem de erro ao usuário,
salvar a configuração atual do
sistema e os dados entrados,
até então.
O sistema deve mostrar o total
do pedido à medida que os
códigos dos produtos vão sendo
entrados no pedido, a não ser
que se trate de um produto
promocional.
Na improvável eventualidade de
falha no sistema de refrigeração,
o sistema deve mandar mensagem para a chave admin.
Requisitos mal escritos
Identificar e associar as intervenções que são complementares às outras
Requisitos inverificáveis
É de conhecimento comum a
O sistema X deve ser seguro
gerentes de projeto a máxima
"você não pode gerenciar o que O sistema C deve processar
não pode medir". Um requisito
depósitos rapidamente
inverificável é escrito de modo
que fica impossível de assegurar
que o sistema é capaz de
atênde-lo.
Tabela 4.5 – Problemas nos requisitos. Fonte: Adapatdo de SAYÃO e BREITMAN (2014 ,
p. 19).
Desta forma, é fundamental que os requisitos sejam “completos, corretos,
consistentes, realistas, necessário, passível de ser priorizado, verificável e rastreável” (MEDEIROS, 2015).
4.6 Validação de requisitos
A validação de requisitos consiste em demonstrar que os requisitos levantados
definem o sistema que o cliente realmente quer. O custo de correção de um sistema com erro de requisitos pode chegar a cem vezes o custo de simples erros
de implementação, daí a importância de sua validação.
capítulo 4
• 113
Validar ou checar os requisitos consiste em verificar se o sistema provê as
funções que atendem as necessidades do cliente. Verificar a consistência dos
requisitos, se não conflitos entre eles.
Verificar a completude, se todas as funções requeridas pelo cliente estão
incluídas na descrição do sistema. O Realismo, se os requisitos podem ser
implementados dentro dos prazos e recursos financeiros, tecnológicos e de
pessoal disponível para tal. E finalmente verificar de os requisitos podem ser
verificados.
Para realizar a validação de forma eficiente utilizamos algumas técnicas
como revisão de requisitos, prototipação, geração de casos de teste e análise
automatizada da consistência.
• Revisão de requisitos: consiste da análise manual sistemática dos requisitos. Deve ser realizada por uma equipe de engenheiros de software.
• Prototipação: realiza-se a criação de protótipos executáveis do sistema
como forma de verificar e testar a viabilidade e a consistência dos requisitos
levantados.
• Geração de casos de teste: consiste em desenvolver testes que verifiquem
os requisitos levantados.
• Análise automatizada da consistência: consiste em verificar a consistência de uma descrição de requisitos estruturada utilizando ferramentas automatizadas, entretanto poucas vezes isso é possível.
Além de realizar a validação dos requisitos é necessário revisar os requisitos. Estas revisões devem ser realizadas regularmente enquanto a definição dos
requisitos está sendo formulada. Esta tarefa deve envolver tanto o cliente quando os analistas do sistema.
Revisões podem ser feitas de forma formal ou informal e para isso é importante uma boa comunicação logo nos estágios iniciais. As revisões devem verificar os seguintes itens:
• Verificabilidade: se o requisito pode ser testado de forma realística.
• Compreensibilidade: se o requisito está bem compreendido.
• Rastreabilidade: se a origem do requisito pode ser identificada.
• Adaptabilidade: se o requisito pode ser mudado sem grande impacto em
outros requisitos, e se não, qual impacto causará.
114 •
capítulo 4
A verificação e validação (V & V) de software, tem como objetivo mostrar que
um sistema está de acordo com suas especificações e que ele atende às expectativas do cliente comprador do sistema.
Esse processo envolve verificar processos, como por meio de inspeções e revisões, em
cada estágio do processo de software, desde a definição elos requisitos dos usuários
até o desenvolvimento elo programa. A maior parte dos custos de validação, contudo,
é observada depois da implementação, quando o sistema operacional é testado (SOMMERVILLE, 2006, p. 50).
A não ser que sejam pequenos programas, os sistemas não devem ser testados como uma unidade isolada, ‘monolítica’. Os grandes sistemas são formados por subsistemas, que são construídos a partir de módulos, que são
compostos por procedimentos e funções. Os testes devem ser realizados incrementalmente, ou seja, o processo de teste deve evoluir em estágios, em conjunto com a implementação do sistema (SOMMERVILLE, 2006, p. 50).
ATIVIDADES
Vamos praticar um pouco os conceitos aprendidos. Responda às seguintes questões:
01. Existe algum software que gerencia os requisitos de um sistema? Você conhece? Se
conhecer, explique basicamente o seu funcionamento. Se não conhece, pesquise na internet
algum software voltado para a gerência de requisitos e o seu funcionamento.
02. Quais técnicas você utilizaria para rastrear requisitos de software? Explique.
03. Na sua opinião, o fato de haver muitas mudanças de requisitos pode influenciar na escolha do métodos de desenvolvimento do software? Por que?
04. Quais critérios você utilizaria para avaliar se os requisitos são de qualidade? Justifique.
05. Quais são os principais pontos que devem ser decididos durante o estágio de gerenciamentos de requisitos? Explique.
capítulo 4
• 115
REFLEXÃO
Podemos considerar que se os requisitos forem bem levantados, bem descritos e especificados, não teremos problemas quanto à mudanças futuras? Será que temos condições de desenvolver softwares com requisitos sendo alterados a todo momento? Qual é o limite disto? E
quando envolvemos muitas pessoas ou muitos grupos de diferentes áreas funcionais de uma
empresa; será que conseguiríamos rastrear todos os seus pedidos ou suas necessidades
que foram revertidos em requisitos? E para avaliarmos a qualidade de requisitos; como isto
é feito? Quem os valida? São perguntas relativamente simples e comuns que poderíamos
fazer a todo o momento, mas com uma certa complexidade em responder ou principalmente,
em gerenciar na prática. A engenharia de software nos mostra processos, ferramentas, métodos e técnicas para respondê-las e como lidar com estas situações comuns e sérias em
um projeto de desenvolvimento de software. Mudar requisitos pode ser um grave problema,
chegando até mesmo a limitar algumas ações, enquanto que em outras metodologias ou em
outras abordagens, pode ser tratado como algo previsível e esperado, tendo condições de
agir e trabalhar com esta situação de mudanças.
LEITURA
Como comentamos no capítulo anterior, os livros de engenharia de software são excelentes
fontes de leitura na área da engenharia de requisitos e neles há uma abordagem com mais
profundidade acerca dos assuntos tratados neste capítulo.
• PRESSMAN, Roger S. Engenharia de Software, 7ª edição. São Paulo: McGraw-Hill, 2011.
• WAZLAWICK, R. S. Engenharia de Software: Conceitos e Práticas, 1a Edição, Elsevier,
2013.
• SOMMERVILLE, Ian. Engenharia de Software, 9ª edição. Editora Pearson do Brasil, 2011.
• A revista Engenharia de Software, na sua edição 13 trouxe um excelente artigo sobre
Rastreabilidade que merece ser lido.
• http://migre.me/oKWiW
116 •
capítulo 4
REFERÊNCIAS BIBLIOGRÁFICAS
ÁVILA, A. L.; SPÍNOLA, R. O.; Introdução à Engeharia de Requisitos. Revista Engenharia de
Software. Disponível em: <http://www.devmedia.com.br/artigo-engenharia-de-software-introducao-aengenharia-de-requisitos/8034>. Acesso em 12 dez 2014.
De BONA, G.; SANTOS, I. R. Gerenciando requisitos com MPS.BR. Revista Engenharia de Software,
Ed. 63, 2012. Disponível em: <http://www.devmedia.com.br/gerenciando-requisitos-com-mpsbr/29375>. Acesso em: 15 dez 2014.
CLELAND-HUANG J, ZEMONT G, LUKASIK W. A Heterogeneous Solution
for Improving the Return on Investrnent of Requirements Traceability.12th IEEE
International Conference on Requirements Engineering, 2004; 230-239.
FAGUNDES, R. M., Engenharia de Requisitos - Do perfil do analista de requisitos ao
desenvolvimento de requisitos com UML e RUP. Salvador, 2011. 216p.
MEDEIROS, H.; Introdução a Engenharia de Requisitos. Disponível em: <http://www.devmedia.
com.br/introducao-a-engenharia-de-requisitos/29454>. Acesso em: 11 jan 2015.
PRESSMAN, R. S. Engenharia de Software, 7ª edição. São Paulo: McGraw-Hill, 2011. 780p.
SANTOS, J. H. A.; Gerência de Mudanças de Requisitos: uma proposta de aplicação a um
estudo de caso. Mestrado. UFRGS. 2004. 107p. Disponível em: <http://www.lume.ufrgs.br/
bitstream/handle/10183/4118/000452937.pdf?sequence=1>. Acesso em: 12 jan 2015.
SANTOS, R. N. & WAZLAWICK, R. S. Rastreabilidade Indutiva Aplicada a
Artefatos de Software. VI Experimental Software Engineering Latin American
Workshop, 2009.
SAYÃO, M; BREITMAN, K K. Gerência de Requisitos. Disponível em <http://www-di.inf.puc-rio.
br/~karin/TELECOM/index_files/gerencia_req.pdf>. Acesso em: 24 nov de 2014.
SETTIMI, R., CLELAND-HUANG, J., KHADRA, O. B., MODY, J., LUKASIK,
W. & De PALMA, C. Supporting Software Evolution through Dynarnically Retrieving Traces to
UML Artifacts. Proceedings of the Principies of Software Evolution, 2004.
SOMMERVILLE, I. Engenharia de Software, 6ª edição. Editora Pearson do Brasil, 2003. 292p.
WAZLAWICK, R. S. Engenharia de Software: Conceitos e Práticas, 1ª Edição, Elsevier, 2013. 506p.
capítulo 4
• 117
118 •
capítulo 4
5
Modelagem do
Projeto - UML
A modelagem do projeto de software envolve atividades fundamentais que irão
contribuir diretamente no desenvolvimento ou codificação de um sistema. Ela
trata do desenho do software, a sua modelagem, podendo explorar previamente vários recursos e simular por meio de modelagens o seu funcionamento.
Usar um ambiente de modelagem que permita analisar, identificar possíveis falhas ou melhorias antes de aplicar diretamente em um ambiente de desenvolvimento, é de extrema importância para o sucesso do projeto.
Como modelar envolve notações gráficas, é desejável que se faça estas notações, desenhos e símbolos dentro de padrões que sejam internacionalmente
conhecidos e que estes funcionem adequadamente dentro das regras de negócio que os softwares a serem desenvolvidos estejam inseridos. Para estas notações e sua padronização, existem modelos que podem ser utilizados como
é o caso da UML (Unified Modeling Language), que é uma linguagem de modelagem unificada, representada por alguns diagramas específicos, como por
exemplo os de casos de uso e diagramas de sequência e de classes.
A UML é muito utilizada em projetos que envolvem o paradigma de programação orientado a objetos. Esta técnica é usada largamente em vários tipos de
aplicações e mostra-se como uma tendência que vai ser usada ainda mais.
Muitas técnicas encontradas na área de engenharia de software dependem
dos conceitos apresentados neste capítulo e espero que isto sirva também para
a sua carreira.
OBJETIVOS
Neste capítulo teremos como objetivo:
• Aprender sobre a modelagem do software.
• Conhecer os conceitos de casos de uso.
• Aprender sobre diagramas de sequências.
• Aprender sobre diagramas de classes.
120 •
capítulo 5
5.1 Introdução
A modelagem de software traz alguns benefícios importantes, melhorando
a comunicação entre os envolvidos no projeto, melhorando o planejamento
e também reduzindo riscos e custos. No entanto, muitos desenvolvedores e
gerentes não compreendem ou não usam adequadamente os recursos que a
modelagem pode oferecer. Em outras situações, é necessário ter um esforço
de convencimento à gerência superior, mesmo a modelagem estando aí durante muitos anos contribuindo para visualização daquilo que será desenvolvido
e permitindo adoção de padrões visuais que muito facilitam a integração da
equipe e o entendimento daquilo que está sendo proposto, justificando alguns
dos benefícios apontados.
Por meio da modelagem, é possível utilizar recursos visuais para representar
tipos de informações distintas, como por exemplo usar diagramas para a arquitetura geral do sistema, dependências do sistema, complexidade, fluxo de informações através de sistemas, requerimentos do negócio, organização e estrutura do
banco de dados, código fonte - incluindo quase todos os aspectos do desenvolvimento orientado a objetos, configurações da instalação, entre outros.
5.2 A modelagem do software
Um sistema ao ser desenvolvido precisa ser modelado como um conjunto de
componentes e de relações entre esses componentes e esta ação faz parte dos
requisitos do sistema e da atividade de projeto. Geralmente a modelagem é ilustrada graficamente em um modelo de arquitetura de sistema, que permite ao leitor uma visão geral da organização do sistema, conforme descreve Sommerville
(2006, p. 22):
A arquitetura do sistema é, geralmente, retratada como um diagrama de blocos, mostrando os subsistemas principais e as interconexões entre esses subsistemas. Cada
subsistema é sentado por um retângulo, no diagrama de blocos, e a existência de uma
relação entre os subsistemas é indicada por flechas que ligam esses retângulos. Os
relacionamentos indicados podem incluir fluxo de dados, uma relação de ‘usa’/’usado
por’ ou algum outro tipo de relação de dependência (SOMMERVILLE, 2006, p. 22).
capítulo 5
• 121
Esse esquema gráfico está ilustrado na figura 5.1, que exibe a decomposição
de um sistema de alarme antifurtos em seus componentes principais. Observe
que os diagramas de blocos devem ser complementados por breves descrições
de cada subsistema, como indica a tabela 5.1 (SOMMERVILLE, 2006, p. 22).
Sensores de
movimento
Sensores de
janela
Controlador
de alarme
Sintetizador
de voz
Alarme
Discador
de telefone
Figura 5.1 – Um sistema simples de alarme antifurto. Fonte: adaptado de Sommerville (2006,
p. 22).
SUBSISTEMAS
DESCRIÇÃO
Sensor de movimento
Sensor de janela
Controlador de alarme
Alarme
Sintetizador de voz
Discador de telefone
Detecta movimento nos cômodos monitorados pelo sistema.
Detecta a abertura de janelas externas do edifício.
Controla a operação do sistema.
Emite um aviso sonoro quando um intruso é detectado.
Sintetiza uma mensagem de voz dando a localização do possível intruso.
Faz as chamadas para avisar a segurança, a polícia, etc.
Tabela 5.1 – Funcionalidade de subsistemas no sistema de alarme antifurtos. Fonte: adaptado de Sommerville (2006, p. 22)
A implementação de um bom software está diretamente relacionada às atividades de modelagem, pois por meio dela constrói-se modelos para comunicar a estrutura e o comportamento desejados do sistema, visualizar e controlar
a arquitetura do mesmo e compreender melhor o sistema que está sendo elaborado (SOUZA e SOUZA, 2014).
Um sistema pode ser projetado a partir de diferentes modelos para desenvolver a modelagem do software. Considerando que um modelo é uma
122 •
capítulo 5
simplificação da realidade, criado para facilitar o entendimento de sistemas
complexos, estes modelos podem abranger planos detalhados, assim como
planos mais gerais com uma visão panorâmica do sistema. Assim, todos os
sistemas podem ser descritos sob diferentes aspectos, com a utilização de modelos diversos, onde cada modelo será, portanto, uma abstração específica do
sistema. Os modelos podem ser voltados para a estrutura, dando ênfase à organização do sistema, ou podem ser voltados ao comportamento, dando ênfase à
dinâmica do sistema (SOUZA e SOUZA, 2014).
Souza e Souza (2014) citam quatro objetivos principais para se criar modelos:
• Eles ajudam a visualizar o sistema como ele é ou como desejamos que ele seja;
• Eles permitem especificar a estrutura ou o comportamento de um sistema;
• Eles proporcionam um guia para a construção do sistema;
• Eles documentam as decisões tomadas no projeto.
Por meio dos modelos, consegue-se obter múltiplas visões do sistema, particionando a complexidade do sistema para facilitar sua compreensão, e atuando como meio de comunicação entre os participantes do projeto. Portanto, uma
linguagem de modelagem padronizada, tal como a UML (Unified Modeling
Language), é fundamental para a construção e o entendimento de bons modelos (SOUZA e SOUZA, 2014).
Dica: A documentação de sistema é uma decisão de negócio, não uma decisão
técnica.
É importante reconhecer que cada vez que você decide manter um modelo ou documento, está realizando uma troca importante- você está renunciando a novas funcionalidades para escrever a documentação. Quando você pára e pensa a respeito disso,
essa troca é uma decisão de negócio, não técnica. Você está trocando funcionalidade
de negócio por um possível risco de diminuição de benefícios que é gerar apenas artefatos permanentes que descrevem o sistema. Portanto, você deve ir até seus clientes e
pedir permissão para investir os recursos deles desta forma, mostrando as vantagens e
desvantagens de fazê- lo. Algumas vezes, eles escolherão manter os artefatos que você
sugeriu e outras vezes aceitarão o risco de não tê-los e diminuir a carga do trabalho. É
uma decisão deles, não sua.
Fonte: Ambler (2004, p. 50)
capítulo 5
• 123
5.2.1 Modelagem ágil
Com um conjunto de práticas formadas por princípios e valores para serem
aplicados nos projetos de softwares, a Modelagem Ágil (MA) é uma metodologia baseada na prática para a modelagem e desenvolvimento eficaz de sistemas.
Apesar dela não definir procedimentos detalhados de como desenvolver um
tipo de modelo, ela oferece práticas simples de modelagem (RIBEIRO, 2014).
Há dois motivos fundamentais para modelar: para compreender o que se
está construindo ou para melhorar a comunicação na equipe ou com os clientes do projeto. É possível escolher modelar os requisitos do sistema com um
diagrama de casos de uso ou com um conjunto de definições de regras de negócio. Também, existe a opção de desenvolver modelos para analisar aqueles
requisitos ou formular uma arquitetura de alto nível ou um desenho detalhado
para seu sistema. Independente da escolha, o objetivo é compreender melhor
um ou mais aspectos de seu sistema. Em outras palavras, o uso dos modelos
tem como finalidade auxiliar a explorar o material com o qual está trabalhando. Além disso, também é possível utilizar modelos para a comunicação entre
membros da equipe ou com agentes externos (AMBLER, 2004, p. 26).
O desenvolvimento de software por meio da utilização de modelagem ágil
não significa o desenvolvimento com pouca modelagem, mas o uso de técnicas
em consonância com os requisitos do projeto. Usualmente utiliza-se a abordagem iterativa para a especificação, desenvolvimento e entrega de software. Esta
abordagem foi criada com o intuito de dar suporte ao desenvolvimento de aplicações de negócios nas quais os requisitos de sistema mudam constantemente
durante o desenvolvimento (RIBEIRO, 2014).
A Modelagem ágil tem três objetivos (RIBEIRO, 2014):
1.
Definir e mostrar a forma de colocar em prática valores, princípios e práticas rela-
tivas a uma modelagem simples e eficaz;
2.
Lidar com a questão de como aplicar as técnicas ágeis nos projetos de software;
3.
Discutir como se podem melhorar as atividades de modelagem adotando os mé-
todos ágeis.
124 •
capítulo 5
E tem como princípios (RIBEIRO, 2014):
• Satisfazer o cliente através da entrega adiantada e contínua de software de valor;
• Aceitar mudanças de requisitos, mesmo que seja no final do desenvolvimento;
• Entregar software funcionando com frequência, com preferência aos períodos mais
curtos;
• As pessoas relacionadas a negócios e a equipe de desenvolvedores devem trabalhar
em conjunto durante o desenvolvimento do projeto;
• É preciso construir projetos ao lado de pessoas motivadas;
• O método mais eficaz e eficiente de transmitir informações é através da conversa
pessoal;
• Software funcional é a medida primária de progresso;
• Processos de desenvolvimento ágil promovem um ambiente sustentável. Os envolvidos no projeto precisam ser capazes de manter indefinidamente passos constantes;
• Contínua atenção a excelência técnica e ao bom design, tende a aumentar a agilidade;
• Simplicidade;
• As melhores arquiteturas, requisitos e designs emergem de times auto-organizáveis;
• Em intervalos regulares a equipe reflete em como ficar mais efetiva, então, organizase e otimiza seu comportamento de acordo .
Atualmente, existem vários métodos ágeis como exemplo a Extreme
Programming (XP), Scrum e Crystal (RIBEIRO, 2014).
Na realidade, a MA é apenas um conjunto de técnicas que refletem os princípios e valores de muitos desenvolvedores de software mais vividos. A pergunta poderia ser colocada: se existe algo como modelagem ágil, é possível dizer
que existem modelos ágeis? A resposta é sim (AMBLER, 2004, p. 28).
Para melhor compreender a Modelagem Ágil, é necessário entender a diferença entre modelo e modelo ágil. “Um modelo é uma abstração que descreve
um ou mais aspectos de um problema ou uma solução possível para ele. Os
modelos são pensados tradicionalmente como diagramas e sua respectiva documentação”(AMBLER, 2004, p. 30).
capítulo 5
• 125
O modelo ágil é um modelo que cumpre seu propósito, sendo compreensível para seu público; simples, preciso, suficiente, consistente e detalhado; e o
investimento realizado na sua criação e manutenção agrega valor positivo ao
projeto (AMBLER, 2004, p. 31).
• Os modelos ágeis cumprem seu propósito;
• Os modelo ágeis são compreensíveis;
• Os modelos ágeis são suficientemente precisos;
• Os modelos ágeis são suficientemente consistente;
• Os modelos ágeis são suficientemente detalhados;
• Os modelos ágeis proporcionam valor positivo;
• Os modelos ágeis são os mais simples possíveis.
(AMBLER, 2004, p. 32)
Seguem abaixo pontos que descrevem o escopo da Modelagem Ágil, facilitando o seu entendimento:
• A MA é uma atitude, não um processo prescritivo;
• A MA é um suplemento dos métodos preexistentes; não uma metodologia completa;
• A MA é complementar aos processos de modelagem;
• A MA é uma maneira de trabalhar em conjunto de modo eficaz para alcançar os objetivos dos clientes do projeto;
• A MA é eficaz e trata de eficácia;
• A MA é algo que funciona na prática; não uma teoria acadêmica;
• A MA não é uma bala de prata (silver bullet*);
• A MA foi feita para o desenvolvedor médio, mas não é uma substituição de pessoas
competentes;
• A MA não é um ataque à documentação;
• A MA não é um ataque às ferramentas CASE.
(AMBLER, 2004, p. 32)
126 •
capítulo 5
Fazendo a UML Funcionar na Prática
As seguintes estratégias devem ajudá-lo a fazer a UML trabalhar para você na
prática:
Use a UML como sua base de modelagem. Para o desenvolvimento orientado
a objetos ou baseado em componentes, você deve usar a UML como um conjunto básico de técnicas de modelagem que é então suplementado com outras técnicas para
satisfazer às suas necessidades específicas. Além disso, eu não substituiria a UML por
outros artefatos. Embora esteja convencido de que minha própria notação para modelagem de classes (Ambler, 1995) seja superior à da UML, na realidade, ela não é de
uso comum e, portanto, se você utilizá-la dificultará a compreensão dos diagramas para
outras pessoas, o que reduzirá a comunicação na equipe de projeto.
Adote um subconjunto básico da notação. Se você precisar de apenas 20%
da notação da UML para realizar 80% do trabalho de modelagem, comece com esses
20% básicos.
Eduque todos os desenvolvedores na UML.
Cuidado com a propaganda exagerada. Um efeito colateral infeliz da popularidade da UML é que os vendedores, consultores e até os metodologistas a utilizam
muito para fazer marketing. É bom um consultor ser especialista em UML, mas o que
você realmente precisa é de um especialista em desenvolvimento. Sempre que uma
nova tecnologia, como a XML ou a .NET ou uma nova técnica, como a XP, é lançada, os
membros da comunidade UML se apressam em seguir a moda e escrever livros como
"[Nova Palavra da Moda] e a UML" ou "UML para [Nova Palavra da Moda]". Na minha
opinião, em vez de fazer a pergunta "Como aplicamos a UML com a [Nova Palavra da
moda]?", eles deveriam perguntar "Como modelamos uma aplicação baseada em [Nova
Palavra da moda]?".
Fonte: AMBLER (2004, p. 169)
capítulo 5
• 127
5.3 UML (Unified Modeling Language)
Foi desenvolvida uma linguagem de modelagem unificada, denominada UML
- Unified Modeling Language, com o intuito de padronizar a notação utilizada na representação dos sistemas. A UML, apresentada por Booch, Jacobson e
Rumbaugh (2000), foi criada a partir dos principais métodos orientados a objetos. A UML pode ser utilizada em sua notação, independente do processo de
software adotado (MACHADO e PEREIRA, 2006). Cada um dos autores possuía
sua própria forma de criar modelos e a UML é a união dessas três abordagens,
adicionando novos conceitos e visões de linguagem (SOUZA e SOUZA, 2014).
A UML é uma linguagem que trouxe a possibilidade de padronizar a modelagem orientada a objetos, de forma que qualquer sistema possa ser modelado
qualquer sistema possa ser modelado, atualizado e compreendido. Antes disso
havia diversos padrões para se criar modelos de software, o que dificultava o
trabalho pela falta de padronização (SOUZA e SOUZA, 2014).
“A UML é uma linguagem muito expressiva, abrangendo todas as visões necessárias ao desenvolvimento e implantação de sistemas de software em geral”
(SOUZA e SOUZA, 2014).
UML pode ser empregada para visualização, especificação, construção e
documentação de artefatos de software, sendo uma linguagem padrão para a
elaboração da arquitetura de projetos de software que aborda o caráter estático
e dinâmico do sistema a ser analisado (SOUZA e SOUZA, 2014).
Já no período de modelagem a UML considera todas as futuras características do sistema, relacionadas a trocas de mensagens entre as diversas partes
do sistema, o padrão arquitetural adotado e os padrões de projeto utilizados
(SOUZA e SOUZA, 2014).
A linguagem UML é usada no desenvolvimento dos mais diversos sistemas, variando
desde sistemas de pequeno porte, tais como um sistema de comércio eletrônico para
uma livraria, a sistemas de grande porte, como um sistema de transações bancárias. Ela
pode abranger várias características de um sistema em um de seus diagramas, sendo
aplicada nas diferentes atividades do desenvolvimento de software, desde a especificação de requisitos até a implementação e os testes (SOUZA e SOUZA, 2014).
A UML imprime a necessidade de que o analista modele o sistema como
estado da arte da orientação a objetos. Como dito anteriormente, o fato dela
contemplar o estado estático, bem como o dinâmico dos objetos e classes modelados, faz com que ela seja bastante interessante.
128 •
capítulo 5
Há uma confusão conceitual com relação a UML. Ela é uma linguagem de
modelagem e não um método de desenvolvimento. Na UML não há a sequência de passos para se desenvolver um software nem para se modelar. O foco
da UML é representar o sistema utilizando diagramas comuns e integrados e
envolvendo as questões estáticas e dinâmicas de um sistema de informação.
A UML permite elaborar diversos diagramas. Estes diagramas podem ser
para visualização, especificação, construção e documentação de diversas partes do sistema em diversas etapas do ciclo de vida. São vários os tipos de diagramas que permitem modelar aspectos dinâmicos do sistema por meio da UML
(LEITE, 2000b). Os diagramas da UML são apresentados na tabela 5.2.
DIAGRAMA DE
COMPORTAMENTO EXTERNO
DIAGRAMAS DE
COMPORTAMENTO INTERNO
Diagrama de casos de uso
Diagrama de classes
Diagrama de objetos
Diagrama de sequência
Diagrama de colaboração
DIAGRAMAS ESTRUTURAIS
Diagrama de estados
Diagrama de atividades
DIAGRAMAS DE
IMPLEMENTAÇÃO
Diagrama de componentes
Diagramas de execução
Tabela 5.2 – Diagramas da UML.
capítulo 5
• 129
5.3.1 Aplicação
Devido a quantidade de diagramas presentes na UML, é possível usá-las praticamente em qualquer tipo de sistema mesmo os que não estejam aplicando a
tecnologia orientada a objetos.
Os diagramas permitem que eles possam ser aplicados em diferentes fases
de desenvolvimento dos ciclos de vida já estudados, desde a especificação da
análise até o final do projeto nas fases de testes.
A aplicação principal da UML é descrever qualquer tipo de sistema em termos de diagramas orientados a objetos. Ela pode ser inclusive usada para modelar sistemas mecânicos, sem uso de software.
A maioria dos sistemas existentes possuem características de tempo real,
banco de dados, interação com o usuário por meio de telas e outras. A UML
suporta modelagens para todos estes tipos.
Os seguintes links mostram exemplos de aplicação da modelagem UML:
• http://migre.me/oDEbg
• Contém um exemplo completo com vários diagramas sobre um mesmo sistema.
• http://migre.me/oDEeG
• Possui vários links com modelos UML completos
• http://migre.me/oDEfG
• Neste artigo o autor mostra um exemplo de modelagem passo a passo.
5.4 Casos de Uso
Vale ressaltar que um caso de uso modela uma interação completa entre um
ator e o sistema. Geralmente, cada requisito funcional gera pelo menos um
caso de uso. É importante ter cuidado para não detalhar, criar muitos casos de
uso, já que o excesso de detalhes pode gerar maior gasto de tempo na modelagem, sem contribuir para a qualidade do produto final (MELLO, 2005, p. 107).
Há diversas maneiras de descrever casos de uso. Pode ser desde uma descrição de alto nível, com poucas sentenças até uma descrição expandida, com
maior detalhamento do diálogo entre ator e sistema (MELLO, 2005, p. 108).
130 •
capítulo 5
As descrições expandidas são importantes em casos de uso em grandes projetos, pois nestes o trabalho tende a ser dividido em diversas equipes e a comunicação é executada por escrito. Já em equipes menores, o natural é que a
mesma equipe seja responsável por todo o trabalho de desenvolvimento, desde
os requisitos até a implantação e suporte (MELLO, 2005, p. 108).
Os casos de uso foram definidos como parte da metodologia de Jacobson:
Object-oriented Analysis and Design - The User Case Driven Approach. A linguagem de modelagem UML apresenta notações para a representação de casos
de uso (LEITE, 2000b).
Um caso de uso é capaz de especificar o comportamento do sistema a ser desenvolvido. Porém não especifica como este comportamento será implementado. “Os comportamentos descrevem as funções da aplicação que caracterizam
a funcionalidade do sistema. Um caso de uso representa o que o sistema faz e
não como o sistema faz, proporcionando uma visão externa e não interna do
sistema” (LEITE, 2000b).
O processo de desenvolvimento é direcionado pelos casos de uso. Baseandose no modelo de casos de uso os desenvolvedores elaboram os modelos de projeto e implementacão.
São os responsáveis pelos testes que têm o objetivo de garantir que os componentes do modelo de implementação cumpram corretamente os objetivos
estabelecidos nos casos de uso. Assim, percebe-se que os casos de uso, além
de iniciarem o processo de desenvolvimento, também o mantêm em coesão.
“Direcionado a casos de uso significa que o processo de desenvolvimento executa uma seqüência de tarefas derivadas dos casos de uso. Eles são especificados, projetados e servem de base para a construção dos casos de teste”(MARTINS, 2014).
De acordo com Falbo (2002), os casos de uso têm dois importantes papéis:
1.
Eles capturam os requisitos funcionais de um sistema. Um modelo de caso
de uso define o comportamento de um sistema (e a informação associada) através de
um conjunto de casos de uso. O ambiente do sistema é definido pela descrição dos
diferentes usuários. Estes usuários utilizam o sistema através de um número de casos
de uso.
capítulo 5
• 131
2.
Eles oferecem uma abordagem para a modelagem de sistemas. Para ge-
renciar a complexidade de sistemas reais, é comum apresentar os modelos do sistema
em um número de diferentes visões. Em uma abordagem guiada por casos de uso, pode-se construir uma visão para cada caso de uso, isto é, em cada visão são modelados
apenas aqueles elementos que participam de um caso de uso específico. Um particular
elemento pode, é claro, participar de vários casos de uso. Isto significa que um modelo
do sistema completo só é visto através de um conjunto de visões - uma por caso de uso.
Encontra-se todas as responsabilidades de um elemento de modelo, olhando todos os
casos de uso onde este tem um papel.
Casos de uso são uma ferramenta essencial na captura dos requisitos de um
sistema, e possuem um papel fundamental no planejamento e controle de projetos iterativos (FALBO, 2002).
A primeira atividade a ser realizada no desenvolvimento, propriamente
dito, A é a captura dos casos de uso. Normalmente, a maioria dos casos de uso
é gerada durante a fase de levantamento de requisitos, mas outros casos de uso
podem ser descobertos à medida que o trabalho prossegue. Todo caso de uso é
um requisito potencial e, enquanto um requisito não é capturado, não é possível planejar como tratá-lo (FALBO, 2002).
Geralmente, em primeiro lugar, casos de uso são listados e discutidos, para
só então, se realizar alguma modelagem. Entretanto, em alguns casos, a modelagem conceitual ajuda a descobrir casos de uso (FALBO, 2002).
5.4.1 Diagramas de Caso de Uso
Com o objetivo de descrever e definir os requisitos funcionais do sistema, são
utilizados os diagramas de caso de uso. O modelo de caso de uso consiste de
atores e casos de uso. Nos diagramas atores representam uma entidade externa
ao sistema como um usuário, um hardware ou outro sistema que interage com
sistema modelado. O diagrama representa uma sequência de ações executadas
pelo sistema ao receber um dado do ator.
“Um caso de uso é representado por uma elipse. Cada caso de uso distingue-se de um outro por um nome que normalmente é um verbo seguido do seu
objeto” (LEITE, 2000b).
132 •
capítulo 5
Os casos de uso mostram o comportamento do sistema, cenários que o sistema percorre em resposta ao estímulo de um ator.
Os atores são conectados a casos de uso por uma associação representadas por uma
linha. O comportamento associado a cada caso de uso pode ser descrito como um
cenário. Cada cenário descreve textualmente o fluxo de eventos ou seqüência que
caracteriza o comportamento do ator e as respostas do sistema. Um cenário é uma
instância do caso de uso (LEITE, 2000b).
O relacionamento entre um ator e um caso de uso representa a participação
deste ator no caso de uso. Existem, também, dois outros tipos de relacionamentos entre casos de uso:
• Relacionamento estender - é representado graficamente por uma seta
com um o estereótipo <<extends>>, mostrando que o caso de uso destino pode
incluir o comportamento especificado pelo caso de uso origem.
• Relacionamento usar - é representado por uma seta com o estereótipo
<<uses>>, mostrando que o caso de uso origem inclui o comportamento especificado pelo caso de uso destino.
Estabelecer limites
Atualizar contas
Gerente comercial
Sistema de contabilidade
Analisar riscos
<<uses>>
Avaliar negócio
<<uses>>
Fechar preços
Ator
Analista comercial
Registrar negócios
Generalização
Vendedor
<<extends>>
Negócios com
limites excedidos
Caso de uso
Figura 5.2 – Diagrama de casos de uso. Fonte: Fowler e Scott (2004).
capítulo 5
• 133
Pode-se dizer que um diagrama de casos de uso é formado por (LEITE,
2000b):
• Casos de uso
• Atores
• Relacionamentos de dependência, generalizações e associações
Seguem abaixo as regras para modelar os requisitos de software de um sistema (LEITE, 2000b):
• Estabeleça o contexto do sistema identificando os atores (usuários e sistemas externos) associados a ele.
• Para cada ator, considere o comportamento que cada um deles espera ou requer que
o sistema possua, para que as suas metas sejam satisfeitas.
• Considere cada um destes comportamentos esperados como casos de uso, dando
nomes para cada um deles.
• Analise os casos de uso tentando identificar comportamentos comuns a mais de
um deles. Defina esta parte comum como caso de uso genérico, estabelecendo um
relacionamento de generalização. Tente identificar outros relacionamentos, como a dependência entre casos de uso que incluem o comportamento de outros .
• Modele estes casos de uso, atores e seus relacionamentos em diagramas de casos
de uso.
• Complemente estes casos de uso com notas que descrevam requisitos não-funcionais.
Além das regras acima, há algumas informações importantes que auxiliam
na construção de diagramas mais claros (LEITE, 2000b).
• Dê nomes que comuniquem o seu propósito.
• Quando existirem relacionamentos, distribua os casos de uso de maneira a minimizar
os cruzamentos de linhas.
• Organize os elementos espacialmente de maneira que aqueles que descrevem comportamento associados fiquem mais próximos.
• Use notas para chamar a atenção de características importantes - as notas não são
apenas para os requisitos não funcionais.
• Não complique o diagrama, coloque apenas o que é essencial para descrever os requisitos. O diagrama deve ser simples sem deixar de mostrar o que é relevante.
134 •
capítulo 5
5.4.2 Descrição de Casos de Uso
Um caso de uso deve descrever o que um sistema faz. Apenas o diagrama de
caso de uso não conseguiria cumprir este objetivo. Desta forma, é importante
que o comportamento de um caso de uso tenha seu fluxo de eventos descrito
textualmente, de maneira que um agente externo possa compreendê-lo. “Ao escrever o fluxo de eventos, deve-se incluir como e quando o caso de uso inicia e
termina, quando o caso de uso interage com os atores e outros casos de uso e
quais são as informações transferidas e o fluxo básico e fluxos alternativos do
comportamento” (FALBO, 2002, p. 26).
Após ter o conjunto inicial de casos de uso estabilizado, é importante que
cada um deles seja descrito com maior detalhamento. Primeiramente, deve-se
descrever o fluxo de eventos principal (básico). Variantes do curso básico de
eventos e erros que possam vir a ocorrer devem ser descritos em cursos alternativos. É usual que um caso de uso tenha apenas um único curso básico, porém
inúmeros cursos alternativos (FALBO, 2002, p. 26).
5.5 Diagramas de Classes
Ao conjunto de objetos com propriedades, comportamento, relacionamentos
e semântica comuns, dá-se o nome de Classe. Uma classe pode ser entendida
como um esqueleto ou modelo para se criar objetos. “Objeto é uma abstração
que representa uma entidade do mundo real, podendo ser algo concreto (computador, carro) ou abstrato (transação bancária, histórico, taxa de juros)” (TACLA, 2013, p. 7).
O diagrama de classes talvez seja o diagrama mais importante e usado na
UML. É ele quem modela a estrutura estática das classes de um sistema. No
diagrama são mostradas as associações entre as classes e seus tipos, a especificação das classes, especializações e generalizações e os agrupamentos em
pacotes.
O interessante do diagrama de classes é que ele pode ser implementado
usando alguma linguagem de programação orientada a objetos. Existem várias
ferramentas CASE que após o desenho do diagrama de classes gera o código em
Java, C++, C#, etc.
capítulo 5
• 135
Veja um exemplo de um diagrama de classes na figura 5.3.
Cliente
1
0..*
Possui
Contrato de
aluguel
0..*
1
Refere a
0..1
Veículo alugado
Tipo de veículo
Possui
Caminhão
Carro sport
Carro de passeio
Companhia de
aluguel de veículos
Figura 5.3 – Diagrama de classes. Fonte: Fowler e Scott (2004).
5.6 Diagrama de Objetos
É uma variação do diagrama de classes e possui praticamente a mesma notação. A diferença é que este mostra objetos que foram instanciados das classes.
Ele mostra o sistema em um determinado momento. Usa a mesma notação do
diagrama de classes, mas com duas exceções: os objetos são escritos com os nomes sublinhados e todas as instâncias em um relacionamento são mostradas.
Os diagramas de objetos são úteis para exemplificar diagramas de objetos
muito complexos, ajudando em sua compreensão. São também usados para
mostrar a colaboração dinâmica dos objetos.
Pablo: cliente
Nome: “Pablo F. Barros”
Idade: 20
CPF: 94168912-15
2678: contrato de aluguel
Num_contrato: 2678
Veículo: “BMW 914”
Figura 5.4 – Diagrama de objetos.
136 •
capítulo 5
2679: contrato de aluguel
Num_contrato: 2679
Veículo: “Audi V8”
5.7 Diagramas de estados
Mostra todos os estados possíveis dos objetos de uma classe, bem como os
eventos que devem ocorrer que provocam a tais mudanças de estado. Eles mostram o comportamento dinâmico de um sistema, mostrando o ciclo de vida de
um objeto.
A UML utiliza como notação para diagramas de estados a notação proposta
por Harel. Nesta notação, um diagrama de estados é um grafo dirigido cujos nodos representam estados e cujos arcos representam transições entre estados.
Estados são representados graficamente por elipses ou retângulos com bordas
arredondadas e transições são representadas por segmento de retas dirigidas.
O estado inicial é representado por um ponto de início e podem existir vários
pontos de finalização.
No térreo
Subir (andar)
Subindo
Chegar no térreo
Chegar no andar
Indo para
o térreo
Descendo
Chegar no andar
Subir (andar)
Parado
Descer (andar)
Tempo de espera
Figura 5.5 – Diagrama de estados.
5.8 Diagramas de sequência
Em um diagrama de seqüência, um objeto é mostrado como um retângulo com uma
linha vertical pontilhada anexada. Esta linha é chamada de linha de vida do objeto e
representa a “vida” do objeto durante a interação. Cada mensagem é representada por
uma seta cheia entre as linhas de vida de dois objetos. A ordem na qual as mensagens
ocorrem é mostrada do alto para o pé da página. Cada mensagem é rotulada com pelo
menos o nome da mensagem. Adicionalmente, pode incluir também seus argumentos
e alguma informação de controle (FALBO, 2002, p. 71).
capítulo 5
• 137
O diagrama de sequência, mostrado na figura 5.6, tem como objetivo representar a interação e relacionamento entre os objetos possibilitando assim visualizar a sequência de mensagens trocadas entre eles.
Os objetos são mostrados em linhas verticais. No caso da figura 6, os objetos
são: computador, servidor de impressão, impressora e fila.
A sensação temporal do diagrama é percebido analisando-o no sentido vertical, de cima para baixo. As mensagens enviadas por cada objeto são representadas por setas entre os objetos relacionados.
No diagrama do exemplo, as mensagens são:
• imprimir (arquivo);
• impressora livre;
• impressora ocupada.
Como podemos perceber, existem dois eixos no diagrama de sequência: o
eixo vertical que mostra a linha de vida de cada objeto e o diagrama horizontal
que mostra o fluxo de mensagens trocadas entre eles.
O diagrama de sequência normalmente está associado ao comportamento
de um único caso de uso e, também, podem representar um determinado cenário do sistema.
Computador
Servidor de
impressão
Impressora
Fila
(Impressora livre)
Imprimir (arquivo) Imprimir (arquivo)
(Impressora ocupada)
Imprimir (arquivo)
Figura 5.6 – Diagrama de sequência.
Para facilitar a compreensão de um diagrama de sequência, é possível utilizar uma técnica que consiste em colocar descrições de texto dos acontecimentos do lado esquerdo do diagrama de sequência (FALBO, 2002).
138 •
capítulo 5
5.9 Diagrama de Colaboração
Mostra a colaboração dinâmica entre os objetos, porém mostra a sequência
cronológica do cenário que esta sendo modelado.
Se a ênfase do diagrama for o decorrer do tempo, é melhor escolher o diagrama de sequência, mas se a ênfase for o contexto do sistema, é melhor dar
prioridade ao diagrama de colaboração.
O diagrama de colaboração é desenhado como um diagrama de objeto,
onde os diversos objetos são mostrados juntamente com seus relacionamentos. As setas de mensagens são desenhadas entre os objetos para mostrar o
fluxo de mensagens entre eles. As mensagens são nomeadas, que entre outras
coisas mostram a ordem em que as mensagens são enviadas. O diagrama de
colaboração também pode conter objetos ativos, que executam paralelamente
com outros.
Computador
(Impressora ocupada)
1.2: Armazenar (arquivo)
Fila
1: Imprimir (arquivo)
Servidor de
impressão
(Impressora livre)
1.1: Imprimir (arquivo)
Impressora
Figura 5.7 – Diagrama de colaboração.
5.10 Diagrama de Atividade
A figura 5.8 mostra um típico diagrama de atividades.
Os diagramas de atividade são representações gráficas de fluxos de informações de atividades sequenciais e ações nestas atividades. O diagrama suporta escolhas, iterações e concorrência (paralelismo).
Os diagramas podem ser usados basicamente para descrever os fluxos de
negócio e operacionais passo a passo dentro de um sistema. Em resumo, o diagrama de atividades mostra o fluxo de controle geral do sistema.
capítulo 5
• 139
Na Figura 8 é possível perceber o fluxo de informações de uma determinada
atividade do sistema. No caso a atividade é a “Imprimir arquivo()”. Perceba que
este diagrama pode mostrar como deverá ser a implementação deste método
de uma classe de impressão, por exemplo.
(Disco cheio)
Imprimir arquivo ( )
(Espaço em disco)
Remover caixa
de mensagem
Impressora
imprimir (arquivo)
Mostrar caixa de
mensagem
“Disco cheio”
Mostrar caixa de
mensagem
“Imprimindo”
Criar arquivo
Postscript
Figura 5.8 – Diagrama de atividade.
5.11 Diagrama de Componentes
A figura 5.9 mostra um diagrama de componentes da UML. Observe que existem arquivos .dll e .exe de uma parte de um sistema que está sendo modelado
pela UML.
Pela figura, é possível perceber que o diagrama de componentes mostra
os vários componentes em um sistema e suas dependências. É um diagrama
físico.
Um componente pode ser um módulo físico do sistema. Pode ser um pacote de software, uma biblioteca (dll por exemplo), enfim, os componentes são
a implementação na arquitetura física do que foi especificado na arquitetura
lógica do sistema.
As dependências entre os componentes, representadas pelas linhas tracejadas, mostram como mudanças em um componente podem causar mudanças em outros componentes. Existem vários tipos de dependência porém o uso
mais comum na representação é a comunicação entre os componentes.
140 •
capítulo 5
Gerenciador de
comunicação
Gráficos
Comm.dll
Graficos.dll
Gerenciador de
banco de
dados
Db.dll
Aplicação
App.exel
Figura 5.9 – Diagrama de componente. Fonte: Fowler e Scott (2004).
5.12 Diagrama de Execução
Mostra a arquitetura física do sistema (hardware e software), juntamente com
as conexões entre si. Pode-se também mostrar os tipos de conexão entre eles.
É a última descrição física da topologia do sistema, descrevendo a estrutura de
hardware e software que executam em cada sistema.
O diagrama de execução é composto por componentes, que possuem a
mesma simbologia dos componentes do diagrama de componentes, nodes,
que significam objetos físicos que fazem parte do sistema, podendo ser uma
máquina cliente numa LAN, uma máquina servidora, uma impressora, um roteador, etc., e conexões entre estes nodes e componentes que juntos compõem
toda a arquitetura física do sistema.
Cliente A:
Pentium 200
MMX
Cliente B:
Pentium 200
MMX
<<TCP/IP>>
Servidor de
aplicação:
HP/UX
SQL<<TCP/IP>>
Servidor de
banco de
dados:
ORACLE
<<TCP/IP>>
Figura 5.10 – Diagrama de execução.
capítulo 5
• 141
ATIVIDADES
Vamos praticar um pouco os conceitos aprendidos. Responda às seguintes questões:
01. Você conhece algum software que trabalha com modelagem? Se sim, cite e comente
sobre ele. Caso não conheça, pesquise alguns dos mais utilizados na internet e comente suas
principais características.
02. A UML pode ser considerada uma metodologia de desenvolvimento de sistemas. Esta
afirmação esta correta? Justifique.
03. Nos diagramas de casos de uso, o que ou quem pode ser considerado atores? Justifique
e dê um exemplo.
04. Em quais situações é recomendável utilizar diagramas de sequência? Justifique.
05. Em quais situações é recomendável utilizar diagramas de classes? Justifique.
REFLEXÃO
Modelar para construir. Isto não lhe parece óbvio? Evidentemente que para a área de software isto não seria diferente e assim como ocorre em outras áreas da engenharia, a engenharia
de software também possui suas formas de notações, métodos e técnicas para efetuar projetos de sistema. O paradigma de orientação a objetos é uma forma de fundamentar outras
áreas do conhecimento na engenharia de software.
Imagine se todos no mundo, em diferentes países, adotassem à seu modo os seus critérios e padrões de desenhos ao modelar algo. Como seria? Consegue imaginar a dificuldade
que seria se cada país, ou ainda em diferentes regiões de um mesmo país tivessem várias
formas de anotar um determinado procedimento, uma ação, um processo, uma classe, um
objeto e assim por diante?
A UML traz esta possibilidade junto à necessidade de se padronizar notações por meio
de uma linguagem unificada de modelagem. Ela permite que diagramas sejam utilizados e
interpretados por pessoas com conhecimento técnico de todas as partes do mundo, proporcionando um ganho nas anotações, esquemas e diagramas dando sentido à modelagem de
sistemas de todo os tipos, com diferentes focos, por meio de seus diagramas.
142 •
capítulo 5
Enfim, atualmente temos disponíveis vários métodos, técnicas, ferramentas e modelos
a serem seguidos e aperfeiçoados no mundo da engenharia de software e por isso, os trabalhos e atividades relacionadas aos requisitos de sistema tendem otimizar e melhorar cada
vez mais.
LEITURA
Além de livros e guias que são fundamentais para complementar o estudo sobre modelagem
e UML, na internet existem vários tutoriais a materiais que muito contribuem para a aprendizagem.
• http://migre.me/oKWVm - Este link leva à um site (Case-Tools) contém várias ferramentas
UML gratuitas e proprietárias. É necessário realizar um cadastro.
• UML.org - O site da principal referência da UML, onde os novos padrões são estabelecidos
e divulgados.
• http://migre.me/oKXbj - Link para um excelente site sobre introdução a UML, em inglês.
• Booch, G.; Rumbaugh, J.; Jacobson, I. UML: guia do usuário. São Paulo: Campus, 2006.
Excelente livro com uma boa visão sobre UML.
REFERÊNCIAS BIBLIOGRÁFICAS
AMBLER, S. W.; Modelagem Ágil - Práticas eficazes para a Programação Extrema e o Processo
Unificado. Bookman. 2004. 351p.
FALBO, R. A.; Análise de Sistemas. UFES. 2012. 120p.
FOWLER, M,; SCOTT, K. UML essencial. Porto Alegre: Bookman, 2004.
LEITE, J. C.; Análise e Especificação de Requisitos. 2000b. Disponível em: <http://www.dimap.ufrn.
br/~jair/ES/c4.html>. Acesso em: 10 dez 2014.
MACHADO, I. M. R.; PEREIRA, L. M.; Processo de Desenvolvimento de Software Livre: Um
Estudo de Caso do Projeto EAD Livre. Simpósio Mineiro de Sistemas, 2006. Disponível em:
<http://homepages.dcc.ufmg.br/~ivre/Artigo1.pdf>. Acesso em 17 dez 2014.
MARTINS, V.; Processo Unificado. Disponível em: <http://www.batebyte.pr.gov.br/modules/
conteudo/conteudo.php?conteudo=1227>. Acesso em 15 dez 2014.
MELLO, J. A. B.; Uma Metodologia para Engenharia de Requisitos para Pequenas Equipes de
Desenvolvimento de Software. Rev. Ciên. Empresariais da UNIPAR, Toledo, v.6, n.1, 2005. 97-111p.
capítulo 5
• 143
RIBEIRO, C. F. Modelos de desenvolvimento de software. Revista .Net Magazine 101. Disponível
em: <http://www.devmedia.com.br/modelos-de-desenvolvimento-de-software-revista-netmagazine-101/26747>. Acesso em: 15 dez 2014.
SOMMERVILLE, I. Engenharia de Software, 6ª edição. Editora Pearson do Brasil, 2003. 292p.
SOUZA, C. A. R.; SOUZA, V. E. S..; Modelagem de software com UML - Parte 1. Easy Java
Magazine 4. Disponível em: <http://www.devmedia.com.br/modelagem-de-software-com-uml-parte-1easy-java-magazine-4/20140>. Acesso em 12 dez 2014.
TACLA, C. A.; Análise e Projeto OO & UML 2.0. UTFPR. 2013. 97p. Disponível em: <http://www.
dainf.ct.utfpr.edu.br/~tacla/UML/Apostila.pdf>. Acesso em: 12 jan 2015.
GABARITO
Capítulo 1
01. Letra “a”.
02. As RTF tem como objetivos: (1) descobrir erros na função, lógica ou implementação
para qualquer representação do software; (2) verificar se o software que está sendo revisado atende aos requisitos propostos; (3) garantir que o software foi representado de acordo
com padrões predefinidos; (4) obter software que seja desenvolvido de maneira uniforme; e
(5) tornar os projetos mais gerenciáveis. Um ponto interessante de se observar é que além
disso, a RTF também serve como base de treinamento, possibilitando que engenheiros mais
novos observem diferentes abordagens para análise, projeto e implementação de software,
contribuindo ainda mais para a qualidade.
03. Um processo de software sem controle resulta em processos improvisados pelos desenvolvedores e gerência. Não é rigorosamente seguido e o cumprimento das metas não
é controlado. O processo passa a ser altamente dependente da qualidade e experiência
dos profissionais envolvidos. E diminui a visão de progresso e qualidade do processo. A
qualidade do produto fica comprometida e os prazos dificilmente são cumpridos. Possui alto
risco quando é necessária a utilização de novas tecnologias, por depender diretamente da
experiência dos profissionais. Além de tornar muito difícil prever a qualidade final do produto.
O processo passa a ser constantemente reativo a situações inesperadas e problemas ao
invés de ser pró-ativas, não havendo tempo para melhorias. De forma geral, o “fogo” esta
144 •
capítulo 5
sob controle, mas esta quase sempre “apagando incêndios”, fazendo com que os envolvidos
tenham “queimaduras” constantes. Com isso sempre sobram “cinzas” que podem facilmente
voltar a se incendiar mais tarde.
04. Para que um software seja considerado “de qualidade”, é necessário que este tenha
conformidade com alguns conceitos:
• Correção: deve funcionar de forma correta. Satisfazendo as suas especificações sem falhas ou erros;
• Integridade: suas especificações satisfazem os requisitos dos usuários e da organização;
• Flexibilidade: deve prever que o usuário pode agir de forma não esperada e deve ser
capaz de resistir a eventuais situações sem falhas;
• Confiabilidade: deve se comportar como esperado e não falhar em situações inesperadas;
• Eficiência: deve realizar suas tarefas em tempo adequado à complexidade de cada um
deles. E devem utilizar de modo eficiente os recursos de hardware disponíveis;
• Reusabilidade: os componentes do software devem permitir ser reutilizados em outras
aplicações;
• Usabilidade: deve ser fácil de aprender e de usar, permitindo maior produtividade do usuário, flexibilidade de utilização e aplicação e proporcionar satisfação ao usuário;
• Manutenibilidade: deve permitir fácil manutenção para que correções ou atualizações
sejam realizadas de modo fácil e eficiente;
• Evolutibilidade: deve permitir expansão de suas funcionalidades para atender novos requisitos ou incorporar novas tecnologias;
• Portabilidade: deve poder ser executado no maior número possível de equipamentos;
• Interoperabilidade: deve ser capaz de interagir com diferentes sistemas e plataformas.
05. Não é a mesma coisa. Qualidade e segurança são diferentes, dentro do contexto de
software. No entanto, a segurança pode ser um fator que determina a qualidade em um software, se esta for um requisito desejado. Qualidade de software pode ser definida como um
conjunto de atributos de software que devem ser satisfeitos de modo que o software atenda
às necessidades dos usuários. A determinação dos atributos relevantes a cada sistema depende do domínio da aplicação, das tecnologias utilizadas, das características específicas do
projeto e das necessidades do usuário e da organização.
capítulo 5
• 145
Capítulo 2
01. As principais dificuldades para uma empresa ou organização implantar uma norma de
qualidade de produtos de software estariam relacionadas à mudança ou readequação dos
processos da mesma, podendo causar grandes resistências entre os colaboradores, dependendo da cultura organizacional ali existente, bem como exigir um nível de maturidade (quanto a processos) para que as normas sejam implantadas com sucesso. Ter o apoio da alta gerência é essencial, bem como o apoio de todos os envolvidos neste processo de mudanças.
02. O impacto seria negativo, com softwares de baixa qualidade. Portanto, é praticamente
impossível desenvolver softwares de qualidade sem qualquer tipo de controle de processos,
uma vez que estes são essenciais para o êxito da qualidade do software. No entanto, caso
não seja considerado os aspectos de qualidade em um software, aí sim podemos considerar
que é possível desenvolver softwares sob estas condições, mas totalmente desprovidos de
qualidade.
03. Esta é uma pergunta que solicita sua opinião; pense e reflita sobre ela. Julgar que todas
as empresas devam implantar uma norma pode parecer utópico, mas seria o ideal, pois assim
as organizações estariam alcançando altos níveis de maturidade e estariam sempre buscando a melhoria contínua.
04. A ISO publicou uma norma que representa uma padronização mundial para a qualidade
de produtos de software, trata-se da norma ISO/IEC 9126 e foi publicada em 1991. Esta
norma é uma das mais antigas da área de qualidade de software e possui uma tradução
para o Brasil, publicada em agosto de 1996 como NBR 13596. Esta norma apresenta um
conjunto de características que devem ser verificadas em um software para que ele seja
considerado um “software de qualidade”.
05. A qualidade de um software está diretamente relacionada à qualidade de seus processos, pois estes são determinantes para o resultado final do produto de software. O controle
dos processos e das atividades realizadas em todo o ciclo de desenvolvimento do software
irão ser determinando para o resultado da qualidade.
Capítulo 3
01. Diversos problemas podem ocorrer durante a atividade de levantamento de requisitos,
sendo que os principais identificados, de acordo com Santos (2004, p. 24), são:
• o conhecimento do domínio do negócio encontra-se espalhado por diversos meios, tais
como: livros, sistemas existentes, manuais de operação, envolvidos, etc.;
146 •
capítulo 5
• o tempo escasso e a disponibilidade dos envolvidos;
• fatores políticos e organizacionais, podendo não ser muito clara sua existência aos envolvidos;
• os envolvidos não sabem exatamente o que fazem, o que precisam e o que querem que
seja desenvolvido.
02. Em algumas situações é mais fácil reunir analistas e usuários para simular situações
reais e necessárias no futuro sistema do que tentar estabelecer as necessidades por meio
de outros métodos mais abstratos. Para isto são usados os cenários. Os cenários servem
para revelar detalhes que não foram percebidos e adicioná-los aos esboços dos requisitos.
O estabelecimento dos cenários pode ser feito informalmente com os analistas trabalhando
com os usuários principais ou fomentadores do projeto a fim de identificar os usuários operacionais e captar detalhes, ou outras formas. Os cenários são muito usados nos métodos
ágeis de desenvolvimento.
03. Requisitos não-funcionais: São restrições sobre os serviços ou as funções oferecidos pelo Sistema. Entre ele: destacam-se restrições de tempo, restrições sobre o processo
de desenvolvimento, padrões, entre outros. Exemplos: Não poderão ocorrer perdas de informações; O sistema deverá ter alta disponibilidade; O sistema deverá ser executado em
qualquer navegador; O sistema deverá comportar com velocidade satisfatória, com menos
de 3 segundos.
04. Letra “c”
05. Vamos deixar aqui a definição dada por Leite (2000b) para que você compare com a
sua resposta: Requisitos são objetivos ou restrições estabelecidas por clientes e usuários
do sistema que definem as diversas propriedades do sistema. Os requisitos de software são,
obviamente, aqueles dentre os requisitos de sistema que dizem respeito a propriedades do
software. Sendo assim, um conjunto de requisitos pode ser definido como uma condição ou
capacidade necessária que o software deve possuir para que o usuário possa resolver um
problema ou atingir um objetivo ou para atender as necessidades ou restrições da organização ou dos outros componentes do sistema
Capítulo 4
01. Alguns exemplos de softwares que trabalham com gerenciamento de requisitos são:
Jeremia, OSRMT, Tiger Pro e Xuse. Segue uma sugestão de artigo que faz um estudo comparativo entre ferramentas de Gerência de Requisitos: http://www.cin.ufpe.br/~tg/2009-2/
rrta.pdf
capítulo 5
• 147
02. O rastreamento pode ser realizado de diferentes formas, entre elas devemos destacar
as seguintes:
• Rastreamento de origem, em que é realizada a associação entre os requisitos e os stakeholders que propuseram tal requisito.
• Rastreamento de requisitos, em que é identificada a associação de um determinado requisito com a dependência existente com outros requisitos.
• Rastreamento de projeto, em que é identificada a associação de um requisito com o projeto
como um todo.
Para a melhor visualização do rastreamento o ideal é utilizar-se de uma representação
gráfica de referência cruzada ou matriz de rastreamento. Neste modelo os requisitos são
dispostos nas linhas e colunas de uma tabela e suas dependências são representadas por
letras ou símbolos
03. Sim, o fato de ter muitas mudanças de requisitos influencia a escolha dos métodos de
desenvolvimento de um software pois certas metodologias lidam melhor e outras não com
este tipo de situação. Um exemplo disto é o método cascata, ou clássico, que exige que todos
os requisitos sejam definidos desde o princípio para que o projeto siga o planejamento sem
contar com alterações, enquanto que os métodos ágeis, onde prevê iterações cíclicas, permite que mudanças aconteçam e possuem técnicas adequadas para lidar com estas mudanças.
04. Buscando a qualidade é importante que a Especificação de Requisitos de Software
atenda a alguns preceitos de qualidade de software, conforme definidos por padrões internacionais (como, por exemplo, o IEEE, o CMM e o SPICE). Para tanto a especificação deve ser:
ESPECIFICAÇÕES:
CORRETA
PRECISA
COMPLETA
CONSISTENTE
148 •
capítulo 5
DETALHAMENTO:
Tudo o que está sendo descrito sobre os requisitos deve realmente
expressar sua realidade – ser o que realmente é
Os requisitos devem ter apenas uma interpretação, acordada entre
os usuários e os desenvolvedores. As dúvidas podem ser dirimidas
com um dicionário de termos, que deve ser declarado para resolver
as dúvidas que surgirem
Deve refletir todas as decisões de especificação que foram tomadas
ao longo de sua discussão, envolvendo os usuários e os desenvolvedores. Deve trazer de forma bem clara e definida a sua funcionalidade, desempenho desejado, restrições de projeto (técnicas e não
técnicas), atributos necessários e, caso exista, relacionamento com
outras aplicações. Procurar contemplar todas as situações possíveis
Não ter nenhum conflito ou sobreposição a outros requisitos
PRIORIZADA
VERIFICÁVEL
MODIFICÁVEL
RASTREÁVEL
REUTILIZÁVEL
Definir prioridades de acordo com a importância, estabilidade e complexidade. Dentro destes critérios, os requisitos podem ser:
- essencial: requisito sem o qual o produto não atende às necessidades do usuário;
- desejável: sua existência aumenta o valor do produto, mas se por
alguma necessidade não for contemplado não afeta de forma substancial a utilização do produto;
- opcional: requisito que poderá ser incluído caso haja disponibilidade de prazo e orçamento, caracterizando-se como a última
prioridade a ser atendida;
A princípio todos os requisitos devem ser verificáveis. Ele será verificável se existir um processo finito que possa ser executado por uma
pessoa ou máquina e, principalmente, que mostre sua conformidade
com o solicitado
A mudança de todo e qualquer requisito pode ser realizada de forma
fácil, completa e consistente,
Permite que seja facilmente verificada sua consequência quando
ocorrer uma modificação. Há a necessidade de se fazer a rastreabilidade nos dois sentidos, ou seja, verificar qual o impacto a ser
causado nos requisitos dependentes e dos quais depende
Que a especificação dos requisitos seja facilmente reutilizável, ou
seja, se tivermos alguma funcionalidade a ser referenciada por um
outro requisito que não seja necessário descrevê-la novamente.
05. Durante o estágio de gerenciamento de requisitos, decide-se sobre:
• Identificação de requisitos - Cada requisito precisa ser identificado de modo único, para
que possa ser feita a referência cruzada deste com os outros requisitos e para que ele possa
ser utilizado nas avaliações de facilidade de rastreamento.
• Processo de gerenciamento de mudanças - Trata-se do conjunto de atividades que avalia
o impacto e o custo das mudanças.
• Políticas de facilidade de rastreamento - Essas políticas definem as relações entre os
requisitos e entre os requisitos e o projeto de sistema que devem ser registrados e também
como esses registros devem ser mantidos.
• Suporte de ferramentas CASE - O gerenciamento de requisitos envolve processar uma
grande quantidade de informações sobre os requisitos. As ferramentas que podem ser utilizadas vão desde sistemas especializados de gerenciamento de requisitos até planilhas de
cálculo e sistemas simples de bancos de dados.
capítulo 5
• 149
Capítulo 5
01. Deixaremos aqui algumas ferramentas para modelagem de software como sugestão de
pesquisa:
• IBM Rational Requisite Pro: Um produto integrado poderoso de fácil utilização para gerenciamento de requisitos e de referência de utilização que promove melhor comunicação,
aprimora o trabalho em equipe e reduz o risco do projeto. Inclui ferramentas de gerenciamento de requisitos, de modelagem dos negócios e de modelagem de dados.
• JUDE (Atual ASTAH) ou Java and UML Developer Environment: É uma das ferramentas grátis para UML mais poderosas disponíveis atualmente. Com características que não
são encontradas nas outras ferramentas grátis, como adicionar métodos no diagrama de
sequência e a alteração se refletir no diagrama de classes.
• Umbrello UML: Umbrello UML é um programa de modelagem UML (LINUX). Permite
criar diagramas de software e outros sistemas em um formato padrão. É uma ferramenta
open-source.
• Poseidon para UML: É a ferramenta de modelagem de sistemas da empresa alemã
Gentleware AG. O Poseidon é uma evolução da ferramenta de código-aberto ArgoUML que
com mais de 350.000 instalações está entre as ferramentas de modelagem mais conhecidas. Seu principal foco está na facilidade de uso que a torna simples de aprender e usar.
• DBDesigner: Editor visual para criação de banco de dados mySQL que integra criação,
modelagem, desenvolvimento e manutenção dos bancos em um ambiente simples e agradável. Comparável com produtos como Oracle’s Designer, IBM’s Relational Rose, CA Erwin. O
DBDesigner é OpenSource distribuído sobre a licença GPL.
• IBExpert: O IB Expert é um poderoso gerenciador de banco de dados que permite realizar todas as tarefas necessárias para o suporte e manutenção do banco tanto local como
remotamente. Com ele é possível administrar o banco criando tabelas, modificando campos,
índices, executando scripts SQL e outras funções. O IB Expert realiza a geração do modelo
de entidade relacionamento para bancos de dados Interbase e Firebird.
02. A UML é uma linguagem de modelagem e não um método de desenvolvimento, pois
muitas pessoas confundem isso. Não se encontra na UML a sequência de passos para se
desenvolver um software nem para se modelar. A “limitação” da UML é representar o sistema
por meio de diagramas comuns e integrados envolvendo as questões estáticas e dinâmicas
de um sistema de informação. A UML permite elaborar diversos diagramas para visualização, especificação, construção e documentação de diversas partes do sistema em diversas
etapas do ciclo de vida. Existem vários tipos de diagramas que permitem modelar aspectos
dinâmicos do sistema através da UML.
150 •
capítulo 5
03. Os atores representam usuários e outros sistemas que interagem com sistema modelado. Eles são representados graficamente por um homem palito (boneco-de-palitos). Os
casos de uso mostram o comportamento do sistema, cenários que o sistema percorre em
resposta ao estímulo de um ator.
04. O diagrama de sequência normalmente está associado ao comportamento de um único
caso de uso e, também, podem representar um determinado cenário do sistema.
05. O diagrama de classes talvez seja o diagrama mais importante e usado na UML. É ele
quem modela a estrutura estática das classes de um sistema. No diagrama são mostradas
as associações entre as classes e seus tipos, a especificação das classes, especializações e
generalizações e os agrupamentos em pacotes. O interessante do diagrama de classes é que
ele pode ser implementado usando alguma linguagem de programação orientada a objetos.
Existem várias ferramentas CASE que após o desenho do diagrama de classes gera o código
em Java, C++, C#, etc.
capítulo 5
• 151
ANOTAÇÕES
152 •
capítulo 5