Quero começar dizendo que tudo o que faço é o SQL Server, e esses são os exemplos que dou. No entanto, em geral, isso se aplica a qualquer forma de código, independentemente do sistema.
Vamos começar detalhando um pouco isso.
Atualizações
Você tem um sistema e está prestes a atualizar alguns ou todos. Por exemplo, atualizando uma instância do SQL Server 2012 para 2014. Nesse momento, o teste é essencial. Infelizmente, testar todas as partes de um aplicativo pequeno provavelmente não será possível. Nesse ponto, eu faria o que chamaria de teste "funcional". O sistema básico está funcionando. Execute suas tarefas comuns do início ao fim. Não teste todas as opções, apenas o caminho principal.
Ao fazer uma atualização do SQL Server, também há algumas leituras necessárias . Basicamente, você deseja ler a Backward Compatibility
entrada para a nova versão ( aqui é a de 2014 ) e verifique se não possui nada em nenhuma das listas (alterações recentes, alterações de comportamento etc.).
Código da aplicação
Aqui estamos analisando o código do aplicativo novo / alterado (porque é claro que qualquer coisa existente já foi testada, certo?). Nesse caso, tudo deve ser testado. Você deve ter casos de teste configurados com antecedência e executar pelo menos a maioria dos recursos afetados. De preferência, nesse ponto, você também deve solicitar que outra pessoa faça uma verificação semelhante. Esse código estará em vigor, provavelmente por um período bastante longo, e usado por um grande número de pessoas. Você quer ter certeza de que funciona e funciona bem.
Uma das coisas que realmente pode ajudar nisso é gerar um conjunto unit tests
facilmente repetível. Steve Jones recomenda o uso do tSQLt para testar seu código TSQL (só tenho medo do SQL Server). Mas, ao fazer isso, você pode executar rapidamente um conjunto fixo de testes e realmente ajudará no teste de regressão (testando tudo, digamos antes de fazer uma atualização).
Recursos / Configurações
Mais do que alterações no código do aplicativo, você deseja testar novos recursos e alterações na configuração. Se, por exemplo, você decidir começar a trabalhar com índices columnstorepela primeira vez, você precisará testar todos os trechos de código que tocam nas tabelas afetadas. Use os testes de unidade que você gerou para testar seu aplicativo. Esses recursos provavelmente são novos para você (e possivelmente novos na plataforma) e provavelmente terão algumas dicas que você não esperava. Quanto às alterações na configuração, você está falando sobre algo que pode afetar todo o sistema, possivelmente significativamente. A regra geral é testar e testar com cuidado. Existem algumas mudanças que você realmente não verá até entrar em um sistema ativo (possivelmente apenas no seu sistema de produção), mas isso não é desculpa para não experimentá-las primeiro em um ambiente de teste.
Consultas ad hoc que referenciam / afetam os dados do usuário
Quando você tem um código que afeta os dados do usuário, geralmente precisa testá-lo, mesmo e talvez especialmente porque é Ad Hoc
. Agora, dito isso, se você estiver executando o mesmo trecho de código repetidamente, apenas com parâmetros diferentes, provavelmente não precisará se preocupar em testar todas as vezes.
Por exemplo, você precisa excluir um ou mais anúncios da tabela AdList a cada trimestre.
DELETE FROM AdList WHERE AdName IN ('January 2015 Ads','February 2015 Ads','March 2015 Ads')
Nesse ponto, você já testou o código (você está apenas alterando as cadeias de caracteres fixas) e provavelmente está bastante seguro apenas executando o código (supondo que você tenha bons backups por precaução).
Uma maneira fácil de testar a DELETE
, UPDATE
ou INSERT
é alterá-los para um SELECT e executá-los, confirme se o número e o tipo de linhas que você espera são retornados.
Você pode pensar que não precisa testar SELECT
s porque eles realmente não alteram nenhum dado. No entanto, você está executando o código por um motivo, certo? Digamos que você esteja pesquisando seu gerente, que por sua vez entregará esses dados ao gerente e assim por diante. Você faz um teste para garantir que não está obtendo os dados errados (ou impedindo que outros colhem seus dados).
Consultas ad hoc que fazem referência / afetam os dados do sistema
Esta é possivelmente a única exceção à regra "testar tudo". Você está executando consultas de informações nos dados do sistema. O importante aqui é recuperar os dados que você espera. Se a consulta for algo simples (consultar uma visualização do sistema), provavelmente você estará bem desde que tenha verificado o que realmente significa a visualização / colunas. Se a consulta for complexa (digamos, atingindo 3 ou 4 visualizações do sistema com cálculos nas colunas retornadas), convém executar alguns testes apenas para garantir que você recupere os dados esperados.
Sumário
Em resumo, sim, você deseja testar tudo. Se é importante o suficiente para você escrever e executá-lo, é importante o suficiente para você testar. Isso não significa que você precise gastar uma quantidade enorme de tempo testando cada ramo de cada linha de código. Mas algum nível de teste precisa ser feito.
O teste de unidade automatizado é seu amigo aqui. Com o advento de DevOps
e Continuous Integration
você verá mais e mais aplicativos e métodos para testar seu código de maneira rápida e fácil. É claro que isso exige um bom ambiente de teste e dados para acompanhá-lo, mas essa é uma discussão totalmente diferente.