Você está na página 1de 60

Conceitos Gerais de

Engenharia de Software
Prof. Msc. Thiago Salhab Alves

Conceitos Gerais de Engenharia de Software


Todos os pases dependem de sistemas
complexos baseados em computadores.
A manufatura e a distribuio industrial esto
completamente automatizados.
Produzir software e manter o software dentro
de custos adequados essencial para o
funcionamento da economia nacional e
internacional.
A Engenharia de Software um ramo da
engenharia cujo foco o desenvolvimento
dentro de custos adequados de sistemas de
software de alta qualidade.
3

Conceitos Gerais de Engenharia de Software


Software algo abastrato e intangvel.
No limitado por materiais ou controlado por
leis da fsica ou por processos de manufatura.
A falta de restrie naturais significa que o
software
pode
facilmente
se
tornar
extremamente complexo e muito difcil de ser
compreendido.
O conceito Engenharia de Software foi proposto
inicialmente em 1968, em uma conferncia
organizada para discutir o que foi chamado de
crise de software.
4

Conceitos Gerais de Engenharia de Software


A crise foi resultante da introduo de novo
hardware de computador baseado em circuitos
integrados.
O seu poder fez com que softwares, at ento
inviveis de serem desenvolvidos, se
tornassem viveis.
O software resultante era ordens de grandeza
maior e mais complexo que sistemas
anteriores.
A construo desses sistemas mostrou que o
desenvolvimento informal de software no era
suficiente.
5

Conceitos Gerais de Engenharia de Software


Projetos importantes apresentavam anos de
atrazo.
O software, cujo custo superava as previses,
no era confivel, difcil de manter e seu
desempenho era insatisfatrio.
O desenvolvimento de software estava em
crise.
Os custos de hardware estavam caindo e de
softwares aumentando rapidamente.
Novas tcnicas e mtodos eram necessrios
para controlar a complexidade dos grandes
sistemas de software.
6

Conceitos Gerais de Engenharia de Software


Essas
tcnicas
tornaram-se
parte
da
engenharia de software.
Porm muitas empresas no aplicam essas
tcnicas de forma efetiva, produzindo softwares
de baixa confiabilidade, com atraso e com
custo alm do oramento.

Conceitos Gerais de Engenharia de Software

O que software?
Muitas pessoas associam o termo software aos
programas de computadores.
Este uma viso muito restritiva.
Software no apenas o programa, mas todos os
dados de documentao e configurao
associados, necessrios para que o programa
opere.
Um sistema de software consiste, geralmente, de
um conjunto de programas separados; arquivos de
configurao; documentao do usurio.
8

Conceitos Gerais de Engenharia de Software

O que Engenharia de Software?


uma disciplina de engenharia relacionada com
todos os aspectos da produo de software,
desde os estgios iniciais de especificao do
sistema at sua manuteno, depois que ester
entrar em operao.

Conceitos Gerais de Engenharia de Software

O que processo de software?


um conjunto de atividades e resultados
associados que produz um produto de software.
Existem quatro atividades fundamentais de
processo que so comuns a todos os processos
de softwares:

Especificao de software: clientes e engenheiros


definem o software a ser produzido e as retries
para a sua operao;
Desenvolvimento de software: o software projetado
e programado.
10

Conceitos Gerais de Engenharia de Software

Validao de software: na qual o software


verificado para garantir que o que o cliente deseja.
Evoluo de software: o software modificado para
se adaptar s mudanas dos requisitos do cliente e
do mercado.

11

Conceitos Gerais de Engenharia de Software

12

Conceitos Gerais de Engenharia de Software

Paradigmas
software

de

desenvolvimento

de

Modelo em cascata: especificao de requisitos;


projeto de software; implementao; teste;
Desenvolvimento
iterativo:
intercala
as
atividades de especificao, desenvolvimento e
validao. Um sistema inicial desenvolvido
rapidamente e refinado com as informaes do
cliente, para produzir um sistema que satisfaa
as necessidades. O sistema, pode ento, ser
entregue.
13

Conceitos Gerais de Engenharia de Software


Engenharia
de
software
baseada
em
componentes: esta tcnica supe que partes do
sistemas j existam. O processo de
desenvolvimento
concentra-se
mais
na
integrao dessas partes do que no seus
desenvolvimento a partir do incio.

