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 países dependem de sistemas


complexos baseados em computadores.
• A manufatura e a distribuição industrial estão
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 intangível.


• Não é limitado por materiais ou controlado por
leis da física ou por processos de manufatura.
• A falta de restriçõe naturais significa que o
software pode facilmente se tornar
extremamente complexo e muito difícil de ser
compreendido.
• O conceito Engenharia de Software foi proposto
inicialmente em 1968, em uma conferência
organizada para discutir o que foi chamado de
“crise de software”.
4
Conceitos Gerais de Engenharia de Software

• A crise foi resultante da introdução de novo


hardware de computador baseado em circuitos
integrados.
• O seu poder fez com que softwares, até então
inviáveis de serem desenvolvidos, se tornassem
viáveis.
• O software resultante era ordens de grandeza
maior e mais complexo que sistemas anteriores.
• A construção desses sistemas mostrou que o
desenvolvimento informal de software não era
suficiente.

5
Conceitos Gerais de Engenharia de Software

• Projetos importantes apresentavam anos de


atrazo.
• O software, cujo custo superava as previsões,
não era confiável, difícil de manter e seu
desempenho era insatisfatório.
• O desenvolvimento de software estava em crise.
• Os custos de hardware estavam caindo e de
softwares aumentando rapidamente.
• Novas técnicas e métodos eram necessários
para controlar a complexidade dos grandes
sistemas de software.
6
Conceitos Gerais de Engenharia de Software

• Essas técnicas tornaram-se parte da


engenharia de software.
• Porém muitas empresas não aplicam essas
técnicas de forma efetiva, produzindo softwares
de baixa confiabilidade, com atraso e com
custo além do orçamento.

7
Conceitos Gerais de Engenharia de Software

O que é software?
•Muitas pessoas associam o termo software aos
programas de computadores.
•Este é uma visão muito restritiva.
•Software não é apenas o programa, mas todos os
dados de documentação e configuração
associados, necessários para que o programa
opere.
•Um sistema de software consiste, geralmente, de
um conjunto de programas separados; arquivos de
configuração; documentação do usuário.
8
Conceitos Gerais de Engenharia de Software

O que é Engenharia de Software?


•É uma disciplina de engenharia relacionada com
todos os aspectos da produção de software,
desde os estágios iniciais de especificação do
sistema até sua manutenção, depois que ester
entrar em operação.

9
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 são comuns a todos os processos
de softwares:
• Especificação de software: clientes e engenheiros
definem o software a ser produzido e as retrições
para a sua operação;
• Desenvolvimento de software: o software é projetado
e programado.

10
Conceitos Gerais de Engenharia de Software
• Validação de software: na qual o software é
verificado para garantir que é o que o cliente deseja.
• Evolução de software: o software é modificado para
se adaptar às mudanças dos requisitos do cliente e
do mercado.

11
Conceitos Gerais de Engenharia de Software

12
Conceitos Gerais de Engenharia de Software

Paradigmas de desenvolvimento de
software
• Modelo em cascata: especificação de requisitos;
projeto de software; implementação; teste;
• Desenvolvimento iterativo: intercala as
atividades de especificação, desenvolvimento e
validação. Um sistema inicial é desenvolvido
rapidamente e refinado com as informações do
cliente, para produzir um sistema que satisfaça
as necessidades. O sistema, pode então, ser
entregue.
13
Conceitos Gerais de Engenharia de Software

• Engenharia de software baseada em


componentes: esta técnica supõe que partes do
sistemas já existam. O processo de
desenvolvimento concentra-se mais na
integração dessas partes do que no seus
desenvolvimento a partir do início.

14
Conceitos Gerais de Engenharia de Software

Métodos de Engenharia de Software


• Um método de engenharia de software é uma
abordagem estruturada para desenvolvimento de
software cujo objetivo é facilitar a produção de
software de alta qualidade dentro de custos
adequados.
• Métodos como Análise Estruturada (DeMarco,
1978) e JSD (Jackson, 1983).
• Esses métodos tentaram identificar os
componentes funcionais básicos de um sistema; os
métodos orientados a funções ainda são usados.

15
Conceitos Gerais de Engenharia de Software

• Nas décadas de 1980 e 1990, os métodos


