Sollte jede Entwicklung, einschließlich Refactoring-Arbeiten, von einem Tracking-Problem begleitet sein?

9

Die Debatte: Sollte jede Entwicklung, einschließlich der Umgestaltung, von einem Tracking-Problem begleitet werden? (in unserem Fall Jira)

Die Gemeinsamkeit: Unser Hauptziel ist Qualität. Ein funktionierendes Produkt, jede Veröffentlichung, ist wichtiger als alles andere. Unsere Codebasis ist alt und es fehlen automatisierte Tests. Wir arbeiten daran, aber es ist ein langfristiges Projekt, wir brauchen Zwischenprozesse.

Position 1: Refactoring-Arbeiten müssen in Jira verfolgt werden. Wenn dies nicht offensichtlich mit der von Ihnen vorgenommenen Änderung zusammenhängt, müssen Sie ein anderes Problem ansprechen. Wenn Sie dies nicht tun, werden die Überprüfungen und Tests umgangen, und es besteht ein Risiko für unser primäres Ziel. Es wurde argumentiert, dass die PCI-Konformität (ein Ziel des Unternehmens in naher Zukunft) dieses Maß an Nachverfolgung erfordert. Ich bin nicht in der Lage zu sagen, dass dies mit Sicherheit wahr oder falsch ist.

Position 2: Die Codequalität ist enorm wichtig. Je besser es wird (bis zu einem Punkt; ein Punkt, an dem wir nicht annähernd sind), desto wahrscheinlicher ist es, dass wir weiterhin ein funktionierendes Produkt veröffentlichen. Alles, was das Refactoring behindert, ist ein Risiko für unser primäres Ziel. Oft erledigt die IDE die Arbeit für Sie, sodass es wahrscheinlich sowieso nicht schief geht.

Folgende Fälle wurden gemacht:

Würde es beide Positionen erfüllen, wenn ein Entwickler "Refactor" und die entsprechenden Revisionsnummern auf eine Karte schreibt? Ehrlich gesagt, das fühlt sich so an, als würde es alle gleichermaßen unglücklich machen. Es stellt immer noch einen gewissen Widerstand gegen das Refactoring dar, bietet jedoch keine ausreichende Nachverfolgung.

Was ist mit allumfassenden Jira-Problemen, die die Refactoring-Arbeit für eine Iteration abdecken? Ja, dies entfernt die Entwicklerresistenzschicht, aber ich befürchte, dass dadurch auch die Tracking-Vorteile eines Jira-Problems beseitigt werden. Wie bekommt die Qualitätssicherung eine klare Vorstellung davon, was zu testen ist? Dies scheint eine politische Lösung zu sein, die alle ruhig hält, indem sie einen leichten, aber letztendlich sinnlosen Prozess hinzufügt.

Es scheint mir, dass es angesichts der Tatsache, dass beide Seiten der Debatte letztendlich dasselbe wollen, eine Lösung geben sollte, die alle wirklich glücklich macht. Wir können nicht die ersten gewesen sein, die diese Frage gestellt haben. Welche Erfahrungen haben andere in ähnlichen Situationen gemacht?

pdr
quelle
7
"Oft erledigt die IDE die Arbeit für Sie, sodass es wahrscheinlich sowieso nicht schief geht." Ich wünschte es wäre wahr!
quant_dev

Antworten:

9

Vielleicht fehlt mir hier etwas, aber wie kann das Erstellen eines Tickets für Ihre Arbeit, das nicht in den Bereich Ihrer anderen Tickets fällt, eine „Widerstandsschicht“ sein?

Haben Sie kürzlich ein Ticket-Tracking-System implementiert? Wenn ja, setzen Sie sich und legen Sie Ihre Regeln für die Verwendung fest. Lassen Sie das Team wissen, dass von diesen erwartet wird, dass sie diese Regeln befolgen. Wenn dies das Erstellen von Refactoring-Tickets für diese Arbeit umfasst, soll es so sein. Sie können nicht frühzeitig Ausnahmen machen oder den gesamten Prozess, den Ihr Team einzurichten versucht, zum Scheitern bringen.

