Acabei de implementar uma camada de cache no meu aplicativo da web e agora estou me perguntando como o controle de qualidade deve testá-lo, pois o cache é transparente para o usuário.
Uma idéia que tenho é colocar o log nos métodos que invocam o código que preenche o cache e registrar quando um objeto é retirado do cache e quando requer recreação do banco de dados; então, os testadores podem ver os logs para ver se, por exemplo, um determinado objeto é recarregado do banco de dados a cada 10 minutos, em vez de todas as visualizações de página.
Mas alguém pode sugerir algumas práticas melhores para essa situação?
Respostas:
Uma pergunta é se o próprio cache é realmente um requisito que deve ser testado pelo controle de qualidade. O armazenamento em cache melhora o desempenho, para que eles possam testar a diferença de desempenho para garantir que atenda a algum requisito.
Mas é uma boa ideia fazer alguns testes sobre o cache, quem for responsável por isso. Usamos contadores de desempenho. Se o seu sistema de cache tira proveito disso, eles são diretos. Se houver alguma maneira de obter uma contagem do próprio cache, essa é outra opção.
Usar sua abordagem também é legal. Se algum deles estiver envolvido em testes automatizados que verificam os resultados, ninguém precisará procurar nos logs para encontrar respostas.
fonte
Você implementou um cache (presumo) porque o sistema não estava funcionando bem o suficiente. Isso é algo que é relevante para o usuário. Aqui estão algumas coisas que o controle de qualidade pode verificar:
Lembre-se de que os usuários (e, por extensão, o controle de qualidade) não se importam com a maneira como você resolveu um problema. Eles só se importam que o problema tenha sido resolvido e não tenha criado novos problemas. Isso é verdade se você implementou o armazenamento em cache, melhorou a análise de String, fez uma atualização de hardware ou polvilhou poeira mágica de fadas no servidor.
fonte
Enterrar uma lógica comercial importante ou um estado do sistema em uma caixa preta dificulta a verificação do comportamento correto do sistema. É mais fácil testar exaustivamente o comportamento de um único componente no sistema do que todo o sistema. Sou a favor de expor essas coisas explicitamente por meio de algum mecanismo, para que possa ser testado por unidade / regressão / integração / controle de qualidade de alguma maneira significativa.
Uma opção com um cache seria expor uma página especial que fornece alguns detalhes sobre o cache (conteúdo, estado, etc.). Isso pode ajudar na depuração no desenvolvimento e potencialmente na produção. O controle de qualidade também pode usar esta página para criar casos de teste para o cache se eles receberem detalhes sobre qual é o comportamento esperado do cache. O uso de contadores de desempenho e / ou arquivos de log para documentar explicitamente o comportamento do cache é outra abordagem menos visível, mas viável.
Observe que essa abordagem não substitui o teste de desempenho de ponta a ponta. Este é um mecanismo para garantir que o próprio cache se comporte corretamente. O teste de desempenho deve ser usado para determinar se o cache tem o efeito pretendido no desempenho.
Observe também que a troca de componentes do sistema por novos implementando a mesma interface, como a introdução de um cache, pode ser uma mudança desestabilizadora e enganosamente complexa. Com o exemplo de cache, você está introduzindo o estado no que era anteriormente sem estado, o que pode criar bugs mais difíceis de encontrar ou reproduzir. Essa mudança deve sempre ser acompanhada de testes de regressão completos para verificar o comportamento esperado do sistema.
fonte
Teste o desempenho, conforme indicado na resposta de Andy.
Descobri que o maior obstáculo para implementar o armazenamento em cache (e desempenho) em muitas organizações é na verdade ter um ambiente em que você pode fazer bons testes de desempenho e executar testes para vários testes de carga e desempenho do mundo real.
Para isso, você deve configurar um ambiente de teste de desempenho que, o mais próximo possível e permitindo custos, espelhe a produção. Provavelmente NÃO será o seu ambiente de desenvolvimento atual, que deve ser menor e mais independente para permitir o desenvolvimento rápido de aplicativos. Os ambientes de desenvolvimento também tendem a usar menos o cache e, portanto, não representam bem a produção para testes de desempenho.
No ambiente de teste de desempenho, o aplicativo deve estar em execução no 'modo' de produção. Se houver produção, o conjunto de conexões com o banco de dados e o cache devem ser configurados para um ambiente de produção, etc.
Você também deve considerar uma ferramenta para ajudar no teste de carga.
O jmeter é muito popular, embora eu ache bastante hostil e primitivo de usar.
Outra rota que usei é apenas url
curl
com um script ruby.Para ser claro
Você também pode achar úteis os seguintes links:
fonte
Lembre-se de fazer com que os testadores reiniciem os servidores e verifique se os dados inseridos ainda estão lá. Eu vi um sistema que tinha muitos meses de testes, falha quando isso era feito!
A parte mais difícil de testar é que, no entanto, os dados são atualizados, nunca há resultados desatualizados retornados do cache.
Isso pode ser parcialmente ajudado, sempre usando os dados no cache para preencher a página de confirmação que um usuário vê depois de fazer uma alteração. Por exemplo, não use o objeto que você usou para atualizar o banco de dados, mas solicite os dados do cache, que depois solicitam ao banco de dados. Um pouco mais lento, mas muito mais propenso a aparecer erros mais rapidamente.
fonte
Esta, na verdade, tem uma resposta muito direta e está relacionada ao nível de armazenamento em cache. O que você observará quando o armazenamento em cache estiver correto é a ausência de solicitações no destino das solicitações. Portanto, tudo se resume à frase de controle de qualidade hackneyed de "resultados esperados".
Se estiver implementando um cache na camada da web, espero que os itens sujeitos ao cache sejam exibidos apenas uma vez para cada sessão de usuário testada (se estiver implementando o cache do cliente) ou uma vez para vários usuários (se estiver implementando um cache no estilo CDN). Se você estiver implementando um cache na camada de dados para obter resultados comuns, esperaria ver uma alta taxa de acertos de cache na sua camada de armazenamento em cache, juntamente com uma ausência de consultas no log de perfil da camada de dados.
etc ...
fonte
Algumas coisas são melhor testadas por um programador, talvez aquele que escreveu o código, usando testes de unidade. Testar a correção do seu código de cache é uma dessas coisas. (Pela maneira como você faz essa pergunta, presumo que seu pessoal de controle de qualidade trate o aplicativo como uma "caixa preta" e teste-o por meio de sua interface externa.)
fonte
A lógica de cache é algo que deve ser testado em unidade pelo desenvolvedor, pois o controle de qualidade faz principalmente o teste de caixa preta.
O controle de qualidade se preocuparia apenas com os aspectos de desempenho ou com qualquer correção que você implementasse, assim, você pode fornecer ao mecanismo de controle de qualidade um mecanismo para ativar / desativar o cache ou qualquer mecanismo usado para melhorar o desempenho e, em seguida, eles podem verificar a diferença de desempenho. É claro que o controle de qualidade também pode apenas verificar uma versão antiga em relação à versão com melhor desempenho.
fonte
Quando eu estava testando a solução de cache, implementamos o que testamos basicamente o desempenho. Fizemos essa solução de cache para resultados XML e, após o cache, leva muito tempo para dar a resposta. Também verificamos isso no log do servidor, verificando as entradas do log.
fonte