Eu queria perguntar a vocês, em quais casos faz sentido testar o código funcional de tipo estatístico, conforme escrito em haskell, scala, ocaml, nemerle, f # ou haXe (o último é o que realmente me interessa, mas queria explorar o conhecimento das comunidades maiores).
Peço isso porque, pelo meu entendimento:
Um aspecto dos testes de unidade é ter as especificações na forma executável. No entanto, ao empregar um estilo declarativo, que mapeia diretamente as especificações formalizadas para a semântica da linguagem, é realmente possível expressar as especificações na forma executável de uma maneira separada, que agrega valor?
O aspecto mais óbvio dos testes de unidade é rastrear erros que não podem ser revelados através da análise estática. Como o código funcional seguro do tipo é uma boa ferramenta para codificar extremamente próximo do que o seu analisador estático entende, parece que você pode mudar muita segurança para a análise estática. No entanto, um erro simples como usar em
x
vez dey
(ambas coordenadas) no seu código não pode ser coberto. Esse erro também pode ocorrer ao escrever o código de teste, por isso não tenho certeza se vale a pena o esforço.Os testes de unidade introduzem redundância, o que significa que, quando os requisitos mudam, o código que os implementa e os testes que cobrem esse código devem ser alterados. É claro que essa sobrecarga é constante, portanto, alguém poderia argumentar que realmente não importa. De fato, em linguagens como Ruby, isso realmente não se compara aos benefícios, mas, considerando que a programação funcional de tipo estatístico cobre muitos dos testes de unidade de solo, parece que é uma sobrecarga constante que se pode simplesmente reduzir sem penalidade.
A partir disso, deduziria que os testes de unidade são um pouco obsoletos nesse estilo de programação. Claro que essa afirmação só pode levar a guerras religiosas, então deixe-me resumir isso em uma pergunta simples:
Quando você usa esse estilo de programação, em quais extensões você usa testes de unidade e por quê (que qualidade você espera obter pelo seu código)? Ou o contrário: você tem critérios pelos quais pode qualificar uma unidade de código funcional de tipo estatístico, conforme coberto pelo analisador estático e, portanto, sem necessidade de cobertura de teste de unidade?