Wenn Sie schon eine Weile ein Ticket-Tracking-System verwenden, verstehe ich wirklich nicht, warum dies eine "Widerstandsschicht" ist. Ihr Team sollte es bereits gewohnt sein, Jira geöffnet zu haben und sich seine Tickets anzusehen, und es sollte bequem sein, Tickets zu machen.

Wenn Sie alle Refactoring-Bemühungen an einem Ort aufbewahren möchten, erstellen Sie ein Hauptticket dafür und lassen Sie Ihr Team Aufgaben für die von ihm ausgeführte Arbeit ausführen. Dann dauert es ungefähr 5 Sekunden, bis ein Entwickler eine neue Aufgabe dafür erstellt hat, und er kann seine Zeit für diese Aufgabe protokollieren.

Projektmanager, Teamleiter und Entwickler müssen wissen, wie viel Zeit für die Überarbeitung aufgewendet wird. Sie wollen nicht, dass es ein schwarzes Loch der Zeit wird. Mit den Tickets sind Entwickler für ihre Arbeit verantwortlich, während Manager bereitgestellt werden. Außerdem können sie verfolgen, wie viele Stunden für die Arbeit aufgewendet werden müssen.

Tyanna
quelle
+1. Nicht zu widersprechen (wenn ich meine Position klarstellen würde, würde ich nicht hier fragen), sondern um Ihre Frage zu beantworten: Die Arbeit wird im Allgemeinen von Karten angetrieben, nicht von Jira. Entwickler werden Jira zu Beginn auf Details überprüfen und zurückgehen, um das Problem am Ende auf die Qualitätssicherung umzustellen (wenn Sie Glück haben).
pdr
4
@pdr - dann klingt es für mich eher so, als ob Ihr Team über die Tools verfügt, die Ticketverfolgung nicht wirklich verwendet, und das ist das eigentliche Problem. Es manifestiert sich nur in diesem Argument, b / c es ist dasjenige, das geschoben wird. Ich denke, Ihr Team muss sich hinsetzen und die Jira-Erwartungen definieren, die jeder erfüllen muss.
Tyanna
Vielleicht haben Sie dort den Nagel auf den Kopf getroffen.
pdr
1
+1 Wenn ich persönlich der Fragesteller wäre, wäre dies meine akzeptierte Antwort. Sie schneiden dort direkt durch die Spreu, @Tyanna.
Ingenieur
@ Nick: Stimme zu. Dies war die Antwort, die ich nicht kommen sah und die mir am meisten zum Nachdenken gibt.
pdr
7

Idealerweise ja.

Jede Änderung, die Sie an der Codebasis vornehmen, sollte einen Grund haben. Dies kann eine Kundenanfrage sein - die häufigste / wahrscheinlichste oder ein intern angehobener Artikel - wie in Ihrem Refactoring-Beispiel.

Dies bedeutet, dass Sie nicht nur verfolgen können, wann eine Änderung vorgenommen wurde, sondern auch das Änderungsset mit etwas verknüpfen können , das erklärt, warum die Änderung vorgenommen wurde. Warum können dies nicht nur die Änderungskommentare sein? Es gibt mehrere Gründe, warum dies möglicherweise nicht geeignet ist.

  • Es gibt nicht immer eine 1: 1-Zuordnung zwischen Arbeitselementen und Änderungssätzen. Möglicherweise benötigen Sie mehrere Bearbeitungssätze, um ein Element fertigzustellen.
  • Die Änderungskommentare sind für Nichtentwickler normalerweise nicht sichtbar, oder Sie müssen dem Arbeitselement möglicherweise eine andere Dokumentation hinzufügen.
ChrisF
quelle
6

Code-Refactoring ist zwar zur Verbesserung der Qualität äußerst wünschenswert, aber auch ein inhärentes Risiko. Dies gilt insbesondere dann, wenn es sich um "Foundation" -Code handelt, bei dem ein einzelner Fehler das gesamte System zum Absturz bringt und die Lösung eines einzelnen "Problems" Nebenwirkungen (möglicherweise unvorhergesehen) in der gesamten Anwendung hat.

