Wie erklären Sie das Refactoring einer nicht technischen Person?


52

Wie erklären Sie Refactoring (und technische Schulden) einer nicht-technischen Person (normalerweise einem PHB oder Kunden)? ("Was, es wird mich einen Monat Ihrer Arbeit kosten, ohne sichtbaren Unterschied ?!")

UPDATE Vielen Dank für alle bisherigen Antworten. Ich denke, diese Liste wird einige nützliche Analogien enthalten, auf die wir die entsprechenden Personen verweisen können (obwohl das Herausarbeiten von Verweisen auf PHBs sinnvoll sein kann!).


Ich kann mich nicht erinnern, wie Apple so viele Menschen davon überzeugt hat, von Leopard zu Snow Leopard zu wechseln. Wahrscheinlich der Preis: 100 Dollar weniger als damals üblich.
Mouviciel

Diese Frage könnte für jeden, der mit Code in der Industrie arbeitet, überraschend nützliche Antworten liefern. Pass auf Leute auf.
Joshin4colours

warum sollte es weise sein?
Louis Rhys

Antworten:


53

Wenn Sie ein großes Heimkino haben und Dinge hinzufügen, bildet sich langsam aber sicher ein großes Rattennest im Rücken.

Wenn Sie oft Teile austauschen, lohnt es sich manchmal, all das auszuräumen.

Klar, wenn du das tust, hat es früher funktioniert und es wird nicht besser funktionieren als zu Beginn, aber wenn du wieder damit herumspielen musst, wird es viel einfacher.

In jedem Fall ist es wahrscheinlich am besten, einen ähnlichen Vergleich mit einem Fachgebiet anzustellen, mit dem die PHB oder der Kunde bereits vertraut sind, z. B. Auto oder Konstruktion oder so ...


1
Nicht die beste Analogie, weil es so klingt, als würden schlechte Sachen einfach spontan in Ihr Theater kriechen, im Gegensatz zu schlechten Sachen, die als direkte Folge des kontinuierlichen Aufbaus Ihres Theaters auftauchen.
Doppelgreener

21
@Axidos: "rats nest" ist eine englische Redewendung, die "ein scheinbar unmöglich zu lösendes Gewirr" bedeutet (in diesem Fall von Kabeln und Seilen hinter dem Unterhaltungszentrum)
HedgeMage 10.11.10

8
Konzeptionell ist es ziemlich gut - braucht "Kabel" nach "Rattennest"
Murph

2
@ Peter: Ich denke, wir mussten alle mindestens einmal hinter den Fernseher. Erklären Sie es einfach als hundertmal schlimmer und spinnen Sie überall ein Kabelgarn und ziehen Sie dieses und jenes und entdecken Sie irgendwo in der Unordnung eine tote Zivilisation.
Doppelgreener

3
Wenn jemand keine Beziehung herstellen kann, zeigen Sie ihm Folgendes
Steve S

41

Re-Factoring ist wie das Umpacken eines Koffers, bis alles gut passt. Manchmal wundert man sich dabei, warum man versucht hat, so viel Müll da rein zu bekommen.


1
Ich wollte eine Analogie mit einer Garage oder einem Schuppen posten, aber das ist besser.
Matt Ellen

Oder manchmal kaufen Sie noch ein paar Koffer und stellen fest, dass das Bezahlen der Übergewichtskosten keine große Sache ist, da die Softwarekosten nicht mit denen in der physischen Welt übereinstimmen. Dann kann man wirklich alles gut unterbringen und die Beschränkung eines einzelnen Koffers hat sich als willkürlich und absurd herausgestellt.
Dan Rosenstark

+1 Das ist großartig. Abgesehen davon, dass Dinge weniger Platz beanspruchen, gibt es Dinge, von denen Sie wissen, dass Sie sie gar nicht benötigen, und die Sie daher weglassen können.
Robbie Dee

21

Ich würde das Konzept der technischen Verschuldung nicht erklären, weil es nicht notwendig ist. Konzentrieren Sie sich stattdessen auf das Refactoring: Sie ändern das Design Ihres Programms, nicht unbedingt, damit es "besser" oder "verbessert" wird. Sie ändern es, damit es eine Änderung akzeptiert, die Sie vornehmen müssen.

Eine Auto-Analogie könnte passen: Sie müssen ein Auto mit einer Klimaanlage ausstatten, aber diese war ursprünglich nicht für ein Auto konzipiert. Sie müssen nicht nur eine seltsame L-förmige Klimaanlage herstellen, sondern auch zuerst einige andere Dinge aus dem Weg räumen und das Belüftungssystem ändern.

