Zum Inhalt springen
L

Das Video kommt von YouTube: erst beim Abspielen verbindet sich die Seite mit YouTube (Google).

Refactoring: Warum es so WICHTIG für GUTEN CODE ist

The Morpheus Tutorials11:14 16.385 Aufrufe veröffentlicht Auf YouTube

Das Wichtigste aus dem Video

Tipp auf eine Zeit – das Video springt genau dorthin.

Transkriptautomatisch erstellt · 99 Zeilen
Herunterladen
  1. Na, wie oft habt ihr euch schon an euer Projekt von vor zwei Wochen gesetzt und keine Zeile Code mehr wiedererkannt? Das ist schlechte Codequalität und tatsächlich das normalste der ganzen Welt.
  2. Projekte starten ja oft wild, mit tollen Ideen und man möchte möglichst schnell zu einem Ergebnis kommen. Nach ein paar Sprints, also kurzen Codeschreibeintervallen sozusagen, merkt man dann aber,
  3. dass es immer schwerer wird, sich da durchzubeißen. Man weiß nicht, was welche Funktion eigentlich macht und man muss ständig etwas anpassen.
  4. Auch nicht in der Datei, in der man gerade eigentlich arbeitet. Das passiert also in großen Unternehmen wie auch in privaten kleinen Projekten.
  5. Wir haben uns ja schon in einer ganzen Serie angesehen, wie man Code eigentlich wirklich clean halten kann. Wie er besser lesbar und besser wartbar ist.
  6. Aber tatsächlich klappt es auch oft genug mit diesen Tricks auch nicht. Eine große Aufgabe bei der Programmierung ist daher das Refactoring und darum geht es heute.
  7. Wo wir aber gerade dabei sind, auch in großen Unternehmen ist Refactoring ein häufiges Thema und daher habe ich euch heute einen Partner mitgebracht, der euch unbedingt möchte.
  8. Bosch. Klar, Refactoring ist nicht alles, was ihr bei ihnen machen werdet,
  9. aber unter uns, ihr werdet das Wissen aus diesem Video auf jeden Fall brauchen. Bosch ist vielleicht nicht unbedingt als IT-Arbeitgeber bekannt,
  10. für die, die aber aufmerksam die Coding-Challenges verfolgt haben, ist klar, dass Bosch unfassbar viel IoT, vor allem im Automotive-Bereich macht.
  11. Deswegen veranstalten sie auch eine spezielle Messe für alle Bewerber, wo ihr euch alles mal genau ansehen könnt, Fragen stellen könnt,
  12. mit potenziellen zukünftigen Kollegen über ihre Arbeit sprechen könnt und schauen könnt, ob das für euch wirklich alles passt.
  13. Dazu müsst ihr euch allerdings schon richtig bewerben, also naja, zumindest einen Lebenslauf hochladen müsst ihr.
  14. Das könnt ihr bis zum 15.03. noch machen. Alle Infos sind unten natürlich verlinkt. Und ich darf dann tatsächlich auch während der Messe auch wieder einen Coding-Challenge-Stream machen,
  15. der auch hier auf dem Kanal ausgetragen wird, was mich natürlich extrem freut. Der findet 10 Tage später, also am 25.03. im Livestream statt auf diesem Kanal
  16. und aktiv teilnehmen können diesmal nur die offiziellen Bewerber von Bosch. Allerdings könnt ihr als meine Community selbstverständlich danach
  17. trotzdem alle Aufgaben nochmal für euch lösen oder sie einfach so lösen. Dabei wünsche ich euch natürlich jetzt schon viel Spaß und viel Erfolg.
  18. Okay, dann lasst uns anfangen mit Refactoring. Für eine Definition davon möchte ich mal ganz kurz hier Martin Fowler zitieren.
  19. Allerdings übersetzt natürlich. Refactoring ist der Prozess, ein Software-System zu ändern,
  20. so dass sich das externe Verhalten des Codes nicht ändert, sich aber dennoch die interne Struktur verbessert.
  21. Es ist eine disziplinierte Möglichkeit, den Code aufzuräumen, die die Chance minimiert, Bugs einzuführen.
  22. Zusammengefasst ist Refactoring das Verbessern des Codes, nachdem er geschrieben wurde. Ich denke, das trifft den Nagel auf den Kopf.
  23. Ich möchte also durch Refactoring besser lesbaren und wartbaren Code haben, ohne sein Verhalten eigentlich zu ändern.
  24. Aber was bringt mir das denn jetzt? Häufig schreibt man einem Stück Code mehrere Entwickler.
  25. Das heißt, nicht nur ihr müsst mit eurem unlesbaren Stück zurecht kommen, sondern auch eure Kollegen und vor allem auch jemand ohne euch.
  26. Denn es garantiert ja niemand dafür, dass ihr für immer in diesem Betrieb bleibt. Es geht aber nicht nur um Dinge wie Variablen-Namen oder Funktions-Namen,
  27. sondern auch um die gesamte Struktur des Projektes. Durch Refactoring habe ich unabhängige logische Teile einer Funktion
  28. wirklich als unabhängige Funktion geschrieben, die ich dann auch leichter wiederverwerten kann.
  29. Dadurch kann ich nicht nur Fehler besser finden, sondern auch neue Features leichter erstellen.
  30. Ich kann leichter die Laufzeit messen und in kritischen Bereichen optimieren. Ungenutzter Code fällt auch leichter auf
  31. und dadurch kann zudem noch Speicher eingespart werden. Kurzum, eure Code-Qualität, die ja durchs Refactoring gesteigert wird,
  32. macht mehr Features schneller möglich, verringert Abstürze, macht Sicherheitsprobleme dadurch offensichtlicher
  33. und verbessert die Performance, auch wenn ihr allein an einem Projekt arbeitet. Das sind doch eigentlich alles ziemlich gute Argumente.
  34. Kurz einführen möchte ich auch den Begriff der Technical Debt, der technischen Schuld, die eine Metapher dafür ist,
  35. dass Manager von Projekten oft an der falschen Stelle Geld einsparen. Häufig fehlt die Zeit für sauberen Code,
  36. ein neues Feature muss bis zu einer Deadline zum Beispiel eingehalten werden und Geld für neue Entwickler ist auch einfach nicht da.
  37. Auch vermeintlich günstige Entwickler, die nur für das Projekt bezahlt werden, jedoch nicht so sehr auf die Code-Qualität achten,
  38. produzieren diese technische Schuld, wie man so schön sagt. Man schiebt also absolut notwendige Maßnahmen wie Refactoring einfach auf
  39. und erhält einen riesen Schuldenhaufen, der es immer schwerer macht, neue Features zu entwickeln.
  40. Laut Roger Pressman kann sich sogar der Aufwand für neue Features um das 60- bis 100-fache steigern, wenn man kein Refactoring durchführt.
  41. Das heißt, ein Feature, das mit sauberem Code eine Stunde gebraucht hätte, braucht ohne Refactoring bis zu 100 Stunden Arbeit.
  42. Privat ist das natürlich höchst frustrierend, für Firmen sind das aber zweieinhalb Entwickler und eine ganze Woche Arbeit
  43. für eine Aufgabe, die eine Person in einer Stunde machen könnte. Der Druck auf die Entwickler für neue Features steigt dadurch noch mehr
  44. und sie haben noch weniger Zeit fürs Refactoring. Das ist eine waschechte Teufelsspirale, die ein Projekt wirklich kippen kann.
  45. Okay, aber wie messe ich jetzt, wie gut Code refactored wurde und ob er das vielleicht sogar ganz dringend nötig hat?
  46. Hier wird es jetzt ein kleines bisschen schwerer, denn Codequalität ist in Teilen etwas Subjektives
  47. und wir hassen Subjektivität normalerweise. Aber wie gesagt, nur in Teilen.
  48. Es gibt Möglichkeiten, etwas konkret zu messen und die können euch zeigen, welche Stelle in eurem Code es am dringendsten nötig hat.
  49. Linter zum Beispiel geben euch schnell Aufschluss darüber, dass eure Einrückung nicht gut ist
  50. und dass zum Beispiel eine Funktion mehr als 350 Zeilen lang ist und damit definitiv zu lang ist.
  51. Die sogenannte Cyclomatic Complexity ist ebenfalls eine tolle Metrik. Sie gibt an, wie viele linear unabhängige Pfade durch euren Source Code möglich sind
  52. und wird über den Kontrollflussgraphen berechnet. Sinkt diese, ist das auch wieder ein gutes Zeichen.
  53. Eine weitere wichtige Metrik könnt ihr über Tests finden, die ihr dazu natürlich erstmal en masse braucht.
  54. Refactoring sollte nun im besten Fall dazu führen, dass erstmal mehr Bugs gefunden werden.
  55. Das ist vielleicht eher etwas Schlechtes, aber die Bugs zu reparieren, das führt dann dazu,
  56. dass natürlich insgesamt weniger Bugs in euren Projekten drin sind. Sprich, während des Refactorings repariert man automatisch sehr viele Bugs.
  57. Zudem sollte sich die Anzahl der Unit Tests natürlich extrem erhöhen. Im Normalfall habt ihr nämlich nach dem Refactoring mehr Funktionen,
  58. die auch aluunabhängig getestet werden können. Das macht euer gesamtes Software-System viel robuster.
  59. Jetzt ist aber natürlich die Frage, wie? Das Video hier will euch nur einen kleinen Überblick geben.
  60. Wenn ihr wirklich tiefer in die Materie allerdings eintauchen wollt, dann sagt mir bitte Bescheid, dann hänge ich hier noch mehr Videos ran.
  61. Die erste Möglichkeit Refactoring zu betreiben ist RedGreenRefactor. Das klappt nur in Kombination mit Test Driven Development,
  62. was ein eigenes Video bekommen wird und hier nur ganz kurz erwähnt sei. Bei Test Driven Development, kurz TDD,
  63. wird kurz gesagt erst der Test geschrieben und dann der Code. Bei RedGreenRefactor wird das Ganze um eine dritte Stufe erweitert.
  64. Red heißt also, schreib deinen Test. Der muss natürlich jetzt failen, weil es gibt ja noch keinen Code.
  65. Der wird also am Anfang rot, deswegen Red. Green bedeutet, schreib den Code zu dem Test,
  66. dass der Test eben erfolgreich durchläuft, sprich, dass das Testergebnis grün ist.
  67. Und Refactor heißt, schau durch deinen Code durch und direkt nachdem du ihn geschrieben hast,
  68. überleg dir, ob du irgendwo was optimieren kannst, ob du was auslagern kannst.
  69. Also gibt es zum Beispiel Funktionen, die du auslagern kannst? Gibt es andere Codes, zum Beispiel?
  70. Hier nochmal kurz der Verweis an meine Clean Code Reihe, die ihr euch in diesem Zusammenhang definitiv nochmal anschauen solltet.
  71. Es gibt eine Reihe von Mustern, die man hierzu verwenden kann, so eben auch Compose Method, wo ihr versucht, eine Methode zu erstellen,
  72. die dann an mehreren Stellen genutzt werden kann. Auch sehr wichtig ist Branch by Abstraction,
  73. wo noch eine zusätzliche Schicht in eure Architektur eingezogen wird, um den nicht ganz so tollen Code besser zu abstrahieren
  74. und Refactoren zu können. Wir schauen uns das aber gerne nochmal in kommenden Videos genauer an
  75. und sprechen dann wirklich in der Codeebene darüber. Auch durch Tools kann man sich das Leben beim Refactoren,
  76. also bei dem eigentlichen Vorgang, sehr viel leichter machen. Die meisten gängigen IDEs bieten euch alle möglichen Hilfestellungen an,
  77. um den Prozess ebenso leicht wie möglich zu machen. Werfen wir hierzu mal ganz kurz einen Blick in IntelliJ
  78. bzw. alle JetBrains IDEs, mit denen ich ja immer arbeite. Tippt ihr dort zum Beispiel STRG, ALT, SHIFT und T an,
  79. ja, vier Tasten auf einmal, bekommt ihr wie hier zu sehen ein Untermenü mit allen Optionen, also zum Beispiel Umbenennen einer Variable,
  80. eine Funktion, eine Variable, Konstante oder sowas zu extrahieren oder sogar eine eigene Klasse für etwas zu erschaffen.
  81. Auch das müsste ich allerdings mal im Detail in einer Serie vielleicht zu der IDE selbst zeigen.
  82. Vielleicht macht das ja auch sogar Sinn. Trotz all der Unterstützung und vor allem trotz all der Notwendigkeit
  83. liegen die Probleme allerdings häufig woanders. Ihr als Entwickler habt ja durchaus auch ein Interesse daran,
  84. dass ihr Refactoring betreiben könnt. Sonst wird euer Job frustrierend, um nicht zu sagen nervtötend.
  85. Aber häufig bleibt dann auch die Frage, wo soll ich überhaupt anfangen? Kann ich das zeitlich schaffen oder muss ich ein neues Feature
  86. wirklich per Deadline liefern? Gibt es vielleicht auch wirklich regelmäßig einen Sprint,
  87. der nur zum Refactoring eingeplant ist? Haben meine Kollegen da überhaupt auch Bock drauf?
  88. Und wird Codequalität auch wirklich im Team und bei Reviews durchgedacht? Gerade wenn das Management oder die Senior Entwickler
  89. den Wert von Coderefactoring nicht unbedingt so wertschätzen oder kennen, kann das ein Problem sein.
  90. Und eher früher als später landet man dann bei Legacy Code mit dem Kommentar Ich habe keine Ahnung warum das läuft, aber wenn ich es lösche,
  91. klappt gar nichts mehr. Bitte bloß nicht anfassen. Das habe ich tatsächlich so schon mal in Code gesehen.
  92. So etwas ist zwar witzig, führt aber auf lange Frist dazu, dass euer privates Projekt vereingelassen wird
  93. und Projekte sogar in großen Unternehmen einfach eingestampft werden oder komplett neu geschrieben werden,
  94. weil sie einfach zu teuer und festgefahren sind. Daher lasst mich hier nochmal ganz kurz auf Bosch aufmerksam machen.
  95. Die haben mir gegenüber mehrfach schon betont, wie wichtig ihnen Codequality ist.
  96. Falls ihr also gerne Hardware nahe arbeitet und Erfahrung mit C++ mitbringt, bewerbt euch direkt nach diesem Video und dann hören bzw. sehen wir uns
  97. spätestens beim Coding Turnier wieder. Bis dahin könnt ihr schon mal auf the-morphikes.cc ein bisschen üben gehen.
  98. Wir haben auch ein paar neue Challenges für euch und ich wünsche euch allen viel Spaß dabei.
  99. Ciao.

Zum Nachlesen