Seminar Softwaretechnik SS2005 Radouane El Marjani ( [email protected] ) Institut für...

33
Seminar Softwaretechnik SS2005 Radouane El Marjani ([email protected]) Institut für Softwaretechnik und theoretische Informatik Fakultät IV - Elektrotechnik und Informatik TU Berlin Prof. Dr.-Ing. Stefan Jähnichen Bad Smells in Packages, Subsysteme und Schichten Radouane El Marjani – Informatik Betreuerin Dipl.-Inform. Susanne Jucknath-John

Transcript of Seminar Softwaretechnik SS2005 Radouane El Marjani ( [email protected] ) Institut für...

Page 1: Seminar Softwaretechnik SS2005 Radouane El Marjani ( radouane@cs.tu-berlin.de ) Institut für Softwaretechnik und theoretische Informatik Fakultät IV -

Seminar Softwaretechnik SS2005 Radouane El Marjani ([email protected])

Institut für Softwaretechnik und theoretische Informatik

Fakultät IV - Elektrotechnik und Informatik TU Berlin

Prof. Dr.-Ing. Stefan Jähnichen

Bad Smells in Packages, Subsysteme und Schichten

Radouane El Marjani – Informatik

Betreuerin

Dipl.-Inform.  Susanne Jucknath-John

Page 2: Seminar Softwaretechnik SS2005 Radouane El Marjani ( radouane@cs.tu-berlin.de ) Institut für Softwaretechnik und theoretische Informatik Fakultät IV -

Gliederung

Refactoring & Smells.

Code-Smells & Architektur-Smells.

Smells in Packages und ihre Arten.

Smells in Subsystemen und ihre Arten.

Smells in Schichten und ihre Arten.

Seminar Softwaretechnik SS2005 Radouane El Marjani ([email protected])

Page 3: Seminar Softwaretechnik SS2005 Radouane El Marjani ( radouane@cs.tu-berlin.de ) Institut für Softwaretechnik und theoretische Informatik Fakultät IV -

Refactoring & Smells Refactoring ist:Verbesserung des Designs von Code, nachdem er geschrieben wurde.

Ziel von Refactoring ist:Veränderung trotz Beibehaltung des Verhaltens nach außen hin.

Beim Betrachtung eines Systems von erfahrenen Entwickler, bekommen sie sehr schnell ein Gefühl für die Schwachstellen des Systems.

Man sagt das System riecht, es hat Smells.

Seminar Softwaretechnik SS2005 Radouane El Marjani ([email protected])

Page 4: Seminar Softwaretechnik SS2005 Radouane El Marjani ( radouane@cs.tu-berlin.de ) Institut für Softwaretechnik und theoretische Informatik Fakultät IV -

Code- und Architektur-Smells

Code-Smells sind kleine Gerüche(z.B. lange Methoden), die mit den kleinen Refactorings beheben lassen.

Architektur-Smells weisen aber auf die Stellen in der Architektur des Systems hin, die genauer analysiert werden sollten.Folgerichtig führen zu großen Refactoring.

Seminar Softwaretechnik SS2005 Radouane El Marjani ([email protected])

Page 5: Seminar Softwaretechnik SS2005 Radouane El Marjani ( radouane@cs.tu-berlin.de ) Institut für Softwaretechnik und theoretische Informatik Fakultät IV -

Architektur-Smells

Architektur-Smells sind auf unterschiedlichen Ebenen zu finden:

In den Benutzungs- und Vererbungsbeziehungen zwischen Klassen

Innerhalb und zwischen Packages.

In und zwischen Subsystemen.

In und zwischen Schichten (Layer).

Seminar Softwaretechnik SS2005 Radouane El Marjani ([email protected])

Page 6: Seminar Softwaretechnik SS2005 Radouane El Marjani ( radouane@cs.tu-berlin.de ) Institut für Softwaretechnik und theoretische Informatik Fakultät IV -

Smells Arten in Packages(1)

Unbenutzte Packages.

Zyklen zwischen Packages.

Zu kleine Packages.

Zu große Packages.

