Softwareentwicklung erklärt

EIN KOMPLETTER LEITFADEN ZUR SOFTWAREENTWICKLUNG, VERSCHIEDENE SOFTWARETYPEN, ENTWICKLUNGSMETHODEN, ENTWICKLUNGSZYKLUS, TEAMROLLEN, PROGRAMMIERSPRACHEN UND VIELES MEHR

AgileUPDATED ON September 10, 2021

Author

Software development agency Munich and nearshore

Table of Contents

Softwareentwicklung beschreibt den Prozess zur Erstellung einer Software, die für eine bestimmte Aufgabe entwickelt wird. Der Begriff umfasst den gesamten Lebenszyklus, den sogenannten Software Development Life Cycle (SDLC).

Was ist Software?

Eine Software ist ein Computerprogramm – eine strukturierte Zusammenstellung von Befehlen, die Computer und andere Hardwarekomponenten verstehen und dementsprechend reagieren, da diese in Programmiersprachen verfasst sind, die aus Binärcode bestehen. Software wird entwickelt, um bestimmte Aufgaben zu erfüllen. Hierbei kann es sich um die Automatisierung eines zuvor manuellen Prozesses handeln, um diesen effizienter zu gestalten oder um die Organisation und Verarbeitung von Informationen (Daten). Software kann auch aus Unterhaltungsgründen, wie beispielsweise Videospiele, erstellt werden.

Können wir Sie bei Ihrem nächsten Entwicklungsprojekt unterstützen?

Flexible Modelle für Ihre Bedürfnisse!

Software hat ein Front- und Backend

Ein Großteil der Software hat sowohl ein Front- als auch ein Backend. Das Frontend ist der Teil, den Nutzer sehen und mit dem sie interagieren können und wird daher auch als „Präsentationsschicht“ bezeichnet. Das Backend bildet dagegen im Hintergrund die Grundlage für die Funktionalität des Frontends und wird daher als „Datenzugriffsschicht“ oder auch „Infrastrukturschicht“ bezeichnet.

Die Entwicklung von Front- und Backend erfordert unterschiedliche Fähigkeiten und Technologien, sodass Softwareentwickler in der Regel als Frontend-, Backend- oder auch als Full-Stack-Entwickler klassifiziert werden. Full-Stack-Entwickler besitzen die nötigen Fähigkeiten und Erfahrungen, um sowohl am Front- als auch am Backend der Software zu arbeiten.

Was ist der Unterschied zwischen Softwareentwicklung und Software-Engineering?

Die Begriffe Softwareentwicklung und Software-Engineering werden häufig synonym verwendet. Doch gibt es eigentlich einen Unterschied? Einige mögen anders denken, aber offiziell gibt es keinen Unterschied zwischen beiden Begrifflichkeiten.

Merriam Webster definiert Software-Engineering als:

„Ein Teilbereich der Informatik, der sich mit dem Design, der Implementierung und Wartung von komplexen Computerprogrammen befasst.“

Das Wörterbuch definiert jedoch nicht den Begriff Softwareentwicklung, sondern schlägt stattdessen Software-Engineering vor.

Das Cambridge-Dictionary definiert sowohl Softwareentwicklung als auch Software-Engineering auf dieselbe Weise:

„Die Aktivität der Entwicklung von Computerprogrammen“

Gibt es einen Unterschied zwischen Softwareentwicklung und Computerprogrammierung oder Coding?

Computerprogrammierung und Coding sind ebenfalls Ausdrücke, die synonym für Softwareentwicklung verwendet werden. Der Unterschied könnte jedoch darin liegen, dass Softwareentwicklung speziell auf den End-to-End-Prozess zur Erstellung eines Softwareprodukts ausgerichtet ist. Computerprogrammierung und Coding sind ein Teil dieses Prozesses. Eine gute Analogie wäre die Unterscheidung zwischen „Schreiben“ und „Schreiben eines Buches“.

Verschiedene Softwaretypen

Es gibt viele unterschiedliche Softwaretypen, die sich in verschiedene Gruppen unterteilen lassen, wie beispielsweise Anwendungsfälle oder technische Eigenschaften. Auf einer Makroebene können wir Software in vier Hauptgruppen gliedern:

  1. Anwendungssoftware
  2. Utility Software (Dienstprogramme)
  3.  Systemsoftware
  4. Embedded Software (Integrierte Software)

Anwendungssoftware

