Olá e seja bem vindo a mais um post da série qualidade de código em teste de software do blog Talking About Testing

No primeiro post da série falei sobre a importância de escrevermos pequenas unidades de código, baseado na primeira guideline do Better Code Hub (BCH).

No post de hoje irei falar sobre uma perspectiva um pouco diferente: escreva simples unidades de código (segunda guideline do BCH).

Segundo o BCH:

  • Manter o número de pontos de ramificação (if, for, while, etc.) baixo torna as unidades mais fáceis de modificar e testar.
  • Tente limitar a complexidade de McCabe, que é o número de pontos de ramificação + 1, em uma unidade, para no máximo 5.
  • Você pode reduzir a complexidade extraindo sub-ramificações para unidades separadas de não mais do que 4 pontos de ramificações.

Manter o número de pontos de ramificação (if, for, while, etc.) baixo torna as unidades mais fáceis de modificar e testar

Quando se trata em testes automatizados especificamente eu diria que a utilização de condições (tais como ifelse, else ifswitch case) por si só não são uma boa prática, visto que testes automatizados devem ser previsívies.

Vejamos um exemplo dessa má prática:

Imagine um caso de teste em que, se o formulário de login estiver visível, o script deve fazer o login, e senão, o script deve considerar que o usuário já está logado e pular para o próximo passo.

Conforme comentei anteriormente, testes automatizados devem ser previsíveis, ou seja, devem sempre se comportar da mesma maneira, e não de uma maneira se condição 1, ou de outra maneira se condição 2. Além disso, é importante se preocupar com a independência dos testes, onde para cada caso de testes automatizado deve ser possível gerar o estado necessário na aplicação para que este seja executado de forma independente, tal como garantir que o usuário está logado no sistema antes de seguir à diante.

Já o uso de loops, como por exemplo forwhile podem ser utilizados em casos específicos em testes automatizados, e neste caso, devemos nos preocupar em mantê-los simples, ou seja, nada de muitos loops um dentro do outro.

Um exemplo do uso de loop em um testes automatizados que faz sentido é quando se necessita navegar através de um menu com vários links, porém os passos e as verificações executadas são sempres as mesmas e só o que muda é o texto do link do menu. Em um caso como este o uso de um for loop pode ajudar na eliminação de código duplicado. Veja um exemplo utilizando um forEach em JavaScript (o teste exemplificado neste link executa quatro vezes, uma vez para cada sub menu).

Spoiler: o próximo post da série será: Escreva código uma só vez.

Tente limitar a complexidade de McCabe, que é o número de pontos de ramificação + 1, em uma unidade, para no máximo 5

A complexidade de McCabe, também conhecida como complexidade ciclomática é uma métrica de software usada para indicar a complexidade de um programa de computador. Desenvolvida por Thomas J. McCabe em 1976, ela mede a quantidade de caminhos de execução independentes a partir de um código fonte.

Ou seja, quanto mais caminhos de execução uma mesma unidade de código possuir, mais complexa ela se torna, exigindo mais cuidado quando precisamos à alterar, e exigindo mais casos de teste para se testar todas as variações.

Por outro lado, um código com baixa complexidade é mais simples e fácil de ser testado.

Você pode reduzir a complexidade extraindo sub-ramificações para unidades separadas de não mais do que 4 pontos de ramificação

O ponto aqui é, se por algum motivo em seus testes automatizados a complexidade ciclomática for maior do que 5, crie sub-unidades que tratam especificamente dessas menores ramificações, tornando assim o código mais simples e mais fácil de ler e compreender.


Aguardo teu comentário.

Até a próxima e bons testes! 👋🙂

Anúncios

11 comentários em “Escreva simples unidades de código

    1. Olá Alvaro,
      O ponto aqui não é não usar if, else, loops, etc, mas sim limitá-los, como explicado na guideline do BCH (tente limitar a complexidade de McCabe, que é o número de pontos de ramificação + 1, em uma unidade, para no máximo 5).
      E, você pode reduzir a complexidade extraindo sub-ramificações para unidades separadas de não mais do que 4 pontos de ramificações.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s