SOFTWARE E ENGENHARIA DE SOFTWARE



Documentos relacionados
Engenharia de Software I. Prof. André Castro Garcia

O Processo de Desenvolvimento de Software. Engenharia de Software

Engenharia de Software

Curso Técnico em Redes

Fundamentos da Informática

Análise e Projeto de Sistemas. Engenharia de Software. Análise e Projeto de Sistemas. Contextualização. Perspectiva Histórica. A Evolução do Software

Introdução a Informática. Prof.: Roberto Franciscatto

Introdução à Arquitetura de Computadores IFES Campus Serra

Na medida em que se cria um produto, o sistema de software, que será usado e mantido, nos aproximamos da engenharia.

1. NÍVEL CONVENCIONAL DE MÁQUINA

Processamento de dados - Aula I

Introdução à Organização e Arquitetura de Computadores. Prof. Leonardo Barreto Campos 1

Introdução à Computação

Engenharia de Software

Introdução. Introdução. Introdução. Organização Estruturada de Computadores. Introdução. Máquinas Multiníveis

Introdução. Software (Parte III)

Introdução. Hardware X Software. Corpo Humano Parte Física. Capacidade de utilizar o corpo em atividades especificas explorando seus componentes

Computador E/S, Memória, Barramento do sistema e CPU Onde a CPU Registradores, ULA, Interconexão interna da CPU e Unidade de controle.

Introdução à Engenharia de Computação

Engenharia de Software

Tecnologia da Informação. Visão Geral sobre Informática

Máquinas Multiníveis

O que é um programa? Programa é uma lista de instruções que descrevem uma tarefa a ser realizada pelo computador.

Engenharia de Software

REVISÃO ENGENHARIA DO SOFTWARE. Isac Aguiar isacaguiar.com.br

Cursos de Computação. Sistemas Operacionais. Prof. M.Sc. Sérgio Teixeira. Aula 01 - História e Funções dos Sistemas Operacionais

Gerações de Computadores. INF005 - Arquitetura de Computadores e Software Básico Aula 3 Flávia Maristela (flavia@flaviamaristela.

Engenharia de Software: Introdução. Mestrado em Ciência da Computação 2008 Profa. Itana Gimenes

Introdução a Informática. Prof.: Roberto Franciscatto

A Evolução dos Sistemas Operacionais

Tópicos. Engenharia de Software: Uma Visão Geral

Elisa Maria Pivetta Cantarelli. PDF created with pdffactory Pro trial version

Arquitetura e Organização de Computadores

1.1. Organização de um Sistema Computacional

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO

ALP Algoritmos e Programação. . Linguagens para Computadores

Rodrigo Baleeiro Silva Engenheiro de Controle e Automação. Introdução à Engenharia de Controle e Automação

Abstrações e Tecnologias Computacionais. Professor: André Luis Meneses Silva /msn: andreluis.ms@gmail.com Página: orgearq20101.wordpress.

Engenharia de Software Introdução. Ricardo Argenton Ramos UNIVASF Engenharia de Software I - Aula 1

Conceitos e Evolução Capítulos 1 e 2

ESTUDO COMPARATIVO ENTRE AS PLATAFORMAS ARDUINO E PIC

Tais operações podem utilizar um (operações unárias) ou dois (operações binárias) valores.

Computador Digital Circuitos de um computador (Hardware)

FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES

Organização e Arquitetura de Computadores I. de Computadores

ARQUITETURA DE COMPUTADORES

Engenharia de Software II

Disciplina: Introdução à informática Profª Érica Barcelos

Apostila da disciplina Introdução à Engenharia de Software Professor: Sandro Melo Faculdades São José Curso de Tecnologia de Sistemas de Informação

Arquitetura de Computadores. por Helcio Wagner da Silva


Faculdade Pitágoras. Engenharia de Software. Prof.: Julio Cesar da Silva.

ENIAC. Introdução aos Computadores e à Programação (Noções Básicas)

AULA 01 CONCEITOS BÁSICOS DE PROGRAMAÇÃO. Eduardo Camargo de Siqueira INFORMÁTICA APLICADA TÉCNICO EM ELETRÔNICA

Ao longo do presente capítulo será apresentada uma descrição introdutória da tecnologia FPGA e dos módulos básicos que a constitui.


Arquiteturas RISC. (Reduced Instructions Set Computers)

Sistema de Computação

Introdução à Engenharia de Computação

Informática. Prof. Macêdo Firmino. Macêdo Firmino (IFRN) Informática Setembro de / 25

1. CAPÍTULO COMPUTADORES

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP)

Introdução à Arquitetura de Computadores. Renan Manola Introdução ao Computador 2010/01

Programação I. Departamento de Engenharia Rural Centro de Ciências Agrárias

UNIVERSIDADE DE MOGI DAS CRUZES JOSÉ DA SILVA CONCEITOS DE INFORMÁTICA

Engenharia de Software Introdução. Ricardo Argenton Ramos UNIVASF Engenharia de Software I - Aula 1

Características do Software

Capítulo 1 Introdução

Parte 01. Fundamentos de Arquitetura de Computadores. Prof. Pedro Neto

COMPILADORES E INTERPRETADORES

Introdução a Computação. A Primeira Geração. A Segunda Geração. Geração dos Computadores. Geração dos Computadores. Geração de Computadores

Processamento de Dados

Engenharia de Software

ICC Introdução para JavaScript

Fundamentos da Informática. História dos Computadores Prof. Hélder Almeida

A Unidade Central de Processamento é a responsável pelo processamento e execução de programas armazenados na MP.

Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi

ENGENHARIA DE SOFTWARE

Introdução às Linguagens de Programação

UNIVERSIDADE FEDERAL DE UBERLÂNDIA Faculdade de Computação Curso de Introdução à Informática Prof: Anilton Joaquim da Silva / Ezequiel Roberto Zorzal

INFORMÁTICA APLICADA À ADMINISTRAÇÃO I

Linguagens de Programação. Introdução. Carlos Bazilio

Lição 1 Introdução à programação de computadores

A Linguagem Algorítmica Estrutura de Repetição. Ex. 2

Engenharia de Software Unidade I Visão Geral

Qualidade de Software

O que é Arquitetura de Computadores?

Disciplina: Engenharia de Software Matéria: Software Página: 6. O mundo precisa de software. [Steve Jobs, criador do Apple II]

Prototipação de Software

Figura 1 - O computador

Sistemas Operacionais

Programação de. Programa. Bibliografia. Páginas electrónicas de PM. Regras das aulas de laboratório. Métodos de Ensino - Aulas

Arquitetura de Computadores - Arquitetura RISC. por Helcio Wagner da Silva

Sistemas de Informações Gerenciais

Processos de Desenvolvimento de Software

Introdução à Programação de Computadores

Calculadoras Mecânicas

Organização e Arquitetura de computadores

Informática I. Aula 4. Aula 4-11/09/2006 1

Transcrição:

SOFTWARE E ENGENHARIA DE SOFTWARE 1. INTRODUÇÃO: EVOLUÇÃO E CONCEITOS BÁSICOS Válvula 1 : Dispositivo que conduz a corrente elétrica num só sentido, possuindo três componentes básicos: catodo, anodo e grade Transistor 1 : amplificador de cristal, inventado nos EUA em 1.948, para substituir a válvula (Prêmio Nobel dde 1.950) Circuito integrado 1 : circuito eletrônico constituído de elevado número de componentes arrumados em um chip de poucos centímetros ou milímetros quadrados. Chip 1 : uma pastilha de semicondutor (por exemplo, silício) onde se monta o circuito integrado. Firmware 1 : programa (ou software de um modo geral), armazenado em chip Milessegundo 1 : milésima parte de um segundo (10-3 s) Microssegundo 1 : milionésima parte de um segundo (10-6 s) Nanossegundo 1 : bilionésima parte de um segundo (10-9 s) Picossegundo 1 : trilionésima parte de um segundo (10-12 s) 2. Evoluçãodo Software 2 Primeiros Anos Segunda Era Terceira Era Quarta Era 1950-1950 1970 1980 1990 Orientação Batch Distribuição Limitada Software Personalizado Multiusuário Tempo real Bancos de dados Produto de Software Sistemas distribuídos Ïnteligência embutida Hardware de baixo custo Impacto de consumo Sistemas Desk-top Orientação a objeto Sitemas especialistas Computação paralela Tres primeiras fases: principal desafio era o desenvolvimento de hardware com vista à redução de custos, processamento e armazenamento de dados Década de 80: Avanços da micro-eletrônica fi maior poder de computação a custos mais baixos Década de 90: O principal desafio é melhorar a qualidade das soluções baseadas em computador com redução de custos, soluções estas com implementação via software. 3. Evolução do Software & Evolução dos Sistemas Computadorizados 1 3.1. Sistemas Computadorizados Evolução (períodos aproximados) Primeira Geração : 1.945-1.956 circuitos eletrônicos a válvulas operações internas em milessegundos Segunda Geração: 1.956-1.966 circuitos eletrônicos transistorizados operações internas em microssegundos

