GGI033 - Aula 02 - 2020-AARE

Revisão de 10h31min de 26 de outubro de 2020 por Lclaudio (discussão | contribs) (Componentes do Software)
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)

Componentes do Software


  • Componentes do Software
    • Um sistema informatizado é formado por dois tipos de componentes:
      • Executáveis em máquina e
      • Não executáveis em máquina
    • Os componentes do software devem mapear as exigências do cliente em código executável.


  • Conceitos:
    • Hardware: Estrutura computacional composta por circuitos eletrônicos (processador, memória, portas de entrada/saída, etc.) e periféricos eletro-óptico-mecânicos (teclados, mouses, discos rígidos, unidades de entrada e saída como USB, HDMI, etc.).
      • Questão: É importante que o GI tenha conhecimentos sobre capacidade, processamento e escalabilidade de hardware?
    • Software: Produto que profissonais de software desenvolvem, para o qual dão suporte no longo prazo. Abrange programas executáveis em um computador físico ou virtual, conteúdos (apresentados à medida que os programas são executados) com informações descritivas abrangendo praticamente qualquer mídia eletrônica.
      • Questão: O GI deve conhecer os aspectos de PaaS, SaaS, NaaS, etc?
    • Firmware: Conjunto de instruções operacionais que são programadas diretamente no hardware de equipamentos eletrônicos.
      • Questão: Noções de firmware são fundamentais para o GI?


Categorias


  • Software de Sistema:
    • Desenvolvidos para atender a outros programas
      • Compiladores, IDEs, utilitários, drivers, bibliotecas, componentes de SO
        • GIT?


  • Software de Aplicação:
    • Programas que solucionam uma necessidade específica de negócios
      • Financeiro, planilha, contabilidade, Folha de pagamento, etc
        • Evolução para ERP?


  • Software de engenharia/científico:
    • Ampla variedade de programas de "cálculo em massa"
      • Astronomia, biologia molecular, análise genética, meteorologia, etc
        • Performance?


  • Software embarcado:
    • Residente num sistema ou produto e utilizado para implementar e controlar características ou funções para o usuário e para o próprio sistema.
      • Painel de micro-ondas, computador de bordo de automóveis, firmware de equipamentos telecom, etc
        • IoT?


  • Software para linha de produtos:
    • Projetado para prover capacidade específica de utilização por muitos clientes diferentes
      • Controle de inventário, bancos, saúde, público, Tele-atendimento, etc
        • Acesso simultâneo?


  • Aplicações Web/Mobile:
    • Categoria de software voltada às redes, navegadores e software residente em dispositivos móveis
      • Apps, Aplicações em HTML, CSS, PHP, etc
        • Nativo, responsivo??


  • Software de Inteligência Artificial:
    • Faz uso de algoritmos não-numéricos para solucionar problemas complexos que não são passíveis de computação ou de análise direta
      • Robótica, Sistemas especialistas, reconhecimento de padrões, Machine Learning, redes neurais, prova de teoremas e jogos
        • Complexo?
  • Software ...


Principais Problemas


  • Estimativas de prazo (meses, anos) e custo imprecisas
    • BP?
  • Produtividade abaixo da praticada pelo mercado
    • BP?
  • Software de baixa qualidade (erros e não conformidades com requisitos que tiram a confiança do cliente sobre o produto)
    • Satisfação do usuário?
  • Não se dedica tempo para coletar dados sobre o software e seu processo de desenvolvimento. Com poucos dados históricos como guia, as estimativas têm sido “a olho”, com resultados previsivelmente ruins.
    • Figura
  • Sem nenhum indicador sólido de produtividade, não poderemos avaliar com precisão a eficácia de novas ferramentas, métodos, padrões ou processos.
    • Inovação?
  • A insatisfação do cliente com o sistema “concluído” ocorre muito freqüentemente.
    • Perda do cliente, seja interno ou externo
  • Os projetos de desenvolvimento de software normalmente são levados a efeito apenas com um vago indício das exigências do cliente.
    • Constrangimento na entrega
  • A comunicação entre o cliente e o desenvolvedor de software freqüentemente é muito fraca.
    • Metodologia?
  • A qualidade do software freqüentemente é suspeita. Somente agora estão começando a ser seguidos conceitos quantitativos sólidos de confiabilidade e de garantia de qualidade de software.
    • Clientes cada vez mais exigentes
  • Só recentemente começamos a entender a importância dos testes de software sistemáticos e tecnicamente completos.
    • Gestor de Qualidade?
  • O software existente pode ser muito difícil de manter. A tarefa de manutenção de software devora a maioria de todos os recursos financeiros destinados a ele. A capacidade de manutenção de software não foi enfatizada como um critério importante para a aceitação do software.
    • Altos custos pós-entrega


