Software

Nota: Para outros significados, veja Software (desambiguação).

OpenOffice.org writer

Software[1] (pronúncia em inglês: ['sɔftwɛəɹ]) é uma coleção de programas que dizem a um computador como executar tarefas específicas.[2] Isso contrasta com o hardware, a partir do qual o sistema é construído e que realmente executa o trabalho.

Software é o termo usado para se referir a uma sequência de instruções executadas em um dispositivo informático, como um computador ou máquina semelhante. Ele é um produto da engenharia de software e inclui não apenas o programa em si, mas também quaisquer documentações e especificações.

Um software é geralmente composto por diversas funções, bibliotecas e módulos que, ao final do desenvolvimento, formam um programa executável. Quando executado, esse programa recebe dados de entrada (input), processa as informações por meio de algoritmos ou sequências de instruções lógicas e gera uma saída (output) como resultado deste processamento.

A maioria dos softwares é escrita em linguagens de programação de alto nível, como Python, Java, JavaScript, TypeScript, C#, Go, PHP, Kotlin, Ruby, Dart, R, Swift, entre outras.[3] Essas linguagens são mais fáceis e eficientes para os programadores, pois estão mais próximas das linguagens naturais do que do código de máquina. Elas são traduzidas para a linguagem de máquina por meio de um compilador, um interpretador ou uma combinação dos dois.[4]

Softwares também podem ser escritos em linguagens de nível mais baixo, como Assembly. Além disso, linguagens como C, C++ e Rust, embora geralmente classificadas como de médio ou alto nível, são frequentemente usadas para programação de baixo nível devido ao seu controle direto sobre o hardware e à proximidade com a linguagem de máquina.[5] As linguagens assembly, por sua vez, possuem uma forte correspondência com as instruções da CPU e são traduzidas para a linguagem de máquina usando um assembler.

Este produto passa por várias etapas como: análise econômica, análise de requisitos, especificação, codificação, teste, documentação, Treinamento, manutenção e implantação nos ambientes.[6]

Para fins contabilísticos e financeiros, o software é considerado um bem de capital.[7]

## História

[editar | editar código fonte]

Um algoritmo para o que teria sido o primeiro software foi escrito por Ada Lovelace no século 19, para o planejado Analytical Engine.[8] Ela criou provas para mostrar como o motor calcularia os números de Bernoulli. Por causa das provas e do algoritmo, ela é considerada a primeira programadora de computador.[9][10]

A primeira teoria sobre software, anterior à criação dos computadores como os conhecemos hoje, foi proposta por Alan Turing em seu ensaio de 1936, On Computable Numbers, with an Application to the Entscheidungsproblem (problema de decisão).[11] Isso eventualmente levou à criação dos campos acadêmicos de ciência da computação e engenharia de software; Ambos os campos estudam software e sua criação.[12] Ciência da computação é o estudo teórico do computador e do software (o ensaio de Turing é um exemplo de ciência da computação), enquanto a engenharia de software é a aplicação dos princípios da engenharia ao desenvolvimento de software.[13]

Em 2000, Fred Shapiro, bibliotecário da Yale Law School, publicou uma carta revelando que o artigo de John Wilder Tukey de 1958 "The Teaching of Concrete Mathematics" continha o uso mais antigo conhecido do termo "software" encontrado em uma busca nos arquivos eletrônicos do JSTOR, antecedendo a citação do Oxford English Dictionary em dois anos. Isso levou muitos a creditar Tukey por cunhar o termo, particularmente em obituários publicados no mesmo ano, embora Tukey nunca tenha reivindicado crédito por qualquer moeda. Em 1995, Paul Niquette alegou que havia originalmente cunhado o termo em outubro de 1953, embora não tenha encontrado nenhum documento que sustentasse sua afirmação. A primeira publicação conhecida do termo "software" em um contexto de engenharia foi em agosto de 1953 por Richard R. Carhart, em um memorando de pesquisa da Rand Corporation.[14][15][16][17][18]

## Software como programa de computador

[editar | editar código fonte]

Um programa de computador é composto por uma sequência de instruções, que podem ser em linguagem natural ou codificada, que é interpretada e executada por um processador ou por uma máquina virtual. Em um programa correto e funcional, essa sequência segue padrões específicos que resultam em um comportamento desejado.[19]

O termo "software" foi criado na década de 1940, e é um trocadilho com o termo hardware. "Hardware", em inglês, significa "ferramenta física". Software seria tudo o que faz o computador funcionar, através de instruções, excetuando-se a parte física dele.

Um programa pode ser executado por qualquer dispositivo capaz de interpretar e executar as instruções de que é formado.

Quando um software está representado como instruções que podem ser executadas diretamente por um processador, dizemos que está escrito em linguagem de máquina, conhecido também como código de máquina. A execução de um software também pode ser intermediada por um programa interpretador, responsável por interpretar e executar cada uma de suas instruções. Uma categoria especial e o notável de interpretadores são as máquinas virtuais, como a máquina virtual Java (JVM), que simulam um computador inteiro, real ou imaginado.[20]

O dispositivo mais conhecido que dispõe de um processador é o computador. Atualmente, com o barateamento dos microprocessadores, existem outras máquinas programáveis, como telefone celular, sistemas de eletrônica embarcada, calculadora etc.

## A construção de um programa de computador

[editar | editar código fonte]

Um programa é um conjunto de instruções para o processador (linguagem de máquina). Entretanto, podem-se utilizar linguagens de programação, que traduzam comandos em instruções para o processador.

Normalmente, programas de computador são escritos em linguagens de programação, pois estas foram projetadas para se aproximar das linguagens usadas por seres humanos. Raramente é usada a linguagem de máquina para desenvolver um programa. Atualmente existe uma quantidade muito grande de linguagens de programação, sendo as mais populares no momento Java, Visual Basic, C, C++, PHP, entre outras.[21]

Alguns programas feitos para usos específicos, como por exemplo software embarcado ou software embutido, ainda são feitos em linguagem de máquina para aumentar a velocidade ou diminuir o espaço consumido. Em todo caso, a melhoria dos processadores dedicados também vem diminuindo essa prática, sendo o C uma linguagem típica para esse tipo de projeto. Essa prática, porém, vem caindo em desuso, principalmente devido à grande complexidade dos processadores atuais, dos sistemas operacionais e dos problemas tratados. Muito raramente, realmente apenas em casos excepcionais, é utilizado o código de máquina, a representação numérica utilizada diretamente pelo processador.[22]

O programa é, inicialmente, "carregado" na memória principal.[23] Após carregar o programa, o computador encontra o Entry Point ou ponto inicial de entrada do programa que carregou e lê as instruções sucessivamente byte por byte. As instruções do programa são passadas para o sistema ou processador onde são traduzidas da linguagens de programação para a linguagem de máquina, sendo em seguida executadas ou diretamente para o hardware, que recebe as instruções na forma de linguagem de máquina.

## Tipos de programas de computador

[editar | editar código fonte]

Qualquer computador moderno tem uma variedade de programas que fazem diversas tarefas.

Eles podem ser classificados em duas grandes categorias:[24]

1. Software de sistema que incluiu o firmware (A BIOS dos computadores pessoais, por exemplo), drivers de dispositivos, o sistema operacional e tipicamente uma interface gráfica que, em conjunto, permitem ao usuário interagir com o computador e seus periféricos.
2. Software aplicativo, que permite ao usuário fazer uma ou mais tarefas específicas. Aplicativos podem ter uma abrangência de uso de larga escala, muitas vezes em âmbito mundial; nestes casos, os programas tendem a ser mais robustos e mais padronizados. Programas escritos para um pequeno mercado têm um nível de padronização menor.

Ainda é possível usar a categoria Software embutido ou software embarcado, indicando software destinado a funcionar dentro de uma máquina que não é um computador de uso geral e normalmente com um destino muito específico.

* Software aplicativo: é aquele que permite aos usuários executar uma ou mais tarefas específicas, em qualquer campo de atividade que pode ser automatizado no computador, especialmente no campo dos negócios. Inclui, entre outros:
* Aplicações de controle e sistemas de automação industrial.
* aplicações de informática para o escritório.
* Software educacional.
* Software de negócios.
* Banco de dados.
* Telecomunicações.
* Jogos eletrônicos.
* Software médico.
* Software de cálculo numérico e simbólico.

Atualmente, temos um novo tipo de software. O software como serviço, que é um tipo de software armazenado num computador que se acessa pela internet, não sendo necessário instalá-lo no computador do usuário. O cliente pode acessar esse tipo de software, que tem as mesmas funcionalidades das versões armazenadas localmente, de maneira gratuita ou pagar um valor por ele.

Outra classificação possível é:

* Software de sistema: Seu objetivo é separar usuário e programador de detalhes do computador específico que está sendo usado. O software do sistema lhe dá ao usuário interfaces de alto nível e ferramentas que permitem a manutenção do sistema. Inclui, entre outros:
* Sistemas operacionais
* Drivers
* ferramentas de diagnóstico
* ferramentas de correção e otimização
* Servidores
* Software de programação: O conjunto de ferramentas que permitem ao programador desenvolver programas de computador usando diferentes alternativas e linguagens de programação, de forma prática. Inclui, entre outros:
* Editores de texto
* Compiladores
* Intérpretes
* Linkers
* Depuradores
* Ambientes de Desenvolvimento Integrado : agrupamento das ferramentas anteriores, geralmente em um ambiente visual, de modo que o programador não precisa digitar vários comandos para a compilação, interpretação, depuração, etc. Geralmente equipados com uma interface de usuário gráfica avançada.

## Licenças

[editar | editar código fonte]

A maioria dos softwares é publicada sob uma licença de software. Essa licença define e até restringe qual a forma que se pode utilizar o software definido números de licenças, modificações entre outros. Exemplos de licenças:

* GNU General Public License
* Licença BSD
* Licença Apache
* Licença comercial
* Licença de software
* Licença de software livre
* Software livre
* Freeware
* Shareware
* Versão de demonstração
* Trial

## Ver também

[editar | editar código fonte]

* Liberação de software
* Fabricantes de software
* Vigilância de Computadores e Redes
* Pirataria de software
* Pirataria na Internet

## Referências

1. ↑ Base I: do alfabeto e dos nomes próprios estrangeiros e seus derivados. Disponível em http://umportugues.com/acordo/alfabeto. Acesso em 25 de setembro de 2012.
2. ↑ STAIR, Ralph M. (2003). Principles of Information Systems. [S.l.]: Course Technology. p. 16\. ISBN 0619064897
3. ↑ «Top Programming Languages 2024 - IEEE Spectrum». spectrum.ieee.org (em inglês). Consultado em 14 de fevereiro de 2025
4. ↑ Abelson, Harold; Sussman, Gerald Jay; Sussman, Julie (2002). Structure and interpretation of computer programs. Col: Electrical engineering and computer science series 2. , 7. [pr.] ed. Cambridge, Mass.: MIT Press [u.a.] p. 768
5. ↑ Gupta, Surbhi (1 de agosto de 2013). «Comparative study of C, Objective C, C++ programming language» (PDF). International Journal of Advanced Trends in Computer Science and Engineering: 13. Consultado em 14 de fevereiro de 2025
6. ↑ Cefet RN. «Aula 1» (PDF). Consultado em 21 de janeiro de 2012. Arquivado do original (PDF) em 24 de março de 2012
7. ↑ Jorge H. C. Fernandes. «O que é um Programa (Software)». UNB. Consultado em 21 de janeiro de 2012
8. ↑ Evans 2018, p. 21.
9. ↑ Fuegi, J.; Francis, J. (2003). «Lovelace & Babbage and the creation of the 1843 'notes'» (PDF). Annals of the History of Computing. 25 (4): 16–26. ISSN 1058-6180. doi:10.1109/MAHC.2003.1253887. Arquivado do original (PDF) em 15 de fevereiro de 2020
10. ↑ «Ada Lovelace honoured by Google doodle». The Guardian (em inglês). 2012. Consultado em 25 de novembro de 2018. Cópia arquivada em 2018
11. ↑ Turing, Alan Mathison (1936). «On Computable Numbers, with an Application to the Entscheidungsproblem» (PDF). Journal of Mathematics. 58: 230–265. Consultado em 28 de agosto de 2022. Cópia arquivada (PDF) em 9 de outubro de 2022
12. ↑ «What's the Difference Between Computer Science and Software Engineering?». eVidyalam (em inglês). Consultado em 24 de outubro de 2023
13. ↑ Lorge Parnas, David (1 de novembro de 1984). «Software Engineering Principles». INFOR: Information Systems and Operational Research. 22 (4): 303–316. ISSN 0315-5986. doi:10.1080/03155986.1984.11731932
14. ↑ Tukey, John W. (janeiro de 1958). «The Teaching of Concrete Mathematics». The American Mathematical Monthly (1). 1 páginas. doi:10.2307/2310294. Consultado em 30 de abril de 2024
15. ↑ The Mathematical-Function Computation Handbook (em inglês). [S.l.: s.n.]
16. ↑ Buchholz, W.; Shapiro, F.R. (outubro de 2000). «Origin of the term "personal computer": evidence from the JSTOR electronic journal archive». IEEE Annals of the History of Computing (em inglês) (4): 70–71. ISSN 1058-6180. doi:10.1109/MAHC.2000.887997. Consultado em 30 de abril de 2024
17. ↑ «John Tukey, 85, Statistician; Coined the Word 'Software' - The New York Times». web.archive.org. 16 de junho de 2021. Consultado em 30 de abril de 2024
18. ↑ «Softword». web.archive.org. 8 de agosto de 2019. Consultado em 30 de abril de 2024
19. ↑ UFPA. «Programas - Função e Tipos». Consultado em 21 de janeiro de 2012
20. ↑ Sommerville, Ian. Engenharia de software. São Paulo: Pearson, 1998.
21. ↑ Programming Language Popularity - Programming Language Popularity Arquivado em 11 de abril de 2015, no Wayback Machine.
22. ↑ InfoEscola. «O que são Linguagens de Programação». Consultado em 21 de janeiro de 2012
23. ↑ Clube do Hardware. «Liberando memória RAM». Consultado em 21 de janeiro de 2012
24. ↑ Brasil Azul. «Software». Consultado em 21 de janeiro de 2012

* v
* d
* e

Distribuição de programas de computador

Licenças|

* Beerware
* Livre
* Livre e de código aberto
* Código aberto
* Proprietário
* Licença de código aberto
* Domínio público

Modelos de compensação|

* Software comercial
* Software de varejo
* Licenciamento por volume
* Financiamento coletivo
* Freemium
* Freeware
* Adware
* Donationware
* Careware
* Pague-quanto-quiser
* Open core
* Postcardware
* Shareware
* Nagware
* Crippleware
* Versão de demonstração

Métodos de entrega|

* Distribuição digital
* Compartilhamento de arquivos

Enganoso e/ou ilegal|

* Malware
* Spyware
* Cavalo de troia
* Worm
* Ransomware
* Scareware
* Shovelware
* Vaporware

Liberação de software|

* Abandonware
* End-of-life
* Suporte de longo prazo

Proteção anticópia|

* Gestão de direitos digitais
* Dongle
* Restrições em hardware
* Gerenciador de licença
* Ativador de produto
* Product Key
* Direito autoral
* Patente
* Envenenamento de torrent

Categoria:Distribuição de programas de computador

* v
* d
* e

Tópicos sobre computação

História da computação|

* Algoritmos
* Teoria da computação
* Autômatos
* Computação quântica
* Multimídia
* Nanotecnologia
* Bioinformática

Hardware|

* Microcontrolador
* Microprocessador
* Disco Rígido
* Memória
* Modem
* Placa-mãe
* Placa de rede
* Placa de Som
* Placa de Vídeo
* Placa sintonizadora de TV
* Mouse
* Teclado
* Impressora
* Digitalizador

Software|

* Programação de computadores
* Utilitários
* Sistemas Operacionais
* Operação bit a bit

Internet|

* World Wide Web
* E-mail
* FTP
* IRC
* P2P

Cientistas|

* Alan Kay
* Alan Turing
* Ada Lovelace
* Charles Babbage
* Donald E. Knuth
* Douglas Engelbart
* Edsger W. Dijkstra
* Eric S. Raymond
* John von Neumann
* Larry Wall
* Marvin Minsky
* Noam Chomski
* Richard M. Stallman

Terminologia|

* Termos de computação
* Etimologias de termos usados em computação

* v
* d
* e

Engenharia de software

Áreas|

* Análise de Requisitos
* Análise de sistemas
* Projeto de software
* Programação de computadores
* Métodos formais
* Teste de software
* Implantação de software
* Manutenção de software
* Qualidade de software

Conceitos|

* Modelagem de dados
* Enterprise architecture
* Especificação de programa
* Linguagem de modelagem
* Paradigma de programação
* Software
* Arquitetura de software
* Metodologia de desenvolvimento de software
* Processo de desenvolvimento de software
* Qualidade de software
* Garantia de qualidade de software
* Arqueologia de software
* Análise estruturada

Orientações|

* Agile
* Programação orientada a aspecto
* Programação Orientada a Objetos
* Ontologia
* Arquitetura orientada a serviços
* Ciclo de vida de desenvolvimento de sistema

Modelos|

| Modelos de Desenvolvimento|

* Agile
* Desenvolvimento iterativo e incremental
* RUP
* Scrum
* Modelo em espiral
* Modelo em cascata
* XP
* Modelo V
* Modelo de construção incremental
* Prototipação

|

Outros Modelos|

* SPICE
* CMMI
* MPS.BR
* Data model
* Function model
* Information model
* GQM
* Metamodelagem
* Object model
* Modelagem de sistemas
* View model

Linguagens de modelagem|

* IDEF
* UML

Relacionadas|

* Ciência da computação
* Engenharia de computação
* Engenharia empresarial
* História da engenharia de software
* Administração
* Gerenciamento da qualidade
* Usabilidade
* Engenharia de sistemas

* Categoria
* Commons

* Portal das tecnologias de informação

Controle de autoridade|

* : Q7397
* AAT: 300028566
* BNE: XX530960
* BNF: 133183707
* BRE: 3178957
* EBID: ID
* GND: 4055382-6
* JSTOR: computer-software
* LCCN: sh85029534
* NDL: 00684642
* PSH: 12463
* Treccani: software
* DeCS: 19402
* Disney A-Z: computer-software

|

Identificadores|

* MeSH: D012984
* MeSH: L01.224.900

|

*[v]: Ver esta predefinição
*[d]: Discutir esta predefinição
*[e]: Editar esta predefinição