Definition von Abhängigkeiten
Abhängigkeiten (engl. Dependencies) sind in der Softwareentwicklung Beziehungen zwischen Tasks, die angeben, in welcher Reihenfolge sie ausgeführt werden sollen, d.h. Beziehungen zwischen Softwarekomponenten, bei denen eine Komponente (z.B. ein Programm) von der Funktionalität anderer Komponenten (z.B. Frameworks, Bibliotheken) abhängig ist.
Alle Pakete, die ein Softwareprodukt zum Ausführen benötigt, müssen bei der Installation dieses Softwareprodukts mitinstalliert werden. Andernfalls funktioniert das Programm nicht richtig.
Zum Beispiel: in .NET werden DLLs in der eigenen Anwendung referenziert und der Programmcode der DLL kann dann von der eigenen Anwendung verwendet werden. Allerdings ist das eigene Programm ohne die DLL nicht mehr lauffähig. Man ist auf diese DLL angewiesen.
Softwareabhängigkeiten können externer oder interner Natur sein. Externe Abhängigkeiten stammen von Dritten (Datenbank oder Cloud-Dienst), während interne Abhängigkeiten innerhalb der Software bestehen, z.B. zwischen verschiedenen Funktionen.
Verwaltung der Abhängigkeiten
Das Management dieser Softwareabhängigkeiten ist ein wichtiger Teil des Softwareentwicklungsprozesses, da es dazu beiträgt, dass die Software vorhersehbar und zuverlässig erstellt, bereitgestellt und gewartet werden kann.
Eine Abhängigkeitsprüfung identifiziert alle Komponenten, Bibliotheken oder Module, die mit einer bestimmten Software verknüpft sind, um ein Inventar zu erstellen und veraltete Softwarekomponenten, Lizenzprobleme, Kompatibilitätsprobleme, Versionsnummern und vieles mehr zu identifizieren.
- Bekannte Schwachstellen. Die Überprüfung von Abhängigkeiten beginnt in der Regel mit einem automatischen Scan, bei dem alle Abhängigkeiten in einem bestimmten Code-Satz mit einer Datenbank bekannter Schwachstellen abgeglichen werden, um potenzielle Probleme zu identifizieren.
- Veraltete Software. Ein Abhängigkeitsscan prüft auch auf veralteten Code, indem er feststellt, ob neue Versionen von Bibliotheken oder Softwarekomponenten verfügbar sind.
- Kompatibilität. Wenn neue Versionen von Softwarekomponenten verfügbar sind, ist es wichtig, dass ein Abhängigkeitsscan feststellt, ob diese kompatibel sind oder nicht, damit ein Unternehmen das Risiko und den Aufwand eines Upgrades auf eine neue Version steuern kann.
- Lizenzinformationen. Bei der Prüfung von Abhängigkeiten können auch Lizenzinformationen für Code von Drittanbietern ausgewertet werden, um mögliche rechtliche Probleme zu vermeiden und die Einhaltung von Vorschriften sicherzustellen.
Im Idealfall werden die Ergebnisse einer Abhängigkeitsprüfung in einem detaillierten Bericht festgehalten, der Schwachstellen oder Probleme aufzeigt und Handlungsempfehlungen enthält. Die meisten Unternehmen werden auch kontinuierliche Abhängigkeitsüberprüfungen durchführen wollen, da bei jeder Änderung oder Aktualisierung von Software neue Schwachstellen auftreten können.
Vor- und Nachteile der Abhängigkeiten
Die Verwendung von externen Paketen erspart dem Entwickler Arbeit und Zeit. Denn oft gibt es für alltägliche Probleme bereits ausgereifte Lösungen eines Drittanbieters, die einfach in ein beliebiges Projekt integriert werden können.
Ebenso ist es möglich, innerhalb eines Unternehmens bestimmte Funktionalitäten auszulagern und als Pakete für verschiedene Projekte zur Verfügung zu stellen. So kann z.B. ein einheitliches Vorgehen für bestimmte Aufgaben erreicht werden oder generell Entwicklungszeit für wiederkehrende und projektübergreifende Aufgaben eingespart werden.
Durch die Nutzung von Abhängigkeiten wird der selbst geschriebene Code schlanker und übersichtlicher. Der Entwickler kann sich weitestgehend auf die projektspezifischen Funktionen konzentrieren, anstatt den gesamten Funktionsumfang selbst zu programmieren.
Ein Nachteil ist, dass das Fehlen eines erwarteten Pakets oder einer aktuelleren Version von Drittanbietern zu Fehlern in der Software führen kann. Diese Fehler reichen von unerwartetem Verhalten bis hin zum Verlust der Funktionalität. Wird beispielsweise eine Abhängigkeit nicht oder falsch aufgelöst, funktioniert das Programm nicht mehr und muss unter Umständen komplett neu installiert werden.