Unabhängig davon, um welche Art von Code es sich handelt, sollte die Qualitätssicherung einbezogen und auf die betroffenen Teile Ihrer Codebasis aufmerksam gemacht werden, wenn ein Refactoring nicht auf den Code für ein bestimmtes Problem (Ticket) beschränkt ist. Sie müssen einen vollständigen Regressionstest für diese Teile durchführen, um sicherzustellen, dass nichts vorbeigeht. Und sie müssen dies sogar tun, vielleicht besonders dann, wenn Sie über eine vollständige Reihe von Komponententests verfügen, bei denen Sie sich sicher fühlen, dass Sie das Refactoring durchführen. Unit-Tests testen viel, aber sie vermissen auch viel.

Wenn also die Codequalität wichtig ist, sollte es so wenig Hindernisse wie möglich für die Verbesserung des Codes geben. Aber ich verstehe nicht, wie schwierig es ist, ein Ticket dafür zu erstellen. Es stellt lediglich sicher, dass die Qualitätssicherung die Möglichkeit erhält, die Qualität des Codes (zu) beweisen, und sollte etwas Wünschenswertes sein, nicht etwas, das als Hindernis angesehen wird.

Marjan Venema
quelle
5

Ich denke, wenn Sie das Refactoring nicht genauer beschreiben können als "Refactoring", machen Sie es falsch. Refactoring sollte einen bestimmten Zweck und Umfang haben. Das separate Verfolgen der Refactoring-Aufgaben in JIRA erleichtert nicht nur das Auditing, Überprüfen und Testen, sondern zwingt die Refactorers auch dazu, sich auf konkrete Ziele zu konzentrieren (z. B. "Entfernen einer zirkulären Abhängigkeit zwischen den Modulen X und Y") und führt einfach dazu besseres Refactoring.

Wenn das Refactoring jedoch wirklich einfach, lokal und nur ein Nebenprodukt der Ausführung einer anderen Aufgabe ist, würde ich es nicht unter einem separaten Ticket verfolgen und es nur im Original-Takes-Ticket dokumentieren, wenn dies möglich ist Auswirkungen auf die Arbeit anderer Menschen haben.

quant_dev
quelle
Ihre erste ist wirklich Reengineering; da gibt es keinen Streit. Es ist der Zwischenfall, der wirklich in Frage gestellt wird. Suchen Sie an anderer Stelle in einer Klasse einen doppelten Code: Führen Sie ein schnelles Refactoring der Extraktionsmethode durch.
pdr
4

Ja, im Idealfall sollte jede Änderung, die Sie am Code vornehmen, einem JIRA-Element zugeordnet und somit nachverfolgbar sein. Wie andere angemerkt haben, sollten Sie in der Lage sein zu identifizieren, warum eine bestimmte Änderung vorgenommen wurde und mit welchen anderen Änderungen sie zusammenhängt.

Es ist in Ordnung, Epics längerfristig in einem Legacy-Projekt umzugestalten. Wir haben sie auch in unserem. Sie sollten sich jedoch bemühen, diese auf einen bestimmten Bereich des Codes mit einem bestimmten Zweck zu konzentrieren, da es sonst sehr schwierig ist, ihn unter Kontrolle zu halten. ZB "Refactor-Module Foo und Bar, um zyklische Abhängigkeiten zu beseitigen", "Refactor-Klassenhierarchie A, um Duplikate zu entfernen und die Vererbungshierarchie zu bereinigen".

Bei der Arbeit an Legacy-Code mit begrenzten Ressourcen müssen mögliche Wege zur Reduzierung der technischen Verschuldung priorisiert werden, um die bestmögliche Kapitalrendite zu erzielen. Die Analyse möglicher Refactorings, ihrer Bedeutung, Risiken, Kosten und Vorteile sollte daher ohnehin vor Arbeitsbeginn erfolgen. Außerdem ist es wichtig, den Fortschritt eines größeren Refactorings zu verfolgen und zu wissen, wann es abgeschlossen ist. Im Vergleich zu diesen erforderlichen Aufgaben ist meiner Meinung nach der tatsächliche Aufwand für die Verwaltung eines JIRA-Elements minimal.

Es wurde argumentiert, dass die PCI-Konformität (ein Ziel des Unternehmens in naher Zukunft) dieses Maß an Nachverfolgung erfordert

