Technologische Neuigkeiten, Bewertungen und Tipps!

Gibt es Grenzen bei der Softwareschätzung?

Hinweis: Der folgende Artikel hilft Ihnen dabei: Gibt es Grenzen bei der Softwareschätzung?

In der Juli-Ausgabe 2001 von ACM Software Engineering Notes veröffentlichte JP Lewis einen Artikel, in dem er behauptete, dass es strenge Grenzen für unsere Fähigkeit gibt, die Zeit für die Softwareentwicklung abzuschätzen.

Der Artikel hat in der Software-Engineering-Community eine Menge Diskussionen ausgelöst, weil seine Schlussfolgerung so beunruhigend ist.

Lewis behauptet, dass es einfach keine objektive Methode geben kann, um vor Abschluss der Aufgabe eine gute Schätzung der Komplexität einer Softwareentwicklungsaufgabe zu erhalten.

Mit „objektiv“ meint er eine formale, mechanische Methode, die nicht auf menschlicher Intuition beruht.

Er untermauert diese Behauptung, indem er einen mathematischen Beweis dafür liefert. (Hier ist der Artikel „Large Limits to Software Estimation“ und hier ist ein Begleitpapier, das Lewis als Antwort auf die Diskussion geschrieben hat.)

Lewis‘ Argumentation basiert auf dem Begriff der algorithmischen Komplexität, die ein Maß für das kürzeste Programm ist, das eine bestimmte Zeichenfolge erzeugen wird.

Algorithmische Komplexität, auch Kolmogorov-Komplexität genannt, ist ein etabliertes und anerkanntes Gebiet der Informationstheorie und Informatik.

Lewis stellt fest, dass man sich jedes Softwareprogramm als eine Tabelle vorstellen kann, die Programmeingaben den entsprechenden korrekten Ausgaben zuordnet.

Diese Charakterisierung der Programmierung geht von einer endlichen Anzahl endlicher Eingaben aus, was für praktische Zwecke angemessen ist.

Lewis stellt dann fest, dass eine Tabelle als String dargestellt werden kann, der aus ihren Zeilen besteht.

Somit ist mit jeder Programmieraufgabe eine algorithmische Komplexität verbunden – die Länge des kürzesten Programms, das die Tabelle erstellt, die die Dateneingaben des Projekts ihren Ausgaben zuordnet. (Weitere Informationen finden Sie unter „Eine Einführung in die Kolmogorov-Komplexität und ihre Anwendungen“.)

Als nächstes stellt Lewis ein Standardergebnis der Komplexitätstheorie dar: Es gibt keinen Algorithmus zur Berechnung der algorithmischen Komplexität einer beliebigen Zeichenfolge.

Mit anderen Worten: Es kann kein Programm geben, das uns die Länge des kürzesten Programms angibt, das ein beliebiges Softwareentwicklungsproblem löst.

Lewis behauptet, dass Aufwand und Zeit für die Softwareentwicklung eng mit der algorithmischen Komplexität des Projekts verknüpft sind.

Wenn man all diese Ergebnisse zusammenfasst, kommt er zu dem Schluss, dass es keine strenge Methode zur Berechnung der Entwicklungszeit eines Softwareprojekts vor der tatsächlichen Durchführung des Projekts gibt.

Lewis erweitert dieses Ergebnis auch unter Verwendung früherer Arbeiten anderer, um ungefähre Schätzungen der Entwicklungszeit innerhalb eines festen Fehlerbereichs abzudecken. (Weitere Informationen finden Sie unter Berechenbarkeits- und Komplexitätstheorie.)

Hat Lewis also Recht? Sollten wir verzweifelt die Hände hochwerfen, weil wir überhaupt keine Ahnung haben, wie lange ein Softwareprojekt dauern wird?

Lewis hat mathematisch recht, aber er liegt nur innerhalb einer sehr engen Definition des Software-Schätzproblems richtig.

Die in seinem Artikel verwendete Definition ist tatsächlich so eng, dass sie unnatürlich ist. Echte Softwareentwickler und Forscher im Bereich Softwareprozesse versuchen nicht, das von Lewis dargelegte Problem zu lösen.

Trotz gegenteiliger Behauptungen von Lewis versucht kein ernsthafter Forscher im Bereich Software-Engineering, eine garantierte Methode zur Erstellung von Zeit- und Aufwandsschätzungen zu finden, die mit Sicherheit korrekt sind.

Niemand versucht überhaupt, Methoden zu finden, die Schätzungen liefern, die innerhalb eines bekannten Fehlerbereichs garantiert korrekt sind.

Das reale Problem der Softwareschätzung ist viel weniger streng als Lewis behauptet. Wir versuchen nur, in einem angemessenen Prozentsatz der Zeit irgendwohin zu kommen!

Angenommen, jemand entdeckt eine formale, mechanische Methode zur Schätzung des Softwareaufwands, die in 80 % der Fälle zu 80 % korrekt ist.

Bei den anderen 20 % der Schätzungen liefert die Methode ein völlig falsches Ergebnis. Die Softwareentwicklungsgemeinschaft würde sich über diese bemerkenswerte neue Methode riesig freuen.