Packages zu tief oder unausgewogen geschachtelt

Packages unklar benannt

Seminar Softwaretechnik SS2005 Radouane El Marjani ([email protected])

Page 7: Seminar Softwaretechnik SS2005 Radouane El Marjani ( radouane@cs.tu-berlin.de ) Institut für Softwaretechnik und theoretische Informatik Fakultät IV -

Smells Arten in Packages(2)Unbenutzte Packages belasten das System.

Unbenutzte Packages entstehen vor allem aus drei Gründen:

Refactoring.

Veränderte Anforderungen.

Technologie auf Vorrat.

Seminar Softwaretechnik SS2005 Radouane El Marjani ([email protected])

Page 8: Seminar Softwaretechnik SS2005 Radouane El Marjani ( radouane@cs.tu-berlin.de ) Institut für Softwaretechnik und theoretische Informatik Fakultät IV -

Smells Arten in Packages(3)Zyklen zwischen Packages können über Benutzung oder Vererbung gebildet werden und deuten häufig auf ungünstig geschnittene Packages hin.

Zyklen zwischen Packages erschweren:Wiederverwendbarkeit.

Verständlichkeit.

Testbarkeit.

Entwurfsklarheit.

Seminar Softwaretechnik SS2005 Radouane El Marjani ([email protected])

A

B C

Page 9: Seminar Softwaretechnik SS2005 Radouane El Marjani ( radouane@cs.tu-berlin.de ) Institut für Softwaretechnik und theoretische Informatik Fakultät IV -

Smells Arten in Packages(4)

Zu kleine Packages sind Packages mit einer oder zwei Klassen.

Beseitigung, indem die Klassen anderen Packages zugeschlagen werden.

Aber es sollen möglichst keine neuen Zyklen zwischen Packages entstehen.

Seminar Softwaretechnik SS2005 Radouane El Marjani ([email protected])

Page 10: Seminar Softwaretechnik SS2005 Radouane El Marjani ( radouane@cs.tu-berlin.de ) Institut für Softwaretechnik und theoretische Informatik Fakultät IV -

Smells Arten in Packages(5)

Zu große Packages sind Packages mit sehr vielen Klassen.

Das Erlernen des Packages wird dadurch erschwert. Aufspaltung in mehrere Sub-Packages erleichtert das Erlernen.

Zu große Packages deuten auf fehlende Subsysteme hin.

Seminar Softwaretechnik SS2005 Radouane El Marjani ([email protected])

Page 11: Seminar Softwaretechnik SS2005 Radouane El Marjani ( radouane@cs.tu-berlin.de ) Institut für Softwaretechnik und theoretische Informatik Fakultät IV -

Smells Arten in Packages(6)

Packages zu tief oder unausgewogen geschachtelt: schwerer zu verstehen als flache und ausgewogen geschachtelte.

Packages sind zu tief, wenn sie mehr als drei Ebenen benötigen.

Packages sind unausgewogen geschachtelt, wenn sie nicht in gleichen Ebenen sind.

Seminar Softwaretechnik SS2005 Radouane El Marjani ([email protected])

Page 12: Seminar Softwaretechnik SS2005 Radouane El Marjani ( radouane@cs.tu-berlin.de ) Institut für Softwaretechnik und theoretische Informatik Fakultät IV -

Smells Arten in Packages(7)

Unklar benannte Packages deuten drauf hin, dass die Entwickler nicht wirklich verstanden haben, was sich in den Packages findet.

Unklar benannte Packages deuten darauf hin, dass die Packages-Struktur unzureichend im Projektteam kommuniziert ist.

Seminar Softwaretechnik SS2005 Radouane El Marjani ([email protected])

Page 13: Seminar Softwaretechnik SS2005 Radouane El Marjani ( radouane@cs.tu-berlin.de ) Institut für Softwaretechnik und theoretische Informatik Fakultät IV -

Smells in Subsystemen(1)

Subsystemen fassen Packages zusammen, ähnlich wie das Packages für Klassen tun.

Sie unterscheiden zwischen interner Realisierung und öffentlicher Schnittstelle.

