Introdução à Engenharia de
Software
Profª Larissa Carneiro
Entender o que é Engenharia de Software e
sua importância.
08/02/21
Ter uma visão geral de engenharia de
software
Conhecer os paradigmas de
desenvolvimento de Software
Ter uma visão geral de testes de software
Ter uma visão geral de qualidade de
Entender o processo que caracteriza a
construção de um software de qualidade.
Conhecer o processo a análise de requisitos Conhecer os processos teste de software
Modelar os requisitos de um software através de
ferramentas UML
08/02/21
A economia de todos os países do mundo
depende cada vez mais de software.
É crescente os sistemas controlados por
software.
Os gastos com desenvolvimento de
software representam uma fração
significativa do PIB de muitos países.
08/02/21
Ferro (Darby, 1709) Máquina a vapor:
◦ Inventada (Newcomen, 1712)
◦ Aperfeiçoada (WATT, 1766 - ’69 -’82)
Mecanização da indústria têxtil: ◦ Tear Mecânico (Kay, 1722)
◦ Máquina de fiar (Hargreaves, 1764)
Aspectos sociais, políticos e
econômicos
Aço (Bessemel, 1856 e 1885 - Liga)
Locomotiva a Vapor (Rede de Transporte -
1830)
Máquina de Costura (SINGER,1851) Motor a combustão interna:
◦ Primeiro eficiente (OTTO, 1876)
◦ Produção automobilística em massa (Daimler e Benz, 1896)
08/02/21
Energia Nuclear (Fermi, 1942)
Uso Industrial/Comercial da Eletricidade Computadores Eletrônicos (ENIAC 1946) Transistor (Shockley, et al., 1948)
Sociedade Sociedade
A mudança de uma sociedade industrial
para uma baseada na informação é uma
Radical Mudança Econômica:
◦ Material tem menos valor e Informação tem mais valor. 08/02/21 Engenharia de Software 10
Antes: quanto
menos pessoas
possuísse algo,
maior o valor.
Hoje: quanto
mais pessoas
possuem algo,
maior o valor.
Cite as características dos sistemas
operacionais que você conhece.
Compare os sistemas: ◦ Unix
◦ Windows
◦ MacOS
O Windows vende mais porque é mais fresquinho ou é mais fresquinho porque vende mais???
O desenvolvimento de software era
puramente artesanal;
As pessoas desenvolvendo sistemas
erravam constantemente nas suas estimativas de custo e tempo;
Os sistemas continham muitos erros;
Consertar erros geralmente produzia mais
erros;
Tamanho dos sistemas crescendo
consistentemente.
08/02/21
Estudo feito em 1979 pelo governo dos
Estados Unidos em relação ao software produzido:
◦ 2% Funcionava;
◦ 3% Funcionaria com poucas correções;
◦ 20% Usados mas bastante modificados ou abandonados;
◦ 45% Entregues mas nunca foram usados com sucesso;
◦ 30% Pagos mas nunca foram terminados e/ou entregues.
“O Software ultrapassou o Hardware como
chave para o sucesso de muitos sistemas
baseados em computador” (Pressman, pg.
3, 1992)
08/02/21
A proporção dos custos com software e
hardware mudou bastante ao longo do tempo:
◦ Década de 60: 20% -- 80%
◦ Década de 70: 50% -- 50%
“ A inteligência e as funções oferecidas
pelo software muitas vezes diferenciam dois produtos de consumo ou indústrias
idênticas”
“ A inteireza e a oportunidade das
informações oferecidas pelo software (e
banco de dados relacionados) diferenciam
uma empresa de suas concorrentes”
08/02/21
Completeza da informação inteligência funcionalidade compatibilidade suporte
Tornam 1
produto
melhor
que outro
Durante as 3 primeiras décadas da era do
computador, o principal desafio era
desenvolver um HARDWARE de baixo custo e alto desempenho.
O hoje o desafio é melhorar a qualidade (e
reduzir os custos) das soluções baseadas em SOFTWARE!
08/02/21
É uma área do conhecimento que se
preocupa com os problemas práticos
inerentes ao desenvolvimento de sistemas de grande porte.
◦ Não é simplesmente programação;
◦ Também não é só ciência da computação;
◦ Uso de teorias (resultados), métodos, e ferramentas na resolução de problemas.
É o estabelecimento e uso de sólidos
princípios de engenharia visando obter economicamente um software que seja
confiável e que funcione eficientemente em máquinas reais.
◦ Engenharia de Software trata do desenvolvimento de software de forma eficaz.
08/02/21
É a aplicação de ciência e matemática
visando tornar as capacidades do
equipamento úteis para o ser humano através de programas, procedimentos e documentação
É a abordagem sistemática ao
desenvolvimento, operação, manutenção, e aposentadoria de Software.
Engenharia de Software se refere a software
(sistemas) desenvolvidos por grupos ao invés de indivíduos;
Engenharia de Software usa princípios de
engenharia ao invés de arte, e
Engenharia de Software inclui tanto
aspectos técnicos quanto não técnicos.
08/02/21
O principal objetivo da Engenharia de
Software é produzir, a um custo baixo, software de qualidade.
◦ Custo é fácil de ser medido.
◦ Qualidade não é.
O processo de planejamento é crucial na
engenharia de software. A implementação é só uma parte do processo.
A Engenharia de Software engloba todo o
ciclo de vida do software (concepção, implementação, uso e manutenção).
Há 20 anos, pouquíssima gente sabia
explicar o que é software.
Hoje, praticamente todo mundo acha que
sabe ...
Software não são só os programas!
A documentação necessária para instalar,
usar, e manter os programas são partes integrantes do software.
08/02/21
Definição - Software é:
1o - instruções (programas de computador) que,
quando executadas, produzem a função e o desempenho desejados;
2o - estruturas de dados que permitem a
manipulação das informações;
3o - documentos que descrevem a operação e uso
O software é desenvolvido/projetado, ao
invés de manufaturado/fabricado.
Software não é sensível aos problemas
ambientais que fazem com que o
hardware se desgaste.
Software não se desgasta com o uso: não
existem peças de reposição.
08/02/21
Software não pode ser visto ou tocado: para analisar o progresso de um projeto de
software é preciso recorrer à sua documentação.
Grandes sistemas de software são
normalmente desenvolvidos uma única vez. Assim, a experiência adquirida com outros projetos tem um valor limitado.
Toda falha indica erro de projeto ou
implementação: manutenção do SW é mais complicada que a do HW.
A maioria dos softwares são feitos sob
medida (por encomenda), ao invés de ser montada a partir de componentes.
◦ Produtos Genéricos: sistemas produzidos por uma organização e vendidos a todos os clientes que quiserem comprá-los.
◦ Produtos customizados: sistemas que são encomendados e desenvolvidos para um determinado cliente.
08/02/21
É software que “funciona” (é confiável):
◦ ele não deve falhar mais do que o especificado na documentação.
É software que funciona de acordo com a
sua especificação:
◦ Mesmo software que aparentemente funciona
pode não estar satisfazendo a sua especificação.
É software que é fácil de manter. ◦ Código bem escrito
É software que funciona de maneira
eficiente.
◦ Software mais eficiente não é necessariamente software que roda mais rápido ou que gasta
menos memória/disco.
◦ A complexidade do código e o custo também são fatores importantes.
É software que possui uma boa interface
com o usuário:
◦ Muitos softwares não funcionam direito porque são difíceis de usar.
08/02/21
O que é esta crise?
Métodos de desenvolvimento de software
existentes não são bons o bastante para o desenvolvimento de software de grande porte.
Problemas não se limitam ao software que
não funciona adequadamente, mas abrange:
◦ desenvolvimento, testes, manutenção, suprimento, etc.
CRISE?
◦ Momento perigoso ou decisivo.
◦ Decadência, carência, queda.
◦ Mas a chamada crise de software já passa de 30 anos ...
DOENÇA?
◦ No momento não se conhece uma cura, apenas paliativos para reduzir a dor” ...
08/02/21
Erros no sistema automático de transporte de
bagagens (misloaded, misrouted, jammed): ◦ Atraso na abertura do aeroporto com custo total
Projeto da Agência
Espacial Européia que
custou:
◦ 10 anos. ◦ US$ 8 Bilhões. Capacidade 6
toneladas.
Garante supremacia
européia no espaço.
Explosão 40
segundos após a
decolagem.
Destruição do
foguete e carga
avaliada em US$
500 milhões.
Fato: o veículo detonou suas cargas
explosivas de autodestruição e explodiu no ar. Por que?
Porque ele estava se quebrando devido às
forças aerodinâmicas. Mas por que?
O foguete tinha perdido o controle de
direção (atitude). Causa disso?
Os computadores principal e back-up deram
shut-down ao mesmo tempo.
08/02/21
Por que o Shut-down? Ocorrera um run time
error (out of range, overflow , ou outro) e
ambos computadores se desligaram. De onde veio este erro?
Um programa que convertia um valor em
ponto flutuante para um inteiro de 16 bits recebeu como entrada um valor que estava fora da faixa permitida.
O resultado desta conversão não era mais
Os grandes softwares não funcionam
adequadamente;
Os projetos de software estão sempre
atrasados;
Os custos dos projetos de desenvolvimento
de software são sempre maiores do que o previsto.
25% dos softwares cancelados;
75% dos sistemas não funcionam como o
planejado;
Os problemas são proporcionais à
complexidade dos sistemas;
Os custos do hardware caem, enquanto os
custos do software aumenta rapidamente;
08/02/21
A sofisticação do software ultrapassou
nossa capacidade de construção.
Nossa capacidade de construir programas
não acompanha a demanda por novos programas.
Nossa capacidade de manter programas é
Os computadores estão cada vez mais
rápidos, sofisticados, e baratos;
Os softwares estão cada vez maiores e
mais sofisticados, e a produtividade não acompanha a demanda;
Os custos com manutenção são muito
altos: para sistemas com uma longa vida, eles são várias vezes maiores do que os custos de desenvolvimento.
08/02/21
Dedica-se pouco tempo à coleta de dados
(requisitos dos clientes):
◦ Normalmente apenas um subconjunto das
necessidades do cliente são levadas em conta ...
◦ Os profissionais estão sempre com muita pressa para começar a programar ...
A qualidade geralmente é suspeita ...
◦ Testes sistemáticos e tecnicamente completos raramente são feitos;
◦ A flexibilidade da maioria dos softwares também é bastante limitada;
◦ A concorrência com software barato mas sem qualidade, feito por pessoas sem qualificação adequada é grande.
08/02/21
Não há muito interesse em se gastar tempo
para se entender mais a respeito de estimativas, produtividade, precisão e eficácia de novos métodos e novas
ferramentas, etc.
Velocidade da mudança tecnológica;
Dificuldade de formalização;
Velocidade na mudança dos mercados;
Velocidade na obsolescência dos sistemas;
Incapacidade das estruturas de SI para
acompanhar a velocidade das mudanças.
08/02/21
Por que os custos são tão elevados?
Não há controle sobre prazos ou planejamento
sobre equipes e recursos;
O levantamento de requisitos não é realizado de
forma integrada com o cliente e dentro de padrões antecipadamente projetados.
Por que os cronogramas não são
cumpridos?
Falta de interação entre usuário e analista;
Baixo conhecimento/descrição do
problema;
Nível de experiência da equipe de
desenvolvimento
08/02/21
Por que é difícil medir o progresso durante o
desenvolvimento?
Porque não há referências. Há falta de um plano
com metas e prazos definidos.
Por que os erros não são detectados antes
da liberação das versões?
Controle de qualidade não é objetivo desde o
Por que a produtividade é baixa?
Aprendizado dos usuários ao longo do projeto; Alterações dos requisitos provocadas por
mudanças de tecnologia, legislação ou mercado;
Implicações para a implementação somente
percebidas ao tempo da implementação.
08/02/21
O uso de melhores técnicas, métodos, e
ferramentas.
Mais treinamento e educação: ◦ atualmente se investe muito pouco!
Propagam desinformação e confusão.
No passado eram tomados como verdades
absolutas.
Ainda há resquícios: é difícil mudar hábitos
antigos.
Existem 3 tipos de mitos: ◦ Do cliente
◦ Administrativos, e
◦ Do profissional.
08/02/21
Uma declaração geral dos objetivos é
suficiente para começar a escrever os
programas: podemos preencher os detalhes mais tarde.
◦ Uma definição inicial ruim é a principal causa da maioria dos fracassos no desenvolvimento de software.
As necessidades do projeto mudam
continuamente mas isto não é problema pois o software é flexível.
◦ Os requisitos do software podem mudar, mas o custo da mudança varia bastante dependendo de em que fase ela ocorre:
Definição . . . x
Desenvolvimento . . . 1.5x a 1.6x
Manutenção . . . 60x a 100x
08/02/21
Temos um manual de padrões e
procedimentos para a construção de software: isto basta!
◦ O manual é usado?
◦ Os profissionais de software sabem que ele existe?
◦ Ele reflete as técnicas mais modernas?
◦ Ele é completo?
08/02/21
Temos ferramentas de desenvolvimento de
última geração pois compramos os computadores mais novos!
◦ Em geral, ter ferramentas de auxílio ao
desenvolvimento de software (ex. CASE) é mais importante do que ter a última geração em
Estamos atrasados no prazo: podemos tirar
o atraso colocando mais programadores no projeto.
◦ Normalmente isto não funciona!
◦ As novas pessoas precisam se integrar ao projeto ...
08/02/21
Assim que escrevermos o programa e ele
funcionar o nosso trabalho está terminado.
◦ Em geral, mais de 70% de todo o esforço gasto num programa ou sistema ocorre depois que ele foi entregue ao cliente (manutenção).
◦ Na maioria das vezes, quanto mais cedo se começa a escrever o código mais tempo se gastará para terminá-lo.
Enquanto o programa não estiver
funcionando não há como avaliar a sua qualidade.
◦ Revisões técnicas podem ser feitas desde o
começo de um projeto e são uma das formas mais efetivas de garantia de qualidade de software.
08/02/21
A única coisa a ser entregue em um projeto
bem sucedido é o programa funcionando.
◦ O programa funcionando é só uma parte.
◦ Uma boa documentação incluindo os requisitos, projeto das estruturas de dados, especificação de testes, etc. é o alicerce para um projeto bem
Conhecer e utilizar as práticas da
engenharia de software de maneira disciplinada e organizada.
Desconstruir antigos conceitos de que o
mundo do software era um mundo virtualmente indisciplinado.
08/02/21
Criação de soluções economicamente
efetivas
◦ Engenharia não tem por objetivo apenas resolver problemas, mas resolvê-los com uso econômico dos recursos envolvidos.
Para problemas práticos
◦ Engenharia lida com problemas práticos cuja solução afeta pessoas fora do seu domínio – usuários.
Aplicar conhecimento científico
◦ Engenharia resolve problemas aplicando ciência matemática , técnicas e análise de projeto.
Construir objetos
◦ Engenharia enfatiza soluções que em geral são objetos tangíveis.
A serviço do homem
◦ Engenharia não serve apenas para o usuário imediato, mas também desenvolve tecnologia e conhecimento que apóiam a sociedade como um todo.
08/02/21
“A engenharia de software não está
relacionada apenas com os processos
técnicos de desenvolvimento de software,
mas também com as atividades de
gerenciamento de projetos de software e o
desenvolvimento de ferramentas.”
O desenvolvimento, dentro de custos
adequados, de sistemas de software de alta qualidade.
Atuar de forma sistemática no
desenvolvimento, operação, manutenção e descontinuação do software”
08/02/21
Obs1: Um sistema bem desenvolvido vai
facilitar a operação e a manutenção
Obs2: Para desligar (descontinuar) um
sistema, tem que surgir outro que o substitua.
O conceito de Engenharia de Software foi
inicialmente proposto em 1968, em uma conferência organizada para discutir o que então foi chamado de “Crise do Software”
08/02/21
1. Defina:
1. Programa;
2. Software (especifique seus principais componentes).
2. O que você entende por Engenharia de
Software e o seu surgimento?
3. Qual a importância de usar Engenharia de
Software?
Defina a crise do software, especificando os
motivos.
Quais são os 3 mitos de software?
Especifique os seus principais pontos.
Qual a importância da engenharia de
software para a manutenção?
Por quê o cliente não pode fazer mudanças
ou acrescentar especificações a qualquer momento?
08/02/21