Qualitätsattribute und Software-Architektur

Slides:



Advertisements
Ähnliche Präsentationen
Algorithmen und Datenstrukturen
Advertisements

Identifizierung und Ausbildung von Führungskräften
Developing your Business to Success We are looking for business partners. Enterprise Content Management with OS|ECM Version 6.
Benutzerorientierte Designprinzipien für die Microsoft-Guidelines
Einfluss von Web Services Technologien auf organisatorische Strukturen Referent: Sergej Groß
Integrations- und Funktionstests im Rahmen des V-Modelles
Programmieren im Großen von Markus Schmidt und Benno Kröger.
Vorlesung: 1 Betriebliche Informationssysteme 2003 Prof. Dr. G. Hellberg Studiengang Informatik FHDW Vorlesung: Betriebliche Informationssysteme Teil3.
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Die Architecture-Tradeoff-Analysis-Method (ATAM) im Detail
Designing Software for Ease of Extension and Contraction
Modelle und Methoden der Linearen und Nichtlinearen Optimierung (Ausgewählte Methoden und Fallstudien) U N I V E R S I T Ä T H A M B U R G November 2011.
Modelle und Methoden der Linearen und Nichtlinearen Optimierung (Ausgewählte Methoden und Fallstudien) U N I V E R S I T Ä T H A M B U R G November 2011.
Ontologien- Query 1 Teil2
1 JIM-Studie 2010 Jugend, Information, (Multi-)Media Landesanstalt für Kommunikation Baden-Württemberg (LFK) Landeszentrale für Medien und Kommunikation.
= = = = 47 = 47 = 48 = =
Universität Stuttgart Institut für Kernenergetik und Energiesysteme Was ist Refactoring? Bevor man die Integration angeht, mag es angebracht sein, den.
Erfahrungen aus Tests komplexer Systeme
Universität Stuttgart Institut für Kernenergetik und Energiesysteme Aufgaben des Testens Vergleich des Verhaltens einer Software mit den an sie gestellten.
RUP-Elemente (Schlüsselkonzepte)
es gibt (fast) nichts, was nicht anders gemacht werden könnte
Rechneraufbau & Rechnerstrukturen, Folie 2.1 © W. Oberschelp, G. Vossen W. Oberschelp G. Vossen Kapitel 2.
Grundkurs Theoretische Informatik, Folie 2.1 © 2006 G. Vossen,K.-U. Witt Grundkurs Theoretische Informatik Kapitel 2 Gottfried Vossen Kurt-Ulrich Witt.
Vorlesung: 1 Betriebliche Informationssysteme 2003 Prof. Dr. G. Hellberg Studiengang Informatik FHDW Vorlesung: Betriebliche Informationssysteme Teil2.
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Bewegte Bezugssysteme
eXtreme Programming (XP)
AC Analyse.
Rechneraufbau & Rechnerstrukturen, Folie 12.1 © W. Oberschelp, G. Vossen W. Oberschelp G. Vossen Kapitel 12.
Distanzbasierte Sprachkommunikation für Peer-to-Peer-Spiele
2 Distanzbasierte Sprachkommunikation für Peer-to-Peer-Spiele.
Konstruktionsmechaniker: K. Baldauf A. Heep P. Schmidt
1. 2 Schreibprojekt Zeitung 3 Überblick 1. Vorstellung ComputerLernWerkstatt 2. Schreibprojekt: Zeitung 2.1 Konzeption des Kurses 2.2 Projektverlauf.
Spezifikation von Anforderungen
20:00.
„Küsse deine Freunde“ – FlexKom-App teilen
Geschlecht der Befragten Alter der Befragten Warum gehst du in ein Einkaufszentrum ?
Eine Einführung in die CD-ROM
Dokumentation der Umfrage
für Weihnachten oder als Tischdekoration für das ganze Jahr
Kinder- und Jugenddorf Klinge Qualitätsentwicklung Januar 2005 Auswertung der Fragebögen für die Fachkräfte in den Jugendämtern.
TWS/Graph HORIZONT Produktionsüberwachung für “TWS for z/OS”
Syntaxanalyse Bottom-Up und LR(0)
Auswirkungen von körperlicher Aktivität
NEU! 1 2. Wo kommt diese Art von Rezeptor im Körper vor?
Analyse von Ablaufdiagrammen
PROCAM Score Alter (Jahre)
Ertragsteuern, 5. Auflage Christiana Djanani, Gernot Brähler, Christian Lösel, Andreas Krenzin © UVK Verlagsgesellschaft mbH, Konstanz und München 2012.
Paradigmenwechsel in der Unternehmensmodellierung Prof. Dr. Wolfgang Voigt Dipl.-Ing. Päd. Alexander Huwaldt UML Extrakt UML Seminar, Chemnitz
Symmetrische Blockchiffren DES – der Data Encryption Standard
1 (C)2006, Hermann Knoll, HTW Chur, FHO Quadratische Reste Definitionen: Quadratischer Rest Quadratwurzel Anwendungen.
Großer Altersunterschied bei Paaren fällt nicht auf!
Zahlentheorie und Zahlenspiele Hartmut Menzer, Ingo Althöfer ISBN: © 2014 Oldenbourg Wissenschaftsverlag GmbH Abbildungsübersicht / List.
MINDREADER Ein magisch - interaktives Erlebnis mit ENZO PAOLO
1 (C)2006, Hermann Knoll, HTW Chur, FHO Quadratische Reste Definitionen: Quadratischer Rest Quadratwurzel Anwendungen.
Schutzvermerk nach DIN 34 beachten 20/05/14 Seite 1 Grundlagen XSoft Lösung :Logische Grundschaltung IEC-Grundlagen und logische Verknüpfungen.
Imperfekt Wie sagt man das mit Imperfekt
Software Engineering Grundlagen
SiLeBAT Sicherstellung der Futter- und Lebensmittelwarenkette bei bio- und agro-terroristischen (BAT)-Schadenslagen.
Es war einmal ein Haus
J-Team: Gymnasium Ulricianum Aurich und MTV Aurich Ein Projekt im Rahmen von UlricianumBewegt.de Euro haben wir schon…  8000 mal habt ihr bereits.
Datum:17. Dezember 2014 Thema:IFRS Update zum Jahresende – die Neuerungen im Überblick Referent:Eberhard Grötzner, EMA ® Anlass:12. Arbeitskreis Internationale.
1 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt Wie.
Das IT - Informationssystem
1 Medienpädagogischer Forschungsverbund Südwest KIM-Studie 2014 Landesanstalt für Kommunikation Baden-Württemberg (LFK) Landeszentrale für Medien und Kommunikation.
Monatsbericht Ausgleichsenergiemarkt Gas – Oktober
Monatsbericht Ausgleichsenergiemarkt Gas – November
 Präsentation transkript:

Qualitätsattribute und Software-Architektur Christian Gebhardt Manuel Hertlein

Einführung geschäftliche Überlegungen bestimmen Qualitätsattribute, was in die Systemarchitektur eingepasst werden muss Qualitätsattribute sind der Teil der Funktionalität, der die grundlegenden Aussagen über die Fähigkeiten, Dienste und das Verhalten eines Systems macht Funktionalität nimmt eigentlich die Hauptrolle bei der SW Entwicklung ein Systeme werden oft redesigned, nicht weil sie die Funktion nicht erfüllen, sondern weil sie zu langsam, schwierig zu warten, zu portieren und zu skalieren bzw. anfällig für Hackerangriffe sind

Einführung Architektur ist die erste Stufe der SW Entwicklung, zu der sich Qualitätsanforderungen zuordnen lassen dies geschieht durch Übertragung der System Funktionalität auf Software Strukturen, die die Unterstützung der Architektur für Qualitätsattribute bestimmt bei unserer weiteren Betrachtung konzentrieren wir uns auf das Verständnis, wie man Qualitätsattribute beschreibt, die die Architektur dem System bereitstellen soll

Funktionalität und Architektur Funktionalität ist die Fähigkeit eines Systems die Aufgabe zu erfüllen für die es erstellt wurde eine Aufgabe erfordert, das die Elemente des Systems in koordinierter Weise zusammen arbeiten um sie zu lösen Funktionalität ist mit verschiedensten Strukturen erreichbar, d.h. sie ist größtenteils unabhängig von der Struktur SW Architektur bedarf aber der Zuweisung zu einer Struktur, wenn Qualitätsattribute erzielt werden sollen

