Softwareentwicklung erklärt

Programmieren lernen: Wie Softwareentwicklung nicht geht

Wenn man sich vor Augen hält, wie Developer ihre eigenen Fehler sehen, ist das der Beweis dafür, dass Softwareentwicklung Kunst ist. Denn ganz ähnlich wie die Meinungen zu Malern, Architekten, Schriftstellern und Dichtern divergieren, verhält es sich auch in der Welt der Softwareentwicklung: Developer sind sich regelmäßig lediglich darin einig, dass funktionierender Code die wesentliche Anforderung an ihre Arbeit darstellt. Und selbst diesbezüglich gibt es Abweichler, die mit existenziellen Programmierfehlern gut leben können - solange die Software Bugs den Usern verborgen bleiben.

Die Debatte um die korrekte Art und Weise der Softwareentwicklung fußt im Wesentlichen auf Erfahrungswerten. Wenn ein Entwickler eine bestimmte Verfahrensweise X verdammt, dann meistens deswegen, weil Jemand im Office X angewandt hat und das dann einen Abend, ein Wochenende oder gar einen Urlaub ruiniert hat. Dabei sah X zunächst nach einer guten Idee aus, dann offenbarten sich nur leider ein oder mehrere Denkfehler.

Betroffene möchten die Welt nun vor X warnen. Neue Probleme entstehen dann allerdings, wenn der gegenteiligen Verfahrensweise - Y - ihre ganz eigenen Fallstricke inhärent sind. Softwareentwickler, die auf Y ausweichen um X zu meiden und schließlich in einem ähnlichen Tal der Tränen wie die Kollegen landen, halten dann in der Regel auch nicht mehr viel von Y.

Gibt es Hoffnung, X und Y zusammenzubringen? Innerhalb eines Developer Teams ist das höchst unwahrscheinlich - was allerdings nicht heißt, dass Sie nicht aus den Fehlern von Gruppe X und Y lernen können. Wir zeigen Ihnen anhand des dreckigen Dutzends der Softwareentwicklung, wie Programmieren nicht geht - und starten damit zeitgleich die Beweisführung dafür, dass Coding tatsächlich eine Kunst darstellt. Eine Kunst, die ein reichhaltiges Skillset erfordert, um den goldenen Mittelweg zwischen problembehafteten Extremen zu finden.

1. Zu ASAP für die Coding Basics

Die Grundlagen der Softwareentwicklung außer Acht zu lassen, ist der schnellste und einfachste Weg, seine eigene Programmierarbeit zu sabotieren. Besonders oft wird dabei übersehen, wie sich willkürliches Nutzungsverhalten auf die Software auswirken kann: Fließt die Eingabe einer 0 in eine Teilungsoperation ein? Hat der eingegebene Text die richtige Länge? Wurde das Datumsformat eingehend geprüft? Wird der Username mit einer Datenbank abgeglichen? Jeder kleine Fehler in diesen Bereichen führt dazu, dass die Software zum Fail wird.

Es gibt einige Developer, die diese Fallstricke einfach mit einer "Error Catching"-Funktion kaschieren: Der Fehler wird in einem Log File gespeichert und gibt einen Fehlercode aus - um die Behebung darf sich dann ein anderer kümmern.

2. Der Teufel im Entwicklungsdetail

Auf der anderen Seite kann Software, die mit zu vielen Details überladen wird, zum Klotz am Bein werden. Die Überprüfung einiger Nullstellen wird nicht viel Unterschied machen - problematisch wird es allerdings, wenn die Applikation zu in Code gegossener Paranoia transformiert und alle möglichen "Türen" immer und wieder überprüft.

Wenn solche zwanghaften Kontrollarien dann auch noch die Netzwerk-Kommunikation mit einer Webseite nötig machen, kann die Software komplett zum Erliegen kommen. Ein Beispiel, das wohl jeder User kennt: Manche Applikationen verlangsamen sich um ein Vielfaches, wenn keine WLAN-Verbindung vorhanden ist, weil sie permanent nach einem Hotspot suchen, der einfach nicht vorhanden ist.

Die Herausforderung für Softwareentwickler besteht darin, die Code Layer so zu gestalten, dass Input-Daten bei der ersten Eingabe überprüft werden. Das ist allerdings wesentlicher leichter geschrieben als getan. Wenn viele Developer an einer Bibliothek arbeiten oder gar nur ein Einzelner für das Programmieren zuständig ist, wird es ziemlich schwierig sich zu erinnern, ob und wann der Pointer geprüft wurde.

Produkt- & Projektmanager

Ganz generell schätzen es Entwickler nicht so besonders, wenn ihnen jemand erklären will, wie sie ihren Job zu machen haben. Weil Produkt- und Projektmanager aber oft Entwickler-Teams leiten, passiert genau das. Das kann zu Unstimmigkeiten führen.

Dazu hat auch David Fox von devRant eine Meinung: "Letztendlich ist es in den meisten Fällen so, dass Produkt- und Projektmanager in irgendeiner Art und Weise die 'Besitzer' von Projekten und Prozessen sind, ohne dabei die täglichen Herausforderungen und Probleme der Softwareentwickler zu kennen." Chefs

Genau wie die Produkt- und Projektmanager sind auch Development oder Engineering Manager dafür zuständig, Teams von Entwicklern zu führen und sicherzustellen, dass Projekte rechtzeitig und unter Budget fertiggestellt werden.

"In einigen Unternehmen können Situationen entstehen, in denen der Chef gleichzeitig Mitglied des Entwicklerteams ist. Insbesondere wenn der Chef vorher selbst Entwickler war und nach einer Beförderung zum Chef wird, ist Konfliktpotenzial gegeben", merkt Fox an. Recruiter