Causas

  • Gerentes sem vivência em:
    • Projetos e seus marcos de evolução
    • Métodos efetivos de controle
    • Tecnologias que se modificam rapidamente
    • Os programadores ou engenheiros de software têm pouca instrução formal, holística e estudam pouco as técnicas de desenvolvimento e as áreas de negócio.
    • Cada pessoa aborda a tarefa de “escrever programas” com a experiência advinda de esforços passados. Algumas pessoas desenvolvem uma abordagem ordeira e eficiente, mesmo por tentativa e erro, mas muitas criam maus hábitos, que resultam em qualidade e manutenibilidade deficientes.
    • Resistência às inevitáveis mudanças
    • É irônico que enquanto o hardware experimenta enormes mudanças, as pessoas da área de software responsáveis pelo aproveitamento desse potencial, muitas vezes se oponham à mudança quando ela é discutida e resistam a ela quando ela é introduzida.


Crise do Software


  • O que é crise de software?
    • O termo “Crise de Software” é usado desde os primórdios da ciência da computação pela dificuldade de escrever programas de computador eficientes no tempo hábil. A criação dos programas veio evoluindo ao longo do tempo e teve momentos críticos ao longo da história e hoje ainda encontramos alguns problemas sérios nessa área.


  • Causas da Crise do Software
    • Projeto que ultrapassa o valor do orçamento
    • Projeto em execução acima do prazo estipulado
    • O software prova ser ineficiente
    • O software geralmente não atende ao requisitos
    • Manutenção do código difícil
    • O software nunca entregue


  • Nas últimas décadas, os custos de hardware tem caído exponencialmente, enquanto o custo do desenvolvimento de software aumentava na mesma velocidade.
  • Casos graves e publicamente conhecidos que já ocorreram relacionados à crise do software:
    • 01) O apagão (blackout) de 2003 foi uma queda de energia generalizada que ocorreu em partes do Nordeste e Meio-Oeste dos Estados Unidos e em Ontário, Canadá ocorrido em 14 de agosto de 2003. Totalizando 55 milhões de pessoas que foram afetadas pelo apagão sendo 10 milhões no Canadá e 45 milhões nos Estados Unidos.
    • Foi determinado que a principal razão por trás da falha era um bug no sistema de monitoramento e gerenciamento de energia. Prejuízo estimado: $7 - $10 bilhões de dólares
    • 02) Bug do Milênio - O ano 2000 (Y2K) refere-se às dificuldades no processamento das datas após o ano 2000. As raízes do problema Y2K começam em 1960 quando os desenvolvedores encurtaram o formato de data de 4 dígitos como 1972 para um formato de 2 dígitos como 72 por causa da memória limitada. Naquela época, eles não perceberam que o ano 2000 será encurtado para 00, o que é menos de 72. Na década de 1990, os especialistas começaram a perceber essa grande deficiência na aplicação do computador e aproximadamente 200 bilhões de dólares foram gastos para lidar com esse problema.
    • 3) Em 1996, o foguete espacial desenvolvido pela Airbus chamado de Ariane 501, desenvolvido ao custo de US$ 7 Bilhões ao longo do período de 10 anos, foi destruído em menos de um minuto após seu lançamento. O acidente ocorreu porque havia um bug no sistema de orientação de foguetes.


  • Aí fica a pergunta: Depois dos casos citados acima e outros tantos que aconteceram, ainda existe a crise do software?
    • Há 25 anos, o Standish Group estuda projetos de TI. Ao longo desse tempo, a pesquisa CHAOS já estudou mais de 70 mil projetos de TI realizados.
    • É uma organização internacional de consultoria de pesquisa com foco no desempenho de projetos de software. Eles lançam relatórios anuais que analisam o estado da indústria de desenvolvimento de software. Eles estudam todos os tipos diferentes de projetos de software de todo o mundo e analisam uma ampla gama de informações sobre cada projeto (CHAOS).
    • Uma das coisas que eles olham é a taxa de sucesso dos projetos. Eles classificam os projetos em três categorias: bem-sucedidos, desafiados e fracassados. Desafiados significa que o projeto foi entregue, mas houve problemas significativos devido ao custo, cronograma ou por algum outro motivo. Em 2004, 29% dos projetos foram bem sucedidos, 53% foram desafiados e 18% falharam. Em 2015, os resultados foram essencialmente os mesmos, com 29% tendo sido bem sucedidos, 52% considerados desafiados e 19% tendo falhado (Hastie).
    • O fato é os mesmos problemas existiram desde a década de 1960 e a taxa de sucesso do software não teve quase nenhuma melhora ao longo dos anos, tornando a crise do software existindo principalmente depois do surgimento da Internet até os dias atuais, pois a falta do avanço significativo no desenvolvimento do software impede um alinhamento o que torna a crise do software tão evidente são a demanda das empresas por dados gerados por pessoas com dispositivos móveis, sensores, aplicativos e os ataques cibernéticos.