Freigeben über


Dores Constantes

Nestes últimos anos visitei muitos fabricantes de software tentando ajudá-los com revisões informais da arquitetura. Tenho agora uma lista de erros mais comuns que encontrei e que atrapalham o desempenho na produção:

  • Excesso de comunicação entre camadas;
  • Excesso de dados passando entre camadas (ex.: ViewState);
  • Excesso de dados em variáveis de sessão (onde o mais comum é trazer para a memória todo o resultado de uma query, mesmo que de milhões de linhas, para então fazer a paginação a fim de apresentar em um grid);
  • Locks, muitos locks no banco de dados. Os principais motivos costumam ser:
    • Erros em queries;
    • Falta de uso de hints, quando adequados, como o de ReadOnly;
    • Iniciar e prender cedo demais os recursos, ou liberá-los tarde demais;
  • Excesso de loops com queries, ao invés de fazer uma única query mais complexa (sei que é um tipo de excesso de comunicação entre camadas, mas vale a pena sublinhar);
  • Excesso de passagem de parâmetros por valor. Exemplo: passar por valor um string xml para métodos que extraem certos valores de tags, como conta corrente ou outro;
  • Falta de análise do custo dos algoritmos utilizados;
  • Design ruim do modelo do Banco de Dados (falta de índices, e erros graves no modelo de entidades e relacionamentos);

Para estas dores, sempre recomendo a leitura do livro do Patterns&Practices: Improving .NET Application Performance and Scalability. Mesmo antigo, ainda funciona.

Por outro lado, do lado da governança, eu tenho encontrado muita preocupação com processos de controle e pouco com o de melhoria da produção. É espantoso ver empresas com CMMI alto que não têm como costume hábitos simples e baratos como revisão de código e design, fazer um capacity planning, build e teste diário, teste de stress e análise de risco. Pior: muitas não investem na automação da burocracia destes processos, tornando-os muito caros. Parecem preferir o gasto maior ao longo do tempo do que um investimento inicial alto mais de retorno certo.

Deixei a universidade em 92 e neste tempo pouco se falava sobre estes temas. Minha impressão é que a dor continua.

PS.: Para quem quiser saber mais o como comparar o Retorno de Investimento de um CMMI contra um mero processo de revisão, recomendo o site do David Rico.

Comments

  • Anonymous
    June 23, 2008
    Grande Otávio, Parabéns pelo post que traduz uma completa realidade nos projetos de software.
  • Excesso de camadas (Por que complicar tanto).
  • Falta de padrões de nomes (Cada um faz do seu jeito).
  • Métodos muito grandes (Quase um sistema).
  • Criação de outras soluções mesmo já tendo a funcionalidade. (Por que refazer o que já está pronto). Quanto ao exemplo que você citou sobre session. Eu já tive uma oportunidade 100% fiel ao comentado durante uma avaliação de um projeto onde o cliente carregava uma base super pesada com “todas as colunas” e colocava tudo na sessão (web) para “ver” 10 registros no grid com ” 5 colunas”. Quando medimos o trafego desnecessário e o consumo de memória * a quantidade de usuários da aplicação.  O cliente se assustou :)
  • Anonymous
    June 29, 2008
    The comment has been removed