Softwareentwickler müssen gar nicht selbst aktiv nach einem Job suchen, um von Recruitern und Headhuntern belästigt zu werden - dem Fachkräftemangel sei Dank. Es dürfte sehr schwer sein, einen Developer zu finden, der noch nicht in die Fänge der Recruiter geraten ist.

David Fox sieht insbesondere die Hartnäckigkeit der Recruiter als Problem: "Sie rufen an, sie e-mailen und sie lassen Dich einfach nicht in Ruhe - selbst dann, wenn Du gar keinen Job suchst. Und selbst wenn man eine Anstellung sucht, neigen viele Recruiter dazu, irrelevante Jobangebote zu machen oder Stellen zu empfehlen, deren Profil überhaupt nicht passt - etwa einen Job am anderen Ende des Landes, obwohl man gar nicht bereit ist, umzuziehen." Dokumentation

Gibt es keine Dokumentation, beschweren sich die Softwareentwickler. Wenn es zuviel ist, beschweren sie sich und wenn sie die Dokumentation selbst erledigen müssen, auch. Sogar über die Art und Weise, wie andere Leute die Dokumentationsaufgabe bewältigen, beschweren sich die Entwickler.

An dieser Stelle seien sich auch endlich einmal alle Entwickler einig, wie Fox betont: "Softwareentwickler wollen eine ausführliche, gut geschriebene und akkurate Dokumentation - aber selber machen wollen sie es nicht." Meetings

Meetings sind nicht nur für alle anderen ein Problem, sondern auch für Softwareentwickler. Insbesondere dann, wenn es sich um völlig unnötige, zeitraubende und stinklangweilige Zusammenkünfte handelt. Wie Fox erzählt, sind inzwischen auch Devotionalien mit der Aufschrift 'I survived another meeting that should have been an email' erhältlich. Coworking Spaces

Mit dem Aufstieg der Agilität sind flache Hierarchien, Collaboration und Teamwork zum Alltag in Unternehmen geworden - insbesondere für Software-Development-Teams. Gerade die können ihre Arbeit in einem Großraumbüro aber meist nur schwer oder gar nicht bewältigen - sagen zumindest die Zahlen von devRant.

David Fox erklärt: "Es gibt einfach zuviel Ablenkung: die Kollegen unterhalten sich, Meetings werden verpasst, Telefonanrufe überhört. Es gibt auch eine Vielzahl an Beschwerden über den Kaffee im Büro und andere Annehmlichkeiten - oder eben das Gegenteil davon." Kollegen

Selbsterklärend: Jeder hat wohl einen Kollegen oder eine Kollegin, den beziehungsweise die er ganz besonders schätzt. Nicht.

Im Fall der Softwareentwickler ist die Abneigung gegenüber Kollegen meist entweder in der mangelnden Qualität ihrer Arbeit oder einem völlig aus dem Leim gegangenen Ego begründet, gibt David Fox preis. Vorstellungsgespräche

Wenn ein Softwareentwickler auf Jobsuche ist und zum Bewerbungsgespräch geladen wird, gibt es danach meist auch etwas zu meckern:

"Dumme Fragen oder die Lösung von völlig praxisfernen Aufgaben im Bewerbungsgespräch stoßen den Developern ebenso sauer auf, wie ein Gesprächspartner, der überhaupt nicht weiß, was ein Entwickler eigentlich genau macht", so Fox. Fehler & Bugs

Softwareentwickler haben tagein, tagaus mit Fehlern und Bugs zu tun. Deswegen glaubt devRant-Gründer Fox, dass Entwickler in dieser Sache anders ticken:

"Die meisten anderen Probleme erfahren keine positive Auflösung, aber Bugs und Fehler sind behebbar und das fühlt sich gut an." Quality Assurance

Die Quality Assurance (QA) - oder Qualitätssicherung - ist ein kritischer Teil der Softwareentwicklung. Dennoch bemängeln Softwareentwickler an QA-Experten häufig dieselben Dinge wie an Produkt- und Projektmanagern, so Fox.

"Die Qualitätssicherung bekommt das Produkt oder Projekt in die Hände, wenn die Entwickler es abgeschlossen haben. Deswegen verstehen sie oft nicht, welche Hürden und Workarounds die Entwickler im Entstehungsprozess bewältigen mussten. Offensichtlich kommt es auch regelmäßig vor, dass QA-Leute die Entwickler bitten, Bereiche nochmals zu überarbeiten, die sie auch selbst bewältigen könnten."

3. Softwareentwicklung außer Kontrolle

Allzu oft sorgen Softwareentwickler durch ihr eigenes Handeln dafür, dass das Programmieren im Desaster endet - nämlich indem sie keine Kontrolle über ihren Code haben.

Mike Subelsky ist Mitbegründer von  und ein Verfechter von "Code-Ordnung". Soll heißen: Es sollte nur eine Stelle innerhalb des Programmcodes geben, wo jeder einzelne Task abgelegt wird. Gibt es mehrere, stehen die Chancen gut, dass irgendjemand an einer Stelle eine Veränderung durchführt ohne dabei an die andere(n) zu denken: "Nachdem ich über drei Jahre mit einer Code-Basis gearbeitet habe", plaudert Subelsky aus dem Nähkästchen, "bereue ich am meisten, dass ich den Code nicht modular aufgebaut habe. Deswegen musste ich auf die harte Tour lernen, wie wichtig die Einhaltung des Single-Responsibility-Prinzips ist."

Wie Sie sich vielleicht schon erschlossen haben, ist Subelsky ein Ruby-on-Rails-Programmierer. Dieses Framework begünstigt die Erstellung eines möglichst schlanken Programmcodes, weil davon ausgegangen wird, dass sich das Gros der Software-Struktur in bekannte Muster einordnen lässt. Diese Philosophie fassen Ruby on Rails Developer häufig zusammen als "Convention over Configuration".

