Buscar

03-ENGENHARIA-DE-SOFTWARE

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 51 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 51 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 51 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1 
 
 
SUMÁRIO 
1 INTRODUÇÃO ................................................................................... 3 
1.1 CONCEITOS BÁSICOS .............................................................. 4 
2 PROBLEMAS ASSOCIADOS AO SOFTWARE ................................. 7 
2.1 A Importância do Software .......................................................... 8 
2.2 O Papel Evolutivo do Software .................................................... 9 
2.3 Aplicações do Software ............................................................. 13 
3 DEFINIÇÃO DE ENGENHARIA DE SOFTWARE ............................ 14 
4 MODELOS DE DESENVOLVIMENTO DE SOFTWARE ................. 16 
4.1 O Modelo Queda d'Água ........................................................... 16 
4.2 Prototipação .............................................................................. 19 
4.3 Desenvolvimento Iterativo ......................................................... 21 
4.4 O Modelo Espiral ....................................................................... 22 
4.5 Ciclo de Vida Clássico ............................................................... 24 
4.6 Técnicas de Quarta Geração .................................................... 25 
5 REQUISITOS DE SOFTWARE ........................................................ 25 
5.1 Design de Software ................................................................... 26 
5.2 Construção de Software ............................................................ 26 
5.3 Teste de Software ..................................................................... 27 
5.4 Manutenção de Software ........................................................... 28 
5.5 Gerenciamento de Configuração de Software ........................... 28 
5.6 Gerenciamento de Engenharia de Software .............................. 29 
5.7 Gerenciamento de Projetos de Software ................................... 29 
5.8 Engenharia de Processo de Software ....................................... 30 
 
2 
 
5.9 Qualidade de Software .............................................................. 31 
6 Software: Mitos e Realidade ............................................................ 32 
6.1 Mitos de Gerenciamento ........................................................... 32 
6.2 Mitos do Cliente ......................................................................... 33 
6.3 Mitos do Profissional ................................................................. 34 
7 LINGUAGENS DE PROGRAMAÇÃO .............................................. 35 
7.1 A tradução ................................................................................. 36 
7.2 Características das linguagens de programação ...................... 36 
7.3 Características Psicológicas ...................................................... 37 
7.4 Características de Engenharia .................................................. 38 
7.5 Características Técnicas ........................................................... 40 
7.6 Critérios de Escolha de uma Linguagem de Programação ....... 42 
8 CLASSES DE LINGUAGENS .......................................................... 42 
8.1 Linguagens de Primeira Geração .............................................. 43 
8.2 Linguagens de Segunda Geração ............................................. 43 
8.3 Linguagens de Terceira Geração .............................................. 43 
8.4 Linguagens de Quarta Geração ................................................ 44 
9 ESTILO DE CODIFICAÇÃO ............................................................ 45 
9.1 A Documentação de Código ...................................................... 45 
9.2 A Declaração de Dados ............................................................. 46 
9.3 A Construção de Instruções ...................................................... 47 
9.4 Entradas/Saídas ........................................................................ 47 
10 CODIFICAÇÃO E EFICIÊNCIA .................................................... 48 
10.1 Eficiência de Código .............................................................. 48 
10.2 Eficiência de Memória ............................................................ 49 
10.3 Eficiência de Entradas/Saídas ............................................... 49 
11 BIBLIOGRAFIA ............................................................................. 50 
 
3 
 
 
1 INTRODUÇÃO 
 
Fonte: salleurl.edu 
 
Nos anos 40, quando se iniciou a evolução dos sistemas computadorizados, 
grande parte dos esforços, e consequentes custos, era concentrada no 
desenvolvimento do hardware, em razão, principalmente das limitações e dificuldades 
encontradas na época. À medida que a tecnologia de hardware foi sendo dominada, 
as preocupações se voltaram, no início dos anos 50, para o desenvolvimento dos 
sistemas operacionais, onde surgiram então as primeiras realizações destes sistemas, 
assim como das chamadas linguagens de programação de alto nível, como 
FORTRAN e COBOL, e dos respectivos compiladores. A tendência da época foi de 
poupar cada vez mais o usuário de um computador de conhecer profundamente as 
questões relacionadas ao funcionamento interno da máquina, permitindo que este 
pudesse concentrar seus esforços na resolução dos problemas computacionais em 
lugar de preocupar-se com os problemas relacionados ao funcionamento do 
hardware. Já no início dos anos 60, com o surgimento dos sistemas operacionais com 
características de multiprogramação, a eficiência e utilidade dos sistemas 
computacionais tiveram um considerável crescimento, para o que contribuíram 
também, de forma bastante significativa, as constantes quedas de preço do hardware. 
Uma consequência deste crescimento foi a necessidade, cada vez maior, de 
desenvolver grandes sistemas de software em substituição aos pequenos programas 
aplicativos utilizados até então. Desta necessidade, surgiu um problema nada trivial 
devido à falta de experiência e à não adequação dos métodos de desenvolvimento 
existentes para pequenos programas, o que foi caracterizado, ainda na década de 60 
 
4 
 
como a "crise do software", mas que, por outro lado, permitiu o nascimento do termo 
"Engenharia de Software". Atualmente, apesar da constante queda dos preços dos 
equipamentos, o custo de desenvolvimento de software não obedece a esta mesma 
tendência. Pelo contrário, corresponde a uma percentagem cada vez maior no custo 
global de um sistema informatizado. A principal razão para isto é que a tecnologia de 
desenvolvimento de software implica, ainda, em grande carga de trabalho, os projetos 
de grandes sistemas de software envolvendo em regra geral um grande número de 
pessoas num prazo relativamente longo de desenvolvimento. O desenvolvimento 
destes sistemas é realizado, na maior parte das vezes, de forma "ad-hoc", conduzindo 
a frequentes desrespeitos de cronogramas e acréscimos de custos de 
desenvolvimento. 
1.1 CONCEITOS BÁSICOS 
 
Fonte: cbsi.net.br 
 
Pode-se definir o software, numa forma clássica, como sendo: "um conjunto de 
instruções que, quando executadas, produzem a função e o desempenho desejados, 
estruturas de dados que permitam que as informações relativas ao problema a 
resolver sejam manipuladas adequadamente e a documentação necessária para um 
melhor entendimento da sua operação e uso". Entretanto, no contexto da Engenharia 
de Software, o software deve ser visto como um produto a ser "vendido". É importante 
dar esta ênfase, diferenciando os "programas" que são concebidos num contexto mais 
restrito, onde o usuário ou "cliente" é o próprio autor. No caso destes programas, a 
documentação associadaé pequena ou (na maior parte das vezes) inexistente e a 
 
5 
 
preocupação com a existência de erros de execução não é um fator maior, 
considerando que o principal usuário é o próprio autor do programa, este não terá 
dificuldades, em princípio, na detecção e correção de um eventual "bug". Além do 
aspecto da correção, outras boas características não são também objeto de 
preocupação como a portabilidade, a flexibilidade e a possibilidade de reutilização. 
Um produto de software, por outro lado, é sistematicamente destinado ao uso por 
pessoas outras que os seus programadores. Os eventuais usuários podem, ainda, ter 
formações e experiências diferentes, o que significa que uma grande preocupação no 
que diz respeito ao desenvolvimento do produto deve ser a sua interface, reforçada 
com uma documentação rica em informações para que todos os recursos oferecidos 
possam ser explorados de forma eficiente. Ainda, os produtos de software devem 
passar normalmente por uma exaustiva bateria de testes, dado que os usuários não 
estarão interessados (e nem terão capacidade) de detectar e corrigir os eventuais 
erros de execução. Resumindo, um programa desenvolvido para resolver um dado 
problema e um produto de software destinado à resolução do mesmo problema são 
duas coisas totalmente diferentes. É óbvio que o esforço e o consequente custo 
associado ao desenvolvimento de um produto serão muito superiores. Dentro desta 
ótica, é importante, para melhor caracterizar o significado de software, é importante 
levantar algumas particularidades do software, quando comparadas a outros produtos, 
considerando que o software é um elemento lógico e não físico como a maioria dos 
produtos: 
 O software é concebido e desenvolvido como resultado de um trabalho 
de engenharia e não manufaturado no sentido clássico; 
 O software não se desgasta, ou seja, ao contrário da maioria dos 
produtos, o software não se caracteriza por um aumento na possibilidade 
de falhas à medida que o tempo passa (como acontece com a maioria 
dos produtos manufaturados); 
 A maioria dos produtos de software é concebida inteiramente sob 
medida, sem a utilização de componentes pré-existentes. 
Em função destas características diferenciais, o processo de desenvolvimento 
de software pode desembocar um conjunto de problemas, os quais terão influência 
direta na qualidade do produto. 
 
6 
 
