Tipos de software e suas classificações

Você sabe dizer quantos e quais são as categorias ou os tipos de software existentes no mercado? Este post explica as principais classificações!

1. Classificação genérica

Existem diferentes formas de classificar os diferentes tipos de software. Uma forma genérica e bem aceita é a seguinte:

  • Software de base (ou básico): destinados à operação e programação do computador. Ex: sistemas operacionais.
  • Software aplicativo: programas que têm alguma função específica e permitem a realização de tarefas por usuários finais. Em resumo, todos que não são sistemas operacionais. Ex: editores (de texto, de objetos 3D, de imagens, de vídeo, de áudio etc), games, aplicativos, SGBD, simuladores, IDE etc.

Essa classificação pode ser encontrada, por exemplo, na referência [1].

O software de base também é chamado por alguns autores de software de sistema.

2. Classificação mais detalhada

No entanto, para quem desenvolve software, é bastante oportuno trabalhar com mais classificações de software. Por exemplo, é possível detalhar melhor uma proposta comercial dizendo que o software a ser desenvolvido será um aplicativo, um software embutido ou um software cliente-servidor. Cada um dos tipos de software pode reunir algumas características comuns, como veremos ainda neste post. Neste sentido, a categoria software de aplicativo normalmente é desdobrada em várias outras.

Um primeiro desdobramento mais simples ocorre na referência [2], por exemplo. Nela, o autor considera três categorias distintas:

  • Software de base: idem à classificação anterior.
  • Software de aplicativo: software que permite a realização de tarefas por usuários finais.
  • Software cliente-servidor: software desenvolvido para rede ou internet. São aplicações constituídas de dois lados: o cliente e o servidor.

Apesar de ser uma classificação interessante, essa divisão considera tipos de software como um possível sinônimo para arquitetura de software. Na minha opinião, atualmente, essa classificação tornou-se confusa, pois a maioria dos softwares hoje em dia possuiu alguma funcionalidade de comunicação com um servidor. Por exemplo, um game singleplayer offline é um software aplicativo, mas um singleplayer online, que solicita login antes de jogar, é um software cliente-servidor? Essa classificação permite dúvidas como esta.

2.1. Linguagens de programação

Uma observação importante é preciso ser feita quanto ao tipo de software de base, ou de sistema. Os principais exemplos são, de fato, os sistemas operacionais (SO). Mas eles não são os únicos. Ambos os autores das referências [1] e [2] citam as linguagens de programação como outro tipo de software de base. Mas como assim? Linguagem de programação é um software. Por isso mesmo que não coloquei essa informação anteriormente, pois acredito que ela esteja confusa.

Faz-se necessário o esclarecimento de que existem linguagens de baixo e alto nível. As de baixo nível são mais próximas ao código que uma máquina entende (composta por números 0 e 1), enquanto as de de alto nível são mais próximas do desenvolvedor. Para saber mais sobre isso, leia este post.

As últimas são sofisticadas, pois podem realizar várias instruções como um único comando, focadas em ser amigável ao desenvolvedor. Elas são usadas com um IDE (ambiente de desenvolvimento integrado), que equivale a uma ferramenta de desenvolvimento. Um programa que gera programas. Neste sentido, uma IDE é um software aplicativo. Ele depende de um sistema operacional para ser instalado e rodar.

Já as de baixo nível podem ser usadas para comandar o equipamento sem necessariamente ser um sistema operacional. Imagine as primeiras versões do Unix, feitas por Dennis Ritchie com a linguagem C. Esse tipo de programação ainda não era um sistema operacional, mas já era um software que operava o hardware parcialmente. Este exemplo é, portanto, um software de base. Outros exemplos são os drivers e os compiladores. Não o IDE, só o compilador. É neste sentido que os autores consideram uma linguagem de programação como um software de base.

2.2. Esquema

Seguindo essa linha de pensamento é possível organizar um gráfico em formato de árvore de acordo com a imagem abaixo. Nela, o software é dividido primeiro em software de sistema ou software aplicativo. Então, o software de sistema é dividido em SO, sistemas de suporte e sistemas de desenvolvimento. Sistema de suporte são, por exemplo, utilitários de gerenciamento de arquivos, como os que fazem formatação física e lógica em uma mídia. Do outro lado, um software aplicativo é classificado como de propósito geral ou específico.

 

tipos de software

3. Classificação completa

Finalmente, chegamos em uma classificação bem completa, apesar de não representar um consenso na literatura.

  1. Software de sistema: uma coleção de programas escritos para fornecer serviços a outros programas.
  2. Software de aplicativo: programas stand-alone (que rodam ser internet ou outros recursos em rede) que resolve um problema de negócio específico.
  3. Software de engenharia (científico): programas focados em grandes processamentos numéricos, como astronomia, biologia molecular e outras áreas com essa característica.
  4. Software embutido: programas contidos dentro de um produto ou sistema e usados para controlar o equipamento e fornecer funcionalidades ao usuário final.
  5. Software para linha de produtos: projetado para fornecer capacidades específicas para serem usadas por diferentes consumidores. Por exemplo, Microsoft Office provê ferramentas de uma linha de produtos que são usadas massivamente por diferentes áreas do mercado.
  6. Aplicações web: programas focados em rede, abrangendo um grande número de aplicações acessadas por uma navegador a partir de computadores e dispositivos móveis.
  7. Software de inteligência artificial: programas que usam algoritmos não numéricos para resolver problemas complexos que podem ser resolvidos por técnicas convencionais de computação.

