Softwareentwicklung | Programmierung

Softwareentwicklung

Die moderne Softwareentwicklung

Softwareentwicklung_CodeDer Begriff Softwareentwicklung schließt im Allgemeinen die vorbereitende Entwicklungsarbeit sowie die nachfolgende Umsetzung (Programmierung) von Computerprogrammen mit ein. Oft wird die Softwareentwicklung mit der Programmierung gleichgesetzt. Tatsächlich können jedoch Softwareentwicklung und Programmierung voneinander getrennt oder auch parallel in mehreren Teilschritten erfolgen. Eine reine Softwareentwicklung umfasst die theoretische Ausarbeitung eines Konzepts für eine Software. Durch die Programmierung wird der Bauplan (Software Konzept) in ein nutzbares Softwareprodukt umgewandelt. Auf den technischen Bereich angewandt, wäre die Softwareentwicklung die Erstellung des Bauplans und die eigentliche Produktion entspricht dann der Programmierung. Der Oberbegriff Softwareentwicklung umfasst auch mehrere unterschiedliche Bereiche in der IT. Damit dem Begriff Software teilweise sehr unterschiedliche Programme gemeint sind es notwendig die Begrifflichkeiten etwas zuordnen. Die Softwareentwicklung umfasst unter Anderem folgende Hauptbereiche:

  • Hardwarenahe Programmierung
  • Compiler-Entwicklung
  • Betriebssystem Entwicklung
  • Entwicklung von Anwendungsprogrammen
  • Algorithmik
  • Webentwicklung
  • Datenbankprogrammierung
  • App-Entwicklung
  • Spieleentwicklung
  • Modifikation von Anwendungsprogrammen Skriptsprachen

Grundsätzlich unterscheidet man bei der Entwicklung von Softwareprogrammen zwischen Software mit Benutzeroberfläche und Software ohne Benutzeroberfläche.

Softwareentwickler_Team

Seit dem Einsatz grafischen Betriebssystemen kommen bei den meisten Anwendungsprogrammen grafische Benutzeroberflächen (GUI) zum Einsatz. Es gibt jedoch einige Softwaresysteme die als Hilfsmittel für einen Low Level Einsatz gedacht sind und bewusst Kommandozeilen basiert entwickelt werden. Der größte Teil der Anwendungsprogramme ist jedoch mit einer grafischen Benutzeroberfläche ausgestattet. Daneben gibt es aber mindestens genauso viele Softwarekomponenten die als Dienste ausgelegt sind und ohne grafische Benutzeroberfläche andere Softwarekomponenten unterstützen. Bei der Softwareentwicklung muss sich der Softwareentwickler nicht mehr allein auf die Entwicklung aller grundlegenden Systemfunktionen konzentrieren, sondern kann auf Komponenten und Dienste die vom Betriebssystem oder von anderen Softwareprodukten bereitgestellt werden zurückgreifen. Softwarehersteller stellen Funktionen ihrer Programme über sogenannte Programmierschnittstellen (API) zur Verfügung. Diese ermöglichen anderen Programmierern auf Daten oder Funktionen bestehender Softwaresysteme zugreifen.

Neben den Teilbereichen der Softwareentwicklung unterscheidet man auch die Art nachdem eine Software entwickelt wird:

  • Klassische Auftragsentwicklung nach Pflichtenheft
  • Agile Softwareentwicklung
  • Reverse engineering
  • Redesign

Während bei den meisten Softwareentwicklung ein Konzept auf der Basis einer Bedarfsanalyse erstellt wird, gibt es gelegentlich die Anforderung ein bestehendes Softwaresystem zu erweitern oder auf der Grundlage aktueller Technologien neu programmieren. Hierbei werden der Regel der Funktionsumfang sowie die Benutzerführung vom Altsystem weitestgehend übernommen. Die Softwareentwicklung beschränkt sich in diesem Fall auf die Analyse des abzulösenden Systems und die Auswahl der zu verwendenden Technologien bei der Programmierung der Software.

ProgtammiererJe nach Art und Umfang des zu entwickelnden Softwareprojekts arbeiten ein oder mehrere Softwareentwickler oder ganze Entwicklerteams an der Umsetzung eines Softwareprojekts. Meist übernehmen spezialisierte Softwareentwickler Teilbereiche der Entwicklung. Dabei wird eine Software in logische Schichten aufgeteilt. Einige Softwareentwickler übernehmen die Entwicklung von Algorithmen oder Hintergrunddiensten andere Softwareentwickler kümmern sich um die Benutzerführung und die Gestaltung der grafischen Benutzeroberfläche. Die Programmierung einer Software kann als eigenständiger Prozessschritt gesehen werden. In der Praxis gibt es zwischen Programmierer und Softwareentwickler eine dauerhafte Feedback-Schleife. Der Einsatzbereich der Software sowie die zu verwendenden Technologien, bestimmen über die Entwicklungsumgebung und die zu verwendende Programmiersprache. Während für hardwarenahe Programmierung eine abstrakte Maschinensprache (Assembler-Code) zum Einsatz kommt, werden für andere Anwendungsgebiete Hochsprachen verwendet deren Befehle an die menschliche Sprache angepasst sind. Zu diesen Hochsprachen gehören zum Beispiel C, C++, Pascal oder BASIC. Diese Hochsprachen müssen natürlich für die Computer in maschinenlesbarem Code übersetzt werden. Dies kann zur Laufzeit durch einen Interpreter oder bei der abschließenden Softwareerstellung durch einen Compiler erfolgen. Beide Strategien sind für unterschiedliche Einsätze der Software gedacht. Einige Sonderformen der Hochsprachen werden in visuellen Wicklungsumgebungen verwendet. Hier kommen zum Beispiel Visual Basic, Visual C++ oder C# zum Einsatz.

