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 disquete, CD ou DVD, dispositivos USB, etc.).
- Software: Produto que profissonais de software desenvolvem, para o qual dão suporte no longo prazo. Abrange programas executáveis em um computador de qualquer porte ou arquitetura, conteúdos (apresentados à medida que os programas são executados), informações descritivas tanto na forma impressa (hard copy) ou na forma virtual, abrangendo praticamente qualquer mídia eletrônica.
- Firmware: Conjunto de instruções operacionais que são programadas diretamente no hardware de equipamentos eletrônicos.
Categorias
- Software de Sistema:
- Desenvolvidos para atender a outros programas
- Compiladores, IDEs, utilitários, drivers, bibliotecas, componentes de SO
- Desenvolvidos para atender a outros programas
- Software de Aplicação:
- Programas independentes que solucionam uma necessidade específica de negócios
- Financeiro, planilha, contabilidade, Folha de pagamento, etc
- Programas independentes 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
- 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
- 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, ERP, 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
- 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
- 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
Principais Problemas
- Estimativas de prazo (meses, anos) e custo imprecisas
- Produtividade abaixo da praticada pelo mercado
- Software de baixa qualidade (erros e não conformidades com requisitos que tiram a confiança do cliente sobre o produto)
- 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.
- 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.
- A insatisfação do cliente com o sistema “concluído” ocorre muito freqüentemente.
- Os projetos de desenvolvimento de software normalmente são levados a efeito apenas com um vago indício das exigências do cliente.
- A comunicação entre o cliente e o desenvolvedor de software freqüentemente é muito fraca.
- 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.
- Só recentemente começamos a entender a importância dos testes de software sistemáticos e tecnicamente completos.
- 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.
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.
Evolução do Software
Um dos aspectos de todo software é que sempre haverá algo para melhorar ou modificar, isso se da pela evolução de alguns pontos, envelhecimento do software, uma nova demanda por parte do meio externo, observação de uma falha técnica, etc. E para fazer essa evolução de forma eficiente existem alguns pontos que precisam de atenção, como uma estruturação, documentação adequada e além disso uma revisão da estrutura em geral.
A título de curiosidade, existem as 8 leis de Lehman que são consideradas o manifesto do século XX, já que essas leis se aplicam a todo e qualquer software e que são essenciais ao falarmos de evolução de software. Resumidamente, são elas:
- I - Mudança contínua
- II - Complexidade crescente
- III - Auto-regulação
- IV - Conservação da estabilidade organizacional (taxa constante de trabalho)
- V - Conservação da Familiaridade
- VI - Crescimento contínuo
- VII - Qualidade decrescente
- VIII - Sistema de retorno
O vídeo do link a seguir mostra de forma didática a evolução do software enfatizando os de dados: https://www.youtube.com/watch?v=au-gE-Ohbhg
Raquel Silva Alves Bustamante - 19/03/2019
Crise do Software
O termo crise do software nasceu por volta dos anos 1970 e acontece quando há a insatisfação do usuário ao utilizar um software, isso pode ser decorrido na construção, manutenção ou na implementação.
A dificuldade surge justamente por ser tão subjetivo cada sistema, não existe um padrão de avaliações, assim, cada projeto é exclusivo. Para que este problema seja evitado é necessário que o projetista seja preciso em cada detalhe da formação do software, atentando-se inclusive menor dos requisitos.
É muito comum que clientes não fiquem satisfeitos com a primeira versão do software requisitado, já que em cada processo da construção há uma ideia diferente baseada nas mesmas funcionalidades. Uma das insatisfações têm a ver com a qualidade, por isso hoje faz-se necessário um teste de qualidade de forma sistemática.
Um software depende não somente de um hardware, mas também de uma interação com os humanos, para isso existe treinamento, adaptação e por vezes traz incomodo para os usuários do sistema.
Então, para ir contra os problemas que podem ser resgatados na implementação de um software, é preciso que haja uma trindade harmoniosa entre os projetistas, os desenvolvedores e o cliente final, através de discussões para evitar dificuldades inoportunas do futuro.
Raquel Silva Alves Bustamante - 19/03/2019
Material de apoio
- Original :))
- PRESSMAN, Roger S. MAXIM, Bruce R. Engenharia de Software. Uma abordagem profissional. 8a. edição. 2016.
- REZENDE, Denis A. Engenharia de Software e Sistemas de Informação. BrasofBrasport. 3a. edição. 2005.
- Cópias :((
- www.inf.pucrs.br/~michael/aulas/espe_gest_ti/IntroEngSW.pdf
- file:///home/lclaudio/Downloads/Engenharia%20de%20Software.pdf
- 177.8.219.7:8081/sites/professor/pastas/andrea/.../aula1.ppt
- www2.dbd.puc-rio.br/pergamum/tesesabertas/0210500_04_cap_03.pdf
Colaboração na Wiki
- Edição a vontade de complementações ao conteúdo da Aula 02
- Atenção para a formatação do texto
- Valendo pontos:
- Evolução do Software: Aluno selecionado
- Crise do Software: Aluno selecionado
Questões
- 01. Para qual das situações abaixo, podemos pressupor que temos um bom software? Por quê?
- 01. O Facebook teve seus dados invadidos, copiados e enviados para vários destinos.
- 02 Muito calor, os discos ficaram sobreaquecidos mas ainda assim o sistema continuou funcionando normalmente.
- 03 Software que faz a programação de velocidade da escada rolante acelerou subitamente.
- 04 Desenvolvedor mudou de empresa e quem assumiu não conseguiu entender a documentação para dar sequência ao trabalho.
- 05 Incêndio na matriz que mantém os servidores provocaram parada generalizada nos sistema de usuários no mundo todo.
- 06 Funcionário alterou seu salário e no final do mês recebeu além do que deveria.
- 07 Saldo ficou gravado de forma incorreta porque a energia apagou na hora da atualização.
- 08 Atendente foi registrar paciente mas sistema não funcionou porque link estava fora do ar.
- 09 Sistema que controle o enchimento das garrafas de refrigerante colocou quantidade de líquido abaixo do exigido.
- 02. Qual o meio-termo entre Software de Prateleira e Software-Taylor-made?
- 03. Qual a diferença entre software livre e software open-source?