Ich denke auch, dass es eine bessere Strategie ist, eine Umgestaltung vorzunehmen, wenn Sie sich auf neue Features einstellen: Andernfalls ändern Sie möglicherweise das Design in etwas, das nur "besser" aussieht, sich jedoch möglicherweise nur schlecht für die Umstände eignet, unter denen Sie das nächste Feature hinzufügen.


Die Teile in einem Auto zu bewegen, um die Leistung zu verbessern oder die Wartung zu vereinfachen - funktioniert für jeden, der den Deckel seines Autos angehoben hat, aber wie viele PHBs haben das getan?
Peter Boughton

3
Ich mag dieses, weil es betont, dass das Refactoring durchgeführt wird, um eine erforderliche Änderung einfacher (oder möglich) zu machen. Refactoring sollte in der Regel nicht um seiner selbst willen durchgeführt werden, sondern um ein bestimmtes Ziel zu erreichen.
Kristopher Johnson

Die kurze Antwort lautet also: Sag es ihnen nicht! Berücksichtigen Sie einfach die Zeit in neuen Funktionen und überarbeiten Sie diese entsprechend.
Jonathan van de Veen

12

Ich verwende den Begriff Technische Schulden und beziehe ihn direkt auf etwas, das sie verstehen - Unternehmensschulden. Technische Schulden sind wie Kredite aufzunehmen. Sie zahlen Zinsen dafür. Sie können z. B. eine neue Fabrik bauen und direkt dafür bezahlen, oder Sie können ein Darlehen dafür erhalten. Wenn Sie einen Kredit bekommen, werden Sie langfristig mehr dafür bezahlen, aber finanziell ist es sinnvoll, wenn die Konditionen stimmen .

Wenn Sie jedoch 25% Zinsen für einen solchen Kredit zahlen, geraten Sie in eine nicht nachhaltige Position. Dies gilt auch für die technische Verschuldung. Manchmal ist es sinnvoll, technische Schulden zu machen. Es kommt jedoch ein Punkt, an dem die Zinsen zu hoch sind und zurückgezahlt werden müssen. Einige technische Schulden sind wie ein Wohnungsbaudarlehen, andere wie Kreditkartenschulden. In Notfällen sind Kreditkartenschulden ein wichtiges und wertvolles Gut. Es kann jedoch auch die Bank (oder den Haushalt, wenn Sie dies wünschen) sprengen, wenn es nicht richtig eingesetzt wird.

Ein weiteres Beispiel: Sie können 10.000 US-Dollar für einen Marketing-Mail-Drop bezahlen, um in Zukunft mehr Leads für Verkäufe zu erhalten. Sie zahlen "Umsatzschuld" ab. Dies ist eine Ausgabe mit langfristiger Auszahlung. Vergleichen Sie dies mit dem Grund, warum Sie jetzt Geld für die Umgestaltung eines Codeteils "ausgeben" möchten. In beiden Fällen gibt es keine sofortige Auszahlung, aber Sie stellen sich auf eine bessere Leistung in der Zukunft ein.

Ich neige dazu, den Begriff "xxxx Schulden" als Analogie zu verwenden, wenn ich mit wem auch immer das Zielpublikum spreche. ZB Betriebsschulden - Die Druckmaschine, die wir jetzt haben, funktioniert gut, aber wenn wir die Produktion für einen Tag (oder eine Woche) einstellen und auf eine neue Maschine umrüsten, können wir die Leistung um 25% steigern.

BEARBEITEN - Hier ist eine andere Einstellung dazu


1
+1 für eine gut begründete Antwort, die realistische Wirtschaftlichkeit demonstriert. Schulden sind manchmal rational und Puristen verpassen zu viele Gelegenheiten, wenn sie sie nicht tolerieren können.
Macneil

1
Und die Leute verstehen, dass die Aufnahme von Krediten zur Verzinsung älterer Kredite nicht nachhaltig ist.
Christopher Mahan

1
Dies ist meine Vorliebe für Erklärungen, da ich mich gerne auf das Verschrotten und Umschreiben (was aufgrund der hohen technischen Schulden oft die einzige Option ist) als technische Insolvenz
Wayne Molina

4
Das ist eine schreckliche Antwort. (1) Dies ist komplizierter als die technische Erklärung des Refactorings. (2) Dies erklärt nicht das "Warum" des Refactorings; Es erklärt das "Wann" des Refactorings (dh: wann es kostengünstig ist). Oder vielleicht verstehe ich diesen Beitrag wirklich einfach nicht und daher Punkt (1).
Thomas Eding

