Ist es eine schlechte Angewohnheit, eine kleine Änderung vorzunehmen, sie zu testen und dann zu wiederholen?

54

Ich bin ein Programmierer mit mehrjähriger Erfahrung. Mir wurde klar, dass ich eine bestimmte Angewohnheit hatte. Ich bin mir nicht sicher, ob es wirklich eine schlechte Angewohnheit ist oder nicht.

Ich bekomme eine Liste von Aufgaben, die ich für eine Lösung ausführen muss, auch kleine Aufgaben, zum Beispiel:

  1. Ändern Sie die Ressourcen dieses Benutzersteuerelements
  2. Ändern Sie die Größe eines anderen
  3. Fügen Sie etwas HTML und Code für ein anderes Benutzersteuerelement hinzu

Alle diese Aufgaben sind klein. Ich meine, sie sind innerhalb von 10 Minuten fertig, aber ich habe die schlechte Angewohnheit, kleine Änderungen vorzunehmen und sie dann immer wieder in einem Webbrowser zu testen . Ist das eine gute Übung?

Oder soll ich sie alle auf einmal ausführen und dann gemeinsam testen?

Wenn es wirklich eine schlechte Angewohnheit ist, wie kann ich sie dann korrigieren, da es sich anfühlt, Zeit zu verschwenden, um kleine Änderungen immer wieder zu testen?

Mathematik
quelle
3
@gnat Ihre Antwort mit den meisten Stimmen ist auch meinungsbasiert - programmers.stackexchange.com/questions/154733/… Jede Antwort, die ich lese, gibt eine eigene Meinung, irgendwelche Kommentare?
Mathematik
2
Das ist es nicht. Wie wäre es mit Ihrer zweithöchsten Antwort - programmers.stackexchange.com/questions/159964/… - ist sie nicht auch meinungsbasiert?
Mathematik
7
Der Ansatz ähnelt der testgesteuerten Entwicklung, bei der Sie einen Test erstellen, Änderungen vornehmen, um den Test zu bestehen, und dann Ihre Tests ausführen. Wenn Sie dies dann für einen zweiten Test wiederholen, enthält Ihr zweiter Testlauf den ersten. Sie würden immer wieder testen, um zu beweisen, dass es immer noch funktioniert, aber es ist automatisiert.
Kevin Hogg
5
Ich würde sagen, dass das Gegenteil der Angewohnheit, eine Reihe von Änderungen vorzunehmen und diese erst dann zu testen, die schlechte Angewohnheit ist.
Chris B. Behrens

Antworten:

130
  • Es ist eine gute Übung.
  • Sie folgen der wissenschaftlichen Methode.
  • Wenn Sie vor dem Testen mehrere Dinge ändern, wird das Testen der einzelnen schwieriger und möglicherweise nicht zuverlässig, da die Vorbereitung der Voraussetzungen schwieriger wird und die verschiedenen Änderungen auf eine Weise miteinander interagieren können, die Sie nicht vorausgesehen haben.
  • Die Zeit, die Sie jetzt "verschwenden" , werden Sie später in der Integrations-, Test- und Wartungsphase wiedererlangen.
  • Weiter so.
Tulains Córdova
quelle
9
AFAIK, für die UI-Programmierung ist dies nicht nur eine gute Praxis, sondern auch die einzig akzeptable Praxis. Aus diesem Grund haben Softwareunternehmen so viele What you see is what you getTools für Entwickler entwickelt, die mit HTML, CSS, Widget usw. arbeiten.
InformedA
38

Es ist keine schlechte Sache, viele kleine Änderungen vorzunehmen und jede zu testen. Auf diese Weise können Sie die Auswirkungen jeder Änderung sehen. Wenn dann eine Änderung ein Problem verursacht, ist es viel einfacher zu erkennen, welche Änderung Probleme verursacht hat - die aktuellste!