Funktionalität und Architektur Funktionalität und Qualitätsattribute sind orthogonal wären sie nicht orthogonal würde die Wahl der Funktion den Grad der Qualitätsattribute bestimmen es ist aber möglich den gewünschten Grad jedes Attributes unabhängig zu wählen zu beachten ist, dass nicht jeder Grad eines Qualitätsattributes durch jede Funktion zu erzielen ist

Architektur und Qualitätsattribute das Erzielen von Qualitätsattributen muss durchgehend vom Design, über die Implementation bis hin zur Inbetriebnahme betrachtet werden dabei schließen Qualitätsattribute meist architekturelle Aspekte und nicht-architekturelle Aspekte ein

Architektur und Qualitätsattribute Zwei wesentlichen Aspekte hinsichtlich Architektur und Qualitätsattribute: Zur Realisierung vieler Qualitätsattribute eines Software-Systems ist Architektur nur bedingt verwendbar. Sie sollten eingearbeitet werden und auf der Ebene der Architektur abgeschätzt werden. Architektur allein ist nicht in der Lage Qualitätsattribute zu erzielen, sie bildet zwar die Grundlage dafür, das nützt aber nichts, wenn nicht auf die Details geachtet wird

Architektur und Qualitätsattribute in komplexen Systemen werden Qualitätsattribute niemals einzeln erreicht das Erzielen eines Attributes hat immer auch einen Effekt auf das Erzielen anderer Attribute Im Folgenden drei Klassen von Qualitätsattributen System Qualitätsattribute Business Qualitätsattribute Architektur Qualitätsattribute

Qualitätsattribute eines Softwaresystems Probleme: Definitionen von Attributen sind nicht operational Zuordnung eines bestimmten Aspekts zu einem Qualitätsattribut Unterschiedliche Vokabulare Lösung: Benutzung von Qualitätsattributszenarien um die Qualitätsattribute zu charakterisieren Diskussion über die einzelnen Attribute um fundamentale Konzepte zu veranschaulichen und Begriffe zu klären

Szenarien für Qualitätsattribute Teile eines Szenarios für Qualitätsattribute

Szenarien für Qualitätsattribute Unterscheidung zwischen Allgemeinen Szenarien für Qualitätsattribute Konkreten Szenarien für Qualitätsattribute Charakterisierung von Attributen = Sammlung von allgemeinen Szenarien Anforderungen für ein bestimmtes System bestimmen: relevante allgemeine Szenarien systemspezifisch machen

Beispiel: Verfügbarkeitsszenario Teile eines Szenarios für Qualitätsattribute

Beispiel: Verfügbarkeitsszenario „Eine unerwartete externe Nachricht wird von einem Prozess empfang, der sich im normalen Betrieb befindet. Der Prozess informiert den Operator über den Empfang der Nachricht und fährt ohne Ausfallzeit mit seiner Abarbeitung fort.“

Szenarien für Qualitätsattribute nicht jedes systemspezifische Szenario hat sechs Teile Ergebnis der Applikation wichtig um Anforderungen für Qualitätsattribut zu bestimmen Quelle des Stimulus wichtig  unterschiedliche Antworten auf unterschiedliche Quellen Umgebung hat ebenfalls Einfluss auf Antwort Artefakt nicht unbedingt wichtig, aber erwähnt da Viele Anforderungen Annahmen über Interna eines Systems machen Artefakt kann in weiteren Entwicklungsphasen verfeinert werden, um genaue Stellen der Stimulation zu spezifizieren

Szenarien für Qualitätsattribute Sammlung von konkreten Szenarien  Beschreibung von Anforderungen Szenarien konkret, aussagekräftig für Architekt Antworten aussagekräftig, um ein System daraufhin testen zu können

Generierung von Szenarien Qualitätsattribut-spezifischen Tabellen  allgemeine Szenarien System-spezifische Szenarien Für jedes Attribut wird eine Tabelle angegeben, die die möglichen systemunabhängigen (!) Werte für jeden der sechs Teile eines Qualitätsszenarios angibt