2
@ThomasEding (1) Dies ist keine Erklärung für das Refactoring, sondern eine Erklärung für die technische Verschuldung. (2) Dies erklärt das Warum, wann umzugestalten ist - an eine Geschäftsperson. Ehrlich gesagt, sie interessieren sich nicht für den technischen Grund, den Sie haben. Sie möchten einen berechtigten Grund dafür, dass Sie an etwas anderem als der nächsten Funktion arbeiten, die den Umsatz steigern wird. Aus diesem Grund können die meisten Programmierer nicht mit ihrem Chef sprechen und beschweren sich, dass der Chef dumm ist. Sie sind nicht dumm, sie haben nur andere Fahrer als Sie.
Nemi

8

Frühjahrsputz.

Sie nehmen keine Änderungen am Haus vor. Du verschiebst nur Sachen und wirst etwas Staub los. Vielleicht werfen Sie ein paar Dinge raus, die Sie nicht mehr brauchen oder brauchen. aber du fügst nichts hinzu.


1
+1: Dies ist die beste Antwort imo: und so ziemlich jeder kann sich darauf beziehen. "Du lebst in deinem Haus, die Dinge werden schmutzig / staubig / modisch - in regelmäßigen Abständen musst du eine gründliche Reinigung durchführen."
Steven Evers

7

"Haben Sie jemals" Mouse Trap "gespielt ? Wenn wir an neuen Funktionen festhalten, Schnittstellen ändern und Fehler beheben, kann Code so aussehen. Ab einem gewissen Punkt müssen wir entweder viel Kapital aufwenden (Zeit und Mühe) Stellen Sie sicher, dass alle beweglichen Teile gut mit jeder neuen Änderung oder Ergänzung zusammenspielen, oder nehmen Sie sich die Zeit, um das Design zu überarbeiten, damit wir bei jeder Änderung weniger bewegliche Teile verwalten müssen Aus Sicht des Endbenutzers kann der Eindruck entstehen , dass der Refaktor keine Vorteile hat, diese Vorteile treten jedoch jedes Mal auf, wenn nach dem Refaktor eine neue Funktion hinzugefügt wird. Der Vorgang ist schneller, führt zu weniger Fehlern und ist danach kostengünstiger. Ganz zu schweigen davon, dass der überarbeitete Code insgesamt oft effizienter ist.

Sie werden sich vielleicht fragen, warum wir es überhaupt so aussehen lassen wie "Mausefalle":

  • Manchmal bekommen etwas getan jetzt bedeutet , dass wir Eleganz und Effizienz opfern müssen nur „es funktioniert“.
  • Die Sprachfunktionen und andere Technologien, die uns als Programmierer zur Verfügung stehen, ändern sich häufig. Manchmal lassen uns neue Funktionen ein finnisches Durcheinander von sechs beweglichen Teilen durch eines ersetzen.
  • Wenn wir Merkmal C zu Merkmalen A und B hinzufügen, wissen wir oft nicht, dass B irgendwann fallengelassen und D hinzugefügt wird. Ein Weg, um C zu erreichen, mag mit B sehr gut funktionieren, aber nicht sehr gut mit D.

Um weiterhin eine bessere Mausefalle aufzubauen, müssen wir ständig nach Orten suchen, um die Komplexität zu verringern und das, was wir haben, zu optimieren. Es ist der Unterschied zwischen einer Software mit vielen Funktionen und einer wirklich hochwertigen Software. "


6

Alt-Text

Dies ist eine etwas grafischere Version der Heimkino-Analogie.

Wenn Sie eine weitere neue Appliance hinzufügen möchten (auch bekannt als neue Funktionalität), können Sie sie zur Not wahrscheinlich irgendwo unterbringen.

Wenn Sie noch ein weiteres Gerät hinzufügen möchten, können Sie ein Verlängerungskabel kaufen, das Ihnen einige Zeit kostet.

Bei jedem Hinzufügen wird es jedoch schwieriger, eine Lösung zu finden. Und Sie auszusetzen Sie sich mit einem Risiko 1 Feuer [alias Bugs], und Sie müssen das große Geld herausziehen jemanden zu bezahlen , neue Steckdosen in die Wand zu stellen, die möglicherweise auf den ganzen Weg eskalieren könnte auf die Haupt Platine oder noch weiter.

1 Eine andere Sache, über die PHBs nicht sehr gut klarkommen: "Nun, wenn es nur passieren könnte , worüber sorgen Sie sich dann?"


5

Refactoring - ist wie das Organisieren Ihres Kleiderschranks / Werkzeugkastens.

  • Sie werfen Ihre Kleidung / Werkzeuge nicht weg, nur weil sie überall sind.

  • Man könnte argumentieren, dass sie niemals durcheinander geraten sollten. Aber sie tun es.

