Software-Engineering bezeichnet die ingenieurmäßige Vorgehensweise bei der Software-/Systementwicklung. Der Begriff wird sowohl für das wissenschaftliche Themengebiet der Entwicklung entsprechender Prinzipien, Vorgehensmodelle, Verfahren, Methoden und Werkzeuge verwendet als auch für ihre konkrete Nutzung in der Praxis.
Geprägt wurde der Begriff 1968 von Professor Bauer auf einer Nato-Konferenz in Garmisch, die sich mit der sogenannten Softwarekrise beschäftigte. Die Krise bestand darin, dass zwar für damalige Verhältnisse sehr leistungsfähige Computerhardware und dies mit sinkenden Kosten zur Verfügung stand, auf der anderen Seite aber große Probleme bei insbesondere komplexeren Softwaresystemen zu verzeichnen waren: Die Entwicklung dauerte insgesamt zu lange und war zu teuer sowie die Qualität der entwickelten Software unbefriedigend, so dass sie schwer zu warten war. Insgesamt explodierten die Kosten sowohl für die Systementwicklung als auch für die Software-Wartung.
Seitdem sind eine Vielzahl von Ansätzen für alle Aspekte der Softwareerstellung entworfen und auf ihrer Basis ein breites Spektrum von CASE-Tools entwickelt worden. Insgesamt ist ein enormer Fortschritt bezüglich der Durchführung und der Unterstützung aller Aufgaben und Phasen der Systementwicklung zu verzeichnen. Die Entwicklung und Wartung sowie das Software-Reengineering insbesondere komplexer Softwaresysteme sind allerdings weiterhin mit großen Schwierigkeiten und hohen Kosten verbunden. Nach entsprechenden Untersuchungen werden die Projektziele bei bis zu 80% der großen Entwicklungsprojekte nicht vollständig erreicht und ein nicht unerheblicher Anteil der Projekte scheitert sogar vollständig. Immer wieder wird das Software-Engineering deshalb kritisch bewertet.
Damit wird man aber den großen Erfolgen der noch jungen Disziplin keinesfalls gerecht; vielmehr liegen die Gründe für die weiterhin bestehenden Schwierigkeiten vor allem in der gestiegenen Komplexität sowie in den gestiegenen Anforderungen an Softwaresysteme und an ihre Qualität. Diese Komplexität und diese Anforderungen resultieren nicht zuletzt aus der starken Abhängigkeit von Softwaresystemen, die in praktisch allen Bereichen der modernen Gesellschaft besteht. Daneben sind weitere Gründe u.a. auch in der Ausbildung und in den Fähigkeiten der Mitglieder des Softwareentwicklungsteams, insbesondere des Projektleiters, zu sehen. Um die zweifelsohne weiterhin zu erwartenden signifikanten Fortschritte des Software-Engineering in praktischen Projekten adäquat ausnutzen zu können, sind deshalb auch in diesen Bereichen Fortschritte erforderlich.
Zusätzliche Anforderungen an das Software Engineering ergeben sich zurzeit insbesondere einerseits durch die mobilen Plattformen (“Mobile Computing”) und andererseits durch das Erfordernis, Softwaresysteme und die von ihnen gespeicherten Daten durch Security-Maßnahmen vor unberechtigtem Zugriff zu schützen. Nicht zuletzt durch die Outsourcing– sowie die Offshoring-Tendenz im IT-Bereich gewinnt außerdem die Zertifizierung von Software Engineering-Prozessen (Ansatz: mit der Qualität der Prozesse steigt die Qualität der Software-Produkte) an Bedeutung; Beispiele für entsprechende Zertifikate sind CMMI sowie Spice bzw. ISO/IEC 15504. Schließlich ist in Bezug auf aktuelle Entwicklungen im Software Engineering noch darauf hinzuweisen, dass die Benutzerfreundlichkeit/Usability von Softwaresystemen einen immer höheren Stellenwert besitzt.
Literatur
IEEE Software Engineering Coordinating Committee: Swebok. http://www.computer.org/portal/web/swebok/v3.guide.
Maciaszek, Leszek A. ; Liong, Bruc Lee: Practical Software Engineering – A Case Study Approach. Harlow, England : Pearson Education, 2005.
Sommerville, Ian: Software Engineering. 9. Auflage. München : Pearson Studium, 2010.