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: DHIOGO 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


Aquisição, análise, especificação e gestão de requisitos 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

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

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

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

Gerencia projetos de desenvolvimento de software

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

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

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