Nesta lição, você compreenderá o que é um software, quais são os papéis que ele desempenha, as suas principais características e, também, quais são os tipos de software mais conhecidos. Esta lição é importante, pois, depois, nos aprofundaremos no universo da Engenharia de Software, área responsável pela criação e desenvolvimento de sistemas. Vamos lá?
Ao usar o celular, o computador, a televisão ou qualquer outro tipo de equipamento, você está utilizando um software! O software é o produto gerado pela Engenharia de Software, uma área que aplica teorias, técnicas e ferramentas para o desenvolvimento de sistemas. Os produtos desenvolvidos nessa área apresentam características importantes que os diferenciam dos produtos gerados pelas outras Engenharias, como, por exemplo, Engenharia Civil, Engenharia Elétrica ou Engenharia Mecânica.
Enquanto essas outras Engenharias elaboram um projeto do produto que pretendem criar e usam esse projeto inúmeras vezes, os engenheiros de softwares não têm essa possibilidade. Sabe por quê? Um engenheiro civil, por exemplo, elabora um projeto para um prédio residencial, e este pode ser utilizado quantas vezes a construtora julgar necessário, construindo vários prédios no mesmo formato. Já o produto de software não pode ser replicado, pois atende às necessidades específicas de quem solicitou a sua elaboração.
Logo, um software desenvolvido para um celular não será o mesmo utilizado em uma geladeira. Da mesma forma, um software utilizado para um determinado aplicativo não será o mesmo para o outro. Por isso, é muito importante que você, como parte de uma equipe que está desenvolvendo um software, compreenda qual é a real necessidade do usuário desse produto e, a partir disso, colete todas as informações necessárias para que ele funcione conforme o planejado para aquela situação específica.
Imagine que, no colégio onde você estuda, propuseram um desafio para que os alunos desenvolvam um aplicativo que facilite o trabalho dos professores no processo de lançamento das notas de seus alunos. Como você se interessa por desenvolvimento de software, rapidamente monta uma equipe com seus amigos para participar desse desafio. Como aluno(a), você já tem conhecimento das informações iniciais que são necessárias, afinal você compreende que os dados que devem ser inseridos no aplicativo são as notas das provas e dos trabalhos, como também sabe que o aplicativo deve calcular a média dessas notas para, ao final, apresentar a nota final que o(a) aluno(a) obteve.
Será que você teria a mesma facilidade para explicar para o gestor do colégio como esse aplicativo funciona? Será que saberia identificar se existem outras informações que a equipe do colégio deve lhe apresentar para que o aplicativo possa ser executado de forma correta? Por exemplo, a equipe do colégio deve lhe dizer se a média final é calculada por média aritmética ou média ponderada sobre as notas das provas e dos trabalhos. O aplicativo deve ser um sistema web ou um app para dispositivo móvel? Os recursos tecnológicos para construir um sistema web são diferentes de construir um app.
Percebeu a importância de conhecer a realidade do seu cliente e as diferentes categorias de software para que, por exemplo, você possa caracterizar o produto de software que deve ser construído e, com isso, definir com mais facilidade o que deve ser realizado pela sua equipe de desenvolvimento?
A essa altura, você já compreendeu que o mundo moderno não existe sem o software. Cada vez mais, infraestruturas e serviços nacionais têm sido controlados por sistemas computacionais, em que a maioria dos produtos elétricos inclui um computador e um software que controla cada um desses produtos, como, por exemplo, na manufatura e distribuição industrial e no sistema financeiro (SOMMERVILLE, 2011; PRESSMAN, 2011).
Você já deve ter percebido que a indústria da música, dos jogos de computador, do cinema e da televisão utilizam diferentes tipos de software. Além disso, perceba que o software está presente em diversos dispositivos, tais como computadores, dispositivos móveis, televisores, entre outros. Portanto, podemos dizer que:
O software é um serviço computacional que tem o objetivo de automatizar ações por meio de sistemas de computadores.
Alguns blogs de tecnologias, como o Tecmundo, trazem a curiosidade de que o termo software surgiu como um trocadilho com a palavra "hardware" — trocou-se o prefixo hard (em português, rígido) por soft (em português, macio) —, de forma a indicar que software é tudo o que não está relacionado à parte física do dispositivo (GAIATO, 2021). Não sabemos se a origem do nome foi realmente essa, no entanto, relacionar os prefixos às funções que eles possuem pode facilitar a compreensão dos termos.
Bom, então, compreendamos, com mais detalhes, o que é um software? O primeiro aspecto importante a se aprender é que todo software tem dois papéis:
Ser produto: significa ser um transformador de informações, ou seja, produz, gerencia, adquire, modifica, exibe ou transmite informações que podem ser simples, como, por exemplo, uma sequência de caracteres, ou ser mais complexa, como, por exemplo, uma multimídia em que os dados têm fontes independentes.
Ser veículo para distribuir um produto: significa que o software pode
Atuar como base para controlar o computador, como, por exemplo, os sistemas operacionais Windows, macOS, Linux, entre outros.
Permitir a comunicação de informações por meio de redes de computadores ou sistemas distribuídos.
E permitir a criação e o controle de outros programas, tais como ambientes com ferramentas que apoiem o desenvolvimento de software.
A Figura 1 apresenta as camadas de software necessárias para qualquer sistema computacional e, na sequência, alguns exemplos para você compreender melhor os dois papéis do software.
Isso parece muito complicado para você? Calma, pois você já vai mudar de ideia!
Embora esses conceitos possam parecer muito difíceis de entender, por serem diferentes e remeterem a algo muito tecnológico, pare por um minuto e pense nos inúmeros softwares que já usou ao longo da sua vida: jogos, aplicativos, televisão, entre outros. Então, você é um usuário.
Agora, vamos adiante! Provavelmente, você já escreveu um trabalho no Word ou acessou a internet pelo Chrome, não é mesmo? Esses são os “programas de aplicação”, algo que pertence ao seu dia a dia. Os programas de aplicação têm o papel de ser um produto de software e, por isso, têm diversos propósitos, tais como ser um sistema bancário, um pacote Office com aplicativo Word — por exemplo, Excel, Powerpoint, entre outros — ou um browser (em português, navegador), como o Google Chrome, Safari, entre outros.
O hardware pode ser um computador com teclado, mouse, vídeo, disco e placa mãe — composta por memória, unidade central de processamento —; um dispositivo móvel, tal como o smartphone ou tablet; entre outros equipamentos tecnológicos. Para que uma aplicação possa ser executada em um hardware, é preciso que haja uma camada de software denominada sistema operacional, que tem o papel de “ser veículo para distribuir um produto”.
Importante: quando falo sobre sistemas operacionais em computador, penso também em sistemas Android e IOS dos dispositivos móveis.
As aplicações são construídas para serem executadas em um sistema operacional específico e, por isso, não funcionam em outro sistema operacional. Você já tinha percebido isso? Já tentou fazer a instalação de algo e descobriu que era incompatível com o sistema operacional que você utilizava? Como, por exemplo, alguns aplicativos que estão disponíveis apenas para a versão Android e não para IOS.
Perceba que existem diferentes tipos de software entre o usuário e o hardware. Além disso, é importante que você saiba que o software tem passado por grandes mudanças nas últimas décadas devido ao aperfeiçoamento significativo do hardware, mudanças profundas nas arquiteturas computacionais, vasto aumento na capacidade de memória e armazenamento e variedade de opções de entrada e saída de dados. Toda essa evolução tem resultado em sistemas computacionais mais sofisticados e complexos.
Vamos relembrar alguns conceitos importantes que vimos até agora?
Relembro que o conceito clássico de software é que este seja composto por instruções, estruturas de dados e documentação. As instruções, quando executadas, produzem a função e o desempenho desejado pelos seus usuários. As estruturas de dados possibilitam que os programas manipulem adequadamente a informação. E, por fim, a documentação descreve a operação e o uso do programa. Para ter um conceito mais abrangente sobre software, devemos compreender algumas características.
Uma característica importante é que o software é desenvolvido através de um processo de engenharia; ele não é fabricado no sentido clássico. Ou seja, o software é um produto único. Para a construção de um produto de software, é necessário elaborar um plano, especificar as necessidades do usuário para, na sequência, analisar e construir o projeto do produto de software. Nas próximas lições, detalharemos todo esse processo.
Outra característica importante é que o software não se desgasta. Quando um componente de hardware se desgasta, ele é substituído por uma “peça de reposição”. Quando o mouse do computador deixa de funcionar, por exemplo, nós podemos facilmente substituí-lo, correto? No caso dos softwares, não existe essa “peça de reposição”. Contudo, falhas podem acontecer no software devido a um problema de especificação ou uma modificação incorreta no código fonte desse software.
Além disso, muitos softwares continuam a ser construídos de forma personalizada, isto é, sob encomenda. Imaginemos que você seja o(a) proprietário(a) de uma padaria e precise de um software para controlar a produção e venda dos pães e dos produtos da mercearia. Para isso, você encomenda uma aplicação para uma empresa de informática. Essa aplicação construída foi pensada para a sua forma de gerir o seu negócio, não funcionando, por exemplo, para a gestão de uma farmácia.
Sommerville (2011) salienta que existem notações, métodos ou técnicas universais para a Engenharia de Software, porque diferentes tipos de software exigem abordagens diferentes. Desenvolver um sistema de informação é totalmente diferente de desenvolver um controlador para um instrumento científico. Todos esses softwares precisam da Engenharia de Software, mas não necessitam exatamente das mesmas técnicas.
Agora, compreendamos quais são as atuais categorias de software.
Aplicativos — ou software de aplicação — são programas que solucionam uma necessidade específica de negócio. Além das aplicações convencionais de processamento de dados — comerciais ou técnicos —, os aplicativos são usados para controlar funções de negócio em tempo real, como, por exemplo, para processamento de transações em pontos de venda, controle de fabricação, entre outros.
Softwares científico e de engenharia são caracterizados por algoritmos de processamento numérico pesado, que vão desde a astronomia à vulcanologia, da análise de tensões na indústria automotiva à dinâmica orbital de ônibus espacial. Ressalta-se que aplicações modernas estão se afastando dos algoritmos convencionais.
Software de sistema é um conjunto de programas feito para atender outros programas. Temos os compiladores, editores e utilitários para gerenciamento de arquivos que permitem o processamento de estruturas de informação complexas; ou componentes do sistema operacional drivers, software de redes de computador, processadores de telecomunicações para processar dados não determinados.
Software embarcado, ou seja, que reside em um produto ou sistema, é utilizado para implementar e controlar características e funções para o usuário final ou para o próprio sistema. Executa funções limitadas e específicas — ex.: controle do painel de um micro-ondas — ou funções significativas e com capacidade de controle, como, por exemplo, o controle de nível de combustível e sistema de freios em um automóvel.
Software para linhas de produtos tem capacidade específica de utilização por muitos clientes diferentes, podendo focar no mercado limitado e particularizado, como, por exemplo, o controle de estoque de um supermercado; ou no mercado de consumo de massa para, por exemplo, editar texto, construir planilhas, gerenciar um banco de dados, entre outros.
Aplicativos para Web eram, originalmente, um conjunto de arquivos de hipertexto interconectados. Cada vez mais, os ambientes computacionais para web são sofisticados e com recursos especializados, funções computacionais e conteúdo para o usuário final, interligados a banco de dados corporativos e aplicações comerciais.
Aplicativos para dispositivos móveis (ou app) são programas de software presentes em celulares Android, iPhone (iOS) e em outros dispositivos inteligentes, tais como Smart TV, entre outros. Os apps podem ser gratuitos ou pagos e desempenham diversas funções: mensageiros on-line — Messenger, WhatsApp —, streaming — Netflix, Prime Video, Globo Play —, gerenciadores, editores de fotos e vídeos etc.
Softwares baseados em Inteligência Artificial possibilitam solucionar problemas complexos que não são passíveis de computação ou de análise direta, como, por exemplo, áreas da robótica, sistemas especialistas, reconhecimento de padrões de imagem ou de voz, redes neurais artificiais, prova de teoremas e jogos.
Software legado é um software antigo e tem sido foco de contínua atenção e preocupação, porque exige modificação constante para que possa se adequar às mudanças dos requisitos de negócio e às plataformas computacionais. Esse tipo de software foi projetado para dar suporte a funções de negócios vitais e, portanto, são indispensáveis e não podem ser desativados. Esse último tipo de software é um grande desafio para as equipes de desenvolvimento. Software legado deve ser adaptado para novos ambientes ou tecnologias computacionais, atualizado para atender aos novos requisitos de negócios, expandido para que possa se comunicar com sistemas atuais, “rearquitetado” para que possa funcionar em um ambiente de rede.
Agora que você aprendeu sobre as categorias de software, pode perceber que as possibilidades são diversas, não é mesmo? Dentro disso, todo profissional de uma equipe de desenvolvimento deve se manter sempre atento às metodologias baseadas na evolução do tempo. Então, reflitamos sobre as demandas atuais.
Com o apoio de recursos de redes sem fio, há, cada vez mais, espaço para a computação mundial aberta, uma verdadeira computação distribuída e pervasiva, isto é, ampliada, compartilhada e incorporada aos ambientes domésticos e comerciais. O desafio é permitir que os dispositivos móveis, computadores pessoais e sistemas corporativos se comuniquem por meio dessas redes.
Além disso, como a internet é um forte mecanismo computacional, tem-se o netsoursing (em português, recursos via internet) como provedor de conteúdo. O objetivo tem sido definir arquiteturas de software simples, por exemplo, para o planejamento financeiro pessoal, mas também sofisticadas, que possam oferecer benefícios aos mercados mundiais.
Outro desafio tem sido a construção de software aberto, pois permite que diferentes profissionais contribuam na construção de um software, normalmente, sem ganho financeiro envolvido ou uma equipe de desenvolvimento fixa. É uma tendência crescente que pretende instituir a distribuição do código fonte, a fim de que diferentes equipes de desenvolvimento possam contribuir para seu desenvolvimento. Um exemplo clássico são os aplicativos baseados no sistema operacional Linux, que apresentam essa possibilidade.
Então, coloquemos em prática o que você aprendeu nesta lição. O ideal é começar a refletir sobre os diferentes aplicativos que você, sua família ou seus conhecidos podem utilizar. Começaremos pela cozinha de uma casa. Você já prestou atenção no fato de que os micro-ondas têm software embarcado? Lembrando que, como você aprendeu, software embarcado significa que este está inserido em um sistema ou produto. As geladeiras mais atuais também possuem software embarcado para, por exemplo, alertar o proprietário de que a eletricidade falhou ou para indicar que a bebida colocada no freezer já está gelada o suficiente para ser bebida.
Você já deve ter percebido que toda Smart TV tem aplicativos baseados em Inteligência Artificial para, por exemplo, monitorar os lançamentos de filmes e lhe avisar quando um novo filme apresenta o estilo que você costuma assistir. Você deve ter pensado na Netflix, Disney+, Google Play, certo? Acertou! Acredito que você tenha um estilo de filme — aventura, policial, romance, entre outros — que gosta mais de assistir. Já percebeu que o lançamento de filmes nesse estilo aparecem como sugestão para você? Isso ocorre por conta da Inteligência Artificial, ela aprende o que você gosta, monitora os lançamentos de filmes e salienta as opções que, provavelmente, você gostará quando estiver procurando algo para assistir.
Além disso, cada vez mais, os smartphones e as Smart TVs são ativados pela voz, dispensando que o usuário digite os dados. O navegador no computador também possui esse recurso, podendo, inclusive, traduzir o que você fala em outra língua estrangeira e apresentar para você como deve ser dito. Outro recurso atual são os assistentes inteligentes que permitem que você peça para que algum dispositivo em casa seja ligado/desligado, para aumentar/diminuir o volume, entre outras atividades.
O que mais você consegue detectar sobre aplicativos disponíveis no dia a dia? Pense no ambiente de trabalho de um escritório de Contabilidade, um consultório médico, uma loja de roupas/calçados ou em um supermercado, são diversos softwares que dão suporte para as atividades diárias.
Sugiro uma atividade prática: procure listar esses aplicativos e, depois, veja as similaridades e diferenças que eles possuem. Procure relacionar os conteúdos aprendidos nesta lição: conceito, características e diferentes categorias do software. Esses aprendizados são muito importantes para a compreensão das lições a seguir, que procuram detalhar como a Engenharia de Software atua na construção de softwares com qualidade.
Clique aqui, teste seus conhecimentos sobre esta lição e confirme sua participação nesta disciplina!
GAIATO, K. O que é software? Entenda de forma fácil e rápida. Tecmundo, 14 mar. 2021. Disponível em: https://www.tecmundo.com.br/software/212591-software-entenda-forma-facil-rapida.htm. Acesso em: 21 jan. 2022.
PRESSMAN, R. S. Engenharia de Software: uma abordagem profissional. 7. ed. Porto Alegre: AMGH, 2011.
SOMMERVILLE, I. Engenharia de Software. 9. ed. São Paulo: Pearson Prentice Hall, 2011.