14

Conceitos Gerais de Engenharia de Software

Mtodos de Engenharia de Software


Um mtodo de engenharia de software uma
abordagem estruturada para desenvolvimento
de software cujo objetivo facilitar a produo
de software de alta qualidade dentro de custos
adequados.
Mtodos como Anlise Estruturada (DeMarco,
1978) e JSD (Jackson, 1983).
Esses mtodos tentaram identificar os
componentes funcionais bsicos de um sistema;
os mtodos orientados a funes ainda so
usados.
15

Conceitos Gerais de Engenharia de Software


Nas dcadas de 1980 e 1990, os mtodos
orientados a funes foram suplementados por
mtodos orientados a objetos, como os
propostos por Booch (Booch, 1994) e
Rumbaugh (1991).
As abordagens foram integradas em uma
abordagem nica criada de acordo com a
Unified Modeling Language (UML).

16

Conceitos Gerais de Engenharia de Software

Atributos de um bom software


Facilidade de Manuteno: software deve ser
escrito de modo que possa evoluir para atender
s necessidades de mudana dos clientes.
Confiana: o nvel de confiana tem uma srie
de caractersticas, incluindo confiabilidade,
proteo e segurana. Um software confivel
no deve causar danos fsicos ou econmicos
no caso de falha no sistema.

17

Conceitos Gerais de Engenharia de Software


Eficincia: o software no deve desperdiar os
recursos do sistema, como memria e ciclos do
processador. A eficincia inclui tempo de
resposta, tempo de processamento e utilizao
de memria.
Usabilidade: o software deve ser usvel, sem
esforo excessivo, pelo tipo de usurio para o
qual ele foi projetado. Apresentar uma interface
com o usurio e documentao adequadas.

18

Conceitos Gerais de Engenharia de Software

Desafios da Engenharia de Software


Desafio da heterogeneidade: cada vez mais
necessrio que os sistemas operem como
sistemas distribudos, atravs de redes, que
incluem diferentes tipos de computadores, com
diferentes tipos de sistemas de apoio.
Desafio da entrega: muitas tcnicas tradicionais
da engenharia demandam tempo. O tempo que
necessitam necessrio para obter a qualidade
do software. O desafio diminuir os tempos da
entrega sem comprometer a qualidade.
19

Conceitos Gerais de Engenharia de Software


Desafio da confiana: essencial que
possamos confiar no software. O desafio
desenvolver tecnicas que demonstrem que o
software pode ter a confiana dos seus
usurios.

20

Conceitos Gerais de Engenharia de Software

Engenharia de Sistemas
a atividade de especificao, projeto,
implementao, validao implantao e
manuteno do sistema.
Definio de
requisitos

Desativao do
sistema

Projeto do
sistema

Evoluo do
sistema

Instalao do
sistema

Desenvolvimento
de subsistemas
Integrao do
sistema

21

Conceitos Gerais de Engenharia de Software

Processos de Software
um conjunto de atividades que leva
produo de um produto de software.
Os processos de software so complexos e,
como todos os processos intelectuais e
criativos, dependem do julgamento humano.
A ferramentas de engenharia de software
(CASE Computer Aided Software Engineering)
podem apoiar algumas atividades do processo.

22

Conceitos Gerais de Engenharia de Software


Embora existam muitos processo de softwares,
algumas atividades fundamentais so comuns
a todos eles, como:

Especificao de software: a funcionalidade do


software e as restries sobre sua operao devem
ser definidas.
Projeto e implementao de software: o software
que atenda especificao deve ser produzido.
Validao de software: o software deve ser validado
para garantir que ele faa o que o cliente deseja.
Evoluo de software: o software deve evoluir para
atender s necessidades mutveis do cliente.
23

Conceitos Gerais de Engenharia de Software

Modelos de processo de software


Modelo em cascata: considera as atividades
fundamentais do processo, compreendendo
especificao, desenvolvimento, validao e
evoluo, e as representa como fases de
processos separadas.
Desenvolvimento evolucionrio: intercala as
atividades de especificao, desenvolvimento e
validao. Um sistema inicial desenvolvido
rapidamente
baseado
em
especificaes
abstratas. O sistema refinado com as entradas
do cliente para produzir um sistema que satisfaa
as necessidades.
24