Tudo isto porque, desde os primórdios da computação, o desenvolvimento dos 
programas (ou, a programação) era visto como uma forma de arte, sem utilização de 
metodologias formais e sem qualquer preocupação com a documentação, entre outros 
fatores importantes. A experiência do programador era adquirida através de tentativa 
e erro. A verdade é que esta tendência ainda se verifica. Com o crescimento dos 
custos de software (em relação aos de hardware) no custo total de um sistema 
computacional, o processo de desenvolvimento de software tornou-se um item de 
fundamental importância na produção de tais sistemas. A nível industrial, algumas 
questões que caracterizaram as preocupações com o processo de desenvolvimento 
de software foram: 
 Por que o software demora tanto para ser concluído? 
 Por que os custos de produção têm sido tão elevados? 
 Por que não é possível detectar todos os erros antes que o software seja 
entregue ao cliente? 
 Por que é tão difícil medir o progresso durante o processo de 
desenvolvimento de software? 
Estas são algumas das questões que a Engenharia de Software pode ajudar a 
resolver. Enquanto não respondemos definitivamente a estas questões, podemos 
levantar alguns dos problemas que as originam: 
 Raramente, durante o desenvolvimento de um software, é dedicado 
tempo para coletar dados sobre o processo de desenvolvimento em si; 
devido à pouca quantidade deste tipo de informação, as tentativas em 
estimar a duração/custo de produção de um software têm conduzido a 
resultados bastante insatisfatórios; além disso, a falta destas 
informações impede uma avaliação eficiente das técnicas e 
metodologias empregadas no desenvolvimento; 
 A insatisfação do cliente com o sistema "concluído" ocorre 
frequentemente, devido, principalmente, ao fato de que os projetos de 
desenvolvimento são baseados em informações vagas sobre as 
necessidades e desejos do cliente (problema de comunicação entre 
cliente e fornecedor); 
 A qualidade do software é quase sempre suspeita, problema resultante 
da pouca atenção que foi dada, historicamente, às técnicas de teste de 
 
7 
 
software (até porque o conceito de qualidade de software é algo 
relativamente recente); 
 o software existente é normalmente muito difícil de manter em operação, 
o que significa que o custo do software acaba sendo incrementado 
significativamente devido às atividades relacionadas à manutenção; isto 
é um reflexo da pouca importância dada à manutenibilidade no momento 
da concepção dos sistemas.1 
2 PROBLEMAS ASSOCIADOS AO SOFTWARE 
 
Fonte: cripto.digital 
 
Existem um conjunto de problemas associados ao software que vários autores 
chamam de “crise do software”. Este conjunto de problemas não se limitam ao 
software que não funciona adequadamente, mas abrange também problemas 
associados a forma de desenvolvimento destes softwares, a forma como é efetuada 
a manutenção destes softwares, como atender a demanda por novos softwares e 
como desenvolver novos softwares cada vez mais rapidamente. 
Os problemas que atingem o desenvolvimento podem ser descritos como: 
 Estimativas de prazos e de custos que são frequentemente imprecisos; 
 
1 Texto extraído do link: https://jalvesnicacio.files.wordpress.com/2010/03/engenharia-de-
software.pdf 
 
8 
 
 Produtividade dos profissionais da área que não tem acompanhado a 
demanda por novos serviços; 
 A qualidade do software desenvolvido que é insuficiente. 
2.1 A Importância do Software 
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. 
 
Fonte: waltenomartins.com.br 
 
O poder de um computador mainframe da década de 1980 agora está à 
disposição sobre uma mesa. 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. 
 
9 
 
2.2 O Papel Evolutivo do Software 
O contexto em que o software foi desenvolvido está estreitamente ligado a 
quase cinco décadas de evolução dos sistemas computadorizados. O melhor 
desempenho de hardware, menor tamanho e custo mais baixo precipitaram o 
aparecimento de sistemas baseados em computadores mais sofisticados. Mudamos 
dos processadores a válvula para os dispositivos microeletrônicos que são capazes 
de processar 200 milhões de instruções por segundo. Em livros populares sobre a 
"revolução do computador", Osborne caracterizou uma "nova revolução industrial", 
Toffler chamou o advento da microeletrônica de "a terceira onda de mudança" na 
história humana e Naisbitt previu que a transformação de uma sociedade industrial 
em uma "sociedade de informação" terá um profundo impacto sobre nossas vidas. 
Feigenbaum e McCorduck sugeriram que a informação e oconhecimento (controlados 
por computador) serão o foco principal de poder no século XXI, e Stoll argumentou 
que a "comunidade eletrônica" criada por redes e software e a chave para a troca de 
conhecimentos em todo o mundo. Quando se iniciava a década de 1990, Toffler 
descreveu uma "mudança de poder", em que as velhas estruturas de poder 
(governamental, educacional, industrial, econômico e militar) se desintegrarão 
enquanto os computadores e o software levarão a uma "democratização do 
conhecimento”. 
 
Fonte: waltenomartins.com.br 
 
A tabela descreve a evolução do software dentro do contexto das áreas de 
aplicação de sistemas baseados em computador. Durante os primeiros anos do 
desenvolvimento de sistemas computadorizados, o hardware sofreu continuas 
mudanças, enquanto o software era visto por muitos como uma reflexão posterior. A 
 
10 
 
