ENTENDENDO A PERFORMANCE

Tamanho: px
Começar a partir da página:

Download "ENTENDENDO A PERFORMANCE"

Transcrição

1 FACULDADE LOURENÇO FILHO Curso de Ciência da Computação José Tiago Ribeiro Filho ENTENDENDO A PERFORMANCE EM APLICAÇÕES JAVA Fortaleza Ceará Dezembro de 2010

2 FACULDADE LOURENÇO FILHO Curso de Ciência da Computação José Tiago Ribeiro Filho ENTENDENDO A PERFORMANCE EM APLICAÇÕES JAVA Monografia apresentada ao Curso de Ciência da Computação da Faculdade Lourenço Filho, como requisito parcial para obtenção do grau de Bacharel em Ciência da Computação. Orientador: Prof. MSc. João Frederico Roldan Viana. Fortaleza Ceará Dezembro de 2010

3 FACULDADE LOURENÇO FILHO Curso de Ciência da Computação Título do Trabalho: Entendendo a performance em aplicações java Autor: José Tiago Ribeiro Filho Banca Examinadora João Frederico Roldan Viana, MSc. (FLF) Orientador André Barros Pereira, MSc. (FLF) 1º Membro Francisco Nauber Góis, MSc. (FLF) 2º Membro Aprovado em 21 de Dezembro de 2010.

4 É melhor tentar e falhar, que preocupar-se e ver a vida passar. É melhor tentar, ainda que em vão que sentar-se, fazendo nada até o final. Eu prefiro na chuva caminhar, que em dias frios em casa me esconder. Prefiro ser feliz embora louco, que em conformidade viver. Martin Luther King.

5 AGRADECIMENTOS Agradeço em primeiro lugar a Deus, origem da vida e fonte de sabedoria. A meus pais pelo estímulo em todos os momentos, e educação a mim dada. A meus irmãos que sempre que precisei estiveram ao meu lado. Ao professor Frederico Viana, pelo incentivo constante e pela segura orientação. E a todos aqueles que, direta ou indiretamente, contribuíram para a elaboração desta monografia. Muito Obrigado.

6 RESUMO A monografia traz a definição de performance computacional, focando desempenho em aplicações desenvolvidas em Java, explica aspectos importantes que influenciam no desempenho tais como: utilização da memória RAM, tempo de inicialização, escalabilidade e a performance percebida pelo usuário do sistema. Apresenta uma técnica muito importante para medição de desempenho, chamada benchmark de desempenho, explica o quanto o seu uso pode auxiliar o desenvolvedor a ter um acompanhamento de possíveis mudanças de desempenho no processo evolutivo da aplicação. Fornece uma visão sobre algoritmos e estruturas de dados, como sua escolha pode influenciar muito na velocidade de um software, define garbage collection, sua importância para bom funcionamento da aplicação e traz uma visão sobre arquitetura da maquina virtual HotSpot.

7 ABSTRACT The monograph has a definition of computational performance, focusing on performance in applications developed in Java, explains important aspects influencing the performance such as: use of RAM, startup time, scalability and performance as perceived by the user of the system. Presents a very important technique for measuring performance, called performance benchmark, explains how their use can help the developer to have a monitoring of possible changes in performance in the evolutionary process of the application. Provides an overview on algorithms and data structures, such as your choice can greatly influence the speed of a software defined garbage collection, its importance for proper functioning of the application and provides an insight into the architecture of the HotSpot virtual machine.

8 SUMÁRIO 1 INTRODUÇÃO Motivação Objetivos Estrutura da Monografia DEFINIÇÕES DE PERFORMANCE Performance computacional Utilização de memória RAM Tempo de inicialização Escalabilidade Performance Percebida TÉCNICAS PARA MEDIR PERFORMANCE Benchmarking Profiling Usando Hprof e Perfanal RELAÇÃO DE PERFORMANCE COM A IMPLEMENTAÇÃO DE ALGORITIMOS RELAÇÃO DE PERFORMANCE COM ESTRUTURAS DE DADOS PARTICULARIDADES DO JAVA Garbage collection Java HotSpot Virtual Machine CONCLUSÃO REFERÊNCIAS BIBLIOGRAFICAS

9 LISTA DE FIGURAS Figura 1 Representação da memória Usada, Livre e o total perante o HEAP da JVM Figura 2 Gerenciador de Tarefas do Windows XP Figura 3 Sistema Não Escalar Figura 4 Sistema Escalar Figura 5 Comparação entre Desempenho computacional e Performance percebida Figura 6 Técnica de sincronização Figura 7 Simula o teste do cronômetro Figura 8 Recriação da classe teste com o uso da classe cronômetro Figura 9 Método recursivo para inverter String Figura 10 Exceção lançada após estouro de pilha Figura 11 Diagrama de classe Figura 12 Fábrica de Sincronismo Figura 13 Benchmark para testar o desempenho de diversos tipos de coleções Figura 14 Arquitetura da maquina virtual

10 9 1 Introdução O presente trabalho irá discorrer sobre desempenho de aplicações desenvolvidas na linguagem Java, irá definir o que é performance e como ela é percebida pelo usuário, apresentará boas práticas para o desenvolvedor não sofrer com perca de desempenho, assim como utilizar técnicas e ferramentas para medir a velocidade da aplicação e se existem objetos ou métodos consumindo muitos recursos de memória, apresentará vantagens e desvantagens de se utilizar algumas estruturas de dados bem como algoritmos e explicará a importância do coletor de lixo na performance final do software. 1.1 Motivação A motivação para discorrer sobre este assunto é auxiliar aos desenvolvedores que trabalham com a linguagem Java a entender os malefícios de uma aplicação mal estruturada, fazer com que passe a observar o todo e não só uma pequena parte do código quando se está em fase de desenvolvimento, adquirir o hábito de realizar testes de desempenho e sempre buscar a excelência em se tratando de velocidade do software. Hoje em dia devido à grande complexidade de funcionalidades exigidas quando se desenvolve um software, torna-se cada vez mais importante a otimização do tempo de processamento ao realizar tarefas. O que acontece é que grande parte dos desenvolvedores de softwares ainda não atentaram para o estudo e analise de como melhorar o tempo de processamento de uma aplicação. Um tempo perdido a mais no planejamento do software para escolher os algoritmos e estruturas de dados adequadas para cada tarefa pode ser revertido em ganho de performance e tempo mais a frente

11 10 no decorrer do projeto, pois reduzirá tempo e gastos com refatoração de código para tentar melhorar o desempenho do sistema. 1.2 Objetivos O objetivo deste trabalho é explicar o que é desempenho e qual a importância de ter uma aplicação com grau satisfatório de performance, assim como ensinar técnicas para medir a velocidade de métodos, algoritmos e estrutura de dados usados quando se desenvolve na linguagem Java. 1.3 Estrutura da Monografia Esta monografia está dividida em seis capítulos. O primeiro traz a introdução, motivação e a estrutura deste trabalho; o segundo capítulo aborda a performance, utilização de memória RAM e como pode-se medir o seu consumo em aplicações Java; trata também de tempo de inicialização e escalabilidade bem como a performance percebida pelo usuário quando está usando um sistema; o terceiro capítulo trata de técnicas para medir desempenho quando se está desenvolvendo um sistema, explica o que é benchmark e como fazer uso dele para melhorar a aplicação, explica a importância de ferramentas de perfis e apresenta dois tipos que acompanham a plataforma Java; no quarto capítulo é explicado como a escolha errada do algoritmo pode influenciar no produto final do software; No quinto capítulo serão apresentadas algumas estruturas de dados utilizadas no Java, bem como suas vantagens, desvantagens e onde elas podem ser melhor aproveitadas; por último o sexto capítulo explica como funciona o coletor de lixo, sua importância e o que ele afeta em se tratando de desempenho de uma aplicação; descreve também a máquina virtual Hotspot, desenvolvida pela Sun, explicando um pouco de sua arquitetura e ensinando alguns parâmetros de configuração da mesma.

12 11 2 Definições de Performance 2.1 Performance Computacional Performance computacional, ou desempenho computacional, é um termo que se refere afim de descrever uma metodologia onde analisa-se o sistema com o objetivo de melhorar a capacidade de produção, eliminando ações desnecessárias que reduzem a capacidade computacional global do sistema (MANGAN, 2008, p.2). Capacidade computacional é á quantidade total de trabalho útil que pode ser realizado em um sistema em um determinado período fixo de tempo. São planilhas recalculadas, os relatórios gerados, os trabalhos de impressão, a rotação de uma imagem 3D, ou apenas jogando paciência se o sistema não é bloqueado (MANGAN, 2008, p.2). Os algoritmos implementados pelos desenvolvedores assim como a estrutura de dados escolhida são alguns dos principais fatores que podem afetar o desempenho global de uma aplicação. Acontece que isso é apenas uma parte no quadro de desempenho para quem quer realmente produzir um software de alta performance. Para compreender os diferentes tipos de problemas que podem ser encontrados na hora do desenvolvimento, devem-se considerar todos os diferentes aspectos do desempenho computacional (WILSON, 2001, p.3). Além da Performance computacional temos: Utilização da Memória RAM Tempo de inicialização

