Frage

Ich muss eine große Web -Java/J2EE -Anwendung prüfen, die sich über mehrere Jahre weiterentwickelt hat. Es wurde von einer anderen Firma geschrieben, nicht von dem, für den ich arbeite. In seinem aktuellen Zustand ist es schwer zu entwickeln und zu warten, neue Funktionen sind schwer hinzuzufügen und führen oft zu Fehlern, die manchmal in der Produktion auftauchen. Es scheint einen Kopier-/eingefügten Code zu geben, der zu Code -Duplikation führte. Die aktuelle App ist hier und da eine Art Online-Shopping mit einigen CMS-ähnlichen Inhalten. Es sind hauptsächlich Streben und einige Frühling in neueren Teilen des Codes, vielleicht einige EJBs, die für ein gutes Maß hineingeworfen werden. Es gibt einige Unit -Tests, aber nicht viele von ihnen. Dies sind Dinge, die mir gesagt wurden, ich habe den tatsächlichen Code noch nicht gesehen.

Mein Unternehmen wird ein Vorschlag machen, Teile dieser App neu zu schreiben, um die Komplexität zu verringern, Qualität und Modularität zu verbessern und es möglich zu machen, neue Funktionen ohne Regressionen zu verbessern. Bevor sie sich verpflichten, möchten sie die Qualität des vorhandenen Code und die Angriffe, wie viel davon wiederverwendet werden kann, eine Art Wertschätzung haben, um mehr als eine Vermutung zu haben, was es tun muss - voll - voll - voll - voll - voll - Umschreiben oder teilweise Umschreiben.

Der Haken ist, dass ich dies in sehr kurzer Zeit (ein paar Tage) tun muss, also versuche ich, einen Plan für das zu erarbeiten, was in so kurzer Zeit getan werden kann. Was ich doch bin:

  • Schauen Sie sich "grundlegende" Dinge an - Ausnahmenbehandlung, Protokollierung
  • Schauen Sie sich die Schichtebene an (Ansichten, Controller, DAO -Schicht).
  • Messen Sie die tatsächliche Abdeckung der Unit -Tests
  • Vielleicht leiten Sie ein paar Checkstyle, Findbugs und PMD über die Projekte
  • ...

Die tatsächliche Frage ist also, welche anderen Dinge ich berücksichtigen sollte/prüfen/messen/usw.?

Ich bin mir nicht sicher, welche Art von Zahlen ich herausholen könnte, und wenn es wirklich etwas bedeuten würde, habe ich das Gefühl, dass das, was das Management fragt Eine bessere Idee?

Ich werde jede Idee, einen Vorschlag, einen Kommentar dazu schätzen.

Bearbeiten: Ich werde dem Mix zwei tote Codedetektoren hinzufügen: UCD und DCD

War es hilfreich?

Lösung

Ich hatte zwei Webanwendungen mit ähnlichen Einstellungen wie Sie. Ich habe aufgehört, Findbugs und Checkstyle zu verwenden, da sie mehr als 10.000 problematische Punkte zeigten. Die Anwendungen verwendeten die Datenzugriff auf JDBC -Ebene, JSP für die Präsentation und ein benutzerdefiniertes Framework für die Versandanforderung. Glücklicherweise ermöglichten ich für mich diese Einstellungen mit niedrigem Niveau, die Erweiterungen und Behebungen auf mittlere Schwierigkeitsgrad durchzuführen. Während des 3 -Jahres -Projekts blieben nur etwa 20% des ursprünglichen Code so wie es waren. Früher oder später musste alles andere entweder geändert, ersetzt oder entfernt werden (und schließlich konnte ich Findbugs und Checkstyle verwenden).

Auch wir konfrontierten dem Dilemma des vollständigen Umschreibens. Es gab jedoch mehrere Faktoren dagegen:

  • Ich bin mir nicht sicher, ob der Kunde für ein komplettes Umschreiben bezahlen wird.
  • Der Mangel an funktionaler und technischer Dokumentation macht es riskant, das vollständige Umschreiben durchzuführen.
  • Die Mannschaft, um die vollständige Anwendung vollständig zu verstehen, war zu hoch. Der Kunde wollte die angeforderten Änderungen früher.
  • Die Benutzer wurden an das Verhalten von Präsentationen und Seiten angepasst. Es schien schwierig, Benutzer zu überzeugen, eine neue Schnittstelle für alte Funktionen zu verwenden.
  • Wenn wir eine vollständige Umschreibung durchführen, müssen wir vollständige Dokumentation vorlegen. Für das Update mussten wir nur unseren Teil dokumentieren.
  • Es ist schwierig, das Management (eigene und die Kunden) von einem Umschreiben zu überzeugen, wenn das Programm funktioniert (mehr oder weniger)
  • Das Unternehmen hatte seine eigenen PMD -Regeln und der Code ist nicht vergangen. Es war einfacher zu argumentieren, dass es genug ist, dass die neuen Teile den Test bestehen.

Es läuft her, was Sie eigentlich tun möchten.

