Design-Pattern als Kommunikationsmechanismen in der Software-Entwicklung

 
WEITER LESEN
Design-Pattern als Kommunikationsmechanismen in der Software-Entwicklung
Wirtschaftsuniversität Wien
Institut für Informationswirtschaft
PS: Bakkalaureat Wirtschaftsinformatik: Informationswirtschaft - Seminar
mit Bachelorarbeit
Seminarleiter/in: PD Mag. Dr. Stefan Koch
im Wintersemester 2008

             Design-Pattern als
      Kommunikationsmechanismen in der
           Software-Entwicklung
                             Dalibor Jonic

                            Bachelorarbeit

                     Matrikel-Nummer: 0152281

                   Abgabedatum: 15.02.2009
Zusammenfassung
Die Design Pattern (Entwurfsmuster) fördern die effiziente und effektive
Entwicklung von Software. Es gibt viele Gründe für die Verwendung von
Entwurfsmustern, insbesondere auf die Modularität, Wiederverwendbarkeit
und Erweiterbarkeit der Software bezogen. Jede qualitativ hochwertige
Software-Architektur sollte zumindest diese drei Komponenten umfassen.
Durch präzise gewählte Design-Patterns werden Lösungsansätze für
bestimmte Software-Probleme dargestellt. Einer der wesentlichen Vorteile
bei der Nutzung von Software-Design-Patterns ist die verbesserte
Teamkommunikation. Ein gemeinsames Design-Pattern führt zu einer
verkürzten Aufklärungsphase und der ausgewogenen „Getter und Setter“
Anfragen zwischen Gruppenmitglieder während der Entwicklungsphase.
Sowohl fortgeschrittene als auch unerfahrene Entwickler, welche mit
Baustilen oder Design-Paradigmen tätig sind, profitieren von solchen
Mustern. Frameworks, als nicht komplette Softwaresysteme, die von
Experten für Nicht-Experten hergestellt werden, basieren genauso auf
vorgegebenen Design Pattern. Diese Bachelorarbeit beschäftigt sich mit
der Frage, in wie weit sich ein Entwurfsmuster der Kommunikation
zwischen Gruppenmitglieder verbessert und dadurch die tatsächliche
Software-Entwicklung beschleunigt. Es werden mehrere Experimente
berücksichtigt, welche für die Bestätigung der Hypothese herangezogen
werden. Gleiche sind Recherchen und Ergebnisse der Studien von
jeweiligen Autoren. Ein „Best Practice“ Pattern wird auch analysiert und
erörtert.
Stichwörter:     Muster,    Design,     Modell,    Wiederverwendung,
Softwareentwicklung, Framework, Beans, Expertenwissen, Konsequenzen

Abstract (English)
Design patterns help in the efficient and effective development of
software. There are many reasons for using design patterns, especially
related to the modularity, re-usability and expandability of software. Each
good software architecture should at least contain these three properties.
Precisely selected design patterns are solutions for certain software
problems. One of the key advantages in the use of software design
patterns is improved team communication. A common design pattern
leads to a shortened developing time and balanced getter and setter
requests between group members, during the development process. Both,
advanced and novice developers, which are involved in designing or
architectural paradigms, get for sure benefit from such patterns. This
bachelor thesis deals with the question of how communication improves
between group members using patterns, and thereby how the whole
software development is getting better. There are several experiments
described, which should confirm the hypothesis on pattern usage. This are
the results of researcher and studies of authors listen below. A best
practice pattern is also analyzed and discussed.
Keywords: Design Pattern, Model, Software Reuse, Development,

                                     2
Framework, Beans, Expertise, Consequences

                                 3
Inhaltsverzeichnis
Einführung...................................................................................................................................5
2 Pattern Definition und Eigenschaften......................................................................................6
      2.1 Konzept der Pattern.....................................................................................................6
      2.2 Verwendung von Pattern.............................................................................................7
      2.3 Das Design Pattern.......................................................................................................9
      2.4 Model, View, Controller Pattern...............................................................................12
      2.5 Modelle, Klassifizierung............................................................................................15
      2.6 Framework.................................................................................................................17
3 Kommunikation......................................................................................................................19
      3.1 Soziale Struktur.........................................................................................................19
      3.2 Kommunikation: Argumentation für Maßnahmen....................................................22
      3.3 Koordination: die Planung von Aktionen..................................................................25
      3.4 Kooperation: Schaffung in dem gemeinsamen Arbeitsumfeld..................................26
      3.5 Die Pattern Rolle........................................................................................................29
      3.5.1 Auswahl von Pattern ..............................................................................................30
      3.5.2 Design Pattern verbessern die Kommunikation......................................................31
      3.5.3 Weitere Vorteile, Nachteile von Patterns...............................................................34
4 Praktisches Beispiel...............................................................................................................35
      4.2 Fallbeispiel ................................................................................................................35
      4.3 Nutzung von Beans....................................................................................................35
5 Zusammenfassung..................................................................................................................39
      Literaturverzeichnis.........................................................................................................40

Abbildungsverzeichnis
Abbildung 1: Raum.....................................................................................................................6
Abbildung 2: Integrierte Muster (Mustersprache).......................................................................7
Abbildung 3: Klassifizierung von Muster (nach "The Gang of Four" [GHJ04])......................15
Abbildung 4: Das Kommunikationsmodell von Shannon/Weaver [PRW03] .........................19
Abbildung 5: Die Rollen der Software-Entwicklung................................................................20
Abbildung 6: Die Rollen der Software-Entwicklung ii [CaCo96]............................................21
Abbildung 7: Zentrale und Dezentrale Kommunikationsnetze [ROS87].................................23
Abbildung 8: Lineare-, Hierarchische- und Netzform [ROS87]...............................................24
Abbildung 9: Software-Entwicklungszyklus (Design Pattern unterstützen 3K)[GHJ04].........29
Abbildung 10: Ergebnisse: Kommunikationslinie der Gruppe 1, 3, 4 in der Pre- (links) und
Posttest (rechts) Phase [UNT00]...............................................................................................33
Abbildung 11: Entwicklerumgebung NetBeans IDE, Projektbeispiel......................................36
Abbildung 12: View, Model und Controller Codebeispiel.......................................................38

Tabellenverzeichnis
Tabelle 1: Kollaborations-Technologie [AND03]....................................................................28
Tabelle 2: Pre- und Posttest (nach [UNT00])...........................................................................32

                                                                      4