Genau wie Code. Vor allem, wenn es mit der Zeit wächst.

Und wenn Sie es nicht aufräumen, werden Sie sich immer wieder fragen, was mit dem geliebten T-Shirt oder dem Schlüssel passiert ist, den Sie immer brauchen, aber niemals finden können!


4

Ich würde sagen "Code-Pflege" . Es ist wichtig, Wörter zu verwenden, mit denen die nichttechnische Person vertraut ist und die für eine nichttechnische Weltanschauung Sinn machen. Wenn eine nicht-technische Person (Kunde) mit der Anwendungswartung vertraut ist, ist es einfach, die Codewartung und die Anwendungswartung parallel zu schalten. Auch wenn sie nicht gleich sind, können Sie erklären, dass es sich bei den Endkunden um Entwickler handelt oder um diejenigen, die das System warten.


1
Nichttechniker sind mit der Anwendungswartung vertraut? Ich habe meine Großmutter gefragt: Sie ist nicht und sie ist die technisch wenig versierte Person, die ich gefunden habe. Zusätzlich: Da eine nicht technische Person den Unterschied zwischen Code und Anwendung nicht kennt ("Wenn der Code die Anwendung ist, ist die Anwendung Code"), funktioniert Ihre Analogie nicht.
Martin

2
An den Orten, an denen ich gearbeitet habe, haben die Marketing- und Projman-Typen "Wartung" als "Fehlerkorrekturen nach Veröffentlichung" verstanden, und es wäre unaufrichtig zu behaupten, dass Refactoring das Beheben von Fehlern ist.

Für mich ist die nicht technische Person der Kunde. Wenn der Kunde weiß, was Anwendungswartung ist, sollte er auch die Codewartung verstehen.
Amir Rezaei

"Code-Pflege" klingt so, als ob Ihr Code abgenutzt oder verbraucht ist. Ein Auto muss gewartet werden, da der normale Gebrauch seine Komponenten beansprucht, Flüssigkeiten verbraucht usw. Eine Anwendung ist nicht so - Code auf einer Festplatte "altert" oder "wird nicht schlecht".
Dan Ray

Ich gebe Ihnen ein Beispiel zur Wartung: Leistungsprobleme. Ihre Komponente, Ihr gesamtes System oder Ihre Anwendung ist in VB geschrieben, und Microsoft unterstützt sie nicht mehr. Das Betriebssystem unterstützt nicht die Technologie, auf der Ihr Code basiert. Sicherheitsprobleme. Durch die Wartung dieser Probleme werden keine neuen Funktionen hinzugefügt, die der Endbenutzer möglicherweise bemerkt. Sie sind jedoch für die Aufrechterhaltung der Funktionalität der Anwendung von entscheidender Bedeutung.
Amir Rezaei,

4

Angenommen, Sie sind ein Mechaniker, der sich auf die Individualisierung von Autos spezialisiert hat und diese sogar von Grund auf neu baut, wenn der Kunde dies wünscht. Es gibt diesen Kunden, der von Zeit zu Zeit wieder in Ihrem Geschäft ist, um immer etwas Neues in seine übergroße Limousine zu stecken.

Sobald er hereinkommt, hat er ein schönes Soundsystem installiert. Sie führen die Aufgabe sorgfältig aus, indem Sie die Drähte verlegen und alles ordnungsgemäß anschließen. Er geht einen Tag später aus, ist glücklich und zahlt wie immer gut.

Im nächsten Monat kommt er zurück, aber diesmal möchte er ein vollwertiges Heimkino installieren. Wieder nehmen Sie die Limousine in die Hand. Als Profi überarbeiten Sie das Soundsystem und erleichtern die Wartung, indem Sie ein Schlauchsystem installieren, mit dem die Kabel um das Auto verlegt werden. Auf diese Weise sind die Drähte geschützt und lassen sich leichter herausziehen. Sollten Sie weitere hinzufügen müssen, ist dies ebenfalls einfach. Also reißen Sie die alten Kabel heraus, installieren die Schläuche und übergeben das Soundsystem und die zusätzlichen Kabel für das Kino. Schließen Sie alles und fertig.

Da der Kunde Sie nicht gebeten hat, das alte Soundsystem zu ersetzen, haben Sie einen Teil der Kosten für den Ersatz und die Röhren abgekratzt. Wie auch immer, Sie verdienen immer noch Geld mit dem Geschäft. Nur nicht so viel, wie Sie gehabt hätten. Sie haben das System einfach so zusammengeschmissen, wie Sie es beim ersten Mal getan haben.

