Options
July 15, 2022
Bachelor Thesis
Title
Möglichkeiten und Grenzen für die automatisierte Qualitätssicherung und Bereitstellung von Software am Beispiel einer iOS-Anwendung
Abstract
Zur Verbesserung der Effizienz des Entwicklungsprozesses soll die Qualitätssicherung und Bereitstellung einer nativen iOS-Anwendung automatisiert werden. Dazu werden u.a. aus ITIL und dem BSI-Grundschutz-Kompendium allgemeine qualitätssichernde Maßnahmen zusammengetragen und deren Eignung für eine Automatisierung erläutert. Anhand eines Experteninterviews werden Anforderungen bestimmt, die als Grundlage für die Definition von Kriterien dienen. Diese werden schließlich zur Auswahl von Werkzeugen und zur Evaluierung einer exemplarischen Umsetzung herangezogen, wodurch anschließend eine fundierte Empfehlung ausgesprochen werden kann.
Allgemein sollten dynamische und statische Tests automatisiert durchgeführt werden. Dynamische Tests umfassen dabei u.a. Unit-, User-Interface-, End-to-End- und Regressions-Tests. Statische Tests umfassen die Prüfung der Einhaltung von Programmierrichtlinien, Schwachstellenanalysen auf Basis von Schwachstellendatenbanken, Secret-Detection, Dependency-Scanning und weiterer Codeanalysen, bspw. zur Beurteilung der Wartbarkeit oder sonstigen Qualitätsmerkmalen. Darüber hinaus sollten automatisiert Metriken erfasst und diese für ein Quality Gate genutzt werden, das zur Unterstützung von Code-Reviews dient. Analyseergebnisse und Metriken liefern allerdings keinen Beweis dafür, dass die Software frei von Sicherheitsmängeln ist.
In Verbindung mit GitLab stellt GitLab CI/CD die geeignetste Lösung für die Automatisierung dar. Für dynamische Tests eignet sich in Bezug auf die konkrete iOS-Anwendung das Testframework XCTest zum Erstellen und das Werkzeug Xcodebuild zum Ausführen. Für statische Tests stellt die Kombination aus SonarQube mit dem OWASP Dependency-Check-Plugin, SwiftLint, Mobsfscan und Gitleaks die geeignetste Kombination für den konkreten Anwendungsfall dar. Für die Bereitstellung empfiehlt sich Xcodebuild zum Exportieren der iOS-Anwendung, AsciiDoctor für Versionshinweise, 7-Zip für das Paketieren, Komprimieren und Verschlüsseln eines Release-Paketes sowie ein Python-Skript. Das Skript übernimmt die Erstellung des Release-Paketes und kommuniziert mit der unternehmenseigenen Nextcloud-Instanz. Die Auswahl der Werkzeuge basiert dabei auf der Erfüllung und Bewertung bestimmter Kriterien, wie bspw. dem Vorhandensein benötigter Funktionalitäten, Effizienz, Zuverlässigkeit oder Bedienbarkeit.
Die Automatisierung ist vor allem dann geeignet, wenn das Projekt eine gewisse Laufzeit aufweist, damit sich der anfänglich hohe Aufwand für die Umsetzung der Automatisierung amortisiert. Weiterhin sollte die Software als Gegenstand der Automatisierung einem gewissen Reifegrad entsprechen und über eine hohe Testabdeckung verfügen.
Allgemein sollten dynamische und statische Tests automatisiert durchgeführt werden. Dynamische Tests umfassen dabei u.a. Unit-, User-Interface-, End-to-End- und Regressions-Tests. Statische Tests umfassen die Prüfung der Einhaltung von Programmierrichtlinien, Schwachstellenanalysen auf Basis von Schwachstellendatenbanken, Secret-Detection, Dependency-Scanning und weiterer Codeanalysen, bspw. zur Beurteilung der Wartbarkeit oder sonstigen Qualitätsmerkmalen. Darüber hinaus sollten automatisiert Metriken erfasst und diese für ein Quality Gate genutzt werden, das zur Unterstützung von Code-Reviews dient. Analyseergebnisse und Metriken liefern allerdings keinen Beweis dafür, dass die Software frei von Sicherheitsmängeln ist.
In Verbindung mit GitLab stellt GitLab CI/CD die geeignetste Lösung für die Automatisierung dar. Für dynamische Tests eignet sich in Bezug auf die konkrete iOS-Anwendung das Testframework XCTest zum Erstellen und das Werkzeug Xcodebuild zum Ausführen. Für statische Tests stellt die Kombination aus SonarQube mit dem OWASP Dependency-Check-Plugin, SwiftLint, Mobsfscan und Gitleaks die geeignetste Kombination für den konkreten Anwendungsfall dar. Für die Bereitstellung empfiehlt sich Xcodebuild zum Exportieren der iOS-Anwendung, AsciiDoctor für Versionshinweise, 7-Zip für das Paketieren, Komprimieren und Verschlüsseln eines Release-Paketes sowie ein Python-Skript. Das Skript übernimmt die Erstellung des Release-Paketes und kommuniziert mit der unternehmenseigenen Nextcloud-Instanz. Die Auswahl der Werkzeuge basiert dabei auf der Erfüllung und Bewertung bestimmter Kriterien, wie bspw. dem Vorhandensein benötigter Funktionalitäten, Effizienz, Zuverlässigkeit oder Bedienbarkeit.
Die Automatisierung ist vor allem dann geeignet, wenn das Projekt eine gewisse Laufzeit aufweist, damit sich der anfänglich hohe Aufwand für die Umsetzung der Automatisierung amortisiert. Weiterhin sollte die Software als Gegenstand der Automatisierung einem gewissen Reifegrad entsprechen und über eine hohe Testabdeckung verfügen.
Thesis Note
Dresden, Berufsakademie, Bachelor Thesis, 2022
Author(s)
Advisor(s)