programação de computador era uma arte "secundaria" 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 de reservas da American Airlines e os sistemas de tempo real orientados a 
defesa, como o SAGE. Na maior parte, entretanto, o hardware dedicava-se a 
execução de um único programa que, por sua vez, dedicava-se a uma aplicação 
específica. Durante os 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 produto software (isto e, programas 
desenvolvidos 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. Uma vez que a rotatividade de empregos era 
baixa, os gerentes podiam dormir tranquilos com a certeza de que você estaria lá se 
defeitos fossem encontrados. 
Por causa desse ambiente de software personalizado, o projeto era um 
processo implícito realizado no cérebro de alguém, e a documentação muitas vezes 
não existia. Durante os primeiros anos, aprendemos muito sobre a implementação de 
sistemas baseados em computador, mas relativamente pouco sobre engenharia de 
sistemas de computador. Por justiça, entretanto, devemos reconhecer os muito 
surpreendentes sistemas baseados em computador desenvolvidos durante essa 
época. Alguns deles permanecem em uso até hoje e constituem feitos que são um 
marco de referência e que continuam a justificar a admiração. 
A segunda era da evolução dos sistemas computadorizados estendeu-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 
 
11 
 
armazenagem on-line levaram à primeira geração de sistemas de gerenciamento de 
bancos de dados. 
A segunda era 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. Empresários da 
indústria, governos e universidades puseram-se "desenvolver pacotes de software" e 
a ganhar muito dinheiro. 
A medida que o número de sistemas baseados em computador crescia, 
bibliotecas de software de computador começaram a se expandir. Projetos de 
desenvolvimento internos nas empresas produziram dezenas de milhares de 
instruções de programa. Os produtos de software comprados no exterior 
acrescentaram centenas de milhares de novas instruções. Uma nuvem negra 
apareceu no horizonte. Todos esses programas - todas essas instruções - tinham de 
ser corrigidos quando eram detectadas falhas, alterados conforme as exigências do 
usuário se modificavam ou adaptavam a um novo hardware que fosse comprado. 
Essas atividades foram chamadas coletivamente de manutenção de software. O 
esforço despendido na manutenção de software começou a absorver recursos em 
índices alarmantes. 
E, ainda pior, a natureza personalizada de muitos programas tornava-os 
virtualmente impossíveis de sofrer manutenção. Uma "crise de software" agigantou-
se no horizonte. 
A terceira era da evolução dos sistemas computadorizados começou em 
meados da década de 1970 e continua até hoje. Os sistemas distribuídos - múltiplos 
computadores, 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 e locais, as comunicações digitais de largura de 
banda (handwidth) elevada e a crescente demanda de acesso "instantâneo" a dados 
exigem muito dos desenvolvedores de software. 
A terceira era também foi caracterizada pelo advento e generalização do uso 
de microprocessadores, computadores pessoais e poderosas estações de trabalho 
(workstations) de mesa. O microprocessador gerou um amplo conjunto de produtos 
inteligentes - de automóveis a fornos de micro-ondas, de robôs industriais a 
 
12 
 
equipamentos para diagnostico de soro sanguíneo. Em muitos casos, a tecnologia de 
software está sendo integrada a produtos por equipes técnicas que entendem de 
hardware, mas que frequentemente 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 copias 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. Na indústria ou em âmbito doméstico, muitas 
pessoas gastaram mais dinheiro com software do que aquilo que despenderam para 
comprar o computador no qual o software seria instalado. 
A quarta era do software de computador está apenas começando. As 
tecnologias orientadas a objetos estão rapidamente ocupando o lugar das abordagens 
mais convencionais para o desenvolvimento de software em muitas áreas de 
aplicação. Autores tais como Feigenhaum, McCorduck e Allman preveem que os 
computadores de "quinta geração", arquiteturas de computação radicalmente 
diferentes, e seu software correlato exercerão um profundo impacto sobre o equilíbrio 
do poder político e industrial em todo o mundo. 
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 pratica em 
problemas de amplo espectro do mundo real. O software de rede neural artificial abriu 
excitantes possibilidades para o reconhecimento de padrões epara capacidades de 
processamento de informações semelhantes as humanas. 
Quando nos movimentamos para a quinta era, os problemas associados ao 
software de computador continuam a se intensificar: 
 A sofisticação do software ultrapassou nossa capacidade de construir 
um software que extraia o potencial do hardware. 
 
13 
 
 Nossa capacidade de construir programas não pode acompanhar o ritmo 
da demanda de novos programas. 
 Nossa capacidade de manter os programas existentes é ameaçada por 
projetos ruins e recursos inadequados. 
Em resposta a esses problemas, estão sendo adotadas práticas de engenharia 
em toda a indústria. 
2.3 Aplicações do Software 
O software pode ser aplicado a qualquer situação em que um conjunto 
previamente especificado de passos procedimentais (um algoritmo) tiver sido definido. 
O conteúdo de informações e a previsibilidade são fatores importantes na 
determinação da natureza de um aplicativo. 
Desenvolver categorias genéricas para as aplicações de softwares é uma tarefa 
muito difícil. Quanto mais complexo é o sistema, mais difícil é determinar de forma 
clara os vários componentes do software. 
Pode-se dividir as aplicações em: 
Software Básico – que é um conjunto de programas para dar apoio a outros 
programas. Tem como característica uma forte interação com o hardware, operações 
concorrentes, compartilhamento de recursos, uso por múltiplos usuários e múltiplas 
interfaces. 
Software de Tempo Real – são programas que monitora, analisa e controla 
eventos do mundo real, devendo responder aos estímulos do mundo externo com 
restrições de tempo pré-determinadas. 
Software Comercial – é a maior área de aplicação de softwares, são aplicações 
que gerenciam as operações comerciais de modo a facilitar o gerenciamento 
comercial do negócio da empresa, permitindo também a tomada de decisões. 
Software Cientifico e de Engenharia – são caracterizados por algoritmos de 
processamento numérico, dependentes da coleta e processamento de dados para as 
mais variadas áreas do conhecimento. 
Software Embutido – são desenvolvidos para executar atividades muito 
específicas e inseridos em produtos inteligentes tanto para atividades comerciais 
como para atividades domesticas. 
 
14 
 
Software de Computador Pessoal – são produtos desenvolvidos para o uso 
pessoal do computador, tais como planilhas eletrônicas, processadores de textos, 
jogos, etc. 
Software de Inteligência Artificial – faz uso de algoritmos não-numéricos para 
resolver problemas complexos que não apresentam facilidades computacionais 
numéricas ou de análise direta.2 
3 DEFINIÇÃO DE ENGENHARIA DE SOFTWARE 
Os problemas apontados nas seções anteriores não serão, é claro, resolvidos 
da noite para o dia, mas reconhecer a existência dos problemas e defini-los da forma 
mais precisa e eficaz são, sem dúvida, um primeiro passo para a sua solução. 
 
Fonte: jalvesnicacio.files.wordpress.com 
 
Em primeiro lugar, é preciso estar ciente também de que não existe uma 
abordagem mágica que seja a melhor para a solução destes problemas, mas uma 
combinação de métodos que sejam abrangentes a todas as etapas do 
desenvolvimento de um software. 
 
2 Texto extraído do link: http://www.waltenomartins.com.br/ap_es_v1.pdf 
 
15 
 
Além disto, é importante e desejável que estes métodos sejam suportados por 
um conjunto de ferramentas que permita automatizar o desenrolar destas etapas, 
juntamente com uma definição clara de critérios de qualidade e produtividade de 
software. São estes aspectos que caracterizam de maneira mais influente a disciplina 
de Engenharia de Software. 
Na literatura, pode-se encontrar diversas definições da Engenharia de 
Software: 
"O estabelecimento e uso de sólidos princípios de engenharia para que se 
possa obter economicamente um software que seja confiável e que funcione 
eficientemente em máquinas reais" [NAU 69]. 
“A aplicação prática do conhecimento científico para o projeto e a construção 
de programas computacionais e a documentação necessária à sua operação e 
manutenção. ” [Boehm, 76] 
“Abordagem sistemática para o desenvolvimento, a operação e a manutenção 
de software” [Afnor, 83] 
 “Conjunto de métodos, técnicas e ferramentas necessárias à produção de 
software de qualidade para todas as etapas do ciclo de vida do produto. ” [Krakowiak, 
85] 
Num ponto de vista mais formal, a Engenharia de Software pode ser definida 
como sendo a aplicação da ciência e da matemática através das quais os 
equipamentos computacionais são colocados à disposição do homem por meio de 
programas, procedimentos e documentação associada. De modo mais objetivo, pode-
se dizer que a Engenharia de Software busca prover a tecnologia necessária para 
produzir software de alta qualidade a um baixo custo. Os dois fatores motivadores são 
essencialmente a qualidade e o custo. A qualidade de um produto de software é um 
parâmetro cuja quantificação não é trivial, apesar dos esforços desenvolvidos nesta 
direção. Por outro lado, o fator custo pode ser facilmente quantificado desde que os 
procedimentos de contabilidade tenham sido corretamente efetuados. 
 
16 
 
4 MODELOS DE DESENVOLVIMENTO DE SOFTWARE 
O resultado de um esforço de desenvolvimento deve resultar normalmente num 
produto. O processo de desenvolvimento corresponde ao conjunto de atividades e um 
ordenamento destas de modo a que o produto desejado seja obtido. 
Um modelo de desenvolvimento corresponde a uma representação abstrata do 
processo de desenvolvimento que vai, em geral, definir como as etapas relativas ao 
desenvolvimento do software serão conduzidas e inter-relacionadas para atingir o 
objetivo do desenvolvimento que é a obtenção de um produto de software de alta 
qualidade a um custo relativamente baixo. 
As seções que seguem vão descrever alguns dos modelos conhecidos e 
utilizados em desenvolvimento de software. 
4.1 O Modelo Queda d'Água 
Este é o modelo mais simples de desenvolvimento de software, estabelecendo 
uma ordenação linear no que diz respeito à realização das diferentes etapas. Como 
mostra a figura abaixo (1.3), o ponto de partida do modelo é uma etapa de Engenharia 
de Sistemas, onde o objetivo é ter uma visão global do sistema como um todo 
(incluindo hardware, software, equipamentos e as pessoas envolvidas) como forma 
de definir precisamente o papel do software neste contexto. Em seguida, a etapa de 
Análise de Requisitos vai permitir uma clara definição dos requisitos de software, 
sendo que o resultado será utilizado como referência para as etapas posteriores de 
Projeto, Codificação, Teste e Manutenção. 
 
17 
 
 
Fonte: jalvesnicacio.files.wordpress.com 
 
O modelo Queda d'Água apresenta características interessantes, 
particularmente em razão da definição de um ordenamento linear das etapas de 
desenvolvimento. Primeiramente, como forma de identificar precisamente o fim de 
uma etapa de o início da seguinte, um mecanismo de certificação (ou revisão) é 
implementado ao final de cada etapa; isto é feito normalmente através da aplicação 
de algum método de validação ou verificação, cujo objetivo será garantir de que a 
saída de uma dada etapa é coerente com a sua entrada (a qual já é a saída da etapa 
precedente). Isto significa que ao final de cada etapa realizada, deve existir um 
resultado (ou saída) a qual possa ser submetida à atividade de certificação. 
Estas saídas, obtidas ao final de cada etapa, são vistas como produtos 
intermediários e apresentam-se, normalmente, na forma de documentos (documento 
de especificação de requisitos, documento de projeto do sistema, etc.).Outra 
característica importante deste modelo é que as saídas de uma etapa são as entradas 
da seguinte, o que significa que uma vez definidas, elas não devem, em hipótese 
alguma ser modificadas. 
Duas diretivas importantes que norteiam o desenvolvimento segundo o modelo 
Queda d'Água, são: 
 
18 
 
 Todas as etapas definidas no modelo devem ser realizadas, isto porque, 
em projetos de grande complexidade, a realização formal destas vai 
determinar o sucesso ou não do desenvolvimento; a realização informal 
e implícita de algumas destas etapas poderia ser feita apenas no caso 
de projetos de pequeno porte; 
 A ordenação das etapas na forma como foi apresentada deve ser 
rigorosamente respeitada; apesar de que esta diretiva poderia ser 
questionada, a ordenação proposta pelo modelo, por ser a forma mais 
simples de desenvolver, tem sido também a mais adotada a nível de 
projetos de software. 
É importante lembrar, também que os resultados de um processo de 
desenvolvimento de software não devem ser exclusivamente o programa executável 
e a documentação associada. Existe uma quantidade importante de resultados (ou 
produtos intermediários) os quais são importantes para o sucesso do 
desenvolvimento. Baseados nas etapas apresentadas na figura acima (1.3), é 
possível listar os resultados mínimos esperados de um processo de desenvolvimento 
baseado neste modelo: Documento de Especificação de Requisitos, Projeto do 
Sistema, Plano de Teste e Relatório de Testes, Código Final, Manuais de Utilização, 
Relatórios de Revisões. 
Apesar de ser um modelo bastante popular, pode-se apontar algumas 
limitações apresentadas por este modelo: 
 O modelo assume que os requisitos são inalterados ao longo do 
desenvolvimento; isto em boa parte dos casos não é verdadeira, uma 
vez que nem todos os requisitos são completamente definidos na etapa 
de análise; 
 Muitas vezes, a definição dos requisitos pode conduzir à definição do 
hardware sobre o qual o sistema vai funcionar; dado que muitos projetos 
podem levar diversos anos para serem concluídos, estabelecer os 
requisitos em termos de hardware é um tanto temeroso, dadas as 
frequentes evoluções no hardware; 
 O modelo impõe que todos os requisitos sejam completamente 
especificados antes do prosseguimento das etapas seguintes; em 
alguns projetos, é às vezes mais interessante poder especificar 
 
19 
 
completamente somente parte do sistema, prosseguir com o 
desenvolvimento do sistema, e só então encaminhar os requisitos de 
outras partes; isto não é previsto a nível do modelo; 
 As primeiras versões operacionais do software são obtidas nas etapas 
mais tardias do processo, o que na maioria das vezes inquieta o cliente, 
uma vez que ele quer ter acesso rápido ao seu produto. 
De todo modo, pode vir a ser mais interessante a utilização deste modelo para 
o desenvolvimento de um dado sistema do que realizar um desenvolvimento de 
maneira totalmente anárquica e informal. 
4.2 Prototipação 
O objetivo da Prototipação é um modelo de processo de desenvolvimento que 
busca contornar algumas das limitações existentes no modelo Queda d'Água. A ideia 
por trás deste modelo é eliminar a política de "congelamento" dos requisitos antes do 
projeto do sistema ou da codificação. 
Isto é feito através da obtenção de um protótipo, com base no conhecimento 
dos requisitos iniciais para o sistema. O desenvolvimento deste protótipo é feito 
obedecendo à realização das diferentes etapas já mencionadas, a saber, a análise de 
requisitos, o projeto, a codificação e os testes, sendo que não necessariamente estas 
etapas sejam realizadas de modo muito explícito ou formal. 
Este protótipo pode ser oferecido ao cliente em diferentes formas, a saber: 
 
 Protótipo em papel ou modelo executável em PC retratando a interface 
homem máquina capacitando o cliente a compreender a forma de 
interação com o software; 
 Um protótipo de trabalho que implemente um subconjunto dos requisitos 
indicados; 
 Um programa existente (pacote) que permita representar toda ou parte 
das funções desejadas para o software a construir. 
Colocado à disposição do cliente, o protótipo vai ajudá-lo a melhor 
compreender o que será o sistema desenvolvido. Além disso, através da manipulação 
deste protótipo, é possível validar ou reformular os requisitos para as etapas seguintes 
 
20 
 
do sistema. Este modelo, ilustrado na figura abaixo (1.4), apresenta algumas 
características interessantes, tais como: 
 É um modelo de desenvolvimento interessante para alguns sistemas de 
grande porte os quais representem um certo grau de dificuldade para 
exprimir rigorosamente os requisitos; 
 Através da construção de um protótipo do sistema, é possível 
demonstrar a realizabilidade do mesmo; 
 É possível obter uma versão, mesmo simplificada do que será o sistema, 
com um pequeno investimento inicial. 
 
 
Fonte: jalvesnicacio.files.wordpress.com 
 
Os protótipos não são sistemas completos e deixam, normalmente, a desejar 
em alguns aspectos. Um destes aspectos é normalmente a interface com o usuário. 
Os esforços de desenvolvimento são concentrados principalmente nos algoritmos que 
implementem as principais funções associadas aos requisitos apresentados, a 
interface sendo, a este nível parte supérflua do desenvolvimento, o que permite 
caracterizar esta etapa por um custo relativamente baixo. 
Por outro lado, a experiência adquirida no desenvolvimento do protótipo vai ser 
de extrema utilidade nas etapas posteriores do desenvolvimento do sistema real, 
permitindo reduzir certamente o seu custo, resultando também num sistema melhor 
concebido. 
 
 
21 
 
4.3 Desenvolvimento Iterativo 
Este modelo também foi concebido com base numa das limitações do modelo 
Queda d'Água e combinar as vantagens deste modelo com as do modelo 
Prototipação. A ideia principal deste modelo, ilustrada na figura abaixo (1.5), é a de 
que um sistema deve ser desenvolvido de forma incremental, sendo que cada 
incremento vai adicionando ao sistema novas capacidades funcionais, até a obtenção 
do sistema final, sendo que, a cada passo realizado, modificações podem ser 
introduzidas. 
Uma vantagem desta abordagem é a facilidade em testar o sistema, uma vez 
que a realização de testes em cada nível de desenvolvimento é, sem dúvida, mais 
fácil do que testar o sistema final. Além disso, como na Prototipação, a obtenção de 
um sistema, mesmo incompleto num dado nível, pode oferecer ao cliente 
interessantes informações que sirvam de subsídio para a melhor definição de futuros 
requisitos do sistema. 
No primeiro passo deste modelo uma implementação inicial do sistema é 
obtida, na forma de um subconjunto da solução do problema global. Este primeiro 
nível de sistema deve contemplar os principais aspectos que sejam facilmente 
identificáveis no que diz respeito ao problema a ser resolvido. 
Um aspecto importante deste modelo é a criação de uma lista de controle de 
projeto, a qual deve apresentar todos os passos a serem realizados para a obtenção 
do sistema final. Ela vai servir também para se medir, num dado nível, o quão distante 
se está da última iteração. Cada iteração do modelo de Desenvolvimento Iterativo 
consiste em retirar um passo da lista de controle de projeto através da realização de 
três etapas: o projeto, a implementação e a análise. O processo avança, sendo que a 
cada etapa de avaliação, um passo é retirado da lista, até que a lista esteja 
completamente vazia. A lista de controle de projeto gerencia todo o desenvolvimento, 
definindo quais tarefas devem ser realizadas a cada iteração, sendo que as tarefas na 
lista podem representar,inclusive, redefinições de componentes já implementados, 
em razão de erros ou problemas detectados numa eventual etapa de análise. 
 
22 
 
 
Fonte: jalvesnicacio.files.wordpress.com 
 
4.4 O Modelo Espiral 
Este modelo, proposto em 1988, sugere uma organização das atividades em 
espiral, a qual é composta de diversos ciclos. Como mostrado na figura abaixo (1.6), 
a dimensão vertical representa o custo acumulado na realização das diversas etapas; 
a dimensão angular representa o avanço do desenvolvimento ao longo das etapas. 
Cada ciclo na espiral inicia com a identificação dos objetivos e as diferentes 
alternativas para se atingir aqueles objetivos assim como as restrições impostas. O 
próximo passo no ciclo é a avaliação das diferentes alternativas com base nos 
objetivos fixados, o que vai permitir também definir incertezas e riscos de cada 
alternativa. No passo seguinte, o desenvolvimento de estratégias permitindo resolver 
ou eliminar as incertezas levantadas anteriormente, o que pode envolver atividades 
de prototipação, simulação, avaliação de desempenho, etc... Finalmente, o software 
é desenvolvido e o planejamento dos próximos passos é realizado. 
A continuidade do processo de desenvolvimento é definida como função dos 
riscos remanescentes, como por exemplo, a decisão se os riscos relacionados ao 
desempenho ou à interface são mais importantes do que aqueles relacionados ao 
desenvolvimento do programa. Com base nas decisões tomadas, o próximo passo 
pode ser o desenvolvimento de um novo protótipo que elimine os riscos considerados. 
Por outro lado, caso os riscos de desenvolvimento de programa sejam 
considerados os mais importantes e se o protótipo obtido no passo corrente já resolve 
boa parte dos riscos ligados a desempenho e interface, então o próximo passo pode 
ser simplesmente a evolução segundo o modelo Queda d'Água. 
 
23 
 
Como se pode ver, o elemento que conduz este processo é essencialmente a 
consideração sobre os riscos, o que permite, de certo modo, a adequação a qualquer 
política de desenvolvimento (baseada em especificação, baseada em simulação, 
baseada em protótipo, etc.). 
 
Fonte: jalvesnicacio.files.wordpress.com 
 
Uma característica importante deste modelo é o fato de que cada ciclo é 
encerrado por uma atividade de revisão, onde todos os produtos do ciclo são 
avaliados, incluindo o plano para o próximo passo (ou ciclo). Numa aplicação típica 
do modelo, pode-se imaginar a realização de um ciclo zero, onde se avalie a 
realizabilidade do projeto, o resultado devendo ser a conclusão de que será possível 
implementar ou não o projeto de desenvolvimento. As alternativas consideradas neste 
caso são de muito alto nível, como por exemplo, se a organização deve desenvolver 
o sistema ela própria ou se deve contratar o desenvolvimento junto a uma empresa 
 
24 
 
especializada. O modelo se adequa principalmente a sistemas que representem um 
alto risco de investimento para o cliente.3 
4.5 Ciclo de Vida Clássico 
É o modelo mais antigo utilizado. É um método sistemático e sequencial, em 
que o resultado de uma fase se constitui na entrada da outra fase. Foi modelado de 
acordo com o ciclo da engenharia convencional e, segundo Pressman (1995), abrange 
as seguintes fases: 
 Análise de Engenharia de Sistema: conhecer o sistema e através dele 
estabelecer os requisitos que devam fazer parte do software; 
 Análise de Requisitos de Software: revisão de informações e requisitos 
e especificações das funcionalidades, desempenho e interface; 
 Projeto: constituído de pontos distintos: estrutura de dados, arquitetura 
do software, detalhes procedimentais e caracterização de interface. 
Traduz os requisitos levantados para avaliação e qualidade do software 
antes da codificação; 
 Codificação: transformação do projeto para que possa ser interpretado 
pela máquina. Se o projeto for bem detalhado a codificação torna-se 
praticamente mecânica; 
 Testes: etapa onde são verificados os erros e se o código produz o 
resultado desejado; 
 Manutenção: correção de erros e adaptação do software ao ambiente 
onde será instalado. 
Dentre as vantagens que podemos citar é que o modelo tem uma abordagem 
disciplinada e dirigida a documentação, tendo como problemas a dificuldade de seguir 
o fluxo, a determinação de requisitos iniciais (incerteza natural) e o resultado efetivo 
aparece apenas no final. 
Segundo Pressman (1995), "O ciclo de vida clássico continua sendo o modelo 
procedimental mais amplamente usado pela Engenharia de Software. Embora tenha 
 
3 Texto extraído do link: 
https://jalvesnicacio.files.wordpress.com/2010/03/engenharia-de-software.pdf 
 
25 
 
fragilidade, ele é significativamente melhor do que uma abordagem casual ao 
desenvolvimento de software". 
4.6 Técnicas de Quarta Geração 
O paradigma Técnicas de Quarta Geração (4GT) da Engenharia de Software 
concentra-se na capacidade de se especificar software a uma máquina em um nível 
que esteja próximo à linguagem natural ou de se usar uma notação que comunique 
uma função significativa. 
O 4GT inicia-se com uma etapa de coleta de requisitos. Idealmente, o cliente 
descreveria os requisitos, e estes seriam diretamente traduzidos num protótipo 
operacional. Mas isso não é idealmente possível. O cliente pode não ter certeza 
daquilo que é exigido, pode ser ambíguo ao especificar fatos que são conhecidos e 
pode ser inviável especificar as informações de maneira que uma ferramenta 4GT 
possa receber. Para pequenas aplicações, talvez seja possível passar diretamente da 
etapa de coleta das exigências para a implementação, utilizando uma linguagem de 
quarta geração (4GL). 
Para transformar a implementação de uma 4GT num produto, o desenvolvedor 
deve realizar testes cuidadosos, desenvolver uma documentação significativa e 
executar todas as demais atividades de "transição" que também são exigidas em 
outros paradigmas da Engenharia de Software. 
As técnicas de quarta geração já se tornaram uma parte importante do 
desenvolvimento de software na área de aplicação de sistemas de informação e a 
demanda de software continuará em ascensão, porém o software produzido com 
métodos e paradigmas convencionais contribuirá cada vez menos para todo o 
software desenvolvido. As técnicas de quarta geração preencherão a lacuna 
(PRESSMAN, 1995). 
5 REQUISITOS DE SOFTWARE 
Os requisitos expressam a necessidade e restrições colocadas sobre o produto 
de software que contribuem para a solução de algum problema do mundo real. Esta 
 
26 
 
área envolve elicitação, análise, especificação e validação dos requisitos de software 
(SWEBOK, 2004). 
Segundo Breitman e Sayão (2005), os requisitos de software são classificados 
em: 
 Requisitos funcionais: correspondem a funcionalidade do software e o 
que o sistema deve fazer; 
 Requisitos não funcionais: expressam restrições e características que o 
software deve atender ou ter; 
 Requisitos inversos: definem estados e situações que nunca podem 
acontecer. 
Pressman (2002) cita que “se você não analisa, é altamente provável que 
construa uma solução de software muito elegante que resolve o problema errado”. 
Esta atitude pode resultar em perda de tempo e dinheiro, pessoas frustradas e clientes 
insatisfeitos. 
5.1 Design de Software 
Segundo o SWEBOK (2004), esta área envolve definição da arquitetura, 
componentes, interfaces e outras características de um sistema ou componente. 
Visualizado como um processo, esta área é uma etapa do ciclo de vida da Engenharia 
de Software, onde os requisitos são analisados para produzir uma descrição daarquitetura do software. 
 Para Pressman (2002), design de software "é um processo iterativo através do 
qual os requisitos são traduzidos num documento para construção do software." 
5.2 Construção de Software 
Refere-se a implementação do software, verificação, testes de unidade, testes 
de integração e debugging. Esta área está envolvida com todas as áreas de 
conhecimento, porém, está fortemente ligada às áreas de Design e Teste de Software, 
pois o processo de construção abrange significativamente estas duas áreas 
(SWEBOK, 2004). 
As áreas correlatas à construção de software, segundo o SWEBOK (2004) são: 
 
27 
 
 Fundamentos: minimizar a complexidade, antecipar mudanças, construir 
para verificar e padrões de construção; 
 Gerenciamento da construção: modelos, planejamento e métricas; 
 Considerações práticas: design, linguagens, codificação, testes, 
reutilização, qualidade e integração. 
É importante que as funcionalidades do software sejam testadas durante todo 
o processo de desenvolvimento, não deixando apenas para a etapa de testes. 
5.3 Teste de Software 
Teste de software é uma atividade executada para avaliar a qualidade do 
produto, buscando identificar os defeitos e problemas existentes (SWEBOK, 2004). 
Para Pressman (2002), "teste de software é um elemento crítico da garantia de 
qualidade de software e representa a revisão final da especificação, projeto e geração 
de código." 
Segundo Coelho (2005) os tipos de teste são: 
 Teste funcional: verifica as regras de negócio, condições válidas e 
inválidas; 
 Teste de recuperação de falhas: as falhas são provocadas diversas 
vezes a fim de verificar a eficiência da recuperação; 
 Teste de desempenho: verifica o tempo de resposta e processamento 
para configurações diferentes; 
 Teste de segurança e controle de acesso: verifica a funcionalidade dos 
mecanismos de proteção de acesso e de dados; 
 Teste de interfaces com o usuário: verifica navegação, consistência e 
padrões; 
 Teste de volume: verifica até aonde o software suporta. 
A etapa de teste de software é relevante para que os erros possam ser 
encontrados e corrigidos antes que o software seja entregue ao cliente. 
 
28 
 
5.4 Manutenção de Software 
Esta área de conhecimento é definida como a totalidade das atividades 
requeridas para fornecer suporte custo-efetivo a um sistema de software, que pode 
ocorrer antes ou depois da entrega. Antes da entrega do software são realizadas 
atividades de planejamento e depois, modificações são feitas com o objetivo de 
corrigir falhas, melhorar o desempenho ou adaptá-las a um ambiente externo 
(SWEBOK, 2004). 
Os tipos de modificações durante a fase de manutenção, segundo Pressman 
(2002) são: 
 Manutenção corretiva: modifica o software para corrigir erros; 
 Manutenção adaptativa: altera o software para acomodar mudanças no 
seu ambiente externo; 
 Manutenção perfectiva: aprimora o software (solicitações do cliente); 
 Manutenção preventiva (reengenharia): modifica o software a fim de 
torná-los mais fáceis de serem corrigidos, adaptados e melhorados. 
Em torno de 60% do esforço despendido por uma organização de 
desenvolvimento é referente à manutenção de software. Este percentual continua 
crescendo à medida que mais softwares são produzidos. Manutenção de software não 
é só concertar erros. Apenas 20% do trabalho de manutenção é referente à correção 
de falhas e, os outros 80% refere-se a adaptações ao ambiente externo e a melhorias 
solicitadas pelos usuários (PRESSMAN, 2002). 
5.5 Gerenciamento de Configuração de Software 
Conforme Cunha et al (2004), o GCS (Gerenciamento de Configuração de 
Software) é um processo que provê recursos para a identificação, controle da 
evolução e auditagem dos artefatos de software criados durante o desenvolvimento 
do projeto. De grosso modo, é o controle de versões do software. 
A finalidade do GCS é estabelecer e manter a integridade dos produtos de 
software durante todo seu ciclo de vida (SWEBOK, 2004): 
 Identificar a configuração do software em um dado momento; 
 Controlar sistematicamente as mudanças de configuração; 
 
29 
 
 Manter a integridade e a rastreabilidade da configuração ao longo do 
ciclo de vida do software; 
 Controlar a integridade dos artefatos compostos, levando em conta cada 
um dos componentes do software; 
 Registrar e controlar o estado do processo de alteração. 
Porém, sua aplicação em empresas de desenvolvimento de software é 
complexa, e às vezes inviabilizada pelos gastos. Uma forma de contornar isso é 
desenvolver uma metodologia de gerenciamento de configuração que leve em conta 
somente aspectos relevantes para a realidade da empresa, descartando aqueles que 
são menos utilizados. 
5.6 Gerenciamento de Engenharia de Software 
Segundo SWEBOK (2004), Gerenciamento de Engenharia pode-se definir 
como a aplicação das atividades de gerenciamento: planejamento, coordenação, 
medição, monitoração, controle e documentação, garantindo que o desenvolvimento 
e a gerência de software sejam sistemáticos, disciplinados e qualificados. 
O Gerenciamento de Engenharia é tratado sob dois aspectos: 
 Engenharia de Processo: refere-se às atividades empreendidas para 
geração de políticas, padrões e objetivos organizacionais consistentes; 
 Engenharia de Mensuração: refere-se à atribuição de valores e rótulos 
às atividades referentes à Engenharia de Software. 
O gerenciamento de processo e a mensuração são importantes em todas as 
áreas de conhecimento, mas o Gerenciamento de Engenharia trata esses aspectos 
de forma mais direta. Um grande aliado desta área de conhecimento é o 
Gerenciamento de Projetos, que pode ser visto a seguir. 
5.7 Gerenciamento de Projetos de Software 
Projeto é um empreendimento temporário, de elaboração progressiva e com o 
objetivo de criar um produto ou serviço único (PMBOK, 2004). 
 
30 
 
 Temporário: o projeto possui início e fim bem definidos e pode ser de 
curta ou longa duração. O projeto chega ao fim quando os seus objetivos 
são atingidos; 
 Elaboração progressiva: o desenvolvimento ocorre em etapas e continua 
por incrementos; 
 Produto ou serviço único: cada projeto é exclusivo. 
Segundo o PMBOK (2004), o gerenciamento de projetos "é a aplicação de 
conhecimento, habilidades, ferramentas e técnicas às atividades do projeto a fim de 
atender aos seus requisitos". É realizado através de cinco grupos de processos: 
iniciação, planejamento, execução, monitoramento e controle, e encerramento. 
Para Pressman (2002), “a gestão do projeto envolve o planejamento, a 
monitoração e controle do pessoal, processo e eventos que ocorrem à medida que o 
software evolui de um conceito preliminar para uma implementação operacional". 
O gerenciamento de projetos auxilia as organizações a atenderem as 
necessidades de seus clientes, padronizando tarefas do dia a dia e reduzindo o 
número de tarefas, que muitas vezes são esquecidas (PMI-SC, 2006). 
Por fim, gerenciar projetos é manter o equilíbrio entre escopo, qualidade, 
custos, recursos e tempo (PMBOK, 2004). É papel do gerente de projetos avaliar os 
riscos e impactos associados a qualquer mudança em um desses fatores. 
5.8 Engenharia de Processo de Software 
Ferramentas de desenvolvimento de software são ferramentas criadas para 
auxiliar no ciclo de vida do software. Essas ferramentas normalmente automatizam 
algumas atividades do processo de desenvolvimento, fazendo com que o analista se 
concentre nas atividades que exigem maior trabalho intelectual (SWEBOK, 2004). 
Métodos de Engenharia de Software impõe estrutura sobre a atividade de 
desenvolvimento e manutenção de softwarecom o objetivo de torná-la sistemática e 
mais propensa ao sucesso (SWEBOK, 2004). 
Esta área de conhecimento tem como objetivo pesquisar ferramentas e 
métodos que aumentem a produtividade dos desenvolvedores enquanto reduzem a 
ocorrência de falhas no desenvolvimento (FERNANDES, 2003). 
 
31 
 
5.9 Qualidade de Software 
A qualidade de software não pode ser entendida como perfeição. Qualidade é 
um conceito multidimensional, realizado por um conjunto de atributos, representando 
vários aspectos relacionados ao produto: desenvolvimento, manutenção e uso. 
Qualidade é algo factível, relativo, dinâmico e evolutivo, adequando-se ao nível dos 
objetivos a serem atingidos (SIMÃO, 2002). 
Um dos principais objetivos da Engenharia de Software é melhorar a qualidade 
dos produtos de software, ela visa estabelecer métodos e tecnologias para construir 
produtos de software de qualidade dentro dos limites de tempo e recursos disponíveis. 
A qualidade de software está diretamente ligada com a qualidade do processo através 
do qual o software é desenvolvido, portanto, para se ter qualidade em um produto de 
software é necessário ter um processo de desenvolvimento bem definido, que deve 
ser documentado e acompanhado (SWEBOK, 2004). 
A avaliação da qualidade de produtos de software normalmente é feita através 
de modelos de avaliação de qualidade. Esses modelos descrevem e organizam as 
propriedades de qualidade do produto em avaliação. Os modelos de avaliação mais 
aceitos e usados no mercado são: 
 CMMI (Capability Maturity Model Integration), proposto pelo CMM 
(Capability Maturity Model); 
 Norma ISO/IEC 9126, proposta pela ISO (International Organization for 
Standardization). 
As organizações desenvolvedoras desses modelos de qualidade fornecem 
selos de qualidade para as empresas que se submetem às avaliações e estiverem 
dentro dos padrões propostos. Esses selos são muito valorizados pelas empresas que 
compram software, e representam um diferencial competitivo no mercado. Porém, 
nem todas as empresas têm condições financeiras de bancar os custos de uma 
aquisição de um selo de qualidade, pois implantar um processo de qualidade em uma 
empresa envolve custos elevados. Contudo, é possível implantar boas práticas e 
desenvolver um processo de desenvolvimento organizado adaptando modelos de 
desenvolvimento conhecidos, despendendo menos recursos e provendo um mínimo 
de sistematização no desenvolvimento de software, a fim de se ter maior qualidade.4 
 
4 Texto extraído do link: 
 
32 
 
6 SOFTWARE: MITOS E REALIDADE 
 
Fonte: leandromtr.com 
 
É possível apontar, como causas principais dos problemas levantados na seção 
anterior, três principais pontos: 
 A falta de experiência dos profissionais na condução de projetos de 
software; 
 A falta de treinamento no que diz respeito ao uso de técnicas e métodos 
formais para o desenvolvimento de software; 
 A “cultura de programação” que ainda é difundida e facilmente aceita por 
estudantes e profissionais de Ciências da Computação; 
 A incrível "resistência" às mudanças (particularmente, no que diz 
respeito ao uso de novas técnicas de desenvolvimento de software) que 
os profissionais normalmente apresentam. 
Entretanto, é importante ressaltar e discutir os chamados "mitos e realidades" 
do software, o que, de certo modo, explicam alguns dos problemas de 
desenvolvimento de software apresentados. 
6.1 Mitos de Gerenciamento 
Mito 1. "Se a equipe dispõe de um manual repleto de padrões e procedimentos 
de desenvolvimento de software, então a equipe está apta a encaminhar bem o 
desenvolvimento." 
 
http://www.joinville.udesc.br/portal/professores/claudinei/materiais/SOFT_VISAO_GERAL.pdf 
 
33 
 
 Realidade 1. Isto verdadeiramente não é o suficiente... é preciso que a equipe 
aplique efetivamente os conhecimentos apresentados no manual... é necessário que 
o que conste no dado manual reflita a moderna prática de desenvolvimento de 
software e que este seja exaustivo com relação a todos os problemas de 
desenvolvimento que poderão aparecer no percurso... 
 
Mito 2. "A equipe tem ferramentas de desenvolvimento de software de última 
geração, uma vez que eles dispõem de computadores de última geração." 
Realidade 2. Ter à sua disposição o último modelo de computador (seja ele um 
mainframe, estação de trabalho ou PC) pode ser bastante confortável para o 
desenvolvedor do software, mas não oferece nenhuma garantia quanto à qualidade 
do software desenvolvido. Mais importante do que ter um hardware de última geração 
é ter ferramentas para a automatização do desenvolvimento de software (as 
ferramentas CASE). 
 
Mito 3. "Se o desenvolvimento do software estiver atrasado, basta aumentar a 
equipe para honrar o prazo de desenvolvimento." 
Realidade 3. Isto também dificilmente vai ocorrer na realidade... alguém disse 
um dia que "... acrescentar pessoas em um projeto atrasado vai torná-lo ainda mais 
atrasado...". De fato, a introdução de novos profissionais numa equipe em fase de 
condução de um projeto vai requerer uma etapa de treinamento dos novos elementos 
da equipe; para isto, serão utilizados elementos que estão envolvidos diretamente no 
desenvolvimento, o que vai, consequentemente, implicar em maiores atrasos no 
cronograma. 
6.2 Mitos do Cliente 
Mito 4. "Uma descrição breve e geral dos requisitos do software é o suficiente 
para iniciar o seu projeto... maiores detalhes podem ser definidos posteriormente." 
Realidade 4. Este é um dos problemas que podem conduzir um projeto ao 
fracasso, o cliente deve procurar definir o mais precisamente possível todos os 
requisitos importantes para o software: funções, desempenho, interfaces, restrições 
 
34 
 
de projeto e critérios de validação são alguns dos pontos determinantes do sucesso 
de um projeto. 
 
Mito 5. "Os requisitos de projeto mudam continuamente durante o seu 
desenvolvimento, mas isto não representa um problema, uma vez que o software é 
flexível e poderá suportar facilmente as alterações." 
Realidade 5. É verdade que o software é flexível (pelo menos mais flexível do 
que a maioria dos produtos manufaturados). Entretanto, não existe software, por mais 
flexível que suporte alterações de requisitos significativas com adicional zero em 
relação ao custo de desenvolvimento. O fator de multiplicação nos custos de 
desenvolvimento do software devido a alterações nos requisitos cresce em função do 
estágio de evolução do projeto, como mostra a figura abaixo (1.1). 
 
 
Fonte: jalvesnicacio.files.wordpress.com 
 
6.3 Mitos do Profissional 
Mito 6. "Após a edição do programa e a sua colocação em funcionamento, o 
trabalho está terminado." 
 
35 
 
Realidade 6. O que ocorre na realidade é completamente diferente disto. 
Segundo dados obtidos a partir de experiências anteriores, 50 a 70% do esforço de 
desenvolvimento de um software é despendido após a sua entrega ao cliente 
(manutenção). 
 
Mito 7. "Enquanto o programa não entrar em funcionamento, é impossível 
avaliar a sua qualidade." 
Realidade 7. Na realidade, a preocupação com a garantia do software deve 
fazer parte de todas as etapas do desenvolvimento, sendo que, ao fim de cada uma 
destas etapas, os documentos de projeto devem ser revisados observando critérios 
de qualidade. 
 
Mito 8. "O produto a ser entregue no final do projeto é o programa funcionando." 
Realidade 8. O programa em funcionamento é uma das componentes do 
software...além do software, um bom projeto deve ser caracterizado pela produção de 
um conjunto importantede documentos.5 
7 LINGUAGENS DE PROGRAMAÇÃO 
Todas as etapas discutidas até o momento no contexto do curso são 
desenvolvidas visando a obtenção de um código executável que será o elemento 
central do produto de software. Sob esta ótica, o código do programa nada mais é do 
que uma formalização, numa dada linguagem, das ideias analisadas na etapa de 
engenharia do sistema, dos requisitos estabelecidos na etapa de análise e dos 
modelos gerados na etapa de projeto de modo a que o sistema computacional alvo 
possa executar as tarefas definidas e refinadas nas etapas anteriores. 
Codificação, que é o nome que se dá ao conjunto de atividades relacionadas a 
esta formalização, é feito uso de linguagens de programação como forma de 
expressar, numa forma mais próxima da linguagem processada pela máquina, os 
aspectos definidos nas etapas precedentes. 
 
5 Texto extraído do link: 
https://jalvesnicacio.files.wordpress.com/2010/03/engenharia-de-software.pdf 
 
36 
 
Num processo de desenvolvimento de software onde os princípios e 
metodologias da Engenharia de Software sejam aplicados corretamente, a codificação 
é vista como uma consequência natural do projeto. Entretanto, não se deve deixar de 
lado a importância das características da linguagem de programação escolhida nesta 
etapa nem o estilo de codificação adotado. 
7.1 A tradução 
Na etapa de codificação, o programador procura mapear corretamente as 
representações (ou modelos) obtidos no projeto detalhado nas construções 
suportadas por uma dada linguagem de programação. O resultado deste mapeamento 
constitui o código fonte, o qual será, na sequência, traduzido por um compilador 
gerando o código-objeto. Finalmente, o código-objeto será mapeado nas instruções 
executáveis pelo microprocessador que compõe o sistema computacional, resultando 
no código de máquina. 
Ainda em grande parte dos casos, o primeiro nível de mapeamento é obtido de 
forma manual ou semiautomatizada, estando sujeito, portanto, a “ruídos” inerentes do 
processo. Alguns exemplos de ruídos são: 
 Interpretação inadequada de aspectos da especificação de projeto; 
 Restrições ou complexidades características da linguagem de 
programação adotada; 
 etc... 
As restrições impostas por uma dada linguagem de programação ou o 
conhecimento incompleto das suas potencialidades pode conduzir a raciocínios (e 
consequentes projetos) relativamente limitados. 
7.2 Características das linguagens de programação 
Como já foi mencionado, as linguagens de programação funcionam no 
processo de desenvolvimento de software como o agente de formalização das 
representações de projeto perante o sistema computacional. As características de 
uma linguagem de programação podem exercer um impacto significativo no processo 
 
37 
 
de codificação segundo diferentes ângulos, os quais serão abordados nos parágrafos 
que seguem. 
7.3 Características Psicológicas 
Sob a ótica psicológica, aspectos tais como a facilidade de uso, simplicidade 
de aprendizagem, confiabilidade e baixa frequência de erros são características que 
devem ser apresentadas pelas linguagens de programação; estes fatores podem 
causar impacto significativo no processo de desenvolvimento de um software, 
considerando a codificação como uma atividade intrinsecamente humana. As 
características de ordem psicológica são apresentadas abaixo. 
 
 
 
Uniformidade 
Esta característica está relacionada à consistência (coerência) da notação 
definida para a linguagem, a restrições arbitrárias e ao suporte a exceções sintáticas 
e semânticas. Um exemplo (ou contraexemplo) significativo desta característica está 
na linguagem Fortran, que utiliza os parênteses para expressar dois aspectos 
completamente diferentes na linguagem — a precedência aritmética e a delimitação 
de argumentos de subprogramas). 
 
