Disciplinas
Introdução a Engenharia de Software
Crise de Software
- Ocorre por volta dos anos 60
- Dificuldades em produzir sistemas de larga escala / complexos
- Alta complexidade
- Falta de técnicas
-
Alta demanda de software
- Fora do prazo
- Custo alto
- Sem qualidade
- Conferência Internacional de Engenharia de Software (anos 70) para criação de uma abordagem sobre a ES
- A partir dessa conferência, foram realizadas mais e mais, gerando mais conhecimento sobre a Engenharia de Software.
Margaret Hamilton
A **Mãe da Engenharia de Software**
- Quando trabalhou no projeto da Apollo 11, percebeu uma grande interseção entre a parte de Hardware e a parte de Software, o que a fez perceber a necessidade de uma nova área.
- Liderou a Engenharia de Software no projeto Apollo
Importância
- Os conceitos da Engenharia de Software impactam na redução de bugs que podem acarretar problemas de diversas áreas na sociedade;
Therac 25
-
Máquina de Radioterapia controlada por computador (1985-1987)
- 6 acidentes (5 mortes)
- Overdose de radiação
-
Por que isso aconteceu?
- Falta de verificação (Quase não foram realizados testes)
- Falta de documentação (Dificuldade de manter / evoluir software com isso)
- Códigos de erro incompreensíveis
Outros bugs que tiveram sérias consequências
Engenharia de Software
- Disciplina gerencial e tecnológica que lida com a produção e manutenção sistemática de produtos de software desenvolvidos dentro de estimativas de custo e de tempo;
Engenheiro de Software
- Deve adotar uma abordagem sistemática e organizada em seu trabalho e usar técnicas e ferramentas apropriadas dependendo do problema a ser resolvido, de acordo com as restrições de desenvolvimento e os recursos disponíveis.
Objetivo
- Software dentro do custo e prazo e com qualidade!
Modelo do Processo de Desenvolvimento de Software
-
Requisitos
- Coletar funcionalidades
-
Design
- Detalhar modelos dos requisitos
- Implementação
- Validação
- Evolução
Planejamento e Gerenciamento
-
Pessoas
- Motivação
- Alocação
-
Processo
- Qualidade (Métricas)
- Melhoria
Planejamento
Análise de Riscos
- Mudança de pessoas
- Mudança de requisitos
- Dependência
- Hardware
- Ferramentas CASE
Estimar
- Custo
- Tempo
Requisitos
O que são?
- Serviços que o sistema deve fornecer e restrições à operação do mesmo
Classificação
-
Funcional
- Creditar, Debitar
-
Não Funcional
- Performance, Segurança
Dificuldades
- O cliente não sabe o que ele realmente deseja!
- Problemas na comunicação
- Mudança constante de requisitos
-> Por conta disso, é necessário definir bem o escopo.
Engenharia de Requisitos
- Identificação, especificação e descrição dos requisitos do sistema de software
Etapas do Desenvolvimento de um Software
Modelagem
- É a 1ª fase do projeto
- Instrumento para o entendimento e comunicação do produto final que será desenvolvido.
-
Problema
- simplicidade (favorece a comunicação)
- complexidade (favorece a precisão) do modelo
Implementação
- É a 2ª fase do projeto
-
Segue o design proposto
- Que paradigma e linguagem de programação usar?
-
A mesma para todas os contextos?
- Sistema Operacional
- Sistema em tempo real
- Locadora de DVD
CASE tool
- Computer-Aided Software Engineering (Engenharia de software assistida por computador)
- Compilar, Depurar...
Validação e Verificação
- É a 3ª fase do projeto
-
Testes
- Como fazer?
- Que tipo de teste fazer?
- Unidade
- Integração
- Validação, ...
-
Métodos formais
- Prova de Teoremas
- Verificação de Modelos
Evolução
- É a 4ª fase do projeto
-
Responsável por incluir novos requisitos (Evolução Aditiva)
- Novos dispositivos móveis
- Corrigir erros (Evolução Defectiva)
-
Preparar o programa para mudanças (Evolução Perfectiva)
- Refatoramentos
- Fase mais custosa do ciclo de vida de software