17 Komponentenbasiertes Software-Engineering 17.0 Einführung Lernziele Grundlagen, Prinzipien und Probleme des CBSE 17.1 Komponenten und Komponentenmodelle Komponenten und ihre Eigenschaften Komponentenmodelle 17.2 Prozesse des komponentenbasierten SE Engineering für Wiederverwendung Engineering mit Wiederverwendung 17.3 Komposition von Komponenten Arten der Komposition Stand: 16.04.13 Folie 17.1 17.0 Lernziele mit dem Konzept des komponentenbasierten Software- Engineerings vertraut sein wissen, was unter den Begriffen Komponente und Komponentenmodell zu verstehen ist die wichtigsten Schritte des komponentenbasierten Entwicklungsprozesses kennen wissen, warum bei den Anforderungen an wiederverwendbare Komponenten Kompromisse eingegangen werden müssen Schwierigkeiten und Probleme bei der Zusammenstellung von Komponenten kennen lernen Stand: 16.04.13 Folie 17.2
17.0 CBSE Component-Based Software Engineering CBSE Komponentenbasiertes Software-Engineering seit den späten 1990er Jahren Wiederverwendung von Software-Komponenten mangelnde Unterstützung der Wiederverwendung durch objektorientierte Entwicklung einzelne Objektklassen zu detailliert und spezifisch genaue Kenntnis erforderlich (Quelltext) Komponenten als höhere Abstraktionen unabhängige Anbieter von Diensten definiert durch Schnittstellen lose gekoppelt Stand: 16.04.13 Folie 17.3 17.0 Grundlagen des CBSE Unabhängige Komponenten vollständig spezifiziert über Schnittstellen klare Trennung von Schnittstelle und Implementation Komponentenstandards zur Vereinfachung der Integration Komponentenmodelle zur Definition der Schnittstellen Middleware zur Unterstützung der Integration ermöglicht Kommunikation der Komponenten Entwicklungsprozess für Wiederverwendung Zusammenspiel von Anforderungen und Funktionalität der Komponenten Stand: 16.04.13 Folie 17.4
17.0 Entwurfsprinzipien bei CBSE Verständliche und wartungsfreundliche Software durch Komponenten auch sinnvoll, wenn noch keine wiederverwendbaren Komponenten vorhanden sind Unabhängigkeit der Komponenten verhindert gegenseitige Beeinträchtigung Verbergung der Implementation änderbar ohne Auswirkung auf andere Komponenten Kommunikation über klar definierte Schnittstellen erleichtert Erweiterung der Funktionalität Nutzung von Komponenteninfrastruktur reduziert neu zu entwickelnden Code Stand: 16.04.13 Folie 17.5 17.0 Standards für Komponenten nötig für Kommunikation und Zusammenarbeit verteilte Systeme ohne Kopien Aufrufe entfernter Prozeduren (remote procedure calls) Entwicklung unterschiedlicher Standards Sun: Enterprise Java Beans (EJB) Microsoft: COM und.net CORBA: CCM Erschwerung des CBSE keine Interaktion zwischen Komponenten verschiedener Standards mangelnde Akzeptanz wegen hoher Komplexität Stand: 16.04.13 Folie 17.6
17.0 CBSE und serviceorientiertes SE Komponente als Service unabhängig vom Ausführungsort unabhängig von der Programmiersprache Eigenständigkeit extern: keine Einbindung in das Programm keine Standards für Interaktion erforderlich Zusammenarbeit vollständig über Aufruf von Schnittstellen Stand: 16.04.13 Folie 17.7 17.0 Probleme des CBSE Vertrauenswürdigkeit der Komponenten Quellcode nicht verfügbar Komponentenzertifizierung keine übergeordnete Qualitätssicherung Vorhersage von Komponenteneigenschaften überraschende zu Tage tretende Eigenschaften Anforderungskompromisse Ausgleich zwischen den Eigenschaften zweier Komponenten Stand: 16.04.13 Folie 17.8
17.1 Definition: Komponente Councill und Heineman (2001) A software component is a software element that conforms to a component model and can be independently deployed and composed without modification according to a composition standard. Szyperski (2002) A software component is a unit of composition with contractually specified interfaces and explicit context dependencies only. A software component can be deployed independently and is subject to composition by third-parties. Stand: 16.04.13 Folie 17.9 17.1 Eigenschaften von Komponenten báöéåëåü~ñí ëí~åç~êçáëáéêí ìå~äü åöáö âçãéçåáéêä~ê ÉáåëÉíòÄ~ê ÇçâìãÉåíáÉêí bêä ìíéêìåöéå ÑçäÖí=ÉáåÉã=pí~åÇ~êÇâçãéçåÉåíÉåãçÇÉää=ãáí=sçêÖ~ÄÉå=òK_K=ÑΩê= hçãéçåéåíéåëåüåáííëíéääéåi=jéí~ç~íéåi=açâìãéåí~íáçåéåi= hçãéçëáíáçåë~êí=ìåç=_éêéáíëíéääìåö â~åå=òìë~ããéåöéëíéääí=ìåç=éáåöéëéíòí=ïéêçéå=çüåé=~ìñ=~åçéêé= hçãéçåéåíéå=~åöéïáéëéå=òì=ëéáå=e~ì Éê=Éñéäáòáí=áå=ÉáåÉê= ł_éå íáöí JpÅÜåáííëíÉääÉ ÖÉå~ååíÉ=pÉêîáÅÉëF ~ääé=fåíéê~âíáçåéå=ωäéê= ÑÑÉåíäáÅÜ=ÇÉÑáåáÉêíÉ=pÅÜåáííëíÉääÉå=ìåÇ= ÉñíÉêåÉê=wìÖêáÑÑ=~ìÑ=ÉáÖÉåÉ=fåÑçêã~íáçåÉå=~äë=sçê~ìëëÉíòìåÖ=ÑΩê= hçãéçëáíáçå ÉáÖÉåëí åçáöé=båíáí í=~ìñ=éáåéê=çéã=hçãéçåéåíéåãççéää= ÖÉÜçêÅÜÉåÇÉå=hçãéçåÉåíÉåéä~ííÑçêã îçääëí åçáöé=açâìãéåí~íáçå=ãáí=póåí~ñ=ìåç=péã~åíáâ=~ääéê= hçãéçåéåíéåëåüåáííëíéääéå=òìê=_éìêíéáäìåö=çéê=séêïéåçä~êâéáí Stand: 16.04.13 Folie 17.10
17.1 Komponenten als Dienstanbieter unabhängige ausführbare Entität Quellcode nicht erforderlich Einbindung ins Programm oder externer Service angebotene Dienste über Schnittstelle verfügbar alle Interaktionen über die Schnittstelle parametrisierte Operationen innerer Zustand nicht sichtbar Stand: 16.04.13 Folie 17.11 17.1 Schnittstellen von Komponenten Stellt bereit -Schnittstelle (provides interface) definiert die von der Komponente angebotenen Dienste Methoden, die von Benutzern der Komponente aufgerufen werden können bildet die Programmierschnittstelle (API) Benötigt -Schnittstelle (requires interface) definiert die für die Funktion der Komponente erforderlichen und durch andere Komponenten bereitzustellenden Dienste wahrt die Unabhängigkeit der Komponente, weil nur das Was und nicht das Wie festgelegt wird Stand: 16.04.13 Folie 17.12
17.1 Schnittstellen von Komponenten Benötigt -Schnittstelle definiert die Dienste, die benötigt werden und von anderen Komponenten bereitgestellt werden sollen Komponente Stellt bereit -Schnittstelle definiert die Dienste, die diese Komponente für andere Komponenten bereitstellt Stand: 16.04.13 Folie 17.13 17.1 Komponentenmodell Definition von Standards für Komponenten Implementierung Dokumentation Bereitstellung Festlegung, wie Schnittstellen definiert werden sollen notwendige Bestandteile der Schnittstellendefinition Sicherstellung der Zusammenarbeit von Komponenten für Komponentenentwickler für Infrastrukturentwickler konkurrierende Modellvorschläge WebServices-Modell EJB-Modell.NET-Modell Stand: 16.04.13 Folie 17.14
17.1 Elemente eines Komponentenmodells Komposition Namenskonventionen Anpassung Dokumentation Schnittstellendefinition spezifische Schnittstellen Metadatenzugriff Paketierung Unterstützung für Evolution Schnittstellen Nutzungsinformation Komponentenmodell Bereitstellung und Verwendung Stand: 16.04.13 Folie 17.15 17.1 Komponentenmodell: Schnittstellen Spezifikation der Schnittstelle definiert Komponente Elemente der Spezifikation Operationsbezeichnungen Parameter Ausnahmen Sprache der Spezifikation WebServices: Web Service Description Language WSDL EJB: Java.NET: Common Intermediate Language CIL ggf. Vorgabe spezieller Schnittstellen für Infrastruktur Stand: 16.04.13 Folie 17.16
17.1 Komponentenmodell: Nutzungsinformation Namenskonventionen global eindeutig für Fernzugriff z.b. EJB: hierarchischer Name nach Internetdomänen Uniform Resource Identifier URI für Services Komponenten-Metadaten Auskunft über Schnittstellen und Attribute Auskunft über benötigte und bereitgestellte Dienste z.b. Java: Zugriff auf Metadaten über Reflection Angaben zu Konfigurationsmöglichkeiten Anpassung an Installationsumgebung Stand: 16.04.13 Folie 17.17 17.1 Komponentenmodell: Bereitstellung Spezifikation zur Bereitstellung unabhängig ausführbar in der gegebenen Infrastruktur Paket mit aller Software für die Ausführung Information zur Organisation eines binären Pakets Regeln zur Veränderung / Ersetzung von Komponenten Ermöglichung der Weiterentwicklung Regeln zur Dokumentation wichtig zur Auswahl von Komponenten Stand: 16.04.13 Folie 17.18
17.1 Infrastruktur für Komponenten Middleware Dienste für die Ausführung von Komponenten nötig bei Komponenten als Programmeinheiten Hilfsdienste Nebenläufigkeit Persistenz Komponentenverwaltung Transaktionsverwaltung Resourcenverwaltung Informationssicherheit Plattformdienste Adressierung Schnittstellendefiniton Ausnahmenverwaltung Komponentenkommunikation Stand: 16.04.13 Folie 17.19 17.1 Infrastruktur für Komponenten Plattformdienste Kommunikation von verteilten Komponenten Zusammenarbeit von verteilten Komponenten Hilfsdienste Dienste, die von vielen Komponenten benötigt werden reduziert Kosten der Komponentenentwicklung Komponentencontainer Schnittstellen zur Infrastruktur Zugriff der Komponente auf unterstützende Dienste Zugriff des Containers auf Komponentenschnittstelle kein direkter Zugriff einer Komponente auf die Schnittstellen einer anderen Komponente Stand: 16.04.13 Folie 17.20
17.2 Prozesse des CBSE Entwicklung für Wiederverwendung Entwicklung von Komponenten zur Wiederverwendung in anderen Anwendungen häufig Verallgemeinerung von bestehenden Komponenten Arbeit an einzelnen Komponenten Quellcode vorhanden Entwicklung mit Wiederverwendung Erstellung einer Anwendung unter Verwendung bestehender Komponenten und Services Suche nach geeigneten Komponenten effiziente Nutzung der Komponenten in der Anwendung meist kein Quellcode vorhanden Stand: 16.04.13 Folie 17.21 17.2 Hilfsprozesse für CBSE Komponentenerwerb Komponenten zur Wiederverwendung Komponenten zur Entwicklung in eine wiederverwendbare Komponente suchen und besorgen intern und extern Komponentenverwaltung katalogisieren speichern zur Verfügung stellen Komponentenzertifizierung prüfen bestätigen der Erfüllung der Spezifikation Stand: 16.04.13 Folie 17.22
17.2 Prozesse beim CBSE Domänenanalyst Entwickler Implementierer Betreiber Marktanalyst Komponentenbasiertes Software-Engineering für Wiederverwendung Komponentenbasiertes Software-Engineering mit Wiederverwendung Komponentenerwerb Spezifizierer Entwickler Integrator Betreiber Bibliothekar Verkäufer Makler lokaler oder externer Zertifizierer Komponentenarchiv Komponentenzertifizierung Komponentenverwaltung Bibliothekar externe Quelle Stand: 16.04.13 Folie 17.23