Escolar Documentos
Profissional Documentos
Cultura Documentos
de Sistema
Material Teórico
Desenvolvimento da Análise e Projeto de Sistemas
Revisão Textual:
Profª. Esp. Vera Lidia de Sá Cicaroni
Desenvolvimento da Análise e Projeto
de Sistemas
• Introdução
• Verificação – Testes
• Teste de Sistemas
• Manutenção
Atenção
Para um bom aproveitamento do curso, leia o material teórico atentamente antes de realizar as
atividades. É importante também respeitar os prazos estabelecidos no cronograma.
5
Unidade: Desenvolvimento da Análise e Projeto de Sistemas
Contextualização
Imagine que você contratou uma determinada empresa para desenvolver um software capaz
de resolver um problema sobre o qual você não tem mais controle. As etapas de construção
dele já foram todas concluídas, ou seja, foi feita a análise de requisitos, modelos foram
propostos, diagramas elaborados, e a programação está completa. Tudo isso já foi devidamente
documentado também.
Durante um tempo considerável, a equipe de desenvolvimento de software não poupou
esforços para que todos os seus ideais fossem satisfeitos, criando um programa que executasse
cada operação para beneficiá-lo em algum ponto específico de dificuldade apresentada nas
primeiras etapas do projeto.
Desse modo, estaria o software pronto para ser entregue, instalado e colocado em execução?
É claro que não. Mas por quê?
Ao desenvolver um software, os profissionais especialistas tomam bastante cuidado para que
nada falhe, porém sempre haverá algum tipo de ajuste que será necessário realizar, uma vez que
defeitos aparecem na etapa em que são feitos os testes. Esse software precisa ser testado quanto
ao seu desempenho diante dos requisitos levantados. Precisa também ser testado, integrando-o
ao sistema com o qual deverá funcionar. Nesta etapa, é possível que você mesmo faça testes,
já que foi quem contratou os serviços dessa empresa desenvolvedora de sistema e sabe melhor
do que ninguém do que realmente precisa. Sempre que um defeito for encontrado, a equipe de
desenvolvimento deverá agir para que seja corrigido.
Nesta unidade iremos abordar os conceitos relacionados aos testes de software. Além disso,
serão apresentadas informações importantes a respeito da manutenção exigida para os softwares,
quando ele já se encontra em operação no ambiente para o qual foi projetado.
6
Introdução
7
Unidade: Desenvolvimento da Análise e Projeto de Sistemas
A segunda fase é conhecida como Projeto e, nela, são utilizados modelos que visam representar
o sistema de maneira tal que facilite a compreensão mais detalhada do projeto por parte do
usuário e também por parte do analista e dos desenvolvedores. São considerados modelos em
forma de diagramas, fluxogramas, dicionários e também técnicas de modelagem considerando
orientação a objetos. Esta fase é também aquela em que os desenvolvedores irão criar o sistema
utilizando técnicas de programação.
Todas as formas de documentos gerados desde os primeiros contatos entre usuário e analista
(questionários, entrevistas, formulários, anotações) e entre analista e equipe de desenvolvimento
(identificação das necessidades captadas através dos contatos realizados), além dos modelos e
códigos-fonte elaborados na fase Projeto, são aproveitadas e analisadas para que, na etapa
Implementação, se torne uma documentação que detalhará toda a parte de funcionalidades do
sistema e as formas de manipulação dele. Características técnicas também são registradas.
As duas próximas etapas são conhecidas como Verificação e Manutenção. São as etapas que
visam garantir a qualidade do software desenvolvido, uma vez que:
• a Verificação diz respeito aos testes que serão realizados no software na tentativa de
identificar problemas, defeitos ou falhas, ou seja, é nesta fase que deve ser percebido se
o software cumpre o que foi especificado e se faz o que o usuário deseja. Além disso, os
testes podem ser realizados para comprovar que o sistema funciona adequadamente;
Segundo Paula Filho (2009, p. 349), um teste é uma atividade na qual um produto, sistema ou
componente é executado sob condições especificadas, com observação e registro dos resultados e
avaliação de um ou mais aspectos.
8
• a Manutenção diz respeito aos reparos que o software deverá receber por apresentar
defeitos após ser colocado em funcionamento no ambiente para o qual foi projetado.
Existe, ainda, a possibilidade de, na fase anterior, o usuário perceber que alguma nova
funcionalidade deva ser acrescentada ao projeto. Esta etapa permite a inclusão dela.
Verificação – Testes
Glossário
Teste de mesa é um procedimento que os desenvolvedores geralmente adotam, utilizando apenas
papel e caneta, livre de computador, para identificação de falhas no algoritmo do programa através
de simulação do comportamento dele, instrução por instrução, no momento em que suas variáveis
são manipuladas.
Variáveis são espaços na memória de um computador que alocam um determinado dado e que
possuem nomes para tornar possível o acesso a tais dados. Exemplo: sejam duas variáveis, x e
y. x = ‘João’ e y = ‘Maria’, significa que haverá, na memória, um espaço ocupado pelo dado
‘João’ e outro espaço ocupado pelo dado ‘Maria’, que poderão ser acessados quando x ou y forem
referenciados.
Instruções são comandos básicos que sugerem ao software o que ele deverá fazer. Por exemplo:
Escrever x = 1; Ler y = 7; Subtrair y de x.
Algoritmo é uma composição de instruções que possibilitarão a execução de determinada tarefa. Um
programa de computador é formado por um conjunto de tarefas (algoritmos) e estes são formados
por um conjunto de instruções.
9
Unidade: Desenvolvimento da Análise e Projeto de Sistemas
Considere o algoritmo abaixo para exemplificação de um teste de mesa. Deseja-se que duas
variáveis (x e y) recebam valores diferentes e que, ao ser executado o algoritmo, haja a troca de
valores entre essas variáveis, ou seja, o valor que era de x passe a ser de y e o valor que era de
y passe a ser de x.
1 principal()
2 início
3 x=5
4 y=4
5 fim
6 imprima x = y
7 imprima y = x
8 fim
Linha x y
1
2
3 5
4 5 4
5 5 4
6 4 4
7 4 4
Perceba que o algoritmo apresenta um defeito, já que o resultado final apresenta x e y como
contendo o valor 4, quando o esperado era que x tivesse o valor 4 e y tivesse o valor 5.
Neste caso, o problema seria solucionado acrescentando certo detalhe no algoritmo, conforme
exemplo a seguir:
1 principal()
2 início
3 x=5
4 y=4
5 z=0
6 fim
7 z=x
8 imprima x = y
9 imprima y = z
10 fim
10
Verifique, no teste de mesa, que agora o algoritmo satisfaz a exigência proposta, pois o
resultado final indica que x, que era 5, passou a ser 4 e y, que era 4, passou a ser 5:
Linha x y z
1
2
3 5
4 5 4
5 5 4 0
6 5 4 0
7 5 4 5
8 4 4 5
9 4 5 5
• Defeito de sintaxe: para que um código consiga executar alguma tarefa programada,
deve seguir um padrão de estrutura denominada sintaxe. Um defeito de sintaxe pode
se manifestar quando uma vírgula ou um ponto-e-vírgula não são devidamente
inseridos no código, por exemplo.
• Defeito de computação: ocorre quando o programa exige que, em determinado
momento, alguma operação matemática seja realizada e seu resultado seja exibido ou
utilizado por outro módulo do software, porém a solução apresentada não reflete o que se
deseja. Pode acontecer, por exemplo, que o usuário queira que apenas duas casas decimais
sejam mostradas quando houver uma divisão entre valores e que sejam arredondados os
números delas, mas o programa apresenta três ou mais.
• Defeito de documentação: ocorre quando a documentação do software indica
algo que ele não faz ou quando deixa de indicar algo que realmente faz. Durante as
fases de construção do sistema, muitas modificações são realizadas e, algumas vezes,
é possível que os desenvolvedores se esqueçam de fazer as anotações ou anotem,
equivocadamente, uma situação.
• Defeito por sobrecarga ou por stress: ocorre quando o sistema recebe uma quantidade
de dados superior à que foi dimensionada com base nas especificações. O sistema é
projetado para atender a um determinado número limite de usuários e dispositivos. Se
este limite é ultrapassado, este defeito pode aparecer.
• Defeito de desempenho ou throughput: ocorre quando a velocidade com que o
sistema executa suas tarefas é inferior à que foi especificada.
• Defeito de recuperação: ocorre quando o sistema demonstra que não consegue se
recuperar de falhas da maneira como os desenvolvedores gostariam. Por exemplo, se
o programa fechar inesperadamente sem a intervenção do usuário, ele deverá, ao ser
reaberto, garantir que os dados não sejam perdidos e que outros recursos não tenham
sido prejudicados.
Embora nenhum projeto de sistema esteja isento de possuir tais defeitos apresentados, o
autor Ian Sommerville comenta que os testes possuem dois focos, sendo um deles a busca dos
defeitos mencionados.
11
Unidade: Desenvolvimento da Análise e Projeto de Sistemas
Sommerville (2007, pp. 355 e 356) aponta que o processo de teste de software tem duas metas distintas:
1) Demonstrar ao desenvolvedor e ao cliente que o software atende aos requisitos;
2) Descobrir falhas ou defeitos no software que apresenta comportamento incorreto, não desejável
ou em não conformidade com sua especificação.
A primeira meta indicada pelo autor é atendida no momento em que os testes ocorrem para
cada requisito especificado na primeira fase do projeto. O software passa por um processo
de execução de todas as suas funcionalidades e, nesse momento, as respostas recebidas são
comparadas com aquilo que foi tratado com o usuário/cliente em relação ao que o sistema
precisa fazer. A equipe de desenvolvimento é que realiza tais testes.
A segunda meta é atendida no momento em que o sistema é submetido a uma situação na
qual não irá, normalmente, funcionar, como, por exemplo, ser submetido a uma quantidade de
dados superior àquela para a qual foi dimensionado.
Teste de Sistemas
Um software, quando é projetado, deve ser utilizado em conjunto com outros softwares,
sistemas ou dispositivos. Por exemplo, se ele for desenvolvido para fazer registros de clientes,
deverá estar integrado a um sistema de gerenciamento de banco de dados de forma a poder
recuperar ou armazenar dados.
Testar sistemas significa que todos os meios envolvidos nas atividades cotidianas do usuário
serão integrados para que o comportamento do software seja analisado.
Teste de Integração
É aplicado no momento em que os componentes de um sistema são combinados, para que
sejam estudadas as causas de eventuais falhas. Nem sempre é uma tarefa simples identificar, em
um sistema integrado, a origem da falha.
Se um sistema for complexo, é aconselhável que o software seja integrado a um ou, no
máximo, dois componentes para serem submetidos a testes. Não havendo falhas, podem-
se acrescentar novos componentes paulatinamente e realizar os testes cada vez que forem
integrados. Esse trabalho poderá ser demorado, porém costuma ser a única maneira de se
encontrar um defeito. Este procedimento recebe o nome de teste de integração incremental,
de acordo com Sommerville (2007, p.358). Abaixo, a figura extraída da referência deste autor:
12
Figura 2: Testes de integração incremental.
Teste Funcional
Este tipo de teste acontece para verificar se ele atende aos requisitos estabelecidos na fase
inicial do projeto. Neste caso, o sistema é também utilizado pelo usuário/cliente, que verifica as
funcionalidades apresentadas pelo projeto. Este procedimento, que envolve a participação do
usuário, é definido, geralmente, como teste de aceitação. Espera-se que os clientes explorem o
sistema integrado e, caso as saídas estejam em desacordo com a proposta, este pode ser um
defeito que precisa ser corrigido.
PFLEEGER (2004, p. 315) sugere, como exemplo, que o teste funcional de um pacote de controle de
contas bancárias verifique se o pacote pode, corretamente, creditar um depósito, fazer uma retirada,
calcular juros, imprimir o extrato e assim por diante.
13
Unidade: Desenvolvimento da Análise e Projeto de Sistemas
Teste de Desempenho
Durante o desenvolvimento de um software, diversas especificações são elencadas, sendo
uma delas a capacidade máxima de carga que poderá suportar sem que haja a redução do
tempo de resposta. Ou seja, o teste procura saber, ao se fazer a integração com outros sistemas
e dispositivos, qual será seu comportamento diante dos dados de entrada que passará a receber.
Neste cenário, os testes são realizados explorando ao máximo a capacidade ou limites do
sistema, impondo a ele uma determinada carga além daquela pela qual ele foi projetado para
resistir sem apresentar falhas. Isso significa que o sistema receberá uma dose de stress. Por
exemplo, um sistema desenvolvido para realizar 30 cadastros de clientes por segundo, poderá
ser testado em relação ao seu desempenho de maneira a receber mais do que esse limite pré-
definido até que ocorra uma falha.
Manutenção
Mesmo depois que um sistema foi construído, testado e entregue ao cliente, algumas
alterações poderão ou necessitarão ocorrer. Acontece que, no momento em que o sistema está
sendo executado no local onde o cliente idealizou, ao recorrer aos serviços de desenvolvimento
do software, ele é considerado entregue e finalizado. Ajustes poderão ser feitos, porém serão
vistos como um processo de manutenção do sistema.
Problemas
Realizar manutenção em um sistema nem sempre é tarefa simples. Pelo contrário, muitas vezes
o trabalho é problemático. Isso porque consideramos, como foi anteriormente comentado, que
o sistema já estará em funcionamento e, sendo assim, torna-se complicado deixá-lo desativado
durante o tempo em que a manutenção precisa acontecer.
14
A manutenção em sistemas é realizada, geralmente, por uma equipe diferente daquela que
desenvolveu o software. Por esse motivo, é importante que a documentação dê condições
suficientes para que essa equipe consiga compreender todas as funcionalidades do sistema.
Esse pessoal deve ter muita habilidade para lidar com os desenvolvedores e também com os
usuários. Além disso, os componentes da equipe de manutenção, muitas vezes, trabalham em
diversos projetos simultaneamente e isso pode fazer com que detalhes se percam entre a análise
de um projeto e outro. É fundamental que possuam concentração para evitar que problemas
assim aconteçam.
Custos
A manutenção de um sistema envolve, evidentemente, custo.
Observe atentamente o que comenta PFLEEGER (2004, p. 391) acerca dos custos de software:
Na década de 70, a maior parte do orçamento de um sistema de software era gasta no desenvolvimento.
A proporção entre o valor investido no desenvolvimento e o investido na manutenção foi revertida, nos
anos 80, e várias estimativas supõem que a manutenção representa de 40 a 60 por cento do custo total
do ciclo de vida de um sistema.
A autora continua seus comentários informando que as estimativas no ano 2000 sugerem
que os custos de manutenção aumentaram em até 80% do custo referente ao tempo de vida
de um sistema.
Souza et al. (2010 apud Pressman, 2010) indicam que a manutenção de um software pode chegar a até
70 por cento do esforço de uma organização.
Isso tudo quer nos dizer que, se o desenvolvimento de um software custar R$ 300.000,00,
o custo de manutenção poderá chegar a um valor aproximado de R$ 210.000,00. É claro
que existem vários aspectos a serem considerados quanto à manutenção de sistemas, como,
por exemplo:
• Incorporação de novas funcionalidades no software. Além do trabalho de modificação ou
ajuste no sistema, é necessário também que a documentação seja atualizada com base
nas alterações ou complementos realizados;
15
Unidade: Desenvolvimento da Análise e Projeto de Sistemas
• Correção de defeitos por uso indevido do sistema. Ocorre, geralmente, quando, tendo
sido identificada certa quantidade de carga que o sistema pode suportar, os usuários,
inadvertidamente, sobrecarregam o sistema com aplicações ou dispositivos que são
desnecessários;
• Esforço humano: consideram-se os salários e demais benefícios dos envolvidos no
processo de manutenção. A equipe de profissionais, muitas vezes, precisa de bastante
tempo para, a princípio, compreender o sistema. Precisará também de certo tempo para
localizar defeitos e outro tempo para corrigi-los.
• Treinamento da equipe do usuário/cliente: é comum haver a necessidade de gastos com
apostilas, manuais, impressos publicitários;
• Visitas de profissionais capacitados aos clientes; custos com passagens, estadias,
alimentação e outros são considerados aqui;
• Consumo de energia elétrica, telefonemas, despesas com Internet, etc.
• Dentre outros.
Requisitos
• Os envolvidos no processo geralmente se dividem em: usuário (aquele que necessita do
projeto de software), o analista (responsável por identificar as necessidades do usuário) e
a equipe de desenvolvimento (os que irão projetar o sistema).
• Técnicas de levantamento de requisitos (questionários, entrevistas, análise etnográfica,
etc.) são utilizadas pelo analista na tentativa de captar todas as funcionalidades que o
usuário deseja que o sistema possua.
• O analista transmite os resultados do levantamento de requisitos para a equipe de
desenvolvimento, que irá analisar as informações apontadas.
16
Projeto
• Modelos de dados são gerados, utilizando-se diagramas, fluxogramas, dicionários de dados, etc.
• O uso de técnicas envolvendo a UML (Linguagem de Modelagem Unificada) é importante nesta
fase, pois estes modelos, orientados a objetos (diagramas de classes, de objetos, de atividades, de
caso de uso, de interação, etc.), descrevem de maneiras diferentes a proposta de desenvolvimento
do projeto. A visualização torna-se simples por parte dos usuários e demais pessoas envolvidas.
• O software é desenvolvido utilizando a linguagem de programação que melhor se enquadrar na
proposta do projeto.
Implementação
• Os desenvolvedores deverão utilizar todos os registros feitos desde a primeira fase (requisitos)
para a elaboração da documentação do software. Esta documentação deverá conter informações
gerais de apoio tanto para usuários como para equipe de desenvolvimento ou de manutenção,
como, por exemplo, os requisitos identificados, os diagramas e dicionários de dados utilizados,
os códigos-fonte (se houver este acordo), etc.
• Os modelos de documentação sugerem a inclusão dos objetivos, da estrutura, das funcionalidades
do software. Além disso, devem constar informações referentes a fabricantes de outros sistemas
agregados, dos modelos utilizados, dos módulos de programação, da estrutura de arquivos, de
referências cruzadas, dentre outros.
Validação
• Também conhecida por fase dos testes, utiliza diversas técnicas que servirão para identificar falhas
no software e/ou no sistema ou, ainda, para comprovar que o sistema funciona adequadamente.
• Os defeitos poderão ocorrer por falhas no algoritmo, na sintaxe, na documentação, por
sobrecarga, por desempenho, dentre outros.
• Os testes são realizados pela equipe de desenvolvimento, porém existe a possibilidade e, às
vezes, necessidade de serem testados também pelos usuários/clientes.
Manutenção
• Após o momento em que o software já foi disponibilizado para integrar-se ao sistema do usuário/
cliente, existe a possibilidades de haver falhas no software ou mesmo no sistema. Quando isso
ocorre, é necessário realizar-se a manutenção.
• Situações problemáticas normalmente estão associadas ao processo de manutenção de um
sistema, como, por exemplo, o elevado custo gerado pelo serviço de manutenção, a falta de
conhecimento sobre o projeto por parte da equipe de manutenção, a indisponibilidade do
sistema ficar inoperante durante a manutenção, etc.
De qualquer maneira, mesmo sendo uma tarefa complexa projetar um software, os usuários/
clientes normalmente ficam satisfeitos com o produto final, já que, em todas as fases de
desenvolvimento, existe a real preocupação dos envolvidos em cumprir rigorosamente todos os
requisitos especificados.
17
Unidade: Desenvolvimento da Análise e Projeto de Sistemas
Material Complementar
Web:
http://computerworld.uol.com.br, portal de tecnologia do site UOL.
http://www.portalarquiteto.com.br, portal da Internet com notícias e artigos sobre o assunto
Arquitetura de Software.
http://www.omg.org, site da organização Object Management Group, que analisa e define
padrões de desenvolvimento de projetos orientados a objetos.
Livros:
PAULA FILHO, W. P. Engenharia de Software: fundamentos, métodos e padrões. Rio de
Janeiro. LTC, 2009. Disponível na biblioteca virtual da Unicsul.
PRESSMAN, R. S. Engenharia de Software. São Paulo. Pearson, 2011. Disponível na
biblioteca virtual da Unicsul.
18
Referências
PFLEEGER, S. L. Engenharia de Software: teoria e prática. 2ª ed. São Paulo: Prentice Hall,
2004.
SOUZA, Vinicius Rodriguez de; VALE, Ricardo Cunha; ARAÚJO, Marco Antônio Pereira. O
Papel Evolutivo do Software. Engenharia de Software Magazine. Edição 28, Devmedia,
p. 19-25, 2010.
19
Unidade: Desenvolvimento da Análise e Projeto de Sistemas
Anotações
20
www.cruzeirodosulvirtual.com.br
Campus Liberdade
Rua Galvão Bueno, 868
CEP 01506-000
São Paulo SP Brasil
Tel: (55 11) 3385-3000