Einführung
Diese Arbeit ist im Rahmen der Lehrveranstaltung „Informationswirtschaft
VK6“ im WS 2008/2009 an der Wirtschaftsuniversität Wien entstanden.
Der Fokus dieser Arbeit liegt auf der Nutzung von Design Pattern
(Entwurfsmuster) in der Praxis, speziell deren Zusammenhang mit den
Kommunikationsprozessen in der Softwarebranche. Als Beispiel für ein
Entwurfsmuster behandelt diese Bachelorarbeit die MVC (Model, View,
Controller) Pattern, welche ursprünglich von der Programmiersprache
Smalltalk in den 80er Jahren entwickelt wurde und mittlerweile einen
Grobentwurf für viele komplexe Softwaresysteme darstellt.
Nach einer Definition des Begriffs „Design Pattern“ wird im ersten Teil die
Theorie aufgearbeitet und anschließend eine Klassifizierung der Arten von
Entwurfsmuster vorgenommen. Es werden dem Leser Ansätze über die
soziale Struktur, Kommunikation, Kooperation und Koordination in der
Software-Entwicklung näher erläutert. Danach wird es verstärkt in die
Verbreitung und Nutzung von Design Patterns in der Praxis eingegangen,
wobei versucht wird herauszufinden, in welchen Ausmaß die vorgelegten
Entwurfsmuster die Kommunikation der Entwickler begünstigen und
welche Trends hier existieren. Weiters wird die Frage, welchen Einfluss die
Entwurfsmuster auf die Projektteilnahme und welche Intensität die
Nutzung von Software haben, angesprochen.
Design Pattern (Entwurfsmuster) helfen dabei, auf Basis Erfahrungen
anderer, im bestem Fall einer kollektiven Erfahrung der qualifizierten
Experten, Problemstellungen auf ähnliche Weise zu lösen, daher ist diese
Arbeit auch für ein kompaktes Anlernen des Pattern Konzeptes gut
geeignet. Design Pattern erfassen die bestehende Erfahrung einer
Software und fördern mit der Wiederverwendung ein gutes Design in der
Praxis. Jedes Muster befasst sich mit einem bestimmten, immer
wiederkehrenden Problem, welches in der Gestaltung und die Umsetzung
von Software-Systemen auftritt. Diese Patterns sind daher sehr gut für den
Bau von Softwarearchitekturen mit spezifischen Eigenschaften geeignet.
Schließlich gibt es eine Zusammenfassung der Erkenntnisse aus dem
Fallbeispielen welche die Hypothese der Güte von Design Pattern über die
Förderung von Kommunikation in der Software-Entwicklung bestätigen
soll. Ein Resümee am Ende der Arbeit soll dem Leser nochmals einen
Überblick über das behandelte Themengebiet verschaffen und die
Erkenntnisse daraus wieder einmal beleuchten.

                                     5
2 Pattern Definition und Eigenschaften
2.1 Konzept der Pattern
Im Vordergrund jeder Entwicklung stehen Probleme die zu lösen sind.
Wenn Experten an einem Problem arbeiten ist es sehr unwahrscheinlich,
dass sie komplett neue Lösungsansätze für diese Problemstellung
entwerfen. In den realen Bedingungen wird der Experte ihm bekannte
Lösungswege durch immer wieder Anwenden und womöglich bestimmtes
Erfahrungswissen erneut geltend machen. Dadurch unterscheidet sich
auch der Experte von anderen Menschen [Hah97].
Verallgemeinert werden Muster nach bestimmten Bedürfnissen konzipiert.
Die Patterns wurden zuerst von einem in Wien geborenen Architekt,
Christopher Alexander, in seinem Buch „The Timeless Way of Building“
[Ale79] wie folgt definiert:“Jedes Muster ist eine dreiteilige Regel, die eine
Beziehung zwischen einem bestimmten Kontext, einem Probleme und
einer Lösung beschreibt.“ [Siehe Ale79, S.247] Christopher Alexander
bereitete Pattern für die Planung von Gebäuden und Städten und arbeitete
als Architektur-Professor an der Barkeley Universität. In diesem
Sachverhalt hat weiteres Muster eine bestimmte Menge an Kräften und
eine bestimmte räumliche Konfiguration, in der diese Kräfte ausgeglichen
sind.
Um es abstrakter zu deuten, erklärt Christopher, dass ein Muster zugleich
ein Ergebnis ist, das in globaler Welt stattfindet, aber auch eine Regel,
welche sagt, wie wir das Ergebnis hervorrufen können bzw. wann wir es
tun sollen. Es repräsentiert gleichzeitig ein Objekt, aber auch eine
Beschreibung des Prozesses zur Erzeugung des Objektes [ALE79].
Die Erkenntnisse wurden im Kontext der Bedürfnisse erstellt und dadurch
abstrakte Lösungsansätze entwickelt. Beispielsweise (siehe Abb.1) möchte
sich ein Mensch in Winterzeiten zuhause gern hinsetzen und es sich
bequem machen. Zusätzlich möchte er es in dem Raum warm haben. Es
heißt, man braucht einen Heizkörper in der Nähe. Problem: wenn ein
anderes Raum, in den man am liebsten die Zeit verbringen möchte, über
keine Heizkörper verfügt, so ist dieses Konflikt nicht lösbar. Daher: man
soll in jedem Raum zumindest einen Heizkörper besitzen, um eine
Wärmequelle für einen gemütlichen Sitzplatz zu gewährleisten. Mit der
Abstraktion von Problem-Lösungs-Paaren, erfolgen Ausformulierungen
welche zu Mustern führen. Dadurch wird es sowohl für die Probleme als
auch für die Lösungen ein Muster erkennbar.

                        Abbildung 1: Raum

                                            6
Ein Pattern-Katalog ist eine Sammlung von selbsterklärenden Mustern,
welches keine oder nur wenige Verbindungen zwischen anderen Mustern
beinhaltet. Der bekannteste Musterkatalog ist der von „Gang of Four“
[GHJ04]. Eine Muster-Enzyklopädie ist ein Index von Mustern. Die „Pattern
Almanac“ [RIS00] ist eine Muster-Enzyklopädie, dass alle Muster als
Indizes    dokumentiert.      Ein  Pattern-System  ist   eine   Sammlung
selbsterklärender Muster, wo jedes Muster auch eine Beziehung auf ein
oder alle andere Muster haben, die potentiell bei der Unterstützung helfen
können. Als Hilfe einer schnellen Durchsuchung zu einem bestimmten
Muster, alle Muster sind nach bestimmten Kriterien in einem System
kategorisiert, wie zum Beispiel nach Problemen oder Granularität.
Bekannteste Systemmuster sind die POSA (Pattern-Oriented Software
Architecture) Bücher [BMR+98]. Die Mustersprache (siehe Abb. 2) ist ein
Netz von eng integrierten Mustern, welche zusammen bei der Entwicklung
bestimmter Aufgaben, Teile davon und Anwendungen wirken. Kein Muster
ist für sich selbst isoliert. Der Server-Component Patterns Buch [VSW02]
und die Best Practice Pattern von Smalltalk [BEC96], erläutern am besten
die Mustersprachen.

                 Abbildung 2: Integrierte Muster (Mustersprache)

2.2 Verwendung von Pattern
Diese Bachelorarbeit beschäftigt sich mit Mustern welche mehr in der
Software-Entwicklung relevant sind, die sogenannten Design Patterns
(Entwurfsmuster). Es wird nicht der objektorientierte Ansatz der
Softwarearchitekturen erklärt, sondern vielmehr die Bedeutung von
Mustern in einem objektorientiertem System.
Die Mustersprache wurde vermutlich von Christopher Alexander und
seinen Mitarbeitern erstmals offiziell als Mittel zur Konstruktion von
Städten und Gebäuden eingesetzt [siehe ASA+75]. Diese Ideen wurden
dann übernommen und erfolgreich in objektorientierten, komplexen
Systemen eingesetzt. Somit stellen die Softwareentwurfsmuster ein Mittel
dar, welches von anderen wissenden Experten und Architekten nutzbar
geworden sind.
Michael Hahsler diskutiert die breite Verwendbarkeit und die Nutzung von
Mustern in unterschiedlichen Disziplinen [Hah01]. Danach sind Patterns
oft unbewusst angewandt und kommen sogar in der Jazzmusik vor. Andere

                                            7
