bg_image
header

Changelog

Ein Changelog ist eine Datei oder ein Dokument, das die Änderungen und Updates an einer Software oder einem Projekt auflistet. Es enthält eine chronologische Aufzeichnung von neuen Funktionen, Fehlerbehebungen, Verbesserungen und Breaking Changes (Änderungen, die die Rückwärtskompatibilität brechen). Ein Changelog hilft Benutzern und Entwicklern, den Entwicklungsverlauf einer Software zu verfolgen und zu verstehen, welche Änderungen in einer bestimmten Version vorgenommen wurden.

Wichtige Bestandteile eines Changelogs:

  1. Versionsnummern: Jede Änderung wird mit der entsprechenden Versionsnummer versehen (z. B. 1.2.0), oft basierend auf SemVer (Semantic Versioning).
  2. Änderungstypen: Die Änderungen sind in Kategorien eingeteilt, wie:
    • Added: Neue Funktionen oder Features.
    • Changed: Änderungen an bestehenden Funktionen.
    • Fixed: Fehlerbehebungen.
    • Deprecated: Veraltete Funktionen, die in zukünftigen Versionen entfernt werden.
    • Removed: Entfernte Funktionen.
    • Security: Sicherheitsrelevante Verbesserungen oder Patches.
  3. Beschreibung der Änderungen: Jede Änderung wird kurz und prägnant beschrieben, oft mit zusätzlichen Details, wenn nötig.

Beispiel eines Changelogs:

# Changelog

## [1.2.0] - 2023-09-19
### Added
- New user authentication system.
- Ability to reset passwords via email.

### Fixed
- Resolved bug with session timeout after 30 minutes of inactivity.

### Changed
- Updated the UI for the login screen.

## [1.1.0] - 2023-08-10
### Added
- New dark mode theme for the dashboard.

### Security
- Patched vulnerability in file upload functionality.

Vorteile eines Changelogs:

  • Transparenz: Ein Changelog zeigt klar, was sich von Version zu Version geändert hat.
  • Dokumentation: Es dient als nützliches Referenzdokument für Benutzer, die wissen möchten, welche Funktionen oder Fehlerbehebungen in einer neuen Version enthalten sind.
  • Rückverfolgbarkeit: Entwickler können anhand des Changelogs frühere Änderungen nachvollziehen, was bei der Fehlersuche oder bei Upgrades wichtig ist.

Changelogs sind in Open-Source-Projekten besonders weit verbreitet, da sie für die Community eine nachvollziehbare und klare Übersicht über die Entwicklung eines Projekts bieten.

 

 


Conventional Commits

Conventional Commits sind ein einfacher Standard für Commit-Nachrichten in Git, der ein konsistentes Format für alle Commits vorschlägt. Dies erleichtert die Automatisierung von Aufgaben wie der Versionskontrolle (Versioning), der Changelog-Erstellung und der Rückverfolgung von Änderungen.

Das Format der Conventional Commits besteht aus einer speziellen Struktur der Commit-Nachricht, die typischerweise folgendermaßen aussieht:

<type>[optional scope]: <description>

[optional body]

[optional footer(s)]

Komponenten eines Conventional Commits:

  1. Type (Pflichtfeld): Beschreibt die Art der Änderung im Commit. Es gibt standardisierte Typen:

    • feat: Eine neue Funktion oder ein Feature.
    • fix: Eine Fehlerbehebung.
    • docs: Änderungen an der Dokumentation.
    • style: Änderungen am Code-Stil (z. B. Formatierung), die aber die Logik nicht beeinflussen.
    • refactor: Änderungen am Code, die weder Fehler beheben noch Funktionen hinzufügen, aber den Code verbessern.
    • test: Hinzufügen oder Ändern von Tests.
    • chore: Änderungen am Build-Prozess oder an Hilfswerkzeugen, die keinen Einfluss auf den Quellcode haben.
  2. Scope (optional): Beschreibt den betroffenen Teil des Codes oder der Anwendung, z. B. ein Modul oder eine Komponente.

    • Beispiel: fix(auth): corrected password hashing algorithm
  3. Description (Pflichtfeld): Eine kurze, prägnante Beschreibung der Änderung. Diese sollte in der Gegenwartsform formuliert sein (z. B. „add feature“ statt „added feature“).

  4. Body (optional): Eine ausführlichere Beschreibung der Änderung. Dies kann genutzt werden, um mehr Kontext oder technische Details anzugeben.

  5. Footer (optional): Hier können Hinweise zu Breaking Changes oder Referenzen zu Issues oder Tickets stehen.

    • Beispiel: BREAKING CHANGE: remove deprecated authentication method

