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. Paketzyklen  
    Diagnose,  Therapie  und  Prophylaxe  
    David  Burkhart,  Marc  Philipp  

    View Slide

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

    View Slide

  3. ©  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  

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  8. ©  2014  andrena  objects  ag    
    Paketzyklen  -­‐  Diagnose,  Therapie  und  Prophylaxe  
    8  
    Therapie  

    View Slide

  9. ©  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  

    View Slide

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

    View Slide

  11. ©  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  

    View Slide

  12. ©  2014  andrena  objects  ag    
    Usus  –  Demo:  Package  Cycle  Diagnose  
    Paketzyklen  -­‐  Diagnose,  Therapie  und  Prophylaxe  
    12  

    View Slide

  13. ©  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  

    View Slide

  14. ©  2014  andrena  objects  ag    
    Paketzyklen  -­‐  Diagnose,  Therapie  und  Prophylaxe  
    14  
    Prophylaxe  

    View Slide

  15. ©  2014  andrena  objects  ag    
    Ziel:  Verhindern  neuer  Package  Cycles  
    Paketzyklen  -­‐  Diagnose,  Therapie  und  Prophylaxe  
    15  
    automa7siert!  

    View Slide

  16. ©  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  

    View Slide

  17. ©  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  

    View Slide

  18. ©  2014  andrena  objects  ag    
    KonfiguraIon  
    Paketzyklen  -­‐  Diagnose,  Therapie  und  Prophylaxe  
    18  

    View Slide

  19. ©  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  

    View Slide

  20. ©  2014  andrena  objects  ag    
    Genauere  Analyse  mit  Usus  
    Paketzyklen  -­‐  Diagnose,  Therapie  und  Prophylaxe  
    20  

    View Slide

  21. ©  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  

    View Slide