Sind Bugs Teil der technischen Schulden?

44

Unser Scrum Master bezeichnet Bugs weiterhin als technische Schulden. Hat er recht, werden Bugs in der Welt von Agile als technische Schulden angesehen?

user86834
quelle
Warum ist es wichtig zu entscheiden, ob es sich um technische Schulden handelt oder nicht? Beeinflusst es, wie Sie Fehler auf Ihrem Scrum Board darstellen oder wie Sie sie beheben möchten?
Bryan Oakley
@BryanOakley Einige Fehler können Sie so blockieren, dass Sie gezwungen sind, sie zu umgehen, was zu einer noch größeren technischen Verschuldung führt. Diese Fehler können zu teuer sein, um sie zu beheben
BЈовић
4
@BryanOkley - Ich dachte immer, technische Schulden wären Design oder Refactoring, die zur Verbesserung der Implementierung erforderlich waren, aber derzeit aus Zeit- / Budgetgründen nicht möglich sind. Ich halte es für wichtig, die richtige Terminologie zu verwenden. Ich könnte mich irren oder er könnte sich irren, weshalb ich die Frage gestellt habe.
User86834
Ich verstehe das. Warum ist es wichtig, sie als technische Schulden zu bezeichnen? Wollen Sie damit sagen, dass Sie diese Bugs anders behandeln, wenn Sie sie als "technische Schulden" einstufen?
Bryan Oakley
1
Sie können eine große Menge technischer Fachkräfte haben und nicht einen einzigen Fehler. Technische Abteilung ist das Gegenteil von gut geschriebenem und gut gestaltetem Code. Gut geschriebener Code ist einfach zu warten, zu testen und zu ergänzen. Die technische Abteilung verlangsamt die Entwicklung, erschwert das Auffinden von Fehlern und erhöht die Wahrscheinlichkeit, dass durch neuen Code Fehler auftreten.
Luis Perez

Antworten:

35

Ich denke, die Antwort hier ist ziemlich einfach - das Hauptmerkmal der technischen Verschuldung ist, dass sie uns nach Wahl zufällt.

Wir entscheiden uns dafür, Architektur-, Design- oder Implementierungsentscheidungen zu treffen, von denen wir erwarten, dass sie uns später Probleme bereiten, um bestimmte Ziele früher zu erreichen.

Ein Fehler ist nichts, was wir in unserem Code haben wollen - also de facto keine technische Schuld.

Natürlich kann man alle möglichen interessanten (und möglicherweise stichhaltigen) Argumente über die nach der Entdeckung getroffenen Entscheidungen vorbringen, aber im Grunde (und insbesondere im Zusammenhang mit der Frage) sind Fehler keine technischen Schulden - das klingt für mich eher nach einem Missbrauch des Modeworts Bingo.


Als Nachsatz stimme ich der Behauptung nicht zu, dass technische Schulden zu Fehlern an und für sich führen, da dies weit über die Art der getroffenen Entscheidungen hinausgeht. Zum Beispiel können Sie gut geschriebenen, gut strukturierten, testbedeckten Code haben, der immer noch architektonische Kompromisse für eine frühzeitige Bereitstellung eingeht. In ähnlicher Weise könnten Sie sich dafür entscheiden, Ihre Bereitstellungsprozesse nicht zu automatisieren, was nicht zu Fehlern, sondern wahrscheinlich zu viel Stress und Schmerzen führen wird. Natürlich, wenn die Schuld ist, dass Sie Code geschrieben haben, der nicht SOLID (oder was auch immer) ist, dann ja ... aber das ist keineswegs immer der Fall.

