Engenharia de Software
Download
Report
Transcript Engenharia de Software
Engenharia de Software I:
Introdução
Graduação em Informática
2010
Profa. Itana Gimenes
Programa
1.
2.
3.
4.
5.
6.
7.
O Processo de Engenharia de Software
Engenharia de requisitos
Modelagem de sistemas
Conceitos de orientação a objetos
Desenvolvimento de sistemas orientados a objetos
Projeto de interface humano-computador
Ferramentas de apoio a análise e projeto de
software
Estratégias
Desenvolvimento de projetos bimestrais em
grupos de dois alunos (40%)
Provas escritas bimestrais (60%)
Eventuais trabalhos que podem valer pontos
Ferramenta: Jude ->Astah
http://jude.change-vision.com/judeweb/product/community.html
Bibliografia Básica
Software Engineering: (Update) (8th Edition) (International
Computer Science Series) by Ian Sommerville (Hardcover - Jun
4, 2006)
UML 2 and the Unified Process: Practical Object-Oriented
Analysis and Design (2nd Edition) (Addison-Wesley Object
Technology Series) by Jim Arlow and Ila Neustadt, 2005.
The Unified Modeling Language Reference Manual (2nd
Edition) (The Addison-Wesley Object Technology Series) by
James Rumbaugh, Ivar Jacobson, and Grady Booch (Hardcover
- Jul 29, 2004).
Unified Modeling Language User Guide, The (2nd Edition)
(Addison-Wesley Object Technology Series) by Grady Booch,
James Rumbaugh, and Ivar Jacobson (Hardcover - May 29,
2005).
JACOBSON, I BOOCH, G., RUMBAUGH, J., Unified Software
Development Process, Addison-Wesley, Janeiro 1999.
Bibliografia Complementar
Software Engineering: A Practitioner's
Approach by Roger Pressman (Hardcover Jan 20, 2009).
Análise e Projetos de Sistemas de
Informaçao - Raul Sidnei Wazlawick, Editora
Campus.
Motivação
Compreender as etapas de desenvolvimento
de software.
Conhecer a diferença entre o
desenvolvimento de software de pequeno e
grande porte.
Conhecer as principais técnicas de
desenvolvimento de software.
Estar apto a especificar projetos de software
em UML (Unified Modeling Language)
Conceitos
Software
“criação intelectual compreendendo os programas,
procedimentos, regras e qualquer documentação correlata à
operação de um sistema de processamento de dados.” ISO9000-3
Produto de Software
“Conjunto completo de programas de computador,
procedimentos e documentação correlata, assim como dados
designados para entrega a um usuário.” ISO9000-3
Outros termos: sistemas de software, aplicações,
aplicativos.
O Papel do Software na sociedade
Software está presente na grande maioria das
atividades da sociedade:
Banco
Comunicação
Transporte
Escola
Previdência
Supermercado
Cinema
Bares
Parques de diversão
Exemplos de desastres causados por software
20 famous software disasters
http://www.devtopics.com/20-famoussoftware-disasters/
Problemas vão de acidentes a financeiro
devido ao grande percentual de re-trabalho
necessário (US$ 60 bilhões)
Desastres causados por software
World War III… Almost (1983)
Cost: Quase toda a humanidade
Desastre: O sistema de alertas precoces soviético indicou
falsamente que os EUA havia lançado 5 misséis balísticos.
Felizmente um oficial soviético teve um presentimento e
raciocinou “se os EUA realmente está nos atacando deveria
lançar mais de 5 mísseis, então reportou que a alerta deveria
ser falsa …”
Causa: Um bug no software soviético que falhou em filtrar
detecções de mísseis falsas devido à luz do sol refletindo no
topo das nuvens.
Desastres causados por software
Patriot Fails Soldiers (1991)
Cost: 28 soldados mortos, 100 feridos
Desastrer: Durante a primeira guerra do golfo, um
sistema de mísseis americano na Arábia Saudita
falhou em interceptar um míssel vindo da esquadra
iraquiana. O míssel destrui um acampamento
american.
Cause: Um erro do software de arredondamento
calculou incorretamente o tempo, fazendo o sistema
ignorar o míssel.
Desastres causados por software
Pentium Fails Long Division (1993)
Custo: US $475 milhões, credibilidade da empresa
Desastre: Pentium, um chip da Intel bastante divulgado cometia
erros quando dividindo números de ponto flutuante em um
intervalo específico. Por exemplo, dividindo
4195835.0/3145727.0 resulat em 1.33374 instead de 1.33382,
um erro de 0.006%. Apesar do erro afetar poucos usuários, se
tornou um pesadelo nas relações públicsa da empresa. Com
aproximadamente 5 milhões de chips defeituosos em circulação,
a Intel ofereceu reposição apenas aos consumidores que
provassem que precisariam de alta precisão. No final, a Intel
repos o chip de todos que reclamaram.
Causa: O divisor da unidade de ponto flutuante do Pentium
tinha uma tabela de divisão errada, faltando em torno de 5 de
milhares de entrada que resultavam em erros de
arredondamento.
Como Produzir software?
ambiente
Sistema de
Software
Automatizar
Computador
Mundo Real
Características de Software
!
Software é desenvolvido e não manufaturado no
sentido clássico.
Software não se deteriora ... não existem
componente de reposição.
Software é feito sob encomenda, ao invés de ser
construído a partir de componentes.
A evolução tecnológica afeta diretamente as
facilidades que podem ser incorporadas ao software
e as técnicas de construção destes.
Tempo para transferência de tecnologia.
Tipos de Sistemas de Software
Software
Software
Software
Software
Software
Software
Software
Software
básico
para sistema em tempo real
comercial
para engenharia e aplicações científicas
embarcado (ex. microwave)
para computadores pessoais (shrink-wrap)
baseado em inteligência artificial
de entretenimento
Engenharia de Software
Uma definição:
O estabelecimento e uso de um conjunto de
princípios para se obter, economicamente, um
software que seja confiável e trabalhe
eficientemente em máquinas reais.
Três elementos chaves:
métodos
ferramentas
procedimentos (gerenciamento de projetos)
A Evolução do Software
A segunda era
A terceira era
A quarta era
Os primeiros anos
•sistemas batch
•sistemas multiusuários
•sistemas distribuídos
•distribuição limitada
•sistemas em tempo real
•software personalizado
•banco de dados
•incorporação de
inteligência
•sistemas desktop
poderosos
•software produto
•hardware de baixo
custo
•impacto do
consumidor
•tecnologia de
orientação a objetos
A quinta era
•Netbooks
•Web 2.0
•Serviços Web
•Computação
em nuvens
•sistemas
especialistas
•redes neurais
•computação paralela
•comunicação
intergaláctica
1950
1960
1970
1980
1990
2000 2010
Modelos de Processo de
Desenvolvimento de Software
Modelo de ciclo de vida
descrições abstratas do processo de
desenvolvimento e modificação, tipicamente,
mostrando os principais estágios de
desenvolvimento e manutenção de um software
executável.
Processo de Software
Desenvolvimento
Manutenção
Uso
A idéia do processo de software
Tenho uma lista de nomes
de pessoas ...
Essas pessoas tem códigos
de identificação ...
Quero uma lista em ordem
alfbética ...
mas seria bom também ter
um relatório por
departamento
Processo de
Software
Métodos
Ferramentas
Procedimentos
....
For x:= 1 .. n do
....
....
Requisitos do Sistema
Requisitos do
Software
Análise
O Modelo
Cascata
Projeto de Programas
Codificação
Teste
Operação
Atualizações ao modelo cascasta
Requisitos do
Sistema
Requisitos do
Software
Análise
Projeto do
Programa
Codificação
Testes
Operação
O Modelo Transformacional
Iteração
Descrição
Transformação
Conceitos
Requisitos
Arquitetura
V&V
Iteração
Projeto Detalhado
O Modelo Espiral
1. Define
objetivos,
alternativas
e restrições
4. Planeja
próximo ciclo
2. Analisa
Riscos
3. Desenvolve
produto
From Sommerville
Modelo 4GT
Análise de Requisitos
Estratégias de Projeto
Implementação
usando 4GT
Testes
Abordagem Prototipação
Validar a precisão dos requisitos ou
aceitabilidade das decisões.
Validar a viabilidade de uma estratégia
proposta.
Observações:
protótipos só são válidos se construídos
rapidamente
protótipos devem ser desprezados.
Abordagem Incremental
Definir e desenvolver uma pequena parte do sistema
de cada vez.
Desenvolver um núcleo do sistema inicialmente e
depois adicionar funcionalidades em subprojetos.
Grande atração é que gera sistemas parciais
executáveis e utilizáveis de onde se pode obter
feedbacks e ganhar credibilidade do usuário.
Na prática é difícil de desenvolver uma abordagem
incremental sem ter um entendimento completo dos
requisitos.
Generalização
Definição
Análise do
Sistema
Planejamento
do Projeto de
Software
Análise de
Requisitos
Projeto do
Software
Codificação
Testes
Adaptação
Melhora
mentos
O Que?
Processo de
Software
Desenvolvi
mento
O Como?
Correção
Manutenção
A Obrigação ...
Seleção de Estágios de
Desenvolvimento
Análise de requisitos
Especificação do software
Projeto da arquitetura
Projeto detalhado
Implementação
(Manutenção e evolução)
What?
How?
Análise de requisitos (Sistema e
Software)
Software é sempre parte de um sistema
maior que envolve hardware, pessoas, etc.Modelo de negócios
Coleta de requisitos do software
especificamente.
Técnicas de comunicação
Especificação do sistema
Expressar os requisitos de maneira formal
através de diagramas bem definidos ou
especificações matemáticas.
Projeto da arquitetura
Determinar a estrutura do software com seus
componentes e conectores.
Projeto Detalhado
Projetar a concretização da especificação do
software, definindo base de dados,
representações de interfaces, algoritmos, etc.
Implementação
Escrever o projeto do sistema em uma
linguagem de programação.
Manutenção e Evolução
Corrigir eventuais erros no software e efetivar
atualizações.
O Ciclo de Vida Canônico
Estudo de Viabilidade
Iniciação do projeto
Especificação de requisitos
Projeto da arquitetura
Projeto detalhado
Codificação
Teste de unidade
Teste de aceitação
Teste operacional
Encerramento do projeto
Operação
Desativação do produto
Métodos de Construção de Software
Abordagem sistemática para construir software
Paradigma de desenvolvimento
Procedimentos
Notação
Ferramenta
Exemplo: Análise estruturada, OMT, Catalysis, Processo
Unificado
Estruturado, orientado a objetos
A escolha deve considerar:
características técnicas da aplicação
características técnicas do método
cobertura do ciclo de vida (Pode-se usar mais de um
método)
Observações sobre o processo de
desenvolvimento
Sempre deve existir um processo de software
definido - padrões de qualidade. A disciplina vai
abordar o processo unificado.
O modelo canônico deve ser tratado como uma
referência que deve ser adaptada para cada situação.
Criar um processo baseado em fases específico para
cada projeto.
O profissional deve estar apto a avaliar a aplicação a
ser desenvolvida e a situação do ambiente de
desenvolvimento para decidir qual o melhor processo
de software a ser definido.
Outros processos
Open
eXtreme programming
Processos ágeis
Scrum
OpenUP