orientados a funções foram suplementados por
métodos 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 Manutenção: software deve ser
escrito de modo que possa evoluir para atender
às necessidades de mudança dos clientes.
• Confiança: o nível de confiança tem uma série
de características, incluindo confiabilidade,
proteção e segurança. Um software confiável
não deve causar danos físicos ou econômicos
no caso de falha no sistema.

17
Conceitos Gerais de Engenharia de Software

• Eficiência: o software não deve desperdiçar os


recursos do sistema, como memória e ciclos do
processador. A eficiência inclui tempo de
resposta, tempo de processamento e utilização
de memória.
• Usabilidade: o software deve ser usável, sem
esforço excessivo, pelo tipo de usuário para o
qual ele foi projetado. Apresentar uma interface
com o usuário e documentação adequadas.

18
Conceitos Gerais de Engenharia de Software

Desafios da Engenharia de Software


• Desafio da heterogeneidade: cada vez mais é
necessário que os sistemas operem como
sistemas distribuídos, através de redes, que
incluem diferentes tipos de computadores, com
diferentes tipos de sistemas de apoio.
• Desafio da entrega: muitas técnicas tradicionais
da engenharia demandam tempo. O tempo que
necessitam é necessário 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 confiança: é essencial que


possamos confiar no software. O desafio é
desenvolver tecnicas que demonstrem que o
software pode ter a confiança dos seus
usuários.

20
Conceitos Gerais de Engenharia de Software

Engenharia de Sistemas
• É a atividade de especificação, projeto,
implementação, validação implantação e
manutenção do sistema.
Definição de Desativação do
requisitos sistema

Projeto do Evolução do
sistema sistema

Desenvolvimento Instalação do
de subsistemas sistema

Integração do
sistema 21
Conceitos Gerais de Engenharia de Software

Processos de Software
• É um conjunto de atividades que leva à
produção de um produto de software.
• Os processos de software são 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 são comuns
a todos eles, como:
• Especificação de software: a funcionalidade do
software e as restrições sobre sua operação devem
ser definidas.
• Projeto e implementação de software: o software
que atenda à especificação deve ser produzido.
• Validação de software: o software deve ser validado
para garantir que ele faça o que o cliente deseja.
• Evolução de software: o software deve evoluir para
atender às necessidades mutáveis do cliente.

23
Conceitos Gerais de Engenharia de Software
Modelos de processo de software
•Modelo em cascata: considera as atividades
fundamentais do processo, compreendendo
especificação, desenvolvimento, validação e
evolução, e as representa como fases de processos
separadas.
•Desenvolvimento evolucionário: intercala as
atividades de especificação, desenvolvimento e
validação. Um sistema inicial é desenvolvido
rapidamente baseado em especificações abstratas. O
sistema é refinado com as entradas do cliente para
produzir um sistema que satisfaça as necessidades.
24
Conceitos Gerais de Engenharia de Software

• Engenharia de software baseada em


componentes: baseia-se na existência de um
número significativo de componentes
reusáveis. O processo de desenvolvimento do
sistema enfoca a integração 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 de
desenvolvimento de software publicado.

26
Conceitos Gerais de Engenharia de Software

• Os principais estágios do modelo demonstram as


atividades de desenvolvimento:
• Definição dos requisitos: os serviços, restrições e
objetivos do sistema são definidos por meio de
consulta aos usuários do sistema. Eles são,
portanto, definidos detalhadamente e servem
como uma especificação do sistema;
• Projeto do Software: divide os requisitos em
sisteams de hardware ou de software. Envolve a
identificação e a descrição das abstrações
fundamentais do sistema de software e suas
relações;
27
Conceitos Gerais de Engenharia de Software

• Implementação e teste de unidade: o projeto de


software é realizado como um conjunto de
programas ou unidades de programa. O teste
unitário envolve a verificação de que cada
unidade atende às suas especificações;
• Integração e teste de sistema: as unidades
individuais de programa ou os programas são
integrados e testados como um sistema
completo para garantir que os requisitos de
software foram atendidos. Após os testes, o
sistema de software é liberado para o cliente.

28
Conceitos Gerais de Engenharia de Software

• Operação e Manutenção: geralmente esta é a


fase mais longa do ciclo de vida. O sistema é
instalado e colocado em operação. A
manutenção envolver a correção de erros não
detectados nos estágios anteriores do ciclo de
vida, no aprimoramento da implementação das
unidades de sistema e na ampliação dos
serviços de sistema à medido que novos
requisitos são identificados.