Murph
quelle
1
+1. Ich denke, BЈовићs Antwort ist ziemlich richtig, aber Ihre Antwort trifft wirklich den Nagel auf den Kopf. (Ich bin ein bisschen verwirrt über Ihre Verwendung des Begriffs de facto . Ich glaube nicht, dass Sie de jure sagen können , ein Fehler ist technische Schuld?)
Ruakh
Sprachgebrauch macht so viel Spaß ... versuchen Sie es: en.wikipedia.org/wiki/De_facto - lesen Sie es als "für alle Absichten und Zwecke", was nah genug an meiner Absicht ist
Murph
"Ich denke, die Antwort hier ist ziemlich einfach - das Hauptmerkmal der technischen Verschuldung ist, dass sie uns nach Wahl zufällt." Woher haben Sie diese Definition gezogen? Ich denke nicht, dass es richtig ist. Das ist ein Teil der technischen Schulden, der andere Teil ist implizit und beruht normalerweise auf Unwissenheit und schlechten Praktiken.
gphilip
de jure du jure. Morgen de facto. QED.
Radarbob
1
Laut dem Technical Debt Quadrant von Martin Fowler können Sie Bugs und fehlerhaften Code als "rücksichtslose, unbeabsichtigte" Schulden identifizieren : martinfowler.com/bliki/TechnicalDebtQuadrant.html . Ich denke, der Punkt ist, dass, wenn Sie einige sensible Bugs als Schulden markieren, Sie verstehen können, wie viel sie Sie kosten und ob Sie sie beseitigen müssen oder nicht. Zum Beispiel ist man schlampig geschrieben Modul haben , die nur einmal im Jahr geändert wird und es würde Wochen dauern , es neu zu schreiben - Sie wahrscheinlich sollte es halten , wie es da ist die Zahlung Zinsen für diese Schulden sind sehr , sehr klein
Shershen
20

Ja.

Technical Debt (auch als Design Debt oder Code Debt bezeichnet) ist eine neologistische Metapher, die sich auf die möglichen Folgen einer schlechten oder sich entwickelnden Softwarearchitektur und Softwareentwicklung innerhalb einer Codebasis bezieht.

Quelle: Wikipedia

Lesen Sie technische Schulden als etwas, das Sie hätten vermeiden können, wenn Sie einen besseren Workflow hätten (z. B. eine ordnungsgemäße Architektur vor dem Umstieg auf das Codieren, das Ausführen von TDD usw.), bessere Codierungsverfahren usw.

Die meisten Fehler hätten durch zusätzliche Überprüfung oder den Einsatz formellerer Methoden vermieden werden können. Indem Sie nicht alles tun, um Fehler zu vermeiden, senken Sie die unmittelbaren / kurzfristigen Kosten des Projekts, erhöhen aber die technischen Schulden.


Nachdem ich die Antwort von BЈовић gelesen habe , sehe ich, dass es möglicherweise nicht so einfach ist, wie ich dachte.

  • Sind Bugs zum Beispiel Teil der technischen Verschuldung? Artikel behauptet, dass nur Bugs, von denen Sie wissen, die Sie aber nicht beheben möchten, Teil der technischen Schulden sind.

  • Ein weiteres Beispiel: Christopher's Thoughts on Technical Debt qualifiziert Bugs als Ergebnis einer technischen Verschuldung, die nicht Teil davon ist. Davon abgesehen werden viele der aufgelisteten Ergebnisse, wie "Kosten für die Implementierung neuer Funktionen", von der Anzahl der Fehler beeinflusst.

  • Schließlich habe ich bei der Erstellung des ABCDE-T-Modells für die technische Verschuldung Fehler als einen der sechs Faktoren berücksichtigt, die jedoch unterschiedlich betrachtet werden. Der Fokus liegt nicht auf den Fehlern selbst, sondern auf der Art und Weise, wie sie gesammelt, priorisiert und behoben werden. Fehler selbst erscheinen als Ergebnis einer technischen Verschuldung (wie im vorherigen Beispiel), jedoch nie als Faktor für eine technische Verschuldung.

Dies wird gesagt, bin ich immer noch auf Antwort geneigt , dass Bugs -alle bugs- sind Teil der technischen Schulden.

Erstes Argument:

Wenn man Jeff Atwoods Zitat liest, qualifizieren sich die meisten Bugs als:

Der zusätzliche Aufwand, den wir für die zukünftige Entwicklung aufgrund der schnellen und schmutzigen Designauswahl leisten müssen

In Geschäftsanwendungen ist fast jeder Fehler auf eine schnelle und unsaubere Auswahl des Designs oder auf schlechte Praktiken zurückzuführen (wären dies fehlende Tests, der Einsatz von Technologien, die die Entwickler nicht genug kennen, mangelnde Kommunikation, mangelndes Verständnis der Domäne, usw.) Dies bedeutet, dass "durch Umgestaltung des schnellen und schmutzigen Designs in ein besseres Design" und durch Anpassung besserer Praktiken die meisten Fehler behoben werden können.

Zweites Argument:

Wenn wir eine Parallele zwischen der normalen Verschuldung eines Unternehmens, die beim Verkauf eines Unternehmens an ein anderes Unternehmen zu berücksichtigen ist, und der technischen Verschuldung herstellen, die ebenfalls zu berücksichtigen ist, wenn ein Projekt an ein anderes Unternehmen verkauft oder übergeben wird Bei einem anderen Team können wir leicht erkennen, dass Fehler Teil der technischen Verschuldung sind, da das neue Team:

  • Entweder müssen Sie sich mit diesen Fehlern auseinandersetzen, bevor Sie neue Funktionen erstellen (Punkt 5 von Joel Test: Beheben Sie Fehler, bevor Sie neuen Code schreiben?)

  • Oder behalte die Bugs und bewahre / erhöhe auf diese Weise die technische Verschuldung.

Arseni Mourzenko
quelle
1
Ich persönlich betrachte Mängel nicht als technische Schulden, obwohl das in dieser Antwort dargelegte Argument zutreffend ist, aber a) es spielt keine Rolle, wie wir technische Schulden definieren, IMO, und b) dies ist eine so gut geschriebene Antwort, dass ich Ich stimme trotzdem ab. +1!
Bryan Oakley
13

Jeff Atwood gibt in seinem Artikel " Rückzahlung Ihrer technischen Schulden" eine gute Antwort darauf, was technische Schulden sind:

Für die technische Verschuldung fallen Zinszahlungen an, die sich aus dem zusätzlichen Aufwand ergeben, den wir für die künftige Entwicklung aufgrund der schnellen und schmutzigen Auswahl des Designs leisten müssen. Wir können uns dafür entscheiden, die Zinsen weiterhin zu zahlen, oder wir können den Kapitalbetrag abzahlen, indem wir das schnelle und schmutzige Design in das bessere Design umgestalten. Die Tilgung des Kapitals ist zwar kostenintensiv, wir profitieren jedoch von künftig geringeren Zinszahlungen.

Streng genommen gehören Fehler nicht zur technischen Verschuldung, wenn sie die weitere Softwareentwicklung nicht verlangsamen (Änderungen vornehmen, neue Funktionen hinzufügen usw.). Sie sind Software-Defekte.

Wenn es jedoch zu teuer ist, einen Fehler zu beheben, oder Sie gezwungen sind, ihn zu umgehen (und noch mehr technische Schulden einzuführen), wird er Teil einer technischen Schuld.

BЈовић
quelle
1
Tatsächlich tun sie dies, da Fehler zu zusätzlichen Umgehungen bei neuen Funktionen führen können, die ohne die Fehler nicht erforderlich wären. Ich habe sogar gesehen, wie sich Code aufgrund eines Fehlers, der sich irgendwie zu einem "Es ist kein Fehler, es ist ein Feature" entwickelt hat, in eine schlechte Richtung entwickelt hat (und mehr technische Schulden aufbaute), weil Kunden Skripte geschrieben haben oder was auch immer, das auf dem fehlerhaften Verhalten beruht.
Marjan Venema
@ MarjanVenema Guter Punkt. Daran habe ich nicht gedacht.
BЈовић
Beachten Sie, dass dieses Zitat nicht von Jeff Atwood stammt, sondern einem Beitrag von Martin Fowler entnommen ist . Jeff zitiert dies auch in seinem Blogbeitrag.
Uooo
6

Ein Bug ist keine technische Schuld. Die technische Verschuldung mindert die Qualität, nicht das Fehlen. Software sollte in erster Linie nicht mit Fehlern ausgeliefert werden. Sie wissen, dass die ganze Arbeitssoftware über umfassende Dokumentation verfügt.

Die größten Straftäter für technische Schulden sind "vorübergehende Fehlerkorrekturen". Sie kennen diejenigen, die Sie eingesetzt haben, um den Test zu bestehen und die Story zu akzeptieren. Diejenigen, die Sie sich selbst versprochen haben, werden Sie später umgestalten, aber niemals tun. Da sich diese temporären Fixes, Patches und andere Dinge ansammeln, wird der Code unnötig unübersichtlich, schwierig zu aktualisieren und zu testen und ist im Allgemeinen ein Albtraum, aber er macht immer noch seinen Job.

Zur Unterstützung dieser Meinung ging ich direkt zur Quelle, Ward Cunningham. Bezüglich dessen hat Ward vor einiger Zeit ein gutes Interview mit Capers Jones geführt, es ist eine Uhr wert.

