skript1

Werbung
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
Herunterladen