Sistemas de Informação Prof. Anderson D. Moura Um programa de computador é composto por uma seqüência de instruções, que é interpretada e executada por um processador ou por uma máquina virtual. Em um programa correto e funcional, essa seqüê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. Uma categoria especial e notável de interpretadores são as máquinas virtuais, como a JVM (Máquina Virtual Java), que simulam um computador inteiro, real ou imaginado. 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 Linguagens 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 problema, porém, algumas vezes, para aumentar o desempenho, partes de um programa pode ser desenvolvido dessa forma. A Construção de um programa de computador Essa prática, porém, vem caindo em desuso, principalmente devido a 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. 1
A Construção de um programa de computador O Programa tem que ser "carregado" na memória principal para ser executado (no Computador). 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. 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: de sistema (básicos) - 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. Tipos de Programas de Computador aplicativo - 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. Firmware - Também conhecido como software embarcado, trata-se de um software que controla o hardware diretamente. É armazenado permanentemente em um chip de memória de hardware, como uma ROM ou EPROM. Sistema Operacional - Sistema operacional (SO) é um conjunto de ferramentas necessárias para que um computador possa ser utilizado de forma adequada. Faz o papel de intermediário entre o aplicativo e a camada física do hardware. Esta é uma das formas de conceituar o termo sistema operacional, como um conjunto que permite a abstração do hardware. Desta forma, se não houvessem sistemas desse tipo, todo software desenvolvido deveria saber se comunicar com os dispositivos de hardware do computador de que precisasse. Quando temos um SO, é ele quem precisa saber lidar com os dispositivos, sabendo falar com a placa de som, com a internet, com os disquetes, etc. 2
Assim, um software que seja feito para funcionar neste sistema não precisará de informações específicas do equipamento. Ao invés disso, ele chamará funções do kernel e o sistema operacional é que fará a comunicação, repassando os resultados. Cada sistema operacional pode ter uma maneira própria e distinta de comunicar-se com o hardware, razão pela qual é comum que softwares feitos para um sistema operacional não funcionem em outro, principalmente no caso de linguagens compiladas. Uma outra forma de conceituar sistema operacional é como um gerenciador de recursos. É função do SO identificar que dispositivos estão ociosos e ocupados, como por exemplo dividir o tempo de uso da CPU entre os vários processos, alocar e gerenciar o uso de memória principal e secundária. Classificações Segundo o tipo de comercialização que adotaram, os sistemas operacionais dividem-se em quatro tipos: Sistemas Proprietários - Aqueles que são pagos e cujo código fonte não é livremente disponibilizado. (Windows, Mac). Sistemas Gratuitos - Aqueles que não são pagos, mas cujo código fonte também não é de livre acesso (BeOS). Classificações Sistemas Open Source (Código Aberto) - Aqueles cujo código fonte é aberto (Unix, BSD). Sistemas Livres - Aqueles que são Open Source, e cujo código fonte ao ser alterado, se distribui sobre a mesma licença (Linux). Classificações Em termos de funcionamento interno, os SOs podem se dividir em três tipos principais, muito relacionados com o desenvolvimento tecnológico: Sistemas mono-tarefa (ex: DOS) Sistemas multi-tarefa (ex: Windows, Linux, Unix) Sistemas multi-processado - Os sistemas multi-tarefa podem ainda ser mono-usuário (BeOS) ou multi-usuários (Unix, Linux) Partes dos Sistemas Operacionais Os sistemas operacionais possuem várias responsabilidades. Podemos citar algumas comuns a vários sistemas: Gerenciamento de Processos - Responsável por gerenciar os processos e Threads, escalonando as tarefas na CPU. O Gerenciamento de Processos é responsável também por manter o sincronismo entre as tarefas e evitar deadlocks. 3
Partes dos Sistemas Operacionais Gerenciamento de Armazenamento - Responsável por gerenciar a hierarquia de memória, viabilizar a memória virtual e manter o sistema de arquivos. Sistema de E/S - Mantém as operações de E/S em disco e outros dispositivos. Sistema de arquivos - Maneira com que os arquivos são armazenados e manipulados dentro de um disco. Partes dos Sistemas Operacionais Segurança - Controla o acesso a partes do sistema ou a todo o SO, definindo permissões de acesso, detectando intrusões e se restaurando após uma ameaça. s Aplicativos Aplicativo (ou aplicativo ou ainda aplicação) é um programa de computador que tem por objetivo o desempenho de tarefas de índole prática, em geral ligadas ao processamento de dados, como o trabalho em escritório ou empresarial. A sua natureza é, portanto, diferente da de outros tipos de software, como sistemas operacionais e ferramentas a eles ligadas, jogos e outro softwares lúdicos, entre outros. Tipos de s Aplicativos cálculo de estruturas, planejamento e controle de projetos, pesquisas operacionais, problemas de engenharia de software. Automação industrial - ativação, programação e controle de máquinas e equipamentos, controle de processos, calibração. Automação comercial - reserva de passagens, contas correntes, pontos de venda, caixas automáticos. Tipos de s Aplicativos Apoio educacional - assistência a instruções, ensino auxiliado pelo computador. Especiais e científicos - teleprocessamento, comunicações, militares, pesquisas espaciais, pesquisas meteorológicas. Artístico - composição se imagens, sons, músicas, vídeos. Entretenimento - execução de jogos, música. Uma linguagem de programação é um método padronizado para expressar instruções para um computador. É um conjunto de regras sintáticas e semânticas usadas para definir um programa de computador. Uma linguagem permite que um programador especifique precisamente sobre quais dados um computador vai atuar, como estes dados serão armazenados ou transmitidos e quais ações devem ser tomadas sob várias circunstâncias. 4
O conjunto de palavras (tokens), compostos de acordo com essas regras, constituem o código fonte de um software. Esse código fonte é depois traduzido para código de máquina, que é executado pelo processador. Uma das principais metas das linguagens de programação é permitir que programadores tenham uma maior produtividade, permitindo expressar suas intenções mais facilmente do que quando comparado com a linguagem que um computador entende nativamente (código de máquina). Assim, linguagens de programação são projetadas para adotar uma sintaxe de nível mais alto, que pode ser mais facilmente entendida por programadores humanos. Linguagens de programação também tornam os programas menos dependentes de computadores ou ambientes computacionais específicos (propriedade chamada de portabilidade). Isto acontece porque programas escritos em linguagens de programação são traduzidos para o código de máquina do computador no qual será executado em vez de ser diretamente executado. Uma meta ambiciosa do Fortran, uma das primeiras linguagens de programação, era esta independência da máquina onde seria executada. Engenharia de software (ES) é 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. Atualmente, essas tecnologias e práticas englobam linguagens de programação, bases de dados, ferramentas, plataformas, bibliotecas, padrões, processos e a questão da Qualidade de. Os fundamentos científicos para a ES envolvem o uso de modelos abstratos e precisos que permitem ao engenheiro especificar, projetar, implementar e manter sistemas de software, avaliando e garantindo suas qualidades. Além disso, a ES deve oferecer mecanismos para se planejar e gerenciar o processo de desenvolvimento. Pode-se dizer que atualmente temos 4 principais fases a serem seguidas para o desenvolvimento de softwares. Análise ou Estudo de Viabilidade do Projeto - fase em que se analise a situação, estuda a viabilidade e a real necessidade da mudança provocada pelo novo sistema. 5
Elaboração do Modelo Lógico do Sistema - fase em que o sistema é arquitetado em modelos lógicos ou imaginários de forma que consiga solucionar todos os problemas. Implementação - fase em que as idéias são transformadas em prática. É nessa fase que o sistema passa de modelos para um real programa de computador. No final dessa fase, o novo sistema deve estar pronto para ser utilizado. Testes (Internos e Externos) - fase o que foi desenvolvido é testado, pela equipe que desenvolveu (teste interno) e pelo cliente (teste externo). Esta fase define a aceitação ou não do sistema pelo cliente. 6