7. Manuelle Prüfverfahren - Fachbereich Informatik - Hochschule ...
7. Manuelle Prüfverfahren - Fachbereich Informatik - Hochschule ...
7. Manuelle Prüfverfahren - Fachbereich Informatik - Hochschule ...
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