Você está na página 1de 63

Introduo a Engenharia de

Software
Prof. Anderson Cavalcanti
UFRN-CT-DCA
O que Software?
O que software?

So programas de computadores, em suas diversas


formas, e a documentao associada.
Um programa um conjunto de solues algortmicas,
codificadas numa linguagem de programao, executado
numa mquina real.
Os produtos de software podem ser desenvolvidos para
um cliente em particular ou para o mercado geral.
Genrico (COTS Commercial Off-The Shelf)
Personalizado sob encomenda
Software um produto conceitual e lgico.
Caractersticas

Invisibilidade
Software invisvel e invisualizvel
Complexidade
Software mais complexo do que qualquer outro
produto construdos por seres humanos
Mutabilidade
Existe sempre uma presso para se fazer mudanas
em um software
Caractersticas

Conformidade
O software deve ser desenvolvido conforme o
ambiente. No o ambiente que deve se adaptar ao
software.
Se o software esta conforme os requisitos (o
ambiente) todo o suporte operacional deve se adaptar
ao software.
Formas do Software
Mitos do Software
O estabelecimento de objetivos gerais suficiente para
se comear a escrever programas.
D a uma pessoa tcnica um bom livro de programao e
voc ter um programador.
Mudanas no software podem ser feitas facilmente
porque ele "flexvel".
At que o programa esteja "rodando" no possvel
verificarmos a sua qualidade.
Uma vez que o programa esteja escrito e funcionando,
nosso trabalho est feito.
Um projeto bem sucedido se conseguirmos um
programa funcionando corretamente.
Histrico

Os primeiros anos (1950 a incio dos 60)


Aplicaes cientficas e de engenharia
A segunda era (1960 a meados de 80)
Aplicaes comerciais em grande-porte (sistemas de
informao BD)
A terceira era (meados de 70 e dcada de 80)
Aplicativos pessoais em microcomputadores
A quarta era (meados de 80 a meados de 90)
Aplicativos com Interfaces Grficas
Redes e Arquitetura Cliente-Servidor
Histrico

A quinta era (de meados de 90 a ???)


Software Distribudos, Internet, Groupwares e
Intranets
Sexta era??
Computao Pervasiva, Mvel e Ubqua
Categorias de Tamanho de Softwares

Win 95: teve 11 milhes de linhas e 200 programadores


Nestscape: teve 3 milhes de linhas e 120 programadores
Contextualizao da Engenharia
de Software
O que a Engenharia de Software?
uma disciplina da engenharia dedicada a todos os
aspectos da produo de software.
Engenheiros de software devem adotar uma
abordagem sistemtica e organizada para o seu
trabalho e usar tcnicas e ferramentas apropriadas,
de acordo com o problema a ser resolvido, e com as
restries e recursos disponveis.
Engenharia

Desenvolvimento de um produto;
Processo de desenvolvimento envolvendo anlise,
design, implementao e avaliao;
Baseado em teoria, princpios, modelos, mtodos,
tcnicas e ferramentas;
Equipe de especialistas;
Planejamento e gerenciamento de recursos, custos e
prazos.
Objetivos da Engenharia de Software

Aplicao de teoria, modelos, formalismos, tcnicas


e ferramentas da cincia da computao e reas
afins para o desenvolvimento sistemtico de
software.
Aplicao de mtodos, tcnicas e ferramentas para o
gerenciamento do processo de desenvolvimento.
Produo da documentao formal destinada a
comunicao entre os membros da equipe de
desenvolvimento bem como aos usurios.
Definies de Engenharia de Software

O estabelecimento e uso de princpios de engenharia


para a produo economicamente vivel de software de
qualidade que funcione em mquinas reais;
A engenharia de software a disciplina envolvida com a
produo e manuteno sistemtica de software que so
desenvolvidos com custos e prazos estimados;
Disciplina que aborda a construo de software
complexo com muitas partes interconectadas e
diferentes verses por uma equipe de analistas,
projetistas, programadores, gerentes, "testadores", etc.
Aspectos histricos

1968 Conferncia da OTAN, Garmisch


