Autor:
Douglas José Peixoto de Azevedo
1 INTRODUÇÃO
O software
tornou-se o elemento chave da evolução dos sistemas e produtos
baseados em computadores[Som92]. Nos últimos tempos ele evolui
de uma ferramenta de análise de informações e de resolução de
problemas especializados para uma industria da programação. Mas,
logo, a cultura e a história criaram um conjunto de problemas
que persiste até hoje. Será que o software tornou-se um
fator limitante na evolução dos sistemas?
O software
de computador é uma informação que existe em duas formas básicas[Pre95]:
componentes não executáveis em máquina e componentes executáveis
em máquina. Os componentes são criados por meio de uma série de
conversões que mapeam as exigências do cliente para código executável
em máquina. Um modelo ou protótipo das exigências é convertido
num projeto. O projeto de software é convertido numa forma
de linguagem que especifica a estrutura de seus dados, os atributos
procedimentais e os requisitos relacionados. A forma de linguagem
é processada por um tradutor que a converte em instruções executáveis
em máquina.
A "reusabilidade"[Som92]
é uma característica importante de um componente de alta qualidade,
ou seja o componente deve ser projetado de forma que possa ser
"reusado" em muitos programas diferentes. Na década
de 1960, construíamos bibliotecas de sub-rotinas científicas que
eram "reusáveis" num amplo conjunto de aplicações científicas
e de engenharia. Essas bibliotecas de sub-rotinas "reusavam"
algoritmos bem definidos efetivamente, mas tinham um domínio de
aplicação limitado. Atualmente ampliamos nossa visão do "reuso"
a fim de envolver não somente algoritmos, mas também estruturas
de dados. Um componente "reusável" da década de 1990
engloba tanto dados como processamento num único pacote (as vezes
chamado classe ou objeto), possibilitando ao engenheiro de software
crie novas aplicações a partir de partes "reusáveis".
Como exemplo podemos citar: as interfaces interativas de hoje
que freqüentemente, são construídas utilizando-se componentes
"reusáveis" que possibilitam a criação de janelas gráficas,
menus pull-down e uma ampla variedade de mecanismos de
interação. As estruturas de dados e detalhes de processamento
exigidos para se construir a interface com os usuários estão contidas
numa biblioteca de componentes "reusáveis" para construção
de interfaces.
Os componentes[Sho83]
de software são construídos usando uma linguagem de programação
que tem um vocabulário limitado, uma gramática explicitamente
definida e regras de sintaxe e semântica bem formadas. Esses atributos
são essenciais para a tradução por máquina. As formas de linguagem
em uso são linguagens de máquina, linguagem de alto nível e linguagens
não procedimentais. A Linguagem de máquina é uma representação
simbólica do conjunto de instruções da unidade central de Processamento
(CPU). As linguagens de alto nível permitem que o desenvolvedor
de software e o programa sejam independentes da máquina.
No decorrer da última década, um grupo de linguagens de quarta
geração ou não procedimentais foi introduzido. Em vez de exigir
que o desenvolvedor de software especifique detalhes de
procedimentos, a linguagem não procedimental subentende um programa
especificando o resultado desejado em vez de especificar a ação
exigida para se conseguir esse resultado. O software de
apoio converte a especificação do resultado num programa executável
em máquina.
Este trabalho
não quer polemizar o assunto, mas discutir as visões dos pesquisadores
referentes ao assunto. Para isto, está dividido da seguinte forma:
no item 2 deste trabalho, mostraremos conceitos e recursos de
software; categorias de software são abordadas no item
3; no item 4, mostramos o ciclo de vida clássico; no item 5, uma
visão do papel evolutivo do software.
2 SOFTWARE
2.1
Conceitos e Recursos
Verdadeiramente
notável nos computadores não é a alta velocidade nem a incrível
capacidade de armazenamento de dados, mas sim, a variedade ilimitada
de usos a quem pode atender.
O que torna
isso possível, com um número limitado de componentes diferentes,
é o software[Ver84], [Pre95]. É importante entender que
o mais sofisticado hardware de computador do mundo não
é importante sozinho. Ligue-o na tomada e tudo que ele pode fazer
é zumbir com o som característico dos aparelhos eletrônicos. Qualquer
atitude que ele tome a partir daí deve ser explicitamente ordenada
através de instruções. Essas instruções são escritas por desenvolvedores
e são organizadas de forma seqüencialmente lógica. Apenas após
estas instruções estarem devidamente organizadas é que os componentes
eletrônicos do sistema de computação podem realizar suas tarefas
na seqüência correta para atingir os seus objetivos. As instruções
processáveis por computadores são chamadas de software
porque os desenvolvedores podem facilmente mudá-las, ao contrário
do hardware onde as modificações são mais difíceis. Em
um certo sentido, o computador é muito parecido com um automóvel,
que é fabricado com alguns componentes que podem fazer muitas
coisas, mas que só efetivamente as realizam quando o motorista
o controla através dos vários dispositivos de interface ( a direção,
o pedal do acelerador e a alavanca de câmbio). O motorista opera
como o software, fornecendo ao automóvel uma seqüência
específica de instruções que o levará ao seu destino. Durante
a viagem o motorista pode ter que alterar a seqüência de instruções
a fim de se acomodar às condições do tráfego, aos semáforos e
aos pedestres. Da mesma maneira o software dos computadores
permite que a seqüência de instruções seja alterada enquanto está
sendo executada pelo computador.
O software
está organizado em programas que são mantidos geralmente nos grandes
bancos de dados das organizações (bibliotecas), fazendo com que
possam ser rapidamente acessados pelo sistema, quando necessários.
Arquivos especiais chamados programas de biblioteca são mantidos
para o armazenamento dos programas, tão logo eles são escritos
pelos desenvolvedores.
3 CATEGORIAS
DE SOFTWARE
Os desenvolvedores
gastam bastante tempo para projetar os passos precisos e lógicos
que devem formar um sistema de processamento de dados.
Verzello[ver84]
classifica o software em três tipos, sendo:
- Software
de sistema - são programas escritos para controlar e coordenar
o software.
- Software
de linguagens - são programas que traduzem outros programas
escritos em linguagens de programação mais ou menos semelhantes
à língua inglesa, para a forma binária que é a linguagem utilizada
pelos componentes do sistema computacional e, além disso, os
programas escritos para ajudar os desenvolvedores a escrever
seus programas e a manter os programas já escritos a salvo,
em bancos de dados especiais.
- Software
de aplicação - são programas escritos para resolver problemas
comerciais ou prestar outros serviços de processamento de dados
aos usuários.
- Já Pressman[Pre95],
amplia esta classificação de software para 7 categorias,
comentando ser uma tarefa um tanto difícil desenvolver categorias
genéricas para aplicações de software, pois à medida
em que a complexidade do software cresce, desaparece
a clara visão em compartimentos:
- Software
básico - é uma coleção de programas escritos para dar apoio
a outros programas. A área do software básico é caracterizada
por: forte interação com o hardware de computador; intenso uso
por múltiplos usuários; operações concorrentes que exigem escalonamento
"schedule"; compartilhamento de recursos e
sofisticada administração do processo; estruturas de dados complexas
e múltiplas interfaces externas.
- Software
de tempo real - monitora, analisa e controla eventos do mundo
real. Entre os elementos do software de tempo real incluem-se:
um componente de coleta de dados que obtém as informações provenientes
de um ambiente externo, um componente de análise que transforma
as informações conforme a aplicação exige; um componente de
controle / saída que responde ao ambiente externo e um componente
de monitoração que coordena todos os demais componentes de forma
a resposta em tempo real. O termo "tempo real" difere
de "interativo" ou "time sharing"
(tempo compartilhado). Um sistema de tempo real deve responder
dentro de restrições de tempo estritas. O tempo de resposta
de um sistema interativo pode ser normalmente ultrapassado sem
resultados desastrosos.
- Software
comercial - é a maior área particular de software. As
aplicações dessa área reestruturam os dados de uma forma que
facilita as operações comerciais e as tomadas de decisões administrativas.
Além da aplicação de processamento de dados convencional, as
aplicações de software comerciais abrangem a computação
interativa.
- Software
científico e de engenharia - tem sido caraterizado por algoritmos
de processamento de números. As aplicações variam da astronomia
à vulcanologia da análise de fadiga mecânica de automóveis,
à dinâmica orbital de naves espaciais recuperáveis e da biologia
molecular à manufatura automatizada.
- Software
embutido - é usado para controlar produtos e sistemas para os
mercados industriais e de consumo. O software embutido
("embedded software") reside na memória só
de leitura "read only" e pode executar funções
limitadas e particulares (por exemplo, controle de teclado para
fornos de microondas) ou oferecer recursos funcionais de controle
significativos (por exemplo, funções digitais em automóveis,
tais como controle, mostradores no painel, sistemas de freio,
etc.)
- Software
de computador pessoal - são os softwares para computadores
pessoais que entrou em efervescência na última década, tais
como processamento de textos, planilhas eletrônicas, computação
gráfica, diversões, gerenciamento de dados, aplicações financeiras
pessoais e comerciais, redes externas ou acesso a banco de dados,
são apenas algumas das centenas de aplicações.
- Software
de inteligência artificial - faz uso de algoritmos não numéricos
para resolver problemas complexos que não sejam favoráveis à
computação ou à análise direta. Atualmente a área de "Artificial
Inteligency - AI" mais ativa é a dos "sistemas
especialistas baseados em conhecimentos", porém outras
áreas de aplicação para o software de AI são o reconhecimento
de padrões (voz e imagem), jogos e demonstração de teoremas.
Uma rede neural simula a estrutura dos processos cerebrais (a
função do neurônio biológico) e pode levar a uma nova classe
de software que consegue reconhecer padrões complexos
e aprender com a "experiência" passada.
4 CICLO DE VIDA
DO SOFTWARE
O ciclo de
vida clássico[Lif80], [Pre97], [Som92] está demostrado na figura
1, ilustrando o seu paradigma. Às vezes chamado modelo cascata,
o paradigma do ciclo de vida requer uma abordagem sistemática,
seqüencial ao desenvolvimento do software que se inicia
no nível do sistema e avança ao longo da análise, projeto, codificação,
teste e manutenção. Modelado em função do ciclo da engenharia
convencional, o paradigma do ciclo de vida abrange as seguintes
atividades:

4.1
Engenharia de Sistemas
Uma vez que
o software sempre faz parte de um sistema mais amplo, o
trabalho inicia-se com o estabelecimento dos requisitos para todos
os elementos do sistema e prossegue com a atribuição de certo
subconjunto desses requisitos ao software. Essa visão é
essencial quando o software deve fazer interface com outros
elementos, tais como hardware, pessoas e bancos de dados. A engenharia
de sistemas envolve a coleta dos requisitos em nível do sistema,
com uma pequena quantidade de projeto e análise de alto nível.
4.2
Análise
O processo
de coleta dos requisitos é intensificado e concentrado especificamente
no software. Para entender a natureza dos programas a serem
construídos, o engenheiro (analista) de software deve compreender
o domínio da informação para o software, bem como a função,
desempenho e interface exigidos. Os requisitos tanto para o sistema
como para o software, são documentados e revistos com o
cliente.
4.3
Projeto
O projeto
de software é de fato um processo de múltiplos passos que
se concentra em quatro atributos distintos do programa: estrutura
de dados; arquitetura de software; detalhes procedimentais
e caracterização de interface. O processo de leitura do projeto
traduz as exigências numa representação do software que
pode ser avaliada quanto à qualidade antes que a codificação se
inicie. Como os requisitos, o projeto é documentado e torna-se
parte da configuração do software.
4.4
Codificação
O projeto
deve ser traduzido numa forma legível por máquina. A etapa de
codificação executa essa tarefa. Se o projeto for executado detalhadamente,
a codificação pode ser executada mecanicamente.
4.5
Testes
Assim que
o código for gerado, inicia-se a realização de testes de programa.
O processo de realização de testes concentra-se nos aspectos lógicos
internos do software, garantindo que todas as instruções
tenham sido testadas.
4.6
Manutenção
O software
sofrerá mudanças depois que for entregue. Podem ocorrer mudanças
porque erros foram encontrados ou devem ser adaptados, a fim de
que sejam feitas mudanças em seu ambiente. A manutenção replica
cada uma das etapas precedentes do ciclo de vida a um programa
existente.
Resumindo,
o ciclo de vida é o paradigma mais antigo e mais usado na engenharia
de software. Ele continua sendo o modelo mais usado. Embora
tenha fragilidades, ele é muito melhor que uma abordagem sem nenhum
critério ao desenvolvimento de software.
5. O PAPEL EVOLUTIVO
DO SOFTWARE
O contexto
em que o software[Pre95] foi desenvolvido está estreitamente
ligado a quase cinco décadas de evolução dos sistemas computadorizados.
O melhor desempenho de hardware, o menor tamanho e o custo
mais baixo, precipitaram o aparecimento de sistemas baseados em
computadores mais sofisticados. Mudamo-nos dos processadores à
válvula para os dispositivos microeletrônicos que são capazes
de processar 200 milhões de instruções por segundo. A figura 2
a seguir, descreve a evolução do software dentro do contexto
das áreas de aplicação de sistemas baseados em computador.