29
Conceitos Gerais de Engenharia de Software

Desenvolvimento Evolucionário
• Baseia-se na ideia de desenvolvimento de uma
implementação inicial, expondo o resultado aos
comentários do usuário e refinando esse
resultado por meio de várias versões 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 evolucionário:
• Desenvolvimento exploratório: no qual o
objetivo do processo é trabalhar com o cliente
para explorar os requisitos e entregar um
sistema final. O desenvolvimento começa com
as partes do sistema compreendidas. O
sistema evolui por meio da adição de novas
características propostas pelo cliente.

32
Conceitos Gerais de Engenharia de Software

• Prototipação throwaway: na qual o objetivo do


processo de desenvolvimento evolucionário é
compreender os requisitos do cliente e, a partir
disso, desenvolver melhor definição de
requisitos para o sistema. O protótipo se
concentra na experimentação dos requisitos
mal compreendidos do cliente.

33
Conceitos Gerais de Engenharia de Software

• Do ponto de vista da engenharia e do


gerenciamento, a abordagem evolucionária tem
dois problemas:
• O processo não é viável. Os gerentes precisam de
produtos regulares para medir o progresso. Se os
sistemas são desenvolvidos rapidamente, não é
viável economicamente produzir documentos que
reflitam cada versão do sistema.
• Os sistemas são frequentemente mal estruturados. A
mudança contínua tende a corromper a estrutura do
software. A incorporação de mudanças de software
torna-se cada vez masi difícil e onerosa.

34
Conceitos Gerais de Engenharia de Software

• Para sistemas de pequeno e médio porte (até


500 mil linhas de código), penso que a
abordagem evolucionária seja o melhor método
de desenvolvimento.
• Os problemas de desenvolvimento
evolucionário 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 reusáveis e algum framework de
integração desses componentes.
• Esses componentes são sistemas comerciais
independentes que podem fornecer
funcionalidade específica, como a formatação
de texto ou um cálculo numérico.

36
Conceitos Gerais de Engenharia de Software

• Apresenta os seguintes estágios:


• Análise de componentes: dada uma
especificação de requisitos, é feita uma busca
pelos componentes para implementar essa
especificação.
• Modificação de requisitos: são modificados
para refletir os componentes disponíveis.
• Projeto de sistema com reuso: o framework do
sistema é projetado ou um framework existente
é reusada. Os projetistas levam em
consideração os componentes reusados.
37
Conceitos Gerais de Engenharia de Software

• Desenvolvimento e integração: o softwre que


não pode ser adquirido externamente é
desenvolvido e os componentes e os sistemas
são integrados para criar o novo sistema.

38
Conceitos Gerais de Engenharia de Software

Iteração de processo
•Mudanças são inevitáveis em todos os projetos
de grande porte.
•Os requisitos de sistema mudam à medida que a
empresa que está adquirindo o sistema responde
às pressões externas.
•Quando novas tecnologias se tornam disponíveis,
projetos e implementações mudam.

39
Conceitos Gerais de Engenharia de Software

Entrega Incremental
• A entrega incremental é uma abordagem
intermediária que combina as vantagens do
modelo em cascata.
• Em um processo de desenvolvimento
incremental, o cliente identifica, em linhas
gerais, os serviços a serem fornecidos pelo
sistema.

40
Conceitos Gerais de Engenharia de Software

Definir requisitos Atribuir requisitos Projetar arquitetura


iniciais aos incrementos de sistema

Desenvolver
incremento de Validar incremento Integrar incremento
sistema

Validar sistema
Sistema incompleto
Sistema
final

41
Conceitos Gerais de Engenharia de Software

• Eles identificam quais serviços são mais


importante e quais são menos importantes.
• Assim, um número de incrementos de entrega é
definido, com cada incremento fornecendo um
subconjunto das funcionalidades do sistema.
• A alocação dos serviços aos incrementos depende
da prioridade do serviço, com os servicos de
prioridade mais alta sendo entregues primeiro.
• Após um incremento ser concluído e entregue, os
clientes podem colocá-lo em operação. Isso
significa que eles têm com antecedência a entrega
de parte da funcionalidade do sistema.
42
Conceitos Gerais de Engenharia de Software

• À medida que novos incrementos são


