Objetivo da aula


  • Entender o conceito de Engenharia de Software focando nas seguintes questões:
    • Pode-se resolver qualquer problema (grande e/ou complexo) começando pela análise e projeto
    • Uma forma fácil de verificar a viabilidade é implementando o protótipo
    • Para se construir um software dependemos inicialmente dos requisitos
    • Se um problema for grande, basta efetuar uma decomposição


Introdução


Porque Engenharia de Software?

  • Ricardo de Almeida Falbo - UFES


  • Criar software é, muitas vezes, confundido com programação. Essa confusão se dá principalmente pela iniciação: começa com o desenvolvimento de habilidades de raciocínio lógico, através de MTP, por exemṕlo, e estruturas de dados
  • Nada há de errado nessa estratégia. A idéia é essa mesmo, resolver pequenos problemas que gradativamente vão aumentando de complexidade, exigindo maiores conhecimentos e habilidades


  • Com a experiência, normalmente chega-se a um ponto onde, dado o tamanho ou a complexidade do problema, essa abordagem individual, centrada na programação não é mais indicada
  • Só é aplicável para resolver pequenos problemas, tais como calcular médias, ordenar conjuntos de dados etc, envolvendo basicamente o projeto de um único algoritmo


  • Contudo, é insuficiente para problemas grandes e complexos, tais como:
    • Automação bancária
    • Informatização de indústrias
    • Gestão hospitalar
    • Sistemas empresariais, etc.
    • Sistemas financeiro
    • Universidades
    • Bolsa de Valores
    • Jurídico
    • Comércio Eletrônico
    • Pregão Eletrônico
    • ??
  • Em tais situações, uma abordagem de engenharia é necessária.


  • Observando outras áreas, tal como a Engenharia Civil, podemos verificar que situações análogas ocorrem


  • Exemplo: É possível construir essa casinha sem projeto?


  • Para se construir essa pequena casinha, de madeira, no meio do mato, talvez seja factível sem elaborar um projeto de engenharia civil com plantas baixa, hidráulica e elétrica ou mesmo cálculos estruturais.
    • Um bom pedreiro ou um cara muito esforçado será capaz de resolver o problema a contento
    • Talvez não seja dada a melhor solução, mas o produto resultante pode atender aos requisitos pré-estabelecidos.



  • Essa abordagem, contudo, não é viável para a construção de uma casa maior, de um edifício, de um galpão ou outra construção mais relevante.
  • Nesse caso, é necessário realizar um estudo aprofundado, incluindo:
    • Análises de solo
    • Cálculos estruturais
    • Análise de sustentabilidade
    • Novas tecnologias, etc
  • seguido de um planejamento da execução da obra e desenvolvimento de modelos (maquetes e plantas de diversas naturezas), até a realização da obra, que deve ocorrer por etapas, tais como:
    • fundação
    • alvenaria
    • fiação
    • hidráulica
    • acabamento, etc.
  • Ao longo da realização do trabalho, deve-se realizar um acompanhamento para verificar:
    • prazos
    • custos
    • qualidade.
    • legalidade
    • aquisições
    • riscos
    • sustentabilidade


Software é a mesma coisa, exige requisitos detalhados, projeto apurado, acompanhamento contínuo 
e a percepção de que será usado por muito tempo e por muita gente de forma automática.


  • Visando melhorar a qualidade dos produtos de software e aumentar a produtividade no processo de desenvolvimento, surgiu a Engenharia de Software
  • Trata de aspectos relacionados ao estabelecimento de:
    • processos
    • métodos
    • técnicas
    • ferramentas
    • possibilidade de melhorias
    • ambientes de suporte ao desenvolvimento de software.



  • Divide et Impera
    • Assim como em outras áreas, em uma abordagem de engenharia de software, inicialmente o problema a ser tratado deve ser analisado e decomposto em partes menores
      • “Dividir para conquistar”


  • Para cada uma dessas partes, uma solução deve ser elaborada. Solucionados os sub-problemas isoladamente, é necessário integrar as soluções
  • Para tal, uma arquitetura deve ser estabelecida


O impacto do software


  • Mas, será que softwares atingem todas as áreas da tecnologia?



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
    • Saúde: Monitores cardíacos, Medidores de pressão arterial, tomografia, etc
    • Pessoal: processador de texto, planilha, jogos, apresentações, etc
    • Inteligência artificial: sistemas especialistas, redes neurais, robótica e elearning
    • Games: Educacional, Games Sociais, Comercial, Aventura, Estratégia, LOL, Tabuleiro Eletrônico, MMO, Simulação, Esportes, Cartas,



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


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


  • Causas:
    • Projetos importantes com anos de atraso
    • Os custos superavam as previsões
    • Desempenho insatisfatório
    • Não era confiável
    • Difícil de manter



  • caption
    caption



  • Os custos de hardware caíam e os custos de software aumentavam.


Questões



  • Rodrigo Cordon Isaac:

01. Sempre que temos um problema para automatizar é interessante que já comecemos codificando o sistema? 02. Qual a melhor maneira de começar a encarar um problema grande e complexo? 03. No site foi dado um exemplo de passos para um estudo aprofundado de uma casa. E para um software, quais seria estes? 04. Exemplifique uma área utilizada no mundo atual onde não é interessante ou não é necessária a utilização de um software, direta ou indiretamente?


  • Gabriel Marçal de Carvalho:

05. Dê alguns exemplos de componentes não executáveis em máquinas. 06. Cite alguma sugestão de software ou alguma situação real que mostre que não existe limitação física para o software. 07. O que foi a Crise do Software? 08. Atualmente os custos de software continuam aumentando e os de software caindo?