Sei sulla pagina 1di 74

Engenharia

Pressman /
de Software Sommerville

Apresentação
/ Conceitos
Básicos

Teoria e
Exercícios

gabrielpacheco@euvoupassar.com.br

www.tiparaconcursos.net facebook.com/tiparaconcursos twitter.com/gabrielfpacheco


Programação?

Quem sou eu!


Descrição do Curso.
Conteúdo Programático.
Teoria.
Exercícios.
Quem sou eu?

PMP, CSM, MPS.BR e MBA.


Bacharel em Ciências da
Computação.
Consultor de Projetos.
Especialista em EProj.
Professor em cursos
profissionalizantes e preparatórios
para concursos na área de TI.
Aprovado em 7 e convocado em 4.
Funcionário Público.
CONCURSEIRO DE PLANTÃO. J
Descrição do curso.

Aulas expositivas acompanhadas de exposição de slides.


Resolução de exercícios de fixação comentados ao final
de cada bloco.
Carga aproximada de 90 aulas de 30 minutos, passível de
alteração, dependendo do andamento do cursos e
editais existentes no momento da gravação das aulas.
Dúvidas deverão ser postadas via fórum da própria aula.
Material utilizado em sala de aula será disponibilizado
integralmente ao aluno.
Conteúdo Programático.
Bloco I.
Apresentação do curso.
Conceitos de engenharia de software.
Bloco II.
Processos de software:
a. Seqüencial Linear (cascata).
b. Prototipagem.
c. Modelos Evolucionários.
d. Processo Unificado.
e. Programação Extrema (XP).
f. Scrum.
g. Kanban.
h. RAD.
Conteúdo Programático.
Bloco III.
Análise e projeto de sistemas:
a. Análise e projeto estruturado.
b. Análise e projeto OO.
i. Conceitos fundamentais.
ii. Análise.
iii. Modelagem.
iv. Padrões de projeto.
v. UML.
Conteúdo Programático.
Bloco IV.
Projeto de Software:
a. Planejamento e projeto de software.
b. Conceitos e princípios de análise.
c. Qualidade de software.
d. Métricas de software.
e. Teste de software:
i. Verificação.
ii. Validação.
iii. Tipos de teste.
f. Análise e gestão de risco.
g. Cronograma e Acompanhamento.
Conteúdo Programático.
Bloco V.
Tópicos avançados de Engenharia de Software:
a. Engenharia de Software Sala Limpa.
b. Engenharia de Software Baseada em
Componentes.
c. Arquitetura cliente/servidor.
d. Arquitetura Internet e web.
e. Reengenharia.
f. Engenharia de Software apoiada por
computador (CASE).
Descrição do curso.
Conteúdo Programático.

Conceitos Básicos.
Como Estudar Engenharia de Software.

Nível Provável concurso Média salarial


1 Poder Executivo, Ministérios, R$ 1.200,00 a R$
Fundações 3.000,00

2 Poder Judiciário, Tribunais de R$ 3.000,00 a R$


Justiça, Tribunais Eleitorais, 6.500,00
Tribunais Regionais

3 Agências, Abin, Aneel, Anac R$ 8.000,00 a R$


9.000,00

4 Perito criminal, TCU, TCE R$ 10.000,00 a R$


14.000,00

5 Poder Legislativo, Senado Até R$ 18.500,00


Conceitos Básicos.

Software presente em todas as áreas de


negócio existentes atualmente.
Fundamenta-se como insumo estratégico para
as organizações.
Afeta todos os aspectos de nossas vidas.
Software é construído por engenheiros como
qualquer produto, aplicando-se um processo
que leva a um resultado.
Conceitos Básicos.

Como resultado de um processo de software


temos para os engenheiros o conjunto de
programas, documentos e dados e para o
usuário a informação resultante.
Conceitos Básicos.

“Software é o produto que os engenheiros de


software projetam e constroem. Abrangem
programas que executam em computadores de
qualquer tamanho e arquitetura, documentos que
incluem formas impressas e virtuais e dados que
combinam números e texto, mas também
incluem representações de informação em
figuras, em vídeo e em áudio.” (Pressman)
Conceitos Básicos.

“Software são instruções que quando