Ein Beispiel, um das Prinzip zu verdeutlichen: Die Software nimmt an, dass ein erstelltes Objekt vom Typ X mit zwei Feldern "A" und "B" in einer Datenbank automatisch als Tabelle X mit zwei Spalten "A" und "B" angelegt wird. Die Benennung wird an einem Ort festgehalten, so dass keine Probleme auftreten, wenn ein Einzelner daran scheitert alle Konfigurations-Layer synchron zu halten.

4. "Das Entwicklungs-Framework regelt das" 

Manchmal führen Tools, deren per Marketing kolportierte Fähigkeiten bereits an Magie grenzen, aber auch zu allgemeiner Verwirrung. Durch die Abstraktion von Funktionalitäten und die Annahme, bereits vorher zu wissen, was Entwickler wollen, können Frameworks dazu führen, dass Developer ratlos im Regen stehen, wenn es darum geht, zu ermitteln, wo genau der Fehler in ihrem Programmcode liegt.

G. Blake Meike ist freier Softwareentwickler und nur einer von Vielen, die eine Abhängigkeit von Automatisierungs-Tools wie Ruby on Rails eher als Hindernis empfinden, wenn es darum geht, sauber zu programmieren: "Konvention ist etwas, das schon per definitionem nichts mit Code zu tun hat. Wenn Sie beispielsweise bei Ruby on Rails die Regeln nicht genau kennen, bleibt Ihnen die genaue Funktionsweise des Frameworks weitgehend verschlossen. Daraus können immer neue Probleme entstehen."

Der Einsatz von Entwicklungs-Frameworks sorgt zwar für "schönen" Code - der ist allerdings oft schwer zu verstehen, zu bearbeiten oder zu erweitern. Oder - wie es Softwareentwickler Mike Morton ausdrückt: "Frameworks hieven Sie bis zu 90 Prozent in einem bequemen Sessel in Richtung Gipfel. Das war es dann aber auch. Um die letzten zehn Prozent des Aufstiegs bezwingen zu können, müssen sie vorausgedacht und sowohl Sauerstoff als auch Steighaken mitgebracht haben."

5. Vertraue keiner Maschine!

Wenn Softwareentwickler einfach davon ausgehen, dass ihre Endgeräte schon das Richtige "tun" werden, kann das zu schwerwiegenden Security-Schwachstellen führen. Programmcode, der beispielsweise für einen Browser konzipiert wurde, kann von diesem so umgeschrieben werden, dass jegliche Art von Willkürlichkeiten möglich werden. Wenn der Softwareentwickler nicht alle eingehenden Daten einem Check unterzieht, kann einiges schiefgehen.

Deswegen basieren einige der gängigsten Angriffsmuster krimineller Hacker auf der Annahme, dass nicht wenige Developer Daten ungeprüft in die Datenbanken übernehmen. Das geht solange gut, bis ein Angreifer mit einem simplen Befehl die komplette Datenbank löscht. Und das ist bei weitem nicht der einzige Weg, Server zu überlisten: Online-Umfragen stellen quasi eine Einladung zur Bias-Erzeugung dar und Buffer-Overflow-Attacken sind immer noch der einfachste Weg, um Software nachhaltig zu beschädigen.

Wenn drei oder vier - vermeintlich vernachlässigbare - Sicherheitslücken "in Reihe geschaltet" werden, können erhebliche Security-Risiken entstehen. Ein Softwareentwickler könnte beispielsweise ein File erstellen in der Annahme, dass die Verzeichnisberechtigungen ausreichen, um Fehler zu verhindern. Ein anderer Developer öffnet inzwischen die Berechtigungen, um einen Bug zu entfernen. Für sich allein stellen beide Vorgänge nicht unbedingt ein Risiko dar - kommen sie zusammen, kann es zu unvorhergesehenen Eigenwilligkeiten des Clients kommen.

6. Kein Vertrauen ist auch keine Option

Paradoxerweise kann auch zu viel Security zu Sicherheitslücken führen. Nämlich dann, wenn das Übermaß an Sicherheitsmaßnahmen zum Sand im Getriebe wird und Softwareentwickler so dazu verführt, die Security-Zügel locker zu lassen - nur damit die Prozesse wie gewohnt weiterlaufen können.

Auch Web Forms sind so ein Ding: Nicht nur dass Security-Maßnahmen, die dem Bankensektor Konkurrenz machen, ellenlange Fragebögen und der Zwang, Kontaktdaten abzugeben enorm abschreckend auf User wirken. Die hierbei gesammelten persönlichen Daten vorzuhalten und abzusichern kann weit mehr Probleme aufwerfen, als die ganze Sache wert ist. Deswegen streben viele Web-Entwickler danach, das Security-Niveau so weit wie möglich abzusenken. Einerseits, um den Usern den Zugang zum Produkt zu erleichtern. Andererseits, um nicht mehr persönliche Daten als nötig speichern und schützen zu müssen.

7. Der Softwareentwickler und die Zauberbox

"Verschlüsselung? Backup? Mehr Security? Drücken Sie einfach den Button - es funktioniert dann ganz von allein", sagte der Verkäufer, als er eine Wunderlösung anpries, deren Algorithmen im Stande sein sollen, alle Unzulänglichkeiten im Programmcode zu eliminieren. Das Problem bei solchen "magic boxes": damit können auch komplexe Problemstellungen unter den Tisch fallen - beziehungsweise unabsichtlich übersehen werden - oder schlimmer noch: neue Schwachstellen Einzug halten.