Conceitos Gerais de Engenharia de Software


Engenharia
de
software
baseada
em
componentes: baseia-se na existncia de um
nmero
significativo
de
componentes
reusveis. O processo de desenvolvimento do
sistema
enfoca
a
integrao
desses
componentes, em vez de desenvolv-los a
partir do zero.

25

Conceitos Gerais de Engenharia de Software

Modelo em Cascata
o primeiro modelo de processo
desenvolvimento de software publicado.

de

26

Conceitos Gerais de Engenharia de Software


Os principais estgios do modelo demonstram
as atividades de desenvolvimento:
Definio dos requisitos: os servios, restries
e objetivos do sistema so definidos por meio
de consulta aos usurios do sistema. Eles so,
portanto, definidos detalhadamente e servem
como uma especificao do sistema;
Projeto do Software: divide os requisitos em
sisteams de hardware ou de software. Envolve
a identificao e a descrio das abstraes
fundamentais do sistema de software e suas
relaes;
27

Conceitos Gerais de Engenharia de Software


Implementao e teste de unidade: o projeto de
software realizado como um conjunto de
programas ou unidades de programa. O teste
unitrio envolve a verificao de que cada
unidade atende s suas especificaes;
Integrao e teste de sistema: as unidades
individuais de programa ou os programas so
integrados e testados como um sistema
completo para garantir que os requisitos de
software foram atendidos. Aps os testes, o
sistema de software liberado para o cliente.
28

Conceitos Gerais de Engenharia de Software


Operao e Manuteno: geralmente esta a
fase mais longa do ciclo de vida. O sistema
instalado e colocado em operao. A
manuteno envolver a correo de erros no
detectados nos estgios anteriores do ciclo de
vida, no aprimoramento da implementao das
unidades de sistema e na ampliao dos
servios de sistema medido que novos
requisitos so identificados.

29

Conceitos Gerais de Engenharia de Software

Desenvolvimento Evolucionrio
Baseia-se na ideia de desenvolvimento de uma
implementao inicial, expondo o resultado aos
comentrios do usurio e refinando esse
resultado por meio de vrias verses at;e que
seja desenvolvido um sistema adequado.

30

Conceitos Gerais de Engenharia de Software

31

Conceitos Gerais de Engenharia de Software


Existem
dois
tipos
fundamentais
de
desenvolvimento evolucionrio:
Desenvolvimento exploratrio: no qual o
objetivo do processo trabalhar com o cliente
para explorar os requisitos e entregar um
sistema final. O desenvolvimento comea com
as partes do sistema compreendidas. O
sistema evolui por meio da adio de novas
caractersticas propostas pelo cliente.

32

Conceitos Gerais de Engenharia de Software


Prototipao throwaway: na qual o objetivo do
processo de desenvolvimento evolucionrio
compreender os requisitos do cliente e, a partir
disso, desenvolver melhor definio de
requisitos para o sistema. O prottipo se
concentra na experimentao dos requisitos
mal compreendidos do cliente.

33

Conceitos Gerais de Engenharia de Software


Do ponto de vista da engenharia e do
gerenciamento, a abordagem evolucionria tem
dois problemas:

O processo no vivel. Os gerentes precisam de


produtos regulares para medir o progresso. Se os
sistemas so desenvolvidos rapidamente, no
vivel economicamente produzir documentos que
reflitam cada verso do sistema.
Os sistemas so frequentemente mal estruturados.
A mudana contnua tende a corromper a estrutura
do software. A incorporao de mudanas de
software torna-se cada vez masi difcil e onerosa.
34

Conceitos Gerais de Engenharia de Software


Para sistemas de pequeno e mdio porte (at
500 mil linhas de cdigo), penso que a
abordagem evolucionria seja o melhor mtodo
de desenvolvimento.
Os
problemas
de
desenvolvimento
evolucionrio tornam-se particulamente graves
para sistemas complexos de grande porte e de
longo ciclo de vida, nos quais diversas equipes
desenvolvem diferentes partes do sistema.

35

Conceitos Gerais de Engenharia de Software

Engenharia de Software baseada em


componentes
Depende de uma grande base de componentes
de softwares reusveis e algum framework de
integrao desses componentes.
Esses componentes so sistemas comerciais
independentes
que
podem
fornecer
funcionalidade especfica, como a formatao
de texto ou um clculo numrico.

