Buscar

Livro-Texto - Unidade I (1)

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

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

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ê viu 3, do total de 41 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

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

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ê viu 6, do total de 41 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

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

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ê viu 9, do total de 41 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

Prévia do material em texto

Autor: Prof. Edson Quedas Moreno
Colaboradores: Prof. Antônio Palmeira de Araújo Neto
 Prof. José Carlos Morilla
Fundamentos de 
Engenharia de Software
Professor conteudista: Edson Quedas Moreno
Graduado em 1983 em Engenharia Eletrônica pela Faculdade de Engenharia Industrial (FEI), com ênfase em 
Computação. Possui pós-graduação lato sensu em Novas Tecnologias de Ensino-Aprendizagem pela UniÍtalo (2011). 
Mestre em Engenharia de Produção pela Universidade Paulista (UNIP), com ênfase em Sistemas de Informação (2002).
Exerce há mais de 30 anos atividades na área da educação e do ensino. Desde 1989, é professor e conteudista nos 
cursos de graduação e pós-graduação, atuando nos cursos da área de Negócios, Computação e Informação da UNIP e 
da UniÍtalo. Foi coordenador de cursos entre 1989 e 2016 na UniÍtalo e na Kroton/Anhanguera. Desde 2002, já atuou 
como professor, tutor e conteudista no Senac, na Kroton/Anhanguera, na Fecap e no curso de MBA em Engenharia de 
Software e da Informação da Uninove.
Trabalhou por mais de 25 anos na área corporativa. Desde 2002, é diretor da empresa Asserti; foi sócio das 
empresas Consultoria EaD e ITGVBR (2009 a 2012); gerente de sistemas na Panrotas Editora (1994 a 2000); analista 
de sistemas pela Cisco (1985 a 1994); programador pela Digilab/Bradesco (1983 a 1985). Áreas de conhecimento 
nas quais atuou: Computação e Informação, com ênfase em Engenharia de Software, Projetos de Software e 
de Sistemas e Tecnologias de Ensino a Distância; e em Engenharia de Produção, com ênfase em Administração, 
Projetos, Logística e Produção. Em 2015, arquitetou um Hackathon (maratona de programação de software por 
30 horas contínuas com a participação de duzentos alunos), com apoio da Kroton/Anhanguera e da Microsoft, 
evento que foi promovido pela Secretaria Municipal de Promoção da Igualdade Racial da Prefeitura de São Paulo 
(SMPIR) e pelo Banco Interamericano de Desenvolvimento (BID). Em 2016, esse Hackathon recebeu da Braslider o 
Prêmio Excelência e Qualidade Brasil.
© Todos os direitos reservados. Nenhuma parte desta obra pode ser reproduzida ou transmitida por qualquer forma e/ou 
quaisquer meios (eletrônico, incluindo fotocópia e gravação) ou arquivada em qualquer sistema ou banco de dados sem 
permissão escrita da Universidade Paulista.
Dados Internacionais de Catalogação na Publicação (CIP)
M843f Moreno, Edson Quedas.
Fundamentos de Engenharia de Software / Edson Quedas 
Moreno. – São Paulo: Editora Sol, 2021.
160 p., il.
Nota: este volume está publicado nos Cadernos de Estudos e 
Pesquisas da UNIP, Série Didática, ISSN 1517-9230.
1. Software. 2. Princípios. 3. Gerenciamento. I. Título.
CDU 681.3.02
U511.31 – 21
Prof. Dr. João Carlos Di Genio
Reitor
Prof. Fábio Romeu de Carvalho
Vice-Reitor de Planejamento, Administração e Finanças
Profa. Melânia Dalla Torre
Vice-Reitora de Unidades Universitárias
Profa. Dra. Marília Ancona-Lopez
Vice-Reitora de Pós-Graduação e Pesquisa
Profa. Dra. Marília Ancona-Lopez
Vice-Reitora de Graduação
Unip Interativa – EaD
Profa. Elisabete Brihy 
Prof. Marcello Vannini
Prof. Dr. Luiz Felipe Scabar
Prof. Ivan Daliberto Frugoli
 Material Didático – EaD
 Comissão editorial: 
 Dra. Angélica L. Carlini (UNIP)
 Dr. Ivan Dias da Motta (CESUMAR)
 Dra. Kátia Mosorov Alonso (UFMT)
 Apoio:
 Profa. Cláudia Regina Baptista – EaD
 Profa. Deise Alcantara Carreiro – Comissão de Qualificação e Avaliação de Cursos
 Projeto gráfico:
 Prof. Alexandre Ponzetto
 Revisão:
 Vitor Andrade
 Giovanna Oliveira
 Lucas Ricardi
