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.
- Um sistema informatizado é formado por dois tipos de componentes:

- 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?
- 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.).

Categorias
- Software de Sistema:
- Desenvolvidos para atender a outros programas
- Compiladores, IDEs, utilitários, drivers, bibliotecas, componentes de SO
- GIT?
- Compiladores, IDEs, utilitários, drivers, bibliotecas, componentes de SO
- Desenvolvidos para atender a outros programas
- 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?
- Financeiro, planilha, contabilidade, Folha de pagamento, etc
- Programas que solucionam uma necessidade específica de negócios
- Software de engenharia/científico:
- Ampla variedade de programas de "cálculo em massa"
- Astronomia, biologia molecular, análise genética, meteorologia, etc
- Performance?
- Astronomia, biologia molecular, análise genética, meteorologia, etc
- Ampla variedade de programas de "cálculo em massa"
- 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?
- Painel de micro-ondas, computador de bordo de automóveis, firmware de equipamentos telecom, etc
- 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.
- 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?
- Controle de inventário, bancos, saúde, público, Tele-atendimento, etc
- Projetado para prover capacidade específica de utilização por muitos clientes diferentes
- 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??
- Apps, Aplicações em HTML, CSS, PHP, etc
- Categoria de software voltada às redes, navegadores e software residente em dispositivos móveis
- 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?
- Robótica, Sistemas especialistas, reconhecimento de padrões, Machine Learning, redes neurais, prova de teoremas e jogos
- 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
- 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.
