Wie kann die Priorität und der Schweregrad einer "Code-Verbesserung" ermittelt werden?

15

Wir haben "Prioritäts" - und "Schwere" -Felder in unserem Fehlerverfolgungssystem. Wir definieren den Schweregrad als "Auswirkungen auf den Benutzer" und die Priorität als "Auswirkungen auf das Produkt".

Meine Frage bezieht sich darauf, wie eine Aufgabe zur Codeverbesserung nach Schweregrad und Priorität kategorisiert werden kann. Angenommen, die Verbesserung ändert kein Verhalten, macht es jedoch zu einem "besseren Code". Insgesamt erwarten wir eine langfristige Verbesserung der Wartung, die sich jedoch nur schwer quantifizieren lässt.

Wenn wir unsere Definitionen für Priorität und Schweregrad verwenden, erhält eine Codeverbesserung die niedrigsten Werte für beide, es sei denn, Sie bringen einige schwer vorhersehbare langfristige Vorteile in das Bild ein. Daher impliziert dies, dass die Code-Verbesserung eine gefährliche Aufgabe ist und niemals versucht werden sollte.

Ich halte es jedoch für entscheidend, den Code ständig zu verbessern und zu überarbeiten, weil:

  • Die Softwareentwicklung selbst ist ein kontinuierlicher Lernprozess, und ohne eine Verbesserung des Codes kann man ihn nicht verbessern.
  • Ein Team sollte stolz auf seinen Code sein.
  • Zukünftige Wartungsarbeiten werden weniger Zeit in Anspruch nehmen und auf lange Sicht erhebliche Einsparungen bringen.

Oder glauben Sie, dass solche Aufgaben niemals erstellt und solche Verbesserungen nur "auf Anfrage" durchgeführt werden sollten, "wenn sie mit einem Fehler verbunden sind"? Wäre das nicht ein Diskussionspunkt bei einer Codeüberprüfung, auch wenn es sich um einen Fehler handelt, z. B. "Warum haben Sie diese drastische Strukturänderung vorgenommen?".

Sedat Kapanoglu
quelle

Antworten:

16

Normalerweise sehe ich Aktivitäten zur "Codeverbesserung" nicht als separate zuweisbare Aufgabe an, da die Codeverbesserung selbst Sie nie direkt an das Abschließen von User Stories oder Anforderungen heranführt. Aus diesem Grund haben Code-Verbesserungsaufgaben immer eine so niedrige Priorität, dass sie niemals zugewiesen werden.

Ich betrachte die Verbesserung des Codes als eine Konstante, die jeder Entwickler so natürlich machen sollte wie das Tippen auf einer Tastatur. Ich beziehe es für jede Aufgabe in meine Schätzungen ein. Wenn meine Aufgabe darin besteht, eine Klasse oder einen Quellcode zu berühren, auf den ich lange nicht mehr eingegangen bin, gehe ich davon aus, dass einige Hausmeisterarbeiten wahrscheinlich in Ordnung sind, und erhöhe meine Schätzung entsprechend.

Best-Case-Szenario Ich beende die Aufgabe frühzeitig und kann die verbleibende Zeit nutzen, um Code oder sogar Design zu verbessern. Im schlimmsten Fall dauert die Aufgabe viel länger als erwartet, aber ich habe diese zusätzliche Zeit als Puffer.

maple_shaft
quelle
4
+1, sobald Sie die Codeverbesserung als eine Aufgabe für sich sehen, erhalten Sie beschissenen Code, da dieser immer eine niedrige Priorität hat. Betrachten Sie andere Aufgaben nur nicht als erledigt, solange die Codequalität gemäß Unternehmensstandard nicht gut genug ist. Die Codeüberprüfung ist hier obligatorisch.
Deadalnix
1
@deadalnix Hervorragender Punkt zu Code-Überprüfungen. Wenn sie von Anfang an durchgeführt werden, bleibt die Codequalität theoretisch standardmäßig erhalten. Bei der Wartung älterer Anwendungen ist dies jedoch nicht immer der Fall und Code-Verbesserungen müssen sofort behoben werden.
maple_shaft
2
Mit altem Code ist es immer noch am besten, ihn in eine saubere Oberfläche zu packen, um den Mist nicht über die gesamte Codebasis zu verteilen. Anschließend wird der Wrapper massiv unittested, sodass wir uns sicher sind, dass wir uns darauf verlassen können, und gegebenenfalls den Legacy-Code berühren können, ohne das gesamte Projekt zu komprimieren.
Deadalnix
1
+1 Insbesondere für "Wenn meine Aufgabe darin besteht, eine Klasse oder einen Quellcode zu berühren, auf den ich lange nicht mehr eingegangen bin". Sie sollten nur den Code verbessern, der geändert werden muss. Wenn es nicht sofort geändert werden muss, lassen Sie es in Ruhe.
MarkJ
1
Für besonders große Projekte und Teams ist es immer noch sinnvoll, die Code-Verbesserung als separate Aufgabe beizubehalten - es gibt nur so weit, dass ein einzelner Entwickler an einer neuen Funktion arbeiten kann. Normalerweise reserviere ich zwei bis drei Wochen pro Jahr für mein Team, um Verbesserungen und Umgestaltungen durchzuführen (in der Praxis ist dies länger, da normalerweise nur eine Teilmenge des Teams zu einem bestimmten Zeitpunkt offline sein kann)
blueberryfields
2

