Top Banner
Software-Entwicklung Klaus Becker 2009
44

Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

Apr 05, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

Software-Entwicklung

Klaus Becker

2009

Page 2: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

2 Software-Entwicklung

Page 3: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

3 Teil 1

Miniprojekt Lernkartei

Page 4: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

4 Projekt - Auftrag

Es soll ein Programm entwickelt werden, mit dem der Benutzer Lernkarteien erstellen und zum Lernen einsetzen kann.

Eine Lernkartei besteht aus Karteikarten, bei denen ein Stichwort auf der Vorderseite und die zugehörige Erläuterung auf der Rückseite steht.

Page 5: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

5 Projekt - Anforderungsanalyse

Ziel der ersten Phase ist es, die Anforderungen an das zu entwickelnde Programm möglichst klar zu formulieren.

Page 6: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

6 Projekt - Anforderungsanalyse

Gruppe A: Auftraggeber Gruppe B: Software-Entwickler

Schritt 1:Die Mitglieder der beiden Teilgruppen verständigen sich grob über die Funktionalitäten des zu entwickelnden Programms.

Schritt 2:

Die Gruppe der Auftraggeber formuliert möglichst präzise die Anforderungen an das zu entwickelnde Programm (z.B. in Form einer Auflistung).

Die Gruppe der Entwickler skizziert eine grafische Benutzeroberfläche, die alle gewünschten Funktionalitäten des Programms ermöglichen soll.

Schritt 3:Die beiden Teilgruppen setzen sich wieder zusammen und überarbeiten ihre Produkte. In der gemeinsamen Diskussion wird überprüft, ob die Anforderungen präzise genug formuliert sind und ob die skizzierte Benutzeroberfläche geeignet ist, die Anforderungen umzusetzen.

Page 7: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

7 Anforderungskatalog zur Lernkartei

/1/ Der Benutzer kann eine neue Lernkartei erstellen.

/2/ Der Benutzer kann eine bestehende Lernkartei laden.

/3/ Der Benutzer kann eine Lernkartei abspeichern.

/4/ Der Benutzer kann einer (evtl. leeren) Lernkartei neue Karten hinzufügen.

/5/ Der Benutzer kann Karten einer Lernkartei löschen.

/6/ Der Benutzer kann sich die Karten (Vorder- und Rückseite) einer Lernkartei schrittweise anzeigen lassen.

/7/ Der Benutzer kann in eine Art Abfragemodus wechseln und entscheiden, ob die Erläuterung oder das Stichwort abgefragt werden.

/8/ Der Benutzer kann sich im Abfragemodus nur die Rück- bzw. Vorderseite einer Karte anzeigen lassen und dann selbst die andere Kartenseite aufdecken.

/9/ (optional) Der Benutzer kann die Karten eines Kartenstapels umsortieren.

Page 8: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

8 Prototyp einer Benutzeroberfläche

Page 9: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

9 Vorgehensmodelle

Sequentielles Vorgehen:Die Schritte zur Entwicklung der Software werden streng sequentiell – einer nach dem anderen – durchlaufen. Dieses Vorgehensmodell wird auch Wasserfallmodell genannt.

Iteratives Vorgehen: Während des Entwicklungsprozesses wird eine Folge von Produktversionen erstellt. Zunächst werden nur die Kernfunktionalitäten des Systems realisiert. Anschließend werden weitere Funktionen sukzessive ergänzt.

Page 10: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

10

Projekt - Planung der Vorgehensweise

Planung der Iterationsstufen:Welche Kernfunktionalitäten sollen in einer ersten Produktversion berücksichtigt werden?Welche Erweiterungen sind in weiteren Produktversionen vorgesehen?

Page 11: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

11 Schrittweises Vorgehen

Das KernsystemIn einem ersten Iterationsschritt beschränken wir uns darauf, das Erstellen einer Lernkartei und die Navigation in der Lernkartei zu realisieren./1/ Der Benutzer kann eine neue Lernkartei erstellen.