Generierung von Szenarien Qualitätsattribut-spezifischen Tabellen  allgemeine Szenarien System-spezifische Szenarien Für jedes Element eines Qualitätsszenarios wird ein möglicher Wert ausgewählt Szenarien sind immer noch systemunabhängig

Generierung von Szenarien Qualitätsattribut-spezifischen Tabellen  allgemeine Szenarien System-spezifische Szenarien System-spezifische Szenarien aus allgemeinen Szenarien abgeleiten Resultat wird „lesbar“ gemacht

Generierung von Szenarien Es werden nicht alle möglichen Szenarien generiert  Tabellen dienen nur als Checklisten Bei Beseitigung von Redundanzen (wenn z.B. zwei Attribute die gleichen Anforderungen generieren) ist sicherzugehen, dass kein wichtiges Qualitätsattribut entfernt wird  ernsthafte Konsequenzen auf System Konkrete Szenarien spielen in Spezifikation der Anforderungen der Qualitätsattribute dieselbe Rolle wie Use Cases für die Spezifikation der funktionalen Anforderungen

Anwendung von Szenarien für Qualitätsattribute allgemeine Szenarien stellen Framework für die Generierung vieler allgemeiner, system-unabhängiger, für Qualitätsattribute spezifische Szenarien zu Verfügung jedes ist anwendbar, aber nicht unbedingt relevant für ein betrachtetes System allgemeine Szenarien müssen systemspezifisch gemacht werden um sie für spezielle Systeme anzuwenden dies geschieht durch die Übersetzung in konkrete Ausdrücke des betrachteten Systems außerdem kann ein einzelnes allgemeines Szenario auch mehrere systemspezifische Ausprägungen haben

Verfügbarkeit Betrachtung von Systemfehlern und ihren Konsequenzen Systemfehler tritt ein, wenn das System nicht länger einen Service anbietet, der mit der Spezifikation übereinstimmt solche Fehler sind durch die Benutzer erkennbar Felder der Betrachtung: Wie wird Systemfehler entdeckt? Wie oft tritt er auf? Was passiert wenn er auftritt? Wie lange darf ein System außer Betrieb sein? Welche Fehlermeldungen sind nötig wenn ein Fehler auftritt?

Verfügbarkeit Unterscheidung zwischen Systemfehlern und Fehlern Fehler kann zum Systemfehler werden, wenn er nicht korrigiert oder maskiert wird Ein Systemfehler kann durch den Benutzer erkannt werden, ein Fehler aber nicht Wird ein Fehler erkennbar wird er zum Systemfehler

Verfügbarkeit wenn ein Systemfehler erstmal aufgetreten ist, interessiert die Dauer bis das System repariert ist die Verfügbarkeit eines Systems ist dann die Wahrscheinlichkeit, dass das System betriebsbereit ist wenn es gebraucht wird Damit ergibt sich die Definition:

Allgemeines Verfügbarkeitsszenario

Beispiel: Verfügbarkeitsszenario „Eine unerwartete externe Nachricht wird von einem Prozess empfang, der sich im normalen Betrieb befindet. Der Prozess informiert den Operator über den Empfang der Nachricht und fährt ohne Ausfallzeit mit seiner Abarbeitung fort.“

Allgemeines Modifizierbarkeitsszenario Aufwand der zur Durchführung vorgegebener Änderungen notwendig ist Was kann sich ändern (bzw. das Artefakt ändern)? Änderungen können jeden Aspekt des Systems betreffen Funktionen Plattform Umgebung Qualitäten Kapazität Änderungen an Plattform = Portabilität

Allgemeines Modifizierbarkeitsszenario Wann wird eine Änderung vorgenommen und von wem? Änderungen können vorgenommen werden während der Implementation des Kompilierens des Buildens der Konfiguration der Ausführung Änderungen können durchgeführt werden von Entwickler Systemadministrator Endbenutzer

Allgemeines Modifizierbarkeitsszenario

Beispiel: Modifizierbarkeitsszenario „Ein Entwickler möchte ein UI ändern. Die Veränderung findet in der Design Phase statt und wird direkt am Code vorgenommen. Der Vorgang soll max. 3 Stunden dauern und keine Nebeneffekte auf das Systemverhalten haben.“