Einen Monat später kommt er zurück, diesmal möchte er ein Beleuchtungssystem und neue Lautsprecher, die die alten früher in der Woche beschädigt haben.

Weil Sie alles schön aufgeräumt haben, können Sie die neuen Beleuchtungskabel schnell durch Ihre Röhre führen, das System installieren und den Lautsprecher austauschen. Diesmal sind Sie jedoch viel schneller fertig, und das Re-Factoring zahlt sich aus, indem Sie immer den Überblick behalten.

Ihr Konkurrent, der Sie ausgelacht hat, weil Sie perfekt gute Drähte gerissen und all diese zusätzlichen Schläuche installiert haben, tut sich immer noch schwer, seinen Kunden zufrieden zu stellen. Sicher, er war die meiste Zeit schneller als Sie, aber mit der Zeit beklagen sich seine Kunden, dass es immer mehr Verzögerungen gibt und die Gesamtqualität der Arbeit abnimmt.

Wenn Sie dies betrachten, erkennen Sie, dass es Ihr Ziel ist, nicht nur im Geschäft zu bleiben, sondern die Top-Waffe zu sein, was Sie tun, um die Anforderungen des Kunden zu erfüllen, und was Sie tun, um Ihr Leben auf der Straße einfacher zu machen. Sehr selten zahlt ein Kunde für beides, so dass Sie eng zusammenarbeiten müssen. Sie setzen darauf, dass Sie die Wartungskosten auf einem kontrollierten, stabilen Prozentsatz Ihrer Produktivität halten, wenn Sie die Dinge proaktiv richtig machen, selbst wenn Sie die Kosten doppelt tragen.

Die Software ist die gleiche, mit der Ausnahme, dass Programmierer SEHR lange mit digitalem Klebeband spielen können, bevor die Auswirkungen von Kunden und Managern wirklich wahrgenommen werden. Leider steigen zu diesem Zeitpunkt die Kosten für das Wiederherstellen von Dingen exponentiell in Bezug auf die Menge des vorhandenen Klebebands und das Durchschnittsalter des Klebebands.

Aus diesem Grund ist es wichtig, das System ständig neu zu faktorisieren. Sehr oft zeigt uns die Erfahrung, dass wir auf effizientere Weise dasselbe tun können, oder wir können ähnliche Funktionen kombinieren und Redundanzen ausnutzen, anstatt sie nur zu kopieren. So halten wir das System schlank und gemein. Die Zeit wird zeigen, dass eine ständige Umgestaltung des Systems, um die Anforderungen zu erfüllen, die Produktivität konstant hält, indem die Menge an Wartungsarbeiten gesteuert wird.

Das Anbringen von Klebeband erhöht vorübergehend die Produktivität auf Kosten eines suboptimalen Systems. Technische Schulden entstehen immer dann, wenn eine sofortige Produktivität begünstigt wird, die die anderen Aspekte eines Systems beeinträchtigt. Die Schuldenanalogie ist gut, denn genau wie Zinsen für geliehenes Kapital die Gewinne verschlingen, führt die geliehene Zeit, mit der Dinge hergestellt werden, schnell zu einer höheren Wartung und erhöht die Systemzerbrechlichkeit, was ein Team dazu zwingt, zusätzliche Ressourcen für die Wartung aufzuwenden, anstatt sie zu schaffen. Wenn die Kreditaufnahme unvermindert anhält, werden genau wie bei seinem finanziellen Verwandten die meisten Ressourcen für die Zinsrückzahlung ausgegeben, und es bleibt nur sehr wenig für Verbesserungen übrig. Technische Schulden kosten technische Ressourcen bis zu einem Punkt, an dem die meisten Ressourcen ausgegeben werden, während das System alle anderen möglichen Verbesserungen zum Stillstand bringt.