executadas fornecem a função e o
desempenho desejados, estruturas de
dados que permitem aos programas
manipular adequadamente a informação e
documentos que descrevem a operação e o
uso dos programas” (Pressman)
Conceitos Básicos.

Características de um software:
É desenvolvido, ou passa por um processo de
engenharia, não é manufaturado no sentido clássico.
(hardware X software).
A fase de fabricação de um hardware gera problemas que
são facilmente corrigidos na fabricação de um software.
O trabalho realizado na fabricação dos dois é muito
diferente.
Os custos são focados na engenharia, não podem ser
geridos com se fossem projetos de fabricação.
Conceitos Básicos.

Características de um software:
Software não se desgasta.
Curva de Banheira X Curva Idealizada.
Hardware pode ter peças sobressalentes, software não.
Componentes reutilizáveis.
Conceitos Básicos.
Aplicações de Software.
Aplicável a qualquer situação para a qual um
conjunto previamente especificado de
procedimentos tenha sido definido.
Determinação da informação: previsibilidade da
ordem e temporização da informação.
Aplicações determinadas: dados com ordem pré-definida,
executa algoritmos de análise sem-interrupção e produz
dados em forma de relatórios ou gráficos.
Aplicações indeterminadas: entradas com conteúdo
variável e temporização arbitrária, algoritmos que podem
ser interrompidos por forças externas e saídas que variam
em função de ambiente e tempo.
Conceitos Básicos.
Aplicações de Software (tipos).
Observamos que atualmente a delimitação de
categorias de software é bem difícil.
Software de sistemas: coleção de programas
escritos para servir outros programas. Caracterizado
pela interação com o hardware do computador, uso
de multiplos usuários, operação concorrente,
estruturas de dados complexas e interfaces externas
múltiplas (compiladores, utilitários para gestão de
arquivos, componentes de sistemas operacionais).
Conceitos Básicos.
Aplicações de Software (tipos).
Software de tempo real: monitora/analisa/controla
eventos do mundo real a medida que eles ocorrem.
Contem um componente de coleção de dados, um
componente de análise, um componente de
controle/saída e um componente de monitoração e
controle de todos os outros.
Software comercial: apresentavam-se como sistemas
discretos que evoluíram para sistemas de gestão de
informação. Reestruturam os dados existentes de
modo a facilitar operações comerciais ou tomada de
decisão de gestão de negócio.
Conceitos Básicos.
Aplicações de Software (tipos).
Software científico e de engenharia: caracterizado por
algoritmos que processam números. Evoluíram para uma
visão mais abrangente para tempo real e até de software
de sistemas.
Software embutido: reside nas memórias ROM e é
utilizado para controlar produtos e sistemas para o
mercado consumidor e industrial.
Software para Web: a rede se transforma em um grande
computador.
Software para inteligência artificial: utiliza algoritmos
não numéricos para resolver problemas complexos que
não são passíveis de computação ou análise direta.
Conceitos Básicos.
Aplicações de Software (tipos).
Software para inteligência artificial: utiliza
algoritmos não numéricos para resolver problemas
complexos que não são passíveis de computação ou
análise direta. Representados inclusive por sistemas
especialistas, sistemas baseados em conhecimento
e reconhecimento de padrões.
Conceitos Básicos.
Engenharia de Software?
“Engenharia de Software é a criação e
utilização de sólidos princípios de engenharia a
fim de obter software de maneira econômica,
que seja confiável e que trabalhe
eficientemente em máquinas reais.” (Fritz
Bauer).
“Aplicação de uma abordagem sistemática,
disciplinada e quantificável, para o
desenvolvimento, operação e manutenção do
software; isto é, aplicação de engenharia de
software.” (IEEE).
Conceitos Básicos.
Engenharia de Software?
É uma tecnologia em camadas.
Tem seu foco na qualidade e melhoria contínua.
Processos mantém unidas as camadas de tecnologia,
define de áreas-chave de processo.
Métodos fornecem a técnica de como fazer para
construir software.
Ferramentas de engenharia de software fornecem
apoio automatizado ou semi-automatizado para o
processos e para os métodos.
Conceitos Básicos.
Engenharia de Software?
Engenharia de software é a análise, o projeto, a
construção, a verificação e a gestão de
elementos técnicos (ou sociais).
Qual o problema a ser resolvido?
Que características do elemento são usadas para
resolver o problema?
Como o elemento e a solução serão realizados?
Como o elemento vai ser construído?
Que abordagem será usada para descobrir erros de
projeto e construção?
Como o elemento será mantido a longo prazo?
Conceitos Básicos.
Engenharia de Software?
“Para realizar a engenharia de software
adequadamente, um processo de engenharia de
software deve ser definido.” (Pressman)
Conceitos Básicos.
Engenharia de Software?
Fases genéricas:
Definição (o que): aqui ocorrerá a identificação das necessidades
que o software precisa atender. Três tarefas principais:
Engenharia de sistemas ou de informação.
Planejamento do projeto de software.
Análise de requisitos.
Desenvolvimento (como): definição de como os dados devem ser
estruturados, como as necessidades serão atendidas. Três tarefas
principais:
Projeto do software.
Geração de código.
Teste de software.
Conceitos Básicos.
Engenharia de Software?
Fases genéricas:
Manutenção: modificações associadas com a correção de erros,
adaptações necessárias, e modificação de melhorias. Aplica
internamente novamente as fases de definição e desenvolvimento
para software existente.
Correção: gera uma manutenção corretiva que altera o
software para corrigir defeitos.
Adaptação: gera manutenção adaptativa que altera o software
para acomodar mudanças no seu ambiente externo.
Aperfeiçoamento: gera manutenção perfectiva que aprimora o
software além dos requisitos originais.
Prevenção: gera a manutenção preventiva (reengenharia de
software) que faz modificações de modo que os programas
possam ser mais facilmente corrigidos, adaptados e
melhorados.
Conceitos Básicos.
Processo?
“Arcabouço para as tarefas que são necessárias
para construir software de alta qualidade”.
(Pressman).
Depende do software que está sendo construído.
Modelo de processo é escolhido com base na
natureza do projeto e da aplicação, nos métodos
e ferramentas a serem usados, e nos controles e
nos produtos intermediários e finais que são
requeridos. Descreve os processos que devem ser
realizados para o desenvolvimento de um
software.
Conceitos Básicos.
Gestão de Projetos?
“A gestão do projeto envolve o planejamento, a
monitoração e o controle do pessoal processo e
eventos que ocorrem à media que o Software evolui
de um conceito preliminar para uma
implementação operacional.”
Conceitos Básicos.
Qualidade?
“Fazer a coisa certa no momento certo e do jeito
certo.”
Exercícios
1. (SECGE – PE – ACI – 2010 – Cespe) Acerca da engenharia de
software, assinale a opção correta.