Insbesondere der Aspekt der Datenverschlüsselung kann hierbei problematisch werden: Zu viele Softwareentwickler sind der Überzeugung, sie müssten einfach nur auf die "encryption library" verlinken, einen Knopf drücken und schon steht das IT-Sicherheits-Bollwerk. Bei genauerem Hinsehen weisen allerdings viele der magischen Algorithmen subtile Schwächen auf, deren Identifikation mehr Hingabe als nur das Lesen des Quick Start Guide erfordert.

8. Developer, die das Rad neu erfinden

Andererseits kann es aber auch eine sehr ungünstige Idee sein, eigene "encryption libraries" aufzusetzen, wenn das unter der Annahme geschieht: "Ich weiß schließlich am besten, wie man optimal programmiert". Für kriminelle Hacker kommen solche Vorgänge einem grell erleuchteten Willkommensschild gleich. Schließlich machen auch gewiefte Verschlüsselungs-Experten Fehler, wenn es darum geht, Eindringlinge von ihren Systemen fernzuhalten.

Wem vertrauen Sie also? Sich selbst oder den sogenannten Experten, die ebenfalls Fehler machen? Die Antwort findet sich im Reich des Risikomanagements: Viele Bibliotheken müssen gar nicht perfekt sein - im Regelfall ist der Einsatz einer "magic box" (siehe vorhergehender Absatz) selbst erstelltem Code vorzuziehen, denn diese Bibliotheken sind im Regelfall von mehreren Experten erstellt - und optimiert - worden.

9. Der Closed-Source-Fehler

Eine der wesentlichen Herausforderungen für Unternehmen ist es, zu ermitteln, wie viele Informationen es mit den Usern, die seine Software nutzen, teilen will.

John Gilmore, Mitbegründer von Cygnus Solutions (eines der ersten Open-Source-Softwareunternehmen) hat dazu eine klare Meinung: "Programmcode nicht zu veröffentlichen steht im Gegensatz zu dessen Integrität, verhindert Innovation und insbesondere die Identifikation von Bugs. Einer der wesentlichen Vorteile von offenem Code ist, dass Menschen, von denen Sie noch nie vorher gehört haben, an dessen Optimierung mitwirken. Selbst wenn das eher amateurhaft abläuft, können ein paar Minuten Reflexion von Seiten eines Developers dafür sorgen, dass entscheidende Verbesserungen in die Software einfließen."

Des Öfteren tut es dem Programmcode auch gut, wenn unbefangene Dritte sich damit beschäftigen, ihn erweitern oder auf andere Plattformen portieren. Schon wenn Sie quelloffenen Code zur Verfügung stellen, muss dieser zugänglich, verständlich und damit besser aufgebaut sein.

10. Quelloffenheit als Allheilmittel

Quelloffener Code ermöglicht Dritten, Verbesserungen einzubringen. Das wird allerdings nicht geschehen, nur weil Ihre Software Open Source ist. Vielmehr braucht es einen Anreiz, damit Andere sich diese Arbeit machen. Quelloffenheit allein jedenfalls verhindert weder Sicherheitslücken noch Abstürze - und macht einen Haufen unfertigen Programmcodes auch nicht zwingend nützlich.

Quelloffenheit kann auch für neue Erfordernisse in Sachen Kommunikation und Dokumentation führen. Die Dokumentation für die User ist das eine - im Fall von Open Source Software wird allerdings auch eine Dokumentation der APIs sowie eine Roadmap für die künftige Entwicklung nötig. Geht es dabei um größere Softwareprojekte, rechnet sich das im Regelfall. Bei kleineren nicht unbedingt.

Viele Unternehmen im Open-Source-Bereich behalten die Kontrolle über ein oder mehrere proprietäre Features ihrer Software, um die Finanzierung des Kern-Entwicklungsteams sicherzustellen. Bei Projekten, die sich in weiten Teilen auf freiwillige Helfer verlassen, sollte deren Unberechenbarkeit einkalkuliert werden.

11. Trendgetriebene Softwareentwicklung

Oft nehmen Trends ihren Ursprung in einer guten Idee, die ein nerviges Problem lösen soll. Die Software in einer neuen Programmiersprache, mit einem neuen Framework oder neuen Bibliotheken zu überarbeiten, kann Früchte tragen. Allerdings kann ein solcher Paradigmenwechsel auch nach hinten losgehen. Insbesondere, wenn es um substanzielle Änderungen am Programmcode geht.

Schließlich bieten viele der brandneuen Frameworks oft nur die wichtigsten Features - alles andere muss erst noch programmiert werden. Natürlich sparen sich die Softwareentwickler viel Zeit bei den fertigen Funktionalitäten - allerdings geht die oft wieder dafür drauf, die Lücken entsprechend zu füllen. Wer "cutting edge" sein will, muss also in jedem Fall leiden.

12. Programmieren wie früher

Nicht wenige Developer betrachten neue Coding-Trends und -Ideen mit Argwohn. In einigen Fällen nicht zu Unrecht - in anderen schon. Ist Letzteres der Fall, stehen diese Entwickler vor einem Haufen Code, der hoffnungslos veraltet ist.

Natürlich kann auch veralteter Programmcode problemlos laufen - auch mit Erfolg. Wenn aber der Zeitpunkt gekommen ist, an dem schwerwiegende Probleme auftauchen, sind diese nicht mehr so einfach zu beheben. Das können beispielsweise APIs sein, die nicht mehr existent sind und für die auch keine Weiterleitung besteht. Oder ein Partner, der keine XML-Dateien mehr akzeptiert, was dazu führt, dass YAML- oder GraphQL-Dateien per Crashkurs erzeugt werden müssen.

Fazit: Zahlen Sie jetzt - oder später. Dann aber wesentlich mehr.

Dieser Beitrag basiert auf einem Artikel unserer US-Schwesterpublikation Infoworld.

Softwareentwicklung

Softwareentwicklung Definition

Was ist Software?