/4/ Der Benutzer kann einer (evtl. leeren) Lernkartei neue Karten hinzufügen.

/5/ Der Benutzer kann Karten einer Lernkartei löschen.

/6/ Der Benutzer kann sich die Karten (Vorder- und Rückseite) einer Lernkartei schrittweise anzeigen lassen.

Erweiterung: Speichern und LadenIn einem zweiten Iterationsschritt sollen das Problem der Speicherung von Daten bearbeitet werden. /2/ Der Benutzer kann eine bestehende Lernkartei laden.

/3/ Der Benutzer kann eine Lernkartei abspeichern.

Erweiterung: AbfragemodusIn einem dritten Iterationsschritt soll schließlich das Abfragen realisiert werden./7/ Der Benutzer kann in ein Art Abfragemodus wechseln und entscheiden, ob die Erläuterung oder das Stichwort abgefragt werden.

/8/ Der Benutzer kann sich im Abfragemodus nur die Rück- bzw. Vorderseite einer Karte anzeigen lassen und dann selbst die andere Kartenseite aufdecken.

/9/ (optional) Der Benutzer kann die Karten eines Kartenstapels umsortieren.

Page 12: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

12 Das Kernsystem

Ziel ist es, ein Kernsystem zu entwickeln. Dieses Kernsystem soll es dem Benutzer ermöglichen, eine Lernkartei zu erstellen und innerhalb der erstellten Lernkartei zu navigieren./1/ Der Benutzer kann eine neue Lernkartei erstellen.

/4/ Der Benutzer kann einer (evtl. leeren) Lernkartei neue Karten hinzufügen.

/5/ Der Benutzer kann Karten einer Lernkartei löschen.

/6/ Der Benutzer kann sich die Karten (Vorder- und Rückseite) einer Lernkartei schrittweise anzeigen lassen.

Page 13: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

13 Projekt - Modellierung

Ein Softwaresystem muss genau geplant werden, bevor es in einer Programmiersprache realisiert werden kann. In einer Modellierungsphase werden zu diesem Zweck Modelle des Systems aus unterschiedlichen Blickrichtungen erstellt. In einem ersten Schritt versucht man, die zu Grunde liegende Miniwelt möglichst strukturgetreu in einem Modell abzubilden. In einem zweiten Schritt wird dieses Modell mit Blick auf das zu erstellende System verfeinert.

Miniwelt Modell Softwaresystem

- Abbild der Miniwelt

- Vorlage für das System

Page 14: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

14 Modellierung der Miniwelt

Identifikation der Objekte

Geeignete Objekte zur Darstellung der Miniwelt ergeben sich oft aus einer Beschreibung der Miniwelt:

"Zentraler Bestandteil einer Lernkartei sind die Karteikarten. In der Regel werden mehrere Karteikarten zu einem Kartenstapel zusammengefasst. Der Kartenstapel wird in einer bestimmten Art und Weise gemanagt (eine Karte herausnehmen ...)."

Überlege dir, welche Objekte zur Darstellung der Miniwelt geeignet wären. Beschreibe auch die Zuständigkeiten der vorgesehenen Objekte.

Miniwelt

Page 15: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

15 Modellierung der Miniwelt

Konzeption der Klassen

Konzipiere (erst grob, dann fein), welche Daten die verschiedenen Objekte mit Hilfe von Attributen verwalten sollen und welche Operationen sie durchführen können sollen. Überlege dir auch, welche Beziehungen zwischen den Objekten bestehen sollen. Erstell ein Klassendiagramm zur Verdeutlichung des objektorientierten Modells.

Miniwelt

Page 16: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

16 Modellierung der Miniwelt

Objekte und ihre Zuständigkeiten

Objekte der Klasse Karte sind für die Verwaltung der Daten einzelner Karteikarten zuständig.