Terceira Geração: 1967-1.977 circuitos integrados (SSI e MSI) operações internas em nanossegundos Quarta Geração: 1.978- tecnologia de firmware integração em escalas superiores (LSI, VLSI, ULSI) chips operações internas em picossegundos Circuitos Integrados Escalas de Integração Elementos por chip SSI MSI LSI VLSI SLSI ULSI Menos de 10 10 a 100 100 a 5000 5000 a 50.000 50.000 a 10.000 Mais de 100.000 Tabela 1 Circuitos Integrados Elementos por Chip 4. CARACTERISTICAS DO SOFTWARE 2 Para que se possa obter a compreensão do que é software (e, em última análise, uma compreensão da engenharia de software), é importante examinar as características do software que o tornam diferente das outras coisas que os seres humanos constroem. Quando o hardware é construído, o processo criativo humano (análise, projeto, construção e teste) é imediatamente traduzido numa forma física. Se construimos um novo computador, nossos esboços iniciais, desenhos de projeto formais e protótipo em forma de breadboard (arranjo experimental de circuitos eletrônicos) evoluem para um produto físico (chips VLSI, placas de circuito, fontes de energia etc.). O software é um elemento de sistema lógico, e não físico. Portanto, o software tem características que são consideravelmente diferentes das do hardware. software é desenvolvido ou projetado por engenharia, não manufaturado no sentido clássico Não obstante existam algumas semelhanças entre o desenvolvimento de software e a manufatura de hardware, as duas atividades são fundamentalmente diferentes. Em ambas atividades, a alta qualidade é obtida mediante um bom projeto, mas a fase de manufatura do hardware pode introduzir problemas de qualidade que inexistem (ou são facilmente corrigidos) para o software. Ambas atividades dependem de pessoas, mas a relacão entre as pessoas envolvidas e o trabalho executado é inteiramente diferente. Ambas atividades exigem a construção de um "produto", mas as abordagens são muito diferentes. Os custos do software estão concentrados no trabalho de engenharia. Isto significa que os projetos de software não podem ser geridos como se fossem projetos de manufatura. No decorrer da década passada, o conceito de "fábrica de software" foi discutido na literatura 3,4. Torna-se importante observar que este termo não implica que a manufatura de hardware e o