Wenn Sie Ihren Code überarbeiten möchten, legen Sie die Priorität der Aufgabe gemäß Ihrer Definition fest (z. B. "Auswirkungen auf das Produkt"). Einige Umgestaltungen wirken sich je nach Umfang der erforderlichen Arbeiten nicht wesentlich auf das Produkt aus, andere wiederum nicht. Wenn Sie eine höhere Priorität festlegen, müssen nach Abschluss des Refactorings weitere Tests durchgeführt werden, um sicherzustellen, dass keine unerwarteten Ereignisse aufgetreten sind.

Möglicherweise möchten Sie auch eine neue Kategorie in Ihr Bug-Tracking-System aufnehmen, um diese Art von Aufgaben als "Refactoring" -Aufgaben zu kategorisieren. Auf diese Weise können Sie den Prioritätswert interpretieren. Das heißt, eine höhere Priorität bedeutet eine größere Auswirkung, und daher sind mehr Tests erforderlich.

Bernard
quelle
2
Hinzu kommt, dass sich die technische Verschuldung (aufgrund fehlender Umgestaltung) auf das Produkt auswirkt, da die Wartung schwieriger wird und die Möglichkeit von Fehlern zunimmt. Sobald das Produkt betroffen ist, ist der Benutzer betroffen ... In unserem Team haben wir "Verbesserungs" -Aufgaben, die wir für das Refactoring verwenden, und Prozess- / Werkzeugverbesserungen
Atif
2

Was fehlt, ist die Überprüfung Ihrer Vermutungen über den vorhandenen Code: Wenn wir den Code verbessern, können weniger Zeit und erhebliche Einsparungen erzielt werden. Ist das kosmetisch oder gibt es ernste Probleme?

Überprüfen Sie Ihre Debugging- und Verbesserungsschätzungen. Wenn sie länger dauern und ständig Kommentare dazu eingehen, dass der Code zuerst überarbeitet oder bereinigt werden muss, ist dies möglicherweise die beste Messung. Dann können Sie Ihre Codebasis wie folgt identifizieren: Gut, muss geringfügig überarbeitet oder gründlich überarbeitet werden.

All dies ist relativ. Es ist schwierig, diese hohe Priorität einzuräumen, wenn Kunden mehr Funktionen wünschen und bereit sind, die abrechenbaren Stunden sofort zu bezahlen.

JeffO
quelle
1

Interessante Frage.

Ich denke, Sie müssten abschätzen, wie viele Codezeilen und wie viele Module von einer Änderung betroffen sein könnten.

Vielleicht könnten Sie sich ansehen, wie viele Unit-Tests, wenn Sie sie haben, durch die Änderung kaputt gehen. Dies würde wahrscheinlich bedeuten, zuerst die Änderung in einer Zweigstelle zu versuchen, um eine Idee zu bekommen.

Geben Sie dann Schwellenwerte für die Priorität und den Schweregrad dieser Übereinstimmungsstufen an.

Sie sollten auch berücksichtigen, dass viele Tester-Tests beteiligt sein müssen. Wenn die Änderung eine große Oberfläche der App berührt, müssen möglicherweise viele Systemtests erneut durchgeführt werden.

ozz
quelle
1

Beginnen wir hier mit zwei Annahmen.

  1. Bei jeder neuen Story schreiben Sie Ihren Code nach besten Kräften, möglicherweise ergänzt durch das Umgebungswissen Ihres Teams.
  2. Wenn Sie eine Story haben, die die Funktionalität des vorhandenen Codes ändert, verwenden Sie Ihre neuen Systemkenntnisse und Ihre besseren Fähigkeiten, um den Code bei der Implementierung der neuen Story zu verbessern.

Angesichts dieser beiden Annahmen besteht niemals die Notwendigkeit einer expliziten "Code-Verbesserung". Ihr Code verbessert sich beim Schreiben des Systems. Dies bedeutet, dass nicht der gesamte Code Ihren neuesten und besten Standards für Wartbarkeit entspricht, sondern "Wenn er nicht kaputt ist, beheben Sie ihn nicht." Ich betrachte das Refactoring von Code, der nicht geändert werden muss, um "vergoldet" zu werden, ebenso wie das Hinzufügen nicht benötigter sichtbarer Funktionen. Wenn der Code in irgendeiner Weise beschädigt ist, schreiben Sie einen gültigen Test, der fehlschlägt. einen Fehler melden; und dann umgestalten, um diesen Fehler zu beheben.

Michael Brown
quelle
1

Ich würde die Agile-Bewegung stehlen:

Geben Sie den Fehler ein, machen Sie grobe Vermutungen für Schwere und Priorität,

Überprüfen Sie dann täglich, wöchentlich oder monatlich alle neuen Bugs und stimmen Sie über deren Bewertungen ab. Idealerweise tun Sie dies während eines Sprint-Planungsmeetings mit Endbenutzern. Dann können Sie auch über die nächsten Features zu diesem Zeitpunkt sprechen und positiv sein,

Michael Durrant
quelle