Ein Objekt der Klasse Kartenstapel ist für die Verwaltung mehrerer Karteikarten (bzw. Objekte der Klasse Karte) zuständig.

Ein Objekt der Klasse Kartenmanager ist für das Kartenmanagement zuständig, z.B. für das Auswählen einzelner Karten.

Page 17: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

17 Modellierung der Miniwelt

Dokumentation der Klasse KartenstapelZuständigkeit: Ein Objekt der Klasse Kartestapel erzeugt und verwaltet Objekte der Klasse Karte.

Attribut karten: Liste von Referenzen zur Verwaltung von Objekten der Klasse Karte

Konstruktor Kartenstapel(): erzeugt ein Kartestapel-Objekt, das einen leeren Kartenstapel beschreibt

Methode karteHinzufuegen(bezeichner, erlaeuterung): Prozedur, die ein neues Objekt der Klasse Karte erzeugt und in die Liste karten (am Ende der Liste) einfügt

Methode karteLoeschen(index): Prozedur, die das Element mit dem übergebenen Index aus der Liste karten entfernt (sofern der Index im erlaubten Bereich liegt)

Methode getKarte(index): Funktion, die das Karte-Objekt mit dem übergebenen Index zurückliefert (sofern der Index im erlaubten Bereich liegt)

Page 18: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

18 Modellierung der GUI

Die grafische Benutzeroberfläche soll von einem Objekt der Klasse GUILernkartei verwaltet werden. Beachte das Prinzip Trennung zwischen Datenmodell und GUI und beschreibe, in welcher Beziehung diese Klasse zu den Datenmodell-Klassen steht.

Mache dir die Zuständigkeit eine Objekts der Klasse GUILernkartei klar und überlege dir, was dieses Objekt verwalten muss bzw. welche Verarbeitungen es vorsieht.

Beschreibe möglichst genau, wie das System bei den verschiedenen Ereignissen reagieren soll. Kontrolliere auch, ob die Datenmodell-Objekte alle hierfür benötigten Methoden bereit stellen.

Page 19: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

19 Modellierung der GUI

Die grafische Benutzeroberfläche soll von einem Objekt der Klasse GUILernkartei verwaltet werden. Nach dem Prinzip Trennung zwischen Datenmodell und GUI soll dieses Objekt Zugriff auf die Datenmodell-Objekte haben, ein umgekehrter Zugriff soll hingegen nicht möglich sein.

Page 20: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

20 Modellierung der GUI

Mit Hilfe einer Zustandstabelle soll das gewünschte Verhalten der grafischen Benutzeroberfläche beschrieben werden. Vorerst sollen nur die Zustände 0 und 1 betrachtet werden.

Die genaue Beschreibung der Funktionalitäten der GUI liefert auch eine Kontrolle, ob die Datenmodell-Objekte alle hierfür erforderlichen Methoden bereitstellen.

Page 21: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

21 Projekt - Implementierung

Wenn man das Prinzip Trennung zwischen Datenmodell und GUI beachtet hat, dann können Datenmodell und grafische Benutzeroberfläche unabhängig voneinander implementiert werden. Es bietet sich in diesem Fall an, arbeitsteilig vorzugehen.

Bildet Programmiererteams, die aus 2 bis 3 Mitgliedern bestehen. Jeweils zwei Teams sollen arbeitsteilig das modellierte Kernsystem implementieren. Eines der beiden Teams ist für die Implementierung des Datenmodells zuständig, das andere Team für die Implementierung der grafischen Benutzeroberfläche.

Bei der Implementierung soll darauf geachtet werden, dass der Quelltext verständlich ist (z.B. durch die Verwendung von Kommentaren). Das ist bei arbeitsteiligem Vorgehen von besonderer Bedeutung, da Programmierteams hier Programme verwenden, die sie nicht selbst entwickelt haben.

Page 22: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

22 Projekt - Testen

Testfälle