Sumário
Fundamentos de Engenharia de Software
APRESENTAÇÃO ......................................................................................................................................................9
INTRODUÇÃO ........................................................................................................................................................ 10
Unidade I
1 FUNDAMENTOS DA ENGENHARIA DE SOFTWARE ............................................................................. 11
1.1 Engenharia de software ..................................................................................................................... 11
1.2 Engenharia de sistemas ..................................................................................................................... 13
1.3 O produto software ............................................................................................................................. 14
1.3.1 Tipos de produção de software ......................................................................................................... 16
1.4 Fábrica de software ............................................................................................................................. 18
1.4.1 Problemas enfrentados pelos fabricantes de software ........................................................... 20
1.5 Características do software .............................................................................................................. 20
1.5.1 Dualidade do software com o hardware ....................................................................................... 21
2 PRINCÍPIOS DO DESENVOLVIMENTO DE SISTEMAS .......................................................................... 25
2.1 Aplicações e desenvolvimento de sistemas computacionais ............................................. 25
2.1.1 O que diferencia um software de outro? ...................................................................................... 25
2.2 Ambiente computacional .................................................................................................................. 31
2.3 Problemas de relacionamento entre gerência, cliente e desenvolvedor ....................... 32
2.4 Projeto e construção do software ................................................................................................. 34
Unidade II
3 PROCESSO DE SOFTWARE ............................................................................................................................ 42
3.1 Processo de software e o desenvolvimento do projeto ........................................................ 42
3.1.1 Planejamento do processo .................................................................................................................. 43
3.1.2 Decomposição do processo ................................................................................................................ 44
3.2 Gestão de planejamento do software .......................................................................................... 46
3.2.1 Análise de recursos para os processos do projeto ..................................................................... 47
3.2.2 Recursos do projeto e do produto ................................................................................................... 47
3.3 Fusão do produto e do processo .................................................................................................... 49
3.3.1 Estrutura organizacional para o desenvolvimento de software .......................................... 49
3.3.2 Generalidades sobre o arcabouço do processo ........................................................................... 51
3.3.3 Gerenciamento da equipe de desenvolvimento......................................................................... 53
4 MODELOS DE PROCESSOS DE SOFTWARE ............................................................................................. 56
4.1 Modelos de processos de software tradicionais ...................................................................... 56
4.1.1 Modelo cascata (Waterfall ou sequencial linear) ...................................................................... 57
4.1.2 Modelo balbúrdia (codifica/corrige ou codifica/remenda) .................................................... 58
4.1.3 Prototipagem ............................................................................................................................................59
4.1.4 Incremental ............................................................................................................................................... 61
4.1.5 Modelo espiral .......................................................................................................................................... 62
4.1.6 RAD ............................................................................................................................................................... 63
4.2 Processo unificado ............................................................................................................................... 65
4.2.1 RUP ............................................................................................................................................................... 65
4.2.2 Praxis ............................................................................................................................................................ 72
4.3 Modelos de processo pessoal e de equipe ................................................................................. 72
4.3.1 PSP ................................................................................................................................................................ 72
4.3.2 TSP................................................................................................................................................................. 74
Unidade III
5 METODOLOGIAS ÁGEIS ................................................................................................................................. 80
5.1 Manifesto para Desenvolvimento Ágil de Software .............................................................. 80
5.2 Metodologias ágeis .............................................................................................................................. 82
5.2.1 Extreme Programming (XP) ................................................................................................................ 82
5.2.2 Scrum ........................................................................................................................................................... 84
5.2.3 FDD ............................................................................................................................................................... 86
5.2.4 DSDM ........................................................................................................................................................... 88
5.2.5 Crystal .......................................................................................................................................................... 90
5.2.6 Agile Modeling (AM) .............................................................................................................................. 91
6 ENGENHARIA DE REQUISITOS .................................................................................................................... 92
6.1 Processo da engenharia de requisitos do software ................................................................ 92
6.2 Estudo da viabilidade do sistema .................................................................................................. 95
6.3 Elicitação e análise de requisitos ................................................................................................... 96
6.3.1 Elicitação .................................................................................................................................................... 96
6.3.2 Levantamento e análise de requisitos ............................................................................................ 99
6.4 Especificação, documentação e modelagem dos requisitos ............................................... 99
6.4.1 O documento de requisitos de software .....................................................................................100
6.4.2 Requisitos do usuário (RU) ...............................................................................................................102
6.4.3 Requisitos funcionais (RF) .................................................................................................................103
6.4.4 Requisitos não funcionais (RNF).....................................................................................................105
6.4.5 Requisitos do sistema (RS) ................................................................................................................106
6.4.6 Validação dos requisitos .....................................................................................................................109
Unidade IV
7 PRINCÍPIOS QUE ORIENTAM A PRÁTICA ..............................................................................................115
7.1 A essência da prática ........................................................................................................................115
7.1.1 Princípios fundamentais ....................................................................................................................115
7.2 Princípios das atividades metodológicas ..................................................................................117
7.2.1 Princípios da comunicação ...............................................................................................................117
7.2.2 Princípios de planejamento ..............................................................................................................118
7.2.3 Princípios de modelagem ..................................................................................................................119
7.2.4 Princípios de construção ...................................................................................................................121
7.2.5 Princípios de codificação .................................................................................................................. 123
7.2.6 Princípios de disponibilização ......................................................................................................... 123
7.3 Atividade de verificação do código do software ...................................................................124
7.3.1 Abordagens top-down (de cima para baixo) e bottom-up (de baixo para cima) ..... 125
8 INTEGRAÇÃO E ENTREGA DO SISTEMA ................................................................................................126
8.1 Projeto de arquitetura ......................................................................................................................126
8.1.1 Evolução da arquitetura do sistema ............................................................................................ 129
8.1.2 Arquiteturas multiprocessadas e multicomputadorizadas ................................................. 132
8.2 Testes e diagnósticos ........................................................................................................................134
8.2.1 Testes alfa e beta .................................................................................................................................. 135
8.2.2 Testes caixa-preta e caixa-branca ................................................................................................. 136
8.3 Manutenção do software ................................................................................................................138
8.3.1 Fundamentos da manutenção ....................................................................................................... 140
8.3.2 Procedimentos de manutenção ......................................................................................................141
8.3.3 Prevenção de defeitos com Cleanroom .......................................................................................141
8.4 Gerenciamento de configuração do software ........................................................................1428.4.1 Gerenciamento de mudanças ......................................................................................................... 142
8.4.2 Gerenciamento de versões ............................................................................................................... 143
8.4.3 Construção de sistemas: entrega .................................................................................................. 145
8.4.4 Gerenciamento de releases .............................................................................................................. 146
9
APRESENTAÇÃO
Esta disciplina contribui com a teoria, a prática do projeto e a construção do produto software de 
computador, observando o sistema a partir da perspectiva de um engenheiro. Destaca-se a evolução 
da construção do produto ao longo das etapas do ciclo de vida do desenvolvimento. Na pesquisa 
das possíveis causas, caminhos e soluções, são apresentados conceitos no seu contexto de aplicação, 
exemplos reais que contribuem para a compreensão das técnicas de desenvolvimento, gerenciamento 
de projetos de software em empresas, papéis das equipes de desenvolvimento em cada estágio do 
processo e mudanças que afetam o modo da prática da engenharia de software.
Por se tratar de uma nova área de engenharia, a proposta desta disciplina é capacitar o aluno 
no conhecimento e nas práticas profissionais de desenvolvimento de software, fornecendo uma base 
suficiente de aprendizado para iniciar na engenharia de software.
Este livro-texto foi dividido em quatro unidades, sendo cada unidade dividida em dois capítulos.
Na unidade I, identifica-se a dualidade entre a engenharia de software e a engenharia de sistemas, 
apresentando o que é o produto de software, sua forma de produção, bem como suas características 
e aplicações. Após conceituar engenharia de software e o produto software, são destacados os princípios 
do desenvolvimento de software e de sistemas, mostrando problemas e soluções relativas ao produto, os 
perfis de profissionais que atuam nesse processo e como o software é construído.
Por sua vez, a unidade II conceitua o processo de software, mostra suas etapas e como decompor 
o processo e determinar os recursos do projeto e do produto software, orientadas por estruturas 
organizacionais por meio de modelos de processo de software. Esses modelos ilustram os métodos e 
as técnicas aplicadas no ciclo de desenvolvimento de software desde os estágios iniciais de concepção, 
sua análise, construção, entrega e evolução. São acentuados os principais modelos, tais como: cascata, 
incremental, espiral, processos unificados, modelos pessoais e de equipe.
Na unidade III, em contraponto às metodologias prescritivas, são elencadas as principais 
metodologias ágeis de desenvolvimento do software, tais como: XP, Scrum, FDD, DSDM, Crystal e AM, 
que servem de apoio aos modelos de processos de software. A concepção para o projeto de software 
constitui os procedimentos para criar o documento de requisitos do software, que define: requisitos 
do usuário, requisitos do sistema, requisitos funcionais e não funcionais. Contemplam-se, ainda, as 
principais atividades e práticas no estudo de viabilidade do sistema, elicitação, análise, especificação, 
modelagem e validação para o processo, o projeto e o produto software.
Na unidade IV, falaremos sobre como, a partir dos requisitos e da disposição de processos para a 
construção do software, a engenharia de software apresenta os princípios das atividades metodológicas 
voltadas para a comunicação, o planejamento, a modelagem, a construção e a disponibilização do 
software. O objetivo é conduzir à prática de projetar, construir, dar garantias e dispor o software. Para 
garantir a mantenabilidade do software, são abordados processos de mudanças no software, durante 
o desenvolvimento e mesmo depois que ele tiver sido liberado. O acompanhamento dessas mudanças 
garante que o produto software foi construído de acordo com o que foi pedido.
10
A linguagem utilizada para a elaboração deste livro-texto é estritamente técnica. Os estudos, 
pesquisas e práticas apresentadas são resultados em campo das atividades de engenharia de software 
aplicadas no projeto e na construção de um software.
Este livro-texto não apresenta a engenharia de software em sua totalidade. Contudo, traz diversas 
leituras, links de acesso, exemplos e casos aplicados da engenharia de software, dicas de ferramentas de 
desenvolvimento, tecnologia ao nosso alcance e melhor capacitação profissional.
INTRODUÇÃO
O computador surgiu durante a Segunda Guerra e se tornou público em 1947. Desde então, 
o mundo começou a consumir software e não parou mais. Sua demanda aumentou e novos produtos 
de software foram surgindo. Destaca-se que a produção de software ainda não conseguiu atender 
a demanda do consumidor. Foi necessário criar novas formas para produzir software. Pode-se dizer que 
estamos no início da era do software.
Com o computador, o ser humano automatiza o conhecimento. Ademais, a humanidade prosperou 
nos últimos 50 anos o que não conseguiu em 5 mil anos, e o software foi o responsável.
No início dos anos 1990, difundiu-se a internet e, em consequência, o e-mail. Houve também a 
promoção da agenda de grupo on-line e a informação em alto estilo com a world wide web (www). De 
fato, foi um dos avanços mais significativos da história da humanidade. Por meio desses elementos, vários 
outros sistemas de comunicação foram criados. Assim, a tecnologia da informação (TI) foi impulsionada.
Na passagem do milênio, a questão passou a ser a velocidade. Os empresários precisavam ter rapidez 
em estratégias, processos, transações comerciais, em questões logísticas e no acesso às informações.
A tecnologia e os sistemas produtivos passaram por muitas melhorias. Desse modo, começaram a 
ser usadas ferramentas digitais para controlar atividades básicas de produção e gestão dos negócios. A 
TI proporciona alta velocidade do conhecimento para competir no mundo dos negócios: é o começo de 
um novo ciclo na história, a era da informação e do conhecimento.
Nesse novo ciclo, a engenharia de software fornece às empresas mecanismos de acesso instantâneo 
às informações, velocidade para lançar produtos antes da concorrência, estatísticas atualizadas em 
tempo real para cada produto em qualquer lugar do mundo e diversos outros meios facilitadores que 
possibilitam ao gestor ou ao operacionalizador se manter na vanguarda dos negócios. Software e 
sistemas poderosos auxiliam nesse desempenho. A indústria se automatiza, eletroeletrônicos se tornam 
digitais, a informação liga o planeta e as pessoas. Pode-se dizer que hoje vivemos em um “sistema de 
conhecimento distribuído”.
11
FUNDAMENTOS DE ENGENHARIA DE SOFTWARE
Unidade I
1 FUNDAMENTOS DA ENGENHARIA DE SOFTWARE
1.1 Engenharia de software
A engenharia de software projeta e constrói o produto software de computador. Abrange programas 
que são executados em computadores de qualquer tamanho e arquitetura, bem como o processamento 
de dados e informações, que incluem formas impressas e virtuais, combinando caracteres dos mais 
variados tipos, incluindo representações de informação no formato de imagens, vídeos e áudios.
As tecnologias atuais resultam da convergência de sistemas de computadores, diversas mídias, 
sistemas de comunicação e sistemas mecatrônicos. O que suscita questões complexas para os 
engenheiros de software são: hardware diferente, diversos ambientes operacionais, regras do negócio 
que mudam constantemente, adaptações a novas tecnologias e interfaces, bem como a ligação de todos 
esses elementos.
O software é uma tecnologia indispensável para os negócios, o entretenimento, a ciência e a 
engenharia. O desenvolvimento de um sistema computacional, seja ele voltado para negócios, web, 
aplicação científica, automação industrial e outras aplicações, inicia-se pelo software, ferramenta que 
atende a necessidade (ou resolve um problema) de cálculo, de automação,de manufatura, do negócio 
empresarial, da engenharia e da ciência.
“Software de computadores continua a ser a tecnologia única mais importante no cenário mundial” 
(PRESSMAN, 2011).
Os problemas de qualidade de hardware podem ser corrigidos pela substituição de peças, ao 
contrário do software, que é desenvolvido ou passa por um processo de engenharia, não é um 
produto industrializado.
O software é um produto produzido a partir de perguntas e respostas, as quais levam à modelagem 
de componentes que fornecem detalhes para codificação.
O custo do software está concentrado no trabalho de engenharia, que, por sua vez, contempla os 
seguintes itens:
• especificação, documentação e procedimentos;
• análise, projeto, codificação, implementação, testes, diagnósticos e implantação;
• suporte ao cliente/usuário.
12
Unidade I
Produzir software que apresente uma boa relação custo/benefício é essencial para o funcionamento 
das economias nacionais e internacionais (SOMMERVILLE, 2011).
Por terem similaridades com a engenharia de software, algumas disciplinas se confundem, como é o 
caso da engenharia de sistemas – no aspecto profissional –, pois boa parte dos métodos e técnicas são 
semelhantes; contudo, são disciplinas distintas.
A engenharia de software usa o conhecimento e os resultados de diversas áreas, fornece outros 
problemas de estudo, bem como auxilia na resolução de problemas.
“O mundo moderno não poderia existir sem o software. Infraestruturas e serviços nacionais são 
controlados por sistemas computacionais, e a maioria dos produtos elétricos inclui um computador e 
um software que o controlam” (SOMMERVILLE, 2011, p. 2).
Estudo de caso: modelagem de um sistema de bomba de insulina
Do ponto de vista da engenharia de sistemas, a análise da bomba de insulina é apresentada em um 
diagrama de blocos, como mostrado na Figura 1. O modelo ilustra os componentes de hardware e o 
fluxo de controle para a bomba de insulina.
Módulo de agulha
Sensor
Bomba
Controlador
Display 1
Relógio
Alarme
Display 2
Reservatório de insulina
Fonte de energia
Figura 1 – Hardware de bomba de insulina
Sob o prisma da engenharia de software, a análise da bomba de insulina é apresentada em um 
modelo de negócio com um diagrama de atividades, conforme a Figura 2. O modelo expressa algumas 
funções de interface com o usuário e com o hardware que devem ser apresentadas pelo software.
Sensor de 
sangue
Dados da 
bomba
Bomba de 
insulina
Açúcar no 
sangue
Registro 
de insulina
Dose de 
insulina
Calcular 
insulina
Registro de dose
Analisar a leitura 
do sensor
Controlar bomba 
de insulina
Processar comandos 
da bomba
Figura 2 – Modelo de atividade da bomba de insulina
13
FUNDAMENTOS DE ENGENHARIA DE SOFTWARE
1.2 Engenharia de sistemas
A engenharia de sistemas é uma disciplina presente em muitos projetos de desenvolvimento de 
software. Focaliza diversos elementos e, nesse sentido, analisa, projeta e organiza esses elementos em 
um sistema para atender um objetivo específico, que pode ser um produto ou uma tecnologia para 
transformar a informação ou auxiliar no controle de algum ambiente operacional. A engenharia de 
sistema tem a visão voltada para a interface e ligação entre os elementos. Também trata da integração dos 
principais elementos que compõem os sistemas computacionais, que são: software, hardware, pessoal, 
base de dados e redes de computadores. A integração desses elementos dará suporte ao software. Cada 
elemento da engenharia de sistemas em estudo possui suas características próprias referentes a projeto, 
modelos, procedimentos e documentos específicos do elemento em desenvolvimento.
A Figura 3, um diagrama de componentes e implantação, mostra a ligação dos principais elementos 
que compõem o sistema computacional e a forma pela qual vão interagir para que, nesse sentido, 
possam funcionar com boa eficácia e eficiência quando reunidos em determinado conjunto.
Cliente - PC Computer
<<TCP/IP>>
<<HTTP>>
Cliente - SO Windows
Cliente - Browser
Nó 1 - Server computer 1
<<HTML>>
Server - SOR Windows
Web - Server - Microsoft Ils
Server - Gerenciador de telas
Server - Gerenciador de contas
<<HTML>>
<<HTML>><<TCP/IP>><<DNS>>
<<JSP>>
Nó 2 - Server computer 2
<<MySQL>>
Server - SOR Linux
Web Server - Apache/Tomcat
Server - App-controle de estoque
Server - SGBD MySQL
<<JSP>>
<<MySQL>>
Figura 3 – Infraestrutura projetada pela engenharia de sistemas 
para atender a aplicação de controle de estoques
Na Figura 3 são vistas as ligações dos elementos do sistema, representados pelos seus componentes, 
tais como: computadores, protocolos de rede, bibliotecas, linguagem de programação e detalhes 
de conexões.
14
Unidade I
São bases para a engenharia de sistemas: procedimentos e documentos com elementos do sistema 
que devem ser identificados; requisitos operacionais que devem ser atingidos, analisados, especificados, 
modelados, validados e gerenciados.
Exemplo de aplicação
Como vimos, a engenharia de software projeta e constrói software para computador. 
O exemplo a seguir mostra um problema comum de software cuja solução está na engenharia 
de sistemas.
Uma característica que mostra a influência da engenharia de sistemas em um projeto de software 
está no teste de determinada funcionalidade: a engenharia de software desenvolve uma funcionalidade 
que possui a particularidade de fazer múltiplos acessos a um banco de dados em determinada rede 
de computadores, porém o desenvolvimento do software é único e faz testes do código e ambiente 
restrito. Por essa razão, os múltiplos acessos, que podem ocorrer também em múltiplas estações de 
computadores, podem degradar o desempenho de uso do software. A engenharia de sistemas, por sua 
vez, cuida do aspecto de banda de rede e da capacidade do serviço de banco de dados em atender as 
requisições de múltiplos usuários do software.
1.3 O produto software
Nos últimos 60 anos, o produto software tem sido responsável por grandes avanços da humanidade.
O uso inteligente da informação e ideias inovadoras passaram a ser prioridades para o crescimento 
das empresas, as quais, na era informação, concorrem em um mercado complexo, que muda muito 
rápido, é globalizado, supercompetitivo e voltado para o cliente.
O software muda o modo pelo qual as empresas são operadas, como as pessoas trabalham e como 
a TI apoia as operações empresariais e as atividades de trabalho do usuário final. O software propiciou 
melhoras na tecnologia, na educação, no entretenimento, nos sistemas produtivos, na ciência e 
na engenharia.
Ferramentas digitais começaram a ser usadas nas atividades da sociedade e, em uma espécie de 
aceitação global, “a sociedade da informação reconfigura o modo de ser, agir, se relacionar e existir dos 
indivíduos” (KOHN; MORAES, 2007, p. 2).
A TI proporciona velocidade do conhecimento, não cria apenas conhecimento, mas reforça 
ainda mais essa criação. Estamos no começo de um novo ciclo na história da humanidade: a era 
da informação.
15
FUNDAMENTOS DE ENGENHARIA DE SOFTWARE
 Observação