Letztendlich lautet die Frage also nicht, ob wir es tun sollen oder nicht, sondern ob es ethisch ist, Manager und Kunden glauben zu lassen, dass sie sich auf Produktivitätszahlen verlassen können, die durch die Verwendung von digitalem Klebeband künstlich aufgebläht werden. Einige würden denken, dass es eine Geschäftsentscheidung ist, aber ehrlich gesagt ist dies nur deshalb so, weil Manager es nicht verstehen. Am Ende muss jemand die Schulden entweder durch starkes Re-Factoring oder durch Migration auf ein neues System bezahlen. Letztendlich liegt es an uns Programmierern, die Systeme wartungsfähig zu halten. Sie sollten nicht um eine Neueinstufung bitten müssen, da dies ein fester Bestandteil des Auftrags ist. Wenn Sie dies nicht verstehen, verstehen Sie auch nicht, worum es beim Software-Engineering geht. Allerdings ist mir klar, dass es Systeme gibt, bei denen bereits eine wichtige Schuld entstanden ist, und dass die Tilgung dieser Schuld Entscheidungen der Zahler erfordert. Ihre Aufgabe ist es, zumindest Ihren Teil dazu beizutragen, keine Kredite mehr aufzunehmen. Diese Schuld ist entstandenVON UNS Vielleicht, weil wir es nicht besser wussten, weil wir unter Druck gesetzt wurden, haben wir diese Schulden trotzdem übernommen und sehr oft haben die Leute, denen wir die Schulden ausgehändigt haben, sie nicht verstanden, können sie also nicht richtig verwalten.

Hier ist Ihre Software, alles fertig, ich hoffe es gefällt Ihnen ... Übrigens, ich habe Ihre Kreditkarte voll ausgereizt, ich hoffe es macht Ihnen nichts aus ... cya


3

Der Zweck des Re-Factorings besteht darin, das Design zu vereinfachen und Ineffizienzen zu beseitigen. Dies erleichtert das Beheben von Fehlern und das Hinzufügen neuer Funktionen in der Zukunft.

Das Debuggen ist doppelt so schwierig wie das Schreiben des Codes. Wenn Sie den Code so geschickt wie möglich schreiben, sind Sie per Definition nicht schlau genug, um ihn zu debuggen.

Wenn Sie weiterhin neue Funktionen zum Code hinzufügen, rechnet sich das Re-Factoring schnell. Dies wird in einer geringeren Fehlerrate, einem schnelleren Debugging und schnelleren Korrekturen sichtbar.


Aber clever == 0so 2 * clever == 0...
Thomas Eding

3

Das Schreiben von Software ähnelt dem Schreiben eines großen Sachbuchs oder einer Enzyklopädie.

Der erste Entwurf ist immer schlecht. Es kann immer verbessert werden, indem es neu organisiert wird, Abschnitte entfernt werden, die nicht vorhanden sein müssen, und durchgehend ein einheitlicher Stil sichergestellt wird.

Wann immer Sie überarbeiten müssen, ist es am einfachsten, einen neuen Abschnitt hinzuzufügen, ein paar Wörter zu ändern und so weiter. Aber als sich die Revisionen häufen, verliert das Buch langsam seine Organisation. Sie müssen also weitere Umstrukturierungen vornehmen. Wenn Sie dies nicht tun, wird das Buch zu einem unsinnigen Durcheinander.


3

Nehmen Sie zum Beispiel Ihren Desktop-Computer. Sie haben einen Turm, einen Monitor, eine Tastatur, eine Maus, einen Drucker, einen Scanner und Lautsprecher. Letztendlich ist alles, was Sie wollen, ein gut organisierter Schreibtisch. Also schließen Sie die Dinge einfach blind an, und ein paar Minuten später wird alles so eingerichtet, wie Sie es möchten. Na ja ... fast so, wie du es willst.

Einen Tag später, wenn Sie die Balance Ihrer Lautsprecher ändern, stellen Sie fest, dass Sie versehentlich den linken und den rechten Lautsprecher in die falschen Bereiche gebracht haben, sodass Sie deren Positionen tauschen möchten. Aber oh nein! Es gibt einen Dschungel von verwickelten Schnüren; Wenn Sie fortfahren, die Lautsprecher zu bewegen, wird Ihr Mauskabel eingehakt, und jetzt wird Ihre Maus mit den Lautsprechern mitgezogen. Außerdem hat Ihre Tastatur jetzt keinen Durchhang mehr - Sie konnten sie früher vom Schreibtisch auf Ihren Schoß bewegen.

Okay, Sie können einfach die Maus und die Tastatur ausstecken und wieder einstecken, damit alles in Ordnung ist. Dies hilft jedoch nicht bei zukünftigen Umstrukturierungen und Ergänzungen. Auch das Weben von Maus- und Tastaturkabeln durch den Dschungel ist mühsam.

Die bessere Lösung besteht darin, alles wieder anzuschließen, um es sauber wieder anzuschließen, ohne dass die Kabel sich gegenseitig stören. Jetzt sind zukünftige Änderungen einfach und bleiben einfach. Sie investieren ein wenig im Voraus, um später große Gewinne zu erzielen.