Kategorisiert man die Bestandteile eines Computers anhand ihrer Beschaffenheit, so ergibt sich zu allererst eine Einteilung in Hardware und Software. Grundsätzlich sind Software und Hardware nicht autark, sondern arbeiten zusammen und hängen voneinander ab.

Die Hardware ist dabei die Gesamtheit der physischen Komponenten, welche die Software speichern und ausführen. Sie besitzen sogenannte Schnittstellen (Ein- und Ausgänge), Speicherungseinheiten (Chips, Festplatten), Prozessoren (zentrale Verarbeitungseinheit, CPU) und Steuerungselemente (Maus, Tastatur).

Die Software hingegen ist das Zusammenspiel aus Computerprogrammen und Verfahren, die bestimmte Aufgaben auf einem Computer ausführen. Im Grunde handelt es sich dabei um geordnete Sequenzen von Instruktionen, die eine Veränderung innerhalb eines Computersystems hervorrufen. Diese erlauben dem Nutzer, mit dem Computer zu interagieren. Damit dies möglich ist, verfügt die meiste Software über eine benutzerfreundliche Bedienoberfläche, das sogenannte User Interface. Die Gestaltung dieser Oberfläche nennt sich UI Design oder UX Design (User Experience).

Was ist Softwareentwicklung?

Die Softwareentwicklung ist eine Dienstleistung der Informationstechnik, kurz IT. Sie wird von einem Fachinformatiker, einem gelernten Softwareentwickler oder Programmierer durchgeführt. Für diesen Beruf gibt es verschiedene Werdegänge. Softwareentwickler haben meist ein Studium, z. B. im Bereich Software Engineering oder eine Ausbildung in diesem Bereich absolviert oder sind als Quereinsteiger über eine Umschulung oder Fortbildung zur Softwareentwicklung gekommen.

Individuelle Softwareentwicklung

Auch taucht der Begriff Softwareentwicklung in spezifischeren Zusammensetzungen wie Individuelle Softwareentwicklung oder Agile Softwareentwicklung auf. Dabei geht es vor allem um die Dienstleistung, die von einer Software Agentur angeboten wird, die Software für KMU und andere Unternehmen herstellt. Während der heutige Stand der Technologie es ermöglicht, viele Softwarelösungen innerhalb kürzester Zeit zu entwickeln, sind gerade Unternehmen daran interessiert, dass es sich bei der Anwendung um keinen Code von der Stange, sondern um Qualität und individuelle Softwareentwicklung und auf sie zugeschnittenen Softwarelösungen handelt. Die Begriffe agile und individuelle Softwareentwicklung beschreiben jedoch nicht nur das Endprodukt, sondern auch die Organisation des Entwickler- oder Scrum Teams und dass hier ein großer Wert auf das Management gelegt wird.

Softwareentwickler

Oft wird auch Softwareprogrammierer als Synonym für den Beruf des Softwareentwicklers verwendet. Softwareentwickler kümmern sich um noch viel mehr als nur die Softwareprogrammierung. Zu ihrer Arbeit zählen auch das Zusammentragen der Anforderungen im Rahmen einer Anforderungsanalyse, die Konzeption, die Planung sowie die Inbetriebnahme und Wartung im Anschluss. Dieses Vorgehen nennt sich modellbasierte Softwareentwicklung, die beispielsweise nach Scrum, dem Wasserfallmodell oder dem V-Modell durchgeführt werden kann. Auf diese soll später noch weiter eingegangen werden. Zunächst ist es sinnvoll, die verschiedenen Arten der Software zu unterscheiden.

Arten von Software

Systemsoftware

Grundlegend lassen sich drei Arten von Software unterscheiden. Die Systemsoftware legt auf einem Computer den Grundstein für alle anderen Arten von Software. Sie wird vom Hersteller bereits mitgeliefert und läuft im Hintergrund, weshalb in der Regel keine Interaktion mit Benutzer stattfindet. Beispiele für Systemsoftware sind Betriebssysteme wie MacOS, Windows oder Linux. Programmierungssoftware

Zur Programmierungssoftware zählen Computerprogramme, die Entwickler für die Programmierung, Pflege, Fehlerbehebung oder anderweitige Unterstützung von Programmen und Applikationen benutzen. Dies können zum Beispiel sogenannte IDEs sein, integrierte Entwicklungsumgebungen wie Microsoft Visual Studio oder XCode, welche als Tool-Paket ebenfalls häufig bereits mit dem Betriebssystem zusammen kommen. Anwendungssoftware Die Anwendungssoftware ist das, womit die meisten Nutzer in Berührung kommen. Darunter fallen Computerprogramme, die dem Endnutzer bei der Ausführung bestimmter Aufgaben, Aktivitäten und Funktionen helfen. Zum Teil wird diese in sogenannten Bundles vom Hersteller mitgeliefert oder kann separat heruntergeladen und installiert werden. Zur gängigsten Anwendungssoftware zählen zum Beispiel Programme zur Dokumenterstellung wie Word, zur Fotobearbeitung wie Photoshop oder zur Wiedergabe von Musik und Videos wie Media Player. In Abgrenzung zu Apps, ein Begriff, der häufig als Synonym zu Software verwendet wird, sind Applications reine Anwendungssoftware für den Endnutzer. Im allgemeinen Sprachgebrauch sind mit Apps, auch wenn sie im eigentlichen Wortsinn alle Arten von Anwendungssoftware umfassen, in den meisten Fällen mobile Apps gemeint, die auf mobilen Endgeräten laufen. Software meint hingegen landläufig Programme, die auf Desktop-PCs laufen.

Geschichte der Softwareentwicklung

Erste Software

