Ich wollte euch Leute fragen, in welchen Fällen es sinnvoll ist, statisch getippten Funktionscode, wie er in haskell, scala, ocaml, nemerle, f # oder haXe geschrieben ist, zu testen das Wissen der größeren Gemeinschaften nutzen).
Ich frage dies, weil nach meinem Verständnis:
Ein Aspekt von Unit-Tests ist, dass die Spezifikationen in lauffähiger Form vorliegen. Ist es jedoch bei Verwendung eines deklarativen Stils, der die formalisierten Spezifikationen direkt der Sprachsemantik zuordnet, tatsächlich möglich , die Spezifikationen in ausführbarer Form auf eine separate Weise auszudrücken, die einen Mehrwert schafft?
Der offensichtlichere Aspekt von Komponententests besteht darin, Fehler aufzuspüren, die durch statische Analyse nicht aufgedeckt werden können. Angesichts der Tatsache, dass typensicherer Funktionscode ein gutes Werkzeug ist, um sehr genau zu codieren, was Ihr statischer Analysator versteht, scheint es, dass Sie viel Sicherheit in Richtung statischer Analyse verlagern können. Ein einfacher Fehler wie die Verwendung von
x
anstelle vony
(beides sind Koordinaten) in Ihrem Code kann jedoch nicht behandelt werden. OTOH ein solcher Fehler könnte auch beim Schreiben des Testcodes auftreten, daher bin ich mir nicht sicher, ob es den Aufwand wert ist.Unit-Tests führen zu Redundanz, was bedeutet, dass bei Änderungen der Anforderungen sowohl der Code für die Implementierung als auch die Tests für diesen Code geändert werden müssen. Dieser Aufwand ist natürlich ungefähr konstant, so könnte man argumentieren, dass es nicht wirklich wichtig ist. In Sprachen wie Ruby ist dies zwar nicht mit den Vorteilen vergleichbar, aber angesichts der Tatsache, dass statisch getippte Funktionsprogramme viele der Grundeinheitentests abdecken, scheint es sich um einen konstanten Overhead zu handeln, den man einfach ohne Abstriche reduzieren kann.
Daraus würde ich schließen, dass Unit-Tests in diesem Programmierstil etwas veraltet sind. Natürlich kann eine solche Behauptung nur zu Religionskriegen führen. Lassen Sie mich das auf eine einfache Frage reduzieren:
In welchem Umfang verwenden Sie bei einem solchen Programmierstil Komponententests und warum (welche Qualität erhoffen Sie sich für Ihren Code)? Oder umgekehrt: Haben Sie Kriterien, anhand derer Sie eine Einheit des statisch typisierten Funktionscodes als vom statischen Analysegerät abgedeckt und damit ohne die Notwendigkeit einer Abdeckung durch Einheitentests qualifizieren können?