Ist der Komponententest für kurze Programme geeignet?

8

Ich bin kein Neuling, seit ich seit 1983 an und aus programmiere, aber ich habe nur echte Erfahrung mit Skriptsprachen wie Applescript, ARexx, HyperTalk und Bash.

Ich schreibe Skripte, um die Dateneingabe zu automatisieren, Batch-Bilder zu verarbeiten und Dateiformate zu konvertieren. Ich bin mit Processing, Ruby und Python beschäftigt.

Die meisten Programme, die ich schreibe, sind unter 200 Zeilen mit höchstens 10 Funktionen. Ich möchte in Zukunft größere, leistungsfähigere Programme schreiben. Ich möchte meine Praktiken verbessern, um zu vermeiden, dass zerbrechliche und nicht zu behebende Verwirrungen entstehen. Die Programmierumgebungen, in denen ich arbeite (Script Editor.app und Text Wrangler.app), unterstützen das automatische Testen nicht.

In dem Maßstab, in dem ich gerade arbeite und prozeduralen (nicht OO) Code schreiben ist es angemessen Unit-Tests zu schreiben , was ich verstehe sind:

  

kurze Programme, um einzelne zu testen   Funktionen vor dem Kombinieren in a   voll funktionsfähiges größeres Programm.

Sind Unit-Tests bei der Erstellung von Programmen in diesem Umfang im Vergleich zu ihren Kosten sinnvoll?

    
willc2 14.10.2008, 03:58
quelle

9 Antworten

1

Auf jeden Fall vorteilhaft, da das Schreiben der Tests dazu beitragen kann, das Design Ihrer Funktionen zu überprüfen (macht die API Sinn) und schützt Sie vor Fehlern in der Zukunft. Komponententests können auch als Vertrag für Ihre Funktionen dienen, die angeben können, wie die Funktionen verwendet werden sollen und was sie erwarten.

Bei kürzeren Programmen, die durch einfaches Lesen des Codes klar sind, ist es möglicherweise nicht sinnvoll, sie gründlich zu testen, wenn Sie nicht viel Zeit haben. Ansonsten muss ich meinen Kollegen hier zustimmen, dass Unit Testing viele Vorteile hat und auch für kleine Projekte hilfreich ist.

Achtung: Die folgenden Links sind möglicherweise nicht zutreffend, aber die folgende Diskussion ist eine gute Lektüre.

In der Blogosphäre gab es kürzlich einige Diskussionen darüber, wann Tests sinnvoll sind, insbesondere Test Driven Development (TDD). Vielleicht möchten Sie einige Artikel wie diese drei Artikel von Roy Osherove .

    
smaclell 14.10.2008, 04:10
quelle
7

Ja. Alles, was länger als Null ist, kann einzeln getestet werden - normalerweise mit gutem Ergebnis.

    
Jonathan Leffler 14.10.2008 04:02
quelle
4

Ich würde auf die Wahrscheinlichkeit von Regressionen achten, nicht auf die Anzahl der Codezeilen. Wenn Ihre Programme eine lange Lebensdauer haben und wahrscheinlich umstrukturiert oder auf andere Weise modifiziert werden, kann der Komponententest sinnvoll sein. Wenn der Code weggeworfen wird oder nie geändert wird, dann werden sich Unit-Tests wahrscheinlich nicht lohnen.

    
C. Dragon 76 14.10.2008 04:09
quelle
4

Heute ist es ein kleines Projekt, morgen ist es das Herzstück Ihrer Unternehmensinfrastruktur. Starten Sie es richtig, erhalten Sie sofort eine 100% ige Codeabdeckung.

    
justin.m.chase 15.10.2008 21:42
quelle
3

Unit Tests dienen einer Reihe von Zwecken; Am offensichtlichsten ist es, den Code zu testen, um festzustellen, dass er genau das tut, was er tun soll. Aber einer der anderen, nützlicheren Zwecke ist implizite Dokumentation ; Wenn Sie einen Codeabschnitt explizit für ein bestimmtes Verhalten testen, wird deutlich, dass dieses Verhalten erwartet wird, auch wenn es nicht offensichtlich ist.

Betrachten Sie den bescheidenen Additionsoperator. Einfach, oder? Nun, was ist das erwartete Verhalten beim Hinzufügen von zwei vorzeichenbehafteten Ganzzahlen, von denen beide & gt; als MAXINT / 2? Ist es MAXINT oder ist es eine negative Zahl?

Das Dokumentieren all dieser Dinge kann manchmal unhandlich sein; nicht zu sagen, dass es nicht gemacht werden sollte, aber die erfahrung zeigt, dass es oft nicht gemacht wird. Ein expliziter Komponententest, der prüft, ob der obige Fall negativ ist, entfernt jedoch alle Zweifel; sowie einen gültigen Zweck für die Regression, dass das Verhalten nicht im Laufe der Zeit geändert hat.

    
Paul Sonier 15.10.2008 21:26
quelle
2

völlig, Sie werden wissen, dass Sie keine bestehenden Funktionen brechen, während neue in ein paar Monaten hinzufügen ....

ist nur einer der vielen Plus-Werte, eine Testgruppe für einen Code zu haben.

    
pmlarocque 14.10.2008 04:01
quelle
1

Wenn der Code logisch in kleinere Einheiten unterteilt werden kann, sind Unit-Tests geeignet. Wenn der Code nicht vernünftig in kleinere Komponenten unterteilt werden kann, handelt es sich um eine einzelne Einheit, und ich würde argumentieren, dass in diesem Fall automatisierte Komponententests und automatisierte Funktionstests nicht zu unterscheiden wären.

    
Daniel Papasian 14.10.2008 03:59
quelle
0

Sie müssen Komponententests nur dann schreiben, wenn Sie darauf achten, dass die Ausgabe Ihres Programms korrekt ist und auch in Zukunft korrekt ist.

Wenn die Korrektheit Ihres Codes nicht wichtig ist, ist es nicht notwendig, den Test zu testen.

    
Andy Lester 14.10.2008 04:19
quelle
0

Ich muss bei den meisten Antworten abschweifen. Donald Knuth hat einmal in einem Interview gesagt, dass Menschen dazu neigen, die meisten Dinge zu testen, wenn sie unsicher sind, was sie tun oder in einer nicht so komfortablen Domäne arbeiten.

In diesem Sinne sage ich, dass neben der Dokumentation wie mcwafflestixlivejournalcom gesagt wird, dass Komponententests Ihnen nur helfen, wenn Sie sich Ihres Codes nicht 100% ig sicher sind. Am Beispiel des Additionsoperators für zwei Ints interessiert mich der Überlauf nicht, wenn ich das Alter von zwei Personen addiere.

OTOH, Komponententests machen es Ihnen möglich, die Kernlogik Ihrer Programme herauszufiltern (wodurch Sie Dinge modularer machen) und Sie schneller testen können, als Sie jemals tun könnten, wenn Sie "manuell" testen würden. Nicht alle von uns sind Donald Knuth.

Denken Sie daran, dass meine Antwort für kleine Funktionalität ist, wie das ursprüngliche Poster gefragt

    
Miguel Ping 18.10.2008 15:58
quelle

Tags und Links