Objetivo: resolver a Crise do Software
Software entregue:
Atrasado
Com oramento estourado
Com falhas residuais
Custo do hardware decrescente e custo do software
em ascenso.
Qual a diferena entre engenharia de
software e engenharia de sistemas?
A engenharia de sistemas est interessada em todos
os aspectos de um sistema baseado em computador,
incluindo hardware, software, fatores humanos,
informao e o processo. A engenharia de software
parte dela.
Princpios da Engenharia de Software

Todo engenheiro de software deve desenvolver com:


Rigor e Formalidade
Separao de interesses
Modularidade
Abstrao
Antecipao de mudanas
Generalidade
Possibilidades de evoluo
Processos de Software
Como transformar necessidades em software?

Principais Atividades Envolvidas:


Entender as necessidades do cliente;
Planejar uma soluo;
Implementar e testar a soluo;
Entregar a soluo.
Como essas atividades so executadas?
De forma desordenada e informal;
Apenas por uma pessoa.
Processo de Desenvolvimento

O conjunto de atividades de desenvolvimento, sua


ordem temporal e a atribuio de responsabilidades
(papis de desenvolvedores) definem um processo
de desenvolvimento de software;
Um processo de software a especificao do
processo de transformar necessidades em software;
Ciclo de Vida de um Processo:
Determina as fases do processo;
Define atividades importantes e opcionais para cada
fase.
Modelagem
O que so modelos?

Modelos descrevem um determinado sistema,


muitas vezes de forma simplificada;
Modelo de um processo de desenvolvimento:
a especificao (documentada) de um processo de
desenvolvimento de software que servir de
parmetro para uso/especificao de um processo
para uma equipe/projeto.
Modelos de Software
Na construo de sistemas de software, assim como
na construo de sistemas habitacionais, tambm h
uma gradao de complexidade:

A construo desses sistemas necessita


de um planejamento inicial
Modelos de Software

Um modelo pode ser visto como uma representao


idealizada de um sistema que se planeja construir;
Maquetes de edifcios e de avies e plantas de
circuitos eletrnicos so apenas alguns exemplos de
modelos.
Razo para a Construo de Modelos

Em princpio, podemos ver a construo de modelos


como uma atividade que atrasa o desenvolvimento do
software propriamente dito;
Mas essa atividade propicia...
O gerenciamento da complexidade inerente ao
desenvolvimento de software.
A comunicao entre as pessoas envolvidas.
A reduo dos custos no desenvolvimento.
A predio do comportamento futuro do sistema.
Entretanto, note o fator complexidade como
condicionante dessas vantagens.
Diagramas e Documentao

No contexto de desenvolvimento de software,


correspondem a desenhos grficos que seguem
algum padro lgico.
Podemos tambm dizer que um diagrama uma
apresentao de uma coleo de elementos grficos
que possuem um significado predefinido.
Diagramas normalmente so construdos de acordo
com regras de notao bem definidas.
Ou seja, cada forma grfica utilizada em um diagrama
de modelagem tem um significado especfico.
Diagramas e Documentao

Diagramas permitem a construo de uma


representao concisa de um sistema a ser
construdo.
uma figura vale por mil palavras

No entanto, modelos tambm so compostos de informaes textuais


Diagramas e Documentao

Dado um modelo de uma das perspectivas de um


sistema, diz-se que o seu diagrama, juntamente com
a informao textual associada, formam a
documentao deste modelo.
Modelagem de Software

A modelagem de sistemas de software consiste


na utilizao de notaes grficas
e textuais com o objetivo de construir modelos
que representam as partes essenciais de um
sistema, considerando-se diversas perspectivas
diferentes e complementares.
Paradigmas
Paradigma?

Um paradigma uma forma de abordar um


problema;
No contexto da modelagem de um sistema de
software, um paradigma tem a ver com a forma pela
qual esse sistema entendido, projetado e
construdo.
Paradigma?

A primeira abordagem usada para modelagem de


sistemas de software foi o paradigma estruturado.
Paradigma da Orientao a Objetos

Hoje em dia, praticamente suplantou o paradigma


anterior, o paradigma da orientao a objetos...
O paradigma da OO surgiu no fim dos anos 60.
Alan Kay, um dos pais desse paradigma, formulou a
chamada analogia biolgica.
Como seria um sistema de software que funcionasse
como um ser vivo?
Analogia Biolgica

Uma clula interage com outras clulas enviando