Bereiche sind Strategien, Kriegsführung [Tzu, 1983], das Management von
Organisationen und das Verständnis von kognitiven Prozessen, aber diese
kommen auch, einleitend zu dem nächsten Abschnitt 2.3, in die
Entwicklung von wiederverwendbarer Software vor.
Bei der Verwendung von Patterns, sollen diese die unveränderlichen
Merkmale eines Systems zeigen, welche das Problem lösen [ALE79,
S.257], und auch diejenigen Merkmale welche gute von schlechten
Objekten unterscheiden [ALE79, S.260]. Alle Patterns sind durch
Beobachtungen herleitbar.    Man geht von positiven und negativen
Beispielen aus. Damit man die Muster voneinander unterscheiden kann,
sind bei der Verwendung vier grundlegende Elemente zu erkennen [nach
GHJ04]:
  1. Der Mustername (eng. Name), welches als Stichwort dargestellt
     und benutzt wird, das Entwurfsproblem samt Lösungen und
     Auswirkungen mit ein oder zwei Worten zu benennen. Durch diese
     Benennung ist es einfacher über die Vor- und Nachteile
     nachzudenken und diese an andere zu vermitteln. Das
     Namenselement ist auch das schwierigste Teil bei der Bestimmung,
     weil gute und repräsentative Namen nicht einfach zu finden sind.
  2. Als nächstes besitzen Muster den Problemabschnitt, welches das
     Problem und seinen Kontext beschreibt. Diese Probleme sind
     beispielsweise die Trennung einer Schnittstelle von einer Anzahl
     möglicher Implementierungen, die Einbindung von Altsystem-
     Klassen oder die Abschirmung eines Aufrufers von Änderungen bei
     spezifischen Plattformen. Damit nun die Anwendung des Musters
     sinnvoll ist, wird in der Problembeschreibung auch eine Liste von
     Bedingungen aufgeführt, welche erfüllt sein müssen, damit ein
     Problem zustande kommt.
  3. Der Lösungsteil beschreibt die Objekte, aus denen das Pattern
     besteht, und wie die Beziehungen, Kräfte (Alexander nennt diese
     Forces) sowie Interaktionen zwischen diese Objekte agieren. Eine
     bestimmte, konkrete Gestaltung und Umsetzung des Musters wird
     nicht erläutert, da ein Muster vielmehr als eine Vorlage dient, welche
     in vielen verschiedenen Situationen angewendet werden kann.
  4. Der Konsequenzenanschnitt erklärt die Folgen bei den
     Anwendungen dieser jeweiligen Muster durch eine Liste von Vor- und
     Nachteilen des Endentwurfs. Die Wiederverwendung ist oft ein
     bedeutender Faktor in der objektorientierten Systemen, daher
     tragen diese Konsequenzen auf einem System eine wesentliche
     Rolle für die Modularität, Flexibilität und die Erweiterbarkeit des
     Systems. Die Konsequenzenerläuterung ist ein wichtiger Aspekt um
     überhaupt die passenden Pattern auszuwählen.
Mit den angesprochenen Charakteristiken werden Mustern verfeinert und
einfacher verstanden. Schließlich bleibt jedem die Freiheit jeweiliges
Muster, nachdem der Konsequenzen-Teil anvisiert wurde, zu verwenden

                                    8
oder auch abzulehnen.

2.3 Das Design Pattern
Das Entwurfsmuster sind Lösungsmuster für unterschiedliche Probleme in
der Software Entwicklung, welche wiedererkannt werden.             Ein
Entwurfsmuster besteht aus wenigen Klassen, die durch den Einsatz von
Delegation und Vererbung eine robuste und modifizierbare Lösung
ermöglichen. Diese Klassen können für das zu erstellende System
angepasst und verfeinert werden.
Die am breitesten beschriebenen Ansätze über die Design Pattern wurden
im Buch von Erich Gamma und seinen Mitautoren [GHJ04] erläutert. Im
Weiteren werden eingehend auf den vorherigen Abschnitt die
Erweiterungen von Design Pattern gegenüber der allgemeinen Muster
beschrieben. Es werden die zwei Sichten von Frank Buschmann und
Christiane Löckenhoff auf der einen Seite und die von Erich Gamma mit
seinen Kollegen assimiliert, um eine wohlgeformte Form eines Designs
Muster zu erhalten. Diese Pattern sind [nach Gamma et al; BMR+96] in
einer wohlgeformten Form konzipiert und sehen folgendermaßen aus:
  1. Name der Pattern
     Korrespondiert den letzten Abschnitt, daher werden präzise
     ausgewählte Wörter angewandt, welche auf die Essenz der
     Entwurfsmuster hindeuten. Jedes Muster soll eine einzigartige
     Beschriftung haben, dadurch wird das Muster leicht identifizierbar
     und referenzierbar. Eine Klassifizierung nach Typ kann hier auch
     erfolgen.
  2. Ziel
     Hier findet eine Beschreibung des Musterzwecks statt. Es wird
     nachgefragt welche Problemarten das Muster behandeln.
  3. Auch bekannt als
     Alle anderen Bezeichnungen für ein und dasselbe Muster in der
     Literatur folgen hier, falls es solche gibt.
  4. Motivation
     Ein Problem wird mit einem Beispiel beschrieben, welches zeigt, wo
     das Muster konkret passen würde.
  5. Anwendbarkeit
     Es zeigt eine allgemeine Vorstellung von den Situationen (den
     Kontext), in denen das Entwurfsmuster angewandt werden kann.
  6. Struktur
     Eine grafische Darstellung der Struktur des Musters, zum Beispiel
     mit Klassendiagrammen und Funktionsdiagrammen.

                                  9
7. Rollen
     Eine Liste von Klassen / Objekten welche für die Muster relevant sind
     und deren Rolle beschrieben wird.
  8. Interaktionen
     Beschreibt die Interaktionen zwischen den Rollenteilnehmer.
  9. Folgen
     Definieren die Ergebnisse, Nebenwirkungen und Erwägungen bei der
     Verwendung und Einsetzung von Muster.
  10. Umsetzung
     Beschreibt die Umsetzung der Muster, mit einer Diskussion der
     verwendeten Technik.
  11. Beispiellösung
     Es wird eine Beschreibung des Prinzips der Lösung auf der
     abstrakten Ebene erläutert.
  12. Bekannte Anwendungen
     Bekannte Beispiele für Situationen, in denen das Muster angewandt
     wird.
  13. Verwandte Muster
     Beschreibt Muster im Zusammenhang mit dem aktuellen Muster und
     in welcher verwandten Beziehung diese stehen (zum Beispiel ist das
     Muster als Alternative verwendbar oder kann zusammen mit den
     anderen verwendet werden). Es beschreibt auch die Unterschiede
     mit ähnlichen Mustern.
Die obige Beschreibung sollte den Entwicklern genügend Informationen
zur Verfügung anbieten für eine Entscheidung anbieten, ob das Muster
(möglicherweise) nützlich für ein Problem sein könnte. Einige der oben
erwähnten Musterelemente sind nicht zwanghaft. Der Rest der
Beschreibung umfasst eine Lösungsstruktur und eine grafische
Darstellung. Die Struktur der Lösung wird in der Regel von Rollen
vorgehen, die verteilt werden sollten (Beispiel Klassen). Ein Szenario
Diagramm, in dem die Kommunikation zwischen den Teilnehmer und eine
textuelle Erklärung angezeigt wird. Für die Lösungserklärung wird in der
Regel ein Diagramm erstellt, dieses setzt die Grundkenntnisse der UML
Sprache (Unified Modelling Language) voraus. Einige Beispiele werden im
nächsten Abschnitt weiter behandelt.

                                   10
Eine Lösung, die in den Mustern beschrieben ist, wird in der Regel mit
einer schematischen, strukturierten Darstellung illustriert. In der Literatur
wird der Lösungsabschnitt meist in UML-Format repräsentiert. Der Zweck
solcher Abbildungen ist, dem Leser einen schnellen Überblick zu
gewährleisten und Einblicke in die Rollen, Klassen und Objekte der Muster,
sowie deren Wechselwirkungen Einblicke zu verschaffen. Das Diagramm
unten ist von [Gamma94] und zeigt die Struktur einer Observer Pattern.

Musterbeispiel: Beobachter (Observer) (nach [GHJ04])

Name              Beobachtermuster (eng. Observer)

Problem-          Aufrechterhaltung konsistenter Zustände bei einem
beschreibung      Subjekt und vielen Beobachtern

Lösung            Ein Subjekt ist ein Objekt, dessen Hauptaufgabe darin
                  besteht, einen Zustand zu verwalten - beispielsweise eine
                  Matrix. Ein oder mehrere Beobachter nutzen den
                  beispielsweise durch Anzeigen einer Matrix als Tabelle
                  oder Grafik. Damit entstehen Redundanzen zwischen den
                  Zuständen des Subjekts und den Beobachtern.
                  Inkonsistenzen werden verhindert, indem die Beobachter
                  die meldeAn() -Methode aufrufen, um sich bei einem
                  Subjekt zu registrieren. Jede KonkreterBeobachter-Klasse
                  definiert außerdem eine aktualisiere()-
                  Methode, die den Zustand zwischen dem Subjekt und dem
                  KonkreterBeobachter-Objekt synchronisiert. Sobald sich
                  der Zustand von einem Subjekt ändert, ruft es seine
                  benachrichtigen()- Methode auf, die iterativ jeden
                  Beobachter aufruft. aktualisiere()- Methode aufruft.

                                     11
Konsequenzen ⧫ Entkoppelt ein Subjekt von den Beobachtern.
                ⧫ Kann viele ungewollte Benachrichtigungen verursachen,
                wenn sich der Zustand eines Subjekts ändert, da auch
                jene Zustandsänderungen mitgeteilt werden, die für
                manche Beobachter nicht von Interesse sind.
Beispiele       ⧫ Java stellt das Beobachtermuster mit der Observer-
                Schnittstelle und der Observable-Klasse zur
                Verfügung.
                ⧫ Das Beobachtermuster kann eingesetzt werden, um die
                Benachrichtigung von Abonnenten in der Modell-Sicht-
                Steuerungs-Architektur zu realisieren.
Verwandtes      ⧫ Entitäts-, Grenz- und Steuerungsobjekte
Konzept

In dem Musterbeispiel sind vier Rollen (Subjekt, Konkretes Subjekt,
Beobachter, Konkreter Beobachter) und die Beziehungen zwischen ihnen
zu sehen. UML bietet die Möglichkeiten in den Mustern auf die
Rollenkooperationen einzugehen. Die zu kooperierenden Objekte und
deren Kommunikation werden daher in visualisierter Abbildung gebracht.
Man könnte Muster mittels UML auch für sehr große Designs entwerfen.

2.4 Model, View, Controller Pattern

Musterbeispiel: MVC (nach [BMR+98])

Name            Model-View-Controller Muster

Problem-        Eine Benutzerschnittstelle ändern (womöglich zur
beschreibung    Laufzeit). Verschiedene Benutzerschnittstellen
                unterstützen, ohne den Kern der Anwendung zu
                verändern. Änderungen an den Daten, die sofort in allen
                Darstellungen sichtbar werden sollen. Darstellung der
                selben Information auf verschiedene Weise.

Lösung          Eine Anwendung wird in drei Teilen getrennt.
                ●   View, (die Sicht) kümmert sich um die (graphische)
                    Ausgabe. View bekommt Daten aus dem Modell. Es
                    können mehrere Ansichten des Modells dargestellt
                    werden.

                                  12
●   Model, (das Modell) kapselt Stammdaten, Methoden
               und Funktionalitäten, welche für die Verarbeitung
               zuständig sind. Ein Modell ist unabhängig von anderen
               Modulen.
           ●   Controller,  (die Kontrolle) ist für die Eingabe
               zuständig. Der Benutzer interagiert ausschließlich
               durch den Controller mit dem System.
Struktur

Rollen

                              13
Dynamik

Der Controller übernimmt die Benutzereingabe in seinem Event-Handling-
Verfahren, interpretiert das Ereignis, und aktiviert einen Dienstverfahren
von dem Modell.
Das Modell führt den angeforderten Dienst aus, was zu einer Änderung der
internen Daten vom Modell führt.
Das Modell teilt allem Views und dem Controller die Änderungen mit,
indem es die Update Methode aufruft.
Der berechtigte Controller ruft Daten aus dem Modell, um diese zu
erlauben oder bestimmte Benutzerfunktionen zu deaktivieren.
Konsequenzen (einige von vielen)
                 ⧫ Mehrere Ansichten des gleichen Modells.
                 ⧫ Ansichten werden für alle Benutzer, falls notwendig,
                 einfach synchronisiert.
                 ⧫ Die konzeptionelle Trennung in MVC ermöglicht
                 zwischen Entwicklern Austausch von einzelnen Teilen.
                 ⧫ Framework Potential
                 ⧫ Erhöhte Komplexität
                 ⧫ Im Falle einer MVC Framework oder große
                 Programmteile sind zusätzliche Anforderungen an die
                       Plattform notwendig.
Beispiele        ⧫ GUI-Bibliotheken, Microsoft Foundation Classes, Java
                 Server Faces, Smalltalk, dutzende Linux Pakete
Verwandtes       ⧫ Dokument-View Architektur
Konzept

                                    14
2.5 Modelle, Klassifizierung
Wie in Abschnitt 2.1 bereits angedeutet, bietet ein Muster Lösungsansätze
für ein spezifisches Problem. Bei einer breiten Palette von Mustern, welche
für bestimmte Probleme auszuwählen sind, müssen die Patterns in
irgendeiner Weise klassifiziert werden. Die Patterns müssen in eine
Ordnung gebracht werden, um diese schnell zu finden und vergleichen zu
können.
Eine gemeinsame Klassifikation wäre        nach der Entwicklungsphase
möglich, welche von mehreren Autoren als Vorschlag gilt: Analyse-,
Architektur-, Design- und Implementierungsmuster. Diese Aufteilung
basiert auf den Typ und Modell in denen die Muster Lösungen anbieten. In
der Praxis erweist sich die Bündelung der entsprechenden Muster in
Mustersprachen nützlich. Es gibt Mustersprachen zur Modellierung von
spezifischen Bereichen, wie z. B. Brandmeldeanlagen [Molin97] oder
Straßenordnung [Foster97]. Es gibt auch Mustersprachen für bestimmte
Familien von Problemen, wie z. B. für das Design einer relationalen
Datenbank der OO-Programme [Brown96], persistente Objekte [Soukup94]
und Kommunikations-Software [Schmidt95].
Weitere Aspekte für die Einstufung (nach Gamma et al. [GHJ04]) sind
Einteilungen nach zwei Klassifizierungskriterien: nach der Aufgabe der
Muster und nach dem Gültigkeitsbereich, welche sich nur in Patterns für
Klassen und für Objekte unterscheiden (siehe Abb. 3).
                                                        Aufgabe
                              Erzeugungsmuster      Strukturmuster                     Verhaltensmuster
                 klassen-    Fabrikmethode     Adapter (klassenbasiert)    Interpreter
                  basiert                                                  Schablonenmethode
                             Abstrakte Fabrik    Adapter (objektenbasiert) Befehl
Gültigkeitsbe-
reich                        Erbauer             Brücke                    Beobachter

                             Prototyp            Dekorierer                Besucher
                             Singleton           Fassade                   Iterator
                 objekten-                       Fliegengewicht            Memento
                  basiert                        Kompositum                Strategie
                                                 Proxy                     Vermittler
                                                                           Zustand
                                                                           Zuständigkeitskette
Abbildung 3: Klassifizierung von Muster (nach "The Gang of Four" [GHJ04])

Die Erzeugungsmuster befassen sich mit Erzeugung von Objekten. Die
Strukturmuster bestimmen die Zusammensetzung von Objekten und
Klassen. Verhaltensmuster beschreiben das dynamische Verhalten von
Objekten und Klassen.
Buschmann et al. [BMR+96] kategorisieren Software relevante Patterns in
drei große Gruppen (berücksichtigt dabei das Granularitätskriterium):

                                                       15
●   Architekturmuster
  ●   Entwurfsmuster
  ●   Idiome
Die Gruppen wurden nach ihrer Abstraktionsebene eingeordnet. Die
Architekturmuster sind auf der obersten Ebene, welche das Fundament der
Softwaresysteme bestimmen. In dieser Gruppe fallen auch die MVC Muster
(diese fallen aber in anderen Behauptungen in die Design Patterns, sind
aber in derselben Entwicklungsphase), welche die Mensch-Computer-
Interaktion unterstützt und hilft. Die verwendeten Subsysteme werden
bestimmt, sowie es eine Spezifizierung ihrer Funktionen und eine
Beziehungen zueinander folgt.
Auf der mittleren Abstraktionsebene befinden sich die Entwurfsmuster
(Design Pattern), welche oben genauer beschrieben wurden. Es wird eine
verfeinerte Abbildung von Subsystemen und Komponenten angezeigt. Die
Entwurfsmuster lösen wiederkehrende Entwurfsprobleme.
Die letzte Abstraktionsebene repräsentieren die Idiome. „Ein Idiom ist ein
programmiersprachenspezifisches Muster und damit ein Muster auf einer
niedrigen Abstraktionsebene. Ein Idiom beschreibt, wie man bestimmte
Aspekte von Komponenten oder Beziehungen zwischen ihnen mit den
Mitteln einer bestimmten Programmiersprache implementiert.“ [BMR+98,
S. 14]
Eine weitere Klassifizierungsdimension nach Buschmann und seinen
Mitautoren [BMR+98], andererseits, folgt an Hand des Problemkriteriums.
Die Muster werden, korrespondierend ihrer Problemgruppe, in den
folgenden Kategorien unterschieden:
  ●   „von Grob zum Struktur“ - Pattern zerlegen Gesamtaufgaben eines
      Systems in kleinere Subsystemaufgaben, in sogenannte Subtasks.
  ●   „Verteilte Systeme“ - Muster bieten Lösungen für Anwendungen, bei
      denen Komponente verteilt über verschiedene Prozesse und
      Subsysteme gibt.
  ●   „Interaktive Systeme“ - Muster mit Mensch-Computer-Interaktion
      Problemen.
  ●   „Anpassungsfähige Systeme“ - Lösungsmuster, welche für die
      Anwendung anpassbare und erweiterbare Solutionen anbietet.
  ●   „Organisation der Arbeit“ - Pattern, welche definieren, wie
      Komponente zusammenarbeiten, um komplexe Aufgabestellungen
      zu lösen.
  ●   „Access Control“ - Muster für den Zugriff auf Dienste und die
      Überwachung-, Kontrollkomponenten aufweisen.
  ●   „Management“ - Muster, welche die homogenen Objekte, Dienste

                                    16
und Komponente in deren Verwaltung unterstützen.
  ●   „Kommunikation“ - Pattern für die Kommunikation zwischen den
      Komponenten.
  ●   „Resource Handling“ - Muster welche die gemeinsam genutzte
      Komponente und Objekte verwalten.

Die Beschreibung, Visualisierung und Klassifikation von Mustern,
insbesondere der Design Pattern, wurde hiermit erläutert. Der nächste
Abschnitt schafft einen Überblick über Frameworks und deren
Unterschiede zu Patterns.

2.6 Framework
Ein Framework bestimmt in der Regel die Architektur der Software. Ein
Framework ist selbst noch keine fertige Anwendung, sondern stellt den
Rahmen zur Verfügung, innerhalb dessen der Entwickler ein Programm
erstellt. Es ist hiermit klar, dass in dem Framework verwendete
Entwurfsmuster und auch die Struktur der individuellen Anwendung
beeinflusst werden. Frameworks werden insbesondere mit dem Ziel einer
Wiederverwendung von Architekturmustern entwickelt und genutzt. Die
Frameworks (Rahmen) berücksichtigen konkrete Anwendungsdomäne und
werden als solche entworfen, daher sind Frameworks meist
domänenspezifisch und auf einen bestimmten Anwendungstyp beschränkt.
Beispiele sind Frameworks für grafische Editoren,       elektronische
Warenhäuser oder Finanz-Buchhaltung Systeme [SGM02].
Die Rahmen, die domänenspezifisch sind, bieten zum Teil vorgefertigte,
wiederverwendbare Codes und Klassenbibliotheken. Es werden Namen
und Aufrufskonventionen verwendet, welche von den Frameworks bereits
bestimmt wurden. Einerseits erspart man sich die Zeit für die
Entwurfsentscheidung, andererseits sind solche Anwendungen schneller zu
entwickeln und weisen ähnliche Strukturen auf. Dadurch lassen sich
Wartungsarbeiten leichter durchführen und stimmen in ihrer Gestalt
überein.
Da Klassenbibliotheken schwer zu entwickeln sind, so sind Frameworks
noch schwieriger. Die Entwickler folgen dabei bestimmten Regeln, der von
ihnen ausgeforschten Entwurfsmuster. Die Schnittstellen sind bei der
Entwicklung besonders sensibel, und jede Änderung an der vorgegeben
Rahmenstruktur verringert die Vorteile der Wiederverwendung. Es soll
ausschließlich von Experten durchgeführt werden.
Patterns und Frameworks haben große Ähnlichkeiten, dennoch gibt es
Unterschiede zwischen diesen beiden Konzepten (nach Gamma et al.
[GHJ04]):
  1. Entwurfsmuster sind abstrakter als Frameworks. Jedes Muster muss
     neu implementiert werden, wenn man dieses anwenden möchte.
     Frameworks besitzen schon Programmteile und bieten die

                                   17
Möglichkeit sie auch gleich auszuführen, daher beinhalten
  Frameworks bereits ausgewählte Entwurfsmuster. Die Muster
  bringen auch eine Erläuterung über die Vor- und Nachteile und deren
  Konsequenzen bei der Verwendung mit sich, Frameworks hingegen
  nicht im abstrakten Sinne.
2. Frameworks sind größer als Entwurfsmuster. Ein Framework kann
   auch mehrere Patterns beinhalten (insbesondere Muster welche als
   Idiome eingestuft wurden, die die Probleme mit bestimmten
   Aspekten von Komponenten oder Beziehungen zwischen ihnen
   beschreiben, z.B. kürzlich erfolgte Probleme).
3. Frameworks sind spezialisierter als Entwurfsmuster. Die Muster
   bieten nicht eine Anwendungsarchitektur in jenem Ausmaß, wie
   dieses ein Framework anbietet. Die Frameworks haben immer einen
   bestimmten Anwendungsbereich und sind domänenspezifisch. Diese
   bringt auch den Nachteil der Frameworks, dass diese nicht zur
   Gänze in anderen Themengebiete angewendet werden können.

                               18
3 Kommunikation
Bei der Software-Entwicklung ist die Kommunikation eine sehr kritische
und zeitraubende Aktivität. Wenn Missverständnisse und Unterlassungen
auftreten, führen diese zu Fehlern und Verzögerungen, welche für die
Behebung und der weiteren Entwicklung sehr kostspielig seien können.
Unter Kommunikation werden alle Aktivitäten zwischen Teilnehmern eines
Systems verstanden, wo ein Austausch von Dokumenten, Modellen,
Arbeitsergebnisse und Berichte stattfindet und wo man über die
Rückmeldungen und Entscheidungen informiert und davon kommuniziert
wird. Es gibt mehrere Faktoren welche zu einer erschwerten
Kommunikation führen können. Einige davon sind: unterschiedliches
Bildungsstand der Teilnehmer, geographische Verteilung, die Komplexität,
der Umfang und die Entwicklungsphase der ausgetauschten Information.
Im    Folgenden   wird    eine   wohlgeformte   Kommunikation     nach
Shannon/Weaver [PRW03] behandelt.

  Abbildung 4: Das Kommunikationsmodell von Shannon/Weaver [PRW03]

Die Quelle (siehe Abb.4) produziert eine Information, welche von dem
Sender in Form eines Signals/Nachricht an den Empfänger geschickt wird.
Dort soll diese Nachricht möglichst unverändert ankommen. Während des
Prozesses der Übertragung werden ihr nicht beabsichtigte Zeichen
hinzugefügt oder weggenommen. Diese Störungen werden, wie erwähnt,
Rauschen genannt. Zu vereiteln sind sie kaum, jedoch kann durch
Redundanz, also einem Überschuss an Information, Wiederholung der
Information, die Toleranzgrenze für Störungen jeder Art innerhalb eines
Kanals erhöht werden, sodass die Information doch noch möglichst akkurat
und nachvollziehbar ankommt.

3.1 Soziale Struktur
Oft sind die Ursachen gescheiterter Projekte nicht die technischen
Gegebenheiten, sondern es hängt auch von den sozialen Faktoren ab. Die
soziale Struktur der Softwareteams darf nicht unterschätzt werden. Ein
aktueller Trend ist es, dass die Software-Entwickler sich mit den sozialen
Bedingungen ihrer Arbeit beschäftigen müssen.
Die Design-Patterns zeigen eindeutig klar, dass ein erheblicher Teil des
Wertes von Design-Patterns sozial sind: Sie gewähren es, die eigene Arbeit
kommunizieren zu lassen. Sie erlauben es darüber hinaus, fremde Arbeit
aufzunehmen und in der eigenen Arbeit anzuwenden.

                                              19
Laut dem Bericht von Bernhard Scheffold und seinem Kollegen [ScK98],
schicken Firmen wie die Bell Labs Spezialisten für objektorientierte
Technologie (z.B. Jim Coplien) durch ihre Abteilungen, um Design-Patterns
nachzuweisen und die sozialen Bedingungen ihres Einsatzes zu
untersuchen.
Eine andere Vorstellung hat die Firma Systor AG, welche die eigene
Organisation in bewusster Analogie als Framework bezeichnet. Es werden
hier daher Konzepte der Software-Entwicklung auch für die interne soziale
Organisation der Firma angewendet.
Software-Entwicklung ist überwiegend eine soziale Aktivität. Bei der
Software-Entwicklung sind Gruppen, Abteilungen und das eigene
Unternehmen als soziale Einrichtungen zu betrachten. In jeder
Organisation strebt man eine Struktur einzuführen. Eine allgemeine
Definition jeder Organisation, für eine unbestimmte Kultur, wäre [nach
JoWi92] eine Bestrebung zwischen den Akteuren und ihrer Rollen eine
Verbindung zu erhalten, die von einer gemeinsamen Interesse oder Ziel
ausgeht. Diese Organisation ist auch bekannt als „Instrumentale
Organisation“. Eine instrumentale Organisation ist     „das Instrument,
welches das organisationales Verhalten der Menschen reguliert“ [JoWi92,
Seite 10]. Jede Organisation hat bestimmte Rollen und damit verbundene
Rechte und Pflichten. Diese Rollen können gleichzeitig von demselben
Akteur besetzt werden. Eine typische Darstellung einer Organisation für
Software-Entwicklung schaut wie folgt aus:

   Abbildung 5: Die Rollen der Software-Entwicklung [CaCo96]

Die Stärke der Verbindung repräsentiert die Intensität der Kommunikation
zwischen jeweiligen Rollen. Die Beziehung zwischen Coder und Designer

                                                 20
Rolle ist [laut CaCo96] meist auf dem höchsten Rang. In vielen kleineren
 Organisationen werden diese zwei Rollen von einem Akteur besetzt.

Abbildung 6: Die Rollen der Software-Entwicklung ii [CaCo96]

 Die Titel „Coder“ (Programmierer) und „Entwickler“ sind zwei
 verschiedene Titel, welche auf dieselbe Rolle hindeuten (siehe Abb. 6). Der
 Designer und Programmierer haben überlappende Aufgaben. Die
 Wissenschaftler Cain und Coplin [CaCo96] fanden heraus, dass die
 Entwicklerrolle nach wie vor die höchste Popularität in fast allen Prozessen
 aufweisen; Popularität wird hier als Maß für die Anzahl der Verbindungen
 von einer einzigen Rolle zum verbleibenden Rollen im sozialen Netz,
 gesehen. In den meisten solcher Organisationen haben die Entwickler, wie
 erwartet, auch die höchste Prestigebewertung; Prestige ist hier als Maß,
 wie oft die anderen Rollen eine Interaktion mit einer bestimmten Rolle
 initiieren. In diesen beiden Diagrammen stellt also die Entwicklerrolle eher
 die Mitte des sozialen Netzwerks darn aber wir sehen auch eine zentrale
 Rolle der Softwaredesigner welche die Design Patterns auch tatsächlich
 umsetzten.
 Hiermit einleitend zum Abschnitt „Design Pattern Rolle“ einige
 Voraussetzungen    [nach ScK98] für erfolgreiche Projekte mit dem
 Schwerpunkt auf die soziale Struktur der Organisation:

                                                    21
●   Projektion der technischen und sozialen Architektur über die
       Zeitachse. Technische und soziale Anforderungen an die Architektur
       werden ausdrücklich gemacht. Die später aufgetauchten sozialen
       Rollen und Aufgaben werden von der vorgegebenen Architektur
       unterstützt.
   ●   Minimierung sozialer Interaktion durch Framework-Technologie. Wo
       es technisch möglich ist, sollten das Verhalten und das Modell des
       Systems durch das domänenspezifische Framework vorgegeben
       sein. Dies verringert die sozialen Streitigkeiten um technische
       Funktionalität enorm und ermöglicht darüber hinaus einen
       kategorialen   Rahmen      der    Architektur   samt   bestimmten
       Entwurfsmustern, der ihr Erlernen einfacher macht.
   ●   Maximierung sozialer Interaktion, wo kein Framework möglich ist.
       D.h. die technischen Schnittstellen sind nicht erlaubt gleich zur
       sozialen Gliederung zu laufen. Die soziale Gliederung nach Gruppen
       und Rollen soll sich mit den technischen Interfaces überschneiden.
       Dies vereitelt nur die übermäßige Ausbildung eines sozialen und
       eines technischen Kategoriensystems.
   ●   Mikroebene der Software-Entwicklung verwenden Einheitliche
       Coding-Standards      verwenden.   Durch    Coding-Standards   und
       Konstruktionsrichtlinien, auch durch vordefinierte Regeln des
       verwendeten Frameworks, werden die Strukturen der Architektur
       sozial vermittelbar. Es muss parallel eine kurze Dokumentation und
       Beschreibung (z.B. durch Kommentare einfügen) bei der Entwicklung
       folgen. Coding-Standards verbinden darüber hinaus die Ebene der
       Komplexität (sichtbar an der Zeile Source-Code, die gerade
       geschrieben wird) mit der abstrakten Ebene (den Strukturen der
       Architektur, die auf Basis von der aktuellen Zeile gerade berührt
       werden). Da die Ebene der Abstraktion bei der Entwicklung nicht
       sichtbar ist, müssen Programmiersprache und Coding-Standards
       Hinweise darauf geben.