Ambiguidade 
Esta é uma característica observada pelo programador na manipulação da 
linguagem. Embora o compilador interprete a instrução de um único modo, o leitor 
(programador) poderá ter diferentes interpretações para a mesma expressão. Um 
caso típico de problema relacionado a esta característica é a precedência aritmética 
implícita. Por exemplo, a expressão X = X1/X2*X3 pode levar a duas interpretações 
por parte do leitor: X = (X1/X2)*X3 ou X = X1/(X2*X3). 
 
Concisão 
Esta é uma outra característica psicológica desejável nas linguagens de 
programação que está relacionada à quantidade de informações orientadas ao código 
 
38 
 
que deverão ser recuperadas da memória humana. Os aspectos que influem nesta 
característica são a capacidade de suporte a construções estruturadas, as palavras-
chave e abreviações permitidas, a diversidade com relação aos tipos de dados, a 
quantidade de operadores aritméticos e lógicos, entre outros. 
 
Localidade 
A localidade está relacionada ao suporte a construções que possam ser 
identificadas em blocos. O leitor identifica um conjunto de instruções a partir da 
visualização de um de seus componentes. Por exemplo, as construções do tipo IF-
THEN-ELSE, REPEAT-UNTIL, entre outras, são exemplos de construções que 
aumentam a característica de localidade numa linguagem. 
 
 
 
