Por que os programadores precisam de testes?
Os próximos níveis serão dedicados a testes da maneira que os programadores precisam . Mas primeiro, vamos descobrir o que é o teste e por que ele é necessário.
Com relação ao software, podemos dizer que a tarefa do teste é verificar se o programa:
- faz o que ela tem que fazer
- não faz o que não deveria fazer
O segundo ponto, aliás, não é menos importante que o primeiro, mas mais sobre isso depois.
Vamos começar com o primeiro ponto. O que significa "o programa faz o que deveria fazer"?
Primeiro, alguém precisa fazer uma lista de todos os casos de uso do programa. Em segundo lugar, eles precisam descrever como o programa deve funcionar, como o usuário deve se comportar e quais resultados são esperados. Você não pode continuar mais.
Assim que escrevemos “como o usuário deve se comportar”, toda a ideia de escrever uma boa documentação se desfez. Pessoas não são máquinas, além disso, muitas vezes as pessoas se comportam com o software como bem entendem . Ninguém começa a se familiarizar com a tecnologia estudando as instruções. É um fato.
Portanto, obtemos uma novidade: a peculiaridade do software é que ele possui muitos cenários de trabalho diferentes. Alguns deles são óbvios, outros podem ser documentados, outros podem ser presumidos, outros podem ser adivinhados e os outros 50% nem sequer ocorrerão a você.
Do ponto de vista do programador, a maioria dos bugs não são bugs. Um erro é quando um programa não funciona como deveria ou como esperado. E há muitas situações em que não está claro como o programa deve funcionar, ou cenários que se contradizem ...
Há um número infinito de cenários e sempre haverá casos no produto em que o programa não se comporta conforme o esperado (o programador escreveu o código para apenas algumas dezenas de cenários). Portanto, pode-se argumentar que sempre há bugs em qualquer programa e qualquer produto pode ser melhorado indefinidamente .
Depois disso, tudo se resume a conveniência. Primeiro, o programador corrige os bugs maiores, depois os bugs menores e assim por diante. E, por fim, chega uma fase em que o dono do produto acredita que não é economicamente viável continuar trabalhando nele.
Mas voltando aos erros que todos reconhecem como erros: o programa obviamente faz algo errado, caiu, quebrou algo, etc. Esses erros podem ser divididos condicionalmente em 3 categorias: grandes, médios e pequenos.
E muitas vezes acontece que um programador está trabalhando na correção de bugs médios ou até pequenos, embora ainda haja muitos problemas mais sérios no projeto. Ele simplesmente não os encontrou , então está trabalhando nos maiores que conhece.
Portanto, em qualquer projeto deve haver testadores. Essas pessoas aprendem especificamente a olhar para o produto de diferentes ângulos. Então você pode ver mais cenários do programa. A tarefa deles é encontrar erros e anotá-los (para não encontrar o mesmo erro várias vezes).
O teste é um processo que visa encontrar erros. Esses bugs devem ser encontrados, descritos e priorizados. Somente após a priorização dos erros é que podemos falar em um processo de melhoria de software eficaz.
Lembre-se, o primeiro passo para resolver um problema é reconhecer que existe um problema . Você não pode corrigir um erro que não conhece.
Automação de teste
Acho que todos concordamos que o teste é importante, então vamos olhar para o teste como programadores. Como os programadores veem os testes? Os programadores automatizam o trabalho de outras pessoas. A última profissão a desaparecer será a profissão de programador.
Automatizamos todos os processos que encontramos. Portanto, os testes precisam ser automatizados. E como automatizar a busca de erros? Resposta curta: não. Mas aqui novamente o fato de sermos programadores vem em nosso auxílio.
O processo de desenvolvimento de software consiste em constantes mudanças no mesmo. apenas no processo de fazer alterações constantes, os programadores muitas vezes quebram algo que funcionou bem até recentemente.
E os testadores, em vez de procurar novos erros, são obrigados a verificar constantemente se quebramos algo que funciona bem há muito tempo. O chamado teste de regressão. É esse tipo de teste que pode e deve ser automatizado.
Aqui todo o software pode ser dividido em duas partes:
- o programa interage com a pessoa
- programa interage com outro programa
A primeira opção é mais difícil de automatizar, requer testadores automatizados especiais, também chamados de QA Automation ou Software Test Engineer.
Mas a segunda opção pode e deve ser automatizada de forma independente. Se você tiver um software que:
- funciona bem
- ja testei
- implementado como um módulo separado ou bloco lógico
- não planeja mudar
- outros módulos ou programas dependem dele
- falha funcional é cara
Eu recomendo reservar um tempo para escrever testes que capturem os principais aspectos de sua funcionalidade atual. Seria razoável alocar 5% do seu tempo de trabalho para isso , ou 1 dia por mês.
Não há necessidade de escrever testes por causa dos testes.
Ninguém apoiará seus testes. Nem outros programadores, nem você mesmo. Ninguém faz isso. 99% de todos os testes escritos são abandonados e/ou desativados. Se você não pode escrever testes - não escreva. Escreva apenas se você absolutamente não puder passar sem eles.
Tipos de teste
Cada programador, se não passou por um treinamento especial, poderá dizer com suas próprias palavras o que é testar: verificar se o programa faz o que deveria. No entanto, os profissionais neste campo distinguem áreas inteiras (tipos) de testes.
Todos os testes realmente giram em torno da confiabilidade e disponibilidade do software, mas para entender melhor a direção do teste, vejamos alguns exemplos.
Digamos que você esteja testando uma loja online típica. Em seguida, as áreas de teste podem ser divididas nos seguintes tipos: teste de desempenho, teste funcional, teste de integração e teste de unidade.
Se o proprietário do site decidir lançar uma campanha publicitária séria, muitos usuários acessarão o site ao mesmo tempo. Pode ser que o site não caia, mas algumas de suas seções podem ficar lentas ou até parar de funcionar.
Para evitar que isso aconteça, você precisa identificar esses problemas com antecedência e tomar medidas para eliminá-los. Isso é feito usando o teste de carga ou também é chamado de teste de desempenho.
Você também pode querer testar como sua API de back-end funciona e testar cada função dela: registro, login, adicionar ao carrinho, processamento de pagamento, gravações de banco de dados, etc. Tudo deve funcionar de acordo com o TOR. Nesse caso, você precisa realizar testes funcionais .
Sua loja online provavelmente está integrada a serviços de terceiros: envio de cartas e SMS, sistemas de pagamento, bate-papos de suporte online, coleta de feedback de usuários, sistemas de publicidade etc. .
Finalmente, produtos complexos são frequentemente divididos em módulos independentes. A partir desses módulos, você pode montar o produto final, como de um construtor. Se você estiver desenvolvendo tal módulo ou interagindo com tais módulos, precisará fazer testes de unidade .
Resumindo, podemos dizer que o teste funcional é necessário para testar cada função individual do site. Integração - para testar a interação de grandes módulos e sistemas do seu produto. Modular - para testar um módulo separado, bem, teste de desempenho - para verificar o funcionamento do seu site sob carga.
Pode haver ainda mais tipos de testes: quanto mais complexo o produto, mais aspectos de seu desenvolvimento precisam ser controlados.
GO TO FULL VERSION