Bei Anwendungssoftware handelt es sich um die Kategorie, mit der wir uns am besten auskennen, da diese auf einem Computer oder einem mobilen Gerät ausgeführt wird. Ein Computerspiel, Microsoft Office, Buchhaltungs-Software, Slack, Skype, Google Maps oder ein Browser wie Chrome sind alles Beispiele für Anwendungssoftware.

Anwendungssoftware kann nativ sein – sodass sie entweder auf einem bestimmten Betriebssystem wie Windows oder MacOS (Desktop und Laptop) bzw. Android oder iOS (mobile Geräte) ausgeführt werden soll.

Software kann jedoch auch plattformübergreifend sein. Plattformübergreifende Anwendungssoftware läuft auf Webbrowsern. Einige plattformübergreifende Anwendungen, in der Regel mobile Apps, werden als „hybrid“ bezeichnet, da sie auf einem Browser ausgeführt, aber in einem nativen Container bereitgestellt werden. Dieser Ansatz gibt plattformübergreifenden Apps ein „natives“ Gefühl und ermöglicht eine bessere Integration mit der Hardware des jeweiligen Geräts.

Anwendungssoftware ist in der Regel so konzipiert, dass sie bestimmte Aufgaben erfüllt, einschließlich Unterhaltung. Die vier Hauptunterkategorien von Anwendungssoftware sind:

Individuelle Software

Individuelle Software (Custom Software) wird als maßgeschneiderte Lösung für die speziellen Anforderungen eines bestimmten Benutzers entwickelt. Beispielsweise möchte ein Solaranlagenbetreiber möglicherweise eine Software entwickeln, die Erträge über die Anlagen verfolgt und aufzeichnet. Individuelle, oder kundenspezifische, Software muss speziell anhand der jeweiligen Bedingungen und den kommerziellen Prioritäten des Kunden entwickelt werden.

Individuelle Software wird in der Regel mit dem Ziel entwickelt, einen Wettbewerbsvorteil zu erhalten, den eine One-Size-Fits-All-Software nicht bieten kann.

Kommerzielle Software

Kommerzielle Software wird als Lösung für einen bestimmten Markt- oder Kundenbedarf entwickelt, um an eine theoretisch unbegrenzte Anzahl von Benutzern mit demselben Bedürfnis weiterverkauft zu werden. Videospiele sind ein gutes Beispiel für kommerzielle Software, ebenso wie mobile Apps und SaaS-Produkte wie Buchhaltungs- oder Buchungs-Software für Restaurants, Hotels oder Sportanlagen.

Manchmal lässt sich kommerzielle Software auch an individuelle Kundenbedürfnisse anpassen. Hybride, anpassbare kommerzielle Software bietet in der Regel eine Standardversion des Produkts an, die den allgemeinsten Anforderungen entspricht. Kunden, die ihre Anforderungen anpassen möchten, zahlen dann neben den Lizenzen eine Gebühr für die zusätzliche Entwicklungsarbeit. Salesforce ist eines der bekanntesten Beispiele für kommerzielle Software, die sich an die Kundenbedürfnisse anpassen lässt.

Open-Source-Anwendungssoftware

Open-Source-Software wird vom Urheberrechtsinhaber unter einer Lizenz entwickelt und veröffentlicht, die den Benutzern das Recht auf Nutzung, Analyse, Anpassung, Entwicklung und Veröffentlichung bereitstellt. Der Quellcode der Open-Source-Software wird häufig von einer Entwicklergemeinschaft erstellt.

Verbesserungen, die von der Open-Source-Community vorgeschlagen werden, werden durch Konsensentscheidungen in die Software integriert. WordPress, der Mozilla Firefox-Browser und VLC Media sind alles beliebte Beispiele für Open-Source-Anwendungssoftware. Andere Arten von Software, wie Betriebssysteme und Programmiersprachen, Frameworks und Software-Entwicklungstools können auch Open-Source sein.

Der Begriff Open Source wurde in den späten 1990er Jahren von der Open Source Initiative (OSI) eingeführt.

„Free Source“ ist ein Begriff, der manchmal für Open-Source-Software ohne Lizenzgebühr verwendet wird.

Cloud-native Software

Cloud-native Softwareentwicklung bedeutet, dass die Software speziell auf eine Cloud-Computing-Infrastruktur ausgelegt wurde, einschließlich öffentlichen, privaten und hybriden Clouds.

Cloud-native Apps bestehen aus „einer Sammlung kleiner, unabhängiger und leicht verkoppelter Dienste“, die als Microservices bezeichnet werden.

