Förderjahr 2019 / Stipendien Call #14 / ProjektID: 4577 / Projekt: Performance-Analyse von nativen und plattformübergreifenden Entwicklungsansätzen bei UI-Interaktion
Im Bereich der Softwareentwicklung für Smartphones gibt es zwei verschiedene Ansätze. Einerseits gibt es die native Entwicklung, in welcher Anwendungen für ein bestimmtes Betriebssystem, beispielsweise Android oder iOS entwickelt werden. Anwendungen, die für Android entwickelt wurden, sind dementsprechend auf allen Geräten, auch von unterschiedlichen Herstellern, welche das Android Betriebssystem nutzen, lauffähig. Anwendungen für Android werden mit der Programmiersprache Java und/oder Kotlin in der integrierten Entwicklungsumgebung Android Studio und dem Build-Tool Gradle programmiert. Anwendungen, welche für iOS entwickelt wurden, sind wiederum nur auf Geräten ausführbar, welche iOS unterstützen. Dies sind derzeit nur Geräte der Firma Apple. Für iOS wird Objective-C oder Swift in der integrierten Entwicklungsumgebung Xcode 8 verwendet. Möchte man eine Anwendung für mehrere Plattformen entwickeln, muss ein Großteil des Entwicklungsprozesses für jede Ziel-Plattform wiederholt werden. Der Entwicklungsprozess umfasst unter anderem das Design, die Erstellung der Codebasis und das Testen dieser. Sind im nachhinein Änderungen oder Updates notwendig, so muss die Codebasis für jede Ziel-Plattform separat upgedatet werden. Dies erfordert im Gegensatz zu den nachfolgend angeführten Entwicklungsansätzen jedoch deutlich mehr Ressourcen und bringt deshalb einen höheren Zeit-, Kosten- und Wartungsaufwand mit sich.
Neben der nativen Programmierung gibt es die plattformübergreifenden Entwicklungsansätze. Hier wird eine einzige Codebasis entwickelt und durch das eingesetzte Framework auf die verschiedenen Betriebssysteme angepasst. Diese Codebasis kann von jedem mobilen Gerät gelesen und ausgeführt werden. Auf diese Weise reduziert sich die Entwicklungszeit sowie der Entwicklungsaufwand und es kommt zu einer Optimierung des Kosten-Nutzen-Verhältnisses. Plattformübergreifende Entwicklungsansätze basieren größtenteils auf Webtechnologien. Zu diesen zählen unter anderem HTML, CSS und JavaScript, welche unter Webentwicklern weit verbreitet sind. Dieser Umstand bringt den Vorteil mit sich, dass keine spezifischen beziehungsweise plattformabhängigen Programmiersprachen, wie Java oder Swift zusätzlich erlernt werden müssen.
Es gibt unterschiedliche Grundkategorien der Entwicklungsansätze. Drei davon werden in der Literatur durchgängig akzeptiert. Diese sind der native, hybride und Web-basierte Ansatz. Webanwendungen werden über den Browser aufgerufen und sind somit nicht auf dem Gerät installiert. Die Daten und Logik befinden sich auf dem Webserver und die Anwendungen können nicht über die App Stores vertreiben und heruntergeladen werden. Webanwendungen können auch als interaktive Webseiten bezeichnet werden. Sie werden ebenfalls mit Webtechnologien programmiert. Der Begriff „hybride Anwendungen“ wird oft als Sammelbegriff für alle plattformübergreifenden Entwicklungsansätze verwendet, ist aber nur eine der Grundkategorien.
Es gibt keinen Konsens in der Literatur, in welche Grundkategorien plattformübergreifende Entwicklungsansätze eingeteilt werden oder welche Technologie welcher Kategorie zuzuordnen ist. Über die letzten zehn Jahre wurden in der Forschung verschiedene unterschiedliche Einteilungsversuche unternommen. Da es aber für meine Arbeit wichtig ist einer Einteilung zu folgen, habe ich mich entschieden, die Einteilung von Biørn-Hansen et al. zu übernehmen. Diese Studie wurde im Juli 2018 veröffentlicht und basiert auf einer großen Auswahl an Literatur. Biørn-Hansen et al. teilen die plattformübergreifenden Entwicklungsansätze in die folgenden fünf Kategorien ein: hybride Anwendungen, interpretierte Anwendungen, cross-kompilierte Anwendungen, modellgetriebene Anwendungen sowie die Progressiven Web Apps. Eine genaue Beschreibung der fünf Entwicklungsansätze wird in meiner fertigen Masterarbeit angeführt.
Um den Ressourenverbrauch zu messen, habe ich mich für den Vergleich von hybriden, interpretierten und cross-kompilierten Anwendungen entschieden. Für den hybriden Entwicklungsansatz habe ich eine Anwendung mit dem Ionic Framework implementiert. Die interpretierte Anwendung wurde mittels ReactNative und die cross-kompilierte mit Flutter implementiert. Zum Vergleich wurde die gleiche Anwendung nativ für Android mit Java und für iOS mittels Swift programmiert. Auf diese Weise wird der Ressourcenverbrauch der unterschiedlichen plattformübergreifenden Entwicklungsansätze untereinander sowie mit den nativen Anwendungen verglichen.
Fazit
Eine pauschale Aussage, welcher Entwicklungsansatz der Beste ist, kann nicht getätigt werden. Jeder Ansatz besitzt spezifische Eigenschaften und bietet dementsprechend Vor- und Nachteile. Im nächsten Blog-Post werde ich die drei UI-Interaktionsszenarien, anhand welcher ich den Ressourcenverbrauch messe, vorstellen.