36

Conceitos Gerais de Engenharia de Software


Apresenta os seguintes estgios:
Anlise
de
componentes:
dada
uma
especificao de requisitos, feita uma busca
pelos componentes para implementar essa
especificao.
Modificao de requisitos: so modificados
para refletir os componentes disponveis.
Projeto de sistema com reuso: o framework do
sistema projetado ou um framework existente
reusada. Os projetistas levam em
considerao os componentes reusados.
37

Conceitos Gerais de Engenharia de Software


Desenvolvimento e integrao: o softwre que
no pode ser adquirido externamente
desenvolvido e os componentes e os sistemas
so integrados para criar o novo sistema.

38

Conceitos Gerais de Engenharia de Software


Iterao de processo
Mudanas so inevitveis em todos os projetos
de grande porte.
Os requisitos de sistema mudam medida que a
empresa que est adquirindo o sistema responde
s presses externas.
Quando novas tecnologias se tornam disponveis,
projetos e implementaes mudam.

39

Conceitos Gerais de Engenharia de Software


Entrega Incremental
A entrega incremental uma abordagem
intermediria que combina as vantagens do
modelo em cascata.
Em
um
processo
de
desenvolvimento
incremental, o cliente identifica, em linhas
gerais, os servios a serem fornecidos pelo
sistema.

40

Conceitos Gerais de Engenharia de Software

Definir requisitos
iniciais

Desenvolver
incremento de
sistema

Atribuir requisitos
aos incrementos

Validar incremento

Projetar arquitetura
de sistema

Integrar incremento

Validar sistema

Sistema incompleto

Sistema
final

41

Conceitos Gerais de Engenharia de Software


Eles identificam quais servios so mais
importante e quais so menos importantes.
Assim, um nmero de incrementos de entrega
definido, com cada incremento fornecendo
um subconjunto das funcionalidades do
sistema.
A alocao dos servios aos incrementos
depende da prioridade do servio, com os
servicos de prioridade mais alta sendo
entregues primeiro.
Aps um incremento ser concludo e entregue,
os clientes podem coloc-lo em operao. Isso
significa que eles tm com antecedncia a
42

Conceitos Gerais de Engenharia de Software


medida que novos incrementos so
concludos, eles so integrados aos j
existentes, de tal forma que a funcionalidade do
sistema aprimorada a cada incremento
entregue.
O processo de desenvolvimento incremental
tem uma srie de vantagens:

Os clientes no precisam esperar at a entrega do


sistema inteiro para se beneficiarem dele. O primeiro
incremento satisfaz os requisitos mais crticos e,
dessa forma, possvel usar o software
imediatamente.
43

Conceitos Gerais de Engenharia de Software

Os clientes podem usar os incrementos iniciais como


prottipos
e
ganhar
experincia,
obtendo
informaes sobre os requisitos dos incrementos
posteriores do sistema.
Existe um risco menor de falha geral do projeto.
Embora possam ser encontrados problemas em
alguns incrementos, provvel que alguns sejam
entregues com sucesso aos clientes.

44

Conceitos Gerais de Engenharia de Software


Problemas com a entrega Incremental:

Os incrementos devem ser relativamente pequenos;


A maior parte dos sitemas requer um conjunto de
recursos bsicos usados por diferentes partes do
sistema;

Uma variante dessa abordagem incremental


denominada extreme programming.
Ela se baseia no desenvolvimento e na entrega
de
incrementos
muito
pequenos
de
funcionalidade, envolvimento do cliente no
processo, aprimoramento constante de cdigo
e programao em pares.
45

Conceitos Gerais de Engenharia de Software


Desenvolvimento em espiral
O modelo em espiral do processo de software
foi orieginalmente proposto por Boehm.
Em vez de apresentar o processo de software
como uma sequncia de atividades com algum
retorno entre uma atividade e outra, o processo
representado como um espiral.
Cada loop na espiral representa uma fase do
processo de software.

46

Conceitos Gerais de Engenharia de Software