13 12 Escalabilidade Performance Percebida 2.2 Utilização da Memória RAM A quantidade de memória necessária para executar o software pode ser de uma importância crucial para o desempenho global do sistema. Todos os sistemas operacionais modernos fornecem um sistema de memória virtual onde o espaço em disco pode ser utilizado no lugar de uma RAM física. Contudo mesmo o disco mais rápido, é muito mais lento que o modulo de memória mais lento com isso os aplicativos acabam forçando o Sistema Operacional a ter um fraco desempenho na paginação da memória virtual. É muito comum um sistema ter um bom desempenho na época de desenvolvimento e esse desempenho cair quando é implantado no cliente (WILSON, 2001, p.53). Isso pode ocorrer porque muitas vezes os desenvolvedores possuem uma maquina mais robusta que as do usuário, consequentemente um software que roda mais confortavelmente na maquina do desenvolvedor, pode vir a ter um fraco desempenho no terminal do usuário. É preciso desenvolver o software com uma configuração alvo em mente, algumas medidas devem ser pensadas antes de começar a desenvolver algum software, tem que se imaginar que a sua aplicação poderá não ser a única em execução na maquina do usuário, usuários geralmente mantém duas ou três aplicações rodando ao mesmo tempo, Não é interessante que um programa consuma todos os recursos da maquina do usuário. A API Java contém alguns mecanismos que ajudam a descobrir quanto de memória RAM seu programa esta consumindo.

14 13 Existem dois métodos na classe Java.lang.Runtime que ajudam a dar uma idéia de quanta memória esta sendo consumida, esses métodos verificam o tamanho do Heap na maquina virtual Java (WILSON, 2001, p.53). Runtime.totalMemory retorna o tamanho (em bytes) da pilha usada para alocar os objetos. Runtime.freeMemory retorna a quantidade de memória que não esta sendo usada na pilha de objetos Para descobrir se os objetos estão consumindo muito espaço na memória é feito um calculo simples, subtrai-se a memória livre do total de memória como demonstrado na figura 1. Figura 1: Representação da memória Usada, Livre e o total perante o HEAP da JVM. Fonte: Wilson, 2001 Esse método de inspeção de memória e útil em varias situações, como para averiguar o uso da pilha do programa em intervalos regulares de tempo a fim de descobrir se está ocorrendo vazamento de memória se o uso da pilha fica aumentando ao longo do tempo.

15 14 O Java não fornece nenhum método para verificar a velocidade do programa, para medir com precisão a velocidade do seu aplicativo Java é preciso apelar para utilitários específicos de uso do Sistema Operacional. O Windows XP, por exemplo, fornece uma ferramenta chamada Gerenciador de tarefas que nos fornece informações do uso de memória pelos processos que estão em execução (ver Figura 2). Figura 2: Gerenciador de Tarefas do Windows XP Fonte: Elaborado pelo autor Vários outros fatores contribuem também para o desempenho do sistema e um melhor aproveitamento da memória e devem ser analisados com muita calma pelo desenvolvedor (WILSON, 2001,p.53). Objetos Classes Tópicos Estrutura Nativa de Dados Código Nativo

16 15 O consumo de memória relativa desses itens varia de acordo com a aplicação, plataforma ou ambiente de execução, porém objetos e classes requem um pouco mais de atenção, pois normalmente são os que consomem mais memória, o seu consumo varia de aplicativo para aplicativo. Por exemplo, aplicações desktop que utilizam interfaces gráficas, as classes tendem a utilizar mais a memória da maquina-cliente pelo fato de que para iniciar uma interface gráfica sejam necessárias várias classes, já uma aplicação web utiliza a memória mais com objetos, pois geralmente criamos mais objetos para trafegarem as informações entre a Web (WILSON, 2001,p.53). 2.3 Tempo de Inicialização Historicamente os sistemas desenvolvidos em Java possuem um tempo de inicialização mais lento (WILSON, 2001, p.24). O tempo de inicialização de um aplicativo é medido pelo tempo que ele leva para levantar o serviço, carregar e ficar pronto para o usuário utilizar, isso inclui tanto o tempo de inicialização da JVM como do aplicativo Java em si. Para medir o tempo de inicialização de uma aplicação Java o desenvolvedor pode fazer uso de dois métodos contidos na API Java (ORACLE, 2009, p.26-3). System.nanoTime(): retorna um valor em nano segundos. (recupera o valor do Sistema Operacional). System.currentTimeMillis(): retorna o tempo atual em milissegundos. O Tamanho da pilha também influencia no tempo de inicialização da JVM e da aplicação, isso porque a máquina virtual reserva um espaço na memória para o tamanho máximo da pilha (-Xmx) e compromete a memória com o tamanho da pilha inicial (-Xms).(ORACLE, 2009, p. 10-2).

17 16 Para aplicações de grande porte é inevitável ter essas duas variáveis definidas com valores muito altos, mas para uma aplicação de pequeno ou médio porte valores altos podem ocasionar uma lentidão desnecessária na inicialização da máquina virtual. Por outro lado se a pilha está definida com um valor muito pequeno ela vai ocasionar uma sobrecarga na inicialização da maquina virtual, consequentemente forçará a mesma a realizar constantes coletas de lixo ate que a pilha tenha crescido a um tamanho razoável. 2.4 Escalabilidade Escalabilidade é a capacidade de o sistema permanecer operando de forma efetiva mesmo diante de um aumento significativo do número de usuários ou/e de recursos disponíveis. É uma característica almejada por todos que estão desenvolvendo um sistema e está ligada ao desempenho da aplicação (MOREIRA, 2009, p.3). A aplicação pode ter um ótimo desempenho quando enfrenta a concorrência de 100 acessos simultâneos mais será que ela conseguirá suportar um aumento de acessos na ordem 100 vezes. As figuras 3 e 4 mostram a diferença de tempo entre um sistema escalar e um não escalar. Figura 3: Sistema Não Escalar Fonte: Wilson, 2001

18 17 Figura 4: Sistema Escalar Fonte: Wilson, 2001 O tempo de resposta sofre um aumento quase que exponencial quando o número de usuários do sistema cresce em uma aplicação Não Escalar o que torna praticamente inviável o seu uso. (figura 3) Já em um sistema Escalar, o aumento no tempo de resposta é bem menor, devido à sua característica de se readaptar de acordo com a demanda (figura 4). Faz-se necessário antes de implantar um sistema no cliente, sempre submetê-lo a testes de Desempenho com uma carga aproximada de acessos concorrentes para que se tenha uma real noção de seu desempenho quando o mesmo realmente estiver em pleno funcionamento. É importante estar ciente dos principais problemas de escalabilidade e desenhar um sistema que esteja preparado para um eventual crescimento futuro, existem algumas boas praticas no Java que ajudam a construir uma aplicação preparada para expansão um deles é o encapsulamento que Craig Larman (2003) define como: um mecanismo usado para ocultar os dados, a estrutura interna e detalhes de implementação de um objeto

19 18 O encapsulamento propõe que se isole a estrutura interna dos Objetos do resto do programa, por isso seu uso é muito aconselhado em sistemas escalares e de alto desempenho, a vantagem que ele traz é de se poder avaliar rapidamente diferentes algoritmos e estruturas de dados, como também evoluir facilmente o projeto para acomodar requisitos novos ou alterados (WILSON, 2001, p.12). 2.5 Performance Percebida Performance percebida esta ligada com a percepção do ser humano sobre o desempenho do software, muitas pessoas da área de tecnologia da informação confundem desempenho computacional com performance percebida, esses são dois estudos diferentes enquanto o desempenho computacional age mais em cima do desempenho do software(apesar de poder afetar o usuário em si), a percepção de performance pensa somente no usuário (MANGAN, 2008, p2). O processo de reflexão e análise do desempenho percebido tem vários objetivos. A figura 5 retrata as diferenças entre desempenho computacional e performance percebida. Figura 5: Comparação entre Desempenho computacional e Performance percebida Fonte: Mangan, 2008

20 19 3 Técnicas para Medir Performance 3.1. Benchmarking Benchmarking é o processo de comparação de operações de uma maneira que produza resultados quantitativos. Ele desempenha um papel fundamental para garantir uma boa execução do software. Os processos a serem comparados podem ser desde dois algoritmos diferentes que produzem o mesmo resultado, ou duas maquinas virtuais executando o mesmo código (WILSON, 2001, p.21). O aspecto fundamental do benchmarking é a comparação. Um único resultado produzido por ele não tem muito valor, só é válido quando ocorre a comparação. Benchmarks tipicamente medem a quantidade de tempo que se leva para realizar uma tarefa específica, mas também podem ser usadas para medir outras variáveis tais como a quantidade de memória necessária para realizar determinada tarefa. Existe uma técnica de benchmarking simples e útil que pode ser usada para medir o desempenho de um software. Chama-se Cronômetro Benchmarking. Como o próprio nome já sugere, essa técnica consiste em medir a performance com um cronômetro na mão e apesar de não ter a precisão de milissegundos, ela é bastante útil em diversas situações, como as listadas abaixo (WILSON, 2001, p.21). Medir quanto tempo demora ao lançar um aplicativo Medir o tempo que se leva para abrir um documento grande Medir o tempo que se leva para percorrer uma tabela muito grande de dados