Linearidade 
A linearidade está relacionada à manutenção do domínio funcional, ou seja, a 
percepção é melhorada quando uma sequência de instruções lógicas é encontrada. 
Programas caracterizados por grandes ramificações violam esta característica. 
7.4 Características de Engenharia 
Numa visão de engenharia de software, as características das linguagens de 
programação estão relacionadas às necessidades do processo de desenvolvimento 
do software. Algumas características que podem ser derivadas segundo esta ótica 
são: 
 
Facilidade de derivação do código-fonte 
Esta característica está ligada à proximidade da sintaxe da linguagem de 
programação com as linguagens de representação de projeto. Na maior parte dos 
casos, as linguagens que suportam construções estruturadas, estruturas de dados 
relativamente complexas, possibilidade de manipulação de bits, construções 
orientadas a objetos e construções de entrada/saída especializadas permitem mapear 
mais facilmente as representações de projeto. 
 
39 
 
 
Eficiência do compilador 
Esta característica contempla os requisitos de tempo de resposta e concisão 
(exigência de pouco espaço de memória) que podem caracterizar determinados 
projetos. A maioria dos compiladores de linguagens de alto nível apresenta o 
inconveniente de geração de código ineficiente. 
 
Portabilidade 
Este aspecto está relacionado ao fato do código-fonte poder migrar de 
ambiente para ambiente, com pouca ou nenhuma alteração. Por ambiente, pode-se 
entender o processador, o compilador, o sistema operacional ou diferentes pacotes 
de software. 
 
 
Ambiente de Desenvolvimento 
Um aspecto fundamental é, sem dúvida, a disponibilidade de ferramentas de 
desenvolvimento para a linguagem considerada. Neste caso, deve ser avaliada a 
disponibilidade de outras ferramentas que as de tradução, principalmente, 
ferramentas de auxílio à depuração, edição de código-fonte, bibliotecas de sub-rotinas 
para uma ampla gama de aplicações (interfaces gráficas, por exemplo). 
 
Manutenibilidade 
Outro item de importância é a facilidade em alterar o código-fonte para efeito 
de manutenção. Esta etapa, em muitos casos negligenciada nos projetos de 
desenvolvimento de software, só poderá ser conduzida eficientemente a partir de uma 
completa compreensão do software. 
Embora a existência de documentação relativa ao desenvolvimento do software 
seja de fundamentalimportância, a clareza do código-fonte vai ser fator determinante 
para o sucesso das tarefas de manutenção. 
 
40 
 
7.5 Características Técnicas 
As duas classes de características apresentadas anteriormente são, de certo 
modo, consequência da forma como as linguagens de programação foram 
concebidas, tanto do ponto de vista sintático como semântico. A seguir, serão 
apresentadas as principais características “técnicas” das linguagens de programação, 
as quais exercem forte impacto na qualidade do software e nas condições sob as 
quais este é desenvolvido. 
 
Suporte a tipos de dados 
Quanto mais poderosos são os programas atuais, mais complexas são as 
estruturas de dados que estes manipulam. Nas linguagens de programação atuais, o 
suporte à representação dos dados é caracterizado por diferentes categorias de 
dados, desde estruturas extremamente simples até estruturas com alto grau de 
complexidade. A seguir são enumeradas algumas destas categorias: 
 Tipos numéricos (inteiros, complexos, reais, bit, etc.); 
 Tipos enumerados (valores definidos pelos usuários... cores, formas, 
etc.); 
 Cadeias de caracteres (strings); 
 Tipos booleanos (verdadeiro/falso); 
 Vetores (uni ou multidimensionais); 
 Listas, filas, pilhas; 
 Registros heterogêneos. 