Wenn Sie eine Aufgabenliste mit 10 Elementen haben und alle auf einmal ausführen und dann die Seite testen und feststellen, dass die Seite falsch aussieht, ist es möglicherweise schwieriger zu wissen, welche Änderung die Seite beschädigt hat.

Natürlich ist es möglich, diesen Ansatz bis zum Äußersten zu verfolgen. Gleichgewicht zu finden, ist der Schlüssel, und das bringt ein besseres Verständnis dafür mit sich, was Sie ändern und wie sich die Änderungen gegenseitig beeinflussen können.

FrustratedWithFormsDesigner
quelle
18

Ihre Frage besteht aus zwei Teilen:

  1. soll ich sie alle einmal ausführen und dann gemeinsam testen?

    Ich gehe davon aus, dass Sie ein VCS verwenden .
    Und um zu verfolgen, welche Aufgaben erledigt wurden, ist es sinnvoll, die Aufgabenliste auf eine Liste von Festschreibungen zu verteilen: eine Aufgabe, eine Festschreibung .

    Das macht es einfach, verschiedene Versionen der aktuellen Codebasis zu verwalten. Sie könnten zu einem früheren Zustand zurückkehren, die Änderungen auswählen, die Sie in den Hauptstamm eingeben möchten, usw.

    Die Antwort ist klar:

    Nein, nehmen Sie Änderungen nur einzeln vor - eine Aufgabe pro Commit .

  2. Aber ich habe die schlechte Angewohnheit, kleine Änderungen vorzunehmen und sie dann immer wieder im Webbrowser zu testen. Ist dies eine gute Vorgehensweise?

    Es ist eine gute Praxis - Test - Code / UI , was auch immer , aber es ist Unsinn es über zu tun und immer wieder in den Browser. Es gibt Tools, die das automatisch für Sie erledigen ( Selen, PhantomJS / Casper, ZombieJS )

    Die Antwort für diesen Fall lautet:

    Ja, es ist eine gute Praxis, Software mehrmals zu testen, aber die Automatisierung zu verwenden

Thomas Junk
quelle
2
+1, aber ich bin nicht einverstanden mit der Verwendung von Automatisierung. Wenn ich eine neue Funktion entwickle, teste ich sowohl manuell als auch mit Automatisierung. Die manuellen Tests lassen mich sehr sicher sein, dass sich die Dinge so verhalten, wie ich es erwartet habe. Es ist möglich, einen automatisierten Test falsch zu schreiben, ihn zu beobachten und alles für gut zu halten, dann manuell zu testen und festzustellen, ob etwas nicht stimmt.
Kevin - Reinstate Monica
Eine festgelegte Aufgabe kann das VCS-Protokoll zu einem unverständlichen Durcheinander für verschiedene Definitionen von "Einzelaufgabe" machen
Whatsisname
Kommt drauf an, wie fein granular du die Aufgabe definierst;) oder wenn du willst: ein "Ticket" ein Commit / Branch. Mit Git macht dies einfach
Thomas Junk
1
Um das zu erweitern, was Kevin gesagt hat, glaube ich, dass Sie, wenn Sie ein neues Feature hinzufügen, das Frontend ist, es immer manuell überprüfen müssen (ich habe noch keine Entsprechung zu TTD für Frontend-Arbeit gefunden), aber Sie möchten auch Ihre Automatisierung Suite, um sicherzustellen, dass vorhandene Funktionen nicht beschädigt wurden.
Scragar
@scragar ja. Automatisierung ist für Regressionstests.
Thomas Junk
6

Für jede Gewohnheit eines Entwicklers gibt es zwei Hauptfragen:

  1. Wie beeinflusst es die Qualität des von Ihnen erstellten Codes?
  2. Wie beeinflusst es Ihre Produktivität?