Debatte über technische Schulden mit Ward Cunningham & Capers Jones

Ein weiterer lesenswerter Artikel ist von Martin Fowler

Martin Fowler über technische Schulden

In Martins Artikel finden Sie den Link zur ursprünglichen Erwähnung der technischen Schulden durch Ward Cunningham von OOPSLA92:

Das WyCash Portfolio Management System

Ein Zitat aus dem obigen Artikel:

Obwohl unausgereifter Code gut funktioniert und für den Kunden völlig akzeptabel ist , führen überschüssige Mengen dazu, dass ein Programm nicht mehr beherrschbar ist, was zu einer extremen Spezialisierung der Programmierer und schließlich zu einem unflexiblen Produkt führt. Der Versand von First-Time-Codes ist wie das Eingehen von Schulden.

Am Ende könnte Technical Debt für einige Leute Fehler enthalten haben, und ich denke, das ist in Ordnung. Ich glaube einfach nicht, dass dies die ursprüngliche Absicht war.

Abstrakte Klasse
quelle
"Software sollte in erster Linie nicht mit Fehlern ausgeliefert werden." Alle Software außer dem einfachsten Programm enthält Fehler. Sie haben diesen Balken zu hoch gesetzt.
Bhspencer
2

Genau genommen lautet die Antwort auf Ihre Frage Nein.

Technische Schulden können (und werden wahrscheinlich) zu Fehlern führen. Die Schlussfolgerung, dass ein Fehler das Ergebnis einer technischen Verschuldung ist, legt jedoch eine Interpretation zwischen zwei Tatsachen nahe: Es gibt einen Fehler und eine technische Verschuldung (vorausgesetzt, dies kann als Tatsache angenommen werden).

Wenn Ihr Scrum-Meister "als Theorie" angibt, dass Fehler das Ergebnis von technischen Schulden sind, schneidet er Abstriche. Wenn er dies über bestimmte Bugs sagt, die immer wieder auftauchen, hat er möglicherweise recht - wir können die Codequalität von hier aus nicht sehen ;-)

Er hat möglicherweise auch eine anhaltende Beschwerde darüber, dass die Leute ihn nicht über die technische Verschuldung belauschen und daher jeden Fehler als technische Verschuldung bezeichnen, aber jetzt spekuliere ich.

Jan Doggen
quelle
2

Meiner Meinung nach spielt es keine Rolle, ob Sie sagen, dass Fehler Teil der technischen Verschuldung sind ... oder nicht.

Tatsache ist, dass vorhandene Fehler zusätzliche Arbeit darstellen, die möglicherweise in Zukunft ausgeführt werden muss, um sie zu beheben oder um sie zu umgehen.

Technische Schulden (wie das Etikett normalerweise verwendet wird) bedeuten auch zusätzliche Arbeiten, die möglicherweise in Zukunft ausgeführt werden müssen ... auf die eine oder andere Weise.

Ob Sie also sagen, dass bekannte (oder unbekannte) Fehler technische Schulden sind oder nicht, ist eigentlich nur eine Frage der Definition. Und da es keine maßgebliche Definition 1 von "technischer Verschuldung" gibt, ist die ganze Diskussion irgendwie sinnlos.

Wie Lewis Carroll schrieb:

"Wenn ich ein Wort verwende", sagte Humpty Dumpty verächtlich, "bedeutet es genau das, was ich damit meine - weder mehr noch weniger." .

So funktioniert natürliche Sprache. Wörter bedeuten, was Leute denken, dass sie bedeuten. Wörterbuchdefinitionen usw. dokumentieren lediglich die Art und Weise, wie Wörter verwendet werden, und sie sind nicht unbedingt eine genaue Dokumentation. Wenn Ihr Scrum Master bekannte Fehler als technische Schulden bezeichnen möchte, wer sagt dann, dass er "falsch" liegt?


1 - Leute wie Ward Cummingham und Caper Jones zu zitieren, hilft auch nicht. Bestenfalls sagt es uns, was sie meinen (oder meinten), wenn sie die Phrase benutzen (benutzten). Sie "besitzen" die Phrase nicht. Während sie zweifellos Autoritäten in diesen Fragen sind, ist dies immer noch nur ihre Meinung.

Stephen C
quelle