desenvolvimento de software sejam equivalentes. Ao contrário, o conceito de fábrica de software recomenda o uso de ferramentas automatizadas para o desenvolvimento de software. software não se "desgasta" A Figura 1 mostra o índice de falhas como uma função do tempo para o hardware. A relação, muitas vezes chamada "curva da banheira", indica que o hardware exibe índices de falhas relativamente elevados logo no começo de seu ciclo de vida (estas falhas frequentemente são atribuídas a defeitos de projeto e manufatura); os defeitos são corrigidos e o indice de falhas cai para um nível estável (esperançosamente, muito baixo) durante certo período de tempo. À medida que o tempo passa, entretanto, o índice de falhas eleva -se novamente conforme os componentes de hardware sofrem os efeitos cumulativos de poeira, vibração, abuso, temperaturas extremas e muitos outros males ambientais. Colocado de maneira simples o hardware começa a se desgastar. Indice de falhas Elevados índices de falhas "Desgaste" Tempo Figure 1: Curvas de Falhas Para o Hardware O software não é sensível aos problemas ambientais que fazem com que o hardware se desgaste. Teoricamente, portanto, a curva do índice de falhas para o software assumiria a forma representada na Figura 2. Defeitos não descobertos provocarão elevados índices de falhas no começo da vida de um programa. Porém esses são corrigidos (espera-se que novos erros não sejam introduzidos) e a curva achata-se, como mostra a Figura 2. Esta figura representa de forma grosseira e simplificada os modelos de falhas reais para o software. Entretanto fica claro que o software não se desgasta. Todavia se deteriora! Indice de falhas Continua na mesma taxa até a absolescência Tempo Figure 2: Curva de Falhas do Software (Idealizada) Esta aparente contradição pode ser melhor explicada considerando a Figura 3. Durante sua vida, o software enfrentará mudancas (manutenção). Quando estas são feitas, é provável que novos defeitos sejam introduzidos, fazendo com que a curva do índice de falhas apresente picos, como mostrado na Figura 3:

Indice de falhas Mudanças Curva real Curva Idealizada Tempo Figure 3: Curva de Falhas Real Para o Software Outro aspécto do uso ilustra a diferença entre o hardware e o software. Quando se desgasta, um componente de hardware é substituído por uma "peça de reposição. Não existem peças de reposição para o software. Toda falha de software indica um erro de projeto ou no processo por meio do qual o projeto foi traduzido em código executável por máquina. Portanto a manutenção do software envolve consideravelmente mais complexidade do que a manutenção de hardware. A maioria dos software é feita sob medida em vez de ser montada a partir de componentes existentes. Consideremos a maneira segundo a qual o hardware de controle para um produto baseado em microprocessadores é projetado e construído. O engenheiro de projetos desenha um esquema simples do circuito digital, faz algumas análises fundamentais para garantir que a função adequada seja conseguida e depois vai a estante onde existem catálogos de componenentes digitais. Cada circuito integrado (CI ou chip) tem uma numeração de peça, uma função definida e validada, uma interface bem definida e um conjunto padrão de diretrizes de integração. Depois que cada componente é escolhido, o hardware pode ser encomendado. Infelizmente, os projetistas de software não podem permitir-se ao que acabamos de descrever. Com poucas exceções, não existem catálogos de componentes de software. É possível encomendar software não destinado à publicação, mas somente como uma unidade completa, não como componente que possa ser montado novamente em novos programas, embora esta situação esteja em mudança com a difusão do uso de programação orientada a objeto, cujo resultado são as "CIs de Software". Ainda que muita coisa tenha sido escrita sobre reusabilidade de software, somente agora começam a aparecer as primeiras tentativas bem sucedidas. 5. COMPONENTES DO SOFTWARE O software de computador é uma informação que existe em duas formas básicas: componentes não executáveis em máquina e componentes executáveis em máquina. Para o propósito de nossa discussão aqui, somente os componenentes de software que levam diretamente a instruções executáveis em máquina serão apresentados. Os componentes de software são criados por meio de uma série de conversões que mapeiam as exigências de clientes para código executável em máquina. Um modelo (ou protótipo) das exigências é convertido num projeto. O projeto de software é convertido em uma linguagem que especifica a estrutura de dados do software, os atributos procedimentais e os requisitos relacionados. A forma de linguagem é processada por um tradutor que a converte em instruções executáveis em máquina.

