Es ist wünschenswert, diese zu entfernen, b()
sobald sie nicht mehr verwendet wird, aus dem gleichen Grund, aus dem es wünschenswert ist, nicht verwendete Funktionen überhaupt nicht hinzuzufügen. Egal, ob Sie es "Lesbarkeit" oder etwas anderes nennen, alles andere als gleich ist es eine Verbesserung des Codes, dass es nichts enthält, wofür es keine Verwendung hat. Um mindestens eine bestimmte Maßnahme zu haben, mit der es besser ist, sie nicht zu haben, garantiert das Entfernen, dass die zukünftigen Wartungskosten nach dieser Änderung Null sind!
Ich habe keine spezielle Technik gefunden, um es mit seinen Tests tatsächlich zu entfernen, da jeder Gedanke, es b()
durch etwas Neues zu ersetzen, natürlich von einer Betrachtung des gesamten Codes begleitet sein muss, der gerade aufgerufen wird b()
, und Tests eine Teilmenge des gesamten Codes sind ".
Die Argumentationslinie , die für mich im Allgemeinen funktioniert , ist an dem Punkt, wo ich merke , dass f()
gemacht hat b()
veraltet, daher b()
zumindest als veraltet werden soll, und ich bin auf der Suche alle Anrufe zu finden , b()
mit der Absicht , sie mit Anrufen zu ersetzen f()
, ich Beachten Sie auch den Testcode . Insbesondere, wenn b()
es nicht mehr benötigt wird, kann und sollte ich seine Komponententests entfernen.
Sie haben völlig recht, dass mich nichts dazu zwingt , das zu bemerken, b()
was nicht mehr benötigt wird. Das ist eine Frage des Könnens (und, wie schon gesagt, der Code-Coverage-Bericht über Tests auf höherer Ebene). Wenn sich nur Unit-Tests und keine Funktionstests darauf beziehen b()
, kann ich vorsichtig optimistisch sein, dass es nicht Teil einer veröffentlichten Schnittstelle ist, und daher ist das Entfernen keine bahnbrechende Änderung für Code, der nicht unter meiner direkten Kontrolle steht.
Im Rot / Grün / Refaktor-Zyklus wird das Entfernen von Tests nicht explizit erwähnt. Die Weitere Entfernen b()
verletzt das offene / geschlossene Prinzip da eindeutig die Komponente ist für die Modifikation offen. Wenn Sie sich diesen Schritt also als etwas außerhalb des einfachen TDD vorstellen möchten, fahren Sie fort. Zum Beispiel könnten Sie ein Verfahren haben, um einen Test als "schlecht" zu deklarieren, das in diesem Fall angewendet werden kann, um den Test mit der Begründung zu entfernen, dass er auf etwas prüft, das nicht vorhanden sein sollte (die unnötige Funktion b()
).
Ich denke, in der Praxis erlauben die meisten Leute wahrscheinlich, dass ein gewisses Maß an Neugestaltung zusammen mit einem Rot / Grün / Refaktor-Zyklus durchgeführt wird, oder sie betrachten das Entfernen redundanter Komponententests als einen gültigen Teil eines "Refaktors", obwohl dies streng genommen ist Es ist kein Refactoring. Ihr Team kann entscheiden, wie viel Drama und Papierkram erforderlich sind, um diese Entscheidung zu rechtfertigen.
Jedenfalls, wenn b()
es wichtig wäre, gäbe es Funktionstests dafür, und diese würden nicht leichtfertig entfernt, aber Sie haben bereits gesagt, dass es nur Komponententests gibt. Wenn Sie nicht richtig zwischen Komponententests (geschrieben in das aktuelle interne Design des Codes, das Sie geändert haben) und Funktionstests (geschrieben in veröffentlichte Schnittstellen, die Sie möglicherweise nicht ändern möchten) unterscheiden, müssen Sie vorsichtiger sein über Unit-Tests entfernen.