# Introdução à Ciência da Computação/Introdução ao Software e conceitos relacionados

acima: Introdução à Ciência da Computação anterior: <<<Avaliação 1 | próximo: Introdução à Programação>>>
Software, logicial ou programa de computador é uma sequência de instruções a serem seguidas e/ou executadas, na manipulação, redirecionamento ou modificação de um dado/informação ou acontecimento.
Software também é o nome dado ao comportamento exibido por essa seqüência de instruções quando executada em um computador ou máquina semelhante.
Tecnicamente, Software também é o nome dado ao conjunto de produtos desenvolvidos durante o Processo de Software, o que inclui não só o programa de computador propriamente dito, mas também manuais, especificações, planos de teste, etc.

## Software como Programa de Computador

Um programa de computador é composto por uma sequência de instruções, 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.
Um programa pode ser executado por qualquer dispositivo capaz de interpretar e executar as instruções de que é formado.
Quando um software está escrito usando instruções que podem ser executadas diretamente por um processador dizemos que está escrito em linguagem 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.
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, máquinas de automação industrial, calculadora, etc.

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

Um programa é feito usando linguagem de programação, ou instruções do 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 linguagem de máquina é usada para desenvolver um programa, porém, algumas vezes, para aumentar o desempenho, partes de um programa pode ser desenvolvido dessa forma. Essa prática, porém, vem caindo em desuso, principalmente devido à grande complexidade dos processadores atuais, dos sistemas operacionais e dos problemas tratados.
Porém, muito software feito para usos específicos, como por exemplo software embarcado ou software embutido ainda é feito 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.
O Programa tem que ser "carregado" na memória principal para ser executado. Após carregar o programa, o computador entra em funcionamento, executando outros programas. As instruções de um programa aplicativo podem ser passadas para o sistema ou diretamente para o hardware, que recebe as instruções na forma de linguagem de máquina as pilas de quem criou esse programa é mesmo pequena.

## Tipos de Programas de Computador

Qualquer computador moderno tem uma variedade de programas que fazem diversas tarefas.
Eles podem ser classificados em duas grandes categorias:
* 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
* Software aplicativo, que permite ao usuário fazer uma ou mais tarefas específicas. Os softwares 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.

## Engenharia de Software

Engenharia de software é uma área do conhecimento da informática voltada para a especificação, desenvolvimento e manutenção de sistemas de software aplicando tecnologias e práticas de ciência da computação, gerência de projetos e outras disciplinas, objetivando organização, produtividade e qualidade. A engenharia de software se concentra nos aspectos práticos da produção de um sistema de software, enquanto a ciência da computação estuda os fundamentos teóricos dos aspectos computacionais.
A Engenharia de Software surgiu em meados dos anos 70 numa tentativa de contornar a crise do software e dar um tratamento de engenharia (mais sistemático e controlado) ao desenvolvimento de sistemas de software complexos. Um sistema de software complexo se caracteriza por um conjunto de componentes abstratos de software (estruturas de dados e algoritmos) encapsulados na forma de procedimentos, funções, módulos, objetos ou agentes e interconectados entre si, compondo a arquitetura do software, que deverão ser executados em sistemas computacionais.
Os fundamentos científicos para a engenharia de software envolvem o uso de modelos abstratos e precisos que permitem ao engenheiro especificar, projetar, implementar e manter sistemas de software, avaliando e garantido suas qualidades. Além disto, a engenharia de software deve oferecer mecanismos para se planejar e gerenciar o processo de desenvolvimento. Empresas desenvolvedoras de software passaram a empregar os conceitos de Engenharia de Software sobretudo para orientar suas áreas de desenvolvimento, muitas delas organizadas sob a forma de Fábrica de Software.
A engenharia de sistemas é uma área mais ampla por tratar de todos os aspectos de sistemas baseados em computadores, incluindo hardware e engenharia de processos além do software.

## Resumo

* Software, logicial ou programa de computador é uma sequência de instruções a serem seguidas e/ou executadas, na manipulação, redirecionamento ou modificação de um dado/informação ou acontecimento em um hardware.
* Os softwares são executados em linguagem de máquina. Para facilitar a criação de software por parte dos seres humanos foram criadas as linguagens de programação que buscam aproximar-se da linguagem humana comum.
* A necessidade de softwares estáveis, seguros e econômicos tem levado a necessidade de implementação das técnicas de engenharia na criação destes softwares, o que levou ao surgimento da área de Engenharia de Software.

## Exercícios

Você pode se consider apto a mudar para o próximo módulo se obter 100% de aproveitamento (3 acertos).