Ein großes System sollte in Subsysteme zerteilt sein. Das unterstützt:

Erlernbarkeit, Wartbarkeit, Multiprojektentwicklung, Deployment des Systems und Testbarkeit.

Seminar Softwaretechnik SS2005 Radouane El Marjani ([email protected])

Page 14: Seminar Softwaretechnik SS2005 Radouane El Marjani ( radouane@cs.tu-berlin.de ) Institut für Softwaretechnik und theoretische Informatik Fakultät IV -

Smells in Subsystemen(2)In sehr großen Systemen kann das Subsystem rekursiv angewendet werden.

Je nach Terminologie heißen Subsysteme auch Komponenten, Plug-ins oder Teilsysteme.

Viele Programmiersprachen bieten keine Möglichkeit, Subsysteme zu definieren.

folglich muss mit Konventionen gearbeitet werden.

Seminar Softwaretechnik SS2005 Radouane El Marjani ([email protected])

Page 15: Seminar Softwaretechnik SS2005 Radouane El Marjani ( radouane@cs.tu-berlin.de ) Institut für Softwaretechnik und theoretische Informatik Fakultät IV -

Smells Arten in Subsystemen(1)Keine Subsysteme, nur viele Packages.

Subsystem zu groß.

Subsystem zu klein.

Zu viele Subsysteme.

Subsystem-API wird umgangen.

Subsystem-API zu groß.

Zyklen zwischen Subsysteme.

Übergeneralisierung.

Seminar Softwaretechnik SS2005 Radouane El Marjani ([email protected])

Page 16: Seminar Softwaretechnik SS2005 Radouane El Marjani ( radouane@cs.tu-berlin.de ) Institut für Softwaretechnik und theoretische Informatik Fakultät IV -

Smells Arten in Subsystemen(2)

Fehlende Subsysteme bei großem System.

Die Struktur des Systems ist auf Ebene von Packages definiert.

Es ist schwer, die Struktur der Packages zu definieren, zu erkennen und konsistent einzuhalten.

Seminar Softwaretechnik SS2005 Radouane El Marjani ([email protected])

Page 17: Seminar Softwaretechnik SS2005 Radouane El Marjani ( radouane@cs.tu-berlin.de ) Institut für Softwaretechnik und theoretische Informatik Fakultät IV -

Smells Arten in Subsystemen(3)Subsysteme sind zu groß: Sie werden unverständlich und haben zu viel Verantwortung zu tragen.

Subsysteme sind zu klein: Sie verlagern Komplexität aus den Subsystem in die Abhängigkeiten der Subsysteme untereinander.

Zu viele Subsysteme in einem System beeinträchtigen erheblich das Systemverständnis.

Seminar Softwaretechnik SS2005 Radouane El Marjani ([email protected])

Page 18: Seminar Softwaretechnik SS2005 Radouane El Marjani ( radouane@cs.tu-berlin.de ) Institut für Softwaretechnik und theoretische Informatik Fakultät IV -

Smells Arten in Subsystemen(4)

Subsystem –API wird umgangen

Viele Programmiersprachen können keine Subsysteme definieren - Konventionen sind notwendig.

Die öffentliche Schnittstelle -das API- des Subsystems wird durch Konventionen definiert.

Solche Konventionen werden in einer Notlage oft umgangen.

Seminar Softwaretechnik SS2005 Radouane El Marjani ([email protected])

Page 19: Seminar Softwaretechnik SS2005 Radouane El Marjani ( radouane@cs.tu-berlin.de ) Institut für Softwaretechnik und theoretische Informatik Fakultät IV -

Smells Arten in Subsystemen(5)Das Umgehen des Subsystem-API und der direkte Durchgriff auf die Komponenten sind ein häufiges Problem!

Beim direkten Zugriff vergrößern Klienten das Subsystem API, was zu weiteren Problemen führt.

Seminar Softwaretechnik SS2005 Radouane El Marjani ([email protected])

