Die Wartbarkeit spielt bei der professionellen Softwareentwicklung eine wichtige Rolle. In der Tat ist die Wartung fast immer der längste Teil eines Software-Lebenszyklus, da sie von der Projektfreigabe bis zum Ende der Zeit andauert.
Darüber hinaus machen Projekte in der Instandhaltung einen großen Teil der Gesamtzahl der Projekte aus. Laut http://www.vlegaci.com/298/interesting-statistics-%E2%80%93-numbers-of-programmers-inmaintenance-vs-development/ beträgt der Anteil der Projekte, die in der Wartung sind, ungefähr 2 /3.
Ich bin kürzlich auf diese Frage gestoßen, bei der der Typ ziemlich überrascht aussieht, als er feststellt, dass es bei seiner Arbeit hauptsächlich um Instandhaltung geht. Ich beschloss dann, eine Diskussion (auf Französisch) auf der Hauptseite der französischen Community von Softwareentwicklungsfachleuten ( http://www.developpez.com/ ) zu eröffnen . Die Diskussion trägt den Titel "Sind die Studierenden gut genug auf die Realität der professionellen Softwareentwicklung vorbereitet?" und geht es hauptsächlich um Wartbarkeit . Es wurde darauf hingewiesen, dass die Menschen zumindest in Frankreich nicht gut genug darauf vorbereitet sind, sich in beiden Aspekten der Instandhaltung zu stellen:
- bestehenden Code pflegen
- machen wartbaren Code
Meine Frage hier spiegelt diese Diskussion wider und zielt darauf ab, einen guten Weg zu finden, Wartbarkeit zu lehren.
- Wie können wir Wartbarkeit vermitteln?
- Welche Art von Übung würden Sie vorschlagen?
- Wenn Sie in Bezug auf Wartbarkeit gut geschult wurden, welche speziellen Kurse haben Sie besucht?
[edit] Nach einigem Missverständnis denke ich, dass ich meine Frage klären muss. Als Projektleiter und Softwareentwickler arbeite ich oft mit Auszubildenden oder frisch graduierten Studenten. Ich war selbst einmal frisch graduiert. Die Sache ist, dass die Schüler normalerweise nicht mit Prinzipien wie SOLID vertraut sind, die die Wartbarkeit eines Projekts verbessern. Oft haben wir große Schwierigkeiten, Projekte weiterzuentwickeln (geringe Wartbarkeit). Was ich hier suche, ist ein konkretes akademisches Beispiel für eine erfolgreiche Lehre über die Bedeutung der Wartbarkeit und wie man einen besseren Code in Bezug auf diesen bestimmten Punkt erstellt; oder mögliche Vorschläge zur Verbesserung der Art und Weise, wie Schüler ausgebildet werden.
quelle
Antworten:
Das ist eine Frage der Übung.
Der einfachste Weg , um es in eines der praktizierenden kontrollierte ich denken kann ist , zu simulieren über typisches Wartungsprojekt wie folgt.
Holen Sie sich ein Projekt ( Projekt A ), das gut gemacht ist, und führen Sie einige Probleme ein: Fügen Sie einige Fehler ein, eine Menge duplizierten und toten Codes, löschen Sie einige Funktionen, Komponententests und Dokumentation hier und da usw. Möglicherweise haben Sie sogar ein dediziertes Programm Name dafür, wie Project A - beschädigte Version .
Richten Sie einen Issue Tracker ein und füllen Sie ihn mit Anfragen, die bestimmten Schäden entsprechen, die Sie angerichtet haben. Stellen Sie grundlegende Regeln und Praktiken für den Entwicklungsprozess auf - VCS-Commits, Codeüberprüfungen, Qualitätssicherung usw. - und ziehen Sie in Betracht, was Sie aus der Checkliste in The Joel Test entnehmen können .
Beheben Sie Fehler, fügen Sie fehlende Komponententests, Dokumentationen und Funktionen hinzu.
Refactor.
Wartung / Verbesserung von Originalprojekten zur Verwendung durch Studenten des nächsten Jahres
- Projekt A Version 2.0 bzw. Projekt A - beschädigte Version 2.0 .
Unter Verbesserung der beschädigten Version verstehe ich den besseren Schaden für die Bildung. :)
Achten Sie bei den oben genannten Vorgehensweisen besonders auf die Codeüberprüfung . Dies ist wahrscheinlich der effektivste Weg, um sicherzustellen, dass der Code einfach zu warten ist, wie z. B. in der oberen Antwort auf eine verwandte Frage angegeben .
quelle
Haftungsausschluss: Ich habe gerade meinen CS-Abschluss gemacht. Ich bin kein Lehrer.
Das mag sich offensichtlich anhören, aber ich denke, der beste Weg, um die Codewartung zu lehren, besteht darin, dass die Schüler die Codewartung durchführen. Folgendes würde ich tun:
Die Idee ist, die Schüler nicht nur mit dem Code einer anderen Person arbeiten zu lassen, sondern auch eine Wertschätzung für wartbaren Code zu entwickeln, mit der sie hoffentlich ihre Designfähigkeiten verbessern können.
quelle
Wartbarkeit ist eine Tugend, keine Fähigkeit. Es gibt viele Wege, um wartbare Projekte zu erstellen, aber keine Formel, die diese garantiert hervorbringt.
Wenn Sie Tugenden wie Freundlichkeit und Großzügigkeit schätzen, suchen Sie nach Wegen, um dasselbe in Ihrem täglichen Leben zu praktizieren. Das Gleiche gilt für die Wartbarkeit: Wenn Sie und Ihr Unternehmen Wert auf Wartbarkeit legen, behalten Sie dies im Hinterkopf, während Sie Ihr Projekt entwerfen und implementieren. Es wird ein legitimer Grund sein, etwas mehr Zeit für den Aufbau zu verwenden, da Sie wissen, dass Wartungsfreundlichkeit geschätzt wird. Umgekehrt wird davon abgeraten, aus Gründen der Wartbarkeit zusätzliche Zeit in einer Organisation zu verbringen, die dies nicht schätzt.
Wenn Sie den Leuten beibringen möchten, Dinge wartbar zu machen, sollten Sie zunächst klarstellen, dass Ihre Organisation Wartbarkeit schätzt. Geben Sie dies in den Anforderungen für Ihre Projekte an. Machen Sie es zu einem der Kriterien für eine erfolgreiche Codeüberprüfung. Kurz gesagt, machen Wartbarkeit Teil Ihrer Kultur .
Als nächstes sollten Sie bereit sein, einige Ressourcen für die Verbesserung der Wartbarkeit Ihrer vorhandenen Projekte bereitzustellen. Identifizieren Sie die Teile eines Projekts, in denen Fehler immer wieder auftauchen oder in denen das Beheben von Fehlern oder das Vornehmen von Änderungen sehr schwierig und zeitaufwändig ist.
Schließlich indoctrinate neue Entwickler in der Kultur der Wartbarkeit von ihnen Teams zuweisen , dass es bereits täglich üben. Es gibt keinen besseren Weg, um jemandem zu helfen, einen Wert anzunehmen, als ihm viele gute Beispiele und Anleitungen zu geben.
quelle
Ich jedenfalls mag den Begriff Wartbar in Bezug auf Softwareentwicklung nicht. Die Realität ist, dass alle Software insofern gewartet werden kann, als sie Wartungsarbeiten unterzogen werden kann. Die eigentliche Frage ist also, ob die Wartung von Software relativ teuer oder kostengünstig ist. Ich weiß, dass dies wie eine sehr umständliche Aussage zu Beginn einer Antwort klingt, aber mein Punkt wird in einem Moment klarer.
Das Problem mit IT-Abschlüssen, die einen Schwerpunkt in der Softwareentwicklung haben, besteht darin, dass sie den Schülern nur das Minimum beibringen, das sie zum Schreiben von Software benötigen. Berufliche Fähigkeiten und Kenntnisse durch das Lernen erworben , die in den ersten Jahren erfolgen nachQualifikation für den Abschluss. Dies ist der Zeitpunkt, an dem ein Absolvent beginnt, an Projekten zu arbeiten, die für einen Kunden tatsächlich von Bedeutung sind, in einem Umfeld, in dem ein hoher Leistungsdruck herrscht und die Erwartung besteht, ein Produkt zu schaffen, das einem professionellen Standard entspricht. Leider fördern viele Unternehmen keine Kultur, in der professionelle Standards in Bezug auf Software aufrechterhalten werden, und es entstehen Projekte, deren Entwicklung und Pflege sich als kostspielig herausstellen. Unglücklicherweise lernen unsere Absolventen in den ersten Jahren ihrer Karriere viele schlechte Gewohnheiten in solchen Umgebungen, und es kann lange dauern, bis sie lernen, wie sie diese Gewohnheiten überwinden können ... wenn überhaupt.
Sie sollten den Schülern besser beibringen, wie man sauberen Code schreibt und wie man Probleme in Software identifiziert, die normalerweise technische Schulden verursachen . Lesen Sie in Büchern über Clean Code , Refactoring und Lean Software Development nach, und bringen Sie den Schülern bei, Unit-Tests vor dem Implementierungscode zu schreiben, um sicherzustellen, dass ein hohes Maß an Testabdeckung vorliegt. Bringen Sie den Schülern bei, duplizierte und sich wiederholende Muster in ihrem Code zu erkennen und den Code zu überarbeiten, um solche Duplikate zu entfernen. Helfen Sie den Schülern, Prinzipien wie SOLID und DRY zu verstehen und anzuwenden. Am wichtigsten ist, dass Sie die Idee aufgeben, dass die Fähigkeit, Code zu verwalten, ausschließlich auf dem Entwurf und der Implementierung des Codes basiert und stattdessen von Anfang an ein Gespür für Handwerkskunst und Qualität bei der Erstellung von Software vermitteln soll Verfeinern Sie den Code bei der Implementierung, um die Auswirkungen technischer Schulden zu minimieren und die Kosten für die Wartung der Software im Laufe der Zeit so gering wie möglich zu halten.
quelle
Ich denke, der beste Weg, um diese Art von Fähigkeiten zu erlernen, besteht darin, Code-Reviews und Pair-Programme durchzuführen. Während der Codeüberprüfung können erfahrene Mitarbeiter aufzeigen, wie Code besser gewartet werden kann (in der Regel durch eine bessere Lesbarkeit) und begründen, warum bestimmte Entscheidungen zu besser gewartetem Code führen können.
Pair Programming ist ein noch besserer Weg, um solche Dinge zu lehren, da es weniger erfahrenen Mitarbeitern direkte Erfahrung bei der Pflege von Code mit jemandem gibt, der bereits weiß, wie man es gut macht.
Es gibt auch einige großartige Bücher, die Sie über das Schreiben von sauberem, wartbarem Code lesen können. Clean Code fällt mir ein.
Es ist schwierig, diese Erfahrung im akademischen Bereich zu sammeln, da die Schüler selten große Codebasen ändern. Die meisten dieser Fähigkeiten werden beim Lernen im Beruf erworben, und Codeüberprüfungen und das Programmieren von Paaren können dieses Lernen wirklich erleichtern.
quelle
Guter Code = Weniger Wartung und einfache Erweiterung / Hinzufügung von Funktionen.
Schlechter Code = Wartungs-Albtraum
Grundsätzlich müssen wir den Schülern die folgenden Punkte vermitteln: "Immer wenn ein Projekt einen beschissenen Code enthält, tritt ein neuer Entwickler in das Unternehmen ein, weil der ursprüngliche Autor des Codes darunter leidet und die Software in Mitleidenschaft gezogen wird . "
Eine der besten Methoden, um den Schülern die Wartung von Software beizubringen, besteht darin, das Beispiel für guten und schlechten Code zu zeigen und sie zu bitten, eine Funktion hinzuzufügen, und ihnen dann beizubringen, dass das Schreiben eines guten Codes nicht nur zur Selbstzufriedenheit, sondern auch zum Erstellen dient Es ist einfach für die Leute, die den Code pflegen werden.
Übung:
1) Haben Sie einen vorab geschriebenen falschen Code (z. B. einen doppelten Code), wird an 9 Stellen in einem Projekt eine Methode geschrieben, die besagt, dass "die Hypothekenzahlung berechnet wird" .
Bitten Sie den Schüler, die Funktion so zu erweitern, dass "alle Hypothekenzahlungen um 1,2% erhöht werden".
Nun wird der Schüler den Schmerz bemerken, den Code an allen 9 Stellen zu lokalisieren und zu reparieren. Es gibt viele Möglichkeiten, dass er nicht alle 9 Stellen finden konnte, an denen die "Hypothekenzahlung" berechnet wird.
2) Zeigen Sie nun den Good Code mit dieser Methode an, mit der die Hypothekenzahlung an einem einzigen Ort berechnet wird . Zeigen Sie dem Schüler, wie einfach es ist, einen gut geschriebenen Code zu verbessern, und erklären Sie ihm, wie die Wartbarkeit des Codes / Projekts verbessert wird.
Übrigens, ich fand Ihren Ansatz toll, die Studenten der Wartbarkeit der Software auszusetzen.
quelle
@mattmattj: Da es viele Antworten gibt und der Link, den ich gepostet habe, auch einige gute Hinweise enthält, füge ich etwas hinzu, das hoffentlich keine Wiederholung der bereits geposteten Antworten ist.
Erstens MUSS man "Wartbarkeit" definieren - es gibt keine einzige Definition, die von allen akzeptiert wird - ähnlich wie bei der Softwarearchitektur. Wählen Sie also eine, die Ihrer Meinung nach die wichtigste ist, und geben Sie sie in 3-4 Zeilen mit max. Dann können Sie über einige Metriken sprechen, wie z. B. Zeit zum Erinnern / Verstehen Ihres eigenen Codes (oder des Codes eines anderen), Anzahl der WTFs pro Minute / Stunde usw. Behalten Sie es leicht (humorvoll) bei - das macht sie empfänglicher für das, was Sie haben danach zu sagen.
Einige Übungen (es klingt möglicherweise etwas überlappend mit einigen der Antworten, bitte verzeihen Sie das)
Hier legen Sie die Grundlage für die Wartbarkeit - jede Codezeile, die geändert / aktualisiert wird, kostet das Unternehmen Geld. Je einfacher es ist, Code zu lesen und zu speichern, desto besser / schneller ist die Änderung, die zur Verkürzung der Time-to-Market beitragen würde. Sehr wichtig im heutigen schnelllebigen technologischen Raum. Wartbarkeit ist der Schlüssel zur effizienten Weiterentwicklung von Systemen.
Es ist wichtig, den Unterschied zwischen Greenfield- und Brownfield-Entwicklung zu verstehen - nicht jedes Projekt oder System würde von Grund auf neu erstellt (es ist ziemlich schwierig, Projekte von Grund auf zu finden oder Teil davon zu sein). Erklären Sie, dass das Feld "inhärent" braun ist und Sie Zeit damit verbringen müssen, es zu formen, wenn es "außer Kontrolle" gerät. Je eher sie das akzeptieren, desto besser. Dies ist schwierig, da das Programmieren von Natur aus kreativ ist, das Verbessern des Codes eines anderen jedoch nicht als solches wahrgenommen wird. Kreativität Es gibt die Möglichkeit, den Code zu verstehen und dann "Ihre" Kreativität anzuwenden, um ihn zu verbessern. Wenn dies besser gepflegt wird, können Sie ihn in Zukunft noch kreativer verbessern.
Zögern Sie nicht, sich auf die Spaghetti-Analogie im obigen Link zu beziehen ... ich hoffe, dies hilft, einige Punkte nach Hause zu bringen. Die anderen Antworten helfen, die Lücken zu füllen und sollen Ihnen beim Unterrichten helfen! Viel Glück!
quelle