Design: Querschnittsthemen und Muster
Transcription
Design: Querschnittsthemen und Muster
7. Design-Phase – Querschnittsthemen und Muster Softwaretechnik (CNAM) Wintersemester 2011 / 2012 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik 1 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Softwaretechnik (CNAM), WS 2011 / 2012 Einordnung in den gesamten Kurs 1. Einführung 2. Analyse: Anforderungen und Anwendungsfälle 3. Analyse: Datenmodell 4. Analyse: Dialoge 5. Design: Architektur-Grundlagen 6. Design: Referenzarchitektur betriebliche Informationssysteme 7. Design: Querschnittsthemen und Muster 8. Programmierung 9. Test, Einführung, Qualitätsmanagement 10. Projektmanagement 11. Vorgehensmodelle 2 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Softwaretechnik (CNAM), WS 2011 / 2012 Agenda Fehlerbehandlung Fehlerbehandlung Entwurfsmuster Performance Kontrollfragen Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Softwaretechnik (CNAM), WS 2011 / 2012 Fehler Fehler stellen unerwünschtes Verhalten während der Ausführung eines Computersystems dar – … aufgrund von Programmierfehlern, z.B. Division durch Null – … aufgrund von technischen Problemen, z.B. Netzwerkfehlern – … aufgrund fehlerhafter Bedienung, z.B. Anwender gibt größeres “von”-Datum als “bis”-Datum ein – … aufgrund von Ausnahmen im Geschäftsprozess, z.B. Überweisung nicht möglich aufgrund einer Kontensperre 4 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Softwaretechnik (CNAM), WS 2011 / 2012 Kein Computersystem ohne Fehler Fehler kommen vor: – Programmierfehler können durch gutes Design und Tests reduziert werden, aber in komplexen Systemen nie komplett vermieden werden – Technische Probleme können reduziert werden, z.B. durch redundante Hardware, können aber auch nicht komplett vermieden werden – Fehlerhafte Bedienung kann durch eine ergonomische Benutzeroberfläche reduziert werden, aber nie komplett vermieden werden – Ausnahmen im Geschäftsprozess können immer vorkommen und sind unabhängig vom Computersystem Fehler können nicht vermieden werden. Daher müssen wir sie behandeln! 5 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Softwaretechnik (CNAM), WS 2011 / 2012 Ist das Problem mit Exceptions gelöst? Exceptions sind Sprachmittel aktueller Programmiersprachen wie Java, C++, C# etc. Aber: Exceptions führen nicht automatisch zu einem guten Design für Fehlerbehandlung. Sie sind sogar manchmal gar nicht angemessen zur Behandlung von Fehlern! Manchmal führen Exceptions zu neuem Spaghetti-Code: Exceptions sind das moderne goto – goto considered harmful! Es gibt in der Java Community bislang keine allgemein akzeptierten Muster für Fehlerbehandlung, z.B. – Wann Checked Exceptions verwenden, wann Unchecked Exceptions? – Wo werden Exceptions gefangen? – Wie werden Exceptions behandelt? Lehrbücher zu Architektur schweigen sich meist zu Fehlerbehandlung aus (positive Ausnahme: J. Siedersleben – Moderne Softwarearchitektur) 6 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Softwaretechnik (CNAM), WS 2011 / 2012 Die Fehlerbehandlung kann das Geheimnisprinzip verletzen … try { result = Kontokorrent.ueberweise (100, konto1, konto2); } catch (DatabaseNotAvailableException e) { // was tun, sprach Zeuss? } … class Dependency Client Serv er Client Aufrufer 7 Serv er Schnittstelle Implementierung Der Aufrufer einer Operation (Client) kennt nur die Schnittstelle, nicht dessen Implementierung Der aufgetretene Fehler gibt aber Auskunft über die Implementierung. Der Server zwingt den Client, den Fehler zu behandeln. Die Fehlerbehandlung verletzt das Geheimnisprinzip. Der Client weiß nicht so recht, was er tun soll („ich wusste gar nicht, dass da eine Datenbank im Spiel ist. Ich kenne mich nur mit Überweisungen aus“) Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Softwaretechnik (CNAM), WS 2011 / 2012 Lösung: Klassifikation von Fehlern (1.) Fachliche Fehler (A-Fehler) Klassifikation von Fehlern in fachliche Fehler (A-Fehler) und technische Fehler (T-Fehler) Der Anbieter einer Operation führt die Klassifikation der Fehler durch Fachliche Fehler (A-Fehler): Im Sinne der Schnittstelle zu erwartender Fehler Beispiele: – Operation „Geld abheben“ einer Bankanwendung: Kreditlimit überschritten – Operation „Datei öffnen“ eines Betriebssystems: Datei nicht vorhanden 8 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Softwaretechnik (CNAM), WS 2011 / 2012 (2.) Technische Fehler (T-Fehler) Technische Fehler (T-Fehler): Fehler, die sich aus der Implementierung und deren Technik ergeben. Beispiele: – Operation „Geld abheben“ einer Bankanwendung : Datenbank nicht verfügbar – Operation „Datei öffnen“ eines Betriebssystems: Fileserver abgestürzt – Verletzte Vor-/Nachbedingungen (sind keine fachlichen Fehler, sondern Programmierfehler!) 9 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Softwaretechnik (CNAM), WS 2011 / 2012 Fachliche Fehler (A-Fehler) Können und müssen vollständig aufgezählt werden! Sind Bestandteil der Schnittstelle Design-Alternativen: – Rückgabewert – Geprüfte Ausnahme (checked Exception) Beispiele: int ueberweise (int betrag, Konto von, Konto nach) void ueberweise (int betrag, Konto von, Konto nach) throws KreditlimitException result = 0, falls Überweisung erfolgreich -1, falls Kreditlimit überschritten error: KreditlimitException, falls Kreditlimit überschritten Der Aufrufer muss den fachlichen Fehler fachlich behandeln und beispielsweise den Anwender informieren! 10 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Softwaretechnik (CNAM), WS 2011 / 2012 Technische Fehler (T-Fehler) Sind abhängig von der Implementierung und deren Technologie Können im Allgemeinen nicht vollständig aufgezählt werden (Murphy„s Law: „if anything can go wrong it will“) Design-Empfehlungen: – Kein Bestandteil der Schnittstelle! – Verwende stets unchecked Exceptions (RuntimeException oder Error) für T-Fehler – Werden Fremdkomponenten gerufen, die sich nicht an diese Konvention halten: packe die gefangenen checked exceptions in neue Runtime Exceptions (Exception Chaining), z.B. try { result = Kontokorrent.ueberweise(100, konto1, konto2); } catch (DatabaseNotAvailableException e) { throw new RuntimeException(e); } 11 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Softwaretechnik (CNAM), WS 2011 / 2012 Wer behandelt technische Fehler? Der ExceptionHandler Design-Empfehlungen: An einer zentralen Stelle im System werden alle technischen Fehler gefangen und dem ExceptionHandler übergeben Beispiele für zentrale Stellen: Application Server, Client-Server-Schnitt, Event-Dispatch-Thread der GUI Der ExceptionHandler bündelt die Logik für die Fehlerbehandlung try { f(); ... } catch (Throwable e) { exceptionHandler.handleException(e) } ... 12 class ExceptionHandler { … Object handleException(Throwable e){ // classify situation // perform corresponding action } ... } Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Softwaretechnik (CNAM), WS 2011 / 2012 ExceptionHandler: Klassifikation und Aktion Der ExceptionHandler klassifiziert technische Fehler nach ihrer Schwere und stößt erforderliche Aktionen an: – Katastrophe (globales schweres Problem): Das Gesamtsystem muss heruntergefahren werden – Lokales schweres Problem: Die Benutzersession muss beendet werden. In beiden Fällen ist u. U. der Anwender zu informieren – Behebbares Problem: Durch Retry oder Compensating Actions kann das Problem behoben werden – Leichtes Problem: Das Problem wird protokolliert zur Unterstützung von Wartungsarbeiten (das muss auch für alle obigen Fälle erfolgen) und das System kann fortgesetzt werden 13 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Softwaretechnik (CNAM), WS 2011 / 2012 Erinnerung: Der ExceptionHandler ist ein Dienst der Application Kernel Facade cmp Application Kernel Facade «A Component» Dialog NameService A_UseCase_1' A_UseCase_n' Administration «Abstract T Component» Application Kernel Facade TechnicalConfiguration SystemsManagement ExceptionHandler A_UseCase_1 A_UseCase_n TransactionManager «Abstract T Compo... Transaction 14 «A Component» Application Component Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Softwaretechnik (CNAM), WS 2011 / 2012 Der Ablauf am Beispiel sd handle exception and repair Client Application Kernel Facade Transaction Application «interface» «interface» «interface» «interface» «interface» A_UseCase_1' ExceptionHandler :TransactionManager SystemsManagement A_UseCase_1 Client someMethod(arguments) beginTransaction() :Transaction someMethod(arguments) or via catch exception handle(exception) :Exception rollbackTransaction(transaction) shutDown 15 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Softwaretechnik (CNAM), WS 2011 / 2012 Agenda Fehlerbehandlung Entwurfsmuster Entwurfsmuster Performance Kontrollfragen Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Softwaretechnik (CNAM), WS 2011 / 2012 Muster in der Architektur von Gebäuden Ziele: • Angreifer aufwärts kämpfen lassen • parallel zu dem Burgmauern führen • immer von 3 Seiten beschießen Lösungen • Versetzte Tore • Mauern mit auskragenden Türmen • Mehrere konzentrische Bastionen • Innere Bastionen überblicken äußere 17 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Softwaretechnik (CNAM), WS 2011 / 2012 Einführung in Design Patterns Folien von Bob Tarr, Computer Science and Electrical Engineering Department, University of Maryland Baltimore County <http://userpages.umbc.edu/~tarr/dp/spr06/cs446.html> Introduction To Design Patterns : http://userpages.umbc.edu/%7Etarr/dp/lectures/IntroToDP.pdf 18 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Softwaretechnik (CNAM), WS 2011 / 2012 Ausgewählte Design Patterns (Entwurfsmuster) Design Pattern Sammlung unter http://www.vico.org/pages/PatronsDisseny.html : Observer : http://www.vico.org/pages/PatronsDisseny/Pattern%20Observer/index.html Factory : http://www.vico.org/pages/PatronsDisseny/Pattern%20Factory%20Method/index.html Composite : http://www.vico.org/pages/PatronsDisseny/Pattern%20Composite/index.html Adapter : http://www.vico.org/pages/PatronsDisseny/Pattern%20Adapter%20Object/index.html Pipes and Filters : http://www.vico.org/pages/PatronsDisseny/Pattern%20Pipes%20and%20Filters/index.html 19 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Softwaretechnik (CNAM), WS 2011 / 2012 Übungen Observer: Entwerfen Sie ein Klassendiagramm für eine Anwendung, welche es erlaubt, Börsenkurse sowohl tabellarisch als auch graphisch stets aktuell anzuzeigen Composite: Entwerfen Sie ein Klassendiagramm für das Layout (GUI Statik) geschachtelter Dialoge Adapter: Entwerfen Sie einen Adapter für ein Buchhaltungssystem 20 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Softwaretechnik (CNAM), WS 2011 / 2012 Agenda Fehlerbehandlung Entwurfsmuster Performance Performance Kontrollfragen Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Softwaretechnik (CNAM), WS 2011 / 2012 Performance: Durchsatz, Anwortzeit Stellschrauben für die Performance-Optimierung A-Architektur (fachliche Anwendungsarchitektur) Effiziente fachliche Algorithmen Reduktion der Kommunikation zwischen Komponenten Optimierung Datenbankmodell, z.B. Indexing, Denormalisierung des Datenbankmodells bei Performance Hotspots 22 T-Architektur (Technikarchitektur) Performante Verwendung der technischen Infrastruktur, z.B. Reduktion von Netzwerkkommunikation, Optimierung von DBAbfragen, Caching, Lazy / Eager Loading etc. Verwendung von besonders performanten Programmiersprachen / Systemsoftware bei Performance Hotspots TI-Architektur (Architektur der technischen Infrastruktur) Schnellere / mehr Hardware Performantere Systemsoftware, z.B. DBMS Optimierung der Systemparameter, z.B. Cachegrößen Änderung der Architektur, z.B. Clustering Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Softwaretechnik (CNAM), WS 2011 / 2012 Agenda Fehlerbehandlung Entwurfsmuster Performance Kontrollfragen Kontrollfragen Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Softwaretechnik (CNAM), WS 2011 / 2012 Kontrollfragen Wie sind Fehler zu klassifizieren? Wie soll mit fachlichen Fehlern umgegangen werden? Wie soll mit technischen Fehlern umgegangen werden? Wie funktioniert der ExceptionHandler? Was sind Design Patterns? Wozu sind diese gut? Wann setzen Sie diese ein? Wann setzen Sie das Beobachter-Muster ein? Welche Charakteristika hat Performance? An welchen Stellschrauben kann die Performance einer Anwendung optimiert werden? 24 Prof. Dr. Bernhard Humm, Hochschule Darmstadt, FB Informatik: Softwaretechnik (CNAM), WS 2011 / 2012