Wenn die Antwort auf beides "Es macht es besser" ist, mach es dir zur Gewohnheit, es anderen beizubringen!
Wenn die Antwort auf eine Frage "Besser" und auf die andere "Schlechter" lautet, dann ist das ein Stil, und Sie müssen sich dessen bewusst sein. Es ist nicht immer anwendbar, und Sie müssen sich möglicherweise ab und zu anstrengen, um es zu unterdrücken.
Wenn die Antwort auf beide Fragen "Negativ" lautet, liegt ein ernstes Problem vor.

Natürlich sollten Sie in den ersten beiden Fällen auch überlegen, ob der positive Effekt irgendwie automatisiert oder institutionalisiert werden kann. Vielleicht ist es besser, einen Test zu schreiben, als jedes Mal andere Browser auszuprobieren? (Beachten Sie, ich weiß, dass es nicht so einfach ist, das richtige Layout in der Webentwicklung zu testen. Ich sage nicht, dass dies immer möglich oder die Zeit wert ist.)

In diesem speziellen Fall scheint es mir , dass die Qualität erhöht, die Produktivität wird verringert. Für kleine Änderungen ist es wahrscheinlich ein bisschen schlecht (besonders wenn die Änderungen miteinander zusammenhängen), für größere - es ist ein bisschen gut. Solange Sie auch das Endresultat testen (vermeiden Sie, dass "jedes Modul getestet wurde und funktioniert, damit das Ganze auch funktioniert, Sie müssen es nicht testen!").

Daher - es sei denn, 90% Ihres Arbeitstages machen wirklich kleine Änderungen - ist es eine gute Gewohnheit zu haben. Wenn Ihr Arbeitstag so ist, möchten Sie vielleicht Ihren Arbeitsstil (oder Ihren Arbeitsplatz) überprüfen.

Ordous
quelle
4

Dies hängt von der Domain ab. Das Layout einer Webseite funktioniert einwandfrei und Sie können sofort eine Rückmeldung erhalten (Sie können dies sogar direkt im Browser tun!). Ebenso würde es gut für alles funktionieren, was nicht lange Zeit zum Initialisieren benötigt. Dies wird bevorzugt, da es Ihre mentale Arbeitsbelastung gering hält und die Möglichkeit von Fehlern verringert.

Bei wirklich großen Projekten, bei denen Sie den Code kompilieren müssen und die benötigte Zeit nicht trivial ist (mehrere Minuten), kann dies jedoch zu einer erheblichen Ausfallzeit führen, sodass Sie häufig auf Folgendes zurückgreifen müssen:

  • "Parallelisieren" Ihres Arbeitsablaufs (z. B. gleichzeitiges Arbeiten an mehreren Builds), oder
  • so viele dinge wie möglich auf einmal machen, oder
  • Erstellen Sie ein kleines eigenständiges Teil, um es später zu bearbeiten und in das größere Projekt zu integrieren.

(Es gibt wahrscheinlich auch andere Möglichkeiten.)

Rufflewind
quelle
+1 für die direkte Ausführung im Browser. Ich werde häufig CSS-Anpassungen direkt im Browser vornehmen, um den Prototyp der eigentlichen Arbeit, die ich in Kürze erledigen werde, wegzuwerfen.
RubberDuck
0

Wie andere gesagt haben, ist dies definitiv keine schlechte Angewohnheit. Im Allgemeinen bevorzuge ich es, nur ein paar Änderungen auf einmal vorzunehmen. Die einzige Ausnahme ist, wenn ich eine große Liste von Änderungen habe, die sich nicht alle gegenseitig beeinflussen (z. B. Änderungen an kleineren Stilen oder Kopien, Änderungen auf verschiedenen Seiten usw.). Wenn Sie Layouts ändern, bleiben Sie bei den einzelnen Änderungen, damit Sie überprüfen können, ob in allen unterstützten Browsern 100% vorhanden sind, bevor Sie mit der nächsten Ausgabe fortfahren.

FreeAsInBeer
quelle