Der entscheidende Punkt ist, dass die ursprüngliche Lösung meistens funktioniert hat. Das ist die Sache beim Refactoring: Es funktioniert zunächst, aber Sie müssen ändern, wie die Dinge bereits existieren, um zukünftige Änderungen leicht vornehmen zu können (die Lautsprecher bewegen).


2

Es ist ein bisschen wie das Aufräumen des Hauses nach einer wilden und verrückten Party von der Nacht zuvor.

Nehmen wir an, das Wohnzimmer wurde total verwüstet. Das Haus ist immer noch ein Haus, das Wohnzimmer ist immer noch ein Wohnzimmer. Es funktioniert, aber es ist nicht so, wie es sein könnte. Nachdem Sie auf das Chaos gestarrt haben, stellen Sie fest, dass es aufgeräumt werden muss.

Also packen Sie den Müll ein. Es sieht schon besser aus. Sie schauen sich also im Raum um und beschließen, die Möbel auszurichten. Sie legen ein Stück zurück, dann das nächste und das nächste. Wow, das Zimmer sieht wirklich gut aus. Du bist stolz.

Deine Schwester kommt herein und sagt, das Zimmer sieht aus wie Müll. Du solltest das Bücherregal reparieren und den Teppich staubsaugen. Sie hat recht. Das Zimmer sieht wirklich sehr gut aus.

Sie sehen sich um und sehen, dass die Fensterläden viel besser aussehen würden, wenn sie alle auf gleicher Höhe wären. Getan. Wow, das Zimmer ist unglaublich.

Behandle deinen Code genauso.


1
Ich mag es, aber ich würde es ändern, um die Küche zu säubern. Eine Weile nicht kochen, aber danach wird es besser. PHBs haben möglicherweise Probleme damit, eine Party zu feiern :)
Jaap

Anständige Analogie, aber es gibt einen Fehler, den Leser beachten sollten: Wenn Sie Ihr Haus nicht reinigen, wird Ihr Haus im Laufe der Zeit buchstäblich weniger nutzbar. Während dies bei einem Programm nicht der Fall ist.
Thomas Eding

1

Einfach!

Nehmen wir ein Beispiel ... Jeder hat in seinem Leben einen Brief an einen lieben geschrieben. Es muss jemand Liebes sein, denn in diesen Briefen achten wir normalerweise auch auf die Komposition.

Sie haben also Ihren Text, ... die Bedeutung wird in beide Richtungen durchgehen, aber Sie möchten, dass das Ganze gut klingt ! Richtig?

Refactoring, das Gleiche ... die gleichen Informationen, mehr oder weniger, aber die Zusammensetzung ist besser. Und es wird wahrscheinlich zu einer besseren Bewertung durch den Leser führen.

Ein weiteres Beispiel - Schreiben eines Artikels für eine Zeitschrift. Zwei Schriftsteller, beide wissen "ihre Sachen", der einzige Unterschied ist, dass einer "wie man schreibt" und der andere so schreibt, wie er es gelernt hat, aus Antworten wie diesen zu schreiben.

An wessen Artikel wirst du dich erinnern?


1

Alle Analogien zu Dingen in der physischen Welt - wie dem Bau eines Theaters - sind meiner Meinung nach schrecklich.

Sie müssen erklären, dass Refactoring-Code wie Refactoring-Code ist. Software ist in einer Weise formbar, wie es physikalische Analoga nicht sind. Da die Dinge immer komplexer werden, muss man massive oder kleine Teile einer Codebasis reaktivieren (oder nach Belieben wiederholen), damit wir die Komplexität weiter erhöhen können, ohne wahnsinnig zu werden.

Warum überarbeiten wir? Denn Code, der nie überarbeitet wird, kostet mehr Wartung und Änderung pro Minute und wird letztendlich problematischer.

Das Interessante am Refactoring ist, dass wir die Codebasis wiederholen, die Funktionalität jedoch zumindest zu Beginn unverändert bleibt.


/ Alle Analogien /? Ich stimme überhaupt nicht zu. Sie müssen nur kreativer sein. Beantwortet auch nicht die Frage des OP.
Thomas Eding

@ThomasEding danke für deinen Kommentar. In dem zweiten Punkt bin ich anderer Meinung: Ich beantworte die Frage tatsächlich. Allerdings werde ich jetzt eine Bearbeitung nur für Sie vornehmen.
Dan Rosenstark

0

Re-Factoring ist das Gleiche wie Aufräumen und dem Zeug einen neuen Ort zum "Bleiben" geben.

Einfach einfach und etwas, das viele Male dauern kann. Manchmal füge ich sogar hinzu, dass die Person X ein großes Durcheinander hinterlassen hat, und ich muss es aufräumen.


0