Tecnologias modernas, avançadas e criativas não existiriam sem o 
software, o que faz dele o produto mais importante dessa era.
O software continua sendo construído por encomenda. À medida que uma disciplina de engenharia 
evolui, novos componentes são criados. No mundo do software, tais componentes ainda estão sendo 
aprimorados e estão apenas começando a ser produzidos em ampla escala.
Exemplo de aplicação
O escopo do sistema deve ser determinado só após a conclusão da dimensão do tamanho, da 
complexidade e das exigências de processamento do software.
O software que trabalha com imagens em 3D, por exemplo, exige um desempenho de 
processamento maior do que outro que opera em 2D. Se essas imagens estiverem sendo produzidas 
em servidores, comprometem o desempenho do servidor e da rede de computadores que o suporta. 
Dessa forma, só após especificar o software é possível definir a infraestrutura de TI e os componentes 
dosistema computacional.
Os componentes do software devem ser produzidos de modo que possam ser reusados, ou seja, que 
possam ser adaptados a novas plataformas e ambientes operacionais. O reúso de um componente é uma 
atividade natural no processo de engenharia.
A reusabilidade do software é uma métrica de qualidade usada para avaliar o quanto um programa 
ou parte dele pode ser usada em outras aplicações.
Exemplo de aplicação
Um exemplo de uso da métrica reusabilidade é o Crud (create, read, update e delete – criar, ler, atualizar 
e deletar), que envolve as quatro operações básicas para manipulação de arquivos. O programador pode 
aplicá-lo em uma biblioteca específica de formulários.
Uma vez que esse software for codificado, testado e validado, com suas funções independentes 
de outro software, é possível fazer uma manutenção isolada. Esse software passa a constituir um 
componente reusável e que pode ser integrado como uma nova funcionalidade de outro software.
Pesquise em seu computador a característica reusabilidade, que é aplicada em diversas funções do 
pacote Office. Por exemplo: observe que as funções do Word, Excel e Power Point, da Microsoft, são 
similares porque estão sendo reusáveis. No botão “Arquivo” de alguma dessas aplicações, você poderá 
verificar as mesmas funções: abrir, editar e salvar, imprimir, formatar fonte etc.
16
Unidade I
Software e hardware são elementos distintos, todavia, um sistema computacional não existe 
se não existir um desses elementos. Com o tempo, o hardware melhora o desempenho, diminui 
de tamanho e tem o custo reduzido. O software incorpora novas funções, que permitem agilizar 
processos e resolver problemas complexos a custos cada vez mais baixos. À medida que o software 
evolui, exige hardware de melhor desempenho; a cada novo hardware, um novo software é criado 
e produzido.
 Observação
