Julio Biason
5 years ago
2 changed files with 107 additions and 0 deletions
@ -0,0 +1,53 @@ |
|||||||
|
+++ |
||||||
|
title = "Code is a Book, Unit Tests are Spellcheckers" |
||||||
|
date = 2020-02-14 |
||||||
|
|
||||||
|
[taxonomies] |
||||||
|
tags = ["unit tests", "testing", "integration tests", "books", "code"] |
||||||
|
+++ |
||||||
|
|
||||||
|
If we use an analogy for code as being the words in a book and the system |
||||||
|
being built as the whole book, then what are unit tests? |
||||||
|
|
||||||
|
<!-- more --> |
||||||
|
|
||||||
|
I just found this analogy pretty good[^1]: You can to think about your code |
||||||
|
as a book: Each module is a chapter, each class is a paragraph and each |
||||||
|
function is a sentence. |
||||||
|
|
||||||
|
In that analogy, were would unit tests sit? |
||||||
|
|
||||||
|
To me, the unit tests are like spell checkers -- or, at least, the more modern |
||||||
|
ones: Are you writing the proper words? Are your sentences grammatically |
||||||
|
correct? The spell checker will take care of this. |
||||||
|
|
||||||
|
But there is one thing that the spell checker won't do: make sure the chapter |
||||||
|
makes sense in the whole context of the book. Escaping the analogy for a |
||||||
|
moment, let me ask you this: Have you read "Les Misérables"? I did, and there |
||||||
|
is one chapter in the middle of the book in which Victor Hugo discuss the |
||||||
|
Battle of Waterloo. Although it makes sense in the historical point of the |
||||||
|
story of Les Misérables, it makes absolutely no sense in the general story |
||||||
|
itself -- no matter how well punctuate, correct in spelling and grammar it may |
||||||
|
be. |
||||||
|
|
||||||
|
This is a huge failure of unit tests: They don't see the whole. The whole is |
||||||
|
given by reviewers of a book and integration tests of a system. Jumping back |
||||||
|
to the analogy, when you have your integration tests defined by the system |
||||||
|
requisites, anything that isn't being covered is a chapter that doesn't make |
||||||
|
sense in the whole of the book. |
||||||
|
|
||||||
|
In the long run, as writers will remember the times the spell checker |
||||||
|
pointed a word was spelled wrong or a verb was in the wrong tense and, thus, |
||||||
|
make it pop less and less, so does unit tests: In the long run, the ROI[^2] of |
||||||
|
unit tests tend to go down, while the integration tests -- the ones that check |
||||||
|
if the "chapter" makes sense in the story being told by the "book" -- tend to |
||||||
|
go up. |
||||||
|
|
||||||
|
And I just found the analogy so good for the way I see those two test |
||||||
|
methodologies. |
||||||
|
|
||||||
|
--- |
||||||
|
|
||||||
|
[^1]: ... but I lost the source of it. :( |
||||||
|
|
||||||
|
[^2]: "Return Of Investment" |
@ -0,0 +1,54 @@ |
|||||||
|
+++ |
||||||
|
title = "Código É um Livro, Testes Unitários São Corretores Ortográficos" |
||||||
|
date = 2020-02-14 |
||||||
|
|
||||||
|
[taxonomies] |
||||||
|
tags = ["testes", "testes de integração", "testes unitários"] |
||||||
|
+++ |
||||||
|
|
||||||
|
Se nós usássemos uma analogia para código sendo as palavras de um livro e o |
||||||
|
sistema sendo construído como o livro inteiro, o que seriam os testes |
||||||
|
unitários? |
||||||
|
|
||||||
|
<!-- more --> |
||||||
|
|
||||||
|
Eu vi uma analogia excelente esses dias[^1]: Você pode pensar que o código que |
||||||
|
você está escrevendo como um livro: Cada módulo é um capítulo, cada classe é |
||||||
|
um parágrafo e cada função é uma frase. |
||||||
|
|
||||||
|
Nessa analogia, onde é que os testes unitários ficariam? |
||||||
|
|
||||||
|
Para mim, testes unitários são como corretores ortográficos -- ou, pelo menos, |
||||||
|
os mais modernos: Você está escrevendo as palavras da forma correta? As suas |
||||||
|
frases estão gramaticalmente corretas? O correto ortográfico vai cuidar disso. |
||||||
|
|
||||||
|
Mas existe uma coisa que um corretor ortográfico não vai fazer: garantir que o |
||||||
|
capítulo que você está escrevendo faz parte do contexto total do livro. Saindo |
||||||
|
um pouco da analogia, deixe-me perguntar isso: Você já leu "Les Misérables"? |
||||||
|
Eu li, e nele há um capítulo no meio do livro no qual Victor Hugo discute a |
||||||
|
Batalha de Waterloo. Embora faça sentido no período histórico da história do |
||||||
|
Les Misérables, o capítulo não faz o menor sentido para a história em si -- |
||||||
|
não importa o qual correta está a pontuação, as palavras estão certas e a |
||||||
|
gramática correta. |
||||||
|
|
||||||
|
Essa é a grande falha dos testes unitários: Eles não validam o todo. O todo é |
||||||
|
dado pelos revisores de um livro e pelos testes de integração de um sistema. |
||||||
|
Voltando a analogia, quando os testes de integração são definidos pelos |
||||||
|
requisitos do sistema, qualquer coisa que não esteja coberto é um capítulo que |
||||||
|
não faz sentido no conjunto do livro. |
||||||
|
|
||||||
|
A longo prazo, como escritores começam a lembrar as palavras que foram |
||||||
|
escritas erradas e os verbos no tempo errado apontados pelo correto |
||||||
|
ortográfico, este começa a aparecer menos e menos, assim como testes |
||||||
|
unitários: a longo prazo, o ROI[^2] tende a ser cada vez menor, enquanto |
||||||
|
testes de integração -- aqueles que validam se um "capítulo" faz sentido na |
||||||
|
história sendo contada no "livro" -- tende a ser maior. |
||||||
|
|
||||||
|
E eu achei a analogia perfeita para a forma como eu penso sobre essas duas |
||||||
|
metodologias de testes. |
||||||
|
|
||||||
|
--- |
||||||
|
|
||||||
|
[^1]: ... mas infelizmente eu perdi a origem dela. :( |
||||||
|
|
||||||
|
[^2]: "Return of Investment" ou "Retorno do Investimento". |
Loading…
Reference in new issue