Cloud-native Software kann entweder „Cloud-agnostisch“ entwickelt werden, was bedeutet, dass sie auf jeder Art von Cloud, öffentlich oder privat, mit minimaler Rekonfiguration funktioniert oder nativ auf einer bestimmten Cloud-Computing-Plattform wie AWS, Microsoft Azure oder der Google Cloud Platform (GCP) ausgeführt werden kann.

Systemsoftware

Bei Systemsoftware handelt es sich um einen Überbegriff für Software, mit dem Computerhardware gestartet und auf der die Anwendungssoftware ausgeführt werden kann. Systemsoftware erleichtert die Interaktion zwischen Hardware- und Anwendungssoftware.

Es gibt verschiedene Kategorien von Systemsoftware:

Betriebssystem

Das Betriebssystem eines Geräts ist wahrscheinlich die bekannteste Systemsoftware. Hierbei handelt es sich um eine Art Softwareanwendung, die zwischen der Hardware eines Computers und der Anwendungssoftware sitzt. Anwendungen nutzen die Hardware, indem sie Anfragen für bestimmte Dienste an das Betriebssystem per API senden, wie beispielsweise die Verarbeitung oder die visuelle Darstellung.

Nutzer des Geräts können komplett ohne Programmierkenntnisse ein Betriebssystem verwenden, um mit der Hardware zu kommunizieren. Sie können beispielsweise Ihren Laptop ausschalten, indem Sie über Windows oder macOS auf „Herunterfahren“ klicken.

Die Betriebssysteme, die wir als Nutzer von Mainstream-Geräten wie Laptops, Smartphones und Tablets am besten kennen (Windows, macOS, Android und iOS) verwenden eine grafische Benutzeroberfläche (GUI). Linux, beliebt bei Softwareentwicklern, verfügt dagegen über eine Befehlszeilenschnittstelle (CLI), sodass Sie mit einem Cursor nicht auf eine Schaltfläche tippen, sondern einen Befehl eingeben.

Die häufigsten Betriebssysteme im Jahr 2021 (von fast 92% aller Geräte verwendet) sind:

  • Windows
  • macOS
  • Linux
  • Android
  • iOS

Utility Software (Dienstprogramme)

Dienstprogramme wurden ebenfalls konzipiert, um bestimmte Aufgaben auszuführen, jedoch findet dies im Hintergrund und im Zusammenhang mit der Hardware-Leistung und -Sicherheit statt. Beispiele hierfür sind Antivirenprogramme, Festplatten-Optimierungs-Tools und Geräte-Backup-Software.

Treiber

Gerätetreiber (Driver) sind eine Art Softwareerweiterung oder Komponente, die die Kommunikation zwischen einem Betriebssystem und einem Gerät erleichtern. Wenn eine Anwendung auf Daten des Geräts zugreifen muss, übermittelt der Treiber diese Anfrage an die Hardware, die dann die angeforderten Daten an das Betriebssystem zurücksendet, was wiederum an die Anwendung weitergeleitet wird.

Diagram of how driver software extensions site between a device and operating system

Quelle: Microsoft

Middleware

Middleware ist eine Softwarekategorie, die die Dienste und Möglichkeiten des Betriebssystems erweitert und häufig dazu verwendet wird, um API- und Datenverwaltung, Authentifizierung, Messaging und erweiterte Anwendungsdienste zu übernehmen.

RedHat definiert die Rolle von Middleware wie folgt:

„Middleware hilft Entwicklern dabei, Anwendungen effizienter zu erstellen. Middleware fungiert als Bindegewebe zwischen Anwendungen, Daten und Benutzern.“

Middleware ist mit dem Aufkommen der DevOps-Entwicklungsmethodik und der Cloud-nativen Entwicklung immer wichtiger geworden, da sie dabei hilft, die Komplexität der Anwendungen zu bewältigen, die in Hybrid- und Multi-Cloud-Infrastrukturen ausgeführt werden.

Middleware wird als Teil eines DevOps-Ansatzes für die Entwicklung von Anwendungssoftware verwendet, um sicherzustellen, dass die Software in unterschiedlichen Umgebungen funktioniert.

Windowing-Systeme und Betriebssystem-Shells sind ebenfalls Beispiele für Systemsoftwarekategorien.

Embedded Software

