Avatar Wobble auf einem Demonstrationshandy: Komplexe Software wird heute von Spezialisten wie hier Kai Tödter von Siemens CT aus Programmmodulen zusammengesetzt, beispielsweise in Java programmiert und am Computer vorab simuliert
Es war ein langer Weg vom Abakus der Antike bis zu den ersten programmierbaren Rechenmaschinen, die in den 30er und 40er Jahren des 20. Jahrhunderts in Deutschland, USA und Großbritannien gebaut wurden. Als wissenschaftliche Disziplin gibt es die Informatik erst seit wenigen Jahrzehnten. Seither hat sich die Software rasant vom akademischen Werkzeug zum erheblichen Wirtschaftsfaktor gewandelt, und die Erwartungen in die Produktivität der Programmentwicklung steigen von Jahr zu Jahr. Die Kehrseite: "Zwar werden die Methoden und Werkzeuge immer besser", sagt Dr. Lothar Borrmann, bei Siemens Corporate Technology (CT) in München Leiter der Abteilung Software & Engineering / Architecture. "Gleichzeitig steigen aber auch die Anforderungen an die Software-Architekten und ans Projektmanagement. Die komplexen Software-Systeme von heute kann niemand mehr aus einem Guss programmieren."
Neue Methoden haben das maschinennahe Programmieren der Anfangsjahre in den Hintergrund gedrängt. Schon die Benutzeroberfläche eines modernen Personal Computers ist mit einfachen Programmiertechniken nicht mehr realisierbar. In jedem Laptop steckt inzwischen soviel "Intelligenz", dass die Großrechner der Gründerzeit daneben verblassen. Programmcode findet sich in jeder Schaltung, vom Auto übers Handy bis zum Kraftwerk. Allein die Software-Ingenieure von Siemens produzieren jährlich mehrere Milliarden Lines of Code. Anfangs wurden Programmzeilen mühsam per Hand geschrieben, heute liefern vorgefertigte Software-Bausteine und so genannte Design Patterns (Entwurfsvorlagen) das Grundgerüst. "Es gibt bereits Programmierumgebungen, die mit wenigen Anweisungen mächtige Operationen erzeugen", erklärt Siegfried Zopf von der Programm- und Systementwicklung (PSE) in Wien. Die PSE ist ein Software- und Elektronikhaus von Siemens mit Standorten in mehreren Ländern. Die mehr als 5000 Mitarbeiter sind fast ausschließlich für die Siemens-Bereiche tätig.
Ein Blick in die bunte Welt der Entwicklungsumgebungen zeigt, dass das Konzipieren und Schreiben von Software mehr Qual als Wahl ist. Es gibt über 200 Programmiersprachen (siehe auch Komplexe Welt der Software). Mancher Profi schwört auf Perl, Basic, Eiffel oder Smalltalk. Andere werkeln mit Delphi, C/C++, Java oder Ada. Sogar die Veteranen unter den Programmiersprachen wie Cobol und Assembler haben längst nicht ausgedient. Bei Siemens gibt es zwar keine konzernweit festgelegte Programmiersprache, aber meist orientiert man sich an Lösungen auf Basis anerkannter Verfahren: "Es ergibt keinen Sinn, mit ausgefallenen Sprachen zwei Jahre zu programmieren und am Ende hat man eine Insellösung", betont Borrmann. In der Regel setzen die Siemens-Experten Mainstream-Sprachen wie C/C++ und Java ein oder nutzen Plattformen wie J2EE (Java 2 Enterprise Edition) oder Microsofts .Net. "Jedes Konzept hat Stärken und Schwächen und ist für andere Zwecke geeignet", unterstreicht Zopf.
Anfangs prägten noch so genannte Assemblersprachen die jede Anweisung bis ins Detail beschreiben die Arbeit der Autoren. Bald kamen dann prozedurale Sprachen in Mode. Dabei wird ein Programm in kleinere Teilaufgaben zerlegt, die als Prozeduren bezeichnet und später zu einem Gesamtsystem zusammengefügt werden. Dieser Ansatz zielt bereits auf die Wiederverwendbarkeit von Quellcode und eine hohe Übersichtlichkeit des Gesamtaufbaus. "Die Forscher und Entwickler haben sehr schnell dazugelernt", konstatiert der Programmierexperte Douglas C. Schmidt von der Vanderbilt University in Nashville, USA. "Jahr für Jahr wurde der Abstraktionsgrad und damit die Automatisierbarkeit von Programmierroutinen erweitert".
Gekapselt und wieder verwendbar. Nicht nur Detailverbesserungen der vorhandenen Sprachen und Verfahren, sondern auch grundlegende Änderungen in der Denk- und Vorgehensweise erweiterten den Horizont der Software-Schmieden. Die objektorientierte Entwicklung machte vor 20 Jahren Furore und ist bis heute fest etabliert. Ihr wichtigstes Kennzeichen: Regeln, Befehle und Funktionen werden vorgefertigt und in qualitätsgesicherten Bausteinen "gekapselt". Diese enthalten klar definierte Schnittstellen zum Andocken an andere Bausteine und verfügen bereits über Anweisungen, wie sie mit anderen Programmelementen interagieren sollen. "Der Trend geht zu einer an der Wiederverwendung orientierten Entwicklung", resümiert Borrmanns Mitarbeiterin Christa Schwanninger.
Software-Ingenieure greifen dabei auf Programmbibliotheken zurück, die jede Menge an vorgefertigten Schablonen enthalten und auch für ausgefallene Anwendungsfälle so genannte Code-Gerüste bereithalten. Oder sie fangen an, mit grafischen Modellierungssprachen Objekte zu entwerfen in der Fachwelt wird dies auch Model Driven Development (MDD) genannt: "Bei MDD beschreiben wir die reale Welt, die wir automatisieren sollen, mit Hilfe von Symbolen und modellieren dann die entsprechenden Abläufe im Datenverarbeitungssystem", sagt Zopf. Die Umsetzung in lauffähigen Programmcode wird teilweise automatisch von den Entwicklungswerkzeugen erledigt.
Der modellbasierte Ansatz verringert vor allem den Programmieraufwand für einzelne Software-Teile. Selbst komplizierte Funktionen verstecken sich hinter überschaubaren Grafiksymbolen. Es entsteht eine Struktur, die in weiteren Phasen des Entwicklungsprozesses immer mehr den Anforderungen des Anwendungsfalls angepasst wird. Das zugrunde liegende Modell sind gekapselte, wieder verwendbare Systemkomponenten, die sich wie Lego-Bausteine zu unterschiedlichen Anwendungen (Systemfamilien) verketten lassen.
Die Experten erwarten auch künftig keinen Stillstand. Schon tauchen mit so genannten generativen und aspektorientierten Entwicklungswerkzeugen neue Konzepte auf, die noch bessere, zuverlässigere und sicherere Software versprechen. "Wir erwarten vor allem durch die agilen Softwareprozesse mehr Kundenzufriedenheit bei niedrigeren Kosten", betont Christa Schwanninger. Die neuen Architekturen erlauben ein hohes Maß an Änderungen und Erweiterungen und folgen nicht wie bisher einem starren Vorgehensmodell. Durch ein besseres Projektmanagement mit kürzeren Release-Zyklen und einer an definierten Zielen orientierten Planung stehen dem Anwender schon zu einem sehr frühen Zeitpunkt lauffähige Programmteile zur Verfügung. So kann der Nutzer seine Wünsche sogar noch während des Entwicklungsprozesses an die zuständigen Teams weiterreichen und umgehend geänderte Versionen erhalten.
Douglas C. Schmidt erwartet, dass modellbasierte Programmiersprachen, die automatisch den passenden Maschinencode erzeugen, bald zum Standardrepertoire vieler Entwicklungsabteilungen gehören werden. Die deutsch-spanische Firma CARE Technologies offeriert schon eine Maschine, die vollautomatisch Software schreibt und jeden menschlichen Programmierer an Geschwindigkeit übertrifft. Das Geheimnis sind vorgefertigte Datenflussdiagramme, die den Ablauf festlegen. Der Anwender beschreibt mit Grafiksymbolen seine Aufgabe und verlinkt diese mit den Diagrammen. Am Ende liefert die Maschine lauffähigen Quellcode, den sie aus vorhandenen Bausteinen zusammensetzt.
Als neuen Standard wird es den Code auf Knopfdruck und die selbst organisierende Software allerdings nicht geben: Noch fehlt es an der technisch-wissenschaftlichen Basis für vielfältig verwendbare Softwarekomponenten. Die CARE-Maschine beherrscht erst einfache Aufgaben. Große Softwaresysteme mit hoher Anforderung an die Zuverlässigkeit und Sicherheit ihrer Teile werden auch in Zukunft von Spezialistenteams geplant wenngleich auf einem sehr hohen Abstraktionsniveau. Die Maschine führt nur aus, was vorher festgelegt wurde: "Erst das Wissen von Experten und deren kooperatives Zusammenspiel machen ein System lauffähig", sagt Borrmann.
Andreas Beuthner