|
|
|
||
|
"Künstliche Intelligenz ist kein Schutz vor natürlicher Dummheit." SystematikIm März 1967 erschien im Magazin "Fortune" ein Artikel über den für damalige Begriffe neuartigen Prozess der "Softwareentwicklung". Ein Auszug daraus: "In der Programmierung herrscht nicht annähernd die Disziplin wie beispielsweise in den Naturwissenschaften. Deshalb spielt die Intuition eine große Rolle. Noch unterscheiden sich die Programmierer in ihren kreativen und intuitiven Fähigkeiten." Im Jahre 1968 prägten Softwareprofis auf einer NATO-Konferenz zur Softwareentwicklung den Ausdruck "Softwarekrise" und beschrieben damit Schwierigkeiten bei der Erstellung zuverlässiger Systeme. Ist die Softwarekrise vorüber? Offensichtlich nicht, wie Probleme auch aus jüngster Zeit zeigen:
Weitere tolle Berichte von Problemen in IT-Projekten - häufig durch Softwarefehler bedingt - habe ich auf einer eigenen Seite im Anhang zusammengefasst. Die Zeitschrift CIO schreibt in der Ausgabe 6/2002: "Ein Viertel aller Projekte scheitert, die Hälfte hält Zeit- und Budget-Rahmen nicht ein. In den regelmäßigen Befragungen der Standish Group haben sich diese Zahlen bis heute kaum verändert." Am 25.03.2003 gibt die Standish Group bekannt, dass die Fertigstellung der Projekte auf 34% gestiegen ist, eine Verdopplung gegenüber 16% in 1994. Andererseits sind die Projekte mit Zeitüberschreitungen auf 82% gestiegen, gegenüber 63% im Jahr 2000. Und während 2000 noch 67% der angeforderten Funktionalitäten im endgültigen Produkt enthalten waren, sind es jetzt nur noch 52%.
Das Wesentliche dabei dürfte die Unterschätzung der Komplexität und des Detailreichtums der realen Welt sein. Wenn beispielsweise eine Verwaltungssoftware eines Schlachthofs das Gewicht eines Schlachtviehs über das Wochenende von 450 kg auf 300 kg reduziert hat, so weiß diese Software offensichtlich zwar, dass durch Verdunstung das Gewicht eines Schlachtviehs in der Halle über zwei Nächte am Wochenende stärker abnimmt als über eine Nacht innerhalb der Woche, aber diese Software hat offensichtlich kein Gespür dafür, dass die Reduzierung von 450 kg auf 300 kg bei nur einer weiteren Nacht (und selbst bedingt durch einen Feiertag über zwei weitere Nächte) völlig "unrealistisch" ist. Dieses "Gespür" müsste man eigentlich in Form von teilweise komplexen Plausibilitätsprüfungen an sehr vielen Stellen implementieren, womit sich der Aufwand aber noch mal unerwartet erhöht - zumindest für den Entwickler unerwartet, denn der Mitarbeiter der Firma sagt zu dem ganzen Problem sowieso nur: "Das war doch wohl klar, habt Ihr das etwa nicht berücksichtigt? Das weiß man doch wohl!" (Ich bin diesem Problem übrigens wirklich 1994 bei einem türkischen Fleischgroßhandel in Köln begegnet.) Aber warum kann eine Werft ein 200 Meter langes Kreuzfahrtschiff mit zwölf Decks für 1200 Passagiere und 400 Personen Besatzung rechtzeitig, fehlerfrei, zum vereinbarten Preis und mit allen geforderten Leistungen liefern, und warum geht das bei Software offensichtlich nicht? Ist es schwieriger Software zu schreiben als ein Kreuzfahrtschiff zu bauen? Oder liegt es daran, dass wenige Spezialfirmen wenige Kreuzfahrtschiffe bauen und an jeder Ecke selbsternannte Softwareentwickler sich mit selbst überlegten Methoden an zu großen Softwareprojekten versuchen? Auch wenn man den Aufwand für die Entwicklung gigantisch hochschraubt und tatsächlich keine Rücksicht auf Zeit und Geld nehmen muss, wird Software nie fehlerfrei! Dieses haben unzählige wirklich große unternehmenskritische Projekte gezeigt. Liegt es vielleicht doch daran, dass man Software nicht anfassen kann und mehrere Entwickler gemeinsam an einem virtuellen Gebilde arbeiten, während man ein Kreuzfahrtschiff modular aus realen Bausteinen zusammensetzt? Kann man tatsächlich das Problem der Software-Fehler auf folgende einfache Formel reduzieren: "Software hat Fehler, weil sie aus Logik besteht."? [B4]. Was können wir tun, um bei der Softwareentwicklung Fehler zu vermeiden oder zumindest möglichst früh zu finden und die Entwicklung von Software und damit die Software selbst robuster zu gestalten? Und wie können wir Software-Projekte vorhersehbarer, kalkulierbarer und damit planbarer gestalten? Betrachten wir doch mal die Definition für "Software-Engineering" (dt.: "Software-Technik") vom ANSI-Komitee [L14]: "The systematic approach to the development, operation, maintenance and requirement of software." (dt.: "Der systematische Ansatz für die Entwicklung, den Betrieb, die Wartung und die Anforderung von Software.") Die großen, wirklich komplexen Projekte scheitern wohl wirklich daran, dass es in just diesen Projekten immer noch zu wenig verfügbare Erfahrung, zu wenig Standards, zu wenig anerkannte Schnittstellen für die Umsetzung des jeweiligen Stücks der realen Welt gibt.Es gibt beispielsweise noch nicht so viele internationale Flughäfen mit vollautomatisiertem Gepäckbeförderungssystem und erst recht gibt es noch nicht viele Entwickler, die dieses komplexe Projekt schon mehrfach abgewickelt haben. Auch die Technologien, die dort zum Einsatz kommen, sind teilweise noch keine 15 Jahre alt (s. auch Anhang Historisches). Die wirklichen Professionals können meines Erachtens nur durch viele Projekte der gleichen Komplexität sowie eine evolutionäre Verbesserung der bestehenden, angewandten, systematischen Ansätze dem Ziel näher kommen, ein Softwareentwicklungsprojekt rechtzeitig, im Kostenrahmen, fehlerfrei, vollständig und zur Zufriedenheit des Kunden abzuschließen!
|
|
|