Software e hardware estão em franca evolução e, apesar de possuírem 
princípios independentes, essa dualidade permite criar sistemas cada vez 
mais sofisticados a baixo custo.
1.3.1 Tipos de produção de software
O software possui um duplo papel na produção, não só pode constituir um produto completo como 
também pode ser o veículo de melhora de outro produto.
• Software como produto completo: podemos citar toda a linha de softwares que normalmente 
são comercializados, tais como software de sistema e de aplicação. Um exemplo simples seria o 
produto Word. Para Sommerville (2006), existem dois tipos de produtos de software:
— Produtos genéricos: são sistemas do tipo stand-alone, produzidos e comercializados no 
mercado a qualquer cliente interessado. É o exemplo dos vários processadores de textos, 
planilhas, gerenciadores de projetos, sistemas de imagens, jogos, sistemas educacionais, 
sistemas de contabilidade, sistemas de informação de bibliotecas, sistemas clínicos etc.
— Produtos sob encomenda (ou personalizados): são sistemas encomendados por um cliente 
em particular, sendo desenvolvidos com base em requisitos específicos para determinado 
negócio. Por exemplo: sistemas de gerenciamento da cadeia de suprimentos (supply chain), 
sistemas de controle de tráfego aéreo, simuladores, business inteligence (BI) e vários outros 
tipos de sistemas de controle dos negócios e financeiros.
Os produtos de software sob encomenda são customizados, ou seja, são configuráveis por função 
ou implementação de novos algoritmos de acordo com a necessidade do cliente. Por essa razão, são 
consideradas várias mudanças no ciclo de vida desse tipo de software, pois sua principal evolução se 
baseia na necessidade do cliente.
17
FUNDAMENTOS DE ENGENHARIA DE SOFTWARE
 Saiba mais
Para saber mais sobre produtos de software sob encomenda, acesse os 
sites indicados a seguir:
IBM: https://www.ibm.com/br-pt
Microsoft: https://www.microsoft.com/pt-br
TOTVS: https://www.totvs.com
SAP: https://www.sap.com/brazil/index.html
• Software como veículo de melhora de outros produtos: um software pode melhorar outro 
software ou um produto industrial.
• Software como veículo de melhora de outro software: são subprodutos que se instalam no 
computador para acrescentar melhorias em outro software. Esse software pode passar a dispor 
de uma nova funcionalidade ou ter acréscimo de algum recurso. Quando esses subprodutos de 
software são adaptados a outro software, produzem novas funções, melhoram o desempenho e, 
em alguns casos, podem ser usados de forma independente de quaisquer outros programas como 
um produto completo. Existem vários tipos desse software:
— Plug-ins e os módulos de extensões, que estendem a funcionalidade de um software 
específico ou que geram recursos para adaptações de novas funcionalidades. Exemplo: plug-in 
para adaptar um escâner a um software de imagem.
— Software completo, que pode ser adaptado a outro software, é o software que pode ser 
executado de forma independente e/ou que pode ser adaptado a outro software. Exemplo: 
tradutor de línguas – software para tradução de textos de línguas estrangeiras. Muito 
frequentemente, esse tipo de software, ao ser instalado no computador, cria uma nova função, 
que é inserida nas aplicações do ambiente operacional, agregando valor a este, ou pode ser 
executado isoladamente sem alguma perda de recurso computacional.
— Nessa linha de software temos também os antivírus, os compactadores de arquivos, os 
gerenciadores de rede, os gerenciadores de arquivos e o browser, que, em sua maioria, se 
integram ao sistema operacional e melhoram o nível de manutenção, desempenho e segurança.
• Software como veículo de melhora de um produto industrial: é a associação do software 
a um hardware específico de uma máquina, de sensores ou de outros dispositivos, que tem por 
finalidade melhorar o produto industrial. Tais produtos passam a ser automatizados e controlados 
por meio de um software. Exemplo: computadores de bordo, dispositivos de segurança predial, 
18
Unidade I
elevadores, robôs, eletroeletrônicos domésticos e industriais, simuladores industriais e vários 
outros que ainda estão por vir.
Em decorrência da pesquisa de cenários cada vez mais dinâmicos, as tecnologias são atualizadas 
diariamente, ocasionam constantes mudanças na forma de agir, estudar e de ser dos humanos. 
As tecnologias se integram cada vez mais aos objetos reais, permitindo uma melhor compreensão e 
controle do elemento em estudo.
Pode-se se citar como exemplo a realidade aumentada, que tem como base um software que, 
associado a câmeras ou sensores, integra o mundo real com a realidade virtual, permitindo uma análise 
detalhada de um objeto ou animal, como é o caso da ampliação de órgãos humanos, insetos e animais, 
materiais, minerais e plantas, sendo possível obter ampliações em alta definição e com visualização em 
três dimensões.
Outro exemplo é a internet das coisas (IoT – Internet of Things), que tem como objetivo principal 
integrar por meio da internet a maioria dos dispositivos que utilizamos. Essa tecnologia envolve 
a conexão por meio da internet, interligando o mundo físico com o mundo digital. Na maioria das 
vezes, essa conexão se faz por sensores, análise de dados e identificação por ondas de rádio (RFID 
– Radio Frequency Identification). Uma aplicação da IoT é a “casa inteligente”, que permite controlar por 
smartphone a luminosidade do ambiente, a programação de eletrodomésticos inteligentes, os sistemas 
de alarme e refrigeração.
 Saiba mais
Consulte as referências a seguir:
REALIDADE aumentada é vista como solução por empresários. 
Computerworld, 7 abr. 2020. Disponível em: https://bit.ly/3qC8spn. 
Acesso em: 3 mar. 2021.
INTERNET das coisas: como ela otimiza os recursos na indústria? Digicomp 
Engenharia e Tecnologia, 2019. Disponível em: https://bit.ly/2OtA2YS. Acesso 
em: 3 mar. 2021.
1.4 Fábrica de software
 
