Systemsoftware bezeichnet jene Programme, die für die korrekten organisatorischen Abläufe auf einem Computer notwendig sind, die die Programerstellung und -ausführung unterstützen (Compiler, etc.) und allgemeine Dienstleistungen (z.B. die Dateiverwaltung) erbringen.
Anwendungssoftware dient zur unmittelbaren Lösung von Problemen der Computer-Anwender. Dementsprechend groß ist auch die Anzahl der verfügbaren Programme und der von ihnen abgedeckte Bereich an Problemen. Anwendungssoftware reicht von Textverarbeitungssystemen über kommerzielle Programme bis hin zu technischer Software.
Numerische Software wird zur Lösung numerischer Probleme -- von Approximationsaufgaben, linearen und nichtlinearen Gleichungssystemen, etc. -- verwendet. Sie ist vor allem bei der Entwicklung von technischer und naturwissenschaftlicher Anwendungssoftware ein wichtiges Hilfsmittel.
Umfangreiche empirische Studien haben gezeigt, daß die Produktivität von Programmierern um mehrere Größenordnungen variieren kann. Extremwerte liegen bei ca. 5 und 5000 Zeilen (lines of code) pro Person und Monat. Durchschnittliche Werte liegen bei ca. 250 Zeilen.
Beispiel (IMSL, NAG) Als Richtwerte für Kostenschätzungen können
folgende Produktivitätszahlen numerischer Programmsysteme bzw. -bibliotheken dienen:
Die hohe Produktivität soll jedoch nicht über den Umstand hinwegtäuschen,
daß der Gesamtaufwand zur Entwicklung einer numerischen Programmbibliothek enorm
hoch ist. In der NAG-Fortran-Library stecken insgesamt mehr als 1000 Personaljahre.
Realistische Kostenschätzungen lassen sich nicht mit den persönlichen Erfahrungen unroutinierter Software-Entwickler anstellen. Programmieranfänger schreiben oft in sehr kurzer Zeit Programme mit einer großen Anzahl an Zeilen. Rechnet man diese Werte ohne weitere Überlegungen hoch, so kommt man zu unrealistischen Monatsleistungen. Dies deshalb, weil die Komplexität größerer Softwaresysteme, sowie der Test- und Dokumentationsaufwand oft nicht berücksichtigt wird.
Daraus ersieht man, daß z.B. die steigenden Anforderungen an die Benutzerschnittstelle oder die Dokumentation zu einer Produktivitätsverringerung führen. Trotz steigender Qualität der Software ist in Zukunft dennoch mit einer gleichbleibenden Produktivität zu rechnen.
Universell verwendbare Module
Um dennoch Produktivitätssteigerungen zu erreichen, bedient man sich im numerischen
Bereich Standard-Software-Bauteilen. Die Anschaffungskosten für diese fertigen
Routinen und Module betragen nur einen Bruchteil der Kosten, die für eine
Neuentwicklung entstehen würden. Diese Module können z.B. über
NetLib bezogen werden.
Bei Softwarekosten muß zwischen Entwicklungs- und Wartungskosten unterschieden
werden. Bisher wurden primär die Entwicklungskosten angesprochen, die für die
Wartung entstehenden Kosten sind jedoch keineswegs vernachlässigbar.
Abgesehen von sogenannten one shot-Programmen, die nur einmal verwendet werden und
bei denen daher keine Wartungskosten anfallen, beträgt der Anteil der Kosten für
die Wartung bei Großprojekten bis zu 2/3 der Gesamtkosten.
Im Mittel wird für die Wartung eines numerischen Softwareproduktes ungefähr
genausoviel aufzuwenden sein, wie für dessen Entwicklung. Auch hier bringt die
Verwendung von Standardsoftware -- also fertigen Modulen und Routinen -- wesentliche
Vorteile, speziell wenn diese städig professionell gewartet werden.