Beispiel einer Commit-Nachricht im Conventional Commit-Format:

feat(parser): add ability to parse arrays

The parser now supports parsing arrays into lists.
This allows arrays to be passed as arguments to methods.

BREAKING CHANGE: Arrays are now parsed differently

Vorteile von Conventional Commits:

  • Konsistenz: Ein einheitliches Format für Commit-Nachrichten erleichtert es, den Projektverlauf zu verstehen.
  • Automatisierung: Tools können automatisch Versionen erzeugen, Changelogs erstellen und sogar Veröffentlichungen basierend auf Commit-Nachrichten vornehmen.
  • Rückverfolgbarkeit: Es wird leichter, den Zweck einer Änderung nachzuvollziehen, insbesondere bei Fehlerbehebungen oder neuen Funktionen.

Conventional Commits sind besonders in Projekten hilfreich, die SemVer (Semantic Versioning) verwenden, da sie es ermöglichen, automatisch neue Versionen basierend auf Commit-Typen zu erstellen.

 

 

 


Toter Code

"Toter Code" (engl. "dead code") bezeichnet Abschnitte in einem Computerprogramm, die zwar existieren, aber niemals ausgeführt oder verwendet werden. Das kann passieren, wenn der Code durch Änderungen oder Umstrukturierungen im Programm überflüssig wird, aber nicht entfernt wird. Obwohl er keine direkte Funktion hat, kann er den Code unnötig komplex machen, Wartung erschweren und in manchen Fällen die Performance leicht beeinträchtigen.

Typische Ursachen für toten Code sind:

  1. Veraltete Funktionen oder Methoden: Funktionen, die früher verwendet wurden, aber nicht mehr benötigt werden.
  2. Unbedingte Rückgabebedingungen: Ein Codeabschnitt kann durch eine vorherige Rückgabe oder bedingte Anweisung nie erreicht werden.
  3. Unnötige Variablen: Variablen, die deklariert, aber niemals verwendet werden.

Entwickler entfernen toten Code häufig, um die Effizienz und Lesbarkeit des Programms zu verbessern.

 


Phan

Phan ist ein statisches Analyse-Tool für PHP, das entwickelt wurde, um potenzielle Fehler im Code zu erkennen und zu beheben, bevor der Code tatsächlich ausgeführt wird. Es analysiert PHP-Code auf Typfehler, Logikfehler und potenzielle Probleme, die während der Ausführung auftreten könnten. Phan ist besonders nützlich, um mit der Typensicherheit in PHP umzugehen, insbesondere seit der Einführung von strikten Typen in neueren PHP-Versionen.

Hier sind einige der Hauptfunktionen von Phan:

  1. Typprüfung: Phan überprüft den PHP-Code auf Typfehler und sorgt dafür, dass Variablen, Funktionen und Rückgabewerte mit den erwarteten Typen übereinstimmen.
  2. Erkennung von undefinierten Methoden und Funktionen: Phan stellt sicher, dass aufgerufene Methoden, Funktionen oder Klassen tatsächlich definiert sind, um Laufzeitfehler zu vermeiden.
  3. Erkennung von totem Code: Es identifiziert nicht verwendeten oder unnötigen Code, der entfernt werden kann, um die Lesbarkeit und Wartbarkeit des Codes zu verbessern.
  4. Unterstützung für PHPDoc-Kommentare: Phan verwendet PHPDoc-Kommentare, um zusätzliche Typinformationen bereitzustellen, und prüft, ob die Dokumentation mit dem tatsächlichen Code übereinstimmt.
  5. Kompatibilitätsprüfungen: Es prüft, ob der Code mit verschiedenen PHP-Versionen kompatibel ist, und hilft so beim Upgrade auf neuere PHP-Versionen.
  6. Custom Plugins: Phan unterstützt die Erweiterbarkeit durch benutzerdefinierte Plugins, die spezielle Prüfungen oder Anforderungen des Projekts umsetzen können.