Performance ist der Grad zu dem ein System oder eine Komponente eine bestimmte Funktion innerhalb besonderer Parameter wie z.B. Geschwindigkeit, Pünktlichkeit oder Speichernutzung ausführt für die Reaktion auf einen Stimulus verweist Performance beispielsweise auf die benötigte Zeit oder die Anzahl der im Zeitintervall bearbeiteten Events die Anzahl der Event Source und Arrival Patterns sind Beispiele, die Performance kompliziert machen Quellen von Events: Benutzeranfragen Andere Systeme System selbst

Performance ein Performance Szenario beginnt mit der Ankunft einer Anfrage an einen Service beim System um diese zu erfüllen müssen Ressourcen konsumiert werden, gleichseitig können auch schon die nächsten Anfragen bearbeitet werden Ankunftsmuster für Events werden entweder als periodisch oder als stochastisch charakterisiert Events können auch sporadisch ankommen(nicht periodisch oder stochastisch) viele Benutzer oder andere Ladefaktoren können durch unterschiedliche Ankunftsmuster von Events modelliert werden

Performance Die Antworten eines Systems auf einen Stimulus können charakterisiert werden als: Verzögerung Deadlines in der Verarbeitung Durchsatz Anzahl der nicht verarbeiteten Anfragen wegen Systemüberlastung und dem entstehenden Datenverlust

Allgemeines Performanceszenario

Beispiel: Performanceszenario „Benutzer initiieren stochastisch 1000 Transaktionen pro Minute in normalem Bearbeitungsmodus. Diese Transaktionen werden mit einer durchschnittlichen Verzögerung von 2 Sekunden bearbeitet.“

Allgemeines Sicherheitsszenario Fähigkeit nicht autorisierten Zugriff – ob zufällig oder absichtlich – auf Daten und Services zu verhindern und dabei gleichzeitig noch Dienste den legitimen Benutzern zu Verfügung zu stellen Formen von Attacken: Unautorisierter Versuch Zugriff auf Daten oder Services zu erhalten Modifizieren von Daten Deny of Service

Allgemeines Sicherheitsszenario Aspekte, die ein System bereitstellen muss, um den Anforderungen für die Sicherheitsqualitätsattribute zu erfüllen: Nonrepudiation (Nicht-Nichtanerkennung) Transaktion kann von einer beteiligten Person nicht abgestritten werden, wenn sie von ihr durchgeführt wurde Vertraulichkeit Daten und Services sind vor unautorisiertem Zugriff geschützt Integrität Daten und Services werden so bereitgestellt, wie beabsichtigt

Allgemeines Sicherheitsszenario Versicherung Parteien, die an einer Transaktion teilnehmen sind die, die sie vorzugeben zu sein Verfügbarkeit System ist für legitime Benutzung verfügbar Auditing System verfolgt Tätigkeiten, die in ihm von statten gehen und zeichnet sie in einem gewissen Abstraktionsniveau auf, so dass sie später rekonstruiert werden können

Allgemeines Sicherheitsszenario

Allgemeines Sicherheitsszenario

Beispiel: Sicherheitsszenario „Ein korrekt identifiziertes Individuum versucht Systemdaten von einer externen Seite zu modifizieren. Das System vermerkt es in einem audit trail und die korrekten Daten werden innerhalb eines Tages wieder restauriert.“

Testbarkeit Testbarkeit ist die Möglichkeit, zum Testen eines Systems hinsichtlich Korrektheit, Robustheit und Zuverlässigkeit großer Teil der Kosten für SW Entwicklung wird durch Testen verursacht wenn man diese Kosten senken könnte, würde der Ertrag steigen damit ein System richtig testbar ist, muss man den Zustand und die Eingaben jeder Komponente kontrollieren können und auch die Ausgaben überwachen können

Testbarkeit dies wird oft durch die Benutzung von Testsoftware erreicht Teile des Codes, das Design oder das ganze System können getestet werden

Allgemeines Testbarkeitszenario

Beispiel: Testbarkeitszenario „Ein Unit-Tester führt einen Unit-Test einer fertig gestellten Komponente durch, die eine Schnittstelle zur Kontrolle ihres Verhaltens und zur Beobachtung ihrer Ausgaben bereitstellt. Dabei soll 85% Pfadabdeckung in 3 Stunden erreicht werden.“