21 20 Medir quanto tempo leva para executar uma consulta de uma tabela de banco de dados complexa. A tabela abaixo faz um comparativo das vantagens e desvantagens de usar o cronometro benchmarking na medição de desempenho de um software: Prós Fácil Não precisa modificar fonte código ou a utilização de instrumentos complexos de software Não vai distorcer os resultados Contras Pode ser Impreciso Difícil de automatizar os testes Sujeito a erro humano Outra técnica recomendada para uma ampla variedade de situações é a de adicionar a funcionalidade de sincronismo ao código que está sendo avaliado. No Java existe a classe java.lang.system que contem vários métodos estáticos uteis incluindo um método chamado currenttimemillis. Esse método retorna uma variável do tipo long que contém o número de milissegundos que se passaram desde a meia noite do dia 01 de janeiro de Portanto para usar esse método para descobrir quanto tempo uma determinada parte do código demora a ser executada, é necessário armazenar o tempo antes e após a seção de código que se quer testar, e depois subtrair o tempo final do inicial. A figura 6 mostra o exemplo dessa técnica em uma classe Java (WILSON, 2001, p.21).

22 21 Figura 6: Técnica de sincronização Fonte: Elaborado pelo autor Essa técnica essencialmente é o mesmo que usar um cronômetro exceto que o computador inicia e para o relógio automaticamente e também faz com que o teste fique automatizado, o que acaba reduzindo o percentual de erro no resultado do teste. Uma boa prática para esse tipo de técnica consiste no encapsulamento, ou seja, criar uma classe que emule o comportamento do cronômetro (figura 7) e fazendo uso dela na parte de código que se deseja testar, isso facilitará a vida do desenvolvedor alem de seguir um dos princípios da Orientação a Objeto que é reutilização de código, pois não terá que replicar o mesmo tipo de teste em diferentes partes do programa e também exclui possíveis erros que poderiam vir a acontecer por desatenção na hora de escrever o teste. A figura 8 demonstra como ficaria o teste anterior, agora fazendo uso de uma classe cronômetro.

23 22 Figura 7: Simula o teste do cronômetro Fonte: Elaborado pelo autor

24 23 Figura 8: Recriação da classe teste com o uso da classe cronômetro Fonte:Elaborado pelo autor Existem várias ferramentas de benchmarks criados pelas comunidades de desenvolvedores Java, projetados para comparar implementações em tempo de execução que podem ser uteis na hora de testar o desempenho de um software. Alguns exemplos dessas soluções são (WILSON, 2001, p.21): SpecJvm2008 desenvolvido pela Standard Performance Evaluation Corporation (SPEC) é utilizado para medir o desempenho de diferentes maquinas virtuais Java. VolanoMark desenvolvido pela Volano, permite determinar a conexão e as limitações de desempenho do hardware, sistema operacional e plataforma Java. SciMark desenvolvido por Roldan Pozo e Bruce Miller, tem como finalidade medir o desempenho de códigos numéricos que ocorrem na engenharia e aplicações cientificas. CaffeineMark desenvolvido pela Pendragon Software Corporation, consiste em uma serie de testes que medem a velocidade dos programas Java rodando em vários hardwares e softwares de configurações diferente.

25 24 Embora essas soluções sejam ótimas para avaliar a aplicação em tempo de execução, faz-se necessário a criação de benchmarks específicos para avaliar o desempenho do software, ou seja, que testem seu próprio código, as vantagens desse tipo de abordagem são que se pode comparar desempenho de soluções alternativas, acompanhar o desempenho e realizar a analise de tendência ao longo do ciclo de desenvolvimento. A comparação, aliás, é o uso mais óbvio dos benchmarks personalizados, por exemplo, quando o desenvolvedor precisa escolher entre dois algoritmos para implementar determinada função, então ele pode criar um ponto de referência e comparar as duas soluções. Uma das grandes vantagens dos benchmarkings é que se pode acompanhar e analisar as tendências do programa ao longo do desenvolvimento, com isso ao adicionarmos novas funcionalidades ou corrigirmos erros encontrados no meio desse processo, pode-se facilmente descobrir o quanto a aplicação ficou mais lenta e ter o real controle de onde isso está ocorrendo. Benchmarks podem ser divididos em duas categorias, microbenchmarks e macro-benchmarks (WILSON, 2001, p.21): Micro-Benchmarks são micro-pontos de referência que muitas vezes podem ser escritos em poucas linhas de código e são tipicamente muito fáceis de descrever. Macro-Benchmarks Realizam testes no sistema como o usuário final vai vê-lo. Para construí-lo é preciso entender como o cliente irá utilizar o produto. Saber analisar e interpretar os resultados gerados nos testes é essencial, é preciso ter em mente que eles geralmente variam de execução para execução, para facilitar a analise é recomendável realizar diversas tiradas de tempo, após colher os dados com tempos diferentes precisa-se realizar a analise estatística, existem muitos tipos de estatísticas que podem ser uteis,

26 25 mas é recomendável que se determine três números chaves, para o melhor caso, pior caso e processo médio, para informar o pior caso basta pegar o pior tempo, o melhor caso pega-se o melhor tempo e o processo médio tira-se uma media do tempos colhidos. Como benchmark sustenta-se em comparações deve-se fazê-las ao logo do desenvolvimento do sistema para que possa acompanhar as mudanças de desempenho Profiling Profiling é uma forma dinâmica de analisar um determinado programa, ou seja, é uma forma de investigar o comportamento de um programa usando informações recolhidas após a execução do mesmo. O objetivo dessa análise é detectar quais seções de um programa precisam ser otimizadas, seja para aumentar a velocidade geral ou diminuir o uso da memória, ou ás vezes ambos. Ferramentas de profiling devem ser capazes de responder algumas perguntas, tais como: quais os métodos que são utilizados com maior frequência, quais métodos estão chamando os métodos mais utilizados, quais o métodos estão alocando mais memória, qual a percentagem de tempo que cada método e utilizado. Essas ferramentas são na maioria das vezes ricas em interfaces e permitem que possa escolher que tipo de teste deseja-se realizar. Profiling pode ajudar ao desenvolvedor identificar se existe algum método critico na aplicação, se este esta tomando a maior parte do tempo de processamento da mesma, então o desenvolvedor poderá direcionar seu esforço para melhorar o desempenho do método avaliado (WILSON, 2001, p.21). Existem dois tipos de abordagens para otimizar a aplicação a qual o desenvolvedor pode fazer uso quando descobre onde esta ocorrendo a queda de desempenho do sistema (WILSON, 2001, p.21). Fazer com que métodos que sejam utilizados com maior frequência tornem-se mais rápidos

27 26 Fazer com que métodos mais lentos sejam chamados com menor frequência. Muitas vezes programadores partem logo para a primeira alternativa, sendo que às vezes é mais fácil descobrir o porquê do método ser chamado com muita freqüência e com isso tentar diminuir o numero de vezes que esse método é acessado. Ferramentas de profiling são interessantes para descobrir o quanto de objetos seu programa tem, e quanto os mesmos estão consumindo de memória, fazendo com que o programador tente minimizar a criação de objetos, muitas vezes a uma relação entre métodos que utilizam muitos objetos e métodos que são chamados várias vezes na aplicação, sempre é bom verificar se todos os objetos criados no método são realmente necessários. Um exemplo comum de criação de muitos objetos em um método e que com o uso dessas ferramentas o programador pode minimizar é quando um método cria um objeto dentro de um laço de repetição, a cada interação será criado um novo objeto, e esse vai sendo alocado na pilha de objetos da jvm fazendo com que o desempenho da aplicação caia, podendo gerar até um estouro de pilha, movendo a criação para fora do laço faz com que o consumo de memória seja reduzido. O vazamento de memória também é um dos problemas críticos quando se está desenvolvendo um sistema, vazamento de memória ocorre quando a memória é alocada, mas não é liberada, embora a maquina virtual Java seja responsável pela liberação de memória através do garbage collector, a mesma não garante que horas isso ocorrerá, o que pode atrapalhar o desempenho do sistema (WILSON, 2001, p.21). O isolamento do vazamento de memória pode ser uma tarefa muito difícil, é ai que o uso de profiling pode tornar-se uma arma a favor do desenvolvedor, as ferramentas são bastante uteis para: Acompanhar o numero de instâncias de todas as classes em determinado momento.

