31.12.2013 Aufrufe

7. Manuelle Prüfverfahren - Fachbereich Informatik - Hochschule ...

7. Manuelle Prüfverfahren - Fachbereich Informatik - Hochschule ...

7. Manuelle Prüfverfahren - Fachbereich Informatik - Hochschule ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>Hochschule</strong> Darmstadt<br />

<strong>Fachbereich</strong> <strong>Informatik</strong><br />

Nachtrag aus Objektorientierte Analyse<br />

und Design<br />

<strong>Manuelle</strong> <strong>Prüfverfahren</strong> und Entwurfsmuster<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 1


<strong>Hochschule</strong> Darmstadt<br />

<strong>Fachbereich</strong> <strong>Informatik</strong><br />

Software Engineering<br />

<strong>Manuelle</strong> <strong>Prüfverfahren</strong><br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 2


<strong>7.</strong> <strong>Manuelle</strong> <strong>Prüfverfahren</strong><br />

Lernziel <strong>Manuelle</strong> <strong>Prüfverfahren</strong><br />

• Sie sollen in diesem Kapitel verstehen,<br />

warum manuelle Prüfungen notwendig sind<br />

warum Reviews oft "diplomatische Missionen" sind<br />

was ein Review ausmacht und wie es abläuft<br />

dass es verschiedene manuelle <strong>Prüfverfahren</strong> gibt<br />

Anschließend können Sie ein Review durchführen !<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 3


<strong>7.</strong> <strong>Manuelle</strong> <strong>Prüfverfahren</strong><br />

Quiz: Welches Design ist besser?<br />

• Entwurf A • Entwurf B<br />

Lied<br />

Interpret-Name: String<br />

Intepret-Wohnort: String<br />

Album-Name: String<br />

Album-Cover: Bild<br />

Titel: String<br />

Titel-Länge: Int<br />

Interpret<br />

Name: String<br />

Wohnort: String<br />

1<br />

1..*<br />

Album<br />

Name: String<br />

Cover: Bild<br />

1..*<br />

Lied<br />

Titel: String<br />

Titel-Laenge: Int<br />

Wie kann man das erkennen ?<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 4


<strong>7.</strong> <strong>Manuelle</strong> <strong>Prüfverfahren</strong><br />

Warum manuelle <strong>Prüfverfahren</strong>?<br />

Was muss geprüft werden?<br />

• Semantik, Konsistenz, Syntax, Vollständigkeit, Produktqualität<br />

durch Einsatz konstruktive Qualitätssicherung (geeigneter Verfahren beim<br />

Entwickeln z. B. Case-Tools)<br />

durch Einsatz analytische Prüfmethoden<br />

- dynamische Prüfmethoden<br />

• wie Tests<br />

- statische Prüfmethoden<br />

• wie automatische <strong>Prüfverfahren</strong> (Syntax-Checker, Konsistenz-Checker, autom. Codeanalyse)<br />

• <strong>Manuelle</strong> <strong>Prüfverfahren</strong> (Reviews) – insbes. für Prüfung Semantik, Qualität, Vollständigkeit<br />

manche Fehler oder Qualitätsmängel können nur durch<br />

manuelle Prüfungen gefunden werden<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 5


<strong>7.</strong> <strong>Manuelle</strong> <strong>Prüfverfahren</strong><br />

Was wird geprüft?<br />

• Alle Arbeitsergebnisse!<br />

Anforderungen, Spezifikation<br />

Design<br />

Code<br />

Testfälle<br />

Dokumentation<br />

Projektpläne<br />

Prozessbeschreibungen<br />

Veröffentlichungen, Webauftritte<br />

…<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 6


<strong>7.</strong> <strong>Manuelle</strong> <strong>Prüfverfahren</strong><br />

Was ist ein Review? Grundidee<br />

• Dokumente (Arbeitsergebnisse) werden in Reviews validiert, d. h.:<br />

Sie werden den Mitgliedern des Review-Teams zur Durchsicht zugeleitet<br />

Die Dokumente werden (oft unter Zuhilfenahme von Checklisten) von jedem<br />

einzelnen Review-Team-Mitglied durchgearbeitet und die Fehler oder<br />

Unklarheiten notiert<br />

Gemeinsames Durchsprechen der Dokumente und Diskussion der Fehler und<br />

Unklarheiten<br />

Protokollieren der Fehler (und evtl. Lösungsideen)<br />

• Verbesserung der Fehler durch den Autor (nicht in der Gruppe!)<br />

• Wesentliche Arten von manuellen <strong>Prüfverfahren</strong>:<br />

Walkthrough<br />

Review<br />

Inspektion<br />

Es gibt noch diverse<br />

Varianten davon...<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 7


<strong>7.</strong> <strong>Manuelle</strong> <strong>Prüfverfahren</strong><br />

Phasen einer manuellen Prüfung<br />

0) Prüfanforderung<br />

Autor stößt den Prüfprozess an<br />

Phasen sind<br />

unterschiedlich<br />

ausgeprägt – je nach<br />

Art des <strong>Prüfverfahren</strong>s<br />

1) Vorbereitung<br />

Teilnehmer und deren Rollen festlegen<br />

Termine festlegen<br />

Dokumente verteilen<br />

Dokumente gemäß der zugewiesenen Rolle durcharbeiten<br />

2) Sitzung<br />

Mehrere Personen untersuchen gemeinsam ein Arbeitsergebnis<br />

Defekte sammeln<br />

Protokollieren<br />

Modus für die Weiterarbeit festlegen (Freigabe)<br />

3) Nachbearbeitung<br />

Korrekturen einarbeiten<br />

Ergebnis evtl. erneut zur Prüfung anmelden<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 8


<strong>7.</strong> <strong>Manuelle</strong> <strong>Prüfverfahren</strong><br />

1) Vorbereitung<br />

• Teilnehmer festlegen<br />

Endbenutzer, fachverwandte Spezialisten, Ahnungslose,…<br />

• Jeder Reviewteilnehmer bekommt folgende Unterlagen:<br />

Prüfobjekt (z.B. OOD-Modell)<br />

Ursprungsobjekt (z.B. OOA-Modell)<br />

Erstellungsregeln (z.B. Methode zur Erstellung eines OOD-Modells)<br />

Fragenkatalog (z.B. "Wurde Regel xxx eingehalten?")<br />

• Individuelle Vorbereitung<br />

Jedes Mitglied arbeitet die Unterlagen individuell durch<br />

Die Vorbereitung muss bis zur Sitzung abgeschlossen sein.<br />

Jeder Prüfer sucht nach rollenspezifischen Defekten (z.B. als User, Wartung,<br />

Gesamtsystem-Verantwortlicher).<br />

Gefundene Defekte sind zu notieren.<br />

Die empfohlene Arbeitsgeschwindigkeit ist zu beachten<br />

(ca. 5-10 Seiten/h – Qualität vor Quantität!).<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 9


<strong>7.</strong> <strong>Manuelle</strong> <strong>Prüfverfahren</strong><br />

2) Sitzung<br />

• Ablauf der Sitzung<br />

Entweder Zeile für Zeile durcharbeiten und gefundene Defekte dem<br />

Protokollführer melden oder nur in der Vorbereitung gefundene Defekte melden.<br />

wie ein Brainstorming<br />

- ohne Diskussion der einzelnen Punkte<br />

- keine Lösungsvorschläge, keine Kommentierung potenzieller Defekte<br />

• Das Protokoll soll folgende Punkte enthalten:<br />

Ort, Datum, Zeit, Moderator, Sonst. Teilnehmer, Prüfobjekt, Referenzunterlagen<br />

anonym für jeden Teilnehmer: Die benötigte Zeit für Vorbereitung, die Anzahl<br />

schwerer Fehler und die Anzahl geprüfter Seiten<br />

Defekte mit folgenden Angaben:<br />

- Ort und Kurzbeschreibung des Defekts<br />

- Bezug zu Regeln oder Checklisten<br />

- leichter oder schwerer Fehler<br />

- in der Sitzung identifiziert oder bei der Vorbereitung<br />

- Verbesserungsvorschläge / Fragen an den Autor<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 10


<strong>7.</strong> <strong>Manuelle</strong> <strong>Prüfverfahren</strong><br />

3) Überarbeitung<br />

• Der Autor überarbeitet das Prüfobjekt<br />

Änderungen werden an Hand des Protokolls eingearbeitet<br />

im Protokoll wird notiert, welche Aktionen pro Protokolleintrag unternommen<br />

wurden<br />

Evtl. müssen Änderungsanträge für Referenzprodukte gestellt werden<br />

• Freigabe des Prüfobjekts<br />

evtl. erst nach erneuter Überprüfung<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 11


<strong>7.</strong> <strong>Manuelle</strong> <strong>Prüfverfahren</strong><br />

Varianten von Reviews<br />

• Je nach Anwendung verwendet man verschieden aufwändige <strong>Prüfverfahren</strong><br />

für unkritische Anwendungen: "Walkthrough"<br />

- z.B. Forschungsprototyp, Vorversionen etc.<br />

• schnelle Durchsicht mit wenigen Beteiligten im Hinblick auf grundlegende (Denk)fehler<br />

• 2-3 Teilnehmer, Autor ist auch Moderator, wenig (keine) Vorbereitung, Prüfobjekt wird vom<br />

Autor vorgetragen, Autor entscheidet. (Variante: Durcharbeiten durch Gutachter und nur<br />

Durchsprache von Fehlern, Verbesserungsvorschlägen und Fragen)<br />

für normalkritische Anwendungen: "Review"<br />

- z.B. Textverarbeitung, Computerspiel, Entwurfs-Tool etc.<br />

• mittelgründliche Untersuchung mit grundlegenden Formalitäten<br />

• 3 - 4 Teilnehmer, spezieller Moderator, Protokollführer, Autor ist passiv, zusätzl. Planung,<br />

Vorbereitung und Protokoll, Prüfteam gibt Empfehlung an Manager, evtl. Nachprüfung<br />

für kritische Anwendungen: "Formale Inspektion"<br />

- z.B. Steuersoftware von Flugzeugen, ABS, Kontrolle eines Atomkraftwerks etc.<br />

• besonders gründliche und formale Untersuchung mit vielen Beteiligten<br />

• 4 – 5 Teilnehmer, zusätzl. Vorleser, zusätzl. formale Eingangsprüfung und Freigabe.<br />

Achtung! Der Begriff Review wird oft als Oberbegriff für alle<br />

manuellen <strong>Prüfverfahren</strong> verwendet.<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 12


<strong>7.</strong> <strong>Manuelle</strong> <strong>Prüfverfahren</strong><br />

Formular zur Durchführung von Reviews: mit Beispiel<br />

Ort, Datum Darmstadt, 01.10.13<br />

Reviewdauer Start: 14:00 Ende: 16:00<br />

Autor, Moderator, Gutachter A. Utor (A), M. Oterator (M), P. Rüfer (G), G. Utachter (G)<br />

Prüfobjekt<br />

Referenzunterlagen<br />

CocktailPro_Entwuf_V0.9<br />

Doku OOA CocktailPro_V1.0<br />

Geschäftspräsentation Cocktail4U vom 10.09.13<br />

Use Cases CocktailPro V1.0<br />

Fortsetzung nächste Folie<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 13


<strong>7.</strong> <strong>Manuelle</strong> <strong>Prüfverfahren</strong><br />

Formular zur Durchführung von Reviews: mit Beispiel<br />

Schwere Defekte<br />

protokolliert (M)<br />

Leichte Defekte<br />

protokolliert (m)<br />

Verbesserungsvorschläge<br />

(I)<br />

Fragen an<br />

den Autor (?)<br />

Neu entdeckte<br />

Defekte (Nm)<br />

Reviewergebnis<br />

3 8 1 2 2<br />

Freigabe nach Überarbeitung<br />

Reviewprotokoll<br />

Lfd. Nr.<br />

Klassifikation<br />

Beschreibung Relevante Regel /<br />

Checkliste<br />

1. m Namenskonvention verletzt durch Klasse Rezeptbuch Naming Conventions<br />

2. M Assoziation zwischen m_Waage und m_Dosierer fehlt Doku OOA S.17<br />

……..<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong><br />

14


<strong>7.</strong> <strong>Manuelle</strong> <strong>Prüfverfahren</strong><br />

Qualitative Nutzenbetrachtung für Reviews<br />

• Aufwand und Nutzen von Reviews (Erfahrungswerte)<br />

Aufwand<br />

- 15-20% des Erstellungsaufwands des Prüfobjekts<br />

- Die Trainings- und Einführungskosten fallen pro Team nur einmal an<br />

Nutzen<br />

- 60-70% der Fehler in einem Dokument werden gefunden<br />

- Reduktion der Fehlerkosten in der Entwicklung von 75% und mehr<br />

- Nettoeinsparungen für die Entwicklung ca. 20%, für die Wartung ca. 30%<br />

- Korrektur von Fehlern in frühen Phasen verursachen nur einen Bruchteil der Kosten<br />

als wenn Fehler erst bei Abnahme oder nach Einführung gefunden werden<br />

• „Return on Investment“ (RoI)<br />

Der RoI ergibt sich aus dem Verhältnis der ersparten Ingenieurstunden dividiert<br />

durch die Kosten. Dieser Wert ist viel besser als für viele andere Investitionen.<br />

Die Investition zahlt sich schnell aus<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 15


<strong>7.</strong> <strong>Manuelle</strong> <strong>Prüfverfahren</strong><br />

Voraussetzungen für manuelle Prüfmethoden<br />

• Planung<br />

Feste Einplanung des notwendigen Aufwands und der benötigten Zeit<br />

Jedes Mitglied des Prüfteams muss in der Prüfmethode geschult sein<br />

keine Überlastung einzelner Mitarbeiter durch Teilnahme an Prüfungen<br />

• Organisation & Kultur<br />

Hohe Priorität der Prüfungen beim Projektleiter / im Management / in der<br />

Mannschaft<br />

Kurzfristige Durchführung der Prüfung<br />

Prüfungsergebnisse werden nicht eingesetzt zur Beurteilung von Mitarbeitern<br />

Vorgesetzte (und Zuhörer) sollen an den Prüfungen nicht teilnehmen<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 16


<strong>7.</strong> <strong>Manuelle</strong> <strong>Prüfverfahren</strong><br />

Der Mensch in manuellen Prüfmethoden<br />

• Wichtige Grundeinstellung:<br />

es geht nicht darum keine Fehler zu machen!<br />

es geht darum, mit möglichst wenigen Fehlern weiter zu machen!<br />

Ihre Kollegen helfen Ihnen dabei!<br />

bei einer Durchsprache / Diskussion treten Missverständnisse zu Tage<br />

Menschen mit unterschiedlichem Hintergrund denken an andere Dinge<br />

• Bei allen Vorteilen<br />

es wird die (harte) Arbeit eines Menschen kritisiert<br />

nicht alle Menschen können damit gut umgehen<br />

deshalb: Vorsicht mit der Form der Kritik:<br />

- immer sachlich bleiben<br />

- keine persönlichen Angriffe<br />

- konstruktive Kritik üben<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 17


<strong>7.</strong> <strong>Manuelle</strong> <strong>Prüfverfahren</strong><br />

Faktor Mensch<br />

Die Grundeinstellung ist entscheidend!<br />

Wegen der Qualitätssicherung muss ich…<br />

Ich hab's mir genau angeschaut!<br />

Es funktioniert doch!<br />

Die wollen bloß mein Baby schlecht<br />

machen!<br />

Ich hab keine Zeit für so etwas…<br />

Ich will gerne…, damit die Qualität stimmt<br />

Viele Augen sehen mehr…<br />

Es gibt immer Fehler!<br />

Die helfen mir meine Arbeit besser zu<br />

machen!<br />

Die Zeit hole ich durch die entdeckten<br />

Fehler locker raus…<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 18


<strong>7.</strong> <strong>Manuelle</strong> <strong>Prüfverfahren</strong><br />

Zusammenfassende Bewertung manueller Prüfmethoden<br />

Oft die einzige Möglichkeit, die Semantik zu überprüfen<br />

- Notwendige Ergänzung werkzeuggestützter Überprüfungen (für Syntaxprüfungen etc.)<br />

- Effizientes Mittel zur Qualitätssicherung<br />

Verantwortung für die Qualität der geprüften Produkte wird vom ganzen Team<br />

getragen<br />

Verbreiterung der Wissensbasis der Teilnehmer<br />

Prüfteam lernt die Arbeitsmethoden seiner Kollegen kennen<br />

Autoren bemühen sich um eine verständliche Ausdrucksweise,<br />

da mehrere Personen das Produkt begutachten<br />

Unterschiedliche Produkte eines Autors werden von Prüfung zu Prüfung besser<br />

In der Regel aufwändig<br />

- Bis zu 20% der Erstellungskosten des zu prüfenden Produkts<br />

- aber die Investition zahlt sich schnell aus<br />

Autoren geraten u. U. in eine psychologisch schwierige Situation<br />

- »Sitzen auf der Anklagebank«<br />

- »Müssen sich verteidigen«<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 19


<strong>7.</strong> <strong>Manuelle</strong> <strong>Prüfverfahren</strong><br />

1. Beispiel: Review der Anforderungen<br />

• Das Review-Team besteht aus 3 bis 7 Teilnehmern<br />

• Neben dem Autor und dem Moderator sollen folgende Personen dabei sein:<br />

Vertreter der Anwenderseite (Stakeholders) wie<br />

- Auftraggeber,<br />

- zukünftige Benutzer,<br />

- Anwendungsexperten,<br />

Vertreter der IT-Seite wie<br />

- Systemanalytiker,<br />

- Entwickler,<br />

- Tester<br />

der Projektleiter<br />

• Es wird geprüft, ob alle Anforderungen in Anforderungsspezifikation richtig<br />

modelliert sind (Use-Cases, Domainklassen, Benutzerschnittstelle,<br />

Prototypen, nichtfunktionale Anforderungen)<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 20


<strong>7.</strong> <strong>Manuelle</strong> <strong>Prüfverfahren</strong><br />

2. Beispiel: Code-Review - Vorbetrachtung<br />

• Es soll die Qualität von Quellcode geprüft werden<br />

In modernen Projekten gibt es sehr viel Code<br />

Der Aufwand für eine manuelle Prüfung ist entsprechend hoch<br />

Vor dem Review werden Tools verwendet um möglichst viele Probleme vorher zu<br />

erkennen und zu beseitigen:<br />

Compiler auf hohem Warning-Level, Tools zur "Statischen Code Analyse"<br />

(z.B. QA-C++, LINT++) etc.<br />

• Moderne Tool erkennen viele (potenzielle) Probleme<br />

d.h. ohne den<br />

Code auszuführen<br />

- Falsche oder inkompatible Datentypen, uninitialisierte oder unbenutzte Variablen<br />

- Fehlerträchtige Zugriffe über Pointer oder auf Arrays<br />

- Zuweisungen mit fehlerträchtiger Priorisierung / fehlender Klammerung (z.B. a-- = b++)<br />

- übermäßig komplizierte Ausdrücke<br />

- Verstöße gegen Programmierrichtlinien (die u.a. fehlerträchtige Konstrukte verbieten)<br />

- Unvollständige Fallunterscheidungen (z.B. switch ohne default)?<br />

- uvm.<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 21


<strong>7.</strong> <strong>Manuelle</strong> <strong>Prüfverfahren</strong><br />

2. Beispiel: Code-Review - Durchführung<br />

• Vorbereitung:<br />

Der Code wird mit durchgehenden Zeilennummern an alle Teilnehmer verteilt<br />

zusätzlich wird eine Kurzbeschreibung zu Funktion und Aufbau des Codes und<br />

die zugrundeliegende Designbeschreibung verteilt<br />

es werden maximal 250-300 Zeilen Code betrachtet<br />

der Code wurde vorher mit Tools auf die Einhaltung der Programmierrichtlinien<br />

und potenzielle Fehler analysiert<br />

• Das Review-Team besteht aus 3 bis 5 Teilnehmern<br />

- der Entwerfer des umgesetzten Software-Designs<br />

- mehrere Entwickler (darunter der Autor)<br />

- Entwickler von Software, die Schnittstellen zur analysierten Software hat<br />

- einem Tester / Integrator<br />

• Es wird geprüft, wie gut die Code-Qualität einer Anwendung ist<br />

Verbesserung des Quellcodes<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 22


<strong>7.</strong> <strong>Manuelle</strong> <strong>Prüfverfahren</strong><br />

2. Beispiel: Code-Review - Checkliste (I)<br />

• Funktion<br />

Compiliert bzw. läuft das Programm?<br />

Erfüllt die Lösung die Aufgabenstellung?<br />

- Wurden Teile der Aufgabenstellung nicht oder mangelhaft implementiert?<br />

Gibt es Fälle, in denen das Programm die falsche Lösung liefert?<br />

- Sind boolesche Ausdrücke korrekt?<br />

- Werden alle Fälle bei Fallunterscheidungen berücksichtigt? Wird jede Schleife richtig<br />

beendet? Ist Schrittzahl nicht eins zu hoch oder zu niedrig?<br />

- Kann es Über- oder Unterlauf in Zwischenergebnissen geben? Können Ungenauigkeiten<br />

durch Dualdarstellung auftreten?<br />

- Wurde die Priorität der Operationen beachtet? Sind ganzzahlige Divisionen korrekt?<br />

- Sind Vergleichs-/ Zuweisungsoperationen korrekt verwendet?<br />

- Werden Eingabedaten auf Gültigkeit geprüft?<br />

Gibt es Mängel, durch die das Programm abstürzen kann?<br />

Es muss alles geprüft<br />

werden, was die eingesetzten<br />

Tools nicht finden können!<br />

- Durch falsche Berechnungen (Möglichkeit der Division durch Null)<br />

- Durch falsche Pointerarithmetik, Endlosschleifen (falsche Schleifenbedingungen)<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 23


<strong>7.</strong> <strong>Manuelle</strong> <strong>Prüfverfahren</strong><br />

2. Beispiel: Code-Review - Checkliste (II)<br />

• Lösung<br />

Wurde ein effizienter Lösungsweg gewählt?<br />

- Bezüglich Speicher? Bezüglich Laufzeit? Gibt es überflüssige Schleifen, Abfragen<br />

oder Anweisungen? ...<br />

Ist die Codierung gut gewählt?<br />

- Gibt es globale Variablen? Sind die Klassen und Methoden geschickt aufgeteilt? Gibt<br />

es redundante Codeteile? ...<br />

• Dokumentation<br />

Ist die Lösungsidee als Kommentar angegeben?<br />

Sind die Kommentare ausreichend um das Programm zu verstehen?<br />

- Sind die Kommentare aussagekräftig?<br />

- Gibt es überflüssige Kommentare?<br />

Sind die Kommentare durchgehend?<br />

- Sind einzelne Teile nicht dokumentiert?<br />

- Wurde durchgehend eine Sprache verwendet?<br />

Es muss alles geprüft<br />

werden, was die eingesetzten<br />

Tools nicht finden können!<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 24


<strong>7.</strong> <strong>Manuelle</strong> <strong>Prüfverfahren</strong><br />

2. Beispiel: Code-Review - Checkliste (III)<br />

Es muss alles geprüft<br />

werden, was die eingesetzten<br />

Tools nicht finden können!<br />

• Umsetzung<br />

Wurden die Programmierrichtlinien eingehalten?<br />

Sind die Namen von Methoden, Klassen und Variablen sinnvoll und richtig?<br />

nicht: A = B + (C / 100) * B, sondern: brutto = netto + (Mwst_Satz / 100) * netto<br />

Gibt es ähnliche Variablennamen?<br />

Sind boolesche Ausdrücke, arithmetische Ausdrücke nicht überkompliziert?<br />

Wurden globale Variablen eingesetzt? Ist das wirklich notwendig?<br />

Es gibt viele Checklisten im Internet!<br />

siehe z.B. www.reviewtechnik.de<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 25


<strong>7.</strong> <strong>Manuelle</strong> <strong>Prüfverfahren</strong><br />

Kontrollfragen zu manuellen <strong>Prüfverfahren</strong><br />

• Warum sind manuelle Prüfungen notwendig?<br />

• Wie läuft ein Review ab?<br />

• Warum ist der Autor in einer Begutachtung in einer schwierigen Situation?<br />

• Wie unterscheidet sich eine Inspektion (ein Walkthrough) von einem Review<br />

• Wenn Sie ein Verfahren für eine formale Spezifikation eines Systems<br />

verwenden – brauchen Sie dann noch manuelle <strong>Prüfverfahren</strong>?<br />

• Was passiert, wenn Sie wegen Termindrucks die Reviews ausfallen lassen,<br />

und zur nächsten Entwicklungsphase übergehen?<br />

Können Sie jetzt ein Review durchführen?<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 26


<strong>Hochschule</strong> Darmstadt<br />

<strong>Fachbereich</strong> <strong>Informatik</strong><br />

Objektorientierte Analyse und Design<br />

Entwurfsmuster<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 27


6.1 Entwurfsmuster<br />

Muster (Patterns)<br />

„Auf der Grundlage von<br />

Erfahrung und der<br />

Reflexion darüber...<br />

...können wir<br />

wiederkehrende<br />

Muster erkennen ...<br />

Einmal erkannte Muster<br />

leiten unsere<br />

Wahrnehmung.“<br />

M.C. Escher: Luft und Wasser 8<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 28


6.1 Entwurfsmuster<br />

Ein Problem aus der IT Welt<br />

• Stellen Sie sich vor, Sie sollen die Systemuhr für ein modernes<br />

Betriebssystem implementieren<br />

Polling soll vermieden werden<br />

Bereitstellung der Zeit und des Datums<br />

Unterstützung für eine im Voraus nicht bekannte Anzahl von Interessenten<br />

(Word, Tray-Clock, ...)<br />

Die Lösung soll möglichst übertragbar sein (z.B. für den Batteriestatus)<br />

• Entwerfen Sie Komponenten mit Verantwortlichkeiten und Beziehungen<br />

Analysieren Sie folgende Szenarien<br />

1. Wenn sich die Uhrzeit ändert soll sie in anderen Programmen wie word etc. (ohne<br />

Polling) angezeigt werden<br />

2. Interessenten kommen während der Laufzeit hinzu (oder fallen weg)<br />

3. Analoge Aufgabe: Ermitteln des Batteriestatus des Rechners<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 29


6.1 Entwurfsmuster<br />

1. Die Uhrzeit ändert sich und soll (ohne Polling) angezeigt werden<br />

Systemuhr<br />

Datum<br />

Zeit<br />

gibStunde()<br />

setzeStunde()<br />

...<br />

Zeitgeber<br />

Zeit_Beobachter<br />

UhrClient<br />

Zeit<br />

anzeigen()<br />

aktualisiere()<br />

• Idee: Drehe den Spieß um und "sage Bescheid", wenn sich die Zeit ändert!<br />

Bei einer Zeitänderung ruft die Systemuhr bei allen UhrClients eine Methode auf<br />

UhrClients besorgen sich dann von der Systemuhr die erwünschten Daten<br />

Definiere dazu beim Client eine Methode aktualisiere()<br />

kein Polling und dennoch immer die aktuelle Uhrzeit!<br />

Frage: Wenn Interessenten jederzeit hinzu kommen können – Wie?<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 30


6.1 Entwurfsmuster<br />

2. Interessenten kommen während der Laufzeit hinzu (oder fallen weg)<br />

Systemuhr<br />

Datum<br />

Zeit<br />

gibStunde()<br />

setzeStunde()<br />

...<br />

meldeAn(Beobachter)<br />

meldeAb(Beobachter)<br />

benachrichtige()<br />

realisiert durch list of * Beobachter<br />

1<br />

Zeitgeber<br />

*<br />

Zeit_Beobachter<br />

Zeit_Beobachter<br />

Zeit<br />

Beobachter<br />

{abstract} aktualisiere()<br />

UhrClient<br />

aktualisiere()<br />

anzeigen()<br />

• Idee: Alle Interessenten (UhrClients) "registrieren" sich bei der Systemuhr<br />

Bei einer Zeitänderung ruft die Systemuhr in ihrer Methode benachrichtige() bei<br />

allen registrierten Clients die Methode aktualisiere() auf<br />

Aber das geht nur, wenn alle UhrClients zu einer Klasse gehören!<br />

Einführung einer (abstrakten) Oberklasse ("Beobachter") und<br />

Verschiebung der Assoziation<br />

Frage: Analoge Aufgabe für Batteriestatus?<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 31


6.1 Entwurfsmuster<br />

3. Auslagern der allgemeinen Funktionen<br />

Subjekt<br />

meldeAn(Beobachter)<br />

meldeAb(Beobachter)<br />

benachrichtige()<br />

Systemuhr<br />

Datum<br />

Zeit<br />

gibStunde()<br />

setzeStunde()<br />

meldeAn(Beobachter)<br />

...<br />

1 Zeitgeber<br />

Zeit_Beobachter *<br />

Zeit_Beobachter *<br />

Zeit<br />

UhrClient<br />

aktualisiere()<br />

anzeigen()<br />

• Idee: Das "Registrieren und Benachrichtigen" ist ein allgemeines Verfahren –<br />

unabhängig von den bereitgestellten Daten<br />

Herausziehen dieses Teils durch Spezialisierung ("Subjekt") ... und fertig ist das<br />

Beobachter-Muster<br />

Verschieben der Assoziation zum Benachrichtigen<br />

Beobachter<br />

aktualisiere()<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 32


6.1 Entwurfsmuster<br />

Ein anderes Problem mit der gleichen Lösung<br />

Mehrere Diagramme hängen von einem<br />

gemeinsamen Datenobjekt ab<br />

Änderungen der Daten sollen in allen<br />

Diagrammen angezeigt werden<br />

Die Anzahl der Diagramme ist variabel<br />

Säule 1: ...........<br />

Säule 2: a=50%<br />

b=30%<br />

c=20%<br />

Säule 3: ..........<br />

90<br />

80<br />

70<br />

60<br />

50<br />

40<br />

30<br />

20<br />

10<br />

0<br />

Säule 1<br />

Säule 2<br />

Säule 3<br />

Dieses Problem taucht immer wieder auf!<br />

Das Design-Pattern Beobachter bzw.<br />

Observer bzw. "publish-subscribe"<br />

bietet eine allgemeine Lösung dafür!<br />

Segment 1<br />

Segment 2<br />

Segment 3<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 33


6.1 Entwurfsmuster<br />

Ein anderes Problem mit der gleichen Lösung<br />

es gibt eine Datenbasis ("Subjekt")<br />

es gibt mehrere "Beobachter"<br />

das Subjekt benachrichtigt die<br />

Beobachter über Änderungen<br />

Säule 1: ...........<br />

Säule 2: a=50%<br />

b=30%<br />

c=20%<br />

Säule 3: ..........<br />

90<br />

80<br />

70<br />

60<br />

50<br />

40<br />

30<br />

20<br />

10<br />

0<br />

Säule 1<br />

Säule 2<br />

Säule 3<br />

1.) Benachrichtigung<br />

über Änderung<br />

2.) Holen der<br />

Veränderungen<br />

(Aufruf gibt Zustand zurück)<br />

Segment 1<br />

Segment 2<br />

Segment 3<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 34


6.1 Entwurfsmuster<br />

Beobachtermuster (Observer Pattern)<br />

Subjekt<br />

Beobachter<br />

*<br />

Beobachter<br />

meldeAn(Beobachter)<br />

meldeAb(Beobachter)<br />

benachrichtige()<br />

aktualisiere()<br />

abstrakt<br />

KonkretesSubjekt<br />

subjektZustand<br />

gibZustand()<br />

setzeZustand()<br />

1<br />

Subjekt<br />

daten-speichernde<br />

Instanz<br />

Säule 1: ...........<br />

Säule 2: a=50%<br />

b=30%<br />

c=20%<br />

Säule 3: ..........<br />

KonkreterBeobachter<br />

beobachteterZustand<br />

aktualisiere()<br />

daten-verwendende<br />

Instanz<br />

Bei Veränderung benachrichtige(): für alle angemeldeten Beobachter b: {b->aktualisiere}<br />

Nach Benachrichtigung aktualisiere(): {beobachteter Zustand = subjekt->gibZustand}<br />

Frage: Welche Instanzen gibt es?<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 35


6.1 Entwurfsmuster<br />

Beobachtermuster (Observer Pattern): Aufrufverhalten<br />

setzeZustand()<br />

einKonkretesSubjekt:<br />

konkretesSubjekt<br />

einKonkreterBeobachter:<br />

konkreterBeobachter<br />

einAndererKonkreterBeobachter:<br />

konkreterBeobachter<br />

benachrichtige()<br />

aktualisiere()<br />

gibZustand()<br />

return(Zustand)<br />

aktualisiere()<br />

gibZustand()<br />

return(Zustand)<br />

für jeden<br />

angemeldeten<br />

Beobachter<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 36


6.1 Entwurfsmuster<br />

Beobachtermuster (Observer Pattern): Einsatz in der Modellierung<br />

Subjekt<br />

Beobachter<br />

*<br />

Beobachter<br />

meldeAn(Beobachter)<br />

meldeAb(Beobachter)<br />

benachrichtige()<br />

aktualisiere()<br />

abstrakt<br />

KonkretesSubjekt<br />

subjektZustand<br />

gibZustand()<br />

setzeZustand()<br />

1 Subjekt<br />

KonkreterBeobachter<br />

beobachteterZustand<br />

aktualisiere()<br />

• Ein Pattern ist eine (weltweit) bekannte Musterlösung!<br />

Bitte ordnen Sie die Klassen auch genau so an (evtl. als eigenes Diagramm)<br />

benennen Sie die Methoden auch so – passen Sie nur die Parameter an<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 37


6.1 Entwurfsmuster<br />

Beobachtermuster – Beispielcode Digitaluhr<br />

Struktur:<br />

Subjekt<br />

Beobachter<br />

*<br />

