Introdução

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: compiladores, editores simples, drivers, 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, microondas, injeção eletrônica
    • Pessoal: processador de texto, planilha, jogos, apresentações, etc
    • Inteligência artificial: sistemas especialistas, redes neurais e elearning.


Questões do cotidiano

- É possível no mundo atual vivermos 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 se dá bem sem conhecer de 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. O software pode ser considerado fidedigno é quando se pode justificavelmente depender dele assumindo riscos de danos compatíveis com o serviço do software [Avizienis].


  • 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?



  • A maioria dos produtos elétricos inclui um computador e um software de controle.
    • MP3, ferro elétrico, relógio, geladeira, furadeira, controle remoto tem sw?


  • 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



  1. Requisitos de software:
    1. Aquisição, análise, especificação e gestão de requisitos de software
  2. Design de software:
    1. 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
  3. Construção de Software:
    1. Construção de programas funcionais e coerentes através da codificação, auto-validação, e teste unitário
  4. Teste de Software:
    1. 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
  5. Manutenção de Software:
    1. 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.
  6. Gerência de Configuração de Software:
    1. Identifica a configuração do sistema (características documentadas do hardware e software que o compõem) em pontos discretos no tempo, de modo a controlar sistematicamente suas mudanças e manter sua integridade e rastreabilidade durante o ciclo de vida do sistema
  7. Gerência de Engenharia de Software:
    1. Gerencia projetos de desenvolvimento de software
  8. Processo de Engenharia de Software:
    1. Define, implementa, mede, gerencia, modifica e aperfeiçoa o processo de desenvolvimento de software
  9. Ferramentas e Métodos:
    1. Ferramentas de software automatizam o processo de engenharia de software
    2. 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:
    1. Conjunto de atividades relacionadas com garantia de qualidade de software, entre estas as atividades de verificação e validação.