Entgegen der Vorstellung, dass der Computer die Grundvoraussetzung für Software sein muss, wurde die erste Software der Welt bereits ein Jahrhundert vor der Erfindung des Computers entwickelt. Im Jahre 1848 übersetzte Ada Lovelace einen Artikel von Charles Babbage über die “Analytical Engine” ins Englische und fügte ihre eigenen Erläuterungen an, die dreimal so lang waren und die Grundlage für ein Computerprogramm bildeten, das neben Zahlen auch Musiknoten, Buchstaben und Bilder hätte verarbeiten können. Ada Lovelace und Charles Babbage waren somit die ersten Programmierer der Welt. 1970 wurde nach Ada Lovelace die Computersprache ADA benannt.

Erste programmgesteuerte Rechenmaschine: Der Computer

Die ersten in der Tat ausgeführten Computerprogramme liefen auf dem ersten Computer Z3 von Konrad Zuse. Er entwickelte zunächst den Z1, welcher rein mechanisch funktionierte, und kam dann über das Übergangsmodell Z2 zum Z3. Mithilfe von elektromechanischen Relais (von Elektromagneten betriebene Kontakte) liefen Programme auf Lochstreifen, die Abfolgen von Befehlen ausführen konnten. Zu seinen Funktionen gehörten der Umgang mit großen Zahlen, die Grundrechenarten Addition, Subtraktion, Multiplikation und Division, Quadratwurzelrechnungen sowie Programme zur Matrizenrechnung.

Das Software-Prinzip

Davon lassen sich die Grundsteine ableiten, auf denen auch heute noch jede Software basiert: Programme vollziehen Rechenleistungen, folgen einer Logik nach konditionalen Wenn-Dann-Bedingungen und lassen sich, egal, wie komplex sie sind, immer auf das Binärsystem nach dem Entweder-Oder-Prinzip herunterbrechen, welches Softwareentwickler beherrschen.

Phasen der Softwareentwicklung

Gemeinhin wird Softwareentwicklung als bedeutungsgleich für Programmierung angesehen. Auch wenn die Programmierung einen großen Teil der Entwicklung von Software ausmacht, enthält sie aber darüber hinaus noch andere Tätigkeiten, wie beispielsweise das Management. Das sogenannte Scrum Modell, welches vor allem in der agilen Softwareentwicklung zum Einsatz kommt, legt drei Rollen fest:

Product Owner: Sammelt und ordnet die Anforderungen nach Priorität

Scrum Master: Ist für das Management zuständig und vermittelt zwischen den einzelnen Parteien

Team: Die Softwareentwickler und andere Rollen in einer Agentur

Eine weitere Möglichkeit, die entweder alternativ oder zusätzlich in der Softwareentwicklung zum Einsatz kommen kann, ist das sogenannte V-Modell. Dabei sind die verschiedenen Teilschritte wie ein V angeordnet.

Systemanforderungsanalyse Im Rahmen einer Anforderungsanalyse werden die Anforderungen der Kunden erhoben und mit den Systemvoraussetzungen in Verbindung gebracht: Dabei ist von Interesse, was sich Kunden vom Programm wünschen und für welches System es entwickelt wird. Daraufhin wird festgelegt, welche Möglichkeiten, Bedingungen und etwaige Einschränkungen sich daraus ergeben. System-Architektur Bei der Architektur im Zusammenhang mit der Softwareentwicklung geht es um die Zusammensetzung der technischen Tools, die eingesetzt werden müssen, um das Projekt umzusetzen. Dies können die Technologien, die Programmiersprache sowie verschiedene Schemata für Klassen und Datenbanken sein. System-Entwurf Mithilfe eines System-Entwurfs wird erarbeitet, welche Eigenschaften die zu entwickelnde Software enthalten soll und wie diese aufeinander aufgebaut werden. Dabei werden die zuvor festgelegten Anforderungen in Soft- und Hardware-Systeme aufgeteilt. Die Funktionsweisen der verschiedenen Elemente sind hier noch nicht entscheidend, diese kommen erst bei der Systemspezifikation ins Spiel. Software-Architektur Ein nicht zu unterschätzender Teil der Softwareentwicklung sind der Software-Entwurf und das Softwaredesign. Dieses beschäftigt sich mit der optischen Gestaltung und der Frage, wie Oberfläche, also das User Interface, mit den entsprechenden Steuerungs- und Eingabeelementen aussehen soll. Dabei helfen sogenannte Wireframes, auch bekannt aus dem Bereich des Webdesign, in denen der Aufbau der Software grafisch dargestellt wird. Software-Entwurf Beim Software-Entwurf werden die abstrakten Software-Systeme erkannt, beschrieben und miteinander in Beziehung gesetzt. Anschließend folgt die eigentliche Programmierung.

Programmierung

Die Softwareprogrammierung macht meist den größten Anteil an der Entwicklung von Software aus und meint die Erstellung des Programmcodes mithilfe verschiedener Parameter. Programmiersprache

Einer davon ist die Programmiersprache, mit der der Code verfasst wird. Die Wahl der passenden Programmiersprache ist dabei abhängig vom System bzw. dem Gerät, dem Projekt und den Programmierkenntnissen sowie -kompetenzen der beteiligten Entwickler. Entwicklungsumgebung

Mithilfe einer Entwicklungsumgebung, kurz IDE von Integrated Development Environment, lässt sich der Code in einem erweiterten Texteditor schreiben und kompilieren (dabei wird der Quellcode einer Programmiersprache für den Computer übersetzt) und es lassen sich Fehler von Programmen finden und beheben. Library

In einer Library sind eine Reihe vordefinierter Codes gesammelt, welche als Referenz für den manuellen Code verwendet werden. Diese sind meist Teil eines Entwicklungsframeworks, welches wie eine Schablone immer wieder verwendete Codes zur Verfügung stellt, für die dann die entsprechenden Anpassungen vorgenommen werden können. Auf diese Weise wird die Programmierung vereinfacht und die Bearbeitungszeit signifikant verkürzt. APIs