a) A engenharia de software, que tem como alicerce os


métodos, é formada de várias camadas, tais como
ferramentas, métodos e processo.
b) Apesar de importante no contexto de produtos, a qualidade
não é tratada na engenharia de software e, sim, no
gerenciamento de projetos.
c) Análise e projeto são duas ações da engenharia de
software. A definição de arquitetura e componentes são
tarefas da análise, enquanto levantamento e especificação
de requisitos são tarefas do projeto.
Exercícios

d) A engenharia de software visa obter softwares econômicos


que sejam confiáveis e que trabalhem eficientemente em
máquinas reais.
e) A engenharia de software aplica abordagem sistemática,
disciplinada e não quantificável para desenvolvimento e
manutenção de software.
Exercícios
(TRE-BA – Analista de Sistemas – 2010 – Cespe) Com relação à
engenharia de software, julgue os itens a seguir.

2. [52] Entre os desafios enfrentados pela engenharia de


software estão lidar com sistemas legados, atender à
crescente diversidade e atender às exigências quanto a
prazos de entrega reduzidos.
Exercícios
(TRE-BA – Programador – 2010 – Cespe) Em uma visão restritiva,
muitas pessoas costumam associar o termo software aos
programas de computador. Software não é apenas o programa, mas
também todos os dados de documentação e configuração
associados, necessários para que o programa opere corretamente.
A respeito de engenharia de software, julgue os itens.
3. [61] A engenharia de software está 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 este
entrar em operação. A engenharia de sistemas diz respeito aos
aspectos do desenvolvimento e da evolução de sistemas
complexos, nos quais o software desempenha um papel
importante.
Exercícios
4. [62] Na engenharia de software baseada em componentes,
na qual se supõe que partes do sistema já existam, o
processo de desenvolvimento concentra-se mais na
integração dessas partes que no seu desenvolvimento a
partir do início. Essa abordagem é baseada em reuso para o
desenvolvimento de sistemas de software.

