Skip to content

Instantly share code, notes, and snippets.

@eltonvs
Created June 23, 2017 14:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eltonvs/9d001a508775804ce41e90cde52f2ccd to your computer and use it in GitHub Desktop.
Save eltonvs/9d001a508775804ce41e90cde52f2ccd to your computer and use it in GitHub Desktop.

Desempenho e Otimização de Software

Desempenho de software

Geralmente negligenciado pelos desenvolvedores devido a:

  • Falta de experiência
  • Crença na alta capacidade da plataforma subjacente
  • Postergação para etapas posteriores ao desenvolvimento propriamente dito
  • Inerente complexidade e controvérsia

Precisa levar em consideração

  • Antendimento preciso e satisfatório a requisitos funcionais e não funcionais
  • projeto estrutural e comportamental
  • implementação e/ou escolha de estruturas de dados e algoritmos
  • interaçãoes com a plataforma (hardware + SO) subjacente
  • questões de compilação e execução

Program Optimization

É o processo de modificação de um sistema de software para torná-lo mais eficiente ou utilizar menos recursos em algum aspecto. Em geral, um programa de compudator deve ser otimizado de forma que execute mais rapidamente, ou que seja capaz de operar com uma utilização menor de memória ou outros recursos, ou diminuir o uso da bateria.

De maneira geral, uma otimização incui identificar possíveis ou reais gargalos no sistema que estejam prejudicando seu desempenho e tentar desfazê-los

  • Pode ocorrer em diversos níveis
  • Em projetos de maior longevidade, pode ser realizada em ciclos
  • Se muito postergada, pode incorrer em mudanças significativas ou mesmo uma reescrita completa do código (nem sempre pode ser alcançada nas fases finais do desenvolvimento)

Níveis de otimização

  • Arquitetura e projeto detalhado
  • Algoritmos e estruturas de dados
  • Código fonte
  • Construção (building)
  • Compilação
  • Montagem (assembly)
  • Execução (otimização dinamica)

Falácias

  • Reduzir linhas de código em linguagem de programação de alto nível -> otimiza
  • Algumas operações são provavelmente mais rápidas que outras
  • A otimização deve ser feita durante a codificação
  • Um programa rápido é tão importante quanto um programa correto
  • Problemas de desempenho são raros
  • Recursos computacionais são de fácil e barata aquisição
  • Dá muito trabalho fazer otimização
  • Dá pra otimizar depois

Trade-offs

Otimizar um programa pode

  • Tornar sua compreensão mais complicada
  • Torná-lo propenso a erros
  • Reduzir manutenibilidade
  • Prejudicar outros aspectos de qualidade
  • Ser algo muito prematuro
  • Representar uma tarefa não trivial por demandar uma análise precisa de desempenho

Estratégia para otimização de código

  • Fazer um backup da versão atual do programa
  • Realizar medições para identificar gargalos de desempenho
  • Determinar a causa do problema de desempenho
  • Planejar como a otimização será feita e verificar eventuais efeitos
  • Realizar as modificações necessárias
  • Realizar novas medições para verificar se o gargalo foi resolvido
  • Identificar se as modificações não foram mais prejudiciais que benéficas
  • Realizar testes para verificar se n foram introduzidos bugs

Técnicas para otimização de código

  • As técnicas de otimização de código focam em ganhos de desempenho, que podem ser alcançados mediante modificações no código fonte
  • A otimização de código diz respeito a alterações de menor escala, não a alterações de projeto, de maior impacto
  • Manipulação lógica de estuturas condicionais e de repetição
  • Aglomeração ou desdobramento de laços (em laços aninhados, o laço executado mais vezes deve ser o mais interno)
  • Transformações de dados (tipos adequados ao domínio, tipagem de acordo com a utilização real, evitando castings)

Resumo

  • O desempenho é apenas um aspecto da qualidade geral do software, mas geralmente não é o mais importante.
  • Realizar medições quantitativas é fundamental para endereçar a questão de desempenho
  • Normalmente são necessárias múltiplas iterações para de obter as melhorias de desempenho desejadas por meio da otimização de código
  • A melhor maneira de se preparar para o trabalho de otimização durante a codificação inicial é escrever um código claro, compreensível e de fácil manutenibilidade
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment