Wann, wie und warum sollte man Java-Frameworks aktualisieren?


8

Kurze Zusammenfassung als Einführung:

Wir sind ein kleines Java-Webentwicklungsteam, das Anwendungen mit verschiedenen Frameworks und Bibliotheken wie JSF, Hibernate und Seam erstellt, die alle zusammen in JBoss AS bereitgestellt werden.

Zunächst wurde die App zusammengestellt und einige Funktionen hinzugefügt, um potenziellen Kunden ein Schaufenster zu bieten. Es wurde etwas poliert, die App wurde veröffentlicht, sie wurde akzeptiert und funktionierte und im Laufe der Zeit wurden zusätzliche Funktionen hinzugefügt, Fehler wurden behoben, neue Fehler traten auf, wie immer.

Aufgrund hoher Busfaktoren und Startup-Rennen geriet die Entwicklung etwas außer Kontrolle - es wurden immer mehr Funktionen hinzugefügt, da die Kernarchitektur des Systems nicht vollständig verstanden wurde. Es funktioniert immer noch, aber es gibt immer Fallstricke, weil sich das System von seinem Ursprung zu etwas anderem entwickelt hat und am Anfang verschiedene Verknüpfungen verwendet wurden, um die Entwicklung zu beschleunigen - jetzt kommt alles zurück und die Entwicklung verlangsamt sich, weil Problemumgehungen verwendet werden und es ist Es ist ziemlich schwierig, neue Entwickler in das Projekt einzuführen.

Jetzt bin ich dabei, Dinge zu bereinigen und zu organisieren - ein Bug-Tracking-System zu installieren, eine Test- / Qualitätskultur aufzubauen, darüber nachzudenken, wie man automatisierte Tests durchführt, Code-Überprüfungen (all das ausgefallene professionelle Zeug, das uns in der fehlte Anfang) und allgemeine Umgestaltungen wie das Organisieren von Klassenhierarchien und -funktionen, um die Verwendung von Inhalten zu vereinfachen. Das macht alles ein bisschen besser, aber es gibt noch viel zu tun. Da ich nicht die Person bin, die das System ursprünglich erstellt hat (ehemaliger leitender Programmierer links) und nicht so erfahren (seit 2,5 Jahren entwickelt, aber das ist meine einzige Erfahrung in der offenen Welt), bin ich mir nicht immer sicher, was ich tun soll tun.

Hier ist mein Problem:

Refactoring ist immer etwas Gutes und ich mache es ständig, um die Dinge einfacher zu machen. Was mich jedoch verwirrt, ist, wann, wie und warum ich die grundlegende Architektur aktualisieren sollte (dh Bibliotheken, auf die sich das System stützt, Anwendungsserver, Datenbank usw.).

Beispiele:

  • Wir verwenden derzeit JBoss 4.2.2 - Ich habe irgendwo von JBoss 7.1 gelesen, sollte ich mich dafür entscheiden? Wie kann man das bewerten?

  • Wir verwenden Seam 2.2, was ein großer Blocker zu sein scheint (funktioniert nicht bei höheren JBoss-Versionen, unterstützt JSF2 nicht). Außerdem werden Quellen angezeigt, die mich auffordern, JEE-Funktionen anstelle von Seam zu verwenden.

Grundsätzlich interessiert mich jeder generische Ansatz für diese Probleme, nicht nur die, die ich in den obigen Beispielen erwähnt habe - da ich möglicherweise zu einem anderen Zeitpunkt über diese Probleme für eine andere Bibliothek auf einem anderen System stolpere (oder jemand anderes mit ähnlichen Problemen konfrontiert sein könnte). .

Also, was ist der Punkt? Soll ich auf dem neuesten Stand sein und nur hochmoderne Bibliotheken verwenden oder soll ich bei dem bleiben, was ich habe? Woran erkenne ich, dass die Technologie, die ich verwende, buchstäblich ein totes Pferd ist und abspringt? Wie oft sollten solche Technologie-Upgrades erscheinen?

Und noch eine Frage neben dem allgemeinen "Wie mache ich Upgrades?" Woran erkenne ich, dass meine Software als "von Profis erstellt" bezeichnet werden kann? Gibt es einen Joel-Test für gut gemachte Software neben dem gesunden Menschenverstand?


1
Die einzige wirkliche Antwort darauf ist "es kommt darauf an". Es hängt davon ab, was genau Ihr Produkt ist. Wenn neuere Versionen von Frameworks oder Bibliotheken, die Sie verwenden, erhebliche Leistungs-, Wartungs- oder Sicherheitsvorteile bringen, wie schwierig (gut, zeitaufwändig) und gut ausgestattet Sie sind, um die erforderlichen Änderungen vorzunehmen Stellen Sie sicher, dass Ihre Software mit den neueren Frameworks und Bibliotheken funktioniert und so weiter.
Anonym

Sind nicht pleite - nicht reparieren.
Nikolay Fominyh

2
@NikolayFominyh Obwohl Änderungen zum Zwecke der Änderung schlecht sind, führt diese Art von Einstellung häufig zu schlecht gewarteter und schlecht verstandener Software, die auf die unbequemste Art und Weise kaputt geht. Wie Martijn betont, stellt der Anbieter möglicherweise den Support ein, oder Sie benötigen eine Fehlerbehebung / Sicherheitskorrektur. Je länger Sie Upgrades aufgeschoben haben, desto schwieriger wird es.
R0MANARMY