Embedded Software (auch Firmware genannt) wird für die Ausführung auf einer Hardware entwickelt, bei der es sich normalerweise nicht um einen Computer handelt. Hierbei kann es sich um Software in einem Auto oder Roboterstaubsauger handeln. Das Gleiche gilt für Software, die für die Robotertechnik entwickelt wurde, wie beispielsweise zur Automatisierung von Fließbändern oder IoT-Geräte (Internet of Things) wie intelligente Türklingeln oder virtuelle Assistenten (Alexa, Apple HomePod, Google Assistant etc.).

Ingenieure benötigen für Embedded Software spezifische Fähigkeiten und Kenntnisse, die Anwendungssoftware-Spezialisten oft nicht benötigen, einschließlich der Fähigkeit, Schaltpläne und Komponentendatenblätter sowie Kommunikationsprotokolle zwischen Prozessoren und anderen Komponenten zu lesen sowie die Fähigkeit, zwischen dezimal, hexadezimal und binär zu konvertieren und Bitmanipulation zu verwenden.

Die Entwicklung von Embedded Software beinhaltet die Verwendung eines Cross-Compilers, der auf einem Computer entwickelten Code in ein auf dem Zielgerät ausführbares Format umwandelt. Debugging funktioniert ebenfalls anders und erfordert die Verwendung eines In-Circuit-Emulators und spezieller Hardware.

Künstliche Intelligenz (KI)

KI-Algorithmen sind eine Art Software, die normalerweise ein Bestandteil einer größeren Software sind, wie beispielsweise Anwendungssoftware, Systemsoftware oder sogar Embedded Software.

KI-Software ist ein Algorithmus oder eine Kollektion von Algorithmen, bei denen es sich um Regelwerke oder schrittweise Berechnungsverfahren handelt. Der Algorithmus wendet die ihm gegebenen Regeln auf einen Datensatz an, wodurch er selbstständig lernen kann.

Ein einfaches Beispiel für einen Algorithmus

Ein einfacher Algorithmus zum Ermitteln der größten unter drei verschiedenen Zahlen würde beispielsweise so aussehen:

Step 1: Start
Step 2: Declare variables a,b and c.
Step 3: Read variables a,b and c.
Step 4: If a > b
           If a > c
              Display a is the largest number.
           Else
              Display c is the largest number.
        Else
           If b > c
              Display b is the largest number.
           Else
              Display c is the greatest number.  
Step 5: Stop

Es gibt verschiedene Arten von KI, wobei Machine und Deep Learning am häufigsten in der Softwareentwicklung vorkommen.

Machine Learning

Machine-Learning-Algorithmen parsen Daten, isolieren vorhandene Muster, „lernen“ daraus und entscheiden oder treffen Vorhersagen, die mit den aus der Datenbank erlernten oder ähnlichen Daten in Verbindung stehen. ML-Algorithmen basieren auf dem Erlernen von Entscheidungsbäumen, induktiver, logischer Programmierung (ILP), Clustering, verstärkendem Lernen (Reinforcement Learning), Bayes’sches Netz und anderen Prozessen, von denen einige dem menschlichen Lernvorgang durchaus ähnlich sind.

Deep Learning

Deep Learning ist ein KI-Ansatz, der menschlicher Intelligenz nahekommt. Neuronale Netze unterteilen den Entscheidungsprozess und durchlaufen ein System von gegenseitiger Kontrolle. Wenn wir ein Stoppschild sehen, das teilweise von einem Ast verdeckt wird, sehen wir möglicherweise nicht das gesamte Schild, sind uns aber sicher, dass es sich hierbei um ein Stoppschild handelt, da wir die Form, Größe und Farbe sowie einen Teil des geschriebenen Wortes erkennen können.

Ein Deep-Learning-Algorithmus gewichtet die Informationen, die er von der gelernten Datenbank hat, und erreicht einen „Wahrscheinlichkeitsvektor“, oder anders ausgedrückt, eine fundierte Vermutung.

K&C – WIR KREIEREN EINZIGARTIGE TECH-LÖSUNGEN SEIT ÜBER 20 JAHREN. WIR VERSCHAFFEN IHNEN IHREN WETTBEWERBSVORTEIL!

Schreiben Sie uns eine Nachricht, um Ihre individuellen Bedürfnisse oder das nächste Projekt zu besprechen.

Lebenszyklus der Softwareentwicklung

Software wird durch einen Entwicklungslebenszyklus oder -prozess erstellt, der eine Vielzahl von Phasen umfasst: Ideenfindung, Konzeptvalidierung, Spezifizierung von Anforderungen, Design, Prototyping, Codierung (Programmierung), Dokumentation, Test, Fehlerbehebung und zunehmend auch Operations – die Bereitstellung in der Live-Umgebung und Sicherstellung, dass die Software wie erwartet läuft (DevOps), Wartung und die Veröffentlichung neuer Iterationen.