Page 20: Seminar Softwaretechnik SS2005 Radouane El Marjani ( radouane@cs.tu-berlin.de ) Institut für Softwaretechnik und theoretische Informatik Fakultät IV -

Smells Arten in Subsystemen(6)

Seminar Softwaretechnik SS2005 Radouane El Marjani ([email protected])

Subsystem A

Subsystem C

Subsystem BInterne Klasse

Page 21: Seminar Softwaretechnik SS2005 Radouane El Marjani ( radouane@cs.tu-berlin.de ) Institut für Softwaretechnik und theoretische Informatik Fakultät IV -

Smells Arten in Subsystemen(7)Ist das Subsystem-API zu groß, wird der Hauptnutzen der Subsysteme nicht erreicht.

Ob ein Subsystem-API zu groß ist, hängt vom Verhältnis der Anzahl der Klassen im API und im gesamten Subsystem ab. Es gibt aber keine allgemeinen Richtwerte.

Seminar Softwaretechnik SS2005 Radouane El Marjani ([email protected])

Page 22: Seminar Softwaretechnik SS2005 Radouane El Marjani ( radouane@cs.tu-berlin.de ) Institut für Softwaretechnik und theoretische Informatik Fakultät IV -

Smells Arten in Subsystemen(8)

Seminar Softwaretechnik SS2005 Radouane El Marjani ([email protected])

AC

ED

B

API Impl

Page 23: Seminar Softwaretechnik SS2005 Radouane El Marjani ( radouane@cs.tu-berlin.de ) Institut für Softwaretechnik und theoretische Informatik Fakultät IV -

Smells Arten in Subsystemen(9)

Zyklen zwischen Subsystemen können über Benutzung oder Vererbung gebildet werden

Zyklen zwischen Subsystemen erschweren:Wiederverwendbarkeit.

Verständlichkeit.

Testbarkeit.

Entwurfsklarheit.

Parallele Entwicklung.

Seminar Softwaretechnik SS2005 Radouane El Marjani ([email protected])

Page 24: Seminar Softwaretechnik SS2005 Radouane El Marjani ( radouane@cs.tu-berlin.de ) Institut für Softwaretechnik und theoretische Informatik Fakultät IV -

Smells Arten in Subsystemen(10)Subsysteme müssen flexibel (generalisiert) sein, doch Übergeneralisierung wird zum Problem (mehr Aufwand, schwierige Anwendung des Subsystem).

Indikator für Übergeneralisierungviel Code für die Parametrisierung/ Spezialisierung notwendig.

Seminar Softwaretechnik SS2005 Radouane El Marjani ([email protected])

Page 25: Seminar Softwaretechnik SS2005 Radouane El Marjani ( radouane@cs.tu-berlin.de ) Institut für Softwaretechnik und theoretische Informatik Fakultät IV -

Smells in Schichten(1)Neben der Aufteilung eines großen Systems in Subsysteme hat sich das Anordnen der Subsysteme in Schichten bewährt.

Jede Schicht ist für einen bestimmten Aspekt des Systems zuständig.

Als Beispiel: 3-Schichten-Modell (3-tier-architecture), ISO-Modell…

Trennung Oberflächendefinition, Fachlogik und Datenhaltung voneinander (3-tier-architecture).

Seminar Softwaretechnik SS2005 Radouane El Marjani ([email protected])

Page 26: Seminar Softwaretechnik SS2005 Radouane El Marjani ( radouane@cs.tu-berlin.de ) Institut für Softwaretechnik und theoretische Informatik Fakultät IV -

Smells in Schichten(2)Strikte Schichten: Jede Schicht darf nur auf die direkt unter ihr liegende Schicht zugreifen

Nicht strikte Schichten: Eine Schicht darf die unter ihr liegende Schicht hindurchgreifen und weiter unter liegende Schichten verwenden.

Bei protokollorientierten Schichten werden die Schnittstellen zwischen den Schichten durch Funktionen gebildet. Bei objektorientierten Schichten umfassen die Schnittstellen Interfaces und abstrakte Klassen.

Seminar Softwaretechnik SS2005 Radouane El Marjani ([email protected])