(TRE-BA – Análise de Sistemas – 2010 - Cespe) Acerca de


mudança de software, julgue o item abaixo.
5. [58] Das várias estratégias de mudança de software, realizar
alterações significativas na arquitetura do sistema de
software diz respeito a reengenharia de software.
Exercícios
(Banco da Amazônia – TI – 2010 – Cespe) Com relação aos conceitos
de desenvolvimento de sistemas, julgue os itens a seguir.
6. [74] Os princípios de engenharia de software definem a
necessidade de formalidades para reduzir inconsistências e a
decomposição para lidar com a complexidade.
7. [75] Para garantir o desenvolvimento de qualidade, é suficiente
que a equipe tenha as ferramentas mais atuais de engenharia de
software e os melhores computadores.
(Embasa – Desenvolvimento – 2010 – Cespe) Acerca de princípios de
engenharia de software, julgue os itens a seguir
8. [67] Um modelo de processo de software descreve os processos
que são realizados para atingir o seu desenvolvimento. A notação
para as tarefas, os artefatos, os atores e as decisões varia
conforme o modelo de processo utilizado.
Gabarito

1. D
2. C
3. C
4. C
5. E
6. C
7. E
8. C

gabrielpacheco@euvoupassar.com.br
www.tiparaconcursos.net
facebook.com/tiparaconcursos
twitter.com/gabrielfpacheco
Engenharia
Pressman /
de Software Sommerville

Mais
Conceitos e
Processos de
Software

Teoria e
Exercícios

gabrielpacheco@euvoupassar.com.br

www.tiparaconcursos.net facebook.com/tiparaconcursos twitter.com/gabrielfpacheco


Conteúdo Programático.
Mais Conceitos.
Processos de Software.
Seqüencial Linear (cascata).
Prototipagem.
RAD.
Modelos Evolucionários.
Engenharia de Software baseada em
componentes.
Processo Unificado.
Programação Extrema (XP).
Scrum, Kanban.
Conceitos Básicos.

Software são programas de computador e


documentação associada. Os produtos de
software podem ser desenvolvidos para um
cliente específico ou para um mercado gera.
(Sommerville)
Engenharia de software é uma disciplina de
engenharia relacionada a todos os aspectos de
produção de software. (Sommerville)
Conceitos Básicos.

Ciências da computação está relacionada com


teorias e fundamentos; Engenharia de software
está relacionada com prática de desenvolvimento
e entrega de software útil. (Sommervile)
Processo de software é um conjunto de
atividades cujo objetivo é o desenvolvimento ou a
evolução de software. (Sommervile)
Modelo de processo de software é uma
representação simplificada de um processo de
software, apresentada sob perspectiva específica.
(Sommervile)
Conceitos Básicos.

60% do software é desenvolvimento e 40 % é


teste.
A engenharia de sistema está relacionada a todos
os aspectos de desenvolvimento de sistemas
baseados em computadores, incluindo hardware,
software e engenharia de processo. A engenharia
de software é parte desse processo.
(Sommerville)
Conteúdo Programático.
Mais Conceitos.
Processos de Software.
Seqüencial Linear (cascata).
Prototipagem.
RAD.
Modelos Evolucionários.
Engenharia de Software baseada em
componentes.
Processo Unificado.
Programação Extrema (XP).
Scrum, Kanban.
Processos de Software

Processo de software é um conjunto de


