Como a equipe de controle de qualidade pode testar a lógica de cache que não pode ver?


33

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?




5
Trabalho no desempenho o dia todo e "como o controle de qualidade pode testar sua alteração?" é uma pergunta que me fazem constantemente.
Brandon

1
Bem, geralmente um cache visa acelerar uma operação, armazenando resultados na memória que, de outra forma, seriam provenientes de outra fonte (banco de dados, servidor remoto, método computacionalmente caro, etc.). Portanto, medir o tempo que as coisas devem levar ao atingir o cache parece a maneira mais simples. Também verifique se há problemas de cache obsoletos (atualizações para os dados reais não aparecem porque a versão anterior ainda está em cache)
GordonM

Respostas:


37

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.


+1 para testar o desempenho em vez de armazenar em cache. Que valor comercial é o cache por conta própria? (Nenhuma.) Certamente você está trabalhando para obter um impacto notável em algo - por que mais você gastaria o tempo implementando-o? Teste para esse impacto.
Alexanderbird #

74

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:

  • Que o sistema, após a introdução do cache, ainda esteja correto. Isso significa que eles devem tentar induzir o cache a fornecer dados obsoletos, algo que o controle de qualidade pode verificar e garantir que nada mais foi quebrado.
  • Agora, o sistema atende aos limites de desempenho que não estavam sendo cumpridos quando você decidiu melhorar o desempenho. Eles podem comparar as medidas antigas e compará-las com as novas.

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.


1
Afirmar que o controle de qualidade não se importa com a maneira como você resolve o problema é uma visão muito simplista do interesse do controle de qualidade. Eles se preocupam se você realmente melhorou o desempenho, introduziu dívida técnica, risco ou defeitos adicionais etc.
Eric

4
@ Eric No desenvolvimento de software, "QA" como um grupo geralmente não se refere a desenvolvedores / engenheiros. A dívida técnica é uma preocupação do desenvolvedor / engenheiro (e uma preocupação de gerenciamento, pois pode afetar cronogramas, custos, etc.). O mesmo vale para o risco. O trabalho do controle de qualidade é garantir que o software atenda aos requisitos (e possivelmente ajude incidentalmente no processo de eliminar os requisitos que não eram claros). Se eles se preocupam com a implementação, deve ser apenas um meio de descobrir maneiras criativas de quebrar o sistema.
jpmc26

3
@ Eric Não estou confundindo nada. "QA" se referem aos testadores em software. Você está interpretando o termo de maneira tão ampla que deve incluir toda a empresa que desenvolve o software e até o cliente, se for um sistema criado sob medida para eles, pois todos têm uma mãozinha na qualidade.
jpmc26

1
@ Eric Por favor, não me faça discutir como a linguagem e a semântica funcionam com você. Eu o desafio a encontrar 5 instâncias neste StackExchange em que o termo é usado dessa maneira em menos de 30 minutos. Além disso, mesmo por essa definição, o melhor que um grupo de controle de qualidade separado pode fazer para resolver problemas além do próprio produto é impor políticas aos desenvolvedores e, quando a política e o processo são elevados acima da produção de bons produtos, você geralmente acaba com produtos ruins. Além disso, posso garantir que as pessoas com "QA" com quem trabalho mais definitivamente são testadoras e têm pouco a dizer sobre meu processo de desenvolvimento.
jpmc26

4
@ Eric: não há nada que impeça uma empresa ou grupo de pessoas de definir "QA" para ter uma visão mais holística. No entanto, na minha experiência (em 5 empresas muito diferentes), o estágio de controle de qualidade, como nomeado - e aqueles que se especializam nele - no desenvolvimento de software, geralmente se concentra no teste de comportamento do sistema em caixa preta. Embora também possamos ter "Controle de qualidade", "Kwalitee" e nomes mais inventados para cobrir ângulos de especialistas em questões mais amplas de qualidade.
Neil Slater

3

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.


3

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 curlcom um script ruby.

Para ser claro

  • O teste de desempenho da linha de base é para testar o tempo que uma solicitação faz.
  • O teste de carga é semelhante ao teste de desempenho, mas analisa a resposta quando o sistema também está sob carga de outras solicitações.

Você também pode achar úteis os seguintes links:


2

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.


1

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 ...


0

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.)


0

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.


-4

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.


3
Não sei ao certo o que você está dizendo ou o que sua resposta diz que não está nas sete respostas anteriores.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.