Heim >Java >javaLernprogramm >Beratung zur Entwicklung und Wartung von Java für große Projekte
Angenommen, Sie sind ein Java-Entwickler, der ein Projekt mit 2000 Klassen entwickelt und verwaltet und viele Frameworks verwendet. Wie verstehen Sie diesen Code? In einem typischen Java-Enterprise-Projektteam scheinen die meisten leitenden Ingenieure, die Ihnen helfen können, beschäftigt zu sein. Auch die Dokumentation ist spärlich. Sie müssen so schnell wie möglich Ergebnisse liefern und dem Projektteam Ihre Fähigkeiten unter Beweis stellen. Wie würden Sie mit dieser Situation umgehen? Dieser Artikel enthält einige Ratschläge für Java-Entwickler, die ein neues Projekt starten.
1. Versuchen Sie nicht, das gesamte Projekt auf einmal zu verstehen
Denken Sie sorgfältig darüber nach, warum ist das Verständnis des Projektcodes oberste Priorität? In den meisten Fällen werden Sie gebeten, einen Fehler zu beheben oder eine vorhandene Funktion des Systems zu verbessern. Das erste, was Sie tun müssen, ist, die Architektur des gesamten Projekts nicht zu verstehen. Dies (das Verständnis der gesamten Projektarchitektur) kann bei der Wartung des Projekts zu großem Stress für Sie führen.
Selbst ein Java-Entwickler mit 10 Jahren solider Programmiererfahrung versteht möglicherweise nicht die Kernfunktionen des Projekts, auch wenn er möglicherweise schon seit mehr als einem Jahr an dem Projekt arbeitet (vorausgesetzt, er ist nicht der ursprüngliche Entwickler). ). Beispielsweise für Authentifizierungsmechanismen oder Transaktionsverwaltungsmechanismen.
Wie haben sie das gemacht? Sie verstehen ihre Verantwortungsbereiche sehr gut und sind in der Lage, dem Team einen Mehrwert zu bieten. Es ist weitaus wichtiger, jeden Tag Mehrwert zu liefern, als etwas zu wissen, von dem man nicht sicher ist, ob man es in Zukunft haben wird.
2. Konzentrieren Sie sich darauf, so schnell wie möglich einen Mehrwert zu liefern
Habe ich dann Ihre Begeisterung für das Verständnis der Projektarchitektur geleugnet? Gar nicht. Ich bitte Sie lediglich, so früh wie möglich einen Mehrwert zu liefern. Sobald Sie ein Projekt gestartet und eine Entwicklungsumgebung eingerichtet haben, sollte es nicht ein oder zwei Wochen dauern, bis Sie etwas liefern, egal wie groß oder klein es ist. Wenn Sie ein erfahrener Programmierer sind und zwei Wochen lang nichts liefern, woher weiß Ihr Vorgesetzter dann, ob Sie tatsächlich arbeiten oder die Nachrichten schauen?
Damit die Lieferung für alle entspannt erfolgen kann. Gehen Sie nicht davon aus, dass Sie das gesamte Projekt verstehen müssen, bevor Sie wertvolle Ergebnisse liefern können. Das ist völlig falsch. Das Hinzufügen eines Javascript-Bestätigungscodes ist für das Unternehmen sehr wertvoll und der Manager kann durch Ihre Lieferung Vertrauen in Sie gewinnen. Dies kann Ihren Vorgesetzten Ihren Beitrag und Ihren Mitarbeiterwert beweisen.
Tag für Tag, während Sie weiterhin Fehler beheben und Funktionen verbessern, beginnen Sie langsam, die Projektstruktur zu verstehen. Unterschätzen Sie nicht die Zeit, die erforderlich ist, um jeden Aspekt des Systems zu verstehen. Verbringen Sie 3–4 Tage damit, den Authentifizierungsmechanismus und 2–3 Tage mit dem Transaktionsmanagement zu verstehen. Diese basieren alle auf früheren Erfahrungen mit ähnlichen Projekten, aber der Schlüssel liegt darin, sich die Zeit zu nehmen, sie vollständig zu verstehen. Planen Sie bei Ihrer täglichen Arbeit Zeit ein und fragen Sie Ihren Vorgesetzten nicht nach bestimmten Zeiten dafür.
Finden Sie heraus, ob das Projekt über einige kontinuierlich gepflegte Unit-Testfälle verfügt. Effektive Unit-Testfälle sind eine hervorragende Möglichkeit, den Code großer Projekte zu verstehen. Unit-Tests können dabei helfen, Codeausschnitte zu verstehen, einschließlich der externen Schnittstelle einer Unit (wie die Unit aufgerufen wird und was sie zurückgibt) und ihrer internen Implementierung (das Debuggen von Unit-Tests ist viel einfacher als das Debuggen des gesamten tatsächlichen Anwendungsfalls).
Wenn Sie einige Inhalte gut verstehen, schreiben Sie einige Notizen oder zeichnen Sie einige Klassendiagramme, Sequenzdiagramme und Datenmodelldiagramme, damit Sie oder andere Entwickler sie in Zukunft pflegen können.
3. Für die Betreuung großer Projekte erforderliche Fähigkeiten
Wenn Sie sich in Ihrem aktuellen Job engagieren können, müssen Sie bereits über gute Java-Technologie verfügen. Lassen Sie uns über andere Fähigkeiten sprechen, die es Ihnen ermöglichen, bei neuen Projekten gute Leistungen zu erbringen. In den meisten Fällen besteht Ihre Aufgabe in einem Projekt darin, Fehler zu beheben und die Funktionalität zu verbessern.
Es gibt zwei sehr wichtige Fähigkeiten, die Ihnen bei der Pflege des Codes großer Projekte helfen können.
3.1 Fähigkeit, benötigte Klassen schnell zu erkennen
Bei jeder Wartungsaktivität, sei es die Behebung von Fehlern oder die Verbesserung von Funktionen, besteht die erste Aktion darin, die Klassen zu identifizieren, die in den aktuell behobenen oder erweiterten Anwendungsfällen aufgerufen werden . Wenn Sie die Klassen/Methoden gefunden haben, die repariert oder verbessert werden müssen, haben Sie die Hälfte geschafft.
3.2 Kann die Auswirkungen von Änderungen analysieren
Nachdem Sie die erforderlichen Änderungen oder Erweiterungen vorgenommen haben, ist es am wichtigsten, zu bestätigen, dass Ihre Änderungen keine anderen Teile des Codes beschädigen. Sie müssen Ihre Java-Kenntnisse und Ihr Verständnis anderer Frameworks nutzen, um herauszufinden, welche Teile von der Änderung betroffen sein könnten. Hier sind zwei einfache Beispiele, die die zuletzt genannte Situation detailliert beschreiben:
a) Wenn die Methode „equals()“ der Klasse A geändert wird, wirkt sich dies auf den Aufruf der Methode „contains()“ einer Liste aus, die eine Instanz von A schützt. Ohne ausreichende Java-Kenntnisse ist es schwierig, eine solche Auswirkung zu berücksichtigen.
b) Bei einem Webprojekt gehen wir davon aus, dass die „Benutzer-ID“ in der Sitzung gespeichert wird. Ein neuer Programmierer fügt der „Benutzer-ID“ möglicherweise einige Informationen zur Fehlerbehebung hinzu, weiß jedoch nicht, dass sich dies auf die mit der „Benutzer-ID“ verbundenen Anwendungsfälle auswirkt.
Wenn Sie die beiden oben genannten Fähigkeiten verbessern, werden die meisten Wartungsaufgaben viel einfacher, auch wenn Sie nicht viel über das Projekt wissen. Wenn Sie einen Fehler beheben, lokalisieren und beheben Sie den Fehler und stellen sicher, dass die Änderungen keine anderen Teile des Projekts beeinträchtigen. Wenn Sie eine Funktion erweitern oder hinzufügen, kopieren Sie im Grunde einfach die vorhandene Funktion und verwenden ein ähnliches Design.
Warum müssen in einem Online-Banking-Projekt die Designs von „Kontozusammenfassung anzeigen“ und „Transaktionsverlauf anzeigen“ so unterschiedlich sein? Wenn Sie das Design von „Kontozusammenfassung anzeigen“ verstehen, können Sie die Funktion „Transaktionsverlauf anzeigen“ vollständig nachahmen und weiterentwickeln.
Was Fehlerbehebungen und Verbesserungen angeht, müssen Sie nicht vollständig verstehen, was alle 2000 Klassen tun und wie der Code ausgeführt wird, um das System anzutreiben. Wenn Sie über die oben genannten Fähigkeiten verfügen, können Sie schnell den Teil des Codes finden, der geändert werden muss. Verwenden Sie gute Java- und Framework-Kenntnisse, um das Problem zu beheben. Stellen Sie sicher, dass die Änderung andere Teile des Projekts nicht beeinträchtigt, und liefern Sie es, obwohl Sie kennt möglicherweise nur einen kleinen Teil des Projektdesigns.
4. Verwenden Sie Tools, um die erforderlichen Änderungen und die Auswirkungen der Änderungen zu ermitteln.
Um mit unserem Motto fortzufahren, so schnell wie möglich zu liefern, sollten Sie nach Tools suchen, die Ihnen bei der Umsetzung des Projekts helfen können möglichst schnell mit möglichst wenig Verständnis Die mitgelieferten Werkzeuge dienen als Hilfsmittel.
4.1 Entdecken Sie schnell Tools, die geändert werden müssen
Unabhängig davon, ob es um die Behebung von Fehlern oder die Verbesserung des Systems geht, müssen Sie zunächst die Klassen und Methoden finden, die von dem Anwendungsfall aufgerufen werden, den Sie ändern müssen. Grundsätzlich gibt es zwei Möglichkeiten, die Funktionsweise eines Anwendungsfalls zu verstehen: statische Codeanalyse und Laufzeitanalyse.
Statistiken zur Quellcode-Analyse scannen alle Codes und zeigen die Beziehungen zwischen Klassen an. Es gibt viele Geräte und Werkzeuge auf dem Markt. Zum Beispiel: Architexa, AgileJ, UModel, Poseidon usw.
Der Nachteil aller statischen Code-Analysetools besteht darin, dass sie die Laufzeitaufrufe von Klassen oder Methoden in Anwendungsfällen nicht genau anzeigen können. Daher hat Java neue Funktionen hinzugefügt, beispielsweise Rückrufmuster. Statische Analysetools können beispielsweise nicht ableiten, welches Servlet aufgerufen wurde, als auf die Schaltfläche zum Senden der Seite geklickt wurde.
Laufzeitanalysetools können den Status von Klassen und Methoden anzeigen, wenn der Anwendungsfall ausgeführt wird. Zu den Tools gehören: MaintainJ, Diver, jSonde, Java Call Tracer usw. Diese Tools können den Laufzeit-Stack-Status erfassen und Sequenzdiagramme und Klassendiagramme für einen Anwendungsfall generieren.
Das Sequenzdiagramm zeigt alle vom Anwendungsfall zur Laufzeit aufgerufenen Methoden. Wenn Sie einen Fehler beheben, ist es wahrscheinlich, dass der Fehler eine dieser aufgerufenen Methoden ist.
Wenn Sie eine vorhandene Funktion erweitern, verwenden Sie Sequenzdiagramme, um den Aufrufprozess zu verstehen und ihn dann zu ändern. Möglicherweise wird eine neue Verifizierung hinzugefügt, DAO geändert usw.
Wenn Sie neue Funktionen hinzufügen, finden Sie einige ähnliche Funktionen, verwenden Sie Sequenzdiagramme, um den Aufrufprozess zu verstehen, und imitieren und entwickeln Sie dann neue Funktionen.
Seien Sie vorsichtig bei der Auswahl von Laufzeitanalysetools. Zu viele Informationen sind bei dieser Art von Tool ein großes Problem. Wählen Sie Tools, die eine einfache Filterung ungültiger Informationen und eine bequeme Anzeige verschiedener Ansichten ermöglichen.
4.2 Tools zum schnellen Erkennen von Inhalten, die geändert werden müssen
Wenn der Unit-Test effektiv ist, können Sie den Unit-Test ausführen, um herauszufinden, ob die Änderung andere Testfälle zerstört. Es gibt immer noch relativ wenige Unit-Tests, die große Unternehmensanwendungen effektiv warten und abdecken können. Hier sind einige Tools für diese Situation.
Es gibt noch zwei Techniken, die verwendet werden können: statische Codeanalyse und Laufzeitanalyse. Es gibt viele statische Code-Analysetools auf dem Markt. Zum Beispiel: Lattix, Structure101, Coverity, nWire und IntelliJs DSM.
Bei einer geänderten Klasse können die oben genannten Tools den Satz von Klassen identifizieren, die von der Klasse abhängen. Entwickler müssen anhand dieser Informationen „erraten“, welche Anwendungsfälle möglicherweise Auswirkungen haben, da diese Tools die Aufrufbeziehungen zwischen Laufzeitklassen nicht anzeigen können.
Außer MaintainJ gibt es nicht viele Tools auf dem Markt, die für die Laufzeitauswirkungsanalyse verwendet werden können. MaintainJ erfasst zunächst alle in einem Anwendungsfall aufgerufenen Klassen und Methoden. Wenn die oben genannten Informationen für alle Anwendungsfälle erfasst werden, ist es einfach, die Auswirkungen von Klassenänderungen auf die Anwendungsfälle zu ermitteln. Voraussetzung dafür, dass MaintainJ effektiv funktioniert, ist, dass alle Anwendungsfälle des Projekts zuerst ausgeführt werden, damit die Laufzeitabhängigkeiten erhalten werden können.
Kurz gesagt: Derzeit können Sie mit den Tools noch nur begrenzte Hilfe bei der schnellen und genauen Analyse der Auswirkungen von Änderungen erhalten. Führen Sie bei Bedarf zunächst eine Auswirkungsanalyse durch und beurteilen Sie dann die Auswirkungen der Änderung anhand der Überprüfung durch Sie selbst oder andere hochrangige Teammitglieder. Möglicherweise benötigen Sie die oben genannten Tools, um Ihr Urteilsvermögen zu überprüfen.
5. Zwei Ratschläge zu den oben genannten Punkten
5.1 Reduzieren Sie nicht die Codequalität
Um schnell zu liefern, verstehen Sie die Architektur nicht vollständig. Sie dürfen die Codequalität jedoch nicht beeinträchtigen. Hier sind einige Probleme mit der Codequalität, die möglicherweise dadurch verursacht wurden, dass Sie sich ausschließlich auf eine schnelle Bereitstellung konzentrierten.
Da das Ändern des Codes viele Abhängigkeiten mit sich bringt, ist das Hinzufügen neuen Codes relativ weniger riskant. Beispielsweise gibt es 5 Anwendungsfälle, die alle eine bestimmte Methode aufrufen. Um einen Anwendungsfall zu verbessern, müssen Sie die Implementierung dieser Methode ändern. Am einfachsten ist es, die Methode zu kopieren, umzubenennen und die neue Methode im geänderten Anwendungsfall aufzurufen. Tun Sie das nicht. Code-Redundanz ist definitiv sehr schädlich. Versuchen Sie, die Methode zu umschreiben oder neu zu schreiben oder sie sogar direkt zu ändern, und testen Sie dann alle Anwendungsfälle erneut. Normalerweise ist es besser, innezuhalten und darüber nachzudenken und sie dann selbst zu implementieren.
Ein weiteres Beispiel besteht darin, die Methode „private“ in „public“ zu ändern, damit auch andere Klassen sie aufrufen können. Versuchen Sie, unnötige Teile nicht freizulegen. Wenn für ein besseres Design eine Umgestaltung erforderlich ist, sollte diese durchgeführt werden.
Die meisten Anwendungen müssen eine bestimmte Struktur und ein bestimmtes Muster implementieren. Stellen Sie bei der Korrektur oder Verbesserung Ihres Programms sicher, dass Sie nicht von diesem Muster abweichen. Wenn Sie sich bezüglich der Konvention nicht sicher sind, bitten Sie andere erfahrene Entwickler, Ihre Änderungen zu überprüfen. Wenn Sie eine Implementierung durchführen müssen, die gegen den Vertrag verstößt, versuchen Sie, sie in einer kleineren Klasse zu platzieren (eine private Funktion in einer Klasse mit 200 Codezeilen sollte sich nicht auf das Gesamtdesign der Anwendung auswirken)
5.2 Don' Hören Sie nicht auf zu graben. Verstehen Sie die Projektarchitektur
Gemäß der im Artikel aufgeführten Methode haben Sie möglicherweise kein tiefes Verständnis für die Projektarchitektur mehr, vorausgesetzt, Sie können liefern und mit weniger Verständnis für das Projekt fortfahren. Dies wird Ihrer Karriere auf lange Sicht nicht helfen. Mit zunehmender Erfahrung sollten Sie größere Modulaufgaben übernehmen. Wichtige Verbesserungen wie die Erstellung einer komplett neuen Funktion oder die Änderung einiger grundlegender Designs des Projekts. Wenn Sie in der Lage sind, diese Verbesserungen vorzunehmen, sollten Sie ein gutes Verständnis der Gesamtarchitektur des Projekts haben. Die im Artikel aufgeführten Methoden sollen es Ihnen ermöglichen, sich in kürzester Zeit zu verbessern, und nicht dazu dienen, Sie daran zu hindern, das gesamte Projekt vollständig zu verstehen.
6. Fazit
Der gesamte Artikel konzentriert sich auf eine schnelle Lieferung basierend auf dem notwendigen Verständnis des Projekts. Sie können dies tun, ohne die Codequalität zu beeinträchtigen.
Wenn Sie einen Fehler beheben, lokalisieren und beheben Sie ihn schnell. Bei Bedarf können Laufzeitanalysetools eingesetzt werden. Wenn Sie eine neue Funktion hinzufügen, können Sie nach ähnlichen Funktionen suchen, den Prozess verstehen (Tools sind erforderlich) und schreiben.
Das klingt vielleicht einfach, aber sind sie praktisch? sicherlich. Voraussetzung ist jedoch, dass Sie über eine gute Java-Technologie und ausreichende Kenntnisse des Frameworks verfügen, um zuerst den Code zu ändern und dann die Auswirkungen der Änderung zu analysieren. Die Analyse der Auswirkungen einer Änderung erfordert mehr Geschick als die Umsetzung der Änderung. Möglicherweise benötigen Sie einen leitenden Entwickler, der Sie bei der Analyse der Auswirkungen der Änderung unterstützt.
Ungefähr 50 % des IT-Betriebsbudgets werden für einfache Fehlerbehebungen und Funktionserweiterungen ausgegeben. Den Vorschlägen im Artikel zufolge dürfte es sehr hilfreich sein, bei Wartungsarbeiten Geld zu sparen.