atividades que leva á produção de um produto de
software. (Sommerville)
Um pouquinho de história.
Os modelos encontrados no mercado não são
mutuamente excludentes e são na verdade
usados em conjunto.
Quebrando mitos: São escolhidos conforme a
natureza do projeto.
Processos de Software – Modelo
Seqüencial linear - Cascata
Sugere uma abordagem sistemática sequencial.
Inicia no nível de sistema e progride até a
manutenção.
Processos de Software – Modelo
Seqüencial linear - Cascata
Processos de Software - – Modelo
Seqüencial linear - Cascata
Engenharia de sistemas/informação:
estabelecimento de todos os requisitos para o
sistema e alocação de algum subconjunto desses
requisitos para o software.
A engenharia de sistema trata de um conjunto de
necessidades a nível de sistema em alto nível, a
engenharia da informação inclui um conjunto de
necessidades a nível estratégico e das áreas de
negócio.
Processos de Software – Modelo
Seqüencial linear - Cascata
Análise de requisitos de software: intensificação
da análise de requisitos no que o software precisa
ter, conhecimento do domínio da informação do
software, função, comportamento, desempenho
e interface.
Projeto: enfoca a estrutura de dados, arquitetura
do software, representações da interface e
detalhes procedimentais. Traduz os requisitos de
forma que a representação do software possa ser
avaliada antes da codificação.
Processos de Software – Modelo
Seqüencial linear - Cascata
Codificação (teste de unidade): tradução do
projeto para linguagem de máquina.
Teste (integração): condução de testes para
descobrir erros e garantir que entradas definidas
produzirão resultados reais, que concordam com
os resultados exigidos.
Manutenção (operação): se torna necessária
quando se tem uma modificação. Reaplica cada
uma das fases precedentes a um programa
existente.
Processos de Software – Modelo
Seqüencial linear - Cascata
Vantagem: maior capacidade de organização do
projeto, visto que uma etapa só inicia após a
anterior.
Desvantagem:
Modificações poderão causar confusões.
Dificilmente o cliente expõe todos os requisitos
de uma só vez.
Só teremos uma versão executável após o
término do projeto.
Processos de Software – Iterativo X
Incremental
Processos de Software – Prototipagem

Senta-se com o cliente e realiza um projeto rápido


para atender somente a aspectos do software que
ficarão visíveis (protótipo).
O protótipo é avaliado pelo cliente e usado para
refinar os requisitos de software que serão
desenvolvidos.
Novas interações são realizadas para que
tenhamos a evolução do protótipo e melhor
entendimento do desenvolvedor.
Técnica para elencar requisitos, deve-se evitar
passar ao cliente que poderia ser sua versão final.
Processos de Software – Prototipagem
Problemas:
O cliente imagina que seja a sua versão final sem
considerar que na sua geração requisitos de
qualidade ou manutenabilidade não foram tratados.
O cliente exige que seja utilizado o protótipo com
alguns “remendos” e a gerencia aceita.
A utilização de linguagens e tecnologia quaisquer
pode ser uma prática pelo desenvolvedor que acaba
se adaptando ao seu uso e esquece da real
necessidade que teve ao escolhe-las.
Solução:
Definir as regras do jogo no começo.
Processos de Software – RAD

Modelo de desenvolvimento incremental que enfatiza


um ciclo de desenvolvimento curto.
Adaptação de alta-velocidade do modelo cascata.
Agiliza o desenvolvimento baseando-se na construção
de componentes.
Requisitos bem conhecidos e objetivos de projeto
restritos.
Se tivermos a possibilidade de componentizar um
sistema e estes componentes ou módulos puderem ser
desenvolvidos em 60 a 90 dias, poderemos ter várias
equipes trabalhando no desenvolvimento.
Processos de Software – RAD

Modelagem do negócio: modelagem do fluxo de


informação entre as funções do negócio.
Que informação dirige o processo de negócio?
Que informação é gerada?
Quem a gera?
Para onde via?
Quem a processa?
Modelagem dos dados: fluxo de informação refinado
num conjunto de objetos de dados, que darão suporte
ao negócio.
Processos de Software – RAD

Modelagem do processo: os objetos de dados obtidos


são transformados para conseguir o fluxo de
informação necessários para implementar uma função
do negócio.
Geração da aplicação: trabalha com o reuso de
componentes de programas existentes ou cria
componentes reusáveis.
Teste e entrega: como muitos dos seus componentes
já devem ter sido testados, esta fase acaba por ser
reduzida.
Processos de Software – RAD