Page 27: Seminar Softwaretechnik SS2005 Radouane El Marjani ( radouane@cs.tu-berlin.de ) Institut für Softwaretechnik und theoretische Informatik Fakultät IV -

Smells Arten in Schichten(1)

Keine Schichten.

Aufwärtsreferenzen zwischen Schichten (Zyklen).

Strikte Schichtung durchbrochen.

Zu viele Schichten.

Referenzen zwischen vertikal getrennten Schichten.

Seminar Softwaretechnik SS2005 Radouane El Marjani ([email protected])

Page 28: Seminar Softwaretechnik SS2005 Radouane El Marjani ( radouane@cs.tu-berlin.de ) Institut für Softwaretechnik und theoretische Informatik Fakultät IV -

Smells Arten in Schichten(2)Ein System mit vielen Subsystemen ist ohne Schichten schwer bei Änderungsanforderungen zu ermitteln, welche Subsysteme betroffen sind.

Verwendet eine Schicht eine höher liegende Schicht, so wird das Grund Prinzip der Schichtung durchgebrochen.

Durch Aufwärtsreferenzen entstehen Zyklen zwischen Schichten.

Seminar Softwaretechnik SS2005 Radouane El Marjani ([email protected])

Page 29: Seminar Softwaretechnik SS2005 Radouane El Marjani ( radouane@cs.tu-berlin.de ) Institut für Softwaretechnik und theoretische Informatik Fakultät IV -

Smells Arten in Schichten(3)Viele Programmiersprachen können keine Schichten definieren - Konventionen sind notwendig.

Strikte Schichtung Durchbrochen schwer zu verhindern.

Die Zahl der möglichen Klienten einer Schicht nimmt zu und die Abhängigkeiten zwischen den Schichten werden verstärkt.

Seminar Softwaretechnik SS2005 Radouane El Marjani ([email protected])

Page 30: Seminar Softwaretechnik SS2005 Radouane El Marjani ( radouane@cs.tu-berlin.de ) Institut für Softwaretechnik und theoretische Informatik Fakultät IV -

Smells Arten in Schichten(4)Strikte protokollorientierte Schichten führen zu Indirektionen.

Wenn zu viele Schichten existieren, können so unnötige Indirektionen entstehen.

Es treten eine Reihen negativer Effekte auf:Es muss Aufwand in die Programmierung von Methoden ohne eigene Leistung investiert werden.

Das Programmverständnis wird erschwert.

Änderung sind nur mit hohem Aufwand durchführbar.

Seminar Softwaretechnik SS2005 Radouane El Marjani ([email protected])

Page 31: Seminar Softwaretechnik SS2005 Radouane El Marjani ( radouane@cs.tu-berlin.de ) Institut für Softwaretechnik und theoretische Informatik Fakultät IV -

Smells Arten in Schichten(5)Schichten sind nicht nur horizontal, sondern auch vertikal geschnitten werden können.

Referenzen zwischen vertikal getrennten Schichten machen die Produkte voneinander abhängig.

Die Ziele von Produktlinien nicht mehr erreicht werden:

Auslieferung

Parallele Entwicklung

Seminar Softwaretechnik SS2005 Radouane El Marjani ([email protected])

Page 32: Seminar Softwaretechnik SS2005 Radouane El Marjani ( radouane@cs.tu-berlin.de ) Institut für Softwaretechnik und theoretische Informatik Fakultät IV -

Smells Arten in Schichten(5)

Seminar Softwaretechnik SS2005 Radouane El Marjani ([email protected])

S1Oberfläche

Fachlogik

Datenhaltung

Strikte Schichtung durchbrochen Verletzung des Subsystem-API

Aufwärtesreferenz ist illegal

Abhängigkeit innerhalb einer schicht Produkt1 Produkt2

Page 33: Seminar Softwaretechnik SS2005 Radouane El Marjani ( radouane@cs.tu-berlin.de ) Institut für Softwaretechnik und theoretische Informatik Fakultät IV -

Seminar Softwaretechnik SS2005 Radouane El Marjani ([email protected])

Fragen ???