Jeder würde es nutzen, da es in 4 von 5 Fällen Softwareaufgaben mit einem Fehler von 20 % schätzt.

Wir wären wahrscheinlich sogar überglücklich, wenn wir eine Schätztechnik finden würden, die in 50 % der Fälle zu 50 % korrekt ist.

Die Ergebnisse von Lewis schließen solche Methoden nicht aus, da ihren Fehlern in ihren gescheiterten Fällen keine Grenzen gesetzt sind.

Tatsächlich werden diese Arten von Algorithmen, die bei vielen (aber nicht allen) Problemfällen effizient und genau sind, von der Informatikgemeinschaft gut untersucht.

Sie gelten als nützlich in wichtigen Bereichen, einschließlich der Primzahlentheorie und der Lösung komplexer simultaner Gleichungen. (Weitere Informationen finden Sie im Average-Case Complexity Forum.)

In einem verwandten Thema steht Lewis auf unsicherem Boden, wenn er behauptet, dass Programmierzeit und -aufwand eng mit der algorithmischen Komplexität der Programmieraufgabe verknüpft seien.

Das mag wahr sein und ist intuitiv ansprechend, aber Lewis stellt keinen direkten Zusammenhang her.

Ist es möglich, dass es ein Softwareprojekt mit einem zugehörigen Kurzprogramm zum Erstellen der richtigen Eingabe-/Ausgabe-Zuordnungstabelle gibt, dieses Programm jedoch für einen Menschen schwer zu entdecken ist?

Ein solches Projekt hätte eine geringe algorithmische Komplexität, aber eine hohe menschliche Komplexität (Zeit und Aufwand).

Oder vielleicht gibt es Softwareprojekte mit einem großen Mapping-Programm, aber ein Mensch kann klar erkennen, wie das Programm geschrieben werden sollte.

Lewis geht davon aus, dass solche Softwareprojekte nicht existieren oder selten sind, nennt aber keinen konkreten Grund für diese Annahme.

Lewis hat auch mit seiner Kritik am Software Capability Maturity Model (SW-CMM) des Software Engineering Institute in Carnegie-Mellon Unrecht.

Diese Methode ist zwar alles andere als perfekt, hat aber vielen Unternehmen dabei geholfen, ihre Softwareprozesse zu verbessern.

Lewis liefert ein Zitat von SW-CMM, das darauf hindeutet, dass SW-CMM Organisationen, die seinem Modell folgen, eine garantierte Genauigkeit von Softwareschätzungen verspricht, und widerlegt es dann.

Das Zitat ist aus dem Zusammenhang gerissen und spiegelt ein mangelndes Verständnis über SW-CMM wider. Jeder SW-CMM-Reifegrad ist darauf ausgelegt, genauere Zeitschätzungen als der vorherige Grad zu liefern, es wird jedoch nicht erwartet, dass er perfekt ist.

Level 5 (ihr bestes Level) verspricht Schätzungen der Softwareentwicklungszeit, die bei vielen Projekten eng an den tatsächlichen Entwicklungszeiten liegen.

Aber selbst auf Level 5 gehen die Autoren von SW-CMM davon aus, dass einige Schätzungen weit daneben liegen.

Das primäre SW-CMM-Papier zeigt sogar eine glockenförmige Kurve, um diese Beziehung zwischen geplanter und tatsächlicher Zeit zu veranschaulichen, und alle diese Kurven enthalten Werte, die weit von der Mitte entfernt sind. (Weitere Informationen finden Sie auf der SW-CMM-Website und im Hauptpapier.)

Ich stimme Lewis in einem der wichtigsten Punkte zu, die er in seinem Begleitpapier anspricht.

Er sagt, dass wir aufgrund seiner Ergebnisse mehr Vertrauen in die Menschen setzen sollten, wenn wir Software-Zeitschätzungen erstellen.

Er erklärt: „Eine gute Einschätzung … erfordert Erfahrung und Urteilsvermögen. Die Softwareindustrie sollte menschliche Erfahrung, Intuition und Weisheit schätzen …“

Mehr könnte ich nicht zustimmen. Gute Leute, die wissen, was sie tun, sind für den Softwareprozess von unschätzbarem Wert.

Wir sollten uns nicht nur auf menschliche Fähigkeiten verlassen, sondern auch weiterhin formale Methoden der Softwareschätzung verfolgen, die hoffentlich einigermaßen genaue Zeitschätzungen für die meisten Entwicklungsaufgaben liefern.

Die Existenz solcher Methoden wird durch die Ergebnisse von Lewis nicht ausgeschlossen. Wie Lewis zeigt, können wir mathematische Analysen auf unsere formalen Methoden anwenden, um die Grenzen unserer Schätztechniken zu verstehen.

Wir müssen nur bei der Interpretation dieser mathematischen Ergebnisse vorsichtig sein.

Danksagungen

Mein Dank geht an Steve Homer von der Informatikabteilung der Boston University für eine hilfreiche Diskussion über die mathematischen Ergebnisse in Lewis’ Artikel und meine Behauptungen dazu. Eventuelle Fehler in diesem Artikel bleiben natürlich mein Eigentum.

Table of Contents