In der Regel reicht es nicht, ein Programm nur einmal schnell zu testen. Vielmehr muss das Verhalten des Programms systematisch untersucht werden. Es hat sich bewährt, im Vorfeld Testfälle festzulegen.

/1/ Erzeugung des Kartenstapel- und Kartenmanager-Objekts

/2/ Hinzufügen von Karten-Objekten

/3/ Löschen von Karten-Objekten (am Anfang / am Ende / in der Mitte des Kartenstapels)

/4/ Navigation im Kartenstapel (an den Anfang / an das Ende / eine Karte weiter / eine Karte zurück)

Module unabhängig Testen

Bei komplexeren Programmen testet man zunächst die einzelnen Bausteine unabhängig voneinander, bevor man das Zusammenspiel der Bausteine testet.

Gegenseitiges Testen

Oft ist es günstig, wenn ein Programm von Personen getestet wird, die selbst das Programm nicht entwickelt haben. Im vorliegenden Fall könnte etwa das Datenmodell-Entwicklerteam die GUI-Implementierung und umgekehrt das GUI-Entwicklerteam die Datenmodell-Implementierung testen.

Page 23: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

23 Testen

...# Erzeugung der Verwaltungsobjektekartenstapel = Kartenstapel()kartenmanager = Kartenmanager()kartenmanager.setKartenstapel(kartenstapel)printKartenstapel(kartenmanager)# Karten hinzufügenkartenmanager.karteHinzufuegen('dog', 'Hund')kartenmanager.karteHinzufuegen('cat', 'Katze')kartenmanager.karteHinzufuegen('mouse', 'Maus')kartenmanager.karteHinzufuegen('cow', 'Kuh')printKartenstapel(kartenmanager)# Kartenstapel durchlaufenkartenmanager.anfangKartenstapel()printAktuelleKarte(kartenmanager)...

...def ButtonLoeschenClick(): pass """if zustand.get() == 1: kartenmanager.aktuelleKarteLoeschen() anzeigeKarte(zustand.get())"""...

Test des Datenmodells

Test der GUI

Page 24: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

24 Testen

Dokumentation der Testergebnisse

/1/ Erzeugung des Kartenstapel- und Kartenmanager-Objekts

/2/ Hinzufügen von Karten-Objekten

/3/ Löschen von Karten-Objekten (am Anfang / am Ende / in der Mitte des Kartenstapels)

/4/ Navigation im Kartenstapel (an den Anfang / an das Ende / eine Karte weiter / eine Karte zurück)

Page 25: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

25 Erweiterungen

Erweiterung: Speichern und LadenIn einem zweiten Iterationsschritt sollen das Problem der Speicherung von Daten bearbeitet werden. /2/ Der Benutzer kann eine bestehende Lernkartei laden.

/3/ Der Benutzer kann eine Lernkartei abspeichern.

Erweiterung: AbfragemodusIn einem dritten Iterationsschritt soll schließlich das Abfragen realisiert werden./7/ Der Benutzer kann in ein Art Abfragemodus wechseln und entscheiden, ob die Erläuterung oder das Stichwort abgefragt werden.

/8/ Der Benutzer kann sich im Abfragemodus nur die Rück- bzw. Vorderseite einer Karte anzeigen lassen und dann selbst die andere Kartenseite aufdecken.

/9/ (optional) Der Benutzer kann die Karten eines Kartenstapels umsortieren.

Ziel ist es jetzt, das System so zu erweitern, dass auch die restlichen Anforderungen /2/, /3/, /7/, /8/ und ggf. /9/ erfüllt werden. Es bietet sich an, diese Erweiterungen arbeitsteilig zu realisieren.

Page 26: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

26 Erweiterungen

Erweiterung: Speichern und LadenIn einem zweiten Iterationsschritt sollen das Problem der Speicherung von Daten bearbeitet werden. /2/ Der Benutzer kann eine bestehende Lernkartei laden.

/3/ Der Benutzer kann eine Lernkartei abspeichern.

