Volevo chiedere a voi persone, in quali casi ha senso testare il codice funzionale tipicamente statico, come scritto in haskell, scala, ocaml, nemerle, f # o haXe (l'ultimo è ciò che mi interessa davvero, ma volevo attingere alla conoscenza delle comunità più grandi).
Lo chiedo perché dalla mia comprensione:
Un aspetto dei test unitari è avere le specifiche in forma eseguibile. Tuttavia, quando si utilizza uno stile dichiarativo, che associa direttamente le specifiche formalizzate alla semantica del linguaggio, è addirittura possibile esprimere le specifiche in forma eseguibile in un modo separato, aggiungendo valore?
L'aspetto più ovvio dei test unitari è quello di rintracciare gli errori che non possono essere rivelati attraverso l'analisi statica. Dato che il tipo di codice funzionale sicuro è un buon strumento per codificare estremamente vicino a ciò che il tuo analizzatore statico comprende, sembrerebbe che tu possa spostare molta sicurezza verso l'analisi statica. Tuttavia, un semplice errore come l'utilizzo al
x
posto diy
(entrambi essendo coordinate) nel codice non può essere coperto. OTOH potrebbe anche sorgere un simile errore durante la scrittura del codice di prova, quindi non sono sicuro che valga la pena.I test unitari introducono ridondanza, il che significa che quando cambiano i requisiti, il codice che li implementa e i test che coprono questo codice devono essere entrambi modificati. Questo sovraccarico ovviamente è costante, quindi si potrebbe obiettare, che non importa davvero. In effetti, in linguaggi come Ruby, in realtà non è paragonato ai vantaggi, ma dato come la programmazione funzionale tipicamente statica copre molti dei test delle unità di terra, è come se fosse un overhead costante che si può semplicemente ridurre senza penalità.
Da ciò deduco che i test unitari sono alquanto obsoleti in questo stile di programmazione. Naturalmente una simile affermazione può solo portare a guerre di religione, quindi lasciatemi riassumere in una semplice domanda:
Quando usi un tale stile di programmazione, in quale misura usi i test unitari e perché (che qualità speri di ottenere per il tuo codice)? O viceversa: hai dei criteri in base ai quali puoi qualificare un'unità di codice funzionale tipicamente statico come coperta dall'analizzatore statico e quindi senza la necessità di una copertura di unit test?