Frameworks

Entwicklungsframeworks sind Tools für die Web- und App-Entwicklung, die die Programmierung mithilfe von vorgegebenen Strukturen erleichtern.
Mitarbeiter einer Agentur entwickeln mithilfe von Frameworks eine Software am Laptop.
© AYAimages

Definition Framework

Entwicklungsframeworks, oder einfach kurz Frameworks, stellen ein Gerüst als Hilfestellung für den Programmierungsprozess dar. Per Begriffsdefinition handelt es sich dabei um eine “Rahmenkonstruktion”, in die der Inhalt noch eingefügt werden muss. Frameworks sind keine Programme, sondern Tools, mit denen Anwendungen, also Software, aber auch Websites, mobile Apps o. Ä., erstellt werden können.

In Abgrenzung zu Programmiersprachen ist ein Framework der Rahmen, innerhalb dessen verschiedene Programmiersprachen und Syntaxen zum Einsatz kommen. Frameworks erleichtern und reduzieren das eigenhändige Schreiben des gesamten Codes, indem wiederkehrende Muster verwendet werden können. Bei der Entwicklung von Software, Websites und Apps sind beispielsweise ähnliche Schritte notwendig, die immer wieder verwendet werden müssen, für die in Frameworks bereits Strukturen oder Code-Bausteine vorgegeben sind.

Im Prinzip sind Frameworks relativ plattformunabhängig, sind aber in der Regel auf einen Anwendungsfall beschränkt, so gibt es beispielsweise Frameworks nur für die Webentwicklung oder für die App-Entwicklung. Allerdings können Backend und Frontend von Websites getrennt aufgesetzt und mit entsprechenden Frameworks die Schnittstellen einer Website aus dem Backend für die spätere Entwicklung einer App verwendet werden.

Frameworks existieren für viele verschiedene Programmiersprachen und geben lediglich den Kontrollfluss vor, wie der Code in seiner zeitlichen Abfolge von Befehlen abgearbeitet wird. Sie enthalten genormte Schnittstellen zu Quellen, wie z.B. Datenbanken und sind manchmal auch zur Selbstdokumentation in der Softwareentwicklung gedacht.

Die häufigste Form von Frameworks sind im Prinzip strukturierte Verzeichnisse, sogenannte Klassenbibliotheken, also Sammlungen von vordefinierten Funktionen und vorgefertigten Klassen, mit denen im Programmierungsprozess umgegangen wird.

Frameworks werden häufig mit sogenannten Toolkits verwechselt, welche allerdings meistens nur Klassen enthalten und die Struktur nicht vorgeben.

Hierarchie von Entwicklungsprozessen

Im Ablauf eines Entwicklungsprojekts ist die kleinste Einheit die Syntax, wie z.B. HTML, die nächstgrößere ist die Programmiersprache, wie PHP oder Java. Dem übergeordnet ist das Framework, welches Libraries, Utilities und eine Entwicklungsstruktur enthält.

Die wiederum größere Einheit wäre dann beispielsweise ein Content Management System, kurz CMS, welches das Framework und die grafische Oberfläche, auch Admin-Interface genannt, enthält. Darüber hinaus gehören auch Module, Komponenten, Plug-Ins und Extensions dazu.

Fasst man all diese Elemente zusammen, ist die größte Einheit schließlich die fertige Applikation.

Aufbau und Inhalt von Frameworks

Laufzeitumgebung

Frameworks enthalten eine Laufzeitumgebung, auch Runtime genannt, welche eine Konfiguration aus Hardware und Software ist und den Code ausführt. Sie lädt das entwickelte Programm und lässt es auf einer Plattform ablaufen. Beispiele dafür sind Android Runtime (ART), Java Virtual Machine (JVM) oder Node.js.

Virtual Machine

Optional bieten Frameworks eine Virtuelle Maschine (Virtual Machine), welche die Architektur eines hypothetischen oder eines in der Wirklichkeit existierenden Hardware-Rechners auf einem Gastgeber-Rechner nachbildet. So kann die Applikation im Entwicklungsprozess auf ihre Funktionalität überprüft werden.

Libraries

Libraries, welche sich mit Klassenbibliotheken übersetzen ließen, werden oft als Synonym für Frameworks verwendet. In Abgrenzung dazu können Frameworks zwar Libraries enthalten, eine Library ist aber per Definition nicht gleich ein Framework. Sie enthält Routinen und Eigenschaften als Lösungen für unterschiedliche Problemszenarien.

Klassen

Klassen sind gesammelte Eigenschaften und Funktionen. Wenn im Entwicklungsprozess ein Objekt einer Klasse zugeordnet wird, nimmt es alle Eigenschaften der Klasse an. Wenn beispielsweise ein Objekt der Klasse “Button” zugeordnet wird und diese Klasse die Eigenschaften “rot” und “rund” besitzt, nimmt es diese Eigenschaften an. So können auch Funktionen wie “Fenster öffnen” zugewiesen werden. Auf diese Weise wird vermieden, dass alle Objekte einzeln konfiguriert werden müssen.

APIs

Application Programming Interfaces, kurz APIs, sind Programmierschnittstellen, die eine Verbindungsmöglichkeit zu einer bestimmten Datenmenge darstellt. Diese Datenmenge, z.B. in Form eines Codes, einer Datenbank oder unterschiedlicher Funktionen, kann wiederum im eigenen Code genutzt werden.

IDEs

Integrierte Entwicklungsumgebungen, sogenannte Integrated Development Environments, kurz IDEs, sind zwar nicht im Framework enthalten, unterstützen aber die Entwicklung mit Frameworks. Eine Entwicklungsumgebung, auch Systemumgebung genannt, enthält die wichtigsten Tools (Utilities) für den Programmierungsprozess: einen Text-Editor, der optional mit Vorlagen bestückt ist oder eine Echtzeit-Überprüfung der Syntax durchführt, Compiler, der für die Umwandlung vom Programmcode in Maschinensprache zuständig ist, grafische Verarbeitungsprogramme und Versionsverwaltungen und -dokumentationen.

Viele IDEs haben darüber hinaus Plugins für bestimmte Frameworks, um den Entwicklungsprozess weiter zu vereinfachen.

Utilities

Utilities sind die o.g. Dienstprogramme, die in der Entwicklungsumgebung enthalten sind. Sie übernehmen ein abgegrenztes Aufgabenfeld und sind systemnah angelegt. Im Unterschied zu Anwendungsprogrammen führen sie Anwendungen aus, die der Entwicklung dienen. Teilweise enthalten sie Vorgaben für die typischen Elemente, im Falle von Websites sind das zum Beispiel Vorgaben für Header, Slider, Formulare, Umfragen, unterschiedliche Bildgrößen und Designspezifika.

Arten von Frameworks

Web-Frameworks

Web-Frameworks dienen der Entwicklung von Websites und Web-Anwendungen. Im Web-Bereich ist vor allem die Programmiersprache PHP stark vertreten, Frameworks gibt es jedoch in allen Programmiersprachen. Darüber hinaus bauen viele bekannte CMS auf einem Framework auf, wie z.B. das Joomla! Framework. Bei der Webentwicklung können unterschiedliche Frameworks für dasselbe Projekt verwendet werden, so gibt es Frontend- und Backend-Frameworks.

Backend-Frameworks

Es gibt unzählige Entwicklungsframeworks, welche namentlich aufzuzählen unmöglich wäre. Dennoch sollen hier die gängigsten genannt sein. Zu denen gehört unter anderem Symfony, ein PHP-Framework, das es seit etwa 2005 gibt. Für PHP gibt es eine Vielzahl an Frameworks, doch es gibt auch Fälle, in denen das Framework an die Programmiersprache gebunden ist. Dies ist zum Beispiel bei Ruby On Rails der Fall, welches sich etwa zeitgleich mit Symfony entwickelt hat. Es ist das einzige Framework für die Programmiersprache Ruby und hat ihr erst zur Bekanntheit verholfen. Ein paar Jahre später, im Jahre 2011, kam das freie PHP-Framework Laravel auf den Markt, welches als Weiterentwicklung des Frameworks Codelgniter gilt.

Frontend-Frameworks

Für die Gestaltung des Frontends, der grafischen Benutzeroberfläche, gibt es unterschiedliche CSS-Frameworks, die für Responsive Webdesign ausgelegt sind. Zu ihnen zählen beispielsweise Bootstrap von Twitter, Zurb Foundation, Skull oder Tailwind. Diese arbeiten mit Grids und erlauben so die Erstellung von dynamischen Websites.

JavaScript-Frameworks erkennt man zumeist an ihrer .js-Endung. Zu ihnen zählen unter anderem Vue.js, Node.js und AngularJS von Google, aber auch Libraries wie jQuery fallen darunter. Mit ihnen ist nicht nur die Webentwicklung, sondern auch das Data-Binding möglich, welches Daten zwischen Objekten automatisch weitergeben kann.

App-Frameworks

App-Frameworks eignen sich für die Entwicklung von Mobile Apps, aber auch für Auto-Software, Smart-TVs oder Smart-Watches. Bei der App-Entwicklung wird zwischen Hybriden und Nativen Apps unterschieden, für die es entsprechende Frameworks gibt. Die Frameworks Cordova und Xamarin unterstützen die Entwicklung von hybriden, plattformübergreifenden Apps, die in einem Web-Container laufen.

2013 kam mit React Native von Facebook das erste native Framework auf den Markt, mit dem es erstmals möglich war, einen einheitlichen Code, zum Beispiel, wie im Falle von React Native, in JavaScript zu schreiben und diesen hinterher als native App kompilieren zu lassen. Seit 2017 gibt es auch das Pendent von Google mit dem Namen Flutter, mit dem ein Code in C, C++ oder Dart möglich ist.

Software-Frameworks

Mit Software-Frameworks ist die Entwicklung von System- und Anwendungssoftware möglich. Das wohl bekannteste ist .NET, das Anfang der 2000er von Microsoft entwickelt wurde. Damit sind neben der Entwicklung auch die Installation und Ausführung von Windows-Programmen möglich. Mit dem Open Source Framework Spring, welches 2004 entwickelt wurde, können Enterprise-Java-Anwendungen erstellt werden.

Test-Frameworks

Mit Test-Frameworks, sogenannten Unit-Tests, kann entwickelte Software und oder Websites vor dem Release auf Funktionalität und Fehler getestet werden.

Voice-Frameworks

In den letzten Jahren wurden Sprachassistenten immer populärer. Mit dem Frameworks Jovo oder Violet, welche es seit 2017 bzw. 2018 gibt, können Voice Assistants für Alexa und Google Action programmiert werden. Teilweise basieren diese wiederum auf anderen Frameworks wie Node.js.

Vor- und Nachteile von Frameworks

Um beispielsweise eine Homepage zu erstellen, gibt es unterschiedliche Wege: Dazu können entweder Baukästen oder CMS verwendet werden, welche nur wenig bis keine Programmierungserfahrung voraussetzen oder sie beispielsweise mithilfe von HTML und CSS selbst zu programmieren, welches fortgeschrittene Kenntnisse erfordert. Auch die Nutzung von Frameworks verlangt ein hohes Maß an Programmierungskompetenz. Doch gerade, weil es so viele verschiedene Möglichkeiten gibt, stellt sich die Frage, warum ein Framework überhaupt von Vorteil ist.

Vorteile von Frameworks

Der größte Vorteil eines Frameworks liegt in der Arbeitserleichterung. Als Anschauungsbeispiel lassen sich Frameworks mit einer Schablone vergleichen: Wenn jemand die Aufgabe bekommt, ein Stück Stoff auf 5cmx5cm zu schneiden, wäre ein einziges kein Problem. Wenn allerdings 1.000 Stücke Stoff auf diese Größe gebracht werden müssen, so würde man nicht jedes Mal aufs Neue messen, sondern nur einmal und dieses dann als Schablone für das Schneiden der anderen Stoffe verwenden.