mensagens para realizar um objetivo comum;
Adicionalmente, cada clula se comportaria como
uma unidade autnoma;
De uma forma mais geral, Kay pensou em como
construir um sistema de software a partir de agentes
autnomos que interagem entre si.
Fundamentos da OO

Atravs de sua analogia biolgica, Alan Kay definiu os


fundamentos da orientao a objetos
Qualquer coisa um objeto;
Objetos realizam tarefas atravs da requisio de
servios a outros objetos;
Cada objeto pertence a uma determinada classe. Uma
classe agrupa objetos similares;
A classe um repositrio para comportamento
associado ao objeto;
Classes so organizadas em hierarquias.
Sistema de Software OO: uma analogia
Resumindo

O paradigma da orientao a objetos visualiza um


sistema de software como uma coleo de agentes
interconectados chamados objetos.
Cada objeto responsvel por realizar tarefas
especficas. atravs da interao entre objetos que uma
tarefa complexa realizada.
Um sistema de software orientado a objetos consiste de
objetos em colaborao com o objetivo de realizar as
funcionalidades deste sistema. Cada objeto responsvel
por tarefas especficas. atravs da cooperao entre
objetos que a computao do sistema se desenvolve.
Conceitos e Princpios de OO

Conceitos:
Classe
Objeto
Mensagem
Princpios:
Encapsulamento
Polimorfismo
Generalizao (herana)
Composio
Classes, Objetos e Mensagens

O mundo real formado de coisas;


Na terminologia de orientao a objetos, estas coisas
do mundo real so denominadas objetos;
Seres humanos costumam agrupar os objetos para
entend-los;
A descrio de um grupo de objetos denominada
classe de objetos, ou simplesmente de classe.
O que uma Classe?

Uma classe um molde para objetos. Diz-se que um


objeto uma instncia de uma classe;
Uma classe uma abstrao das caractersticas
relevantes de um grupo de coisas do mundo real
Na maioria das vezes, um grupo de objetos do mundo
real muito complexo para que todas as suas
caractersticas e comportamento sejam representados
em uma classe
Como detectar propriedades relevantes?

Uma abstrao qualquer modelo que inclui os


aspectos relevantes de alguma coisa, ao mesmo
tempo em que ignora os menos importantes.
Abstrao depende do observador.
Abstrao em OO

A orientao a objetos faz uso intenso de abstraes


Os princpios da OO podem ser vistos como aplicaes
da abstrao
Princpios da OO: encapsulamento, polimorfismo,
herana e composio
Objetos como Abstraes

Uma abstrao uma representao das caractersticas e


do comportamento relevantes de um conceito do mundo
real para um determinado problema.
Dependendo do contexto, um mesmo conceito do
mundo real pode ser representado por diferentes
abstraes:
Carro (para uma transportadora de cargas)
Carro (para uma fbrica de automveis)
Carro (para um colecionador)
Carro (para uma empresa de kart)
Carro (para um mecnico)
Mensagens

Para que um objeto realize alguma tarefa, deve haver


um estmulo enviado a este objeto.
Pense em um objeto como uma entidade ativa que
representa uma abstrao de algo do mundo real
Ento faz sentido dizer que tal objeto pode responder
a estmulos a ele enviados
Assim como faz sentido dizer que seres vivos reagem a
estmulos que eles recebem.
Mensagens

Independentemente da origem do estmulo, quando


ele ocorre, diz-se que o objeto em questo est
recebendo uma mensagem
Uma mensagem uma requisio enviada de um
objeto a outro para que este ltimo realize alguma
operao
Encapsulamento

Objetos possuem comportamento.


O termo comportamento diz respeito a que operaes
so realizadas por um objeto e tambm de que modo
estas operaes so executadas.
Encapsulamento

De acordo com o encapsulamento, objetos devem


esconder a sua complexidade...
Esse princpio aumenta qualidade do SSOO, em
termos de:
Legibilidade
Clareza
Reuso
Encapsulamento

O encapsulamento uma forma de restringir o


acesso ao comportamento interno de um objeto
Um objeto que precise da colaborao de outro para
realizar alguma tarefa simplesmente envia uma
mensagem a este ltimo;
O mtodo (maneira de fazer) que o objeto requisitado
usa para realizar a tarefa no conhecido dos objetos
requisitantes.
Na terminologia da orientao a objetos, diz-se que
um objeto possui uma interface
A interface de um objeto o que ele conhece e o que
ele sabe fazer, sem descrever como o objeto conhece
ou faz
A interface de um objeto define os servios que ele
pode realizar e conseqentemente as mensagens que
ele recebe
Encapsulamento