Sogenannte APIs sind Programmierungsschnittstellen, die die Methoden zur Kommunikation zwischen einzelnen Softwarekomponenten oder Regeln zur Interaktion zwischen den Entwicklern und beispielsweise einer Library festlegen. So kann unter anderem der Zugang zum Front-End-Code hergestellt werden. Genau wie bei der Webentwicklung gibt es einige Programmiersprachen, Entwicklungsumgebungen, Librarys und Frameworks, die speziell für die Softwareentwicklung und teilweise sogar auf die Art der Software ausgelegt sind und die Programmierarbeit durch zugeschnittene Features zusätzlich erleichtern. SDKs Eine Alternative stellen SDKs dar: Software Development Kits sind Pakete, welche bereits die IDE, mehrere Librarys, APIs, einen Compiler und weitere Komponenten enthält. Beispiele dafür sind Android Studio, XCide oder Windows .NET SDK.

Unit-Tests

Beim Unit-Test oder auch Modultest genannt, werden die einzelnen Module, also die Komponenten der Software durch den Softwareentwickler getestet. Dies ist eine noch sehr frühe Testphase, die aber das Fundament für alle weiteren Schritte bildet.

Integrations-Tests

Im Rahmen eines Integrations-Tests werden die einzelnen Programme oder Programmeinheiten zusammengeführt und in ihrer Gesamtheit zusammenhängend getestet. Da die gefundenen Fehler genau dokumentiert werden, können die Fehlerquellen leicht gefunden und analysiert werden.

System-Integration

Ist die Programmierung abgeschlossen, wird die Software schließlich an die Kunden ausgeliefert und mithilfe einer Installation final ins System integriert.

Abnahme und Nutzung

Diese Phase der Softwareentwicklung ist meist die längste. Die Softwarelösung wird für den Kunden zum Gebrauch freigegeben. Fehler, die in früheren Testphasen nicht entdeckt wurden, können hier identifiziert werden. Im Anschluss erfolgt eine Wartung durch den Programmierer, die eine Fehlerbehebung und eine generelle Optimierung der Funktionalität und Performanz beinhaltet. Dieser Vorgang wird meistens über einen längeren Zeitraum in regelmäßigen Abständen durchgeführt, um die Software aktuell und funktionsfähig zu halten. Manchmal wird auch eine generelle Optimierung gewünscht, wenn sich neue Anforderungen ergeben.

Softwareentwicklung Programmierungs-Standards

Die wichtigsten Programmiersprachen

C

Die wichtigste, aber wohl auch schwerste Programmiersprache ist C mit ihren Erweiterungen C++ und C#. Viele Betriebssysteme sind größtenteils in C verfasst, wie zum Beispiel Linux und Windows. Ursprünglich war C für die Systementwicklung vorgesehen, wird heute aber auch in vielen anderen Bereichen eingesetzt.

Python

Python ist der Alleskönner unter den Programmiersprachen. Sie zeichnet sich durch eine klare und leicht verständliche Syntax aus und stellt deshalb einen guten Einstieg in die Softwareentwicklung dar. Darüber hinaus ist sie weit verbreitet und wird von einer Vielzahl an Systemen unterstützt.

Java

Java ist eine Programmiersprache, die ursprünglich für Web-Anwendungen entwickelt wurde. Mittlerweile wird sie aber auch für die Erstellung von Spielen und Multimedia-Anwendungen verwendet. Sie kann auf nahezu allen Geräten geschrieben werden, da sie plattformunabhängig ist. Außerdem gilt sie als sehr sicher, da sie verschiedene Manipulationen und Fehler blockiert.

Ruby

Ruby ist eine der wenigen Programmiersprachen, die erst durch ihr gleichnamiges Framework Ruby on Rails so populär geworden ist. Um sie zu verwenden, werden weder typisches Programmiervokabular noch -befehle benötigt. Ihre Syntax ist simpel gehalten und gilt als sehr benutzerfreundlich. Um Ruby hat sich bereits eine große Community gebildet und es existieren viele Online-Tutorials. Das Framework Ruby on Rails ist bekannt für die schnelle und einfache Entwicklung von Web-Apps.

Visual Basic

Visual Basic wurde von Microsoft entwickelt und wird vor allem in der App-Entwicklung eingesetzt. Im Gegensatz zu anderen Sprachen ist es ereignisbasiert: Der Code reagiert auf Nutzer-Interaktionen. Visual Basic gilt als einfach zu lernen, ist aber nicht unbedingt für die fundamentale Programmierung geeignet.

Objective-C

Objective-C ist die primäre Sprache der Programmierungsoberfläche Cocoa und für MacOS ausgelegt. Im Prinzip benutzt Objective-C, wie der Name bereits vermuten lässt, die C-Syntax mit zusätzlichen objektorientierten Elementen.

Swift

Swift ist die Sprache der Wahl für die Programmierung von Mac- und Linux-basierten Desktop-Programmen, mobilen Anwendungen und Servern. Sie enthält Elemente von Objective-C, Ruby, Python, C# und vielen mehr und ist bereits in XCode, dem Programmierungskit von Apple, enthalten. Swift eliminiert ganze Klassen von üblichen Programmierfehlern und ist durch die Ähnlichkeit zu C unter Entwicklern populär geworden. Zusätzlich gilt sie durch das Weglassen des Ballasts als effizienter als C und schneller als Python.

Softwareentwicklung: Heutiger Stand und Zukunft

