Engenharia de Software I. Prof. André Castro Garcia



Documentos relacionados
O Processo de Desenvolvimento de Software. Engenharia de Software

Introdução à Computação

Engenharia de Software

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

Engenharia de Software

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

ENGENHARIA DE SOFTWARE

Engenharia de Software

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

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

Engenharia de Software

Características do Software

Análise e Projeto de. Aula 01. Profa Cristiane Koehler cristiane.koehler@canoas.ifrs.edu.br

1.1. Organização de um Sistema Computacional

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

SOFTWARE E ENGENHARIA DE SOFTWARE

Introdução à ES - Continuação

Introdução à Engenharia de Software

Fundamentos de Sistemas de Informação Sistemas de Informação

FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES

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

Sistemas Operacionais. Prof. André Y. Kusumoto

1. NÍVEL CONVENCIONAL DE MÁQUINA

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

Engenharia de Software Unidade I Visão Geral

Requisitos. Sistemas de Informações

Tópicos em Engenharia de Software (Optativa III) AULA 2. Prof. Andrêza Leite (81 )

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

Unidade 1: O Produto Software e seus processos de criação

TI Aplicada. Aula 02 Áreas e Profissionais de TI. Prof. MSc. Edilberto Silva prof.edilberto.silva@gmail.com

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

Introdução a Engenharia de Software. Alterações na aula do Prof. Reinaldo Bianchi Alterado por: Antonio Carlos Souza ADS - IFBA

Engenharia de Software: conceitos e aplicações. Prof. Tiago Eugenio de Melo, MSc tiagodemelo@gmail.com

Modelo Cascata. Alunos: Bruno Nocera Zanette Pedro Taques

Prof. Me. Marcos Echevarria

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

Introdução Ciclo de vida tradicional de desenvolvimento Prototipagem Pacotes de software Desenvolvimento de 4ª geração Terceirização

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

Engenharia de Software

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

Classificação de Sistemas: Sistemas Empresariais

Curso Técnico em Redes

O que é software? Software e Engenharia de Software. O que é software? Tipos de Sistemas de Software. A Evolução do Software

Introdução a Computação

3 Revisão de Software

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

O processo de melhoria de processo

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

EVOLUÇÃO DA MANUTENÇÃO

Abordagem de Processo: conceitos e diretrizes para sua implementação

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.

MODELAGEM DE SISTEMAS DE INFORMAÇÃO

Requisitos de Software

Projeto Você pede, eu registro.

Engenharia de Software III

GARANTIA DA QUALIDADE DE SOFTWARE

QUALIDADE DE SOFTWARE. Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 27 Slide 1

Projeto de Sistemas I

Capítulo 2. Processos de Software Pearson Prentice Hall. Todos os direitos reservados. slide 1

Metodologia de Desenvolvimento de Software. Prof. M.Sc. Sílvio Bacalá Jr

Engenharia de Software III

Aula 2 Revisão 1. Ciclo de Vida. Processo de Desenvolvimento de SW. Processo de Desenvolvimento de SW. Processo de Desenvolvimento de SW

ANÁLISE E PROJETO DE SISTEMAS

Introdução à. Engenharia de Software. Givanaldo Rocha de Souza

Tecnologia em Gestão Pública Desenvolvimento de Projetos - Aula 9 Prof. Rafael Roesler

NORMAS ISO E SUA IMPORTÂNCIA NA PRODUÇÃO DE SOFTWARE

Engenharia de Software I Para que eu Preciso Saber Engenharia de Software?

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

QUALIDADE Noções iniciais

ADMINISTRAÇÃO DOS RECURSOS DE HARDWARE E SOFTWARE

Introdução Fatores de Qualidade Garantia de Qualidade Rivisões de Software Conclusão. Qualidade. Plácido A. S. Neto 1

ASSUNTO DA APOSTILA: SISTEMAS DE INFORMAÇÃO E AS DECISÕES GERENCIAIS NA ERA DA INTERNET

Prof. JUBRAN. Aula 1 - Conceitos Básicos de Sistemas de Informação

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

3. O NIVEL DA LINGUAGEM DE MONTAGEM

1. CAPÍTULO COMPUTADORES

RESOLUÇÃO CFC Nº 1.029/05

natureza do projeto e da aplicação métodos e ferramentas a serem usados controles e produtos que precisam ser entregues

Campus Capivari Análise e Desenvolvimento de Sistemas (ADS) Prof. André Luís Belini prof.andre.luis.belini@gmail.com /

Orientação a Objetos

Arquiteturas RISC. (Reduced Instructions Set Computers)

ERP. Enterprise Resource Planning. Planejamento de recursos empresariais

Fundamentos de Engenharia de Software. Josino Rodrigues

Informática I. Aula 5. Aula 5-13/05/2006 1

AUTOR: DAVID DE MIRANDA RODRIGUES CONTATO: CURSO FIC DE PROGRAMADOR WEB VERSÃO: 1.0

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 14 PROFª BRUNO CALEGARO