Beobachter<br />

meldeAn(Beobachter)<br />

meldeAb(Beobachter)<br />

benachrichtige()<br />

aktualisiere()<br />

Zeitgeber<br />

subjektZustand<br />

1 Subjekt<br />

DigitalUhr<br />

beobachteterZustand<br />

gibStunde()<br />

...<br />

setzeZustand()<br />

aktualisiere()<br />

zeichne()<br />

weitere mögl. Beobachter:<br />

z. B. Kalender, Analoguhr<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 38


6.1 Entwurfsmuster<br />

Beobachtermuster – Beispielcode Digitaluhr<br />

class Subjekt{<br />

public:<br />

virtual ~Subjekt();<br />

virtual void meldeAn(Beobachter*);<br />

virtual void meldeAb(Beobachter*);<br />

virtual void benachrichtige();<br />

protected:<br />

Subjekt();<br />

private:<br />

Liste _beobachter;<br />

};<br />

void Subjekt::meldeAn(Beobachter* beobachter) {<br />

_beobachter->haengeAn(beobachter); //Methode von Liste<br />

}<br />

class ZeitGeber : public Subjekt {<br />

public:<br />

ZeitGeber();<br />

virtual int gibStunde();<br />

virtual int gibMinute();<br />

virtual int gibSekunde();<br />

void tick(); // zählt jede Sekunde<br />

// und ruft dann<br />

// benachrichtige() auf<br />

};<br />

class Beobachter {<br />

public:<br />

virtual ~Beobachter();<br />

virtual void aktualisiere(Subjekt*<br />

dasGeaenderteSubjekt)=0; // pure virtual<br />

protected:<br />

Beobachter();<br />

};<br />

void Subjekt::meldeAb(Beobachter* beobachter) {<br />

_beobachter->entferne(beobachter);<br />

}<br />

void Subjekt::benachrichtige() {<br />

ListenIterator iter(_beobachter);<br />

for(iter.start(); !iter.istFertig(); iter.weiter())<br />

{<br />

iter.aktuellesElement()->aktualisiere(this);<br />

}<br />

}<br />

class DigitalUhr: public Widget,<br />

public Beobachter{<br />

public:<br />

DigitalUhr(ZeitGeber* subjekt){<br />

_subjekt=subjekt;<br />

_subjekt->meldeAn(this)};<br />

virtual ~DigitalUhr(){...meldeAb(this)};<br />

virtual void aktualisiere(Subjekt* _subjekt){<br />

zeichne()};<br />

virtual zeichne(){<br />

int stunde=_subjekt->gibStunde; ... }<br />

private:<br />

ZeitGeber* _subjekt; };<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 39


6.1 Entwurfsmuster<br />

Diskussion Beobachtermuster<br />

• Vor- und Nachteile beim Einsatz des Beobachter-Musters<br />

Beobachter können leicht hinzugefügt oder entfernt werden<br />

Es wird nur aktualisiert, wenn sich etwas geändert hat<br />

Wenn es nur wenige und feste Beobachter sind, ist es etwas komplizierter als<br />

eine direkte Implementierung mit Abhängigkeiten<br />

• Anwendungen:<br />

E-Mail Verteiler für SW-Updates (Benachrichtigung automatisch, Aktualisierung<br />

manuell)<br />

Anzeige der Uhr in vielen Clients auf einem PC<br />

im Praktikum: Dosierer und Display beobachten die Waage<br />

• Diskussion:<br />

Würden Sie bei einer (traditionellen) Kuckucksuhr den Kuckuck als Beobachter<br />

der Uhr implementieren?<br />

Wie würden Sie in einem Autoradio implementieren, das CD oder Kassette oder<br />

... bei einer Verkehrsfunkdurchsage angehalten wird?<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 40


Ende<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 41


5.4.4 Überblick über die Diagramme der UML<br />

Übersicht der UML-Diagramme<br />

Diagramme<br />

der UML2.2<br />

Verhaltensdiagramme<br />

Strukturdiagramme<br />

Klassendiagramm<br />

Komponentendiagramm<br />

Use Case –<br />

diagramm *<br />

Objektdiagramm<br />

Aktivitätsdiagramm<br />

Zustandsdiagramm<br />

Verteilungsdiagramm<br />

Profildiagramm<br />

Kompositionsstrukturdiagramm<br />

Paketdiagramm<br />

Interaktionsdiagramme<br />

* Die Einordnung des Use Case Diagramms ist<br />

strittig. Auch wenn es dabei um das Verhalten geht,<br />

stellt es "nur" die Struktur von Anwendungsfällen<br />

und Akteuren dar. Damit wäre es eher ein Strukturals<br />

ein Verhaltensdiagramm.<br />

Sequenzdiagramm<br />

Kommunikationsdiagramm<br />

Interaktionsübersichtsdiagramm<br />

Timingdiagramm<br />

OOAD, Prof. Dr. Wolfgang Weber SS2012, h_da, <strong>Fachbereich</strong> <strong>Informatik</strong> 42

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!