Insgesamt zeichnet sich in den letzten Jahren ein Trend der Deprofessionalisierung ab: Immer mehr Menschen lernen nicht mehr durch ein Studium oder eine Ausbildung, sondern autodidaktisch oder durch verschiedene Online-Tutorials programmieren. Durch die globale Vernetzung, einer Vielzahl an Plattformen und andere Vernetzungsmöglichkeiten entstehen große Communitys von Laien und professionellen Programmierern, wobei die Grenzen immer mehr verschwimmen.

Gleichzeitig ist aber auch eine Steigerung des Standards und der Qualität in der Softwareentwicklung festzustellen: Systeme werden immer hochwertiger und komplexer, wodurch auch die Anforderungen an Softwaresysteme steigen. Dies geht einher mit einer gesellschaftlich bedingten Schnelllebigkeit, in der sich die Bedürfnisse stetig ändern, was eine höhere Nachfrage nach Full-Stack-Entwicklern statt Spezialisten für eine einzelne Nische nach sich zieht.

In Zukunft wird von Entwicklern Kollaboration und Teamgeist viel gefragter sein als Qualifikation. Gerade in schnelllebigen Zeiten können kurzfristige Entwicklungen entscheidend sein und wer seine Ideen gut zur Sprache bringen kann, Kontakte knüpft und sich mit anderen zusammentut, kommt schneller voran als jemand, der “nur” gute Ideen hat und diese für sich behält.

Die Globalisierung hat Auswirkungen auf nahezu alle gesellschaftlichen Bereiche und ist für die Softwareentwicklung von besonderer Wichtigkeit. Softwaresysteme, die global gedacht sind und neben einer Vielzahl an Systemvoraussetzungen, Geräten und Internetverbindungen auch andere Kulturen und Sprachen mit einbeziehen, sind zukunftsträchtiger als solche, die sich nur in ihrem eigenen Kultur- und Dunstkreis aufhalten.

Die zukünftige Arbeitswelt ist global, ortsunabhängig, digital vernetzt und grenzenlos. Nicht nur ein Studium, sondern auch die Arbeit kann aus der Ferne erledigt werden. Besonders im Bereich der Softwareentwicklung ist Fernarbeit das große Thema der Zukunft: Prognosen zufolge werden im Jahre 2020 etwa 50% der Stellen Remote Jobs sein. Dies bedeutet, dass sich Arbeitskollegen möglicherweise nie persönlich sehen und von überall auf der Welt sein können.

So schnell, wie es technische Innovationen gibt, wird sich auch entsprechend die Nachfrage nach Fähigkeiten wandeln: 60% der zukünftigen Berufe erfordern Fähigkeiten, die nur 20% der derzeitigen Arbeitskräfte haben. Das bedeutet, dass Arbeitskräfte flexibel und anpassbar sein müssen. Da Lebensläufe nur noch selten linear verlaufen, ist eine Offenheit für alternative Karrierewege gefragt.

Es ist geradezu paradox: Es ist die Softwareentwicklung selbst, die viele Auswirkungen auf den Arbeitsmarkt vornimmt und somit ihr eigenes Tätigkeitsfeld für die Zukunft formt. Roboter und künstliche Intelligenzen, welche von Softwareentwicklern programmiert werden, sind ein Grund, warum in diesem, aber auch vielen anderen Berufsfeldern mehr kreative Köpfe und Gründer mit Risikobereitschaft gefragt sind als Arbeitskräfte, die einfach nur Arbeitsaufträge von anderen ausführen. Unternehmergeist wird immer gefragter und entwickelt sich sogar immer mehr zum Standard – schließlich können Roboter genauso gut bzw. noch präziser routinierte Arbeitsaufträge ausführen. Der Mensch ist ihnen (zumindest derzeit noch) in nur einem Punkt voraus: Innovation.

Softwareentwicklung Berlin bei TenMedia

TenMedia ist eine Digitalgentur im Herzen Berlins. Seit 2011 sind wir auf die Softwareentwicklung und die Webentwicklung spezialisiert und entwickeln neben modernen Websites auch umfangreiche Apps, Anwendungssoftware und bieten verschiedenste Software für KMU und andere Unternehmen. Bei uns wird Qualität großgeschrieben: Im Rahmen unserer individuellen Softwareentwicklung fertigen wir Softwarelösungen zugeschnitten auf die Wünsche unserer Kunden an, zu denen Einzelpersonen, Start-ups, Vereine und kleine und mittelständische Unternehmen (KMU) gehören.

Ob Softwareentwicklung in Berlin oder bundesweit: Wir übernehmen die Entwicklungsarbeit für einzelne Projekte oder werden zum langfristigen IT-Partner. Unsere Stärken liegen unter anderem in Bereichen wie Digitalisierung, New Work und Automatisierung. Zu den Zielen der von uns entwickelten Anwendungen gehören neben den ganz persönlichen Zielsetzungen unserer Kunden die Optimierung der Außenwirkung und der internen Unternehmensprozesse. Unsere Softwarelösungen sollen internen Kommunikationswege und Arbeitsabläufe verbessern und zu einer langfristigen Effizienzsteigerung und Arbeitserleichterung beitragen.

Nach Fertigstellung der individuellen Software bleiben wir weiterhin Ansprechpartner, sind rund um die Uhr erreichbar und bieten flexibel Mitarbeiterschulungen und andere Leistungen im Rahmen von New Work an.

Softwareentwicklung erklärt

Author

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! Kontakieren Sie uns!

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.

Können wir Ihnen bei Ihrem nächsten Softwareentwicklungsprojekt helfen? Flexible Modelle für Ihre Bedürfnisse! Kontaktieren Sie uns!

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:

Anwendungssoftware Utility Software (Dienstprogramme) Systemsoftware 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 welche mit geeigneter Webentwicklung erstellt wurde. 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.

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. Kontaktieren Sie uns HIER

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.

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 B 1 and … and B n .

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.

Leave A Comment