Erweiterung: AbfragemodusIn einem dritten Iterationsschritt soll schließlich das Abfragen realisiert werden./7/ Der Benutzer kann in ein Art Abfragemodus wechseln und entscheiden, ob die Erläuterung oder das Stichwort abgefragt werden.

/8/ Der Benutzer kann sich im Abfragemodus nur die Rück- bzw. Vorderseite einer Karte anzeigen lassen und dann selbst die andere Kartenseite aufdecken.

/9/ (optional) Der Benutzer kann die Karten eines Kartenstapels umsortieren.

Ziel ist es jetzt, das System so zu erweitern, dass auch die restlichen Anforderungen /2/, /3/, /7/, /8/ und ggf. /9/ erfüllt werden. Es bietet sich an, diese Erweiterungen arbeitsteilig zu realisieren.

Page 27: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

27 Hinweise zum Speicherformat

<?xml version="1.0" encoding="iso-8859-1"?><kartenstapel><karte><stichwort>dog</stichwort><erläuterung>Hund</erläuterung></karte><karte><stichwort>cat</stichwort><erläuterung>Katze</erläuterung></karte>'...</kartenstapel>

Es gibt eine Vielzahl an Möglichkeiten, Datenformate zur Speicherung der Informationen, die die Karteikarten enthalten, zu entwerfen. Wir werden hier das folgende XML-basierte Datenformat benutzen.

Page 28: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

28 Hinweise zum Abfragemodus

Mit Hilfe einer Zustandstabelle wird das gewünschte Verhalten der grafischen Benutzeroberfläche beschrieben.

Page 29: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

29 Teil 2

Software-Entwicklung als Prozess

Page 30: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

30 Anforderungsanalyse

Software-Entwicklung ist ein Vorgang, bei dem in der Regel ein Auftraggeber einen Software-Entwickler beauftragt, ein Produkt mit bestimmten Eigenschaften zu entwickeln. In der Phase der Anforderungsanalyse legen die Software-Entwickler gemeinsam mit ihrem Auftraggeber möglichst präzise die Anforderungen an die zu entwickelnde Software fest. Hierzu wird oft eine Art Prototyp des Systems erstellt und ein Lastenheft formuliert.Ein Prototyp dient dazu, bestimmte Aspekte eines zu entwickelnden Softwaresystems vor der Realisierung zu überprüfen. Häufig wird ein Prototyp der Benutzungsoberfläche erstellt. Anhand dieses Prototyps können die Entwickler mit den Auftraggebern diskutieren, inwieweit deren Wünsche beachtet und umgesetzt wurden.

Ein Lastenheft beschreibt möglichst präzise die Anforderungen an ein zu entwickelndes Softwaresystem aus der Sicht der Auftraggeber.

/1/ Der Benutzer kann eine neue Lernkartei erstellen.

/2/ Der Benutzer kann eine bestehende Lernkartei laden.

...

Page 31: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

31 Modellierung

Miniwelt Modell Softwaresystem

- Abbild der Miniwelt

- Vorlage für das System

Ein Softwaresystem muss genau geplant werden, bevor es in einer Programmiersprache realisiert werden kann. In einer Modellierungsphase werden zu diesem Zweck Modelle des Systems aus unterschiedlichen Blickrichtungen erstellt. In einem ersten Schritt versucht man, die zu Grunde liegende Miniwelt möglichst strukturgetreu in einem Modell abzubilden. In einem zweiten Schritt wird dieses Modell mit Blick auf das zu erstellende System verfeinert.

Page 32: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

32 Implementierung

In der Implementierungssphase werden die entwickelten Modelle in einer Programmiersprache umgesetzt.

# Klassen zur Modellierung einer Lernkarte# Autor: ...# Datum: ...

# Deklaration der Klasse Karte

class Karte(object): def __init__(self, stichwort, erlaeuterung): self.stichwort = stichwort self.erlaeuterung = erlaeuterung

...

Page 33: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

33 Testen

In der Testphase wird schließlich überprüft, ob das entwickelte System die im Vorfeld formulierten Anforderungen erfüllt.

In der Regel reicht es nicht, ein System nur einmal zu testen. Vielmehr muss das Verhalten des Systems systematisch untersucht werden. Es hat sich bewährt, im Vorfeld Testfälle festzulegen, die dann schrittweise abgeprüft werden.

...# Erzeugung der Verwaltungsobjektekartenstapel = Kartenstapel()kartenmanager = Kartenmanager()kartenmanager.setKartenstapel(kartenstapel)printKartenstapel(kartenmanager)# Karten hinzufügenkartenmanager.karteHinzufuegen('dog', 'Hund')kartenmanager.karteHinzufuegen('cat', 'Katze')kartenmanager.karteHinzufuegen('mouse', 'Maus')kartenmanager.karteHinzufuegen('cow', 'Kuh')printKartenstapel(kartenmanager)# Kartenstapel durchlaufenkartenmanager.anfangKartenstapel()printAktuelleKarte(kartenmanager)...

/1/ Der Benutzer kann eine neue Karte erstellen und dem Kartenstapel hinzufügen. (ok)

...

Page 34: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

34 Dokumentation

Dokumentation erfolgt mit dem Ziel, Information über Maßnahmen, Entscheidungen, Ergebnisse eines Software-Entwicklungsprozesses bereitzustellen.

Diese Information ist für die Software-Entwickler von entscheidender Bedeutung. Je komplexer das zu entwickelnde System ist und je mehr Personen daran beteiligt sind, desto schwieriger wird es, alle Details des Software-Entwicklungsprozesses zu überblicken. Dokumentation hilft hier, wichtige Informationen für alle Beteiligten zum Nachschauen bereitzustellen.

Dokumentation sollte stets parallel zum Entwicklungsprozess erfolgen. Während der einzelnen Entwicklungsphasen sollten alle wichtigen konzeptionellen Entscheidungen festgehalten werden:

In der Anforderungsanalysephase wird ein Lastenheft erstellt und evtl. ein Prototyp bereitgestellt.

In der Modellierungsphase werden die entwickelten Modelle möglichst genau beschrieben.

Die Implementierungsphase liefert ein kommentiertes Programm.

In der Testphase werden sämtliche untersuchten Testfälle angegeben.

Page 35: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

35 Vorgehensmodelle

Sequentielles Vorgehen:Die Schritte zur Entwicklung der Software werden streng sequentiell – einer nach dem anderen – durchlaufen. Dieses Vorgehensmodell wird auch Wasserfallmodell genannt.

In der Praxis ist dieses Vorgehen kaum einsetzbar, da in späteren Phasen oft Erkenntnisse gewonnen werden, die eine Überarbeitung früher gewonnener Ergebnisse erforderlich machen.

Page 36: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

36 Vorgehensmodelle

Iteratives Vorgehen: Während des Entwicklungsprozesses wird eine Folge von Produktversionen erstellt. Zunächst werden nur die Kernfunktionalitäten des Systems realisiert. Anschließend werden weitere Funktionen sukzessive ergänzt. Diese Vorgehensweise wird evolutionär genannt.

Die Entwicklung der einzelnen Produktversionen wird jeweils in weitere Phasen aufgeteilt.

Page 37: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

37 Teil 3

Software als Produkt

Page 38: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

38 Kosten für Software

Software ist ein Produkt, das bei der Herstellung hohe Kosten verursachen kann und daher in der Regel auch Geld kostet.

Aufgabe:Das Unternehmen Microsoft beschäftigt etwa 10000 gutverdienende Informatiker zur Weiterentwicklung ihrer Windows-Software. Schätze ab, welche Kosten diesem Unternehmen allein hierdurch jährlich entstehen.

Aufgabe:Einer Schätzung zu Folge war in Deutschland im Jahr 2004 unlizensierte Software im Wert von 1,84 Milliarden Euro im Einsatz. Warum wird wohl Software vielfach so unrechtmäßig genutzt? Welche Folgen hätte es wohl, wenn Software - wie andere Produkte auch - nur noch rechtmäßig genutzt würde? Stelle hierzu Vermutungen auf.

Page 39: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

39 Softwarelizenzen

Software ist ein Produkt, dessen Nutzung durch Nutzungsrechte (Lizenzen) geregelt wird.

Bei kommerzielle Lizenzen muss für die Nutzung von Software ein bestimmter Geldbetrag erstattet werden. Software-Firmen, die ihre Software-Produkte auf diese Weise vertreiben, bestreiten mit den erworbenen Lizenzbeträgen ihre Kosten. Wenn man bedenkt, dass die Herstellung von Software sehr viel Arbeit erfordert, so wird klar, dass die Kosten für ein Software-Produkt sehr hoch sein können. Eine kommerzielle Lizenz kann nur dann günstig ausfallen, wenn sehr viele Nutzer tatsächlich eine solche Lizenz erwerben und nicht - wie es nach wie vor gängige Praxis ist - die Software illegal nutzen.

Freeware wird Nutzern kostenlos zur Verfügung gestellt.

Eine besondere Form von Freeware ist die sogenannte freie Software. Sie räumt den Nutzern zusätzlich das Recht ein, die Software weiterzuverarbeiten. Die Nutzung freier Software wird oft durch die GNU General Public License geregelt. Diese Lizenz verlangt, dass Nutzer der Software veränderte Produkte ebenfalls als freie Software zur Verfügung stellen und den Quelltext der Software offenlegen.

Page 40: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

40 Fehler in der Software

Beispiel: Hartz IV

Winter 2004: Hunderttausende Hartz IV Empfänger erhalten kein Geld. Die Ursache fand man in der Software A2LL: Kurze Kontonummern füllte A2LL hinten (anstatt vorne) mit Nullen auf, um auf die üblichen zehn Stellen zu kommen. Hierdurch wurden sie falsch, die Geldbeträge konnten nicht zugestellt werden.´

Beispiel: Ariane 5

4. Juni 1996: Die Rakete Ariane 5 muss kurz nach dem Start gesprengt werden. Ein Fehler in der Software führte dazu, dass es beim Umrechnen eines 64-Bit-Gleitkomma-Wertes zu einem Überlauf kam und Daten daraufhin falsch interpretiert wurden.

Beispiel: Therac 25

1985-1987: Das Bestrahlungsgerät Therac-25 tötet mehrere Patienten durch eine überhöhte Strahlendosis. Als Ursache stellte sich heraus, dass die Software nur dann mehrere Tasks fehlerfrei gleichzeitig bearbeiten konnte, wenn der Benutzer die Befehle langsam eingab.Aufgabe:Wie schlimm sind Fehler in der Software? Beurteile dies - auch unter Berücksichtigung der oben beschriebenen Beispiele.

Page 41: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

41 Fehler in der Software

Softwarefehler sind nichts außergewöhnliches bei komplexeren Softwaresystemen. Gute Software enthält heutzutage nur noch etwa einen Fehler in 4000 Programmzeilen. Bei einem Office-Paket mit etwa 10 Millionen Programmzeilen muss man also mit etwa 2500 Fehlern rechnen. Das merkt man von Zeit zu Zeit auch, wenn das Programm nicht genau das macht, was es machen soll.

Warum ist es so schwer, fehlerfreie Software-Produkte zu entwickeln? Hierfür gibt es sicher eine Reihe von Gründen.

Ein Grund ist sicher die Komplexität der Aufgabe bei größeren Software-Entwicklungsprojekten. Software-Produkte sind oft so komplex, dass kein Entwickler die Abhängigkeiten der verschiedenen Bausteine mehr ganz überschauen kann. Das führt dann dazu, dass es zu Systemzuständen kommen kann, die keiner der Entwickler bedacht hatte.

