Introdução
Porque Engenharia de Software?
- Porque software e sistemas de computação, hoje e no futuro, afetam profundamente o desenvolvimento econômico das nações e a Engenharia é o carro chefe da evolução tecnológica
- Consequência: os engenheiros em geral serão um dos principais responsáveis pelas inovações.
- O que é Engenharia?
- Aplicação, da Ciência e Matemática, através da qual as propriedades da matéria e as fontes de energia são tornadas úteis às pessoas (Dic.Merriam-Webster, 2001)
- Projeto e Manufatura de Sistemas Complexos
- Desenvolvimento e Aplicação Sistemática de Modelos de Comprovada Eficácia gerando Soluções Tecnológicas para Problemas da Humanidade, ou seja, aplicações (software) que alterarão o padrão de uso dos serviços em geral
O impacto do software
- Mas, será que softwares atingem todas as áreas da tecnologia?
- Tentando responder com outra pergunta: Quais hardwares/equipamentos/sistemas abaixo possuem software embutido ou são controlados por um programa?
- Microondas: GUSTAVO FERREIRA CARDOSO
- Geladeira: NATHALIE CAMILA DE LIMA
- Transformador:LEONARDO HENRIQUE PEREIRA
- No-break: WILLIAN CHAGAS BORGES
- Linha de transmissão:ROSICLEIDE ASSUNÇÃO DE SOUSA
- Switches:GABRIEL FERREIRA AGUIAR
- Carro: DHIOGO BERGER
- Máquinas de lavar:GILMAR PEREIRA FREITAS
- Computador: LEONARDO LEITE LEITE
- Ecocardiógrafo:MICHELLY DA SILVA LIMA
- HD Externo:
- Joystick: MAURICIO GARCIA ARANTES
- Equipamento de ultraressonância: RODRIGO DE ALMEIDA
- Torre de transmissão celular: ENIO COSTA
- Roteador:ANDRÉ LUIZ DE OLIVEIRA JÚNIOR
- Turbina de usina:GUILHERME BATISTA ROLDÃO
- Aerogerador: LUCAS ANTONIO CAMPOS VIEIRA
- Webcam: NATÁLIA MORAIS CORRÊA
- Mp3 player: TAYRO SEBASTIAO DE SOUZA COSTA
- Câmera digital: ARTHUR GOMIDE LUZ
- Braço mecânico:FABRICIO CARVALHO PACHECO
- Painel solar: GUSTAVO MACIEL LEMOS
- Impressora: LUCAS FERNANDES PEREIRA
- Robô:OTHÁVIO MENDES VALA
- Porteiro Eletrônico:THIAGO CORREIA DA SILVA
- Cadeira de rodas:AUGUSTO CÉSAR ALVES DE OLIVEIRA
- Rede de energia elétrica residencial: FERNANDO HENRIQUE OLIVEIRA ZANZOTI
- Ponto de acesso WiFi:HIGOR ALEXANDRE DE CASTRO
- Exemplo: Fotocopiadora
- Exemplo: Catraca
- Uma questão séria discutida atualmente?
- http://www.youtube.com/watch?v=4iKu9qtCSXg ou
- Youtube => Todo mundo deveria aprender a programar (What most schools don't teach) 01/04/2013
- Gravar bem o que foi dito no tempo de 4:21 min.
Componentes e Tipos de Software
- Um sistema informatizado é formado por dois tipos de componentes:
- Executáveis em máquinas
- Não executáveis em máquinas
- Os componentes do software devem mapear as exigências do cliente em código executável.
- Tipos de software:
- Básico: APIs, sockets, drivers, DLLs, componentes de SO, ...
- Tempo real: monitora, analisa e controla eventos em tempo real
- Comercial: controle de estoque, vendas, etc. Normalmente manipulam algum mecanismo de persistência.
- Científico: intenso processamento de números e cálculos
- Embutido (Embedded): celulares, relógios, microondas, injeção eletrônica
- Pessoal: processador de texto, planilha, jogos, apresentações, etc
- Inteligência artificial: sistemas especialistas, redes neurais, robótica e elearning.
Questões do cotidiano
- Existem atividades/negócios sem aplicações computacionais?
- O software já chegou no máximo do estado da arte?
- Serão necessárias novas aplicações para novos problemas?
- O profissional de tecnologia tem dependência do software?
- Que momento vive o mundo em termos de tecnologia?
Fato
- Praticamente, todos os países dependem de sistemas simples e complexos baseados em computadores.
- Imagine uma situação onde os negócios não sejam suportados por programas
- A dependência se acentua à medida que a nação é mais desenvolvida.
- É verdade que quanto mais complexa a atividade, maior o grau de automatização?
- Países emergentes anseiam por tornar-se dependentes de tecnologia
- Abeer: Brasil exporta silício bruto a aproximadamente US$ 60 por tonelada e importa, em média, a US$ 600 mil por tonelada em forma de processadores
Onipresença
- Infra-estrutura e serviços nacionais contam com sistemas baseados em computadores.
- Financeiro
- Universidades
- Bolsa de Valores
- Jurídico
- Comércio Eletrônico
- Pregão Eletrônico
- ??
A Engenharia de Software
- Ramo da engenharia cujo foco é o desenvolvimento de sistemas de software dentro de custos adequados de alta qualidade.
- Não existem limitações físicas no potencial do software
- Pode-se tornar extremamente complexo
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.
Motivação
- Em virtude da importância e participação do software no mundo moderno, é condição essencial que seja fidedigno
- Software fidedigno: quando se pode justificavelmente depender dele
- Um bom software possui:
- Disponibilidade: estar pronto para prestar serviço correto sempre que se necessite do software
- Confiabilidade: habilidade de prestar continuamente serviço correto
- Segurança: habilidade de evitar consequencias catastróficas relativas aos usuários e ao ambiente
- Proteção: habilidade de evitar tentativas de agressão bem sucedidas
- Privacidade: habilidade de proteger dados e código contra acesso indevido
- Integridade: ausência de alterações não permitidas (corrupção de elementos)
- Robustez: habilidade de detectar falhas de modo que os danos (as consequencias de erros ou falhas) possam ser mantidas em um patamar aceitável
- Recuperabilidade: habilidade em ser rapidamente reposto em operação fidedigna após a ocorrência de uma falha
- Manutenibilidade: habilidade de ser modificado (evoluído) ou corrigido sem que novos problemas sejam inseridos
- Depurabilidade: habilidade de apoio à diagnose e à eliminação de possíveis falhas a partir de relatos gerados.
A realidade
- Equipamentos sem software
- Muito primários?
- Equipamentos e dispositivos com software embutido (embedded)
- Apenas de médio e grande porte?
- Soluções de prateleira (commodities)
- Atendem a todas as necessidades?
- Soluções desenvolvidas (taylor-made)
- É o melhor dos mundos?
- Soluções por desenvolver
- Já não existem aplicações para todas as necessidades?
- Solução open-source?
- Que graça tem isto?
- Como foi discutido, a maioria dos produtos elétricos inclui um computador e um software de controle.
- MP3, ferro elétrico, relógio, geladeira, furadeira, controle remoto, etc
- Manufatura e distribuição 100% automatizadas
- Como organizar uma logistica e armazenamento sem um sistema?
- Sistema financeiro totalmente dependente
- Já experimentou poucos segundos de delay numa transação bancária?
- Área de saúde 100% integrada
- Dá pra confiar em todas as informações de uma diagnóstico?
10 Áreas da Engenharia de Software
- Conforme o SWEBOK. Jorge H. C. Fernandes. 2004
- 01. Requisitos de software - Bruno Porcinio Alves
Aquisição, análise, especificação e gestão de requisitos de software
- 02. Design de software - Frederico Fontoura Zanuto
Transformação de requisitos (de software), tipicamente estabelecidos em termos relevantes ao domínio do problema, em uma descrição explicando como solucionar os aspectos do problema relacionados com software
- 03. Construção de Software - João Assunção de Azevedo Neto
Construção de programas funcionais e coerentes através da codificação, auto-validação, e teste unitário
- 04. Teste de Software - Marcus Evandro Teixeira Souza Junior
Verificação dinâmica do comportamento do programa através do uso de um conjunto finito de casos de teste - adequadamente selecionados de um domínio de execuções usualmente infinito - contra o comportamento esperado deste
- 05. Manutenção de Software - Rafael Rosa da Silva
Atividades de suporte custo-efetivo a um sistema de software, que pode ocorrer antes e após a entrega do software
Após a entrega do software são feitas modificações com o objetivo de corrigir falhas, melhorar seu desempenho ou adapta-lo a um ambiente modificado.
Identifica a configuração do sistema (características documentadas do hardware e software que o compõem) em pontos discretos no tempo
Controlam sistematicamente suas mudanças e manter sua integridade e rastreabilidade durante o ciclo de vida do sistema
- 07. Gerência de Engenharia de Software - Calebe de Paula Milward Azevedo
Gerencia projetos de desenvolvimento de software
- 08. Processo de Engenharia de Software - Gabriel de Avila Carranza
Define, implementa, mede, gerencia, modifica e aperfeiçoa o processo de desenvolvimento de software
- 09. Ferramentas e Métodos - João Paulo Rodrigues Martins
Ferramentas de software automatizam o processo de engenharia de software
Métodos impõem estrutura sobre a atividade de desenvolvimento e manutenção de software com o objetivo de torna-la sistemática e mais propensa ao sucesso
- 10. Qualidade de Software - Matheus Alves Tavares
Conjunto de atividades relacionadas com garantia de qualidade de software, entre estas as atividades de verificação e validação.