Bevor ich mit der eigentlichen Umstellung begonnen haben, hatte ich mir ausführlich überlegt, was ich alles umstellen muss, und wie ich die Umstellung gestalten möchte. Relativ schnell ist mir aufgefallen, dass das Projekt zwar über die letzten 10 Jahre sehr gewachsen ist, der wesentliche Kern hingegen beschränkt sich auf wenige Klassen. Ich habe mich daher für eine Upgrade Strategie entschieden, die in der Regel für kleinere Projekte sehr gut funktionieren kann, hingegen für größere Projekte viel zu Aufwändig ist.
Hast du den ersten Teil bereits gelesen? Noch nicht, kein Problem. Hier geht es zum ersten Teil: UX9 URL Shortener: Upgrade auf Laravel 8 – Teil 1
Ich nenne die Strategie „Copy-To-New“, mit der ich in den letzten Jahre sehr gut bei kleine Projekten gefahren bin. Dabei ist die eigentliche Umstellung recht schnell beschrieben:
1. Alle Projekt-Dateien in ein „Backup“-Verzeichnis verschieben
2. Neue Laravel Installation bereit stellen
3. „Alten“-Code Schritt für Schritt wieder in die neue Installation verschieben
4. Alle Änderungen Testen (Unit Tests)
Bei dieser Methode ist der 4. Punkt äußerst essentiell. Ich habe die Erfahrung gemacht, dass das Testen der Anwendung am Ende doch schwieriger ist, als man sich das zuvor überlegt hatte. Darum empfehle ich, je nach Größe und Umfang des Projekts, immer PHP-Unit Tests zu verwenden, mit welchen man die Funktion des Programmes auch nach dem Upgrade sicherstellen kann.
Leider hatte ich bis dato noch keinen (nicht einen einzigen) PHP-Unit Test für meinen URL Shortener geschrieben. Da ich aber seit einige Jahren auf das Test-Drive-Development setze, wollte ich das nun auch in diesem Projekt einführen. Also der ideale Zeitpunkt, um nun damit zu beginnen. Mein erster Schritt war also, für das gesamte Programm PHP-Unit Tests zu schreiben. Hier mal ein Beispiel, wie eine Test-Klasse bei mir aussieht. Der Test prüft einige Prozesse vom User-Dashboard:
Für diese Phase habe ich etwa 200 Test geschrieben. Ich konnte damit eine Test-Abdeckung von ca. 73% erreichen. Bis zum Ende der Umstellung und weiterem Refactoring, möchte ich eine Test-Abdeckung von über 90% erreichen. Es werden also im Laufe und vermutlich auch direkt nach dem Upgrade noch einige weitere Tests folgen.
Im nächsten Teil dieser Serie, werde ich die ersten beiden Punkte näher beschreiben. Damit ist dann die Grundlage für jede weitere Umstellung gesetzt.