Na maior parte dos casos, a manipulação lógica e aritmética de dados é 
controlada por mecanismos de verificação de tipos embutidos nos compiladores ou 
interpretadores. O objetivo deste mecanismo é garantir a coerência dos programas 
com relação às estruturas de dados e às operações que podem ser realizadas sobre 
eles. 
 
Os subprogramas 
Os subprogramas correspondem a componentes de programa contendo 
estruturas de controle e dados que podem ser compilados separadamente. Com 
relação aos elementos de um software definidos na etapa de projeto, pode-se, 
 
41 
 
eventualmente, considerar subprogramas como o mapeamento natural dos módulos 
de um software, embora não necessariamente os módulos (que correspondem a uma 
definição mais genérica) serão mapeados em subprogramas. Os subprogramas 
recebem diferentes denominações, dependendo da linguagem de programação 
considerada (sub-rotinas, procedimentos, funções, módulos, agentes, processos, 
objetos). Independentemente da linguagem de programação considerada, os 
subprogramas são caracterizados pelos seguintes elementos: 
 Uma seção de especificação (declaração), contendo o seu identificador 
e uma descrição da interface; 
 Uma seção de implementação, onde é descrito o seu comportamento 
através das estruturas de controle e dados; 
 Um mecanismo de ativação, o qual permite invocar o subprograma a 
