O software, ou programa de computador, é uma sequência de instruções ou comandos lógicos que são executados ou interpretados por um computador com o intuito de executar uma tarefa específica. Apesar do primeiro programa de computador ter sido pensado no século XIX, apenas no início dos anos 1940 os softwares começaram a se apresentar como são hoje em dia. O avanço do hardware computacional foi um dos principais fatores para o avanço das linguagens de programação e, por conseguinte, do desenvolvimento de sistemas.
O avanço no uso dos dados na tecnologia da informação é visível nos dias atuais. A quantidade de informação gerada e manipulada por grandes expoentes do setor, como Google, Twitter e Facebook, só é possível graças aos consideráveis avanços não apenas nos equipamentos, mas nas estratégias de construção dos sistemas. O avanço do uso dos dados em TI veio concomitante ao desenvolvimento dos diversos paradigmas de desenvolvimento de software. Dentre os mais importantes, podemos citar o paradigma orientado a aspectos, o imperativo, o orientado a objetos, orientado a eventos e o lógico. Um paradigma de desenvolvimento de software fornece um exemplo geral, um modelo padrão para se pensar e se construir um programa de computador.
Um outro fato importante que marcou o mercado de software foi a criação dos modelos de maturidade do desenvolvimento de programas. Esta iniciativa representou uma guinada na forma como a qualidade era avaliada, deixando de dar ênfase apenas no produto para observar também a qualidade do processo.
O modelo de maturidade mais difundido é o Capability Maturity Model Integration, desenvolvido pela Universidade Carnegie Mellon e utilizado atualmente em mais de 90 países. O CMMI é subdividido em 5 níveis de maturidade do processo, compostos por 22 áreas chave. No Brasil, com o objetivo de tornar o processo de melhoria mais acessível as pequenas e médias empresas, o SOFTEX criou um modelo de maturidade nacional, denominado MPS.BR.
São dois os principais tipos de licença aplicados aos programas antes da sua distribuição. As licenças proprietárias são caracterizadas por exigir um pagamento do indivíduo ou empresa pelo uso do produto, além de que, frequentemente, o código fonte é inacessível para os clientes. Já as licenças livres, ou de código aberto, se caracterizam, prioritariamente, pelo livre uso dos programas sobre sua égide, que normalmente são distribuídos junto com o seu código fonte e sem custo.