Zusammenfassung der Ressource
CAPÍTULO 1 A natureza do
software
- Software de computador é o produto que profissionais
de software desenvolvem e ao 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) quanto na virtual, abrangendo
praticamente qualquer mídia eletrônica.
- O que é?
- Os engenheiros de software criam e dão
suporte a ele, e praticamente todos que
têm contato com o mundo industrializado
o utilizam, direta ou indiretamente.
- Quem realiza?
- Porque afeta quase todos os aspectos de
nossa vida e se difundiu no comércio, na
cultura e em nossas atividades cotidianas.
- Por que é importante?
- Os clientes e outros envolvidos expressam a
necessidade pelo software de computador, os
engenheiros constroem o produto de software e os
usuários o utilizam para resolver um problema
específico ou para tratar de uma necessidade
específica.
- Quais são as etapas envolvidas?
- Um programa de computador que funciona em um ou
mais ambientes específicos e atende às necessidades
de um ou mais usuários.
- Qual é o artefato?
- Se você é engenheiro de software, aplique as ideias contidas no
restante deste livro. Se for usuário, conheça sua necessidade e
seu ambiente e escolha uma aplicação que seja a mais
adequada a ambos.
- Como garantir que o trabalho foi realizado corretamente?
- 1. A natureza do software
- O duplo papel do software:
como produto e como
veículo de distribuição de
produtos.
- Como produto, o software oferece capacidades
computacionais e transforma informações,
gerenciando, modificando e transmitindo dados em
diversos dispositivos.
- Como veículo de distribuição, ele suporta sistemas
operacionais, comunicação e criação de outros
programas.
- O software é essencial na era da informação, gerenciando dados pessoais e
comerciais, e conectando-se a redes mundiais como a Internet. No entanto, também
pode ameaçar a privacidade e ser um meio para crimes. A evolução tecnológica
trouxe maior sofisticação e complexidade aos sistemas computacionais, exigindo
equipes especializadas para desenvolver aplicações complexas, substituindo o
programador solitário.
- 1.1 Definição de software
- O software pode ser definido como um conjunto
de instruções, dados e documentação que
direcionam um computador ou dispositivo
eletrônico na execução de tarefas específicas.
Especificamente, o software consiste em:
- Instruções (programas de computador): Sequências
de comandos que, quando executadas, fornecem
características, funções e desempenho desejados.
- Estruturas de dados: Formatos e organizações que
permitem aos programas manipular informações de
forma adequada.
- Informação descritiva: Documentação impressa ou
digital que descreve a operação e o uso dos
programas.
- O software é um elemento lógico que não se desgasta como o
hardware. A "curva da banheira" mostra a taxa de defeitos do
hardware, que aumenta com o tempo devido ao desgaste físico. Já
o software, teoricamente, deveria ter uma "curva idealizada" de
defeitos, com altas taxas no início que se estabilizam após
correções. Porém, o software deteriora devido a modificações que
introduzem novos erros, criando uma "curva real" de defeitos que
não se estabiliza.
- 1.1.2 Campos de aplicação de software:
Atualmente, 7 grandes categorias de software
apresentam desafios contínuos para os
engenheiros de software:
- Software de sistema Conjunto de programas feito para atender a outros programas.
Certos softwares de sistema (por exemplo, compiladores. editores e utilitários para
gerenciamento de arquivos) processam estruturas de informação complexas, porém,
determinadas.' Outras aplicações de sistema (por exemplo, componentes de sistema
operacional, drivers, software de rede, processadores de telecomunicações) processam
dados amplamente indeterminados.
- 1. Software de Sistema
- Software de aplicação Programas independentes que solucionam uma necessidade
específica de negócio. Aplicações nessa área processam dados comerciais ou técnicos de
uma forma que facilite operações comerciais ou tomadas de decisão
administrativas/técnicas.
- 2. Software de Aplicação
- Software de engenharia/científico Uma ampla variedade de
programas de "cálculo em massa" que abrangem astronomia,
vulcanologia, análise de estresse automotivo, dinâmica orbital,
projeto auxiliado por computador, biologia molecular, análise
genética e meteorologia, entre outros.
- 3. Software de Engenharia/Científico
- Software embarcado Residente num produto ou sistema e utilizado para implementar e controlar
características e funções para o usuário e para o próprio sistema. Executa funções limitadas e específicas
(por exemplo, controle do painel de um forno micro-ondas) ou fornece função significativa e capacidade
de controle (por exemplo, funções digitais de automóveis, tal como controle do nível de combustível,
painéis de controle e sistemas de freio).
- 4. Software Embutido
- Software para linha de produtos Projetado para prover capacidade específica de utilização
por muitos clientes diferentes. Software para linha de produtos pode se concentrar em um
mercado hermético e limitado (por exemplo, produtos de controle de inventário) ou lidar
com consumidor de massa.
- 5. Software de Linha de Produto
- Aplicações Web/aplicativos móveis Esta categoria de software voltada às
redes abrange uma ampla variedade de aplicações, contemplando
aplicativos voltados para navegadores e software residente em
dispositivos móveis.
- 6. Software Web/Móvel
- 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. Aplicações nessa área
incluem: robótica, sistemas especialistas, reconhecimento de padrões (de imagem e de voz), redes
neurais artificiais, prova de teoremas e jogos.
- 7. Software de Inteligência Artificial
- 1.1.3 Software legado
- Apesar de essenciais para funções vitais de negócios, esses sistemas legados
podem ser caros de manter e arriscados de evoluir, frequentemente apresentando
baixa qualidade, projetos inextensíveis, código difícil de entender, documentação
deficiente ou inexistente, e um histórico de alterações mal gerenciado.
- A recomendação é não modificar esses sistemas a menos que seja necessário.
Quando mudanças significativas são requeridas, é essencial realizar a reengenharia
do sistema para mantê-lo viável. A engenharia de software moderna busca
metodologias que aceitem a contínua evolução dos sistemas, onde novos sistemas
são construídos a partir dos antigos, colaborando e cooperando entre si.
- 1.2 A natureza mutante do software
- A evolução de quatro categorias amplas de software domina o
setor. Ainda assim, há pouco mais de uma década essas
categorias estavam em sua infância.
- 1.2.1 WebApps
- No início da World Wide Web (1990-1995), os sites eram simples conjuntos de
arquivos de hipertexto com texto e gráficos limitados. Com a evolução da
linguagem HTML e o surgimento de ferramentas de desenvolvimento como
XML e Java, foi possível adicionar capacidades computacionais aos sites,
criando os WebApps.
- Atualmente, as WebApps são ferramentas sofisticadas, oferecendo funções
especializadas e integradas a bancos de dados corporativos e aplicações de
negócios. Anteriormente, eram uma mistura de publicação impressa e
desenvolvimento de software, marketing e computação, comunicação interna e
externa, e arte e tecnologia.
- Hoje, fornecem potencial de computação completo em diversas categorias de
aplicação. Com a evolução das tecnologias da Semantic Web (ou Web 3.0), surgiram
aplicações empresariais e de consumo mais avançadas, utilizando bancos de dados
semânticos e APIs de acesso externo, permitindo novas maneiras de acessar
informações diversas.
- 1.2.2 Aplicativos móveis
- O termo "aplicativo" passou a referir-se ao software projetado para plataformas móveis
como iOS, Android e Windows Mobile. Esses aplicativos móveis possuem interfaces que
aproveitam as interações específicas da plataforma, interoperam com recursos web para
acessar informações relevantes e utilizam capacidades de processamento local para coletar,
analisar e formatar dados de forma conveniente.
- Também oferecem armazenamento persistente na plataforma. Há uma diferença sutil entre
aplicações web móveis (WebApps) e aplicativos móveis: WebApps permitem acesso a conteúdo web
através de navegadores adaptados para dispositivos móveis, enquanto aplicativos móveis acessam
diretamente o hardware do dispositivo, como acelerômetro e GPS, e oferecem processamento e
armazenamento local.
- No futuro, essa diferença poderá desaparecer à medida que os navegadores móveis se
tornarem mais sofisticados e ganharem acesso ao hardware e informações dos
dispositivos.
- 1.2.3 Computação em nuvem
- A computação em nuvem oferece uma infraestrutura que permite a qualquer usuário, de qualquer
lugar, compartilhar grandes recursos computacionais usando um dispositivo de computação. Esses
dispositivos acessam a nuvem por meio de navegadores ou software similar, obtendo acesso a dados,
aplicativos e plataformas. A nuvem possibilita o uso de aplicativos executáveis que substituem as
aplicações locais dos dispositivos.
- A implementação da computação em nuvem requer uma arquitetura composta por serviços de front-end e back-end.
O front-end inclui o dispositivo cliente e o software aplicativo que permite acesso ao back-end, que abrange
servidores, sistemas de armazenamento de dados, aplicativos no servidor e servidores administrativos que
coordenam e monitoram o tráfego através de middleware, estabelecendo protocolos de acesso. A arquitetura da
nuvem pode ser pública, oferecendo acesso total, ou privada, restrita a usuários autorizados.
- 1.2.4 Software para linha de produtos (de software)
- O Software Engineering Institute define uma linha de produtos de software como um conjunto de sistemas que
compartilham recursos comuns, atendendo necessidades específicas de um mercado ou missão, desenvolvidos a
partir de itens básicos comuns. Embora a ideia de produtos de software relacionados não seja nova, a concepção de
uma linha de produtos de software desenvolvidos com a mesma aplicação subjacente, arquiteturas de dados e
componentes reutilizáveis oferece um grande potencial para a engenharia.
- Essas linhas de produtos compartilham requisitos, arquitetura, padrões de projeto, componentes
reutilizáveis, casos de teste e outros produtos de trabalho. Em essência, uma linha de produtos de
software permite o desenvolvimento de vários produtos aproveitando atributos comuns, resultando
em eficiência e consistência no processo de engenharia de software.