Atualmente, uma enorme indústria de software tornou-se fator dominante 
nas economias do mundo industrializado. Equipes de especialistas em 
software, cada qual se concentrando numa parte da tecnologianecessária 
para distribuir uma aplicação complexa, substituíram o programador 
solitário de antigamente. Ainda assim, as questões levantadas por esse 
programador solitário continuam as mesmas feitas hoje, quando modernos 
sistemas computacionais são desenvolvidos (PRESSMAN, 2011, p. 31).
19
FUNDAMENTOS DE ENGENHARIA DE SOFTWARE
O ponto de vista de Pressman (2011) reflete bem os problemas que há 70 anos acompanham 
o desenvolvimento do software. Nesse ponto, convém lembrar que antes os sistemas baseados 
em computador eram desenvolvidos pela administração orientada ao hardware. O hardware era 
customizado, não havia um padrão de hardware, logo, todo software a ser desenvolvido atendia um 
hardware específico, não era possível reusar o software.
Hoje a distribuição dos custos está mais no trabalho de engenharia. Apesar de ao longo desse 
tempo terem surgido diversas técnicas e procedimentos que melhoram e aumentam o desempenho dos 
desenvolvedores na fabricação do software, os problemas no desenvolvimento do software ainda 
são os mesmos. Observe a seguir quais são eles:
• Aumento contínuo em quantidade e diversidade da demanda: as necessidades de software 
pelas empresas e mudanças constantes de requisitos comprometem o desenvolvimento e 
cronogramas de entrega do software. Rezende (2005) destaca que, muito frequentemente, 
depara-se com a insatisfação do cliente em relação ao software “acabado”. Projetos de 
desenvolvimento de software são muitas vezes iniciados sem a clara especificação das 
necessidades do cliente e com uma avaliação imprecisa da especificação de requisitos para que 
o sistema realmente responda àquelas necessidades. “A comunicação entre o cliente e a equipe 
de desenvolvimento é, em geral, muito precária” (REZENDE, 2005, p. 9).
• Índice baixo de planejamento do software: existem muitos desenvolvedores de software: 
pequenos, médios e grandes. Um único software muitas vezes é construído por várias mãos ou 
várias empresas. As dificuldades em integrar as diversas soluções implicam falhas ou omissões 
no planejamento do software, acarretando um alto índice de manutenção, suporte e retrabalhos, 
o que gera um aumento de custo na entrega do software construído.
• Inexperiência dos desenvolvedores: apesar de todos os dias surgirem novas tecnologias 
e métodos de engenharia de software, sua produção frequentemente fica mais cara e menos 
confiável, porque não existe tempo hábil de assimilação e educação das novas técnicas e métodos 
da engenharia de software. Normalmente, a experiência é adquirida ao longo do tempo e a 
engenharia de software é uma disciplina nova, de apenas 50 anos, em detrimento da engenharia 
industrial, que tem cerca de 250.
Cada projeto de desenvolvimento de software tende a constituir uma experiência única, mas que 
pouco contribui para assegurar o sucesso de projetos subsequentes. Essa carência torna extremamente 
difíceis avaliações comparativas de qualidade do software construído, bem como de custos e prazos 
de execução das diferentes etapas desse processo. O fabricante de software necessita investir no 
treinamento dos desenvolvedores para melhorar a experiência e manter o conhecimento alinhado com 
as técnicas atuais, que mudam constantemente.
• Mantenabilidade do sistema: é a característica de um componente, produto, equipamento ou 
sistema de receber manutenção dentro de um determinado período a um custo preestabelecido. 
O software evolui de tempos em tempos e seu índice de obsolescência é alto. No sistema 
computacional, para o software as linguagens de programação e os sistemas operacionais estão 
20
Unidade I
sendo sempre atualizados; o hardware melhora em capacidade e desempenho constantemente; 
bancos de dados se tornam mais complexos; e as redes computacionais permitem cada vez mais 
distribuir e integrar outros sistemas.
1.4.1 Problemas enfrentados pelos fabricantes de software
Segundo Sommervillle (2003), a engenharia de software enfrenta três principais desafios: o desafio 
do legado, o da heterogeneidade e o do fornecimento.
• O desafio do legado. Atualmente, uma grande parte dos sistemas de software em utilização 
foi desenvolvida. Antes, as linguagens não eram orientadas a objetos, mas esses sistemas 
ainda operam importantes funções corporativas e controlam grandes quantidades de eventos 
em uma grande massa de dados. O desafio do legado é fazer a manutenção e atualização 
desses sistemas a custos baixos, com qualidade e prosseguir com a prestação de 
serviços corporativos.
• O desafio da heterogeneidade. Exige-se cada vez mais que os sistemas operem como sistemas 
distribuídos atuando por meio de redes que possuam diferentes tipos de arquiteturas de 
computadores e diferentes tipos de sistemas operacionais. O desafio da heterogeneidade é 
desenvolver técnicas para construir sistemas confiáveis e flexíveis o bastante para lidar 
com essa heterogeneidade.
• O desafio do fornecimento. Muitas técnicas de engenharia de software tradicionais são 
muito demoradas. Nos dias atuais, existe uma demanda enorme de sistemas para que eles 
sejam desenvolvidos no menor tempo possível e com facilidade de adaptação a mudanças. 
O desafio do fornecimento é fornecer sistemas grandes e complexos, com a qualidade 
desejada e em curto espaço de tempo.
1.5 Características do software
O software é o arranjo lógico de programas de computador organizados para atingir um objetivo 
específico do negócio. O programa de computador é uma forma lógica de organizar intelectualmente 
instruções baseadas em linguagem de programação. Os programas de computador são responsáveis 
pelo processamento que transformam dados em informações ou as retrabalham para gerar 
novas informações
O software é o resultado obtido pela interpretação do negócio por meio do processamento de 
dados, constituindo o principal elemento do sistema computacional, não funcionando sozinho, 
demandando apoio da combinação dos elementos baseados em computador, que são o hardware, 
o banco de dados e as redes de computadores, formando, nesse sentido, a base para a TI. A meta da 
engenharia de software é traduzir o desejo do cliente de um conjunto de capacidades definidas em 
um produto em funcionamento.
21
FUNDAMENTOS DE ENGENHARIA DE SOFTWARE
A hierarquia de análise do produto software que leva a sua construção é mostrada na Figura 4. 
Os requisitos globais do produto são extraídos das necessidades do cliente e determinados pelo 
desenvolvedor. No caso, foram destacados os seguintes componentes: software, hardware, 
dados e redes.
O objetivo da análise é verificar outros requisitos em cada componente que devem dar suporte ao 
software. Na Figura 4, para cada requisito de processamento do software a ser produzido, impõe-se a 
necessidade de dados, função e comportamento do produto. Com base na necessidade do software, 
podem ser considerados também outros requisitos de processamento, tais como: controle, configuração 
do software, desempenho global, restrições de projeto e outras necessidades especiais.
Produto: software
Software
Dados Função Comportamento
Hardware Dados Redes
Característica
Engenharia de requisitos
(visão do mundo)
Requisito de processamento Engenharia de componentes(visão de domínio)
Modelagem da análise e projeto
(visão do elemento)
Programa
Construção e integração
(visão detalhada)
Engenharia 
de 
software
Figura 4 – Hierarquia e análise do produto software pela TI
1.5.1 Dualidade do software com o hardware
A dualidade do software com o hardware permite a construção de sistemas computacionais, contudo, 
o que realmente justifica a função do computador é o uso do software. Veja bem: não é possível um 
editor de textos funcionar se este não for projetado e desenvolvido pela engenharia de software.
O sistema de software compreende os módulos funcionais computadorizados, que interagem entre 
si para proporcionar a automatização de diversas tarefas. Conforme Bezerra (2003), complexidade é a 
característica intrínseca do desenvolvimento de sistemasde software.
22
Unidade I
A Figura 5 mostra a analogia que Bezerra (2003) faz entre o aumento de módulos funcionais na 
construção de moradias com a construção do software.
Casa de 
cachorro
Casa Arranha-céus
Aumento da complexidade
Figura 5 
O desenvolvimento do software é complexo porque lida com vários tipos de conhecimentos, várias 
técnicas, inteligências organizacionais, especialistas do negócio, da ciência, da saúde e dos próprios 
desenvolvedores. Para construí-lo, é necessário combinar aspectos específicos do conhecimento de 
todos os interessados no software. São necessários detalhes em modelos gráficos (diagramas), para 
trazer maior visibilidade e compreensão da parte do cliente, dos operadores e dos desenvolvedores. 
A engenharia combina todos esses elementos e conhecimentos até o nível de código. Cada software é 
especificado de acordo com a necessidade do cliente, é único.
O software é desenvolvido ou passa por um processo de engenharia, não é manufaturado. Na 
manufatura, as mudanças necessárias a serem feitas nos produtos, seja por necessidade, correções 
ou melhorias, são feitas por substituição ou manutenção de peças. Os problemas de qualidade ou 
manutenção do hardware podem ser corrigidos pela manufatura, o que não ocorre com o software. 
“O software não ‘se desgasta’, mas ‘se deteriora’! O software não é suscetível aos males ambientais, que 
causam desgaste do hardware, mas sim devido às mudanças que ocorrem no ciclo de vida do software” 
(PRESSMAN, 2011, p. 33).
Durante o ciclo de vida, o software passará por modificações (manutenção e/ou mudanças). Essas 
modificações causam a deterioração do software. À medida que as modificações são feitas, é provável 
que novos defeitos sejam introduzidos, causando dente na curva de taxa de falhas, como é mostrado 
no gráfico da direita da Figura 6.
23
FUNDAMENTOS DE ENGENHARIA DE SOFTWARE
Curva de falhas do hardware Curva de falhas do software
Aumento da taxa de falhas 
devido a efeitos colaterais
Mortalidade infantil Mudanças
Desgaste
Tempo Tempo
Índice de 
falhas
Índice de 
falhas
Curva real
Estabilidade
Curva idealizada
Figura 6 – Gráficos comparativos da curva de falhas do 
hardware em relação a curvas de falhas do software
Na Figura 6, o gráfico da esquerda se refere à curva de falhas do hardware, também chamado 
na engenharia de “curva da bacia”. Esse gráfico mostra que quando um produto é lançado no mercado 
ou adaptado a outros produtos (faixa da mortalidade infantil), o índice de falhas é alto. No decorrer 
do tempo – por processos revisionais e de manutenção –, essas falhas são reduzidas, até chegarem ao 
nível de estabilidade e com o menor índice de falhas. A vida útil é a soma entre os tempos da região 
da mortalidade infantil e da região de estabilidade. Como o hardware fica sujeito ao desgaste, isso 
provoca ao longo do tempo o aumento do índice de falhas e, consequentemente, o aumento do custo 
de manutenção. As manutenções sucessivas crescem e, assim, o custo para manter o produto acaba por 
inviabilizá-lo e é feito o seu descarte.
Na Figura 6, o gráfico da direita se refere à curva de falhas do software, e nele, diferentemente 
do hardware, após a faixa de estabilidade, começam a ocorrer mudanças no software, sejam elas 
provocadas a pedido do cliente, sejam elas motivadas por algum outro fator, como a mudança no 
ambiente operacional (hardware, capacidade limitada do sistema, atualização do sistema operacional 
ou a inclusão/exclusão de outros drivers ou software). A cada mudança implementada no software, 
surge um “pico” de falhas, o que leva novamente a processos revisionais e de manutenção, até que 
essas falhas sejam reduzidas ao nível da curva real. Nessas mudanças existe a possibilidade de serem 
acrescentados novos códigos e serem criadas redundâncias de programas e de dados.
Devido às mudanças causadas no software, no acompanhamento de sua evolução são registradas 
versões e releases. As versões são registros do software feitos sobre as mudanças que ocorrem na 
adaptação do software em relação às necessidades do cliente, adaptação a novos ambientes operacionais, 
correções de falhas ou quando o software está em desenvolvimento. O release (lançamento) é o registro 
da versão que é liberada para o usuário.
24
Unidade I
Após várias mudanças causadas no software, ele deverá ser reestruturado. Para tanto, são feitas as 
seguintes ações:
• fazer limpeza dos dados e dos códigos redundantes;
• atualizar hardware;
• atualizar com novas versões o sistema operacional e as linguagens de programação;
• gerar novos algoritmos;
• adaptar de forma correta as antigas e novas funcionalidades com base em uma nova arquitetura.
Exemplo de aplicação
Observe o cenário a seguir.
Na deterioração do software, os usuários reclamam muito, por exemplo: “Isto está lento”; “Sumiu 
meu registro”; “Havia um relatório aqui”; “Este campo está vazio, deveria ter a informação...”.
Nessa situação, o volume de chamadas aos desenvolvedores e equipes de manutenção aumenta. Para 
corrigir de vez esse problema e retomar um ciclo novo de vida do software, é necessário reestruturá-lo.
 