5.1
Os Primeiros Anos
No desenvolvimento
de sistemas computadorizados, o hardware sofreu contínuas
mudanças, enquanto o software era visto por muitos como
uma reflexão posterior. A programação de computador era uma arte
secundária para a qual havia poucos métodos sistemáticos. O desenvolvimento
do software era feito, virtualmente, sem administração
até que os prazos começassem a se esgotar e os custos a subir
abruptamente. Durante esse período, era usada uma orientação batch
(em lote) para a maioria dos sistemas. Notáveis exceções foram
os sistemas interativos, tais como o primeiro sistema da American
Airlines e os sistemas de tempo real orientados à defesa,
como o SAGE. Na maior parte, entretanto, o hardware dedicava-se
à execução de um único programa que, por sua vez, dedicava-se
a uma única aplicação específica. Também nos primeiros anos, o
hardware de propósito geral tornara-se lugar-comum. O software,
por outro lado, era projetado sob medida para cada aplicação e
tinha uma distribuição relativamente limitada. O software
dito "pacote", isto é, programas para serem vendidos
a um ou mais clientes, estava em sua infância. A maior parte do
software era desenvolvida e em última análise usada pela
própria pessoa ou organização. Você escrevia-o, colocava-o em
funcionamento e, se ele falhasse, era você quem o consertava.
Por causa desse ambiente de software personalizado o projeto
era processo implícito realizado no cérebro de alguém e a documentação
muitas vezes não existia. Por justiça, entretanto, devemos reconhecer
que alguns sistemas surpreendentes desenvolvidos naquela época
permanecem em uso até hoje.
5.2
A Segunda Era
Os sistemas
computadorizados estenderam-se de meados da década de 1960 até
o final da década de 1970. A multiprogramação e os sistemas multiusuários
introduziram novos conceitos de interação homem-máquina. As técnicas
interativas abriram um novo mundo de aplicações e novos níveis
de sofisticação de software e hardware. Sistemas
de tempo real podiam coletar, analisar e transformar dados de
múltiplas fontes, daí controlando processos e produzindo saída
em milissegundos e não em minutos. Os avanços da armazenagem on-line
levaram à primeira geração de sistemas de gerenciamento de banco
de dados. Também foi caracterizada pelo uso do produto de software
e pelo advento das "software houses". O software
era desenvolvido para ampla distribuição num mercado interdisciplinar.
Programas para mainframes e minicomputadores eram distribuídos
para centenas e às vezes milhares de usuários. Muitos puseram-se
a desenvolver pacotes de software e ganhar muito dinheiro.
À medida em que o número de sistemas baseados em computador crescia,
bibliotecas de software começaram a se expandir. Uma nuvem
negra apareceu no horizonte. Todos esses programas, essas instruções,
tinham que ser corrigidos quando eram detectadas falhas, alterados
conforme as exigências do usuário se modificavam ou se adaptavam
a um novo hardware que fosse comprado. Essas atividades
foram chamadas coletivamente de "manutenção de software".
E, ainda pior, a natureza personalizada de muitos programas tornava-os
virtualmente impossíveis de sofrerem manutenção. Uma "crise
de software" agigantou-se no horizonte.
5.3
A Terceira Era
Os sistemas
computadorizados começaram em meados da década de 1970 e continuam
até hoje. Os sistemas distribuídos e múltiplos computadores, onde
cada um, executando funções concorrentemente e comunicando-se
um com o outro, aumentaram intensamente a complexidade dos sistemas
baseados em computador. As redes globais, as comunicações digitais
de largura de banda ("bandawidth") elevada e
a crescente demanda de acesso "instantâneo" a dados
exigem muito dos desenvolvedores de software. Também foi
caracterizada pelo advento e o generalizado uso de microprocessadores,
computadores pessoais e poderosas estações de trabalho "workstations"
de mesa. O microprocessador gerou um amplo conjunto de produtos
inteligentes. Do automóvel a fornos microondas, de robôs industriais
a equipamentos para diagnóstico de soro sangüíneo. Em muitos casos,
a tecnologia de software está sendo integrada a produtos
por equipes técnicas que entendem de hardware mas que freqüentemente
são principiantes em desenvolvimento de software. O computador
pessoal foi o catalisador do crescimento de muitas empresas de
software. Enquanto as empresas de software da segunda
era vendiam centenas ou milhares de cópias de seus programas,
as empresas da terceira era vendem dezenas e até mesmo centenas
de milhares de cópias. O hardware de computador pessoal
está se tornando rapidamente um produto primário, enquanto o software
oferece a característica capaz de diferenciar. De fato, quando
a taxa de crescimento das vendas de computadores pessoais se estabilizou
em meados da década de 1980, as vendas de software continuaram
a crescer.
5.4
A Quarta Era
Esta era está
apenas começando. As tecnologias orientadas a objetos, orientadas
a documentos, estão ocupando o lugar das abordagens mais convencionais
para o desenvolvimento de software em muitas áreas de aplicação.
As técnicas de "quarta geração" para o desenvolvimento
de software já estão mudando a maneira segundo a qual alguns
segmentos da comunidade de software constroem programas
de computador. Os sistemas especialistas e o software de
inteligência artificial finalmente saíram do laboratório para
a aplicação prática em problemas de amplo espectro do mundo real.
O software de rede neural artificial abriu excitantes possibilidades
para o reconhecimento de padrões e para capacidades de processamento
de informações semelhantes às humanas.
6 CONCLUSÃO
Durante as
três primeiras décadas da era do computador, o principal desafio
era desenvolver um hardware que reduzisse o custo de processamento
e armazenagem de dados. Ao longo da década de 1980, avanços na
microeletrônica resultaram em maior poder de computação a um custo
cada vez mais baixo. Hoje o problema é diferente. O principal
desafio durante a década de 1990 é melhorar a qualidade e reduzir
o custo de soluções baseadas em computador. Soluções que são implementadas
com software. O poder de um computador mainframe
da década de 1980 agora está à disposição sobre uma escrivaninha.
As assombrosas capacidades de processamento e armazenagem do moderno
hardware representam um grande potencial de computação. O software
é o mecanismo que nos possibilita aproveitar e dar vazão a esse
potencial.
Segundo Verzello[ver84],
o software pode ser classificado em três tipos, denominando-os
de "sistema", o qual conceitua-os como controlador e
coordenador do software; de "linguagens", o qual
diz que traduzem outros programas escritos em linguagens de programação
e de "aplicação", que servem para resolver problemas
comerciais ou prestar outros serviços de processamento de dados
aos usuários.
Para Pressman[Pre95],
que amplia esta classificação para 7 categorias, denominando-as
de: "básico", sendo uma coleção de programas escritos
para dar apoio a outros programas; "tempo real", onde
monitora, analisa e controla eventos do mundo real; "comercial",
onde segundo Pressman, é a maior área particular de software;
"científico", o qual se caraterizada por algoritmos
de processamento de números; "embutido", para controlar
produtos e sistemas para os mercados industriais e de consumo;
"computador pessoal", sendo os softwares para
computadores pessoais; "inteligência artificial", fazendo
uso de algoritmos não numéricos para resolver problemas complexos
que não sejam favoráveis à computação ou à análise direta.
O próprio
Pressman admite ser uma tarefa um tanto difícil desenvolver categorias
genéricas para aplicações de software, opinião com a qual
nós concordamos e vamos fazer algumas considerações.
Como podemos
observar, a classificação de Pressman se baseia no uso da tecnologia
e no seu tipo de utilização.
Se assumirmos
que essa forma de classificação está dentro da nossa linha de
pensamento, poderíamos também citar novas categorias como, por
exemplo: software para rede de computadores, software
de controle de tráfego aéreo ou esta nova categoria que está surgindo
de software denominado "software robô",
que são os sistemas desenvolvidos para navegar na rede mundial
de computadores, a Internet, onde a sua principal atividade
é sair vasculhando os computadores de todo o mundo, procurando
trabalhos desenvolvidos por pesquisadores ou profissionais para
depois poder referenciá-los em uma busca qualquer. Por exemplo,
o site da "Alta Vista Digital" ou "Yhaoo",
que têm vários "robosoft" que saem pela rede
"Internet" buscando assuntos para depois poder
fazer referência em suas pesquisas.
Concluindo,
será que a visão de Pressman "desvirtua" ou "amplia"
o sentido de classificação ou categoria de evolução de software?
7 REFERÊNCIAS
BIBLIOGRÁFICAS
[Li 80] LIFE
cyde management : analysis (Invited Papers). Infotech State of
the art, Series 8, Number 7, 1980.
[Pre95] PRESSMAN,
Roger S. Engenharia de software. São Paulo : Makron, 1995.
[Pre97] PRESSMAN,
Roger S. Software engineering: a practiotioners approach.
New York: Makron, 1997.
[Sho83] SHOOMAN,
Martin L. Software engineerings. .singapore : McGraw-Hill,
1983.
[Som92] SOMERVILLE,
Iam. Software engineering. 4. ed. Addison-Wesley, 1992.
[Ver84] VERZELLO,
Robert J.; REUTTER III, John Processamento de dados. São
Paulo : McGraw-Hill, 1984.
douglas@celepar.gov.br