Möchten Sie trotz der Komplexität neu schreiben?

  • Legen Sie die Codefehler hervor. Große Kreisdiagramme mit viel Rot sind überzeugend.
  • Erklären Sie die Programmeigenschaften und wie sie nicht in die Unternehmensvision passen.
  • Zeigen Sie Verbesserungsoptionen über die aktuellen Anforderungen hinaus und beschreiben Sie, wie die aktuelle Version nicht der Herausforderung entspricht.
  • Machen Sie Interviews mit den echten Benutzern. Sie könnten auf wichtige Probleme mit der aktuellen Version hinweisen.
  • Sei billig, aber ein guter Schätzer. Sie können einige Kosten bis zur Wartungsphase verzögern.

Sie wollen nicht neu schreiben?

  • Legen Sie den Schwerpunkt auf die Kosten, insbesondere die vom Kunden erforderlichen Mannstunden, um alles erneut zu testen.
  • Weisen Sie die möglichen Schwierigkeiten bei der Brechen der Funktionalität auf.
  • Fragen Sie nach einem Vollzeit-Dokumentautor.

Wenn Sie den Code probieren möchten, versuchen Sie, die Hello World hinzuzufügen! Funktion/Bildschirm zur Anwendung. Das sagt, wie schwer und wie schnell Sie neue Dinge implementieren können.

Andere Tipps

Tatsächlich werden sie nicht für eine vollständige Umschreibung bezahlen, weil:

  • Es ist eine Rezession, die Kosten, dass Sie es von Grund auf neu schreiben, werden hoch sein

  • Sie könnten versuchen, das Unternehmen so schnell wie möglich zu verkaufen

  • Das Management versteht nichts über Softwareentwicklung

Ich würde zuerst mit einigen einfachen Fakten gehen:

  • Verwenden Sie ein Tool, um den SLOC des Projekts anzuzeigen
  • Laufen Sie, wie Sie Findbugs und schließlich PMD geplant haben, nur um die Mängel abzuschätzen
  • Machen Sie eine schnelle Profiling -Sitzung
  • Überprüfen Sie die verschiedenen Schichten
  • Sehen Sie, ob die Ressourcen im Allgemeinen geschlossen sind (Streams, Hibernate- oder JDBC -Verbindungen usw.)
  • Sehen Sie, ob Technologien dort verwendet werden, wo sie sich nicht bewerben (EJBs, Webdienste usw.).
  • Sehen Sie, wie sie mit Ausnahmen und Protokollierung umgehen
  • Sehen Sie, ob es zu viel oder nicht genug Abstraktion gibt
  • Sehen Sie, ob Sie einige Basisklassen hinzufügen können, um die Code -Duplikation zu reduzieren

Versuchen Sie, ein kurzes Diagramm der Architektur der Anwendung zu zeichnen, wenn sie Ihnen kein Dokument darüber geben.

Sammeln Sie einige Statistiken und einige Fakten, schreiben Sie einen Bericht und senden Sie sie an das Unternehmen. Sie möchten die Kosten minimieren und werden Sie bitten, nicht zu fixieren, dass Code behoben wird. Sie beginnen mit der Statistik, dann zu den Fakten und einem Vorschlag mit Zeit/ungefähren Prozentsatz des betroffenen Code/Preisgestaltung.

Normalerweise sind Legacy -Struts -Anwendungen eine Pita, die Sie aufrechterhalten können, und das haben dort gemacht. Wenn es nicht Teil Ihres Jobs wäre, würde ich sagen, lass es los. Wenn Sie auf "eigenständige" Seiten stoßen, auf denen nicht viele Vorlagen beteiligt sind und viele Änderungen ausgesetzt sind, schlagen Sie vor, sie mit einer anderen Technologie neu zu schreiben.

Sie konzentrieren sich auf Wartbarkeit und Erweiterbarkeit, die genau richtig ist.

Ich würde hinzufügen, wie lange es dauern wird, um das Projekt neu zu starten. Verwenden sie die Quellensteuerung? Haben sie separate Umgebungen für Integrations- und Benutzerakzeptanztests? Gibt es einen Build -Server?

Wenn Sie zwei Monate vor der ersten Verbesserung verbringen müssen, muss jemand die Erwartungen des Kunden im Voraus verwalten.

Ich mag deine Liste sehr. Ich denke, Sie haben einen hervorragenden Angriffsplan, um zu beginnen.

Ich würde mit Blick auf die Standardisierung entweder auf Frühling oder EJB 3.0 schauen, aber nicht auf beiden.

Ich habe es selbst nicht gelesen, aber ich frage mich, ob Michael Feathers Buchbuch "Effektiv mit dem Legacy -Code arbeiten" Hat irgendwelche guten Ideen?

AKTUALISIEREN:

Vielleicht können Sie die Dinge helfen, indem Sie sie auf eine automatisierte Build und eine kontinuierliche Integration setzen - Tempomat, Hudson oder Team City. Wenn Sie irgendwelche Wiederaufbauten durchführen müssen, hilft dies.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top