Nem todo sistema é construído da mesma forma. Desenvolvedores 
citam pontos que tornam um código melhor do que outro. Há muitas e 
muitas linhas de código sustentando sistemas ao redor do mundo. Para 
se ter uma ideia, apenas a Google® soma mais 2 dois bilhões de linhas 
em sua estrutura. Mas nem todas as fontes são criadas de maneira 
semelhante (JOHSON, 2015).
Em suas pesquisas, Johson (2015) lista seis pontos para um software “bem escrito”:
• Ser facilmente legível: sistemas escritos de uma forma que podem ser lidos rapidamente por 
outros programadores são considerados trabalhos de alto nível.
• Ter comentários úteis: o comentário explica o que passou na cabeça do programador durante a 
codificação. Não é preciso dizer o que um código de loop faz.
• Ser simples: há uma correlação estatística comprovada entre a complexidade de códigos e bugs. 
Em geral, o melhor código é algo simples.
25
FUNDAMENTOS DE ENGENHARIA DE SOFTWARE
• Ser flexível: a funcionalidade muitas vezes necessita ser alterada, expandida ou reutilizada em 
outros lugares no futuro. Bons softwares são escritos para atender tanto as exigências de hoje 
quanto as perspectivas para futuro.
• Ser sustentável: a manutenção é um atributo-chave de um bom código. Johson (2015) orienta 
para evitar fazer coisas como “valores que podem mudar (URLs, teclas de acesso, senhas e outros)”.
• Funcionar: essa é uma característica óbvia, contudo, deve ser reforçada. Conforme Johson (2015), 
não importa o quão grande ele pareça, “se o software não fizer o trabalho, não é bom”.
2 PRINCÍPIOS DO DESENVOLVIMENTO DE SISTEMAS
2.1 Aplicações e desenvolvimento de sistemas computacionais
 
O objetivo e conteúdo de informação são fatores importantes na 
“determinância” da natureza de um aplicativo. A palavra conteúdo se refere 
ao significado e à forma de informações que entram e saem do sistema. 
Por exemplo, muitas aplicações comerciais fazem uso de dados de entrada 
altamente estruturada de um banco de dados e produzem “relatórios” 
formatados (REZENDE, 2005, p. 12).
2.1.1 O que diferencia um software de outro?
Para responder essa questão, é necessário avaliar cinco características essenciais referentes à 
capacidade e usabilidade do software, as quais são descritas a seguir.
• Captação de dados: a interface de entrada de dados pode se apresentar de diversas formas: 
entradas editadas, digitalizadas, entradas por terminais, dispositivos biométricos, sensores a 
laser, óticos, sonoros, luminosos, magnéticos e vários outros. Quanto à interface de entrada 
operacional humana, normalmente, os dados captados possuem um formato simples, 
diferentemente da captação de dados por dispositivos, que tem como objetivo captar um 
volume de dados maior e com resolução de boa varredura do ambiente. O formato de entrada 
dos dados a serem processados varia em confiabilidade, acuráciae quantidade.
• Processamento dos dados: os dados a serem processados variam em seu formato de entrada. 
O software deverá isolar em campos os dados captados. Cada campo de dados é captado em um 
formato binário e identificado por meio de caracteres de controle, tamanho do pacote de dados, 
ciclos de tempos especificados na entrada de dados ou a combinação destes. A partir desse ponto, 
os algoritmos contidos no software resultam em novos dados ou informações, os quais permitem 
estruturar os resultados dessas operações de processamento. A precisão e eficiência de execução 
desses algoritmos determinam o nível de qualidade do software.
• Apresentação da informação: dependendo da qualidade exigida do cliente e do usuário, a 
apresentação da informação pode ser feita por meio de textos, relatórios, diagramas, modelos 
26
Unidade I
gráficos, imagens em alta definição e cores ou ativação de dispositivos. A resposta do software 
é o que interessa ao cliente ou usuário. As principais características que se destacam aqui são: 
a adequação das funções do software às necessidades do cliente ou usuário; a eficácia para 
atingir objetivos específicos; a capacidade de adaptar mudanças na configuração do software ou 
adaptações de novos recursos; a usabilidade, que permite melhor compreensão; o aprendizado e 
a satisfação de uso; e a utilização, que mede o esforço necessário para aprender, operar, preparar 
entradas e interpretar as saídas.
• Segurança: no produto software são estabelecidas medidas de segurança e a avaliação de níveis 
aceitáveis de riscos e danos para as pessoas, para os negócios, para a propriedade, para o ambiente, 
para proteger informações e dados de forma que pessoas ou sistemas não autorizados não possam 
lê-los nem modificá-los e que não seja negado o acesso às pessoas ou sistemas autorizados.
• Desempenho: o sistema computacional deve garantir a integridade de todos os seus recursos 
com boa eficiência, para dar apoio às características já citadas. O software deve oferecer respostas 
rápidas às funções e apresentações da informação, busca de dados em redes de computadores 
com taxas de transferência equivalentes ou até mesmo superiores em relação ao volume de dados 
e, ainda, ser expansível para aceitar novas extensões ao sistema.
O software é criado e desenvolvido por “várias mãos” e diversas opiniões. Perspectivas diferentes são 
projetadas para atender os stakeholders, os interessados no projeto. Veja bem: os dados da empresa 
são únicos, contudo, as apresentações desses dados para o cliente, usuário e desenvolvedor podem 
variar de diversas formas: modo texto, modo gráfico, figuras e outros meios de mídia.
Estudo de caso: método de análise de um sistema ERP
O planejamento dos recursos empresariais (ERP – enterprise resource planning) é o modelo mais 
comum de sistema de informação gerencial, formado basicamente por servidores e estações.
Na análise do negócio, o princípio básico é dividir esse sistema em módulos, o que é chamado de 
modularidade.
O ERP é composto de vários módulos, ou seja, esse tipo de sistema incorpora a modularidade. Na 
análise do negócio, o módulo começa a ser projetado a partir dos componentes que o integram e que 
irão dar a infraestrutura de apoio para o ERP. Um módulo surge a partir do momento em que cada 
componente que o constitui adquire sua independência funcional.
Cada componente adquire sua independência funcional quando o componente puder ser nomeado 
separadamente e de maneira endereçável. Assim, integrados, satisfazem os requisitos de módulo do sistema.
Cada processo possui suas respectivas atividades. Da análise desses processos derivam as 
funcionalidades do sistema ERP. Uma funcionalidade pode ou não ser um componente do sistema, 
dependendo do tamanho, da complexidade ou da qualidade exigida para o sistema. A funcionalidade 
é um conjunto de funções (ou apenas uma função) que possuem características e técnicas de 
27
FUNDAMENTOS DE ENGENHARIA DE SOFTWARE
desenvolvimento similares, identificadas pelo seu início, fim, processamento atribuído e procedimentos 
de desenvolvimento.
Do ponto de vista do analista de negócios e do analista de processos, a Figura 7 representa 
um modelo de negócio que expressa as intenções de uso do ERP, com seus módulos empresariais 
(administração, contabilidade e marketing) e demais módulos que complementam a ideia do sistema 
(banco de dados e relatórios). Os dados de entrada são concentrados em um único banco de dados. Esse 
sistema integrado de gestão (SIG) usa os dados para gerar na saída diversos modelos de informações, 
tais como balanços, gráficos, listas, estatísticas, notas, tabelas e vários outros tipos de relatórios.
Administração Contabilidade Marketing
Relatórios
Aprovação de pagamentos
Aprovação de pedidos
Controle de negócios
Planejamento empresarial
Análise de custos
Caixa
Controle de pedidos
Contas a pagar
Contas a receber
Faturamento
Análise dos negócios
Especificação do negócio
Exploração das informações
Perfil do cliente
Propaganda e publicidade
Balanços
Gráficos
Lista de nomes
Estatísticas
Notas
Tabela de valores
Banco de 
dados
Figura 7 – Esse conjunto de módulos forma um típico SIG para objetivos específicos
O ponto de vista do analista de sistemas que irá praticar a engenharia de software se baseia 
em interpretar o modelo de negócios e convertê-lo em um modelo que traga visibilidade para os 
desenvolvedores do sistema/software. Para isso, inicia-se o processo de componentização dos módulos 
definidos pelos analistas de negócios e de processos, necessário para construir um SIG com acesso 
via intranet.
Para customizar o sistema do cliente, cada módulo deverá ser dividido em componentes. Cada 
componente apresenta “peças”, que poderão ser outros componentes. Assim, juntos, deverão atender 
os requisitos do módulo que será construído e, consequentemente, integrá-los em um sistema 
de informação.
A arquitetura do sistema ERP da Figura 8 mostra como ficaria a componentização do sistema 
com acesso pela intranet. Na Figura 8, os componentes são expandidos, mostrando as principais 
características tecnológicas e de configuração que deverão ser elaboradas. Baseado na análise do 
modelo de negócios, o engenheiro de software constrói um diagrama de componentes/implantação 
para ser validado pela gerência do sistema.
28
Unidade I
Servidor SOR Servidor APP
<<TCP>>
Cliente - Browser
SOR
Conta do usuário
Administração
Contabilidade
Marketing
Documentos gerados
Telas
<<TCP>>
<<HTTP, FTP>>
<<TCP>>
<<IP>>
Servidor SGBD
Figura 8 – Modelo de componentização de um sistema ERP, determinando uma arquitetura servidor/cliente, 
com acesso via intranet, apresentando as camadas da aplicação, do banco de dados e da 
rede de computadores, que irão formar a infraestrutura da TI, que dará apoio a um SIG
“O objetivo e conteúdo de informação são fatores importantes na determinação de uma aplicação 
do software. Desenvolver categorias genéricas para as aplicações de software é uma tarefa um tanto 
difícil” (REZENDE, 2005, p. 12-13).
Para determinar os fatores de uma aplicação, é necessário combinar várias áreas do conhecimento. 
As áreas de software a seguir indicam a amplitude do desenvolvimento de aplicações:
• Software aplicativo para microcomputador. É considerado software aplicativo para 
microcomputador o programa que permite que o usuário realize uma tarefa específica no 
computador, seja de uso pessoal, empresarial ou para dar suporte e interagir com o sistema 
operacional. O software de computador pessoal continua a representar os mais inovadores 
projetos de interfaces com seres humanos de toda a indústria de software. O software 
aplicativo permite trabalhar com processadores de textos, planilhas eletrônicas, computação 
gráfica, diversões, gerenciamento de banco de dados, gerenciamento de arquivos, de redes 
de computadores e vários outros encontrados no comércio varejista ou na internet. Aliás, o 
software aplicativo é o que justifica aexistência dos computadores pessoais.
• Software básico. Trata-se de uma coleção de programas escritos para dar apoio a outros programas. 
Normalmente, possui uma forte interação com o hardware e ambos são utilizados como processadores 
de telecomunicação, componentes do sistema operacional, compiladores, computadores com intenso 
uso de múltiplos usuários. Destaca-se que tais operações são concorrentes, exigindo escalonamento 
(schedule), compartilhamento de recursos, estrutura de dados complexas e múltiplas interfaces.
Cada programa responsável por controlar um hardware específico ou uma parte deste é chamado 
de driver. Um conjunto de drivers organizados para o controle de uma determinada interface, um 
computador ou uma máquina, chama-se firmware.
Um típico exemplo de software básico (ou firmware) é o sistema básico de entrada/saída (Bios – 
Basic I/O System). O Bios é um programa residente nos computadores, em interfaces inteligentes de 
hardware ou dispositivos inteligentes. Dependendo da utilização, o programa BIOS pode ser formado 
29
FUNDAMENTOS DE ENGENHARIA DE SOFTWARE
por um único driver ou por um conjunto de drivers responsáveis pela inicialização do computador. O Bios 
disponibiliza também um conjunto de funções primitivas do computador, tais como ler um caractere do 
teclado, ler/escrever em setores do HD e inicialização das principais interfaces que fazem parte da main 
board do computador. Em resumo: computadores pessoais, dispositivos e máquinas computadorizadas 
possuem um Bios.
Na categoria de firmware, temos também o software embarcado, tipo de software que 
normalmente está embutido (embedded software – software embutido) em máquinas ou dispositivos 
computadorizados. Esse firmware reside em ROM e é escrito em código de máquina (assembler), que 
é ativado antes mesmo de qualquer sistema operacional. O software embutido é composto de várias 
pequenas funções que fazem parte de sistemas eletroeletrônicos inteligentes usados para controlar 
produtos e sistemas do mercado industrial e de consumo, tais como: computadores de bordo, controles 
automativos, eletrodomésticos, máquinas automatizadas, marca-passos, relógios digitais, elevadores e 
microcontroladores em geral.
 Lembrete