28 27 Isolar um determinado objeto e ver todas as referências que apontam pra ele. Coleta manual de lixo perdido. A primeira etapa para isolar o vazamento é colocar o programa em um estado de stress, ou seja, testá-lo com sua capacidade máxima, após isso, deve-se realizar varias operações para certificar-se se todos os tempos gastos na inicialização foram computados e que todos os objetos necessários foram carregados, após isso retorna o programa ao estado normal, e faz-se um comparativo de desempenho quando o mesmo estava submetido a sua capacidade máxima. Depois, deve-se usar uma ferramenta de análise para determinar o numero de anomalias existentes em cada classe, com o resultado da analise em mãos deve-se fazer o uso da ferramenta de profiling para processar todo o lixo disponível. Então, volta-se a usar o sistema em modo de stress e depois em modo normal, para que sejam feitas novas comparações, se terminado os testes os tempos de processamento e desempenho continuarem quase iguais é sinal que a limpeza de lixo foi bem sucedida Usando HPROF e PERFANAL Hprof é uma ferramenta de profiling para criação de estatísticas sobre o desempenho da CPU e da pilha, ele é um agente incorporado a JVM que é carregado dinamicamente através de linha de comando na sua inicialização e torna-se processo da mesma. Ao fornecer opções HPROF na inicialização, os usuários podem solicitar vários tipos de pilha e / ou recursos de CPU profiling HPROF. Os dados gerados podem ser em forma de texto ou binário, e podem ser usados para rastrear e isolar problemas de desempenho que envolve o uso de memória e de código ineficiente. O arquivo de formato binário do HPROF pode ser usado com ferramentas como HAT (Heap Analysis Toll) para procurar os objetos alocados no HEAP (O'HAIR, 2004). A partir da versão cinco do J2SE o HPROF passou a ser implementado na nova JVM TI (Java Virtual Machine Tool Interface), ele é

29 28 capaz de apresentar estatísticas sobre alocação da pilha e monitorar os perfis de contenção. Perfanal é uma ferramenta baseada em GUI (Interface Gráfica para Usuário) para analisar o desempenho de aplicações na plataforma Java, ele é usado para identificar problemas de desempenho no código e localizar o código que precise de ajustes, ela é uma ferramenta livre, licenciada pela GPL (MEYERS, 2000). O Perfanal tem a característica de simplificar bastante a analise do desempenho por que ele interpreta os dados do perfil analisado e informa o custo total dos métodos, ele apresenta os resultados em forma de gráfico o que ajuda a análise.

30 29 4 Relação de Performance com Implementação de Algoritmos Escolher o algoritmo correto é um fator primordial para obter-se um grande desempenho da aplicação, se escolher o algoritmo errado todo o ajuste feito por menor que seja não produzirá ganho de desempenho satisfatório. Um algoritmo pode ter diferentes comportamentos para diferentes aplicações, ele pode ser eficiente para algumas situações e deficiente para outras. Não existem algoritmos que sejam bons para todos os tipos de situações, deve-se analisar o algoritmo de acordo com o objetivo que se deseja alcançar e escolher a solução que proporcionar melhores resultados. Para facilitar esse tipo de escolha deve-se fazer uso de técnicas para comparação de soluções como a já mencionada Benchmark, após decidir qual algoritmo usar, deve-se levar o espaço do problema em consideração. Espaço do problema é um conjunto de problemas com os quais o algoritmo será apresentado, em outras palavras são as situações com o qual o algoritimo irá se deparar para que consiga resolver um determinado problema. Muitas vezes pode-se atingir a solução mais eficiente restringindo o algoritmo a tratar apenas o problema do espaço definido em vez de usar o algoritmo mais geral, ou seja, o que o programa não vai fazer é tão importante quanto ao que o programa faz. Algoritmos recursivos podem ser usados em muitos casos para resolver problemas lineares complexos, mas ela pode ser uma pratica não muito recomendada em se tratando de algoritmos com muitas chamadas a função recursiva, com isso ocorre o aumento de consumo de memória e consequentemente a performance da aplicação diminui.

31 30 Cada chamada sucessiva de uma função recursiva cria um novo quadro de pilha, se a função é chamada muitas vezes também pode fazer com que o programa funcione com a memória sobrecarregada. O exemplo disso é o algorítimo usado para inverter uma string (figura 9) Figura 9: Método recursivo para inverter String Fonte: Elaborado pelo autor Se passarmos uma seqüência muito grande de strings para o algoritmo inverter ele pode gerar um erro de estouro de pilha (stackoverflowerror) conforme a figura 10. Figura 10: Exceção lançada após estouro de pilha Fonte: Laskowski, 2010 Algoritmos não são apenas soluções bem definidas para tarefas normais, ao construir uma aplicação o desenvolvedor deve sempre perder um tempo a mais para analisar o algoritmo correto que utilizará, pois a escolha

32 31 errada no começo pode fazer com que todo o sistema tenha um desempenho não satisfatório.

33 32 5 Relação de Performance com Estruturas de Dados A seleção de estrutura de dados adequada é tão importante quanto a escolha do algoritmo. As estruturas de dados são normalmente conhecidas como vetores, listas, filas etc. A plataforma Java possui suas próprias implementações para algumas estruturas tais como ArrayList (listas), LinkedList (filas) SortedList( lista ordenada). Todas essas classes são implementações da interface Collection (coleções). Coleção é um objeto que agrupa múltiplos elementos em uma única unidade e são usadas para armazenar, recuperar e manipular dados. Ela também é usada para transmitir dados a partir de um método para outro. Coleções normalmente representam itens de dados que formam um grupo natural, tais como (WILSON, 2001, p.122). Coleção de carros em uma concessionária. Coleção de livros de uma biblioteca. Coleção de animais em um zoológico. A sua estrutura de uma coleção é composta de uma arquitetura unificada para representar e manipular coleções trazendo a vantagem de reduzir o esforço de programação, aumentando a performance. A estrutura foi projetada para: Promover o reuso de software. Reduzir o esforço na concepção e de aprender novas APIs. Habilitar a coleta de dados a ser manipulado independente da sua representação. Facilitar a interoperabilidade entre APIs independentes.

34 33 Coleções oferecem uma alta performance aliada com uma implementação de ótima qualidade das estruturas de dados, coleções ajudam a melhorar a qualidade e desempenho do software (WILSON, 2001, p.122). Por ser uma estrutura pronta e desenvolvida para que o programador não utilize seu tempo implementando funcionalidades para melhorar o desempenho, ou seja, reescrevendo uma estrutura que já existe e está otimizada. O uso dela acaba facilitando a vida do desenvolvedor para que ele utilize o seu tempo para dedicar-se a melhoria da qualidade e desempenho do resto da aplicação. Sua estrutura e baseada em seis interfaces como demonstrado no diagrama de classes contido na figura 11. Figura 11: Diagrama de classe Fonte: Elaborado pelo autor Cada tipo de estrutura de dados se adéqua mais a determinado tipo de tarefa, entender o que cada estrutura de dados faz ajuda ao desenvolvedor na escolha de qual será a melhor para resolver seu problema, conseqüentemente ajudará a obter um maior desempenho da aplicação. Para algumas interfaces, a estrutura oferece múltiplas implementações concretas. A lista (List) é uma interface que estende de Coleção, ela é ordenada e pode conter elementos repetidos, ao usar uma lista o desenvolvedor tem o pleno controle sobre onde cada elemento é inserido,

Curso Tecnológico de Redes de Computadores 5º período Disciplina: Tecnologia WEB Professor: José Maurício S. Pinheiro V. 2009-2

Curso Tecnológico de Redes de Computadores 5º período Disciplina: Tecnologia WEB Professor: José Maurício S. Pinheiro V. 2009-2 Curso Tecnológico de Redes de Computadores 5º período Disciplina: Tecnologia WEB Professor: José Maurício S. Pinheiro V. 2009-2 Aula 3 Virtualização de Sistemas 1. Conceito Virtualização pode ser definida

Leia mais

Sistemas Operacionais

Sistemas Operacionais UNIVERSIDADE BANDEIRANTE DE SÃO PAULO INSTITUTO POLITÉCNICO CURSO DE SISTEMAS DE INFORMAÇÃO Sistemas Operacionais Notas de Aulas: Tópicos 7 e 8 Estrutura do Sistema Operacional São Paulo 2009 1 Sumário

Leia mais

Pós Graduação Engenharia de Software

Pós Graduação Engenharia de Software Pós Graduação Engenharia de Software Ana Candida Natali COPPE/UFRJ Programa de Engenharia de Sistemas e Computação FAPEC / FAT Estrutura do Módulo Parte 1 QUALIDADE DE SOFTWARE PROCESSO Introdução: desenvolvimento

Leia mais

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

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP) Hardware (Nível 0) Organização O AS/400 isola os usuários das características do hardware através de uma arquitetura de camadas. Vários modelos da família AS/400 de computadores de médio porte estão disponíveis,

Leia mais

PROCESSO DE DESENVOLVIMENTO DE SOFTWARE. Modelos de Processo de Desenvolvimento de Software

PROCESSO DE DESENVOLVIMENTO DE SOFTWARE. Modelos de Processo de Desenvolvimento de Software PROCESSO DE DESENVOLVIMENTO DE SOFTWARE Introdução Modelos de Processo de Desenvolvimento de Software Os modelos de processos de desenvolvimento de software surgiram pela necessidade de dar resposta às

Leia mais

Organização de Computadores 1

Organização de Computadores 1 Organização de Computadores 1 4 SUPORTE AO SISTEMA OPERACIONAL Prof. Luiz Gustavo A. Martins Sistema Operacional (S.O.) Programa responsável por: Gerenciar os recursos do computador. Controlar a execução

Leia mais

Metodologia de Desenvolvimento de Sistemas