partir de um ponto qualquer do programa (por exemplo, uma instrução 
call) 
 
Estruturas de controle 
Praticamente todas as linguagens de programação oferecem suporte à 
representação das estruturas de controle mais clássicas, como sequências, condições 
e repetições. A maior parte destas linguagens oferece um conjunto de estruturas 
sintáticas quase que padronizadas que permitem exprimir estruturas como IF-THEN-
ELSE, DOWHILE, REPEAT-UNTIL e CASE. 
 Além das estruturas clássicas mencionadas, outros fatores podem ser 
interessantes como suporte a aspectos de programação não contemplados nestas 
estruturas. Abaixo são citados alguns destes fatores: 
 A recursividade, que permite que um subprograma contenha em seu 
código uma ativação a si próprio; 
 A concorrência, que permite a criação de múltiplas tarefas e oferece 
suporte à comunicação e sincronização destas tarefas; 
 O tratamento de exceções, que permite ativar a execução de um 
conjunto de instruções a partir da ocorrência de um evento significativo 
do sistema computacional (erro de execução, relógio de tempo real, etc.) 
ou definido pela aplicação (interrupção causada pela pressão de uma 
tecla, chegada de uma mensagem, etc.). 
 
42 
 
 
Suporte a abordagens orientadas a objeto 
Não obstante o resultado da aplicação de uma abordagem orientada a objeto 
possa ser codificada a partir de qualquer linguagem de programa, o mapeamento dos 
elementos especificados no projeto fica mais simples se a linguagem de programação 
oferece suporte a esta abordagem. 
Sendo assim, o suporte a conceitos como classe, herança, encapsulamento e 
troca de mensagens pode ser um aspecto interessante numa linguagem utilizada na 
implementação de um projeto orientado a objetos. 
7.6 Critérios de Escolha de uma Linguagem de Programação 
As características apresentadas acima devem ser levadas em conta no 
momento da escolha de uma linguagem de programação no contexto de um projeto 
de software. Por outro lado, outros critérios podem auxiliar na decisão, entre eles: 
 A área de aplicação para a qual o software está sendo construído; 
 A complexidade computacional e algorítmica do software; 
 O ambiente no qual o software vai executar; 
 Os requisitos de desempenho; 
 A complexidade da estrutura de dados; 
 O conhecimento da equipe de desenvolvimento; 
 A disponibilidade de boas ferramentas de desenvolvimento. 
 
8 CLASSES DE LINGUAGENS 
Devido à grande diversidade das linguagens de programação existentes nos 
dias atuais, é interessante estabelecer uma classificação que permita situá-las no 
contexto do desenvolvimento de programas. Embora os critérios de classificação 
possam ser os mais diversos, adotou-se aqui uma ótica cronológica, onde as 
linguagens posicionam-se, de certo modo, em função de suas características técnicas. 
 
43 
 
8.1 Linguagens de Primeira Geração 
Nesta classe de linguagens, desenvolvidas nos primórdios da computação, 
enquadram-se as linguagens em nível de máquina. O código de máquina representa 
a linguagem interpretada pelos microprocessadores, sendo que cada 
microprocessador é caracterizado por uma linguagem de máquina própria, podendo, 
eventualmente, estabelecer-se certa compatibilidade em software entre 
microprocessadores de uma mesma família (fabricante). 
Embora tendo seu uso bastante limitado, alguns programas ainda são 
realizados utilizando o código de máquina ou, mais precisamente, seu equivalente 
“legível”, a linguagem Assembly. 
Numa ótica de Engenharia de Software, a programação através de linguagens 
desta classe limita-se a situações onde a linguagem de alto nível adotada para a 
programação não suporte alguns requisitos especificados. 
8.2 Linguagens de Segunda Geração 
As linguagens de segunda geração constituem as primeiras linguagens de “alto 
nível”, que surgiram entre o final da década de 50 e início dos anos 60. Linguagens 
como Fortran, Cobol, Algol e Basic, com todas as deficiências que se pode apontar 
atualmente, foram linguagens que marcaram presença no desenvolvimento de 
programas, sendo que algumas delas têm resistido ao tempo e às críticas, como por 
exemplo Fortran que ainda é visto como uma linguagem de implementação para 
muitas aplicações de engenharia. Cobol, por outro lado, ainda é uma linguagem 
bastante utilizada no desenvolvimento de aplicações comerciais. 
8.3 Linguagens de Terceira Geração 
Nesta classe, encaixam-se as chamadas linguagens de programação 
estruturada, surgidas em meados dos anos 60. O período compreendido entre a 
década de 60 e a de 80 foi bastante produtivo no que diz respeito ao surgimento de 
linguagens de programação, o que permitiu o aparecimento de uma grande 
quantidade de linguagens as quais podem ser organizadas da seguinte forma: 
 
44 
 
 As linguagens de uso geral, as quais podem ser utilizadas para 
implementação de programas com as mais diversas características e 
independente da área de aplicação considerada; encaixam-se nesta

Continue navegando