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?
  1. Microondas: GUSTAVO FERREIRA CARDOSO
  2. Geladeira: NATHALIE CAMILA DE LIMA
  3. Transformador:LEONARDO HENRIQUE PEREIRA
  4. No-break: WILLIAN CHAGAS BORGES
  5. Linha de transmissão:ROSICLEIDE ASSUNÇÃO DE SOUSA
  6. Switches:GABRIEL FERREIRA AGUIAR
  7. Carro: DIOGO BERGER
  8. Máquinas de lavar:GILMAR PEREIRA FREITAS
  9. Computador: LEONARDO LEITE LEITE
  10. Ecocardiógrafo:MICHELLY DA SILVA LIMA
  11. HD Externo:
  12. Joystick: MAURICIO GARCIA ARANTES
  13. Equipamento de ultraressonância: RODRIGO DE ALMEIDA
  14. Torre de transmissão celular: ENIO COSTA
  15. Roteador:ANDRÉ LUIZ DE OLIVEIRA JÚNIOR
  16. Turbina de usina:GUILHERME BATISTA ROLDÃO
  17. Aerogerador: LUCAS ANTONIO CAMPOS VIEIRA
  18. Webcam: NATÁLIA MORAIS CORRÊA
  19. Mp3 player: TAYRO SEBASTIAO DE SOUZA COSTA
  20. Câmera digital: ARTHUR GOMIDE LUZ
  21. Braço mecânico:FABRICIO CARVALHO PACHECO
  22. Painel solar: GUSTAVO MACIEL LEMOS
  23. Impressora: LUCAS FERNANDES PEREIRA
  24. Robô:OTHÁVIO MENDES VALA
  25. Porteiro Eletrônico:THIAGO CORREIA DA SILVA
  26. Cadeira de rodas:AUGUSTO CÉSAR ALVES DE OLIVEIRA
  27. Rede de energia elétrica residencial: FERNANDO HENRIQUE OLIVEIRA ZANZOTI
  28. Ponto de acesso WiFi:HIGOR ALEXANDRE DE CASTRO
  29. Exemplo: Fotocopiadora
  30. Exemplo: Catraca


  • Uma questão séria discutida atualmente?


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

  1. Existem atividades/negócios sem aplicações computacionais?
  2. O software já chegou no máximo do estado da arte?
  3. Serão necessárias novas aplicações para novos problemas?
  4. O profissional de tecnologia tem dependência do software?
  5. 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:

Aquisição, análise, especificação e gestão de requisitos de software

  • 02. Design de software:

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:

Construção de programas funcionais e coerentes através da codificação, auto-validação, e teste unitário

  • 04. Teste de Software:

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:

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.

  • 06. Gerência de Configuração de Software:

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:

Gerencia projetos de desenvolvimento de software

  • 08. Processo de Engenharia de Software:

Define, implementa, mede, gerencia, modifica e aperfeiçoa o processo de desenvolvimento de software

  • 09. Ferramentas e Métodos:

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:

Conjunto de atividades relacionadas com garantia de qualidade de software, entre estas as atividades de verificação e validação.