Ich dachte an ein anderes Beispiel, von dem anscheinend niemand hier gesprochen hat: Refactoring ist so ziemlich dasselbe wie das Umstellen einer Gleichung in der Mathematik (obwohl dies möglicherweise außerhalb des Rahmens einer nicht-technischen Person liegt, denke ich).

Wenn Sie eine Gleichung neu anordnen, verschieben Sie sie einfach, um sie lesbarer und benutzerfreundlicher zu machen, ohne die Bedeutung zu ändern .


1
Also, wenn ich ein PHB oder Kunde bin (wer wird für diese Umgestaltungsbemühungen bezahlen), warum sollte es mich interessieren? Der Code funktioniert (aus meiner Sicht)
Dan Pichelman

0

Gib ihnen eine einfache mathematische Gleichung. Zum Beispiel:

Welches ist einfacher?

y = x + x

oder

y = 2x

Refactoring ist ein ähnliches Konzept, außer dass Sie anstelle einfacher mathematischer Gleichungen Algorithmen eingeben. Die Hauptidee ist, dass Sie zwischen zwei Methoden wechseln können, da diese das gleiche Ergebnis liefern.

Das einfachste Refactoring, das durchgeführt werden kann, ist das Umbenennen.

doX() { ... }
{
   doX()
}

Jetzt, da wir nicht wirklich wollen, dass die Dinge doX heißen, weil wir nicht wirklich wissen, was es bedeutet, benennen wir es in etwas anderes um, das selbsterklärender ist und überall dort ersetzt, wo wir es verwendet haben.

doBusinessTransaction() { ... }
{
   doBusinessTransaction()
}

Auf diese Weise sparen Sie später Geld, wenn ein Problem oder eine Verbesserung auftritt, da die Zeit für das Verständnis und die Behebung Ihrer Anwendung verkürzt wird. Um noch mehr Geld zu sparen, gibt es kostenlose Tools, die dies automatisch für Sie erledigen, je nachdem, welche Sprache Sie verwenden. Diese Tools sind auch so lizenziert, dass sie nicht einschränkend sind und Sie nichts Besonderes tun müssen, außer es zu bestätigen, wenn Sie es direkt verwenden.


1
Ich mag diese Analogie wirklich, weil sie für alle verständlich und dem Code selbst sehr ähnlich ist.
Venkat D.

Danke, ich habe es sogar auf meinem Blog gepostet. Trajano.net/2013/05/refactoring-explained
Archimedes Trajano

0

Ein Bild sagt mehr als tausend Worte. Für das Refactoring gibt es beispielsweise zwei Anwendungsfälle:

  • Wenn die Dinge beim ersten Mal nicht richtig gemacht werden:

Refactoring, wenn die Dinge beim ersten Mal nicht richtig gemacht werden

  • Wenn es langweilig wird:

Refactoring, wenn es langweilig ist

Verweise


Mit XKCD ist es die Zeit wert, die Tatsache zu ignorieren, dass eine effizientere Routineaufgabe dazu führen kann, dass Sie am Ende viel mehr davon tun, als Sie es sonst getan hätten. Sie müssen also den Wert berücksichtigen, den Sie durch die zusätzlichen Leistungen der Aufgabe erhalten.
BDSL

@ BDSL Das ist am Arbeitsplatz
Paul Sweatte

0

Stellen Sie sich eine Antwort in Refactoring vor und erklären Sie sie keiner nicht technischen Person. Refactoring ist eine technische Aktivität, über die sie nichts wissen müssen:

Natürlich sagen viele Leute, dass sie von der Qualität getrieben werden, aber mehr vom Zeitplan. In diesen Fällen gebe ich meinen kontroversen Rat: Erzählen Sie nicht!

Subversiv? Ich glaube nicht. Softwareentwickler sind Profis. Unsere Aufgabe ist es, so schnell wie möglich effektive Software zu entwickeln. … Ein Manager, der sich nach Zeitplänen richtet, möchte, dass ich die Dinge so schnell wie möglich erledige. Wie ich es mache, ist meine Sache. Der schnellste Weg ist die Umgestaltung; deshalb refactor ich.

(Refactoring, Martin Fowler, 2000, Seite 61)

Natürlich funktioniert das nicht, wenn Sie einen Monat lang nichts anderes tun als umgestalten, aber ich denke, das ist im Allgemeinen sowieso eine schlechte Idee, und es ist viel besser, nur umzustrukturieren, soweit dies erforderlich ist, um Ihre aktuelle oder nächste Aufgabe zu vereinfachen , oder um Code zu bereinigen, mit dem Sie gerade gearbeitet haben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.