"Niemals ein laufendes System berühren" klingt einfach, ist aber meiner Meinung nach, abhängig vom Systemlebenszyklus, nicht immer ein Grund. Wenn Sie sich bereits im Wartungsmodus befinden, würde ich nicht zu viel Zeit mit dem Upgrade verbringen. Das System entwickelt sich jedoch weiter und es werden neue Funktionen hinzugefügt, sodass es auf jeden Fall notwendig ist, auf dem neuesten Stand zu bleiben.
Volker

Antworten:


5

Die kurze Antwort lautet: Sie wechseln, wenn der Aufwand, nicht zu wechseln, den Aufwand des Wechsels übersteigt oder wenn Sie vorhersehen können, dass dies bald der Fall sein wird. Das ist eine sehr subjektive Einschätzung, die Erfahrung erfordert, aber die Extremfälle sind relativ leicht zu erkennen.

Angenommen, Sie schätzen einen Monat für den Wechsel, aber kein Wechsel bedeutet, dass Sie kein Modul verwenden können, das nur in der aktualisierten Version verfügbar ist. Daher müssen Sie zwei Monate benötigen, um eines von Grund auf neu zu implementieren. Die Wahl ist einfach.

Wenn Sie beispielsweise Ihre ganze Zeit damit verbringen, Sicherheitslücken in Software zu beheben, die vom Hersteller nicht mehr unterstützt wird, ist es ein guter Zeitpunkt, um zu wechseln.

Wenn Sie nie Besprechungen haben, in denen jemand sagt: "Mit der neuen Version wäre dies viel besser / einfacher", müssen Sie wahrscheinlich nicht wechseln.

Die Zwischenfälle sind schwerer zu erkennen, aber es fühlt sich normalerweise wie Druck an, wo das Festhalten an der alten Version immer einschränkender wird.

In Bezug auf Ihren gut durchgeführten Softwaretest bietet Ihr Bug-Tracker eine gute Faustregel. Wenn Sie keine kritischen Fehler haben und Ihre Liste der nicht kritischen Fehler auf einem vernünftigen Niveau liegt und stetig schrumpft, können Sie sie als "erledigt" bezeichnen. Sie können sich ein Bild von der Qualität Ihrer Softwarearchitektur machen, wenn Sie neue Funktionen hinzufügen oder Fehler beheben. Es gibt keinen Grenzwert, der besagt: "Das ist professionell", aber je niedriger desto besser.


Danke für deinen Rat. Das Messen der Kosten für ein Upgrade im Vergleich zum Aufenthalt ist eine gute Unterstützung bei der Entscheidungsfindung. Wenn wir uns ansehen, was wir bisher haben, scheint ein Upgrade wirklich notwendig zu sein. Ich werde Ihre Antwort akzeptieren, da Sie verschiedene andere Gedanken zum allgemeinen Entwicklungs- / Upgrade-Prozess gemacht haben.
Volker

Einmal wurde ich gebeten, eine alte Visual Basic-Anwendung zu pflegen. Das erste, was passierte, als ich die Visual Basic-CD in den Computer einlegte, war, dass Windows einen Warnbildschirm aufzeigte, dass es sich um UNSUPPORTED SOFTWARE (oder etwas Ähnliches) handelte. Ich nahm das als Hinweis darauf, dass es Zeit war, zu wechseln.
Thorbjørn Ravn Andersen

9

Es gibt eine Reihe von Gründen, warum Sie möglicherweise Ihre zugrunde liegende Infrastruktur aktualisieren möchten, und Sie sollten jede davon so empirisch wie möglich bewerten. Sie können beispielsweise ein Upgrade durchführen, weil:

  1. Der Anbieter unterstützt die von Ihnen verwendete Version nicht mehr
  2. Es gibt einen kritischen Fehler oder eine Sicherheitslösung
  3. Es gibt eine neue Funktion, die Sie nutzen möchten
  4. Es wird Ihre Geschwindigkeit erhöhen
  5. Es gibt eine direkte Reduzierung der Investitionskosten beim Upgrade (billigere Support-Lizenz oder ähnliches)

Diese Gründe müssen gegen die Kosten für das Upgrade abgewogen werden, die größtenteils für Tests aufgewendet werden. Hier tritt TDD / BDD wirklich in den Vordergrund, insbesondere in Kombination mit einem guten CI-Setup.

Es bedeutet, dass Sie "ohne Angst schnell umgestalten können"

Wenn Sie nicht über eine anständige umfassende Testsuite verfügen, bedeutet dies, dass Sie manuell testen. Dies ist zeitaufwändig und sehr fehleranfällig, was die Kosten für das Upgrade erhöht.


Danke für deinen Rat. Das Einrichten einer soliden und umfassenden Testumgebung scheint der richtige Weg zu sein - BDD klingt ziemlich interessant und ich werde es mir auf jeden Fall ansehen.
Volker

3

Die Technologien, die Sie aufgelistet haben, sind weit verbreitet. Es ist einfach, Dokumentationen für sie und Personen zu finden, die mit ihnen vertraut sind. Ich denke, es gibt keinen wirklichen Grund, sie zu ändern. Auf der anderen Seite würde ich empfehlen, Ihre Frameworks auf die neuesten veröffentlichten Versionen zu aktualisieren. Ich denke, Sie müssen es sowieso früher oder später tun (wenn nicht für neue Funktionen und Kompatibilität mit neueren Bibliotheken, dann für die in neuen Versionen behobenen Fehler), und je früher Sie es tun, desto weniger mühsam wird diese Aufgabe sein.

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.