Allgemeines Usabilityszenario Wie einfach ist es für einen Benutzer, eine gewünschte Aufgabe durchzuführen? Welche Art von Unterstützung erhält der Benutzer durch das System? verschiedener Aspekte: Erlernbarkeit Effizienz Fehlertoleranz Anpassbarkeit Vertrauen und Zufriedenheit

Allgemeines Usabilityszenario

Allgemeines Usabilityszenario

Beispiel: Usabilityszenario „Ein Benutzer möchte, um die Auswirkung eines Fehlers zu verringern, eine Systemoperation während der Laufzeit abbrechen. Der Abbruch benötigt weniger als 2 Sekunden statt.“

Kommunikationskonzepte eine Anwendung von allgemeinen Szenarien ist das Ermöglichen der Kommunikation zwischen Außenstehenden jede Attributfamilie hat eigenes Vokabular um grundlegende Konzepte zu beschreiben die unterschiedlichen Ausdrücke können aber das selbe Ereignis darstellen -> Verständigungsprobleme folglich hilft eine Erleichterung dieser Art von Verständnis Diskussionen über Architektur Entscheidungen zu verbessern, besonders die über Tradeoffs

Stimuli von Qualitätsattributen

Kommunikationskonzepte Manche Stimuli treten während der Laufzeit auf andere schon davor Es ist schwer zu verstehen welche Stimuli das selbe Ereignis darstellen, welche Stimuli Zusammenfassungen andere Stimuli sind und welche Stimuli unabhängig sind Wenn diese Beziehungen erst einmal klar sind kann sich ein SW Architekt mit Außenstehenden in einer Sprache verständigen die jeder verstehen Man kann keine allgemeine Aussage über die Beziehung zwischen den Stimuli machen, da sie teilweise vom Environment abhängen

Andere System Qualitätsattribute Skalierbarkeit Portabilität wenn ein anderes Qualitätsattribut für die eigene Organisation wichtig ist, wäre es vernünftig eigene allgemeine Szenarien dafür zu kreieren dies beinhaltet das Ausfüllen der 6 Teile des Frameworks zur Generierung von Szenarien

Business Qualities Time to market Kosten und Gewinn Entwicklungszeit durch Konkurenzdruck oder schmales Zeitfenster gering Einkauf und/oder Wiederverwendung existierender Elemente Einbindung abhängig von Dekomposition Kosten und Gewinn Entwicklungsprozess darf Budget nicht überschreiten Unterschiedliche Architekturen führen zu unterschiedlichen Entwicklungskosten

Business Qualities Geplante Lebenszeit eines Systems Angezielter Markt Lebenszeit eines Systems steht in enger Wechselwirkung mit Modifizierbarkeit, Skalierbarkeit und Portabilität Angezielter Markt Plattform und Features eines Systems bestimmen Größe des potenziellen Marktes Portabilität und Funktionalität wichtige Aspekte Produktlinie sollte gemeinsamen Kern besitzen der Grundeigenschaften des Systems bereitstellt

Business Qualities Rollout Schedule Integration von Legacy Systems Produkt soll mit Basisfunktionalität veröffentlicht und um zahlreiche Features in späteren Releases erweitert werden Flexibilität und Anpassbarkeit der Architektur Integration von Legacy Systems System soll in ein existierendes System integriert werden  passende Integrationsmechanismen definieren vor allem durch Marketing-Abteilung gewünscht

Architekturqualitäten Begriffsintegrität Vereinigung des Designs eines Systems auf allen Ebenen Architektur soll ähnliche Dinge auf ähnliche Art und Weise tun Korrektheit und Vollständigkeit Buildability System kann rechtzeitig von einem verfügbaren Entwicklungsteam fertig gestellt werden Focus auf Dekomposition eines Systems Ziel: maximale Parallelität im Entwicklungsprozess Weiterer Aspekt: Wissen über ein zu lösendes Problem

Literatur Len Bass, Paul Clements, Rick Kazman: Software Architecture in Practice, 2nd Ed, Addison-Wesley 2003. 