Quando uma interface ou dispositivo é caracterizado como inteligente, 
significa que essa interface ou dispositivo possui uma unidade central 
de processamento (CPU – central processing unit). Se possuir CPU, será 
necessário um software.
• Software de tempo real. Em sistemas computacionais, o tempo real (real time) se refere ao 
tempo de resposta do sistema, que independe do tempo de várias outras tarefas realizadas pelo 
sistema. Para entender melhor, imagine que você vá até o interruptor de luz e o desligue. Se levar 
mais que 0,5 segundo para a luz apagar, isso será perceptível para o ser humano. Em tempo real, 
isso não pode acontecer.
O software de tempo real analisa e monitora eventos do mundo real, exige um controle de saída 
que responde ao ambiente externo e um componente de monitoração que coordena todos os demais 
componentes de forma a obter resposta em tempo real, que normalmente varia de 1 a 100 milissegundos 
para executar uma determinada operação. O termo “tempo real” difere do “interativo” ou time-sharing, 
que podem exceder o tempo de resposta sem resultados desastrosos. Um exemplo de software de tempo 
real é a IoT, que se refere à interconexão digital de objetos do cotidiano. Para esse tipo de software, o 
essencial é o sincronismo entre a execução das tarefas, que considera não só o número de linhas de 
códigos do programa como também o tempo de resposta do hardware.
• Software científico e de engenharia: conforme Rezende (2005, p. 14),
 
é caracterizado por algoritmos de processamento de números. As aplicações 
variam da astronomia à vulcanologia, da análise de fadiga de mecânica 
à dinâmica orbital de naves espaciais, e da biologia molecular à 
manufatura automatizada.
30
Unidade I
A realidade aumentada faz parte da categoria de software científico e de engenharia.
Outra aplicação comum dessa categoria de software são os sistemas CAD/CAE/CAM. A sigla CA 
é a abreviação de computer-aided (auxiliado por computador); D vem do termo design (arquitetura, 
projeto, desenho, planta); E, de engineering (engenharia); e M de manufacturing (manufatura). Cada 
um desses sistemas tem um objetivo específico. O CAD permite elaborar arquiteturas de produtos que 
podem ser exibidos em imagens 2D e 3D. O CAE permite realizar tarefas do ponto de vista da engenharia, 
tais como: resistência e fadiga do material, simulações do funcionamento de produtos, desempenho e 
melhoria de produtos industriais. O CAM controla máquinas e ferramentas relacionadas no processo de 
fabricação para produzir o produto, como é o caso das impressoras 3D.
• Software empresarial. É o de maior área de aplicação. Envolve distintos sistemas de informação, 
que processam folhas de pagamentos, contas a pagar e receber, controle de estoques, cadastros, 
processamento de transições de compra/venda e várias outras aplicações. Na maioria das vezes, 
lida com um volume alto de dados para tomada de decisão. Essa categoria de software tem 
como objetivo reestruturar e filtrar dados, facilitar as operações e trazer maior visibilidade aos 
resultados das operações.
Uma dessas tecnologias em destaque é a Big Data, que, além de tratar grandes volumes de dados, 
depara-se com dados não estruturados, ou seja, que não estão especificados dentro de determinados 
registros ou campos de busca no banco de dados. Uma das diversas aplicações da Big Data está na área 
de recursos humanos, quando é necessário cruzar informações sobre funções específicas de serviços 
com os dados de diversos currículos.
Por sua vez, os SIGs não trabalham isoladamente, são constituídos por vários componentes 
interligados a uma base de dados interna e/ou externa à empresa. Esses sistemas fazem parte do 
planejamento estratégico da empresa. Os tipos mais comuns de subsistemas que compõem um SIG são: 
Sistema de Processamento de Transações (SPT); Sistema de Apoio à Decisão (SAD); Sistema de Apoio ao 
Executivo (SAE).
 Lembrete
