ESOF - Aula 02 - 2013/2

Revisão de 00h54min de 22 de outubro de 2013 por Lclaudio (discussão | contribs) (Criou página com '= Introdução = <br> == Porque Engenharia de Software? == <br> * Porque software e sistemas de computação, hoje e no futuro, afetam profundamente o desenvolvimento econô...')
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)

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?

br>

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