Problemas:
Exige muito RH para criar as equipe RAD.
Necessidade do compromisso do cliente e dos
desenvolvedores com atividades continuamente
rápidas.
Se o sistema não puder ser componentizado o RAD
não atenderá à expectativa.
Quando tivermos riscos técnicos elevados, o RAD
não é aconselhável.
Processos de Software – Modelos
Evolucionários

Modelos de processo que foram projetados para


acomodar um produto que evolui com o tempo.
Modelo Incremental:
Combina o modelo seqüencial linear com a filosofia
interativa da prototipagem.
O primeiro incremento é chamado de núcleo do
produto.
Processos de Software – Modelos
Evolucionários
Modelo Incremental:
Desenvolve-se um plano para cada incremento de
forma que o núcleo do produto seja modificado
para melhor satisfazer às necessidades do cliente e
a elaboração de características e funcionalidades
adicionais.
Objetiva a elaboração de um produto funcional.
Útil quando não há mão de obra disponível para
uma implementação completa, dentro do prazo
comercial de entrega.
Processos de Software – Modelos
Evolucionários
Processos de Software – Modelos
Evolucionários
Processos de Software – Modelos
Evolucionários
Modelo Espiral:
Combina a natureza interativa da prototipagem com
os aspectos controlados e sistemáticos do modelo
seqüencial linear.
Desenvolve o software em um série de versões
incrementais.
Na última iteração são produzidas versões cada vez
mais completas do sistema.
Divide-se em regiões de tarefas compostas por seus
respectivos conjuntos de tarefas.
Processos de Software – Modelos
Evolucionários
Modelo Espiral:
Pode ser adaptado para a aplicação ao longo do seu
ciclo de vida
Processos de Software – Modelos
Evolucionários
Processos de Software – Modelos
Evolucionários
Exercícios
(MPS – TI - 2010 – CESPE) Com relação à metodologia de
desenvolvimento de software, julgue os itens a seguir.

1. [76] No modelo espiral, que possui uma divisão


inflexível em estágios distintos, determinada fase de um
processo somente se inicia quando a anterior estiver
concluída e aprovada pelas partes envolvidas.

2. [77] O modelo de desenvolvimento em cascata prevê a


prototipação e os desenvolvimentos evolutivo e cíclico do
software.
Exercícios
Exercícios
(MPS – TI - 2010 – CESPE) Na figura acima, que apresenta
o ciclo de vida clássico da engenharia de software, os
nomes de duas etapas foram substituídos pelos números 1
e 2. Considerando essa figura, julgue os itens a seguir.
3. [82] Garantir que as entradas definidas em um ciclo de
vida clássico, tal como o mostrado na figura, produzam
resultados reais que concordem com os resultados
exigidos é uma atividade da etapa de teste.
4. [83] As etapas identificadas na figura por 1 e 2 são,
respectivamente, projeto e instalação.
Exercícios
5. (MPE - SE – Gestão e Análise - 2010 – CESPE) 6. No
desenvolvimento de um software, qualquer que seja o
método escolhido, estará refletido em um ciclo de vida de
desenvolvimento. Nesse aspecto, a parte em que o
modelo espiral incorpora os conceitos do modelo de
prototipação é o
a) primeiro quadrante.
b) segundo quadrante.
c) terceiro quadrante.
d) quarto quadrante.
e) terceiro e quarto quadrantes.
Exercícios
6. (MPE - RN – Gestão e Análise - 2010 – CESPE) 7. No
modelo de desenvolvimento de software em espiral, cada
loop na espiral representa
a) a necessidade de retornar ao início da fase em que se
encontra.
b) um processo de reengenharia.
c) uma disciplina de software.
d) uma fase do processo de software.
e) uma atividade paralela.
Exercícios
7. (MPE - RN – Gestão e Análise - 2010 – CESPE) 8. O
modelo em espiral difere principalmente dos outros
modelos de processo de software por
a) não contemplar o protótipo.
b) reconhecer explicitamente o risco.
c) não ter fases.
d) possuir uma fase única evolucionária.
e) não contemplar o projeto do produto.
Gabarito

1. E
2. E
3. C
4. E
5. D
6. D
7. B

gabrielpacheco@euvoupassar.com.br
www.tiparaconcursos.net
facebook.com/tiparaconcursos
twitter.com/gabrielfpacheco

Potrebbero piacerti anche