Phases of the software development life cycle infographic-1

Softwareentwicklungsmethoden und Frameworks

Obwohl jeder Softwareentwicklungsprozess einen ähnlichen Prozess oder Lebenszyklus durchläuft, gibt es wichtige Unterschiede in der Methodik (manchmal auch als Software Development Life Cycle Models bezeichnet), die während des gesamten Prozesses verwendet wird.

Softwareentwicklungsmethoden können je nach Qualität und Priorität eines Projekts verändert werden und weisen je nach Anwendung unterschiedliche Stärken und Schwächen auf. Agile Softwareentwicklung, ein flexibler, iterativer Ansatz für den Softwareentwicklungslebenszyklus, ist die vorherrschende Methodik im Jahr 2021 – jedoch bei weitem nicht der einzige Ansatz, den Softwareentwicklungsteams und Manager verfolgen.

Die wichtigsten Methoden des Softwareentwicklungsprozesses sind:

  • Wasserfall
  • Agile
  • Lean
  • Scrum
  • Kanban
  • DevOps
  • GitOps

Weitere Informationen zu den wichtigsten Methoden und Frameworks finden Sie in unserem Blog – Beliebte Vorgehensmodelle Softwareentwicklung und Frameworks

Was is Programmieren?

Wie bereits erwähnt, bezieht sich Softwareentwicklung nicht nur auf die Programmier- oder Codierungsphase, sondern den gesamten Lebenszyklus, der darin gipfelt, dass eine Live-Software ihre Arbeit für die Benutzer verrichtet. Hierbei bildet das Schreiben des strukturierten Computercodes, aus dem die Software besteht, das Herzstück der Softwareentwicklung.

Codeacademy erklärt Programmierung mit einer nützlichen Metapher:

„Einfach ausgedrückt bedeutet Programmierung, einem Computer eine Reihe von Anweisungen zur Ausführung zu geben. Wenn Sie schon einmal nach einem Rezept gekocht haben, können Sie sich als Computer und den Autor des Rezepts als Programmierer vorstellen. Der Rezeptautor stellt Ihnen eine Anleitung zur Verfügung, die Sie lesen und anschließend befolgen. Je komplexer die Anleitung, desto komplexer das Ergebnis!“

Programmiersprachen

Programmierung oder Code ist in einer Programmiersprache geschrieben, die Computer, die binär denken, verstehen können. Menschen können diese Zeichenfolgen von Einsen und Nullen jedoch im Normalfall nicht verstehen. Programmiersprachen fungieren wie ein Übersetzer, der binäre Zeichenfolgen aus 1 und 0 in ein Format umwandelt, das Menschen verstehen und schreiben können.

Wenn ein Softwareentwickler eine Programmiersprache erlernt, kann er strukturierte Anweisungen schreiben, aus denen die Software besteht. Der Computer wandelt anschließend die Programmiersprache in die Binärzeichenfolgen um und führt sie gemäß den gegebenen Anweisungen aus.

Low- und High-Level-Programmiersprachen

Programmiersprachen werden entweder als Low-Level oder High-Level klassifiziert. Low-Level-Sprachen sind dabei näher am Binärcode. Dies macht sie für Menschen schwieriger zu lesen und zu schreiben, aber für Computer einfacher. Ein Software-Ingenieur, der in einer Low-Level-Sprache codiert, kann einem Computer präzisere Anweisungen geben, die schneller verstanden und ausgeführt werden, als wenn sie in einer High-Level-Sprache geschrieben werden, da diese stärker von der Binärsprache abstrahiert wird.

High-Level-Sprachen verwenden mehr Wörter, die wir auch in der menschlichen Kommunikation verwenden, wie Objekt, Klasse, Anfrage, Ausführung, etc., was es für Menschen einfacher macht, diese zu erlernen.

Da Computer immer leistungsfähiger geworden sind, hat sich der Zeitunterschied zum Konvertieren von Low- und High-Level-Sprachen in Binärcode auf Millisekunden reduziert. Das bedeutet, dass High-Level-Sprachen in den meisten modernen Softwareprodukten ohne nennenswerten Einfluss auf die Leistung verwendet werden können.

Programmierparadigmen

Programmierparadigmen klassifizieren Programmiersprachen anhand ihrer Eigenschaften. Die wichtigsten Paradigmen sind:

Objekt-orientierte Programmierung

Codierte Anweisungen werden anhand des Statusbereiches, an dem sie arbeiten, eingeordnet.

Funktionale Programmierung

Das beabsichtigte Ergebnis wird als Wert einer Reihe von Funktionsanwendungen deklariert.

Deklarative Programmierung

Der Codierer deklariert die erforderlichen Eigenschaften des gewünschten Ergebnisses, aber nicht, wie es berechnet wird.

Imperative Programmierung

Der Codierer teilt der Maschine mit, wie sie ihren Status ändern soll.

Verfahrensprogrammierung

Codierte Anweisungen werden nach dem Verfahren gruppiert, zu dem sie gehören.

Logische Programmierung

In einer Weise verfasst, die der formalen Logik sehr ähnlich ist und Fakten und Regeln ausdrückt. Regeln werden als Klauseln geschrieben und deklarativ als logische Implikationen gelesen, z.B.

H if B1 and … and Bn.

Mathematische Programmierung

Das gewünschte Ergebnis ist das optimale Element aus einer Reihe von vorgegebenen Kriterien.

Wenn das Optimierungsproblem beispielsweise die Zahl 500 unter Verwendung der Zahlen 5, 100, 10, 9, 8, 2 und 2 wäre, würde das gewünschte Ergebnis 5×100 und nicht 9×2-8/2*100 sein.

Reaktive Programmierung

Das gewünschte Ergebnis wird mit Datenströmen und Änderungspropagierungen deklariert.

Die am häufigsten verwendeten Programmiersprachen lassen sich normalerweise nicht sauber in ein einziges Paradigma einteilen, sondern kombinieren gleich mehrere.

Beliebte Programmiersprachen

Laut einer Analyse der Google-Suche nach Tutorials sind im Juli 2021 die drei beliebtesten Programmiersprachen Python, Java und JavaScript, gefolgt von C#, C/C++ und PHP.

PYPL PopularitY of Programming Language Index

Quelle: Github

Frameworks und Bibliotheken

Frameworks und Bibliotheken sind wiederverwendbare Codestücke, die von jemand anderem in einer bestimmten Programmiersprache wie JavaScript geschrieben wurden. Sie wurden entwickelt, um den Softwareentwicklungsprozess effizienter zu gestalten und ermöglichen, Software aus wiederverwendbaren Komponenten zu erstellen, sodass diese nicht jedes Mal von Grund auf neu erstellt werden müssen.

Die Begriffe Framework und Bibliothek werden manchmal synonym verwendet. Ein Unterscheidungsmerkmal besteht jedoch darin, dass Bibliotheken eine größere Flexibilität bieten. Eine gute Analogie für eine Bibliothek sind IKEA-Küchen, da diese in fast jeder Form und Größe mit einer riesigen Auswahl an unterschiedlichen Elementen und Kombinationsmöglichkeiten angeboten werden.

Ein Framework gleicht dagegen eher dem Bau eines modularen Hauses. Hier haben Verbraucher eine begrenzte Auswahl beim architektonischen Layout und Design. Küche und Badezimmer sollten beispielsweise in der Nähe der Hauptwasserleitungen positioniert werden und die Küche sollte im Erdgeschoss liegen. Hier gibt es nur wenig Möglichkeiten, die Räume aufzuteilen.

Technisch gesehen ist der Unterschied zwischen einer Bibliothek und einem Framework etwas, das im Englischen auch als Inversion of Control (IoC) bezeichnet wird. Wenn ein Softwareentwickler eine Bibliothek verwendet, steuert er den Ablauf der Anwendung wann immer die Bibliothek aufgerufen wird.

Wenn ein Framework verwendet wird, ist dieses für den Ablauf verantwortlich und teilt dem Entwickler mit, wo er seinen Code einfügen kann, um ihn anzupassen. Und es ruft den eingefügten Code nach Bedarf auf.

Populäre Bibliotheken und Frameworks

Es gibt eine Vielzahl von Frameworks und Bibliotheken – insbesondere für die gängigsten Programmiersprachen. Eine viel kleinere Anzahl wird jedoch regelmäßig auf kommerzieller Ebene verwendet. 2021 sind einige der beliebtesten Frameworks und Bibliotheken wie folgt:

Beliebte JavaScript-Bibliotheken