Ein weiterer Grund liegt wohl daran, dass Software von Menschen entwickelt wird, die manchmal auch Fehler machen. Mit Hilfe von Tests sollen solche Fehler natürlich entdeckt werden. Tests bieten in der Regel jedoch keine hundertprozentige Gewähr, dass Programmteile fehlerfrei sind.

Die Bedingungen, unter denen Software erstellt wird, sind wohl auch manchmal für Fehler verantwortlich. Software-Produkten müssen meist termingerecht erstellt werden. Es kommt zu Zeitnot, wenn der Zeitansatz für die Entwicklung zu knapp bemessen war oder - was recht häufig vorkommt - wenn sich während der Entwicklung neue Anforderungen an das Produkt ergeben.

Page 42: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

42 Gütekriterien für Software

Was ist gute Software? Mit Hilfe von Gütekriterien versucht man, die Qualität von Software zu beschreiben.

Folgende Kriterien werden üblicherweise zur Beschreibung von Softwarequalität herangezogen:

Funktionalität: Erfüllt die Software die geforderten Funktionen?

Zuverlässigkeit: Ist die Software fehlerfrei und toleriert sie Fehleingaben?

Benutzbarkeit: Ist die Software leicht bedienbar?

Effizienz: Ist der Zeit- und Speicherbedarf angemessen?

Änderbarkeit: Kann die Software mit geringem Aufwand korrigiert oder erweitert werden?

Übertragbarkeit: Vermeidet die Software programmiersprachenspezifische Elemente?

Page 43: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

43 Verantwortung für Software(fehler)

P. ist an der Entwicklung einer Software beteiligt, die im miltärischen Bereich eingesetzt werden soll. Die Firma, die die Software entwickelt, ist im Rückstand, der vereinbarte Abgabetermin für die Software ist kaum noch zu halten. Die Firmeninhaber drängen zur Eile. P. ist jedoch der Ansicht, dass die Software nicht hinreichend getestet ist und dass einige konzeptionelle Entscheidungen noch einmal überdacht werden sollten.

Aufgabe:

Welche Folgen könnte es für die Firma haben, wenn das zu entwickelnde Produkt nicht rechtzeitig fertig wird?

Welche Folgen könnte es für P. haben, wenn er/sie die Firmenleitung / die Öffentlichkeit informiert, dass das entwickelte Produkt möglicherweise grundlegende Schwächen hat?

Wie würdest du an P.s Stelle handeln?

Page 44: Software-Entwicklung Klaus Becker 2009. 2 Software-Entwicklung.

44 Verantwortung für Software

Verantwortung übernimmt man ...

... für etwas (Handlungsfolgen, Handlungen, Personen, Güter etc.),

... in einer Eigenschaft / Funktion (als bestimmtes Handlungsobjekt),

... vor jemandem (Instanz: Personen, Natur, Gott, Gesellschaft, Staat),

... unter bestimmten Kriterien (Werten, Prinzipien, Maßstäben),

... im Blick auf (Schaden / Nutzen, Pflichterfüllung, Haftung etc.).

Quelle: M. Peschek: Ethik und Informatik. In: J. Friedrich u. a.: Informatik und Gesellschaft. Heidelberg 1995.

Verantwortung übernimmt man also für Software-Produkte in der Eigenschaft als Software-Entwickler vor z.B. der Gesellschaft unter Berücksichtigung z.B. ethischer Richtlinien im Hinblick auf die Möglichkeit, dass sie größeren Schaden anrichten können.

Ethische Richtlinien geben Orientierung bei Handlungsentscheidungen, die Fragen der Verantwortlichkeit berühren. Aufgabe:Informiere dich über ethische Leitlinien der Gesellschaft für Informatik. Welche Empfehlung würden diese Richtlinien P. geben?