Skript zur Vorlesung Softwaretechnik – Folge 1 Grundlagen und Grundbegriffe der Softwaretechnik IT Kompaktkurs Sommersemester 2001 Prof. Dr. Georg Herde Fachhochschule Deggendorf Prof. Dr. Georg Herde, FH-Deggendorf Softwaretechnik Genau, bevor wir uns über SWT unterhalten sollten wir uns wirklich gut überlegen welche Begriffe wir verwenden und wie sie zu verstehen sind. Das Wort Software kommt aus dem englischen und heißt soviel wie „weiche Ware“ und stellt ein Oberbegriff dar, der Programme zum Betrieb von Rechnersystemen bzw. auf Rechnersysteme zusammenfasst. In anderen Begriffsbeschreibungen wird von „nichtapparativen“ Funktionsbestandteilen oder „immateriellen“ Teilen eines Rechnersystems gesprochen. Sehr häufig wird in den Begriffserläuterungen auch die Beschreibung und Dokumentation der Programme als dazugehörig beschrieben. Für unsere Aufgabe hier hilft es uns sehr, wenn wir unter SW eine Menge von Programmen und Beschreibungen verstehen, die es den Anwendern und Benutzern einer Rechenanlage – wobei dies nicht notwendigerweise ein Computer sein muss es könnte auch ein Fernseher, ein Aufzug, eine Scannerkasse oder einen Backofen sein – bei der Erledigung bestimmter Aufgaben unterstützt. Unter Technik verstehen wir hier die Anwendung von Prinzipien, Methoden und Werkzeugen für die ingenieurmäßige Entwicklung von Software unter Beachtung von Zeit-, Kosten- und Qualitätsanforderungen. Hierzu einige Definitionen der Softwaretechnik: “The practical application of scientific knowledge in the design and construction of computer programs and the associated documentation required to develop, operate, and maintain them.”, vgl. B.W. Boehm: Software Engineering, 1976 “Das ingenieurmäßige Entwerfen, Herstellen und Implementieren von Software sowie die ingenieur-wissenschaftliche Disziplin, die sich mit Methoden und Verfahren zur Lösung der damit verbundenen Problemstellungen befasst”, vgl. BrockhausEnzyklopädie “The systematic approach to the development, operation, maintenance and requirement of software.”, vgl. IEEE Standard Glossary of Software Engineering Terminology “Fachgebiet der Informatik, das sich mit der Bereitstellung und systematischen Verwendung von Methoden und Werkzeugen für die Herstellung und Anwendung von Software beschäftigt.“; vgl. Hesse at al.: Ein Begriffssystem für die Softwaretechnik, 1984 Grob unterscheiden lassen sich Systemsoftware und Anwendungssoftware. Unter der ersten Art verstehen wir Programme zum Betrieb von Rechneranlagen (z.B. Betriebssysteme wie UNIX, Windows, oder BS2000). Unter Anwendungssoftware werden all die Programme zusammengefasst die den Benutzer bei seinen Aufgaben helfen, z.B. sind Programme zur Textverarbeitung oder Tabellenkalkulation oder aber auch komplexe ERP-Systeme (Enterprise Ressource Planning Systeme) wie SAP R/3 hier zu nennen. Anwendungssoftware kann man noch weiter differenzieren in sogenannte Standard- und Individualsoftware. Wie der Name schon andeutet wird einmal für standardisierte Anwendungen und einmal für individuelle Anforderungen Software entwickelt. Seite: 2 von 7 Prof. Dr. Georg Herde, FH-Deggendorf Softwaretechnik Software ist in erster Linie ein Produkt, ein „weiches“ im Sinne von nicht fassbar bzw. immateriell aber es wird produziert, hergestellt und das für die unterschiedlichsten Zwecke. Software steuert Systeme, hilft bei der Lösung von Problemstellungen und ist in Produkten integriert an die man zuerst gar nicht denkt, z.B. einer Espressomaschine. D.h. das Schreiben von Software bzw. das Programmieren von Programmen geschieht letztendlich für Kunden, die diese Software einsetzen oder mit den Produkten, in denen Software steckt, umgehen wollen oder müssen. Da die softwaregesteuerten Anwendungen und Produkte und auch die Zahl der Kunden die Softwareprodukte einsetzen wollen ständig steigt spielen Qualität, Zeit und Kosten der Softwareentwicklung eine immer größere Rolle. Hierzu ein Zitat von Dijkstra, indem die Problematik gut zum Ausdruck kommt: „Als es noch keine Rechner gab, war auch das Programmieren noch kein Problem, als es dann ein paar leistungsschwache Rechner gab, war das Programmieren ein kleines Problem und nun, wo wir gigantische Rechner haben, ist auch das Programmieren zu einem gigantischen Problem geworden. In diesem Sinne hat die elektronische Industrie kein einziges Problem gelöst, sondern nur neue geschaffen. Sie hat das Problem geschaffen ihre Produkte zu nutzen.“, vgl. E. W. Dijkstra: The Humble Programmer, 1972 Der Volksmund sagt häufig: „Kleine Kinder kleine Probleme, große Kinder große Probleme“. Betrachtet man die Software als Kind der Rechnerentwicklung dann ist das Kind schon lange erwachsen und hat für seine Problembewältigung eigene Prinzipien, Verfahren und Methoden entwickelt, die jedoch ständig weiter entwickelt werden müssen. Eine gute Software erleichtert uns in vielen Lebenslagen unseren privaten und beruflichen Alltag. Manchmal allerdings wird uns auf traurige Weise bewußt, dass viele Entwicklungen zwar gut aber doch noch nicht ausgereift sind. Ich spreche von Situationen, wenn eine fehlerhafte Software zu einer technischen und zugleich menschlichen Katastrophe wird. Katastrophen die ihre Ursache in einem Fehlverhalten von Software haben hat es schon immer geben und wird es voraussichtlich auch weiterhin geben. Daran kann man jedoch erkennen wie wichtig die sorgfältige Entwicklung von Software ist. (Folie: Softwarekrise 2) Allerdings hat man die Notwendigkeit einer ingenieurmäßigen Entwicklung von Software schon relativ früh erkannt. Auslöser war die sogenannte Softwarekrise zum Ende der 60´er Jahre. Sie wurde ausgelöst durch den drastischen Verfall der Hardwarepreise – was bis heute eigentlich der Fall ist – und dem gleichzeitig enorme Anstieg der Softwarekosten. (Folie: Entwicklung der SWT) Dies war auch der Beginn der wissenschaftlichen Auseinandersetzung mit dem Problem der Softwareentwicklung. Um in unserem Bild zu bleiben, „Das Kind lernte Laufen“ auf einer Computerkonferenz der NATO im Oktober 1968 in Garmisch Partenkirchen. Hier wurde der Begriff „Software Engineering“ salonfähig. Seite: 3 von 7 Prof. Dr. Georg Herde, FH-Deggendorf Softwaretechnik Wie so oft war auch hier der militärische Nutzen der Auslöser und führte zu einem eigenständigen Wissenschaftszweig, der Softwareentwicklung. (Folie: Einordnung der Softwaretechnik 1) Möchte man die Softwaretechnik einordnen, so hat sie sich sicherlich aus der theoretischen Informatik entwickelt, wird aber eher zur praktischen Informatik gezählt. Eine Abgrenzung zu anderen Informatikbereichen ist nicht einfach. Vielleicht kann man es so verdeutlichen. (Folie: Einordnung der Softwaretechnik 2) Die Forschung im Bereich der Datenbanktheorie ist ein eigenständiger Bereich der Informatik, bei der Umsetzung, d.h. der Entwicklung eines marktfähigen Datenbanksystems ist sicherlich ingenieurmäßiges Vorgehen angesagt und somit die Softwaretechnik gefragt. Man kann hier erkennen das auch übergreifende Faktoren wie Organisation, Projektplanung eine zunehmend wichtige Rolle spielen. Die zunehmenden Anforderungen an Softwareentwickler führen nun konsequenter Weise auch zu der Einführung eines eigenständigen Studiengangs Softwaretechnik. Lassen Sie uns kurz zwei Bereiche betrachten warum eine Verbesserung bezüglich Sicherheit und Vereinfachung der Programme zur Zeit nicht in Aussicht sind: 1. Softwarekomplexität 2. Bedeutung der Softwareindustrie (Folie: Wachsende Softwarekomplexität) Stellt man die Softwarekomplexität anhand der Anzahl von Instruktionen im Programmcode dar, so sieht man an dieser Grafik, dass in der Softwareentwicklung für die Raumfahrt seit den Zeiten der Apollomissionen bis zu den modernen Space Shuttle Flügen die Anzahl der Befehle in den Programmcodes um das 3-fache von 20 auf 60 Millionen vergrößert hat. Eine ähnliche Tendenz veranschaulicht die Grafik im Bereich der Entwicklung von digitalen elektronischen Wählsystemen im Bereich der Telekommunikation. Hier hat sich die Anzahl der Programminstruktionen in 10 Jahren verfünffacht von 10 auf 50 Millionen Befehle. Ferner wachsen immer mehr, zuvor getrennte Geräte, zusammen was eine immer komplexere Software erforderlich macht, z.B. der Laserdrucker der kopieren und scannen kann aber auch Faxe empfängt und sendet. (Folie: Bedeutung der Softwareindustrie) Ein zweiter Punkt ist die wachsende Bedeutung der Softwareindustrie. In dieser Grafik, und die ist schon 6 Jahre alt, wird die Informationstechnik und Telekommunikation nur noch von der Tourismusindustrie überflügelt. Softwareprodukte dringen immer mehr in Lebensbereiche vor, die vorher ohne Software auskamen, z.B. der denkende Kühlschrank oder der Elektroherd der sich ausschaltet, wenn die Milch überkocht. Mit anderen Worten wir beobachten starke Veränderungen der Software. Komplexität und Bedeutung der Software sind in den letzten beiden Folien schon zum Ausdruck gekommen. Diese Veränderungen werden aber flankiert durch steigende Qualitätsanforderungen. Denn wenn Software über Leben und Tod wachen soll, bzw. ihr fehlerfreies Verhalten Leben bewahren soll, können die Qualitäts- und Sicherheitsanforderungen nicht hoch genug gesetzt Seite: 4 von 7 Prof. Dr. Georg Herde, FH-Deggendorf Softwaretechnik werden. Dies stellt erhöhte Anforderungen an die sichere und fehlerfreie Entwicklung von Software. Auf der einen Seite können selbst die jährlichen Produktivitätssteigerungen in der Softwareentwicklung, durch den Einsatz verbesserter Methoden und Werkzeuge, den Nachfragestau nach Softwareprodukten nicht kompensieren. Es klafft zur Zeit eine große Lücke zwischen verfügbaren IT-Personal und der Nachfrage nach ihr. Dies wiederum verstärkt den Bedarf an eine effiziente und kostengünstige Softwareentwicklung. Auf der anderen Seite wird eine zunehmende Entwicklung von Standardsoftware für immer mehr Problemstellungen festgestellt, was zu einer steigenden Akzeptanz und Anwendung von Software führt und damit wiederum zu einer steigende Nachfrage nach Softwareentwicklern, Werkzeugen und Methoden. Weiterhin gilt zu beachten, dass Software gewartet und angepasst werden muss, weil sich die Einsatzbedingungen ständig ändern und weil die Altanwendungen kompatible zu den Produkten in ihrer Umgebung gemacht werden müssen oder bleiben sollen. Eine weitere Veränderungen ist festzustellen. Die steigende Softwarekomplexität und der ständige Wartungsaufwand kann von vielen Firmen nicht mehr selbst getragen werden bzw. die Unternehmen wollen die Aufwendungen auch nicht mehr tragen, so dass verstärkt eine Fremdvergabe der Wartungsarbeiten an leistungsstarke Softwareteams zu beobachten ist. Von „der“ Softwarequalität schlechthin kann man nicht sprechen, denn jeder Anwender, Entwickler hat unterschiedliche Vorstellungen was wichtig und wesentlich ist. Man sollte besser von verschiedenen Qualitätsmerkmalen sprechen. Diesen Qualitätsmerkmalen kann man Kennzahlen zuordnen, z.B. wie lange läuft eine Softwareanwendung ohne Fehlverhalten, gemessen in Stunden, und sie bezüglich ihrer Erreichbarkeit bewerten. Z.B. acht Stunden intensive Benutzung ohne Fehlverhalten könnte ein guter Wert sein. Grundsätzlich können wir auch in Qualitätsmerkmale unterscheiden die für den Benutzer sichtbar sind und solchen Merkmalen die eher für den Entwickler erkennbar sind. Zur ersten Kategorie zählen eher die Softwareergonomie und die Zuverlässigkeit, während in die zweiten Gruppe Effizienz und Wartbarkeit zu finden sind. Nicht vergessen sollten wir jedoch die Qualität der Softwareentwicklung selbst, d.h. Qualitätsanforderungen an den Entwicklungsprozess. Da die Qualität der Software ein großes Anliegen der Softwaretechnik ist, lassen sie uns einige Merkmale dieser Qualität genauer betrachten. (Folie: Qualitätsmerkmale von SW) Trotzdem kann es bei der Beschreibung von Anforderungen zu Widersprüchen kommen, und daher wird nach dieser Definition Software wohl nie ganz korrekt funktionieren. Hier liegt aber auch eine der großen Herausforderungen an die Softwaretechnik durch die Verbesserung im Entwurf und Verfeinerung von Lasten- und Pflichtenheft möglichst exakte Anforderungsbeschreibungen zu erhalten, die messbar und überprüfbar sind In der Tat wäre eine korrekte Software 100 % zuverlässig. Aber Zuverlässigkeit wird durch einen Wahrscheinlichkeitsgrad gemessen der angibt wie lange ein Softwaresystem in einem bestimmten Zeitraum sich so verhalten hat, wie wir es erwartet haben. Eine 90%-ige Seite: 5 von 7 Prof. Dr. Georg Herde, FH-Deggendorf Softwaretechnik Zuverlässigkeit würde bedeuten, dass 90 % aller Eingabe in einem bestimmten Zeitraum zu korrekten Ausgaben geführt haben. Aber es gibt noch andere Parameter um die Zuverlässigkeit zu messen. Z.B. die „rate of failure occurrence“ gibt an wie viele Fehler in einer Betriebszeiteinheit aufgetreten sind. Oder das Maß „mean time of failure“. Diese Maßeinheit gibt an wie groß der mittlere Zeitabstand zwischen zwei aufgetretenen Fehler ist. Oder die mittlere Verfügbarkeit („availability“). Dieses Maß gibt z.B. an dass eine bestimmte Software im Mittel 23 Stunden und 55 Minuten während eines 24-Stundenbetriebs verfügbar ist. Wenn man manchmal beobachtet was Anwender einer Software oder einem Softwaresystem alles zumuten kann man davon sprechen das eine Software robust sein muss. Wir sprechen von einer robusten Software, wenn trotz unvorhergesehenen Umständen das System vernünftig reagiert und funktioniert. D.h. die Software sollte gegen möglichst viele Fehl- und Falscheingaben abgesichert sein. Dies kann unter Umstände recht schwierig sein, wenn die Eingabe von der Situation abhängt. Nehmen Sie an in der Eingabemaske der Wareneingangssoftware eines Unternehmens soll der Mitarbeiter in einem Feld eine Zahl für die gelieferte Menge eines bestimmten Artikels eintragen. Auf dem Lieferschein steht: Gelieferte Menge 1000 Stück. Der Mitarbeiter trägt die Zahl 1000 in das Feld ein, er wusste jedoch nicht das die interne Mengeneinheit für diesen Artikel ein Karton zu 100 Stück ist. D.h. das System verbucht jetzt 1000 Kartons zu je 100 Stück. Eine robuste Software würde eine Meldung auf den Bildschirm bringen: „Achtung: Mengeneinheit sind Kartons zu 100 Stück. Sind sie sicher das Ihre Eingabe richtig ist?“ Ein anderes Beispiel wäre. Was passiert, wenn der Anwender bei der Eingabe mehrere Tasten gleichzeitig betätigt. Stürzt das System ab, gibt es eine Fehlermeldung einen Warnhinweis oder wartet das System bis die richtige Eingabe kommt? Da sind wir ja eigentlich auch schon wieder beim Punkt Vertrauen. Eine gute Software macht mich darauf aufmerksam, dass ich gerade einen Fehler fabriziere. Lassen Sie uns das Thema Vertrauenswürdigkeit noch an einem anderen Beispiel verdeutlichen. Die Softwaresteuerung eines satellitengestützten Navigationssystems in einem PKW kann als vertrauenswürdig eingestuft werden, denn im Falle eines Fehler kann dies zu einer Irrfahrt des Fahrers führen der eventuell zu spät an sein Ziel kommt. Diese Software kann somit inkorrekt sein, d.h. sich nicht so verhalten wie festgelegt bzw. gewünscht, aber dennoch vertrauenswürdig sein, denn sie verursacht keine großen Schäden. Eine Software verhält sich effizient, wenn sie die zur Verfügung stehenden HardwareRessourcen ökonomisch nutzt. Rechenzeit und Speicherkapazitäten sollten der Problemstellung angepasst sein. Seite: 6 von 7 Prof. Dr. Georg Herde, FH-Deggendorf Softwaretechnik z.B. wie lange benötigt die Software zur Erledigung einer bestimmten Aufgabe oder wie viele Aufgaben werden in einer bestimmten Zeiteinheit abgeschlossen und was haben diese Vorgänge gekostet? Wie viele Prozessorsekunden benötigt die Software um aus einer 20-stelligen Zahl die 5-te Wurzel zu ziehen und wie viel Haupt- bzw. Festplattenspeicher wurden dabei beansprucht. Wenn Software leicht zu erlernen und zu benutzen ist, hat man schon einen wichtigen und richtigen Schritt in Richtung Benutzerfreundlichkeit getan. Aber es kommen noch andere Aspekte hinzu. Die Gestaltung der Benutzeroberfläche (Anzahl der Menüpunkte, Farbgestaltung, verwendete Symbole etc.) man spricht hier von Softwareergonomie. Im übertragenden Sinne gilt dies auch für die Gestaltung eines Geldoder Fahrkartenautomats. Ein anderes Beispiel ist, wenn es die Software erlaubt in verschiedene Modi zu arbeiten, der Benutzer kann in einem Beginner-, Gelegenheits- oder Expertenmodus arbeiten. Eine Software lässt sich umso leichter warten, wenn sie gut strukturiert ist. Ein strukturierter und modularer Aufbau erleichtert den Nachfolgern der Entwickler sich besser im Quellcode zurecht zu finden. Eine gute Dokumentation und wenn Änderungen im Programm protokolliert und kontrolliert werden erleichtern die Wartungsarbeiten enorm. Ist Software aber modular aufgebaut, dann sind ihre Komponenten auch leichter in andere, neue Anwendungen wieder zu verwenden, man denke hier an Softwarebibliotheken. Ist ein Modul aber in anderen Anwendungen ablauffähig, so sollte sie auch innerhalb verschiedener Umgebungen funktionsfähig sein. D.h. sie sollte auf verschiedenen Betriebssystemen oder Hardwareplattformen laufen können. Man sagt die Software ist portierbar. Wenn eine Software solche Anforderungen erfüllt, dann wird sie sehr wahrscheinlich auch kompatible zu anderen Softwareprodukten sein, d.h. die Daten der einen Anwendung können ohne Informationsverlust in anderen Anwendungen genutzt werden. Betrachten Sie z.B. die einzelnen Anwendungen innerhalb der sogenannten Bürosystemen wie z.B. StarOffice oder MS-Office. Diese Softwarepakete können ihre Dokumente (z.B. Grafiken, Texte oder Tabellen) gegenseitig nutzen und zwischen den einzelnen Anwendungen austauschen. Oder aber moderne CAD-Programme. Diese Software kann z.B. die Artikelstämme von angeschlossenen Datenbanken nutzen. So kann z.B. unmittelbar während des Designprozesses einer neuen Maschine schon eine Kostenkalkulation durchgeführt werden. Es sind auch Alternativrechnungen und Simulationen möglich, indem z.B. verwendete Materialien durch kostengünstigere Rohstoffe mit gleicher Funktionalität ersetzt werden. Seite: 7 von 7