3.2 Kommunikation: Argumentation für Maßnahmen
Eine Kommunikation gilt dann für den Absender als erfolgreich, wenn der
Absender informiert wurde, dass der Empfänger die Nachricht auch
erhalten hat. Auf der anderen Seite, folgt der Erfolg der Kommunikation
erst, wenn der Empfänger der Botschaft auch diese versteht und
entschlüsseln kann. In der einfachen Welt ist meist die einzige Möglichkeit,
sich mit Hilfe der Beobachtung über den Status zu informieren. Dadurch
lassen sich Aktionen und Reaktionen des Empfängers einsehen. Der
Empfänger erhält die Nachricht und interpretiert sie, dann ändert er seine
bisherigen Kenntnisse. In bestimmter Weise ändert er auch seine
Verpflichtungen. Diese fordern ihn auf, auf Grund der neu erworbenen
Kenntnisse, eine Reaktion abzugeben. Auf diese Weise kommunizieren der
Sender und Empfänger mit gegenseitiger Argumentation, für einen
bestimmten Themengebiet [SCH83].

                                    22
In einem Software-Entwicklungsteam lassen sich zwei grundlegende
Strukturen [nach ROS87] für Konversationen unterscheiden:
   1. Zentrale Kommunikationsnetze

   2. Dezentrale Kommunikationsnetze

     Abbildung 7: Zentrale und Dezentrale Kommunikationsnetze [ROS87]

Mit Kanten (Abb. 7) wird die Konversation zwischen Personen (P)
symbolisiert, durch welche Informationen generiert und ausgetauscht
werden. Die Mitglieder einer Organisation werden als Knoten in einer
strukturierten Form dargestellt.
Bei den zentralen Strukturen, wie z.B. dem Stern gibt es zentrale Stellen,
über die die Kommunikation zu laufen hat. Möchte ein Gruppenmitglied P4
in der Y-Struktur beispielsweise mit P1 Kontakt aufnehmen, so muss es
vorher P1 und P2 aktivieren. In der Vollstruktur ist ein direktes Ansprechen
zwischen P3 und P5 möglich. Die Pfeile symbolisieren wer mit wem
Interaktions- und Kommunikationsmöglichkeiten hat. Vereinfacht wird
meist berichtet, dass in zentralisierten Strukturen die Leistung hoch ist,
dass es eine gut identifizierbare zentrale Person gibt und dass die

                                               23
durchschnittliche Zufriedenheit gering ist, während sich bei dezentralen
Strukturen das Gegenteil ergibt.
Dezentralisierte Strukturen, wie z.B. die totale Struktur, erlauben jedem
Mitglied einer Gruppe mit jedem anderen in Kontakt zu treten. Eine
zentrale Schaltstelle ist nicht vorgesehen. Alle Gruppenmitglieder befinden
sich    in   der     gleichen     Ausgangsposition,   mit    gleichwertigen
Kommunikationsmöglichkeiten. In der Praxis, die wohl bekannteste und
größte dezentrale Struktur der menschlichen Geschichte, repräsentiert das
Internet.
Die Kommunikation zwischen Mitgliedern bildet den Ausgangspunkt
sämtlicher Kooperationen und Koordination und beinhaltet die
Verständigung mehrerer Personen untereinander [SMT95]. Hierbei kann es
primär zwischen andauernde und geregelte, normierte und offene sowie
direkte und indirekte Kommunikation unterschieden werden [DAM03].
Einige weitere Unterscheidungsmerkmale sind: Personenkreis, der
Vernetzungsgrad    und   der   Grad   an    Institutionalisierung einer
Kommunikation. Ziel der Kommunikation ist die Absicherung, Ausbau oder
Korrektur von vorhandenen Daten- oder Informationsbeständen. Neben
der reinen Verschiebung der Information ist also auch die Übermittlung
des Kontextes (Meta-Information), in der die Informationen generiert
wurden, von Bedeutung, damit diese korrekt interpretiert werden kann
[DAM03].
Wenn man die Kommunikation für bestimmte Fragestellungen(z. B.
Antwort einer Diskussion) behandeln möchte, so zeigt es in der Software-
Entwicklung drei Formen auf: linear, hierarchisch und in einem Netzwerk.
Diese sind chronologisch dargestellt und berücksichtigen die Zeit seit dem
Beginn der eingetretenen Fragestellung.

   Abbildung 8: Lineare-, Hierarchische- und Netzform [ROS87]

Der Diskussionsstartpunkt (siehe Abb.8) beginnt und je nach Verlauf und
Bedürfnis kann sich in dieser drei Formen, gegen die Zeit,
weiterentwickeln.   Die lineare Form wird meist auftreten, wenn die
Diskussion kurz andauert, und die Lösung (in Form einer Antwort) der
ausgelösten Diskussion gefunden wurde. Diese dauert am kürzesten und
kostet auch am wenigsten Ressourcen. Die hierarchische Form tritt auf,
wenn die Verhältnisse zwischen Mitteilungen, wie Fragen und Antworten,

                                                 24
schnell identifiziert werden müssen und sich ständig splitten. Diese
werden aus einem Diskussionspunkt ausgelöst, werden aber später in
divergente Lösungsformen entwickelt. Es gibt keine Möglichkeit einmal auf
einem Pfad zurückzukommen, die Linien laufen auseinander. Die Netzform
tritt auf, wenn die Diskussion auch andere Pfade konvergierend erreicht.
Meist werden diese Wege einer Nachricht in Organisationen oft unbewusst
ablaufen, dennoch existieren sie. Da man ein menschliches Verhalten, auf
eine Nachrichtenreaktion bezogen nicht vorhersehen kann, gibt es keine
Möglichkeit einige Werte (wie z.B. die Laufzeit einer Diskussion) von vorne
zu berechnen.

3.3 Koordination: die Planung von Aktionen
Die Koordination der Team-Mitglieder hängt stark von der Kommunikation
und auch der Kooperation, zusammen. Mit Koordination werden Personen
oder Sachen für die Erfüllung einer bestimmten Aufgabe koordiniert. Einige
Ausprägungen der Koordination sind: Aufteilung in Teilaufgaben,
Zusammenführen der Ergebnisse, Zuordnung der Aufgaben und zeitliche
Ordnung der Aufgaben. Die Koordination ist daher ein Teil der
kollaborativen Aufgaben und bezieht sich auf die Organisation der
Aufgaben [ALT99]. Damit dient die Koordination zur Regelung der
gegenseitigen Abstimmung der Kooperationspartner [DAM03].
Es gibt zwei Phasen, die für eine Koordination notwendig sind. Die erste
Phase ist die Vorartikulation (eng. pre-articulation), welche die Tätigkeiten
schließt, die essenziell sind, um eine Koordination vorzubereiten, wie z.B.
Anbahnung, Vereinbarung. Diese werden, normalerweise, abgeschlossen
bevor die Mitarbeiter anfangen sich mit den Zielen der Aufgabe, den
Diagrammen zu beschäftigen. Die Postartikulation Phase tritt nachdem die
Aufgabe erledigt wurde auf und bezieht eine Auswertung der Analyse von
Aufgaben und die Unterlagen des kooperativen Prozesses mit ein (Bsp.
Kontrolle, Anpassung) [WIN05].
Arbeiten mehrere Menschen an einer Software zusammen, entstehen
bezogen auf die Koordination, zwei substanzielle Fragen: Was soll präzise
die Software sein, an der alle arbeiten? Wie kann der Vorgang des
Arbeitens in der Weise abgestimmt werden, dass Gruppenmitglieder
einander nicht behindert?
Die Koordination selbst ist kontrovers, weil der Koordinationsaufwand bei
gut gelungenen Abstimmungen kleiner ist. Nach Crowston et al. soll eine
Koordination so effektiv gestaltet sein, dass eine weitere Koordination
später nicht notwendig wird. Wenn man die Abhängigkeiten richtig
managt, so ist das Ziel des Managements gerade die Verringerung dieser
Abhängigkeiten [CAH04]. Je deutlichere Koordinationsstrukturen es zu
Projektbeginn gibt, desto besser wird der Projektverlauf durchgeführt.
Massnahmen, wie die Modularisierung des Programmcodes, aber auch das
Meiden von Abhängigkeiten der Entwickler voneinander, sind einige
Beispiele, wie man die Arbeit entwicklungsfähiger macht und das Projekt

                                     25