Sistemas de Informação I

IIH Introdução à Informática e Hardware

Análise e Projeto Orientados por Objetos

Gestão da Qualidade Políticas. Elementos chaves da Qualidade 19/04/2009

Sistemas de Informações Gerenciais

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

ENGENHARIA DE SOFTWARE II

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

O Hardware e o Software do Computador

Transcrição:

Engenharia de Software I Prof. André Castro Garcia

1. Introdução 1.1 A IMPORTÂNCIA DO SOFTWARE Nas primeiras décadas da era do computador, o principal desafio era desenvolver um hardware que reduzisse o custo de processamento e armazenagem de dados. No entanto, a partir da década de 90, o desafio passou a ser o desenvolvimento de soluções baseadas em computador. Soluções que são implementadas com software. O hardware tinha então um potencial muito grande e necessitava de um mecanismo que possibilitasse dar vazão a esse potencial, o software.

1.1.1 O papel evolutivo do software O contexto em que o software foi desenvolvido está ligado a quase cinco décadas de evolução dos sistemas computadorizados. O melhor desempenho do hardware, menor tamanho e custo mais baixo precipitaram o aparecimento de sistemas baseados em computadores mais sofisticados. Quando se iniciava a década de 1990, Tofler descreveu uma mudança de poder, em que as velhas estruturas de poder se desintegrarão enquanto os computadores e o software levarão a uma democratização do conhecimento.

Evolução do software: Os primeiros anos (1950 1960) Orientação Batch Distribuição limitada Software customizado A segunda era (1960 1970) Multiusuário Tempo real Banco de dados Produto de software A terceira era (1970 1990) Sistemas distribuídos Inteligência embutida Hardware de baixo custo Impacto de consumo A quarta era (1990?) Sistemas de desktops poderosos Tecnologias orientadas a objeto Sistemas especialistas Redes neurais artificiais Computação paralela

Os primeiros anos 1950-1960 O produto software estava em sua infância. A maior parte do software era desenvolvida e, em última análise, usada pela própria pessoa ou organização. Você escrevia-o, colocava-o em funcionamento e, se ele falhasse, era você quem o consertava. Uma vez que a rotatividade de empreso era baixa, os gerentes podiam dormir tranquilos com a certeza de que você estaria lá se defeitos fossem encontrados. Durante os primeiros anos, aprendemos muito sobre a implementação de sistemas baseados em computador, mas relativamente pouco sobre engenharia de sistemas de computador.

A segunda era 1960-1970 A multiprogramação e os sistemas multiusuários introduziram novos conceitos de interação homem-máquina. Sistemas em tempo real podiam coletar, analisar e transformar dados de múltiplas fontes. Os avanços de armazenagem on-line levaram à primeira geração de sistemas de gerenciamento de banco de dados. A segunda era também foi caracterizada pelo uso do produto de software e pelo advento das software houses. Empresários da indústria, governos e universidades puseram-se a desenvolver pacotes de software e a ganhar muito dinheiro. Todos esses programas tinham de ser corrigidos quando eram detectadas falhas, ou quando tinha alteração, ou quando tinha que se adaptar ao novo hardware. Essas atividades foram chamadas de manutenção de software. E ainda pior, a natureza personalizada de muitos programas tornava-os virtualmente impossíveis de sofrer manutenção.

A terceira era 1970-1990 Os sistemas distribuídos, múltiplos computadores, cada um executando funções concorrentemente e comunicando-se um com o outro, aumentaram intensamente a complexidade dos sistemas baseados em computador. As redes globais e locais, as comunicações digitais de largura de banda elevada e a crescente demanda de acesso instantâneo a dados exigem muito dos desenvolvedores de software. A terceira era foi também caracterizada pelo advento e generalizado uso de microprocessadores, computadores pessoais e poderosas estações de trabalho de mesa. O computador pessoal foi o catalisador do crescimento de muitas empresas de software.

A quarta era 1990-? As tecnologias orientadas a objetos estão rapidamente ocupando o lugar das abordagens mais convencionais para o desenvolvimento de software em muitas áreas de aplicação. As técnicas de quarta geração para o desenvolvimento de software já estão mudando a maneira segundo a qual alguns segmentos da comunidade de software constroem programas de computador. O software de inteligência artificial finalmente saiu do laboratório para a aplicação prática em problemas de amplo espectro do mundo real.

1.2 Software Software é: (1) instruções (programas de computador) que, quando executadas, produzem a função e o desempenho desejados; (2) estruturas de dados que possibilitam que os programas manipulem adequadamente a informação; e (3) documentos que descrevem a operação e o uso dos programas.

1.2.1 Características do Software O software é um elemento lógico, e não físico. Portanto, o software tem características que são consideravelmente diferentes das do hardware: 1. O software é desenvolvido ou projetado por engenharia, não manufaturado no sentido clássico. Os custos do software estão concentrados no trabalho de engenharia. Isso significa que os projetos de software não podem ser geridos como se fossem projetos de manufatura.