Cada loop na espiral est dividido em quatro
setores:
1. Definio de objetivos: os objetivos especficos
dessa fase do projeto so definidos. As
restries sobre o processo e o produto so
identificadas e um plano detalhado de
gerenciamento elaborado.
2. Avaliao e reduo de riscos: para cada risco
de projeto identificado, uma anlise detalhada
realizada. Providncias so tomadas para
reduzir o risco.
47

Conceitos Gerais de Engenharia de Software


3. Desenvolvimento e Validao: aps a avaliao
de risco, um modelo de desenvolvimento para o
sistema selecionado.
4. Planejamento: o projeto revisado e uma
deciso tomada para prosseguimento ao
prximo loop da espiral. Se a deciso for pelo
prosseguimento, sero elaborados planos para a
prxima fase do projeto.

48

Conceitos Gerais de Engenharia de Software

49

Conceitos Gerais de Engenharia de Software


A principal diferena entre o modelo em espiral
e os outros modelos do processo de software
o reconhecimento explcito do risco no modelo
em espiral.
Risco significa simplesmente algo que pode dar
errado. Por exemplo, se a inteno for usar
uma nova linguagem de programao, um risco
que os compiladores disponveis no sejam
confiveis ou no produzam cdigo-objeto
suficientemente eficaz.

50

Conceitos Gerais de Engenharia de Software


Especificao de software
A especificao de software ou engenharia de
requisitos o processo para compreender e definir
quais servios so necessrios e identificar as
restries de operao e de desenvolvimento do
sistema.
A engenharia de requisitos um estgio
particularmente crtico do processo de software,
pois os erros conduzem inevitavelmente a
problemas posteriores no projeto e na
implementao do sistema.
51

Conceitos Gerais de Engenharia de Software


Esse processo leva produo de um
documento de requisitos, que a especificao
do sistema.

52

Conceitos Gerais de Engenharia de Software


Existem quatro fases principais no processo de
engenharia de requisitos:
Estudo de viabilidade: feita uma avaliao
para verificar se as necessidades dos usurios
identificadas podem ser satisfeitas por meio
das tecnologias atuais de software e harware.
O estudo considera se o sistema proposto ter
custo adequado do ponto de vista comercial e
se pode ser desenvolvido.

53

Conceitos Gerais de Engenharia de Software


Elicitao e Anlise de Requisitos: o processo
de derivao de requisitos de sistema atravs
da observao de sistemas existentes,
discusses com usurios potenciais e
compradores.
Pode
envolver
o
desenvolvimento de um ou mais modelos de
sistema e prottipos.
Especificao de Requisitos: atividade de
traduzir as informaes coletadas durante a
atividade de anlise em um documento que
define um conjunto de requisitos
54

Conceitos Gerais de Engenharia de Software


Validao de requisitos: essa atividade verifica
os requisitos em relao ao realismo,
consistncia e abrangncia. Durante esse
processo, erros no documento de requisitos
so inevitavelmente descobertos. Devem,
ento ser feitas modificaes para corrigir
esses problemas.

55

Conceitos Gerais de Engenharia de Software


Projeto e implementao de software
o processo de converso de uma
especificao de um sistema em um sistema
executvel.
Um projeto de software a descrio da
estrutura de software a ser implementada, dos
dados que so partes do sistema, das interfaces
entre os componentes do sistema.

56

Conceitos Gerais de Engenharia de Software

57

Conceitos Gerais de Engenharia de Software


As atividades especficas do processo de
projeto so:
Projeto de arquitetura: os subsistemas
constituintes
do
sistema
e os seus
relacionamentos
so
identificados
e
documentados.
Especificao abstrata: para cada subsistema,
so produzidas um especificao abstrata dos
servios e as retries sob as quais ele deve
operar.

58

Conceitos Gerais de Engenharia de Software

Projeto de Interface: para cada subsistema


projetada e documentada a interface com
outros subsistemas. A especificao de
interface no deve ser ambgua pois ela
permite que o subsistema seja usado sem que
se tenha conhecimento da sua operao.
Projeto de componente: os servios alocados
aos componente e as interfaces desses
componentes so projetadas.
Projeto de estruturas de dados: as estruturas
de dados usadas so projetadas.
Projeto de algoritmo: os algoritmos usados so
projetados.
59

Bibliografia

SOMMERVILLE, Ian. Engenharia de Software .


9 ed. : Pearson, 2011.

60

Você também pode gostar