A profissão
- É uma profissão dedicada a projetar, implementar e modificar software de tal forma que seja de alta qualidade, manutenivel e rápido para construir
- Por meio de uma abordagem sistemática para analisar, desenhar, avaliar, implantar, testar, manter e refazer um software.
- Área do conhecimento da computação voltada para:
- especificação
- desenvolvimento
- manutenção
- de sistemas de software aplicando
- técnicas
- metodologias
- teorias
- tecnologias
- práticas de gerência de projetos
- outras disciplinas
- objetivando
- organização
- produtividade
- qualidade
- eficácia
- evolutibilidade.
- Atualmente, essas tecnologias e práticas englobam
- linguagens de programação
- banco de dados
- ferramentas
- plataformas
- bibliotecas
- padrões
- processos
- Qualidade de Software.
- Os fundamentos científicos para a engenharia de software envolvem o uso de modelos abstratos e precisos que permitem ao engenheiro
- especificar
- projetar
- implementar
- manter
- expandir
- sistemas de software, avaliando e garantindo suas qualidades.
- Além disso, a engenharia de software deve oferecer mecanismos para se planejar e gerenciar o processo de desenvolvimento de um Sistema de informação e de um Sistema computacional, pois ambos se confundem!
ES no mundo
- Reino Unido: Chartered Engineers
- Canadá: Profissional Engineers
- EUA: Computer Engineer
- Portugal: Software Engineer
- 2006: Considerada a melhor área de trabalho nos EUA
- 2010: A vez do Brasil
Conceito de Engenharia de Software
- Surgiu a 40 anos atrás em função da Crise do Software
- A experiência mostrou que o desenvolvimento informal de software não era suficiente
A Crise do Software
- Consequências:
- Projetos importantes com anos de atraso
- Os custos superavam as previsões
- Desempenho insatisfatório
- Não era confiável
- Difícil de manter
- Os custos de hardware caíam e os custos de software aumentavam.
Estudo de Caso I
- Ariane V
Sua capacidade era de 6 toneladas e garantiria a supremacia européia no espaço.
- Lançamento em 4 de junho de 1996
- Explosão 40 segundos após a decolagem
- Destruição do foguete e carga avaliada em US$ 500 milhões
- Situação: Foguete perdeu o controle de direção
- Causa: Shut-down simultâneo nos computadores principal e back-up
- Motivo: Run time error (out of range, overflow)
- Software: Era considerado “perfeito”
- Origem: Programa que convertia um valor em ponto flutuante para um inteiro de 16 bits recebeu como entrada um valor fora da faixa permitida.
Estudo de Caso II
Problema do ano 2000 (Wikipedia)
Bug do milênio (ou milénio ) ou Bug Y2K
Foi o termo usado para se referir ao problema previsto ocorrer em todos os
sistemas informatizados na passagem do ano de 1999 para 2000.
Bug é um jargão internacional usado por profissionais e conhecedores de programação, que significa um erro de lógica na programação de um determinado software.
Estudo de Caso III
31/01/2009 Falha no Google classifica todos os sites como malware
- A falha: Por alguns minutos, todos os resultados de buscas foram classificados pelo Google como inseguros.
- O fato repercutiu rapidamente movimentando fóruns, blogs e até o Twitter.
- Situação: Enquanto durou o bug, todos os resultados foram marcados com "este site pode danificar seu computador" (malware).
- No Twitter: Alguns usuários disseram que a pane também afetou o Gmail, enviando e-mails "bons" para a caixa de spam.
Estudo de Caso IV
04 de fevereiro de 2010: Toyota: Software é responsável por problemas de freio Prius
- Não é novidade os problemas enfrentados pela Toyota, que obrigaram a montadora japonesa a realizar inúmeros recalls de seus veículos. Um dos modelos afetados nos Estados Unidos foi o Prius 2010.
- Com defeitos no acelerador e nos freios, os proprietários foram convocados a levar seus veículos até a concessionária para corrigí-los.
- Uma vez lá, tudo o que os mecânicos precisavam fazer era conectar o carro a um computador e fazer o download da nova versão do software responsável por controlar o sistema de freios
- Ou seja, no futuro, além de problemas mecânicos os motoristas terão que lidar com falhas e bugs nos sistemas automotivos.
Estudo de Caso V
HTTP 404
O erro 404 ou "Not Found" é um código de resposta http que indica que o cliente pôde comunicar com o servidor mas ou o servidor não pôde encontrar o que foi pedido, ou foi configurado para não cumprir o pedido e não revelar a razão.
Estudo de Caso VI
- 2038
- O grave problema é uma falha na representação de datas em computadores, que pode causar erros em alguns programas de computador no ano de 2038.
O problema afeta os programas que utilizam a representação de tempo POSIX, em que a data é calculada através do número de segundos (ignorando os segundos bissextos) desde 1 de janeiro de 1970
Esta representação é padrão nos sistemas operacionais do tipo Unix e afeta a maioria dos sistemas, pois grande parte deste software foi desenvolvido na linguagem C. Na maioria dos sistemas de 32 bits, o tipo de dados time t, utilizado para armazenar esta contagem de segundos, é um inteiro de 32 bits do tipo signed (considera o sinal)
O último registro de tempo que pode ser representado por este formato, seguindo o padrão POSIX, é 03:14:07 na terça-feira 19 de janeiro de 2038 (UTC). Após este momento a data será representada por um número decimal negativo que, dependendo da implementação, corresponderá ao ano 1970 ou 1901
Este valor para a data corrente certamente resultará em erros de cálculo e de funcionamento na maior parte dos programas em execução pelo sistema.
Análise do Sotware
No início:
- Programação era uma forma de arte
- Poucos métodos formais eram aplicados
- Esquema baseado em tentativa e erro
- Mundo indisciplinado
Atualmente:
- Software é o item de maior custo
- Está presente em 99% dos negócios
- Existe uma demora na conclusão:
- Porque se usam métodos e ferramentas?
- Por que surgem tantos erros?
- Por que é difícil medir os erros?
- Alto volume de manutenção nas aplicações
- Modismo inconsciente.
FAQ (Frequently Asked Questions)
O que é software?
- Instruções que quando executadas, produzem a função e o desempenho desejados
- Estruturas de dados que permitem a manipulação das informações
- Documentos que descrevem a operação e o uso dos programas
- Existem basicamente duas classificações:
- Produtos genéricos
- Produtos sob encomenda
Qual a diferença entre Engenharia de Software e Engenharia da Computação?
- Engenharia de Computação: Relação com teorias e fundamentos
- Engenharia de Software: Relação com a prática de desenvolvimento e entrega de software útil e de qualidade.
- Ideal: Engenheiro se basear na teoria da Ciência da Computação
- Métodos ad hoc são necessários.
O que é processo de software?
Conjunto de atividades cujo objetivo é o desenvolvimento ou evolução de software
1. Especificação
2. Desenvolvimento
3. Validação
4. Evolução
Como é a distribuição dos custos na criação de um software?
- 60% => Desenvolvimento
- 40% => Testes e aceitação
Depende de algumas variáveis:
- Porte do sistema
- Integração
- Tempo de vida
- Reutilização
Quais são as principais categorias de software?
- Software básico => Linguagens baixo nível
- Software tempo real => Resposta imediata
- Software comercial => Aplicações especificas
- Software científico => Envolvem complexidade
- Software embutido => Embarcado em dispositivos
- Software para PC => Aplicações comuns
- Software de IA => Programas que aprendem
- Software para web => Internet
O que é CASE?
Acrônimo de Computer-Aided Software Engineering
Sistemas de software que fornecem apoio automatizado para atividades de processo de software.
- Controle de Versão
- Gerência de Projetos
- Edição
- Planejamento
- Prototipagem
- Teste
- Documentação
- Análise de Programa
- Métricas
- Programação
- Reengenharia
- Depuração
- ?
Quais são os atributos de um bom software?
- Facilidade de manutenção: Deve permitir evolução simplificada
- Confiança: Confiabilidade, proteção e segurança
- Eficiência: Não deve desperdiçar recursos do sistema
- Usabilidade: Deve apresentar uma interface amigável com o usuário e documentação adequada
Quais os desafios-chave de ESOF?
- Heterogeneidade: Flexibilidade, adaptação
- Entrega: Menor tempo de desenvolvimento mantendo a qualidade
- Confiança: Técnicas que mantenham a fidelidade do usuário.