De fato, a classificação é bem completa, mas possui algumas incoerências na minha opinião. Muitas delas em virtude da evolução das funcionalidades e plataformas de software ou da visão mais focada na experiência de desenvolvimento do autor.

3.1. O que mudou em 20 anos

Um detalhe interessante dessa última classificação e referência [3] é que sua terceira edição, de 1995, foi o livro texto adotado no meu curso de graduação (Ciência da Computação), que fiz de 2000 a 2003 na UEM. Contando da data da publicação dessa edição até a versão atual (oitava, de 2014), temos praticamente 2 décadas. As figuras abaixo mostram as capas dos dois livros. Dessa forma, o livro se manteve bem atualizado e virou uma referência consolidada na área.

É claro que, assim que tive a oportunidade de reler a oitava edição recentemente, comparei os tipos de software que o autor classificou em 1995 com os tipos de software de 2014. Mudou pouca coisa. Ambos possuem 7 categorias. Em 95, a primeira classificação se chamava software básico. Em 2014, virou software de sistema, mas só mudou a nomenclatura. A consideração continuou igual. O software embutido, o científico e o software de inteligência artificial, permaneceram intactos. O tipo atual, software de linha de produtos, em 1995, era chamado de software de computador pessoal. Por fim, as duas mudanças de nome e de consideração mais significativas foram o software de aplicativo, que antes era chamado de software comercial, porém estes, descritos em 1995, tinham mais caráter de sistema gestão, como ERPs; e o software em tempo real, em 1995, que foi substituído pelas aplicações web em 2014.

tipos de sofwtare 

3.2. O que acho que falta

De fato, a classificação é bem completa, mas possui algumas incoerências na minha opinião. Muitas delas em virtude da evolução das funcionalidades e plataformas de software ou da visão mais focada na experiência de desenvolvimento do autor.

Sobre o primeiro argumento, reparem que uma aplicação web atualmente consegue desempenhar funcionalidades que permitem a enquadrar em diversas das categorias citadas. Uma aplicação web, atualmente, pode fazer cálculos para um grande volume de processamento numérico (software científico), como também para software de linha de produtos, software de aplicativo ou, ainda, software de inteligência artificial (usando, por exemplo, a parte funcional da linguagem Javascript). Até em sistemas embutidos é possível usar aplicações web, uma vez que o hardware rode um sistema operacional, como um Linux embarcado. Só não dá mesmo para incluir o software de sistemas dentro das aplicações web, porque todo o restante é possível sob essa ótica.

 

Já sobre o segundo argumento, a experiência de desenvolvimento do autor, sinto falta de vários tipos de aplicações tão específicas quanto a inteligência artificial, mas que não estão listadas como ela. Por exemplo, software 3D, que é um tipo de software que desenha várias vezes por segundo na tela. Como exemplos desse tipo de software, temos aplicativos de Realidade Aumentada, Realidade Holografia ou um simulador físico 3D. Eles demandam um desenvolvimento bem diferente dos demais, assim como os de inteligência artificial. Um software geolocalizado, que use GPS, beacons, ou ainda, um software que use identificação, como RFID e NFC, também possuem características muito peculiares. Enquadrar todos esses em uma classificação como software em tempo real (que nem existe mais na oitava edição) torna a classificação muito abrangente para um esquema com 7 categorias. Por esses motivos, acredito que o autor focou parcialmente sua classificação baseado em suas experiências profissionais.

Referências

[1] – AMARAL, Allan Francisco Forzza. Arquitetura de Computadores: Curso Técnico em Informática. Colatina : CEAD / Ifes 2010, p. 19. Disponível em: <aqui>. Acesso em 14 de ago. de 2018.

[2] – ANTUNES, Kalid. Adaptado por Geovália Oliveira Coelho. Apostila de Introdução a Informática. Instituto Federal de Educação Ciência e Tecnologia de Minas Gerais – Campus São João Evangelista – MG, p. 23. Disponível em: <aqui>. Acesso em 14 de ago. de 2018.

[3] – PRESSMAN, Roger S. Software Engineering: a practitioner’s approach. 8ª ed. Nova Iorque: McGraw-Hill, 2014.

 

 

Sobre o Autor

Leandro Pinho Monteiro

Leandro Pinho é engenheiro de computação, graduado em Ciência da Computação na Universidade Estadual de Maringá (UEM) e mestre em Engenharia da Computação na Faculdade de Engenharia Elétrica e Computação (FEEC) da UNICAMP, ambas formações com foco em Computação Gráfica. Possui experiência no desenvolvimento de sistemas interativos 3D para pontos de venda, marketing e eventos. Atualmente trabalha como consultor de tecnologia e é o responsável pela coordenação dos cursos oferecidos na Universidade da Tecnologia.