Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Paketzyklen – Diagnose, Therapie und Prophylaxe

Paketzyklen – Diagnose, Therapie und Prophylaxe

Sobald ein Softwaresystem mit Paketzyklen infiziert ist, besteht große Gefahr, dass sich diese Zyklen über die Zeit der Weiterentwicklung vergrößern und erweitern – sie wuchern. Die Begleiterscheinungen eines solchen Befalls sind gravierend: Schwierigere Modularisierung, erschwerte Verständlichkeit und damit auch teurere Weiterentwicklung. In diesem Vortrag wird am praktischen Beispiel gezeigt, wie eine gezielte Diagnose und Therapie von Paketzyklen durchgeführt werden kann. Weiterhin stellen wir eine wirksame Methode zur Prophylaxe für Softwarepatienten vor, die eine äußerst geringe Ansteckungsgefahr mit Zyklen garantiert.

Marc Philipp

July 17, 2014
Tweet

More Decks by Marc Philipp

Other Decks in Programming

Transcript

  1. ©  2014  andrena  objects  ag     2   Diagnose

      Paketzyklen  -­‐  Diagnose,  Therapie  und  Prophylaxe  
  2. ©  2014  andrena  objects  ag     Was  ist  ein

     Package  Cycle?   Menge  von  Packages,   wobei  jedes  Package   (transiIv)  von  jedem   anderen  Package  abhängt.   3   Paketzyklen  -­‐  Diagnose,  Therapie  und  Prophylaxe  
  3. ©  2014  andrena  objects  ag     Package  Cycle  ≠

     Class  Cycle   Package  Cycle   Nicht  unbedingt  ein  Class  Cycle   4   Paketzyklen  -­‐  Diagnose,  Therapie  und  Prophylaxe  
  4. ©  2014  andrena  objects  ag     Verständlichkeit?   Paketzyklen

     -­‐  Diagnose,  Therapie  und  Prophylaxe   5   Viele  Wege  durch   das  Labyrinth   Klare  Verantwort-­‐ lichkeiten?   Komplexität!   Testbarkeit?   Architektur?  
  5. ©  2014  andrena  objects  ag     Modularisierung?   Paketzyklen

     -­‐  Diagnose,  Therapie  und  Prophylaxe   6   Wiederverwendbar   Paralleles  Arbeiten   möglich  
  6. ©  2014  andrena  objects  ag     Modularisierung!   Paketzyklen

     -­‐  Diagnose,  Therapie  und  Prophylaxe   7   Zyklen  lokal  è  kleiner  
  7. ©  2014  andrena  objects  ag     Paketzyklen  -­‐  Diagnose,

     Therapie  und  Prophylaxe   8   Therapie  
  8. ©  2014  andrena  objects  ag     Algorithmus  zur  En]ernung

     von  Package  Cycles   1.  Visualisieren   2.  Verstehen   3.  Mögliche  Lösungen  ableiten   4.  Lösung  ausprobieren   5.  Behoben?  Einchecken  oder  gehe  zu  2.   Paketzyklen  -­‐  Diagnose,  Therapie  und  Prophylaxe   9  
  9. ©  2014  andrena  objects  ag     Usus  –  Metriken

     direkt  in  Eclipse   Open  Source  (EPL),  hcp://www.projectusus.org     Paketzyklen  -­‐  Diagnose,  Therapie  und  Prophylaxe   10  
  10. ©  2014  andrena  objects  ag     Usus  –  Metriken

     direkt  in  Eclipse   •  Plugin  für  Eclipse   •  Misst  Metriken  während   des  Builds  in  Eclipse   •  SoforIges  Feedback  ohne   Context  Switch   •  Direkter  Hinweis  auf   verbesserte/ verschlechterte  Code-­‐ Stellen   Paketzyklen  -­‐  Diagnose,  Therapie  und  Prophylaxe   11  
  11. ©  2014  andrena  objects  ag     Usus  –  Demo:

     Package  Cycle  Diagnose   Paketzyklen  -­‐  Diagnose,  Therapie  und  Prophylaxe   12  
  12. ©  2014  andrena  objects  ag     Algorithmus  zur  En]ernung

     von  Package  Cycles   1.  Visualisieren   2.  Verstehen   3.  Mögliche  Lösungen  ableiten   4.  Lösung  ausprobieren   5.  Behoben?  Einchecken  oder  gehe  zu  2.   Paketzyklen  -­‐  Diagnose,  Therapie  und  Prophylaxe   13   Layouts   Filter   Refactorings   Hotspots   Graphen  
  13. ©  2014  andrena  objects  ag     Paketzyklen  -­‐  Diagnose,

     Therapie  und  Prophylaxe   14   Prophylaxe  
  14. ©  2014  andrena  objects  ag     Ziel:  Verhindern  neuer

     Package  Cycles   Paketzyklen  -­‐  Diagnose,  Therapie  und  Prophylaxe   15   automa7siert!  
  15. ©  2014  andrena  objects  ag     Maven  Enforcer  Plugin

      •  Überprün  Regeln   während  der  Ausführung   des  Builds   •  KonfiguraIon  über   pom.xml   •  Standardregeln   •  Selbst  definierte  Regeln   Paketzyklen  -­‐  Diagnose,  Therapie  und  Prophylaxe   16   hcps://flic.kr/p/Boiy7  
  16. ©  2014  andrena  objects  ag     NoPackageCyclesRule   • 

    Selbst  geschriebene  Regel   •  Verwendet  JDepend   hcps://github.com/andrena/no-­‐package-­‐cycles-­‐enforcer-­‐rule     AlternaIve  zu  Maven-­‐Plugin:  JUnit-­‐Test   Paketzyklen  -­‐  Diagnose,  Therapie  und  Prophylaxe   17  
  17. ©  2014  andrena  objects  ag     KonfiguraIon   Paketzyklen

     -­‐  Diagnose,  Therapie  und  Prophylaxe   18  
  18. ©  2014  andrena  objects  ag     Fehlschlag   [WARNING]

     Rule  0:  de.andrena.tools.nopackagecycles.NoPackageCyclesRule  failed  with  message:   There  are  package  cycles:     Package-­‐cycle  found  involving  de.andrena.golf.course.client.ui.internal.editcourses,   de.andrena.golf.course.client.ui.internal.listcourses,  de.andrena.golf.course.client.ui.listcourses:          de.andrena.golf.course.client.ui.internal.editcourses  depends  on:                  de.andrena.golf.course.client.ui.internal.listcourses  (CourseEditor)          de.andrena.golf.course.client.ui.internal.listcourses  depends  on:                  de.andrena.golf.course.client.ui.internal.editcourses  (CourseListView$2,  CourseListView$3)                  de.andrena.golf.course.client.ui.listcourses  (CourseListView,  ReloadCourseListAnerJobDone$1)          de.andrena.golf.course.client.ui.listcourses  depends  on:                  de.andrena.golf.course.client.ui.internal.listcourses  (ReloadCourseList)     [ERROR]  Failed  to  execute  goal  org.apache.maven.plugins:maven-­‐enforcer-­‐plugin:1.2:enforce  (enforce-­‐no-­‐package-­‐cycles)  on  project   de.andrena.golf.course.client:  Some  Enforcer  rules  have  failed.  Look  above  for  specific  messages  explaining  why  the  rule  failed.  -­‐>   [Help  1]   Paketzyklen  -­‐  Diagnose,  Therapie  und  Prophylaxe   19  
  19. ©  2014  andrena  objects  ag     Genauere  Analyse  mit

     Usus   Paketzyklen  -­‐  Diagnose,  Therapie  und  Prophylaxe   20  
  20. ©  2014  andrena  objects  ag     Links   Project

     Usus   •  hcp://www.projectusus.org   Maven  Enforcer  Plugin   •  hcp://maven.apache.org/enforcer/maven-­‐enforcer-­‐plugin/   •  hcp://maven.apache.org/enforcer/enforcer-­‐api/wriIng-­‐a-­‐custom-­‐rule.html   No  Package  Cycles  Enforcer  Rule   •  hcps://github.com/andrena/no-­‐package-­‐cycles-­‐enforcer-­‐rule   JDepend   •  hcp://clarkware.com/sonware/JDepend.html     Paketzyklen  -­‐  Diagnose,  Therapie  und  Prophylaxe   21   David  Burkhart   Mail  [email protected]       Marc  Philipp   Mail  [email protected]   Twi;er  @marcphilipp   Blog  marcphilipp.de