Uma interface pode ter vrias formas de


implementao;
Mas, pelo princpio do encapsulamento, a
implementao utilizada por um objeto receptor de
uma mensagem no importa para um objeto
remetente da mesma.
Polimorfismo
Objeto
Objeto Receptor
Receptor

Objeto Remetente (Jogo de


Futebol?)

a habilidade de objetos de classes


diferentes responderem a mesma mensagem
de diferentes maneiras.
Generalizao (Herana)

A herana pode ser vista como um nvel de abstrao


acima da encontrada entre classes e objetos;
Na herana, classes semelhantes so agrupadas em
hierarquias:
Cada nvel de uma hierarquia pode ser visto como um
nvel de abstrao
Cada classe em um nvel da hierarquia herda as
caractersticas das classes nos nveis acima
Herana

A herana facilita o compartilhamento de


comportamento entre classes semelhantes;
As diferenas ou variaes de uma classe em
particular podem ser organizadas de forma mais
clara;
Entendido o Paradigma, como criar
modelos?
O rpido crescimento da capacidade computacional
das mquinas (lei de moore) resultou na demanda
por sistemas de software cada vez mais complexos;
O surgimento de sistemas de software mais
complexos resultou na necessidade de reavaliao da
forma de desenvolver sistemas;
Conseqentemente as tcnicas utilizadas para a
construo de sistemas computacionais tm evoludo
de forma impressionante, notavelmente no que
tange modelagem de sistemas.
Entendido o Paradigma, como criar
modelos?
Na primeira metade da dcada de 90 surgiram vrias
propostas de tcnicas para modelagem de sistemas
segundo o paradigma orientado a objetos
Houve uma grande proliferao de propostas para
modelagem orientada a objetos
diferentes notaes grficas para modelar uma
mesma perspectiva de um sistema;
cada tcnica tinha seus pontos fortes e fracos.
Entendido o Paradigma, como criar
modelos?
Percebeu-se a necessidade de um padro para a
modelagem de sistemas, que fosse aceito e utilizado
amplamente;
Alguns esforos nesse sentido de padronizao, o
principal liderado pelo trs amigos;
Surge a UML (Unified Modeling Language) em 1996
como a melhor candidata para ser linguagem
unificadora.
UML
UML (Linguagem de Modelagem Unificada)

A UML a linguagem padro para visualizar,


especificar, construir e documentar os artefatos de
software de um sistema.
Unificao de diversas notaes anteriores
Mentores: Booch, Rumbaugh e Jacobson
Trs Amigos
IBM Rational (www.rational.com)
UML (Linguagem de Modelagem Unificada)

UML ...
uma linguagem visual
independente de linguagem de programao.
independente de processo de desenvolvimento
UML no ...
uma linguagem programao (mas possui verses!)
uma tcnica de modelagem
Diagramas da UML

Um diagrama na UML uma apresentao de uma


coleo de elementos grficos que possuem um
significado predefinido
No contexto de desenvolvimento de software,
correspondem a desenhos grficos que seguem algum
padro lgico
Diagramas da UML

Um processo de desenvolvimento que utilize a UML


como linguagem de modelagem envolve a criao de
diversos documentos:
Estes documentos, denominados artefatos de
software, podem ser textuais ou grficos
Os artefatos grficos produzidos no desenvolvimento
de um SSOO so definidos atravs dos diagramas da
UML.
Referncias

JACOBSON, I.; BOOCH, G. and RUMBAUGH, J. The


Unified Software Development Process. Readding,
MA.: Addison-Wesley, 1999,
LARMAN, C. Utilizando UML e Padres: uma
introduo anlise e ao projeto orientados a
objetos e ao Processo Unificado. 2a edio - Porto
Alegre: Bookman, 2004.
ALLEIXO, F. Notas de aula da disciplina de Anlise e
Projeto Orientado a Objeto, CEFET/RN, 2007.
LEITE, J.C. Notas de aula da disciplina de Engenharia
de Software, UFRN, 2006.

Você também pode gostar