schneller fertig gestellt werden kann. Ein Programmierer kann aus einem
Eintrag der TODO-Liste eine Aufgabe voluntaristisch auswählen und das
dann als „gestartet“ markieren.
Treten fehlerhafte Koordinationsprozesse ein, so müssen diese durch die
Kommunikation der Teilnehmer ausbalanciert werden. Eine reibungslose
Kommunikation ist essenziell für die globale Effizienz. Die konkreten
Koordinationsziele müssen durch die Kommunikation optimiert werden,
dadurch, dass die Kommunikation einfach, vertrauensvoll und schnell
zwischen richtigen Personen aufgenommen werden muss. Die Mitteilung
muss verständlich sein [CAH04]. Bei den untersuchten Projekten von
Crowston et al. ist die Effektivität der Entwicklung oft verschieden, aber
auch widersprüchlich, weil eine große Projektmenge berücksichtigt wurde.

3.4 Kooperation: Schaffung in dem gemeinsamen
Arbeitsumfeld
Die Kooperation bildet grundsätzlich einen strategischen Rahmen der
Kollaboration bzw. der Zusammenarbeit und wird dabei durch die
Kooperationsform bestimmt. Es gibt mehrere Erscheinungsformen einer
Kooperation, welche aus dem Kontext der gemeinsamen Ziele folgt. Die
Mitglieder der Gruppe beschäftigen sich zusammen mit der Erstellung,
Manipulation, Organisation von Daten, Meta-Daten und Informationen. Sie
bearbeiten Objekte wie Dokumente, Tabellen, Grafiken usw. Das
gemeinsame Arbeitsumfeld ist zu teilen und bedingt eine Kooperation, es
bietet auch eine Reihe von Werkzeugen für die Verwaltung der Aufgaben.
Mit den gemeinsamen Prozessen von Informationen, ist die Gruppe in der
Lage auf das kollektive Wertesystem einzugehen und falls notwendig, auf
die Geschichte einer Diskussion oder den Kontext dieser Diskussion, in der
eine Entscheidung gemacht wurde.
Zur Beschreibung der Kooperationsform existiert, wie erwähnt, eine
Vielzahl an Klassifikationskriterien. Im Wesentlichen werden in einer
Kooperation    zeitliche  Häufigkeit,   Dauer,    Anzahl   der   Partner,
Kooperationsrichtung, Bindungsintensität und Befristung sowie die
Partnerherkunft festgelegt. Weitere Kriterien, die strategisch wesenhaft
sind, bilden den Grad der Intensität im Hinblick auf die Motivation,
Vertrauen und Abhängigkeiten zwischen Organisationen sowie die Art der
Kooperationsbereiche z.B. in Bezug auf Unterschiede in der
Kommunikation zwischen sozial orientierten und technologisch orientierten
Bereichen [SMZ03].
Angesichts der Anzahl von Kooperationsteilnehmer existiert meistens
keine Einschränkung in den einzelnen Kooperationsformen. Somit ist
festzusetzen, dass in beinahe jeder Kooperationsform von bilateralen
Beziehungen bis zu komplizierten Netzwerken alle Ausprägungen realisiert
werden können. Dies ist sowohl bei der Gestaltung der Softwareprozesse
als auch bei der Gestaltung der Koordinationsprozesse in einer
Kooperation zu berücksichtigen. Durch das sporadische Eintreten oder
Ausscheiden von Mitgliedern in die bzw. aus der Kooperation, werden neue

                                    26
Kooperationsstrukturen entstehen         und die  Koordinations- und
Kommunikationsprozesse gewinnen          an Komplexität bzw. werden
vereinfacht.
Eine Definition nach Altmann, beschreibt die kooperative Software-
Entwicklung [ALT99, S. 20] als
        „die Abdeckung der Kommunikations- und Koordinationsbedarfe
innerhalb eines Software-Entwicklungsprozesses, die für die Planung,
Durchführung und Abstimmung aller aufgabenbezogenen, zeitlich und
räumlich verteilten Aktivitäten erforderlich sind. Die kooperative Software-
Entwicklung      umfasst     dementsprechend         alle   prozess-    und
produktbezogenen Aktivitäten aller Beteiligten, deren gemeinsames Ziel
die Erstellung eines Softwareproduktes ist“.
Damit bekräftigt Altmann, dass alle drei K: Kommunikation, Koordination
und Kooperation erforderlich sind, um eine gemeinsame Aufgabe, im
Rahmen der Softwareerstellung, erledigen zu können. Kooperation führt
häufig zum Nutzen für alle Beteiligten. In manchen Kooperationsformen
kann es auch vorkommen, dass eine Seite mehr oder alle Vorteile aus
dieser Kooperation zieht. Altmann betont auch den positiven Einfluss
sozialer und organisatorischer Unterstützung (siehe Abschnitt Soziale
Struktur) der Mitarbeiter für eine erfolgreiche Zusammenarbeit.
Abschließend ist zu argumentieren, dass der Begriff „Kollaboration“ (auf
Deutsch „Zusammenarbeit“) aus allen drei Elementen (die drei K) in der
Software-Entwicklung besteht: aus der Kommunikation, Koordination und
Kooperation. Andriessen [AND03] bietet feinen Überblick über die
Kollaborations-Technologie in der Softwarebranche (siehe Tabelle 1).

                                    27
Support between          Support for             Support for
                        encounters:              synchronous             synchronous
                        asynchronous             electronic              electronic
                        communication            encounters              encounters
              different place/                   different place/ same same place/ same
              different time                     time                  time
Communication    fax                                telephone/ mobile
Systems          e-mail                             audio systems
                 voice-mail                         video systems
                 video-mail                         chat systems

Information               document sharing           tele-consultation    presentation
sharing systems           systems                    systems              systems
                          message boards             co-browser
                          document co-               shared CAD,
                          authoring                  whiteboard, word-    group decision
Co-operation                                         processor,           support systems
systems                                              spreadsheet          (meeting
                                                                          support
                                                                          systems)
Co-ordination
systems                    group-calendar            notification         command and

                                                     systems, e.g.        control centre
                          shared planning            active batch         support systems
                          shared workflow
                          management
                          systems
                          event manager
                          subgroup spaces

Social encounter                                     media spaces
Systems                                              virtual reality
Tabelle 1: Kollaborations-Technologie [AND03]

Aus der Tabelle lässt sich erkennen, ob der Ort, die Zeit und die
Verbindung zwischen Mitgliedern synchron oder asynchron ablaufen. Die
entsprechende Kollaborations-Technologie wird dann eingesetzt. Die
Koordination der Gruppenmitglieder erfolgt bei unterschiedlichen Orten
und Zeit über die      z.B. beliebten Gruppenkalender Systeme. Die
Kommunikation kann in diesem Fall über Fax, E-Mail, Audio- oder
Videobotschaft erfolgen. Wenn die Zeit und der Ort übereinstimmen,
können durch eine Kooperation mittels dafür bestimmten Meetings
unterstützende Systeme stattfinden.

                                                28
Sie können auch lesen