Cada programa responsável por controlar um hardware específico ou 
uma parte deste é chamado de driver. Um conjunto de drivers organizados 
para o controle de uma determinada interface, um computador ou uma 
máquina chama-se firmware.
O BI (Business Intelligence) é um exemplo avançado de sistema integrado de gestão, tendo em vista 
que é formado de várias ferramentas que combinam diversos tipos de dados para análise, comparação 
e simulação de resultados que levam diretamente a tomada de decisão. No mundo dos negócios, 
o e-business (negócios eletrônicos) compõe também a categoria de software empresarial, que pode 
ser classificado em: ERP; gerenciamento das relações com o cliente (CRM – customer relationship 
manager); e gerenciamento da cadeia de suprimentos (SCM – supply chain management).
31
FUNDAMENTOS DE ENGENHARIA DE SOFTWARE
• Software para web. As páginas da web recuperadas por um browser constituem software 
que incorpora instruções executáveis (como CGI, HTML, Pearl ou Java) e dados (hipertexto e 
uma variedade de formatos visuais e de áudio). Com esses recursos tecnológicos, surgiram os 
sistemas e aplicações baseadas na web, as webapps, que são pequenas aplicações embarcadas 
na internet. Aplicações das mais diversas, que comumente precisavam de processamento local, 
passaram a ser processadas em servidores que operam na internet. No mundo dos negócios, 
a amplitude dessa área está classificada pelo termo e-commerce (comércio eletrônico), 
estruturado pelas tecnologias B2B (business to business), B2C (business to consumer) e 
C2C (consumer to consumer). Em software para web existem também os serviços oferecidos 
pela tecnologia cloud computing (computação em nuvem), que reúne diversos recursos de 
processamento, aplicações e armazenamento em servidores que podem ser acessados 
e qualquer lugar do mundopela internet.
• Software de inteligência artificial (AI – Artificial Inteligency). Faz uso de algoritmos não 
numéricos para resolver problemas complexos que não sejam favoráveis à computação ou 
à análise direta (PRESSMAN, 2011). Atualmente, a área de AI mais ativa é a dos sistemas 
especialistas, também chamados sistemas baseados em conhecimento (REZENDE, 2005). As 
aplicações mais comuns estão no reconhecimento de padrões de imagem e voz, entretenimento, 
carros autônomos, IoT, demonstração de teoremas, determinadas funções do Big Data e BI.
Os sistemas de redes neurais são sistemas computacionais. Hoje, a chamada rede neural 
artificial simula a estrutura dos processos cerebrais e pode levar a uma nova classe de software, que 
consegue reconhecer padrões complexos e aprender com a experiência passada. A rede neural se 
baseia na interconexão de nós de sistemas em redes. Essa interconexão funciona como os neurônios do 
cérebro humano.
2.2 Ambiente computacional
Como dito anteriormente, a engenharia de software é uma disciplina de engenharia que envolve 
todos os aspectos de produção do software. O desenvolvimento do software não se baseia apenas na 
construção de programas de computador, exige um controle rígido de procedimentos, padrões e normas 
que devem ser documentados para o acompanhamento e o controle dos serviços.
Como mostra a Figura 9, cada projeto de software possui suas características próprias para um 
elenco de pessoas envolvidas, nomeadas como analistas do negócio, que representam o cliente e o 
usuário interessados no software.
Feedback
Analistas de negócio
Feedbacks
sucessivos
Requisitos Especificação e modelo do negócio Analista do sistema
Figura 9 – Modelo de relacionamento dos analistas de negócio com o analista de sistemas
32
Unidade I
O engenheiro de software trabalhará com diversos tipos de pessoas que participarão do 
desenvolvimento do software/sistema. Os perfis de pessoas variam em cada tipo de projeto e por todo 
o projeto. Variam em áreas de conhecimentos, interesses em aspectos e características do sistema, 
ocupam diferentes graus na hierarquia da organização, são conhecedores do negócio, do processo e 
usam termos e linguagens próprias da profissão.
Do ponto de vista do cliente/usuário, Stair (2006) ilustra na Figura 10 as principais áreas de negócio 
necessárias para construir um sistema de informação. O engenheiro de software não só deve dominar o 
conhecimento da TI, como é importante que ele conheça como o negócio empresarial funciona e o que 
os participantes do sistema esperam.
A principal estratégia do engenheiro de software é saber sobre o ambiente de negócio e como 
extrair informações dos participantes. O objetivo principal do projeto é alinhar o negócio com o 
software/sistema a ser desenvolvido pela TI com base na engenharia de software. Por meio da engenharia 
do processo de negócio (EPN ou BPE – business process engineering), para iniciar o projeto, o analista 
de sistema assume uma visão do ambiente de negócio e das necessidades da TI, agrupa as ideias e define 
os requisitos do negócio e arquiteturas que permitam usar a informação de maneira efetiva.
Desafios gerenciais
Processos de 
desenvolvimento
Conceitos 
básicos
Aplicações 
empresariais
Tecnologia da 
informação
Sistemas de 
informação
Figura 10 – Principais áreas de conhecimento em sistemas de informação 
necessárias aos usuários finais de uma empresa
O ambiente computacional abrange uma série de componentes distribuídos por toda a empresa 
com um conjunto heterogêneo de computadores escaláveis e configuráveis para um grande número 
de tarefas. Os nomes mais conhecidos são: servidores, estações, terminais, processamento distribuído, 
periféricos, dispositivos de rede e instalações adequadas, elementos que prometem aos negócios maior 
funcionalidade e flexibilidade.
2.3 Problemas de relacionamento entre gerência, cliente e desenvolvedor
O desenvolvimento do software deve atender as necessidades da empresa para implantar as 
funções organizacionais do negócio. Contudo, devido aos interesses gerenciais, dos clientes e dos 
desenvolvedores, combinados ainda com os processos para construir a infraestrutura da TI, surgem 
vários problemas de relacionamento, o que ocorre por causa de princípios e interesses dos stakeholders, 
que incluem fatores internos, externos e de uso do software, bem como os respectivos recursos 
necessários. Esses problemas de relacionamento propagam a desinformação e geram confusão.
33
FUNDAMENTOS DE ENGENHARIA DE SOFTWARE
Todos os envolvidos no projeto possuem uma visão do que é para ser feito. O conhecimento e o 
ponto de vista de cada profissional surgem no início do desenvolvimento do software. Conforme 
o projeto e a construção do software vão evoluindo, os interesses dos stakeholders vão sendo alinhados 
e implementados.
A seguir são apresentadas algumas questões relativas a problemas de relacionamento entre gerência, 
cliente e desenvolvedor e a realidade dos fatos:
• Gerência. Agora que já temos o projeto e decidimos o que fazer, por que ainda é necessário dispor 
de mais tempo para começar a construção do sistema?
— Fato. Porque é necessário conhecer e aprender sobre os componentes da TI disponíveis.
• Gerência. Na construção do código, estamos atrasados com o cronograma? Podemos contratar 
mais programadores?
— Fato. Atualmente os cronogramas para o desenvolvimento de software ainda são imprecisos, 
não é um processo manufaturado, é um trabalho de engenharia. Outro programador deverá 
conhecer o projeto antes, estudar o ambiente de desenvolvimento para poder trabalhar. Quando 
está atrasado, não há tempo para isso.
• Gerência. Temos software de última geração e compramos os mais novos computadores. Por que 
ainda estamos atrasados?
— Fato. É preciso muito mais do que o último modelo de computador para se trabalhar com um 
software de alta qualidade. As operações com software/sistemas são mais importantes do que 
o hardware para se conseguir boa qualidade e produtividade, e tais operações dependem do 
treinamento do pessoal.
• Cliente. É necessário colocar um botão para extrair o relatório de fornecedores o mais 
rápido possível.
— Fato. Uma definição inicial ruim é a principal causa de fracasso dos esforços de 
desenvolvimentos de software. Dominar aspectos como informação, função, desempenho, 
interfaces, restrições de projeto e critérios de validação é fundamental, mesmo para 
implementar um simples botão, porque esse botão estará vinculado a uma função do 
software, que pode ainda não existir ou não foi especificada nos requisitos funcionais.
• Cliente. Os requisitos do software mudam continuamente, contudo, as mudanças podem ser 
facilmente acomodadas, porque o software/sistema é flexível.
— Fato. É verdade que os requisitos de software/sistema se modificam, mas o impacto da 
mudança pode comprometer outras funções do software que só serão observadas de acordo 
com o tempo em que elas são introduzidas.
34
Unidade I
• Desenvolvedor. Assim que escrevermos o programa e o colocarmos em uso, nosso trabalho 
estará completo.
— Fato. Os dados de indústrias indicam que entre 50% e 70% de todo o esforço gasto num 
programa será despendido depois que ele for entregue pela primeira vez ao cliente.
• Desenvolvedor. Enquanto o software não estiver funcionando, não tenho condições de avaliar 
sua qualidade.
— Fato. Um dos mecanismos mais efetivos de avaliação do software/sistema é a revisão formal, 
que pode ser aplicada desde o início do projeto, que é considerada um filtro de qualidade.
• Desenvolvedor. Um projeto bem-sucedido é o programa funcionando.
— Realidade. Um programa funcionando é somente uma parte de uma configuração de 
software. A documentação e o projeto formam os alicerces para um desenvolvimento 
bem-sucedido e, o que é mais importante, fornecem um guia rápido para a tarefa de suporte 
e manutenção do software.
2.4 Projeto e construção do software
O projeto e a construção do software/sistema

Outros materiais