Metodologia de Desenvolvimento de Sistemas Metodologia de Desenvolvimento de Sistemas Aula 1 Ementa Fases do Ciclo de Vida do Desenvolvimento de Software, apresentando como os métodos, ferramentas e procedimentos da engenharia de software, podem

Leia mais

SISTEMAS OPERACIONAIS. Apostila 03 Estrutura do Sistema Operacional UNIBAN

SISTEMAS OPERACIONAIS. Apostila 03 Estrutura do Sistema Operacional UNIBAN SISTEMAS OPERACIONAIS Apostila 03 Estrutura do Sistema Operacional UNIBAN 1.0 O Sistema Operacional como uma Máquina Virtual A arquitetura (conjunto de instruções, organização de memória, E/S e estrutura

Leia mais

Arquitetura de Computadores. Introdução aos Sistemas Operacionais

Arquitetura de Computadores. Introdução aos Sistemas Operacionais Arquitetura de Computadores Introdução aos Sistemas Operacionais O que é um Sistema Operacional? Programa que atua como um intermediário entre um usuário do computador ou um programa e o hardware. Os 4

Leia mais

O CONCEITO DE TDD NO DESENVOLVIMENTO DE SOFTWARE

O CONCEITO DE TDD NO DESENVOLVIMENTO DE SOFTWARE O CONCEITO DE TDD NO DESENVOLVIMENTO DE SOFTWARE Renan Leme Nazário, Ricardo Rufino Universidade Paranaense (Unipar) Paranavaí PR - Brasil renazariorln@gmail.com, ricardo@unipar.br Resumo. Este artigo

Leia mais

UMA ABORDAGEM COMPARATIVA ENTRE AS LINGUAGENS DE PROGRAMAÇÃO JAVA E C#

UMA ABORDAGEM COMPARATIVA ENTRE AS LINGUAGENS DE PROGRAMAÇÃO JAVA E C# UMA ABORDAGEM COMPARATIVA ENTRE AS LINGUAGENS DE PROGRAMAÇÃO JAVA E C# Robson Bartelli¹, Wyllian Fressatti¹. ¹Universidade Paranaense (Unipar) Paranavaí PR Brasil robson_lpbartelli@yahoo.com.br,wyllian@unipar.br

Leia mais

Programação Concorrente Processos e Threads

Programação Concorrente Processos e Threads Programação Concorrente Processos e Threads Prof. Eduardo Alchieri Processos O conceito mais central em qualquer sistema operacional é o processo Uma abstração de um programa em execução Um programa por

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Aula 6 Estrutura de Sistemas Operacionais Prof.: Edilberto M. Silva http://www.edilms.eti.br Baseado no material disponibilizado por: SO - Prof. Edilberto Silva Prof. José Juan Espantoso

Leia mais

Sistemas Operacionais

Sistemas Operacionais 7 Sistemas Operacionais 7.1 Fundamentos da ciência da computação Cengage Learning Objetivos 7.2 Compreender o papel do sistema operacional. Compreender o processo de inicialização para carregar o sistema

Leia mais

Aplicações. Sistema Operacional Hardware. Os sistemas de computadores são projetados com basicamente 3 componentes: Máquinas Virtuais e Emuladores

Aplicações. Sistema Operacional Hardware. Os sistemas de computadores são projetados com basicamente 3 componentes: Máquinas Virtuais e Emuladores Máquinas Virtuais e Emuladores Marcos Aurelio Pchek Laureano Sistemas de Computadores Os sistemas de computadores são projetados com basicamente 3 componentes: hardware sistema operacional aplicações Sistemas

Leia mais

Sistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com

Sistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Sistemas Operacionais Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Estruturas de Sistemas Operacionais Um sistema operacional fornece o ambiente no qual os programas são executados. Internamente,

Leia mais

Notas da Aula 15 - Fundamentos de Sistemas Operacionais

Notas da Aula 15 - Fundamentos de Sistemas Operacionais Notas da Aula 15 - Fundamentos de Sistemas Operacionais 1. Software de Entrada e Saída: Visão Geral Uma das tarefas do Sistema Operacional é simplificar o acesso aos dispositivos de hardware pelos processos

Leia mais

Sistemas Distribuídos: Conceitos e Projeto Threads e Migração de Processos

Sistemas Distribuídos: Conceitos e Projeto Threads e Migração de Processos Sistemas Distribuídos: Conceitos e Projeto Threads e Migração de Processos Francisco José da Silva e Silva Laboratório de Sistemas Distribuídos (LSD) Departamento de Informática / UFMA http://www.lsd.deinf.ufma.br

Leia mais

Notas da Aula 17 - Fundamentos de Sistemas Operacionais

Notas da Aula 17 - Fundamentos de Sistemas Operacionais Notas da Aula 17 - Fundamentos de Sistemas Operacionais 1. Gerenciamento de Memória: Introdução O gerenciamento de memória é provavelmente a tarefa mais complexa de um sistema operacional multiprogramado.

Leia mais

Sistemas Operacionais 1/66

Sistemas Operacionais 1/66 Sistemas Operacionais 1/66 Roteiro Máquinas virtuais Emuladores Propriedades Benefícios Futuro 2/66 Sistemas de Computadores Os sistemas de computadores são projetados com basicamente 3 componentes: hardware

Leia mais

Sistemas Operacionais. Roteiro. Sistemas de Computadores. Os sistemas de computadores são projetados com basicamente 3 componentes: Marcos Laureano

Sistemas Operacionais. Roteiro. Sistemas de Computadores. Os sistemas de computadores são projetados com basicamente 3 componentes: Marcos Laureano Sistemas Operacionais Marcos Laureano 1/66 Roteiro Máquinas virtuais Emuladores Propriedades Benefícios Futuro 2/66 Sistemas de Computadores Os sistemas de computadores são projetados com basicamente 3

Leia mais

Introdução à Linguagem Java

Introdução à Linguagem Java Introdução à Linguagem Java Histórico: Início da década de 90. Pequeno grupo de projetos da Sun Microsystems, denominado Green. Criar uma nova geração de computadores portáveis, capazes de se comunicar

Leia mais

5 Mecanismo de seleção de componentes

5 Mecanismo de seleção de componentes Mecanismo de seleção de componentes 50 5 Mecanismo de seleção de componentes O Kaluana Original, apresentado em detalhes no capítulo 3 deste trabalho, é um middleware que facilita a construção de aplicações

Leia mais

Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO

Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO Conceitos básicos e serviços do Sistema Operacional Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO Tipos de serviço do S.O. O S.O.

Leia mais

Professor: Curso: Disciplina:

Professor: Curso: Disciplina: Professor: Curso: Disciplina: Aula 1 Turma: Esp. Marcos Morais de Sousa Sistemas de informação Engenharia de Software I Dinâmica da disciplina, plano de curso e avaliação 03º semestre Prof. Esp. Marcos

Leia mais

SISTEMAS OPERACIONAIS. Maquinas Virtuais e Emuladores

SISTEMAS OPERACIONAIS. Maquinas Virtuais e Emuladores SISTEMAS OPERACIONAIS Maquinas Virtuais e Emuladores Plano de Aula Máquinas virtuais Emuladores Propriedades Benefícios Futuro Sistemas de Computadores Os sistemas de computadores são projetados com basicamente

Leia mais

FBV - Linguagem de Programação II. Um pouco sobre Java

FBV - Linguagem de Programação II. Um pouco sobre Java FBV - Linguagem de Programação II Um pouco sobre Java História 1992: um grupo de engenheiros da Sun Microsystems desenvolve uma linguagem para pequenos dispositivos, batizada de Oak Desenvolvida com base

Leia mais

11/3/2009. Software. Sistemas de Informação. Software. Software. A Construção de um programa de computador. A Construção de um programa de computador

11/3/2009. Software. Sistemas de Informação. Software. Software. A Construção de um programa de computador. A Construção de um programa de computador 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

Leia mais

ETEC RAPOSO TAVARES GESTÃO DE SISTEMAS OPERACIONAIS I. Máquina Virtual. Instalação de S.O. em dual boot. 1º Semestre 2010 PROF.

ETEC RAPOSO TAVARES GESTÃO DE SISTEMAS OPERACIONAIS I. Máquina Virtual. Instalação de S.O. em dual boot. 1º Semestre 2010 PROF. ETEC RAPOSO TAVARES GESTÃO DE SISTEMAS OPERACIONAIS I Máquina Virtual Instalação de S.O. em dual boot 1º Semestre 2010 PROF. AMARAL Na ciência da computação, máquina virtual é o nome dado a uma máquina,

Leia mais

UFG - Instituto de Informática

UFG - Instituto de Informática UFG - Instituto de Informática Especialização em Desenvolvimento de Aplicações Web com Interfaces Ricas EJB 3.0 Prof.: Fabrízzio A A M N Soares professor.fabrizzio@gmail.com Aula 10 Persistência de Dados

Leia mais

Prevayler. Perola. André Luís Sales de Moraes Juliana Keiko Yamaguchi Tatiana Yuka Takaki

Prevayler. Perola. André Luís Sales de Moraes Juliana Keiko Yamaguchi Tatiana Yuka Takaki Prevayler Perola André Luís Sales de Moraes Juliana Keiko Yamaguchi Tatiana Yuka Takaki Prevayler Prevayler é a implementação em Java do conceito de Prevalência. É um framework que prega uma JVM invulnerável

Leia mais

ENGENHARIA DE SOFTWARE I

ENGENHARIA DE SOFTWARE I ENGENHARIA DE SOFTWARE I Prof. Cássio Huggentobler de Costa [cassio.costa@ulbra.br] Twitter: www.twitter.com/cassiocosta_ Agenda da Aula (002) Metodologias de Desenvolvimento de Softwares Métodos Ágeis

Leia mais

Linguagens de. Aula 02. Profa Cristiane Koehler cristiane.koehler@canoas.ifrs.edu.br

Linguagens de. Aula 02. Profa Cristiane Koehler cristiane.koehler@canoas.ifrs.edu.br Linguagens de Programação III Aula 02 Profa Cristiane Koehler cristiane.koehler@canoas.ifrs.edu.br Linguagens de Programação Técnica de comunicação padronizada para enviar instruções a um computador. Assim

Leia mais

11 Conclusão. 11.1 Descobertas

11 Conclusão. 11.1 Descobertas 97 11 Conclusão 11.1 Descobertas Nesse trabalho apresentamos o McCloud Service Framework, um arcabouço para implementação de serviços baseados na Simulação de Monte Carlo na nuvem, disponibilizamos duas

Leia mais

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

REVISÃO ENGENHARIA DO SOFTWARE. Isac Aguiar isacaguiar.com.br isacaguiar@gmail.com REVISÃO ENGENHARIA DO SOFTWARE Isac Aguiar isacaguiar.com.br isacaguiar@gmail.com Software Sequencia de Instruções a serem seguidas ou executadas Dados e rotinas desenvolvidos por computadores Programas

Leia mais

Sistemas Operacionais Aula 03: Estruturas dos SOs. Ezequiel R. Zorzal ezorzal@unifesp.br www.ezequielzorzal.com

Sistemas Operacionais Aula 03: Estruturas dos SOs. Ezequiel R. Zorzal ezorzal@unifesp.br www.ezequielzorzal.com Sistemas Operacionais Aula 03: Estruturas dos SOs Ezequiel R. Zorzal ezorzal@unifesp.br www.ezequielzorzal.com OBJETIVOS Descrever os serviços que um sistema operacional oferece aos usuários e outros sistemas

Leia mais

Desenvolvimento Web TCC-00.226 Turma A-1

Desenvolvimento Web TCC-00.226 Turma A-1 Desenvolvimento Web TCC-00.226 Turma A-1 Conteúdo Introdução ao Ambiente de Desenvolvimento Professor Leandro Augusto Frata Fernandes laffernandes@ic.uff.br Material disponível em http://www.ic.uff.br/~laffernandes/teaching/2013.2/tcc-00.226

Leia mais

O TRAFip é uma poderosa ferramenta de coleta e caracterização de tráfego de rede IP, que vem resolver esse problema de forma definitiva.

O TRAFip é uma poderosa ferramenta de coleta e caracterização de tráfego de rede IP, que vem resolver esse problema de forma definitiva. Não há dúvida de que o ambiente de rede está cada vez mais complexo e que sua gestão é um grande desafio. Nesse cenário, saber o que está passando por essa importante infraestrutura é um ponto crítico

Leia mais

Metodologias de Desenvolvimento de Sistemas. Analise de Sistemas I UNIPAC Rodrigo Videschi

Metodologias de Desenvolvimento de Sistemas. Analise de Sistemas I UNIPAC Rodrigo Videschi Metodologias de Desenvolvimento de Sistemas Analise de Sistemas I UNIPAC Rodrigo Videschi Histórico Uso de Metodologias Histórico Uso de Metodologias Era da Pré-Metodologia 1960-1970 Era da Metodologia

Leia mais

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

Na medida em que se cria um produto, o sistema de software, que será usado e mantido, nos aproximamos da engenharia. 1 Introdução aos Sistemas de Informação 2002 Aula 4 - Desenvolvimento de software e seus paradigmas Paradigmas de Desenvolvimento de Software Pode-se considerar 3 tipos de paradigmas que norteiam a atividade

Leia mais

CONCEITOS E APLICAÇÕES DA COMPUTAÇÃO EM NUVEM

CONCEITOS E APLICAÇÕES DA COMPUTAÇÃO EM NUVEM CONCEITOS E APLICAÇÕES DA COMPUTAÇÃO EM NUVEM Rogério Schueroff Vandresen¹, Willian Barbosa Magalhães¹ ¹Universidade Paranaense(UNIPAR) Paranavaí-PR-Brasil rogeriovandresen@gmail.com, wmagalhaes@unipar.br

Leia mais

Orientação a Objetos com Java

Orientação a Objetos com Java Orientação a Objetos com Java Julio Cesar Nardi julionardi@yahoo.com.br 2011/2 Aula 01: Começando com Java Objetivos: Compreender o que é Java, OO e suas vantagens; Entender os procedimentos para criação

Leia mais

1 http://www.google.com

1 http://www.google.com 1 Introdução A computação em grade se caracteriza pelo uso de recursos computacionais distribuídos em várias redes. Os diversos nós contribuem com capacidade de processamento, armazenamento de dados ou

Leia mais

Rational Quality Manager. Nome: Raphael Castellano Campus: AKXE Matrícula: 200601124831

Rational Quality Manager. Nome: Raphael Castellano Campus: AKXE Matrícula: 200601124831 Rational Quality Manager Nome: Raphael Castellano Campus: AKXE Matrícula: 200601124831 1 Informações Gerais Informações Gerais sobre o RQM http://www-01.ibm.com/software/awdtools/rqm/ Link para o RQM https://rqmtreina.mvrec.local:9443/jazz/web/console

Leia mais

ARQUITETURA DE SISTEMAS. Cleviton Monteiro (cleviton@gmail.com)

ARQUITETURA DE SISTEMAS. Cleviton Monteiro (cleviton@gmail.com) ARQUITETURA DE SISTEMAS Cleviton Monteiro (cleviton@gmail.com) Roteiro Definição Documento de arquitetura Modelos de representação da arquitetura Estilos arquiteturais Arquitetura de sistemas web Arquitetura

Leia mais

Introdução à Programação de Computadores

Introdução à Programação de Computadores 1. Objetivos Introdução à Programação de Computadores Nesta seção, vamos discutir os componentes básicos de um computador, tanto em relação a hardware como a software. Também veremos uma pequena introdução

Leia mais

Coleções. Page 1. Coleções. Prof. Anderson Augustinho Uniandrade

Coleções. Page 1. Coleções. Prof. Anderson Augustinho Uniandrade Page 1 podem ser comparadas com arrays, visto que também apresentam a capacidade de armazenar referências para vários objetos. Entretanto, as coleções apresentam uma gama de funcionalidades bem maior do

Leia mais

EMENTA DO CURSO. Tópicos:

EMENTA DO CURSO. Tópicos: EMENTA DO CURSO O Curso Preparatório para a Certificação Oracle Certified Professional, Java SE 6 Programmer (Java Básico) será dividido em 2 módulos e deverá ter os seguintes objetivos e conter os seguintes

Leia mais

Sistemas Distribuídos. Professora: Ana Paula Couto DCC 064

Sistemas Distribuídos. Professora: Ana Paula Couto DCC 064 Sistemas Distribuídos Professora: Ana Paula Couto DCC 064 Questões Em uma rede de sobreposição (overlay), mensagens são roteadas de acordo com a topologia da sobreposição. Qual uma importante desvantagem

Leia mais

Sistemas Distribuídos

Sistemas Distribuídos Sistemas Distribuídos Processos I: Threads, virtualização e comunicação via protocolos Prof. MSc. Hugo Souza Nesta primeira parte sobre os Processos Distribuídos iremos abordar: Processos e a comunicação

Leia mais

4 Estrutura do Sistema Operacional. 4.1 - Kernel

4 Estrutura do Sistema Operacional. 4.1 - Kernel 1 4 Estrutura do Sistema Operacional 4.1 - Kernel O kernel é o núcleo do sistema operacional, sendo responsável direto por controlar tudo ao seu redor. Desde os dispositivos usuais, como unidades de disco,

Leia mais

TRABALHO COM GRANDES MONTAGENS

TRABALHO COM GRANDES MONTAGENS Texto Técnico 005/2013 TRABALHO COM GRANDES MONTAGENS Parte 05 0 Vamos finalizar o tema Trabalho com Grandes Montagens apresentando os melhores recursos e configurações de hardware para otimizar a abertura

Leia mais

DSI é o processo cujo objetivo é introduzir mudanças num sistema de informação, com objetivo de melhorar o seu desempenho.

DSI é o processo cujo objetivo é introduzir mudanças num sistema de informação, com objetivo de melhorar o seu desempenho. - DSI DSI é o processo cujo objetivo é introduzir mudanças num sistema de informação, com objetivo de melhorar o seu desempenho. Preocupação: Problema técnicos Mudança na natureza e conteúdo do trabalho

Leia mais

MSF- MICROSOFT SOLUTIONS FRAMEWORK. Cesar Eduardo Freitas Italo Alves

MSF- MICROSOFT SOLUTIONS FRAMEWORK. Cesar Eduardo Freitas Italo Alves MSF- MICROSOFT SOLUTIONS FRAMEWORK Cesar Eduardo Freitas Italo Alves A ORIGEM DO MSF (MICROSOFT SOLUTIONS FRAMEWORK) Baseado na experiência da empresa na construção de softwares como Office e Windows e

Leia mais

Estudo de Viabilidade

Estudo de Viabilidade Estudo de Viabilidade PGE: Plastic Gestor Empresarial Especificação de Requisitos e Validação de Sistemas Recife, janeiro de 2013 Sumário 1. Motivação... 1 2. Introdução: O Problema Indentificado... 2

Leia mais

BRAlarmExpert. Software para Gerenciamento de Alarmes. BENEFÍCIOS obtidos com a utilização do BRAlarmExpert:

BRAlarmExpert. Software para Gerenciamento de Alarmes. BENEFÍCIOS obtidos com a utilização do BRAlarmExpert: BRAlarmExpert Software para Gerenciamento de Alarmes A TriSolutions conta com um produto diferenciado para gerenciamento de alarmes que é totalmente flexível e amigável. O software BRAlarmExpert é uma

Leia mais

Programação de Computadores II TCC-00.309 Turma A-1

Programação de Computadores II TCC-00.309 Turma A-1 Material elaborado pelo prof. Leandro A. F. Fernandes com contribuições dos profs. Anselmo A. Montenegro e Marcos Lage Programação de Computadores II TCC-00.309 Turma A-1 Conteúdo Introdução ao Ambiente

Leia mais

On Scalability of Software-Defined Networking

On Scalability of Software-Defined Networking On Scalability of Software-Defined Networking Bruno dos Santos Silva bruno.silva@ic.uff.br Instituto de Computação IC Universidade Federal Fluminense UFF 24 de Setembro de 2015 B. S. Silva (IC-UFF) On

Leia mais

Qualidade de Software

Qualidade de Software Qualidade de Software O software é algo abstrato, pois são as instruções que quando executadas atingem o propósito desejado no sistema computacional. (Algoritmo). As principais características são: Complexidade:

Leia mais

Importância do GED. Implantação de um Sistema de GED

Importância do GED. Implantação de um Sistema de GED Implantação de um Sistema de GED Gerenciamento Eletrônico de Documentos Importância do GED O GED tem uma importante contribuição na tarefa da gestão eficiente da informação; É a chave para a melhoria da

Leia mais

Projeto de Arquitetura

Projeto de Arquitetura Projeto de Arquitetura Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 11 Slide 1 Objetivos Apresentar projeto de arquitetura e discutir sua importância Explicar as decisões de projeto

Leia mais

OTIMIZAÇÃO E PERFORMANCE DE BANCO DE DADOS UTILIZANDO SQL TUNING

OTIMIZAÇÃO E PERFORMANCE DE BANCO DE DADOS UTILIZANDO SQL TUNING OTIMIZAÇÃO E PERFORMANCE DE BANCO DE DADOS UTILIZANDO SQL TUNING Jéssica Correa dos Santos¹, Alexandre Paulino Sierra da Silva¹ ¹Universidade Paranaense (Unipar) Paranavai-PR-Brasil jessica_07correa@hotmail.com,

Leia mais

FAT32 ou NTFS, qual o melhor?

FAT32 ou NTFS, qual o melhor? FAT32 ou NTFS, qual o melhor? Entenda quais as principais diferenças entre eles e qual a melhor escolha O que é um sistema de arquivos? O conceito mais importante sobre este assunto, sem sombra de dúvidas,

Leia mais

Capítulo 1. Introdução. 1.1 Linguagens. OBJETIVOS DO CAPÍTULO Ao final deste capítulo você deverá ser capaz de:

Capítulo 1. Introdução. 1.1 Linguagens. OBJETIVOS DO CAPÍTULO Ao final deste capítulo você deverá ser capaz de: i Sumário 1 Introdução 1 1.1 Linguagens....................................... 1 1.2 O que é um Compilador?................................ 2 1.3 Processadores de Programas: Compiladores, Interpretadores

Leia mais

Boas Práticas de Desenvolvimento Seguro

Boas Práticas de Desenvolvimento Seguro Boas Práticas de Desenvolvimento Seguro Julho / 2.012 Histórico de Revisões Data Versão Descrição Autor 29/07/2012 1.0 Versão inicial Ricardo Kiyoshi Página 2 de 11 Conteúdo 1. SEGURANÇA DA INFORMAÇÃO

Leia mais

Glossário Apresenta a definição dos termos, siglas e abreviações utilizadas no contexto do projeto Citsmart.

Glossário Apresenta a definição dos termos, siglas e abreviações utilizadas no contexto do projeto Citsmart. Apresenta a definição dos termos, siglas e abreviações utilizadas no contexto do projeto Citsmart. Versão 1.6 15/08/2013 Visão Resumida Data Criação 15/08/2013 Versão Documento 1.6 Projeto Responsáveis

Leia mais

Programação Orientada a Objetos

Programação Orientada a Objetos Programação Orientada a Objetos Universidade Católica de Pernambuco Ciência da Computação Prof. Márcio Bueno poonoite@marciobueno.com Fonte: Material da Profª Karina Oliveira Introdução ao Paradigma OO

Leia mais

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

Engenharia de Software Introdução. Ricardo Argenton Ramos UNIVASF Engenharia de Software I - Aula 1 Engenharia de Software Introdução Ricardo Argenton Ramos UNIVASF Engenharia de Software I - Aula 1 Tópicos Apresentação da Disciplina A importância do Software Software Aplicações de Software Paradigmas

Leia mais

DISCIPLINA ENGENHARIA DE SOFTWARE Aula 03 Processo Unificado e Desenvolvimento Ágil. Profª Esp.: Maysa de Moura Gonzaga

DISCIPLINA ENGENHARIA DE SOFTWARE Aula 03 Processo Unificado e Desenvolvimento Ágil. Profª Esp.: Maysa de Moura Gonzaga DISCIPLINA ENGENHARIA DE SOFTWARE Aula 03 Processo Unificado e Desenvolvimento Ágil Profª Esp.: Maysa de Moura Gonzaga 2º Semestre / 2011 O Processo Unificado dos autores Ivar Jacobson, Grady Booch e James

Leia mais

1 UML (UNIFIED MODELING LANGUAGE)

1 UML (UNIFIED MODELING LANGUAGE) 1 UML (UNIFIED MODELING LANGUAGE) Segundo Tonsig (2003), para conseguir desenvolver um software capaz de satisfazer as necessidades de seus usuários, com qualidade, por intermédio de uma arquitetura sólida

Leia mais

Considerações no Projeto de Sistemas Cliente/Servidor

Considerações no Projeto de Sistemas Cliente/Servidor Cliente/Servidor Desenvolvimento de Sistemas Graça Bressan Graça Bressan/LARC 2000 1 Desenvolvimento de Sistemas Cliente/Servidor As metodologias clássicas, tradicional ou orientada a objeto, são aplicáveis

Leia mais

Aspectos técnicos do desenvolvimento baseado em componentes

Aspectos técnicos do desenvolvimento baseado em componentes Aspectos técnicos do desenvolvimento baseado em componentes Um novo processo de desenvolvimento O uso de componentes traz mudanças no processo de desenvolvimento Além de desenvolver um produto, queremos

Leia mais

1.2 Tipos de Sistemas Operacionais

1.2 Tipos de Sistemas Operacionais 1.2 Tipos de Operacionais Tipos de Operacionais Monoprogramáveis/ Monotarefa Multiprogramáveis/ Multitarefa Com Múltiplos Processadores 1.2.1 Monoprogramáveis/Monotarefa Os primeiros sistemas operacionais

Leia mais

4 Arquitetura básica de um analisador de elementos de redes

4 Arquitetura básica de um analisador de elementos de redes 4 Arquitetura básica de um analisador de elementos de redes Neste capítulo é apresentado o desenvolvimento de um dispositivo analisador de redes e de elementos de redes, utilizando tecnologia FPGA. Conforme

Leia mais

Consolidação inteligente de servidores com o System Center

Consolidação inteligente de servidores com o System Center Consolidação de servidores por meio da virtualização Determinação do local dos sistemas convidados: a necessidade de determinar o melhor host de virtualização que possa lidar com os requisitos do sistema

Leia mais

Memory Leak em Java?

Memory Leak em Java? 1 Memory Leak em Java? Saiba como memory leaks se manifestam em Java e como evitá-los Sobre o Autor Carlos Eduardo G. Tosin (carlos@tosin.com.br) é formado em Ciência da Computação pela PUC-PR, pós-graduado

Leia mais

Especificação Suplementar

Especificação Suplementar Especificação Suplementar Versão Histórico de Revisões Data Versão Descrição Autor 29/10/2014 2.0 2.1 funcionalidade e segurança de M. Vinícius acesso 30/10/2014

Leia mais

GERENCIAMENTO CENTRALIZADO DELL POWERVAULT DL 2000 BASEADO EM TECNOLOGIA SYMANTEC

GERENCIAMENTO CENTRALIZADO DELL POWERVAULT DL 2000 BASEADO EM TECNOLOGIA SYMANTEC GERENCIAMENTO CENTRALIZADO DELL POWERVAULT DL 2000 BASEADO EM TECNOLOGIA SYMANTEC RESUMO EXECUTIVO O PowerVault DL2000, baseado na tecnologia Symantec Backup Exec, oferece a única solução de backup em

Leia mais

Objetivos. Processos de Software. Tópicos abordados. O processo de software. Modelos genéricos de modelos de processo de software.

Objetivos. Processos de Software. Tópicos abordados. O processo de software. Modelos genéricos de modelos de processo de software. Processos de Software Objetivos Apresentar os modelos de processo de software Conjunto coerente de atividades para especificar, projetar, implementar e testar s de software Descrever os diferentes modelos

Leia mais

ANÁLISE E IMPLEMENTAÇÃO DE ALGORITMOS DE COMPRESSÃO DE DADOS. Maria Carolina de Souza Santos 1 Orientador: Prof.º Ms.

ANÁLISE E IMPLEMENTAÇÃO DE ALGORITMOS DE COMPRESSÃO DE DADOS. Maria Carolina de Souza Santos 1 Orientador: Prof.º Ms. ANÁLISE E IMPLEMENTAÇÃO DE ALGORITMOS DE COMPRESSÃO DE DADOS Maria Carolina de Souza Santos 1 Orientador: Prof.º Ms. Mauricio Duarte 2 Centro Universitário Euripides de Marilia UNIVEM FATEC Faculdade de

Leia mais

A Evolução dos Sistemas Operacionais

A Evolução dos Sistemas Operacionais Capítulo 3 A Evolução dos Sistemas Operacionais Neste capítulo, continuaremos a tratar dos conceitos básicos com a intensão de construirmos, agora em um nível mais elevado de abstração, o entendimento

Leia mais

Java de missão crítica. Um artigo técnico da Oracle

Java de missão crítica. Um artigo técnico da Oracle Java de missão crítica Um artigo técnico da Oracle Java de missão crítica A família de produtos Oracle JRockit é um portfólio abrangente de soluções de tempo de execução de Java que aproveita a JVM básica

Leia mais

Processos (Threads,Virtualização e Migração de Código)

Processos (Threads,Virtualização e Migração de Código) Processos (Threads,Virtualização e Migração de Código) Roteiro Processos Threads Virtualização Migração de Código O que é um processo?! Processos são programas em execução. Processo Processo Processo tem

Leia mais

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br Introdução O computador como ferramenta indispensável: Faz parte das nossas vidas; Por si só não faz nada de útil; Grande capacidade de resolução

Leia mais

1º Estudo Dirigido. Capítulo 1 Introdução aos Sistemas Operacionais

1º Estudo Dirigido. Capítulo 1 Introdução aos Sistemas Operacionais 1º Estudo Dirigido Capítulo 1 Introdução aos Sistemas Operacionais 1. Defina um sistema operacional de uma forma conceitual correta, através de suas palavras. R: Sistemas Operacionais são programas de

Leia mais

AULA 13 - Gerência de Memória

AULA 13 - Gerência de Memória AULA 13 - Gerência de Memória omo sabemos, os computadores utilizam uma hierarquia de memória em sua organização, combinando memórias voláteis e não-voláteis, tais como: memória cache, memória principal

Leia mais

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

A Linguagem Algorítmica Estrutura de Repetição. Ex. 2 Estrutura de Repetição. Ex. 2 A ESTRUTURA Enquanto faça{} É MELHOR UTILIZADA PARA SITUAÇÕES ONDE O TESTE DE CONDIÇÃO (V OU F) PRECISA SER VERIFICADO NO INÍCIO DA ESTRUTURA DE REPETIÇÃO.

Leia mais

REPROJETO DA ORGANIZAÇÃO COM SISTEMAS DE INFORMAÇÃO

REPROJETO DA ORGANIZAÇÃO COM SISTEMAS DE INFORMAÇÃO Capítulo 12 REPROJETO DA ORGANIZAÇÃO COM SISTEMAS DE INFORMAÇÃO 12.1 2003 by Prentice Hall OBJETIVOS De que forma o desenvolvimento de um novo sistema poderia mudar a maneira de uma organização trabalhar?

Leia mais

Sistemas de Informação I

Sistemas de Informação I + Sistemas de Informação I Processo de software I Ricardo de Sousa Britto rbritto@ufpi.edu.br + O que é Engenharia de Software n Definição dada pela IEEE [IEE93]: n Aplicação de uma abordagem sistemática,

Leia mais

ALESSANDRO PEREIRA DOS REIS PAULO CESAR CASTRO DE ALMEIDA ENGENHARIA DE SOFTWARE - CAPABILITY MATURITY MODEL INTEGRATION (CMMI)

ALESSANDRO PEREIRA DOS REIS PAULO CESAR CASTRO DE ALMEIDA ENGENHARIA DE SOFTWARE - CAPABILITY MATURITY MODEL INTEGRATION (CMMI) ALESSANDRO PEREIRA DOS REIS PAULO CESAR CASTRO DE ALMEIDA ENGENHARIA DE SOFTWARE - CAPABILITY MATURITY MODEL INTEGRATION (CMMI) APARECIDA DE GOIÂNIA 2014 LISTA DE TABELAS Tabela 1 Áreas de processo por

Leia mais

Kerio Exchange Migration Tool

Kerio Exchange Migration Tool Kerio Exchange Migration Tool Versão: 7.3 2012 Kerio Technologies, Inc. Todos os direitos reservados. 1 Introdução Documento fornece orientações para a migração de contas de usuário e as pastas públicas

Leia mais

Sistemas Distribuídos

Sistemas Distribuídos Sistemas Distribuídos Modelo Cliente-Servidor: Introdução aos tipos de servidores e clientes Prof. MSc. Hugo Souza Iniciando o módulo 03 da primeira unidade, iremos abordar sobre o Modelo Cliente-Servidor

Leia mais

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

Engenharia de Software Introdução. Ricardo Argenton Ramos UNIVASF Engenharia de Software I - Aula 1 Engenharia de Software Introdução Ricardo Argenton Ramos UNIVASF Engenharia de Software I - Aula 1 Tópicos Apresentação da Disciplina A importância do Software Software Aplicações de Software Paradigmas

Leia mais

Padrões Arquiteturais e de Integração - Parte 1

Padrões Arquiteturais e de Integração - Parte 1 1 / 58 - Parte 1 Erick Nilsen Pereira de Souza T017 - Arquitetura e Design de Aplicações Análise e Desenvolvimento de Sistemas Universidade de Fortaleza - UNIFOR 11 de fevereiro de 2015 2 / 58 Agenda Tópicos

Leia mais

ENGENHARIA DE SOFTWARE/ SISTEMAS DE SOFTWARE

ENGENHARIA DE SOFTWARE/ SISTEMAS DE SOFTWARE ENGENHARIA DE SOFTWARE/ SISTEMAS DE SOFTWARE CMP1280/CMP1250 Prof. Me. Fábio Assunção Introdução à Engenharia de Software SOFTWARE Programa de computador acompanhado dos dados de documentação e configuração

Leia mais

Guia de Atualização PROJURIS WEB 4.5. Manual do Técnico Atualização - ProJuris Web 4.5. Manual do Técnico Atualização - ProJuris Web 4.

Guia de Atualização PROJURIS WEB 4.5. Manual do Técnico Atualização - ProJuris Web 4.5. Manual do Técnico Atualização - ProJuris Web 4. Guia de Atualização PROJURIS WEB 4.5 Por: Fabio Pozzebon Soares Página 1 de 11 Sistema ProJuris é um conjunto de componentes 100% Web, nativamente integrados, e que possuem interface com vários idiomas,

Leia mais

Análises Geração RI (representação intermediária) Código Intermediário

Análises Geração RI (representação intermediária) Código Intermediário Front-end Análises Geração RI (representação intermediária) Código Intermediário Back-End Geração de código de máquina Sistema Operacional? Conjunto de Instruções do processador? Ambiente de Execução O

Leia mais

MANUAL DE IMPLANTAÇÃO SISTEMA DE INVENTÁRIO CACIC GOVERNO FEDERAL SOFTWARE PÚBLICO

MANUAL DE IMPLANTAÇÃO SISTEMA DE INVENTÁRIO CACIC GOVERNO FEDERAL SOFTWARE PÚBLICO MANUAL DE IMPLANTAÇÃO SISTEMA DE INVENTÁRIO CACIC Configurador Automático e Coletor de Informações Computacionais GOVERNO FEDERAL SOFTWARE PÚBLICO software livre desenvolvido pela Dataprev Sistema de Administração

Leia mais

Engenharia de Software

Engenharia de Software Engenharia de Software Conceitos e Metodologias para Desenvolvimento de Software Cascata, Prototipação, Espiral e RUP Prof. MSc. Edilberto Silva prof.edilberto.silva@gmail.com http://www.edilms.eti.br

Leia mais