Bei der Entwicklung von Web-Anwendungen kommen sogenannte Metasprachen oder Skriptsprachen zum Einsatz. Oft werden sogar mehrere Skriptsprachen die speziell für den Einsatz im World Wide Web entwickelt wurden verwendet. So werden die grafischen Elemente (Benutzeroberfläche) einer Webseite mit HTML programmiert wobei die aktiven Elemente einer Webseite sowie die im Hintergrund laufenden Funktionen mit PHP und Javascript programmiert werden. In der Regel wird bei der Softwareentwicklung vorgegeben welche Programmiersprachen zum Einsatz kommen sollen. Die Entscheidung für die Auswahl einer geeigneten Programmiersprache hängt von den technischen Möglichkeiten der Programmiersprache bzw. der Entwicklungsumgebung ab. Darüber hinaus wird ein Softwareentwickler immer auf den allgemeinen Verbreitungsgrad einer Programmiersprache sowie den Entwicklungsstand achten. Komfortable Entwicklungssysteme die nicht mehr gepflegt werden oder exotische Programmiersprachen die nur von einer Minderheit beherrscht werden vom Softwareentwickler in der Regel nicht in Betracht gezogen.

SoftwaredevelopmentModerne Entwicklungsumgebungen unterstützen den Softwareentwickler und den Programmierer gleichermaßen. Sie stellen Hilfsmittel und Werkzeuge für die Projektorganisation und für die Quellcodeverwaltung Verfügung. Häufig findet man in solchen Entwicklungsumgebungen Instrumente zur Prozesssteuerung und zum Workflow Management.

Dem Softwareentwickler stehen unzählige Tools für die Umsetzung eines Softwareprojekts Verfügung. Je größer und komplexer ein Software Projekt ausgelegt ist umso mehr übergeordnete Prozessschritte und Verwaltungsaufgaben sind erforderlich. Für kleinere Softwareprojekte des aber durchaus üblich dass Softwareentwickler und Programmierer ein und dieselbe Person sind. Das verkürzt in der Regel die Entwicklungszeit durch den Wegfall einer übergeordneten Verwaltung. Oft kommt es sogar vor das erfahrene Softwareentwickler und Programmierer bestimmte Teilaufgaben direkt umsetzen, d.h. den Code gleich ins Reine schreiben ohne vorher ein abstraktes Schema zu entwickeln. Diese Form der Softwareentwicklung kann bei kleinen Softwareprojekten erhebliche Kosten und Zeiteinsparungen bringen. Bei größeren Softwareprojekten für diese Vorgehensweise eher zu Problemen.

SoftwareentwicklerDie meisten professionellen Softwareentwickler konzipieren ihre Software modular um eine Wiederverwendbarkeit programmierten Bausteine zu gewährleisten. Damit ist man schon bei der Softwareentwicklung in der Lage den Grundstein neue Projekte zu legen. Da im Laufe der Zeit immer mehr und Bausteine entwickelt werden die dann relativ kurzfristig bei ähnlichen Softwareentwicklungsprojekten eingesetzt werden können, sind die Durchlaufzeiten bei erfahrenen Softwareentwicklern in der Regel viel kürzer als bei Branchenneulingen. Für viele Auftraggeber kann es finanziell und zeitlich sehr interessant sein ein bestehendes Projekt nach seinen Wünschen und Anforderungen modifizieren zu lassen. Hier besteht die Herausforderung für den Softwareentwickler darin die Modifikationen so anzubringen dass die bisher entwickelten Komponenten ihre ursprünglichen Funktionen beibehalten.

Neben dem Design und der Architektur muss sich der Softwareentwickler mit der Wartung der Dokumentation und dem Release Management auseinandersetzen. Darüber hinaus sind oft umfangreiche Studien die das Anwendungsgebiet betreffen zu betreiben. Sofern eine Anbindung an Drittsysteme erfolgen soll müssen hierzu die entsprechenden Schnittstellen geschaffen werden. Ein Softwareentwickler muss die entsprechenden Dokumentationen studieren und die Umsetzung fremder Datenformate planen. Auch bei diesem Arbeitsschritt liegen die Aufgabengebiete von Softwareentwickler und Programmierer nah beieinander. In vielen Bereichen sind die Übergänge fließend.