Phan ist ein leichtgewichtiges Tool, das sich gut in den Entwicklungsworkflow integrieren lässt und hilft, typische Fehler im PHP-Code frühzeitig zu erkennen. Es eignet sich besonders gut für Projekte, die Wert auf Typensicherheit und Codequalität legen.

 


Exakat

Exakat ist ein statisches Analyse-Tool für PHP, das speziell entwickelt wurde, um die Codequalität zu verbessern und Best Practices in PHP-Projekten sicherzustellen. Ähnlich wie Psalm konzentriert es sich auf die Analyse von PHP-Code, bietet jedoch einige einzigartige Funktionen und Analysen, um Entwicklern zu helfen, Fehler zu erkennen und ihre Anwendungen effizienter und sicherer zu machen.

Hier sind einige der Hauptfunktionen von Exakat:

  1. Code-Qualität und Best Practices: Exakat analysiert den Code basierend auf empfohlenen PHP-Best-Practices und stellt sicher, dass er den aktuellen Standards entspricht.
  2. Sicherheitsanalyse: Das Tool identifiziert potenzielle Sicherheitslücken im Code, wie SQL-Injections, Cross-Site-Scripting (XSS) oder andere Schwachstellen.
  3. Kompatibilitätsprüfungen: Exakat überprüft, ob der PHP-Code mit verschiedenen PHP-Versionen kompatibel ist. Das ist besonders nützlich, wenn eine Anwendung auf eine neue PHP-Version aktualisiert wird.
  4. Erkennung von totem Code: Es identifiziert ungenutzte Variablen, Methoden oder Klassen, die entfernt werden können, um den Code sauberer und leichter wartbar zu machen.
  5. Dokumentationsanalyse: Es überprüft, ob der Code gut dokumentiert ist und ob die vorhandene Dokumentation mit dem tatsächlichen Code übereinstimmt.
  6. Berichterstattung: Exakat erstellt detaillierte Berichte über den Zustand des Codes, einschließlich Metriken zur Codequalität, Sicherheitslücken und potenziellen Verbesserungen.

Exakat kann als eigenständiges Tool oder in eine Continuous Integration (CI)-Pipeline integriert werden, um sicherzustellen, dass Code kontinuierlich auf Qualität und Sicherheit überprüft wird. Es ist ein vielseitiges Werkzeug für PHP-Entwickler, die ihren Code verbessern und auf einem hohen Standard halten möchten.

 


Null Pointer Exception - NPE

Eine Null Pointer Exception (NPE) ist ein Laufzeitfehler, der auftritt, wenn ein Programm versucht, auf eine Referenz zuzugreifen, die keinen gültigen Wert enthält, d.h., die auf "null" gesetzt ist. In Programmiersprachen wie Java, C#, oder C++ signalisiert "null", dass die Referenz auf kein tatsächliches Objekt zeigt.

Hier sind typische Szenarien, in denen eine Null Pointer Exception auftreten kann:

1. Aufruf einer Methode auf einem null-Referenzobjekt:

String s = null;
s.length();  // Dies führt zu einer Null Pointer Exception

2. Zugriff auf ein null-Objektfeld:

Person p = null;
p.name = "John";  // NPE, da p auf null gesetzt ist

3. Zugriff auf ein Array-Element, das null ist:

String[] arr = new String[5];
arr[0].length();  // arr[0] ist null, daher NPE

4. Manuelle Zuweisung des Werts null zu einem Objekt:

Object obj = null;
obj.toString();  // NPE, da obj null ist

Um eine Null Pointer Exception zu vermeiden, sollten Entwickler sicherstellen, dass eine Referenz nicht null ist, bevor sie darauf zugreifen. In modernen Programmiersprachen gibt es auch Mechanismen wie Optionals (z. B. in Java) oder Nullable-Typen (z. B. in C#), um mit solchen Szenarien sicherer umzugehen.

 


Psalm

Psalm ist ein PHP Static Analysis Tool, das speziell für PHP-Anwendungen entwickelt wurde. Es hilft Entwicklern dabei, Fehler im Code frühzeitig zu erkennen, indem es den Code statisch analysiert.

Hier sind einige Funktionen von Psalm in der Softwareentwicklung:

  1. Fehlererkennung: Psalm durchsucht PHP-Code nach potenziellen Fehlern, wie Typinkonsistenzen, Null-Referenzen oder unbehandelten Ausnahmen.
  2. Typensicherheit: Es prüft die Typen von Variablen und Rückgabewerten, um sicherzustellen, dass der Code keine Typfehler enthält.
  3. Code-Qualität: Es unterstützt bei der Einhaltung von Best Practices und hilft, die Codequalität zu verbessern.
  4. Performance: Da Psalm statisch arbeitet, also den Code analysiert, ohne ihn auszuführen, ist es schnell und kann kontinuierlich in den Entwicklungsprozess integriert werden (z. B. als Teil einer CI/CD-Pipeline).

Zusammengefasst ist Psalm ein nützliches Werkzeug für PHP-Entwickler, um robusteren, sichereren und besser getesteten Code zu schreiben.

 


Rolling Deployment

Rolling Deployment ist eine Methode zur schrittweisen Bereitstellung einer neuen Softwareversion, bei der die Anwendung Server für Server oder Knoten für Knoten aktualisiert wird. Ziel ist es, eine kontinuierliche Verfügbarkeit der Anwendung während des Updates sicherzustellen, indem immer nur ein Teil der Infrastruktur aktualisiert wird, während der Rest weiterhin die alte Version verwendet.

Wie funktioniert es?

  1. Inkrementelles Update: Die neue Version wird auf einem Teil der Server (z. B. einem Server in einem Cluster) bereitgestellt. Der Rest der Server bedient weiterhin den Benutzerverkehr mit der alten Version.
  2. Überwachung: Jeder aktualisierte Server wird überwacht, um sicherzustellen, dass die neue Version stabil und funktionsfähig ist. Wenn keine Probleme auftreten, wird der nächste Server aktualisiert.
  3. Fortschreitende Aktualisierung: Dieser Prozess wird fortgesetzt, bis alle Server auf die neue Version aktualisiert wurden.
  4. Rollback-Fähigkeit: Wenn auf einem der aktualisierten Server Probleme festgestellt werden, kann das Deployment gestoppt oder ein Rollback auf die vorherige Version durchgeführt werden, bevor weitere Server aktualisiert werden.

Vorteile:

  • Kontinuierliche Verfügbarkeit: Da immer nur ein Teil der Infrastruktur aktualisiert wird, bleibt die Anwendung für Benutzer verfügbar.
  • Risikominimierung: Probleme können auf einem kleinen Teil der Infrastruktur erkannt werden, bevor sie die gesamte Anwendung betreffen.
  • Effizient für große Systeme: Besonders bei großen verteilten Systemen ist es effizient, schrittweise vorzugehen, anstatt die gesamte Anwendung auf einmal zu aktualisieren.

Nachteile:

  • Längere Bereitstellungszeit: Da die Aktualisierung schrittweise erfolgt, dauert der gesamte Deployment-Prozess länger als bei einem vollständigen Deployment.
  • Komplexität bei der Überwachung: Es kann schwieriger sein, verschiedene Versionen parallel zu überwachen und sicherzustellen, dass sie korrekt interagieren, insbesondere wenn es um Datenstrukturen oder APIs geht.
  • Dateninkonsistenz: Wie bei anderen Deployment-Strategien, bei denen mehrere Versionen gleichzeitig aktiv sind, kann es zu Problemen bei der Datenkonsistenz kommen.

Ein Rolling Deployment ist ideal für große, skalierbare Systeme, die eine kontinuierliche Verfügbarkeit erfordern, und reduziert das Risiko durch eine schrittweise Bereitstellung.

 


Canary Release

Ein Canary Release ist eine Technik im Software-Deployment, bei der eine neue Version einer Anwendung schrittweise und kontrolliert an eine kleine Untergruppe von Benutzern ausgeliefert wird. Ziel ist es, potenzielle Probleme frühzeitig zu erkennen, bevor die neue Version für alle Benutzer freigegeben wird.

Wie funktioniert es?

  1. Kleine Benutzergruppe: Die neue Version wird zunächst nur an einen kleinen Prozentsatz der Benutzer ausgeliefert (z. B. 5-10 %), während der Rest weiterhin die alte Version verwendet.
  2. Überwachung und Feedback: Das Verhalten der neuen Version wird genau überwacht, z. B. auf Bugs, Leistungsprobleme oder negative Rückmeldungen der Benutzer.
  3. Schrittweise Ausweitung: Wenn keine oder nur wenige Probleme festgestellt werden, wird die neue Version an eine größere Benutzergruppe ausgerollt, bis schließlich alle Benutzer die neue Version nutzen.
  4. Rollback-Fähigkeit: Wenn bei der kleinen Gruppe schwerwiegende Probleme auftreten, kann die Bereitstellung gestoppt und ein Rollback zur alten Version durchgeführt werden, bevor alle Benutzer betroffen sind.

Vorteile:

  • Früherkennung von Problemen: Fehler oder Bugs können früh erkannt und behoben werden, bevor die neue Version flächendeckend verfügbar ist.
  • Risikominimierung: Da nur ein kleiner Teil der Benutzer betroffen ist, wird das Risiko von großen Störungen im Betrieb minimiert.
  • Flexibilität: Die Bereitstellung kann jederzeit gestoppt oder zurückgerollt werden.

Nachteile:

  • Komplexität: Die Verwaltung mehrerer Versionen parallel und die Überwachung des Benutzerverhaltens erfordert mehr Aufwand und möglicherweise zusätzliche Tools.
  • Dateninkonsistenz: Wenn verschiedene Benutzergruppen verschiedene Versionen verwenden, kann es zu Problemen mit der Datenkonsistenz kommen, besonders wenn die Datenstruktur geändert wird.

Ein Canary Release bietet eine sichere und schrittweise Möglichkeit, neue Software-Versionen einzuführen, ohne alle Benutzer sofort zu beeinträchtigen.

 


Blue Green Deployment

Blue-Green Deployment ist eine Methode zur Bereitstellung von Anwendungen, die dazu dient, Ausfallzeiten und Risiken während eines Software-Deployments zu minimieren. Es gibt dabei zwei nahezu identische Produktionsumgebungen, die als Blue und Green bezeichnet werden.

Wie funktioniert es?

  1. Aktive Umgebung: Eine der Umgebungen, z. B. Blue, ist live und verarbeitet den gesamten Benutzer-Traffic.
  2. Vorbereitung der neuen Version: Die neue Version der Anwendung wird in der inaktiven Umgebung, z. B. Green, bereitgestellt und getestet, während die alte Version weiterhin in der Blue-Umgebung läuft.
  3. Umstellung des Traffics: Wenn die neue Version in der Green-Umgebung als stabil bestätigt wird, wird der Traffic von der Blue-Umgebung auf die Green-Umgebung umgeschaltet.
  4. Rollback-Fähigkeit: Falls es Probleme mit der neuen Version gibt, kann der Traffic schnell wieder auf die vorherige, unveränderte Blue-Umgebung zurückgeschaltet werden.

Vorteile:

  • Kein Ausfall: Die Benutzer merken nichts von der Aktualisierung, da der Wechsel zwischen den Umgebungen nahtlos erfolgt.
  • Einfaches Rollback: Falls nach dem Deployment Probleme auftreten, kann man schnell zur alten Umgebung zurückkehren.
  • Vollständiges Testen: Die neue Version wird in einer Produktionsumgebung getestet, ohne dass der Live-Traffic betroffen ist.

Nachteile:

  • Kosten: Zwei Umgebungen aufrechtzuerhalten, kann ressourcenintensiv und teuer sein.
  • Daten-Synchronisation: Es kann komplex sein, die Datenkonsistenz sicherzustellen, insbesondere wenn sich die Datenbank während der Umstellung ändert.

Blue-Green Deployment ist eine effektive Methode, um kontinuierliche Verfügbarkeit zu gewährleisten und das Risiko von Störungen während eines Deployments zu reduzieren.