2. O software não se desgasta. O software não é sensível aos problemas ambientais que fazem com que o hardware se desgaste. Defeitos não descobertos provocarão elevados índices de falha logo no começo da vida de um programa. 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. Portanto a manutenção de software envolve consideravelmente mais complexidade do que a manutenção de hardware. 3. A maioria dos softwares é feita sob medida em vez de ser montada a partir de componentes existentes. É possível encomendar software não destinado à publicação, mas somente com uma unidade completa, não como componentes que possam ser montados novamente em novos programas.

1.2.2 Componentes do Software O software de computador é uma informação que existe em duas formas básicas: componentes não executáveis em máquinas e componentes executáveis em máquina. A reusabilidade é uma característica importante de um componente de software de alta qualidade. Ou seja, o componente deve ser projetado e implementado de forma que possa ser reusado em muitos programas diferentes. Os componentes de software são construídos usando uma linguagem de programação que tem um vocabulário limitado, uma gramática explicitamente definida 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 alto nível e linguagens não procedimentais.

Linguagem de máquina é uma representação simbólica do conjunto de instruções da unidade central de processamento (CPU). As linguagens de alto nível permitem que o desenvolvedor do 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. 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 três primeiras gerações das linguagens de computador. As linguagens de quarta geração, ou não procedimentais, em vez de exigir que o desenvolvedor de software especifique detalhes de procedimento ela subentende um programa especificando o resultado desejado ao invés de especificar a ação exigida para se conseguir esse resultado.

1.2.3 Aplicações do Software O software pode ser aplicado a qualquer situação em que um conjunto previamente especificado de passos procedimentais tiver sido definido. O conteúdo de informação e a determinância são fatores importantes na determinação da natureza de um aplicativo. A palavra conteúdo refere-se ao significado e a forma das informações que entram e saem. Determinância de informação refere-se à previsibilidade da ordem e da oportunidade da informação. As seguintes áreas de software indicam a amplitude das aplicações potenciais:

Software Básico: é uma coleção de programas escritos para dar apoio a outros programas. Software de Tempo Real: um software que monitora / analisa / controla eventos do mundo real. Software Comercial: o processamento de informações comerciais é a maior área particular de aplicação de software. Software Científico e de Engenharia: tem sido caracterizado por algoritmos de processamento de números. Software Embutido: reside na memória só de leitura e é usado para controlar produtos e sistemas para os mercador industriais e de consumo. Software de Computador Pessoal: processamentos de textos, planilhas eletrônicas, computação gráfica, diversões, gerenciamento de dados, aplicações financeiras são apenas algumas das centenas de aplicações. Software de Inteligência Artificial: faz uso de algoritmos nãonuméricos para resolver problemas complexos que não sejam favoráveis à computação ou à análise direta.

1.3 Software: uma crise no horizonte Muitos observadores da indústria de software caracterizavam os problemas associados ao desenvolvimento do software como uma crise. Contudo, o que temos realmente pode ser algo bem diferente. Os problemas não se limitam ao software que não funciona adequadamente. Ao contrário, a aflição abrange problemas associados a como desenvolvemos o software, como mantemos um volume crescente de software existente e como podemos esperar acompanhar a crescente demanda por mais software.

1.3.1 Problemas Os problemas que afligem o desenvolvimento de software podem ser caracterizados a partir de uma série de perspectivas diferentes: (1) as estimativas de prazo e de custo frequentemente são imprecisas; (2) a produtividade das pessoas da área de software não tem acompanhado a demanda por seus serviços; e (3) a qualidade de software às vezes é menos adequada. Esses problemas são a manifestação mais visível de outras dificuldades do software: Não dedicamos tempo para coletar dados sobre o processo de desenvolvimento de software. A insatisfação do cliente com o sistema concluído ocorre muito frequentemente.

A qualidade do software frequentemente é suspeita. Só recentemente começamos a entender a importância dos testes de software sistemáticos e tecnicamente completos. O software existente pode ser muito difícil de se manter. A capacidade de manutenção de software não foi enfatizada como um critério importante para a aceitação do software. Uma abordagem de engenharia ao desenvolvimento de software, aliada a uma contínua melhoria de técnicas e ferramentas, oferece a chave para a solução dos problemas citados acima.

1.3.2 Causas Os problemas associados à crise de software foram causados pelo próprio caráter do software e pelas falhas das pessoas que detinham a responsabilidade pelo desenvolvimento do software. A natureza lógica do software constitui um desafio para as pessoas que o desenvolvem. Pela primeira vez aceitamos a tarefa de nos comunicar com uma inteligência alienígena a máquina. Os profissionais da área de software têm recebido pouco treinamento formal em novas técnicas para desenvolvimento de software. Algumas pessoas desenvolvem uma abordagem ordeira e eficiente ao desenvolvimento de software por meios de ensaio e erro, mas muitas outras desenvolvem maus hábitos que resultam em qualidade e manutenibilidade deficientes.