Executando verificação de segurança...
3

[Artigo] Eu preciso mesmo de testes no meu projeto?

Vou comecar esse artigo com um ESTRIDENTE:

Qualidade é responsabilide de todo o time!

Não tem margem para discursão aqui, se voce faz codigo deveria estar preocupado com a qualidade.
se voce vive mesmo nesse século, qualidade não é assunto somente do time de QA.


Se voce é PROGRAMADOR, já sabe (ou pelo menos deveria mesmo saber) que testes são importes.
mas qual tipo de teste exatamente?

talvez já tenha ouvido:
Aqui na empresa, uma pessoa testa manualmente todas as versões do sistema

Essa pessoal é muito capaz e profissional, sempre atenta a novos BUGS os encontrando e avisando ao time de DEV antes da versão sair para os usuarios.

isso já funciona? de certa forma, funciona sim.
então não precisamos escrever aquele codigo de testes chato, CERTO?
ERRADO, TOTALMENTE ERRADO

  1. E se essa pessoa sair do projeto?
  2. E se o projeto crescer tanto que essa pessoa não consiga testar tudo a cada nova versão.
  3. E se por cansaço essa pessoa esquecer de testar uma funcionalide importante? sim é preciso levar em consideração em qualquer lugar que pessoas poder falhar

testes humanos são sim muito importantes, mas também são CAROS, e dão MUITO TRABALHO, precisamos de outras maneiras de testar a confiabilidade do nosso trabalho.

Então vamos explicar aqui os principais tipos de testes e como eles deveriam estar aplicados no seu projeto desde o dia zero.

  1. Testes unitário.

É a menor unidade de teste posssivel. se voce tem um if no seu código ele precisa ser testado.

fun String.numbersOnly(): String {
    return Regex("[^0-9]").replace(this, "")
}

é uma função muito simples que remove tudo que não sejam numeros de uma string,
para testar bem isso, vamos precisar pensar nos cenarios que vamos usar,
por exemplo começando com letras no inicio no meio ou no final, com espaco em algum lugar.. emfim aqui uma input básico:

*------------*---------*---------------------------------------* 
| Entra     | Saida   | O que fazer?                           |
*------------*---------*---------------------------------------*  
| 123       | 123     |  Não deve remover números              |
| ABC123    | 123     |  Deve remover letra no inico           |  
| 123ABC    | 123     |  Deve remover letras no final          |
| AB123C    | 123     |  Deve remover letras no meio           | 
| AB 123 ADC| 123     |  Deve remover espaços vazios           |
*-----------*---------*------------------------------------------

assim vamos codar isso:

...
   @Test
    fun `should do not remove number`(){
        assertEquals("123".numbersOnly(), "123")
    }

    @Test
    fun `should remove letters on start`(){
        assertEquals("ABC123".numbersOnly(), "123")
    }

    @Test
    fun `should remove letters on end`(){
        assertEquals("123ABC".numbersOnly(), "123")
    }

    @Test
    fun `should remove letters on middle`(){
        assertEquals("AB123Cda".numbersOnly(), "123")
    }

    @Test
    fun `should remove empty spaces`(){
        assertEquals("AB 123 ACD".numbersOnly(), "123")
    }
...

Assim sendo, cada teste unitário deve ter um objetivo diferente, devemos pensar na maioria dos cenario relevantes.

  1. Testes do componente ou teste de integração

Esses são testes mais completos e realistas da aplicação. seria alguma coisa como:

Curl Post/Record

Se não entendeu, talves isso ajuda a entender:

Meu outro artigo

  1. **Testes de fim-a-fim END-TO-END ou E2E **

São os testes mais completos possiveis, use com sabedoria.

No geral os testes do seu projeto deveriam estar distribuidos assim:

Teste unitário: 8090%
teste de componente: 5
15%
teste E2E: <5%

Carregando publicação patrocinada...
2

Muito legal o artigo, eu estava desenvolvendo um projeto esses dias (sou bem iniciante), e percebi que preciso começar a fazer testes... Ainda não vi nada sobre (além do seu artigo), mas parece ser bem interessante, além de ser importante. Agora sobre o artigo, eu não entendi o gráfico... não sei se é porque estou no celular, mas não tem legenda, seria 80% de testes unitários, 15% de testes do componente e 5% E2E?

1

Mas é isso mesmo,
deve ser algum problema na vizualização mesmo.

A Regra é
Muito Teste unitário,
pouco testes de componente, e quase nenhum teste E2E.

Unitário = 80%
Componente = 15%
E2E = 5%

mas isso é uma estimatima geral.

1