Engenharia de Software
Apresentação
Marcelo Marinho
APRESENTAÇÃO
Engenharia de Software
• Curso: Licenciatura em Computação • Modalidade: Presencial
• Departamento: DEINFO
• Professor: Marcelo Marinho • Dias de aula:
– SEG: 20:10hs – 21:50hs – QUA: 18:30hs – 20:10hs
• Quem são vocês?
Objetivos
• Ao concluírem esta disciplina os alunos deverão ser capazes de:
Ementa
Processos de software. Ciclo de vida de desenvolvimento de software. Modelagem de software. Introdução a Modelos de Qualidade e de Gerenciamento de projetos de software. Ambientes de desenvolvimento de software. Padrões de projeto. Técnicas de teste de software. Reuso de componentes de software.
Conteúdo Programático
• Introdução a Engenharia de Software; • Processos de Software; • Engenharia de Requisitos; • Análise de Projetos; • Projeto de arquitetura; • Testes de Software • Qualidade de Software; • Gerenciamento de Projetos;
• Desenvolvimento Ágil de software;
Avaliação
• 1ª. V.A. = Prova
• 2ª. V.A. = 0,5.Prova + 0,5.Projeto
• 3ª. V.A. = 0,5.Projeto + 0,5.Prova (todo conteúdo)
Site da disciplina
Bibliografia
• Básica:
– PRESSMAN, R. Engenharia de Software. 6. ed. ed. Porto Alegre:
– McGrawHill, 2006. SOMMERVILLE, I. Engenharia de Software. 9. ed. São Paulo: Pearson Brasil,
2011.
– PRESSMAN, R. Software Engineering: A
Bibliografia
• Complementar:
– BOOCH, G.; RUMBAUGH, J.; JACOBSON, I. UML 2 - Guia do Usuário. 2. ed. Rio de Janeiro: Campus, 2005.
– GAMMA, E.; HELM, R.; JOHNSON, R.; VLISSIDES, J. Padrões de Projeto: soluções reutilizáveis de software orientado a objetos.
– SCHACH, S. R. Engenharia de Software: Os Paradigmas Clássico e Orientado a Objetos. São Paulo: McGraw Hill, 2009.
– FOWLER, M. UML Essencial. Porto Alegre: Bookman, 3a ed. 2005. – PFLEEGER, S. L. Engenharia de Software – Teoria e Prática, Prentice
Além de
Década de 60
Década de 60
• Muitos Projetos são entregues com um grande atraso;
• Softwares difíceis de manter ou não tendo desempenho adequado;
• Alto custo para manutenção; • Duplicação de esforços
“Crise de
Software
’’Foi proposto que o
desenvolvimento de software
deixasse de ser puramente
artesanal
e passasse a ser
baseado em princípios de
Engenharia
, ou seja, seguindo
um enfoque estruturado e
metódico
.
“Crise do Software”
O que acarretou?
– Mudança da forma que as pessoas desenvolvem software de grande porte;
– Proposto que o software deixasse de ser puramente artesanal passasse a ser baseado em Engenharia;
Engenharia de Software
Atualmente...
• Sistemas Controlados por Software
• Investimentos significativos no setor do software
Então...
Mais sistemas
controlados
por software
20Economia do país,
depende mais da
qualidade do
software
Cenário
• Desenvolvimento cada vez maior da tecnologia de hardware;
• Disponibilidade de máquinas cada vez mais potentes e baratas;
• Uso de computadores cada vez mais difundidos em diversas áreas.
Demanda de software cada vez maior e
mais complexos
Engenharia De Software
Disciplina de engenharia cujo foco está em todos os aspectos da produção de software, desde os estágios iniciais da especificação do sistema atésua manutenção.
Desenvolvimento de Software por grupos de pessoas, usando princípios de engenharia e englobando aspectos técnicos e não técnicos de modo produzir software de
Engenharia de Software
• Engloba não apenas o desenvolvimento de programas, mas também toda documentação necessária para:
Desenvolvimento, Instalação, uso e manutenção dos
O Que é Software ?
• Programas de computador e documentação associada;
• Produtos de software podem ser desenvolvidos para um cliente particular ou podem ser desenvolvidos para um mercado geral;
Objetivos de Engenharia de Software
• Obter software de qualidade;
• Com produtividade no seu desenvolvimento, operação e manutenção;
• Empregando profissionais que desenvolvam o software dentro de custos, prazos e níveis de qualidade controlados;
• E, além disso, que obtenham o melhor custo-benefício possível entre Qualidade X Produtividade;
Motivação
• Desenvolver sistemas de acordo com a intenção do cliente/usuário;
• Estabelecer noção sobre tempo e custo de desenvolvimento;
• Elaborar artefatos além do código;
• Analisar artefatos para estabelecer a qualidade do produto;
Características da Engenharia de
Software
• A Engenharia de Software se refere a software (sistemas) desenvolvidos por grupos ao invés de indivíduos:
– Usa princípios de engenharia ao invés de arte, e
O Início de Tudo...
O Mais Importante Aqui É...
A Idéia
é
O Que Devo Fazer Exatamente?
Ou, em outras palavras,
quais são os
requisitos
Requisitos
Requisitos
• O Que devo fazer?
– Funcionalidades
• Há restrições sobre as funcionalidades?
– Limites de tempo, memória, etc?
• Há restrições mais amplas?
O que faço então?
Como entregar para equipe?
Iniciando a solução
“Temos que identificar em
nossos requisitos, quais
são os elementos
essenciais para
satisfazê-los...”
Iniciando a solução
– Quais classes preciso para implementar estes casos de uso?
Sedimentando a solução...
Sedimentando a solução...
“A partir dos elementos
essenciais, precisamos definir
estratégias para satisfazê-los
incluindo suas restrições...”
Sedimentando a solução ...
Sedimentando a solução...
Operacionalizando a solução ...
“Com a solução definida, o
passo final é
operacionalizá-la. Isto é,
codificá-la.”
Agora sim! Vamos Programar
public class Account { private int balance;
/*@ invariant balance>=0 @*/ ...
void debit(int amount) {
/*@ requires amount <= balance @*/
/*@ ensures balance = \old(balance) - amount @*/ }
... }
Funciona???
“Com a implementação feita,
podemos então executar os
testes!!!”
Pra que testar?
• Ocorrência de falhas humanas no processo de desenvolvimento de software é considerável. • Processo de testes é indispensável na garantia
de qualidade de software.
• Custos associados às falhas de software justificam um processo de testes cuidadoso e bem planejado.
Qual a finalidade?
• Averiguar se todos os requisitos do sistema foram corretamente implementados.
• Assegurar, na medida do possível, a qualidade e a corretude do software produzido.
• Reduzir custos de manutenção corretiva e re-trabalho.
Feito isso...
É preciso implantar o sistema no cliente e
manter o produto, nesse caso entra a Gerência
de Mudanças e Gerência de Configuração.
Mas tudo isso atividades,
documentações, artefatos
Como saber o que fazer?
E o Quem Gerência ?
A Equipe de Gerência
O gerenciamento de projetos tem como objetivo de
assegurar que os processos particulares sejam seguidos, coordenados e monitorando as atividades da engenharia do produto;
Um processo de gerenciamento deve:
Identificar
Estabelecer
Coordenar
Monitorar as atividades
Recursos necessários
Para produzir um produto e/ou serviços que estejam de acordo com os requisitos
Metodologias e Framework de
Gerencia
Engenharia de Software
Requisitos de Software Gerência da Eng. de Software
Projeto de Software Ferramentas e Métodos da Engenharia
Construção de Software Processo de Engenharia de Software
Teste de Software Qualidade de Software
Manutenção de Software Gerência de Configuração de Software
Então...
Vamos
construir
software com
Qualidade
dentro do
prazo
e com
documentação
!
Engenharia de Software
Apresentação
Marcelo Marinho