Dadurch, dass Frameworks Codebausteine und vorgefertigte Strukturen enthalten, sind immer wiederkehrende Schritte bei der Programmierung bereits implementiert oder können leicht angepasst werden. Dies spart Zeit, vermeidet Fehler in der Syntax und garantiert durch die vorgegebene Codestruktur eine Vollständigkeit. Bei sehr großen und komplexen Anwendungen ist eine Entwicklung ohne Framework schlichtweg zu zeitintensiv und fehleranfällig. Gerade bei Open Source (quelloffenen) Frameworks kann man sich auf die jahrelange Weiterentwicklung durch Entwickler und große Communities verlassen, die den Code über eine lange Zeit optimiert haben.

Nachteile von Frameworks

Frameworks sind teilweise sehr komplex und gerade für Laien nicht unbedingt leicht verständlich. Häufig enthalten sie viele Funktionen, die auch nicht jedes Projekt in dem Umfang erfordert. Wer nicht unbedingt mit den technischen Details vertraut ist, kann dies als Ballast empfinden. Die Verwendung von Frameworks empfiehlt sich nur für erfahrene Entwickler oder Agenturen.

Performance von Frameworks

Ein Vergleich von Frameworks ist nur bedingt möglich, da unendlich viele Faktoren die Wahl eines Frameworks beeinflussen kann. Diese ist abhängig vom Anwendungsfall, der verwendeten Programmiersprache, dem Umfang und vielen weiteren Aspekten.

Unter Entwicklern ist die Performance eines Frameworks jedoch ein Punkt, der unter einheitlichen Voraussetzungen bestimmt und verglichen werden kann. Dazu dienen sogenannte Benchmarks. Wenn beispielsweise ein Code auf einem Rechner ausgeführt wird, nehmen viele Gegebenheiten Einfluss auf die Qualität der Ausführung, wie die Hardware, die Software, der Applikationsumfang oder der Prozessor.

Mit Benchmarks wird versucht, einheitliche Tests durchzuführen, die diese Faktoren möglichst neutralisieren. Dazu wird meist eine mathematische Problemstellung, zum Beispiel eine Gleichung oder ein Codeausschnitt, herangezogen, der dann von den zu messenden Systemen ausgeführt wird. Anschließend wird die Zeit gemessen, die das System für die Ausführung benötigt.

Diese Benchmark-Ergebnisse, die es für Software, Hardware, aber auch zu Frameworks gibt, werden von unzähligen Anbietern und Internetseiten veröffentlicht. Ein Vergleich der Performance von PHP-Frameworks hat laut frameworkphpbenchmarks.com ergeben, dass die Frameworks Symplex und Symfony in Sachen Schnelligkeit das Feld mit teilweise unter einer Millisekunde pro gesendete Anfrage anführen.

Sicherheit

Grundsätzlich gilt, dass jede Applikation nur so sicher wie ihr Anwender ist. Teilweise bringen die sichersten Frameworks nichts, wenn die meisten Applikationen durch unsichere Passwörter geknackt werden. Zudem stehen Frameworks nie alleine, sondern sind immer ein Teil eines Tech Stacks, zu dem das Betriebssystem, der Server, das Backend-Framework, das Frontend-Framework, unzählige Dependencies von Drittanbietern und eigene Anwendungen gehören. Jedes dieser Elemente bietet eine neue Angriffsfläche.

Der Einsatz von Frameworks bei TenMedia

TenMedia ist eine dynamische Digitalagentur in Berlin. Wir haben uns seit 2011 auf die individuelle Softwareentwicklung, die Entwicklung von state-of-the-art Websites und umfangreichen Apps spezialisiert. Zu den von uns verwendeten Entwicklungsframeworks zählen unter anderem Laravel, Foundation, Vue.js, Angular, Bootstrap, Node.js, jQuery, Symfony, React Native und Cordova. Mit diesen Technologien ist es uns möglich, modernste Projekte jeder Größenordnung genau nach Kundenvorstellungen umzusetzen. Durch unseren großen Erfahrungsschatz im Bereich Frameworks können wir Projekte genau einschätzen und mit den richtigen Schritten zum Erfolg bringen.