React.js und React Native (für mobile Anwendungen) sind die bei weitem am häufigsten verwendeten JavaScript-Bibliotheken. Andere Bibliotheken, die regelmäßig in der kommerziellen Softwareentwicklung verwendet werden, sind Axios, Lodash, Moment, date-fns, RxJS, jQuery, Underscore.js und Day.js.

Beliebte JavaScript-Frameworks

Angular ist das am häufigsten verwendete Frontend-JavaScript-Framework, gefolgt von Vue.js. Andere sind Svelte, Preact und Ember.

Es gibt auch Backend-JavaScript-Frameworks, wobei Express mit Abstand am häufigsten verwendet wird, gefolgt von Next.js und Gatsby.

Node.js ist eine beliebte Backend-Laufzeitumgebung, die manchmal auch als Framework bezeichnet wird, obwohl dies technisch nicht der Fall ist.

Beliebte Python-Frameworks und -Bibliotheken

Die am häufigsten verwendeten Python-Frameworks sind Django, Flask und Bottle, während die am häufigsten verwendeten Bibliotheken TensorFlow, SciKit Learn, Numpty, Keras und Pytorch sind.

Beliebte Java-Frameworks und -Bibliotheken

Die am häufigsten verwendeten Java-Frameworks sind Spring, Scala, GWT (Google Web ToolKit), JSF und Struts.

Die am häufigsten verwendeten Java-Bibliotheken sind Lombok, Guava, Hibernate, Feign und Spring Boot.

Softwareentwicklungs-Tools

Neben Frameworks und Bibliotheken nutzen Softwareentwickler eine große Sammlung von Softwareentwicklungs-Tools, die ihre Arbeit erleichtern. Tools werden während des gesamten Softwareentwicklungsprozesses verwendet, um die Software unter anderem zu entwickeln, zu debuggen oder zu warten.

Beliebte Beispiele für Softwareentwicklungstools sind Integrated Development Environments (IDEs), die eigentlich eine Sammlung von Tools sind, Git für die Versionskontrolle, Selenium und Cucumber für integriertes Testen, Stack Overflow als eine Online-Community von Entwicklern, in der Wissen und Ressourcen geteilt werden sowie der kontinuierliche Integrationsserver Jenkins und viele mehr.

Auch die Containerisierungsplattform Docker und die Container-Orchestrierungsplattform Kubernetes, die in der Cloud-nativen Entwicklung verwendet werden, können als Softwareentwicklungs-Tools bezeichnet werden.

Software Development Kit (SDK)

Ein Softwareentwicklungskit ist ein Toolkit, das in einem einzigen installierbaren Paket geliefert wird und normalerweise einen Compiler, Debugger, oft ein Framework und andere Tools enthält. SDKs werden normalerweise erstellt, um die Softwareentwicklung für eine bestimmte Kombination von Hardwareplattform und Betriebssystem zu unterstützen.

Das iOS SDK wurde beispielsweise entwickelt, um Entwicklern bei der Erstellung von iPhone- und iPad-Anwendungen zu helfen. AWS liefert SDKs, die sprachspezifische APIs für AWS-Services bereitstellen.

Teamrollen bei der Softwareentwicklung

Eine kleinere App kann vollständig von einem einzigen Full-Stack-Entwickler mit Backend- und Frontend-Erfahrungen erstellt werden. Die meisten kommerziellen Softwareprodukte werden jedoch von einem Softwareentwicklungsteam erstellt, das aus mehreren verschiedenen Rollen besteht.

Einige Rollen, wie Scrum-Master, sind speziell für eine bestimmte Softwareentwicklungsmethodik (Agile), während andere allgemeiner sind. Nicht jedes Entwicklungsteam besteht aus denselben Rollen und die Anzahl der Spezialisten, die die Rollen ausfüllen, hängt von der Art und dem Umfang des Projekts ab.

Einige der häufigsten Rollen in einem modernen Softwareentwicklungsteam sind:

Projektmanager

Der Projektmanager beaufsichtigt ein Softwareentwicklungsprojekt aus der Vogelperspektive mit strategischem Fokus auf Budget-, Risiko-, Termin- und Ressourcenmanagement. Projektmanager haben oftmals selbst keinen Software-Engineering-Hintergrund.

Produktinhaber

Produktinhaber haben ebenfalls keine technische, sondern eine analytische Rolle und konzentrieren sich auf die Funktionalität und Merkmale des Produkts. Ihre Hauptverantwortung besteht darin, dass ein Softwareprodukt den Anforderungen gerecht wird und den geschäftlichen Wert optimiert. In einem agilen Entwicklungsmodell priorisiert der Produktinhaber auch die Reihenfolge, in der neue Features und Funktionalitäten nach der Veröffentlichung des MVPs entwickelt und freigegeben werden.