A reusabilidade é uma caracerística importante de um componente de software de alta qualidade 5. Ou seja, o componente deve ser projetado e implementado de forma que possa ser reusado em muitos programas diferentes. Na década de 1960, foram construídas bibliotecas de sub-rotinas científicas que eram reusáveis num amplo conjunto de aplicações científicas e de engenharia. Estas bibliotecas de sub-rotinas reusavam algoritmos bem definidos efetivamente, mas tinham um domínio de aplicação limitado. Atualmente ampliamos nossa visão do reuso a fim de envolver não apenas algoritmos mas também estruturas de dados. Um componente resusável na década de 1990 engloba tanto dados como processamento num único pacote (às vezes chamado classe ou objeto), possibilitando que o engenheiro de software crie novas aplicações a partir de partes reusáveis. Por exemplo as interfaces interativas de hoje frequentemente são construídas utilizando-se componentes reusáveis que possibilitam a criação de janelas gráficas, menus pull-down e uma ampla variedade de mecanismos de interação. As estruturas de dados e detalhes de processamento exigidos para se construir a interface com os usuários estão contidas numa biblioteca de componentes reusáveis pra construção de interfaces. Os componentes de software são construídos usando uma linguagem de programação que tem um vocabulário limitado, uma gramática explicitamente definita e regras de sintaxe e semântica bem formadas. Esses atributos são essenciais para a tradução por máquina. As formas de linguagem em uso são linguagens de máquina, linguagens de alto nível e linguagens não-procedimentais. A linguagem de máquina é uma represetação simbólica do conjunto de instruções da Unidade Central de Processamento (CPU - Central Processing Unity). Quando um bom desenvolvedor de software produz um programa bem documentado, capaz de sofrer manutencção, a linguagem de máquina pode fazer um uso extremamente eficiente da memória e otimizar a velocidade de execução do programa. Quando um programa é projetado pobremente e tem pouca documentação, a linguagem de máquina é um pesadelo. As linguagens de alto nível permitem que o desenvolvedor de software e o programa sejam independentes da máquina. Quando é usado um tradutor mais sofisticado, o vocabulário, a gramática, a sintaxe e a semântica de uma linguagem de alto nível podem ser muito mais sofisticados do que as linguagens de nível de máquina. De fato, os compiladores e os interpretadores de linguagem de alto nível produzem como saída uma linguagem de máquina. Não obstante centenas de linguagens de progamação estejam em uso atualmente pouco mais do que 10 linguagens de programação de alto nível são amplamente usadas na indústria. Linguagens tais como o COBOL e FORTRAN continuam tendo um uso generalizado quase 30 anos depois de sua introdução. Linguagens de programação modernas tais como Pascal, C e Ada estão sendo amplamente usadas. Linguagens orientadas a objetos, tais como C++, Object Pascal, Eiffel e outras estão conquistando entuasiásticos seguidores. Linguagens especializadas tais como APL, LISP, OPS5, Prolog e linguagens descritivas podem para redes neurais artificiais estão conquistando maior aceitação à medida novas abordagens de aplicação saem do laboratório para o uso prático. As linguagens de máquina, as linguagens montadoras (Assembly) e as linguagens de programação de alto nível frequentemente são citadas como "as tres primeiras gerações" das linguagens de computador. Com todas estas linguagens, o programador deve preocupar-se tanto com a especificação da estrutura de informações como com o controle do programa em si. Daí as linguagens das três primeiras geracões serem domiadas linguagens procedimentais. No decorrer da última década, um grupo de linguagens de quarta geração, ou não-procedimentais, foi introduzida. Em vez de exigir que o desenvolvedor de software especifique detalhes de procedimentos, a linguagem nao-procedimental subentendo um programa "especificando o resultado desejado, em vez de especificar a ação exigida para se conseguir esse resultado" 6. O software de apoio converte a especificação do resultado numprogram executável em máquina. Referências Texto extraído com pequenas adaptações de: Presman, R.S.; Engenharia de Software, Makron books, S.P., 1995, pags. 13-19 1. Veloso, F.C. ; Informática Básica 2. Presman, R.S.; Engenharia de Software, Makron books, S.P., 1995, pags. 13-19 3. Manley, J. H.; "CASE: Foundation for Software Factories", COMPCON Proceedings, IEEE, September 1984, pp. 84-91

4. Tajima and T. Matsubara; "Inside the Japanese Software Factory", Computer, vol. 17, No. 3, March 1984, pp. 34-43 5. Biggerstaf, T. J. and Perlis, A. J.; "Special Issue on Software Reusability", IEEE Trans. Software Engineering, Vol. SE-10, No. 5, September 1984 6. Cobem, R. H.; "In Praise of 4GLs", Datamation, July 15 1985, p. 92