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?
Antworten:
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.
quelle
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:
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.
quelle
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.
quelle