Wenn Sie meinen , dies kann ich irgendwie verstehen , warum Management Ängste vor unkontrollierten Veränderungen in der Code - Basis, jedoch Tracking ändere nur ein winziger Teil der Lösung ist. Sie benötigen gründliche Systemtests und wahrscheinlich Codeüberprüfungen, um sicherzustellen, dass keine Kreditkartennummern über Protokolldateien usw. aus dem System verloren gehen. Refactoring soll das Verhalten des vorhandenen Codes nicht ändern, und Sie sollten Unit-Tests durchführen, um dies zu beweisen Auf jeden Fall (versuchen Sie nicht, sich auf die Überzeugung zu stützen, dass automatisierte Refactoring-Tools den Code nicht brechen können - Sie MÜSSEN Unit-Tests durchführen, um böse Überraschungen zu vermeiden).

Péter Török
quelle
+1: Gute Punkte (obwohl ich mich wieder mehr auf Refactor als auf Reengineer konzentriere)
pdr
3

In einer idealen Welt ist Chris 'Antwort richtig. Jedes Mal, wenn Sie Änderungen am Code oder an einem mit einem Softwareprojekt verbundenen Artefakt vornehmen, sollte ein Protokoll darüber vorhanden sein. Es sollte eingereicht, genehmigt, der richtigen Partei zugewiesen, der Aufwand geschätzt, die durchgeführten Arbeiten durchgeführt, die Gesamtzeit aufgezeichnet und eine kurze Beschreibung der Änderung dokumentiert werden.

Dies ist jedoch nicht immer möglich. Beispielsweise ist meine IDE so konfiguriert, dass eine Codedatei basierend auf den Coderichtlinien der Organisation neu formatiert wird. Wenn ich eine Datei öffne und sehe, dass sie nicht übereinstimmt, ist es trivial zu beheben - STRG + UMSCHALT + F in den Dateiformaten alles. Möglicherweise STRG + UMSCHALT + O, um Importe zu korrigieren. Ich mache das direkt vor oder direkt nach der Behebung des mir zugewiesenen Fehlers.

In diesem Fall möchten Sie immer protokollieren, dass Sie es getan haben und wie lange es gedauert hat, aber die Änderung jetzt nicht vorzunehmen, kann schlimmer sein, als den Prozess der formellen Zuweisung und Implementierung der Änderung zu durchlaufen. In einigen Fällen ist es einfacher, um Vergebung zu bitten, als um Erlaubnis zu bitten. Es liegt an Ihnen als Ingenieur, zu rechtfertigen, wo genau diese Linie gezogen werden muss.

Thomas Owens
quelle
Ich denke kaum, dass das Neuformatieren von Tabulatoren und Leerzeichen (oder ähnlichem) als Änderung des Codes angesehen wird. Änderungen am Layout ändern den Code überhaupt nicht.
Gbjbaanb
1

Im Großen und Ganzen sollte das Refactoring als normaler Bestandteil Ihres Workflows erfolgen. Um Fehler A zu beheben , müssen Sie dieses Bit der Methode testen und es daher als Methode B extrahieren . Während Sie dies tun, bemerken Sie, dass Feld C sehr schlecht benannt ist, und benennen es daher um.

Meiner Meinung nach werden diese normalen Refactorings gegen den ursprünglichen Fehler A "aufgeladen" . Sie werden mit dem Fix eingereicht, mit dem Fix überprüft und mit dem Fix versehen. Sie sind Teil des Fixes.

Es gibt aber auch größere, weniger fokussierte Refactorings. Eine allgemeine Beobachtung, dass Klasse D zu groß ist. Es wäre einfacher, daran zu arbeiten, wenn Sie die Duplizierung in E beseitigen würden . Und diese Refactorings gehören zu den riskantesten, die Sie in Angriff nehmen werden (insbesondere in einer Codebasis ohne Tests). Erstellen Sie auf jeden Fall Tickets für diese; Führen Sie sie mindestens durch Ihren normalen Überprüfungsprozess.

Carl Manaster
quelle
1
Yak rasiert sich den ganzen Weg. Gut ausgedrückt!
Josip Ivic