concluídos, eles são integrados aos já
existentes, de tal forma que a funcionalidade do
sistema é aprimorada a cada incremento
entregue.
• O processo de desenvolvimento incremental
tem uma série de vantagens:
• Os clientes não precisam esperar até a entrega do
sistema inteiro para se beneficiarem dele. O primeiro
incremento satisfaz os requisitos mais críticos e,
dessa forma, é possível usar o software
imediatamente.
43
Conceitos Gerais de Engenharia de Software
• Os clientes podem usar os incrementos iniciais como
protótipos e ganhar experiência, obtendo
informações 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, é provável 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 básicos 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 código e
programação 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 sequência 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. Definição de objetivos: os objetivos específicos
dessa fase do projeto são definidos. As
restrições sobre o processo e o produto são
identificadas e um plano detalhado de
gerenciamento é elaborado.
2. Avaliação e redução de riscos: para cada risco
de projeto identificado, uma análise detalhada é
realizada. Providências são tomadas para
reduzir o risco.
47
Conceitos Gerais de Engenharia de Software

3. Desenvolvimento e Validação: após a avaliação


de risco, um modelo de desenvolvimento para o
sistema é selecionado.
4. Planejamento: o projeto é revisado e uma
decisão é tomada para prosseguimento ao
próximo loop da espiral. Se a decisão for pelo
prosseguimento, serão elaborados planos para a
próxima fase do projeto.

48
Conceitos Gerais de Engenharia de Software

49
Conceitos Gerais de Engenharia de Software

• A principal diferença entre o modelo em espiral


e os outros modelos do processo de software é
o reconhecimento explícito do risco no modelo
em espiral.
• Risco significa simplesmente algo que pode dar
errado. Por exemplo, se a intenção for usar
uma nova linguagem de programação, um risco
é que os compiladores disponíveis não sejam
confiáveis ou não produzam código-objeto
suficientemente eficaz.

50
Conceitos Gerais de Engenharia de Software

Especificação de software
•A especificação de software ou engenharia de
requisitos é o processo para compreender e definir
quais serviços são necessários e identificar as
restrições de operação e de desenvolvimento do
sistema.
•A engenharia de requisitos é um estágio
particularmente crítico do processo de software,
pois os erros conduzem inevitavelmente a
problemas posteriores no projeto e na
implementação do sistema.
51
Conceitos Gerais de Engenharia de Software

• Esse processo leva à produção de um


documento de requisitos, que é a especificação
do sistema.

52
Conceitos Gerais de Engenharia de Software

• Existem quatro fases principais no processo de


engenharia de requisitos:
• Estudo de viabilidade: é feita uma avaliação
para verificar se as necessidades dos usuários
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

• Elicitação e Análise de Requisitos: é o processo


de derivação de requisitos de sistema através
da observação de sistemas existentes,
discussões com usuários potenciais e
compradores. Pode envolver o
desenvolvimento de um ou mais modelos de
sistema e protótipos.
• Especificação de Requisitos: atividade de
traduzir as informações coletadas durante a
atividade de análise em um documento que
define um conjunto de requisitos

54
Conceitos Gerais de Engenharia de Software

• Validação de requisitos: essa atividade verifica


os requisitos em relação ao realismo,
consistência e abrangência. Durante esse
processo, erros no documento de requisitos
são inevitavelmente descobertos. Devem,
então ser feitas modificações para corrigir
esses problemas.

55
Conceitos Gerais de Engenharia de Software

Projeto e implementação de software


• É o processo de conversão de uma
especificação de um sistema em um sistema
executável.
• Um projeto de software é a descrição da
estrutura de software a ser implementada, dos
dados que são 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 específicas do processo de


projeto são:
• Projeto de arquitetura: os subsistemas
constituintes do sistema e os seus
relacionamentos são identificados e
documentados.
• Especificação abstrata: para cada subsistema,
são produzidas um especificação abstrata dos
serviços e as retrições 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
especificação de interface não deve ser ambígua pois
ela permite que o subsistema seja usado sem que se
tenha conhecimento da sua operação.
• Projeto de componente: os serviços alocados aos
componente e as interfaces desses componentes são
projetadas.
• Projeto de estruturas de dados: as estruturas de dados
usadas são projetadas.
• Projeto de algoritmo: os algoritmos usados são
projetados.

59
Bibliografia

• SOMMERVILLE, Ian. Engenharia de Software .


9ª ed. : Pearson, 2011.

60

Você também pode gostar