Technischer Leiter

Der technische Leiter eines Softwareentwicklungsprojekts ist dafür verantwortlich, die besten technischen Lösungen zu finden, um die Geschäftsanforderungen zu erfüllen. Diese Rolle wurde früher oft als Softwarearchitekt bezeichnet.

In Absprache mit anderen Entscheidungsträgern trifft der technische Leiter Entscheidungen über Punkte wie Programmiersprachen oder Frameworks, in denen die Software geschrieben werden soll, Infrastruktur, Entwicklungsmethodik, etc.

Full-Stack-Entwickler

Full-Stack-Entwickler sind generalistische Software-Ingenieure, die über ein breites Spektrum an Frontend- und Backend-Fähigkeiten und -Technologien verfügen. Ein Full-Stack-Entwickler kann theoretisch eine ganze Softwarelösung alleine erstellen. Full-Stack-Entwickler sind in der Regel jedoch keine Spezialisten und werden daher oftmals dann als die wichtigsten Team-Mitglieder angesehen, wenn das Team an weniger komplexer Software arbeitet.

Frontend-Entwickler

Frontend-Entwickler arbeiten ausschließlich am Frontend einer Software, die von einem Entwicklungsteam erstellt wird. Sie verwenden Frontend-Sprachen, Bibliotheken und Frameworks, um die visuelle Schnittstelle zu erstellen, die Benutzer sehen und mit denen sie interagieren können.

Backend-Entwickler

Backend-Entwickler arbeiten ausschließlich am Backend einer Software, die von einem Softwareentwicklungsteam erstellt wird. Das Backend-Team ist für CRM, Datenbanken und die serverseitige Webanwendungslogik und -integration einer Software verantwortlich.

QS-Leiter

Der Leiter der Qualitätssicherung (QS) ist für die Gesamtqualität der eingesetzten Software verantwortlich. Sie leiten das QS-Team und sorgen dafür, dass Verantwortliche für verschiedene Bereiche des Softwareentwicklungsprozesses die Erkenntnisse des QS-Teams umsetzen.

QS-Ingenieur

Das QS-Team besteht aus QS-Ingenieuren, die während des gesamten Entwicklungsprozesses Softwaretests durchführen, potenzielle Probleme identifizieren und diese an die zuständigen Teams weiterleiten. Die meisten Tests und die Qualitätssicherung werden heutzutage insbesondere für komplexere Softwareprodukte als Teil eines DevOps-Ansatzes automatisiert und bestehen aus Regressionsfehlertests, um zu beantworten, ob neue Funktionen zu Fehlern oder Bugs in bereits bestehenden Teilen der Software geführt haben.

Softwaretester

Tester sind normalerweise dafür verantwortlich, dass die Software wie vorgesehen funktioniert. Der Standardgebrauch kann normalerweise mit automatisierten Tools getestet werden, jedoch verfolgen manuelle Tester einen analogen Ansatz, um sicherzustellen, dass Bugs und Fehler nicht in alternativen Benutzermustern und Ausnahmen auftauchen. Kann das System beispielsweise in der Buchungssoftware für Flugtickets die Ausnahme verarbeiten, dass ein Kunde ausgehende und eingehende Flüge am gleichen Tag bucht?

UI-Designer

Ein UI-Designer (Benutzerschnittstellen-Designer) ist für das benutzerorientierte Erscheinungsbild der Software verantwortlich. Der UI-Designer entwirft alle Bildschirm-Darstellungen, die ein Benutzer während der Interaktion mit der Software sehen kann, einschließlich aller visuellen Elemente und ihrer interaktiven Fähigkeiten, um die Benutzer von einer Darstellung zur nächsten zu führen.

UX-Designer

Ein UX-Designer (User-Experience-Designer) ist dafür verantwortlich, dass die Software für die Benutzer so intuitiv wie möglich gestaltet wird. Niemand möchte eine Küche, die schön aussieht, aber in der die Elemente ungünstig platziert sind. Die Spüle sollte beispielsweise neben der Arbeitsfläche stehen und nicht zu weit von den Kochfeldern entfernt sein.

Ein UX-Designer sorgt dafür, dass Software nicht nur gut aussieht, sondern auch leicht zu bedienen ist.

Wann gelingt IT Outsourcing?

(und wann nicht?)