SlideShare a Scribd company logo
1 of 24
Sonar@Origin Platform

• Ειςαγωγό – Τι εύναι το Sonar;
• Τι κϊνει και πωσ λειτουργεύ;
• Γιατύ Sonar;
• Πωσ αναλύουμε ϋνα project;
• Οι 7 ϊξονεσ τησ ποιότητασ
• Οι βαςικϋσ Μετρικϋσ και οι ςημαςύα τουσ




                                  OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
Sonar and me…
• Ενεργό μϋλοσ των user και developer mailing lists
• Κύριοσ contributor / release manager ςτα παρακϊτω
Plugins
      • SCM Stats
      • Google Calendar
      • Thucydides
      • Greek Pack ( Localization )
•   Contributor των παρακϊτω Plugins
      • Widget Lab
      • Branding
      • Scala (Support for Scala source code analysis)
• Co-Author του βιβλύου Sonar in Action
• Co-Author του DZone Sonar refcard - TBD


                                          OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
Ειςαγωγό – Τι εύναι το Sonar;

•   Open Source “code quality platform”
•   Εκατοντϊδεσ Μετρικϋσ τησ τρϋχουςα εικόνασ
ενόσ project
• Τόρηςη ιςτορικού και ςύγκριςη προόδου

• Τϊςεισ και Μελλοντικϋσ προβλϋψεισ

• Εργαλεύα για βελτύωςη τησ ποιότητασ



                              OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
Ειςαγωγό – Τι κϊνει το Sonar;

•   «Διαβϊζει» και αναλύει τον πηγαύο κώδικα
•   Υπολογύζει τισ τιμϋσ των μετρικών
• Καταγρϊφει τισ μετρικϋσ για το ςτιγμιότυπο (

snapshot ) τησ ανϊλυςησ
• Προβϊλλει τα αποτελϋςματα μϋςω widgets                      ςε
dashboards.


                                OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
Sonar για όλουσ …
Για τουσ testers => Ποια τμόματα του λογιςμικού
δεν ϋχουν επϊρκεια ςε Testing;


Για τουσ developers => Τι «προβλόματα» ϋχει ο
κώδικϊσ και πωσ μπορεύ να βελτιωθεύ;

Για τουσ architects => Το αρχικό design ϋχει
αρχύςει να «χαλϊει»; Τι γύνεται με την
πολυπλοκότητα;

Για τουσ managers => Δώςτε μου μετρικϋσ και
ποιεσ από αυτϋσ βελτιώθηκαν / χειροτϋρεψαν!


                          OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
… και για όλα
•   Αρχικϊ : Υποςτόριξη μόνο Java και 2-3 ϊλλεσ
γλώςςεσ.

•   Σόμερα : Πϊνω από 20 γλώςςεσ μϋςω Plugins

     Commercial : ABAP, C , Cobol, Natural, PL/SQL, Visual
     Basic


     Open Source : C++ , C#, Delphi, Drools, Flex, Groovy,
                Javascript, PHP, Python, XML ,
                 Web(xhtml, jsp , jsf, )


                                        OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
Βαςιςμϋνο ςε γνωςτϊ εργαλεύα
•   Static Analysis : PMD, FindBugs, CheckStyle
•   Code Coverage Tools: JaCoCo, Cobertura,
Emma, coverage.py
•   Unit Test execution : Junit, PHPUnit, Nunit ,
JsTestDriver
•   Complexity : PHP_Depend, Cecil
•   Duplications : Embedded Mechanism , CPD




                                    OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
Πωσ αναλύουμε ϋνα project
•   Sonar Runner : Ο προτεινόμενοσ τρόποσ – Για
κϊθε εύδουσ project και πηγαύο κώδικα

•   Maven: Μόνο για Java Maven projects

•   Sonar Ant Task : Μόνο για χρόςη ςε Ant build
scripts

•   Continuous Integration Engine :
Hudson/Jenkins, Bamboo κ.α.


                                 OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
Οι 7 ϊξονεσ τησ ποιότητασ
• Πιθανϊ ςφϊλματα κώδικα

• Διπλόσ κώδικασ

•   Unit Tests
• Coding   Rules
• Πολυπλοκότητα

•   Τεκμηρύωςη και Σχόλια
• Σχεδύαςη και Αρχιτεκτονικό



                               OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
Η ϋννοια του Tehcnical Debt



• Τι εύναι ; Το ςυνολικό και αυξανόμενο κόςτοσ

βελτύωςησ πρόχειρου ό κακογραμμϋνου κώδικα (
refactoring )
• Όλα τα projects   ϋχουν Technical Debt
•   Δεν εύναι απαραύτητα κακό, αρκεύ να μη ξεφύγει (όπωσ
και η χρϋωςη ςτισ πιςτωτικϋσ κϊρτεσ και τα δϊνεια)

                                    OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
Violations & Coding Rules
• Violation = Broken Coding Rule
• Γιατύ εύναι ςημαντικϋσ; Τι υποδηλώνουν;
    • Σύγουρα ςφϊλματα
    • Πιθανϊ ςφϊλματα,
    • Ενδεύξεισ για ανθρώπινα λϊθη
    • Καταςτϊςεισ που μπορεύ να οδηγόςουν ςε
    ανθρώπινα λϊθη ςτο μϋλλον
    • Μη αποδοτικό κώδικα (φιλικό ςε μνόμη &
    resources)
    • Στιλιςτικϋσ ατϋλειεσ


                                 OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
Violations & Coding Rules
                (Metrics)
•   Βαςικϋσ μετρικϋσ
     • Πλόθοσ violations ςε κϊθε κατηγορύα
     • Συμμόρφωςη ςε κανόνεσ (ςε ποςοςτό)




                                   OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
Διπλόσ Κώδικασ
• Πωσ δημιουργεύται;
  • Έλλειψη χρόνου – ςτενϊ χρονοδιαγρϊμματα
  • Φτωχό επικοινωνύα εντόσ τησ ομϊδασ ανϊπτυξησ
  • Μη κατανόηςη του domain, του προβλόματοσ
  προσ επύλυςη, του ύδιου του κώδικα
  • Projects merging
  • Πληρωμό για κϊθε γραμμό κώδικα




                               OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
Διπλόσ Κώδικασ (Metrics)
•   Βαςικϋσ Μετρικϋσ
     • Ποςοςτό διπλού κώδικα
     • Πλόθοσ διπλών γραμμών
     • Πλόθοσ code blocks με διπλό κώδικα
     • Πλόθοσ αρχεύων με διπλό κώδικα
• Δευτερεύουςεσ     μετρικϋσ (από plugins)
     • Διπλϋσ γραμμϋσ που μπορούν να αφαιρεθούν




                                  OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
Test Coverage
• Unit Testing : Σενϊρια ελϋγχου ςε επύπεδο
μονϊδασ (JUnit , TestNG, NUnit κτλ.
• Integration Testing : Σενϊρια ελϋγχου ςε
επύπεδο ολοκλόρωςησ (DBUnit , JSFUnit,
Arquillian, Selenium etc. )
• Code Coverage Tools : JaCoCo ( default ),
Covertura, Emma




                            OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
Test Coverage (Metrics)
•   Κϊλυψη
     • Συνολικό κϊλυψη από Tests
     • Κϊλυψη γραμμών από Tests (Line Coverage)
     • Κϊλυψη διακλαδώςεων από Tests(Branch Coverage)
•   Επιτυχύα Ελϋγχων
     • Ποςοςτό
     •Πλόθοσ αποτυχιών, λαθών, ελϋγχων
     •Διϊρκεια εκτϋλεςησ




                                    OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
Πολυπλοκότητα
•   Σε επύπεδο κλϊςησ / αρχεύο
     • Lack of Cohesion of Methods – LCOM4 (Καλό να
     παραμϋνει ύςο με ϋνα)
     • Response for Class – RFC ( Όςο το δυνατόν
     χαμηλότερη - Μϋχρι 50 θεωρεύται αποδεκτό )
     • Afferent / Efferent couplings (Εξαρτόςεισ από και
     προσ ϊλλεσ κλϊςεισ )
     • Cyclomatic Complexity (MaCaBe Metric )
        • Υπολογύζεται για μϋθοδο, για κλϊςη, για αρχεύο
        • Πωσ υπολογύζεται;




                                              OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
Πολυπλοκότητα (πωσ επηρεϊζει)
                         Πολύπλοκοσ
                          Κώδικασ

           Πύεςη                            Δυςκολύα
          χρόνου                           κατανόηςησ
                                             κώδικα




    Επιβρϊδυνςη                                  Δυςκολύα
  παραγωγικότητασ                               ςυντόρηςησ




               Ευκολύα ςτη
               δημιουργύα              Δυςκολύα
                  bugs                 επϋκταςησ



                                      OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
Πολυπλοκότητα (Metrics)




               OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
Σχεδύαςη / Αρχιτεκτονικό
•Ασ ςταματόςουμε το ςκυλύ να κυνηγϊει την
ουρϊ του
    • Κύκλοι εξαρτόςεων μεταξύ κλϊςεων ό πακϋτων
• Πόςο κακό κϊνουν;
• Μπορούν να εξαλειφθούν τελεύωσ;




                                OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
Σχεδύαςη / Αρχιτεκτονικό




                OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
Σχεδύαςη / Αρχιτεκτονικό
              (Μετρικϋσ)
•   Κύκλοι
     • Ποςοςτό κύκλων
     • Πλόθοσ κύκλων
•   Εξαρτόςεισ που μπορούν να αφαιρεθούν
     • Μεταξύ πακϋτων
     • Μεταξύ κλϊςεων




                              OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
Τεκμηρύωςη / Σχόλια
•   Το παρα-παύδι τησ ποιότητασ
     • από τουσ developers και όχι μόνο
•   Που βοηθϊει
     • ςτην διευκόλυνςη τησ ςυντόρηςησ
     • ςτη χρόςη API χωρύσ την ανϊγκη μελϋτησ κώδικα
     • ςτην εξόγηςη του «τι» και του «γιατύ» όχι του
     «πωσ» ςε μεθόδουσ ό κλϊςεισ
• Προςοχό όμωσ : Clean        Code over
Commenting


                                     OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
Τεκμηρύωςη / Σχόλια (Μετρικϋσ)
•   Σχόλια
     • Ποςοςτό ςχολύων ( No silver bullet )
     • Πλόθοσ γραμμών ςε ςχόλια
•   Τεκμηρύωςη (Java Doc)
     • Ποςοςτό τεκμηριωμϋνου API
     • Πλόθοσ δημόςιου API
     • Πλόθοσ δημόςιου API χωρύσ τεκμηρύωςη




                                     OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ

More Related Content

Similar to Sonar platform

Πάρης Λαγάκης 7200
Πάρης Λαγάκης 7200Πάρης Λαγάκης 7200
Πάρης Λαγάκης 7200ISSEL
 
Εξόρυξη δεδομένων τεχνολογίας λογισμικού για επαναχρησιμοποίηση λογισμικού
Εξόρυξη δεδομένων τεχνολογίας λογισμικού για επαναχρησιμοποίηση λογισμικούΕξόρυξη δεδομένων τεχνολογίας λογισμικού για επαναχρησιμοποίηση λογισμικού
Εξόρυξη δεδομένων τεχνολογίας λογισμικού για επαναχρησιμοποίηση λογισμικούISSEL
 
Εξ Αποστάσεως Javascript
Εξ Αποστάσεως JavascriptΕξ Αποστάσεως Javascript
Εξ Αποστάσεως JavascriptGeorge Exarchopoulos
 
C_27102023.pdf
C_27102023.pdfC_27102023.pdf
C_27102023.pdfargideli1
 
Σχεδίαση και ανάπτυξη Μηχανισμού Αυτοματοποίησης παραγωγής Λογισμικού Ελέγχου...
Σχεδίαση και ανάπτυξη Μηχανισμού Αυτοματοποίησης παραγωγής Λογισμικού Ελέγχου...Σχεδίαση και ανάπτυξη Μηχανισμού Αυτοματοποίησης παραγωγής Λογισμικού Ελέγχου...
Σχεδίαση και ανάπτυξη Μηχανισμού Αυτοματοποίησης παραγωγής Λογισμικού Ελέγχου...ISSEL
 
Design and Implementation of a Mechanism that automates the generation of Sof...
Design and Implementation of a Mechanism that automates the generation of Sof...Design and Implementation of a Mechanism that automates the generation of Sof...
Design and Implementation of a Mechanism that automates the generation of Sof...ISSEL
 
Σχεδιάζοντας τον Χρυσό Οδηγό με Design System
Σχεδιάζοντας τον Χρυσό Οδηγό με Design SystemΣχεδιάζοντας τον Χρυσό Οδηγό με Design System
Σχεδιάζοντας τον Χρυσό Οδηγό με Design SystemPanos Koutsodimitropoulos
 
Ανάλυση και μοντελοποίηση προφίλ προγραμματιστών μέσω τεχνικών εξόρυξης γνώση...
Ανάλυση και μοντελοποίηση προφίλ προγραμματιστών μέσω τεχνικών εξόρυξης γνώση...Ανάλυση και μοντελοποίηση προφίλ προγραμματιστών μέσω τεχνικών εξόρυξης γνώση...
Ανάλυση και μοντελοποίηση προφίλ προγραμματιστών μέσω τεχνικών εξόρυξης γνώση...ISSEL
 
Analysis and profiling of developer profiles using data mining techniques fro...
Analysis and profiling of developer profiles using data mining techniques fro...Analysis and profiling of developer profiles using data mining techniques fro...
Analysis and profiling of developer profiles using data mining techniques fro...ISSEL
 
Εφαρµογή τεχνικών µηχανικής µάθησης και ευφυούς διαχείρισης πληροφορίας για τ...
Εφαρµογή τεχνικών µηχανικής µάθησης και ευφυούς διαχείρισης πληροφορίας για τ...Εφαρµογή τεχνικών µηχανικής µάθησης και ευφυούς διαχείρισης πληροφορίας για τ...
Εφαρµογή τεχνικών µηχανικής µάθησης και ευφυούς διαχείρισης πληροφορίας για τ...ISSEL
 
Employing Machine Learning and Intelligent Information Management Techniques ...
Employing Machine Learning and Intelligent Information Management Techniques ...Employing Machine Learning and Intelligent Information Management Techniques ...
Employing Machine Learning and Intelligent Information Management Techniques ...ISSEL
 
ΥπερΔιαύγεια
ΥπερΔιαύγειαΥπερΔιαύγεια
ΥπερΔιαύγειαVangelis Banos
 
Java free-book
Java free-bookJava free-book
Java free-bookble nature
 
Dimitris Niras
Dimitris NirasDimitris Niras
Dimitris NirasISSEL
 
Βασίλης Μπούντρης
Βασίλης ΜπούντρηςΒασίλης Μπούντρης
Βασίλης ΜπούντρηςISSEL
 

Similar to Sonar platform (20)

Πάρης Λαγάκης 7200
Πάρης Λαγάκης 7200Πάρης Λαγάκης 7200
Πάρης Λαγάκης 7200
 
Εξόρυξη δεδομένων τεχνολογίας λογισμικού για επαναχρησιμοποίηση λογισμικού
Εξόρυξη δεδομένων τεχνολογίας λογισμικού για επαναχρησιμοποίηση λογισμικούΕξόρυξη δεδομένων τεχνολογίας λογισμικού για επαναχρησιμοποίηση λογισμικού
Εξόρυξη δεδομένων τεχνολογίας λογισμικού για επαναχρησιμοποίηση λογισμικού
 
Εξ Αποστάσεως Javascript
Εξ Αποστάσεως JavascriptΕξ Αποστάσεως Javascript
Εξ Αποστάσεως Javascript
 
Thessaloniki rb-24
Thessaloniki rb-24Thessaloniki rb-24
Thessaloniki rb-24
 
C_27102023.pdf
C_27102023.pdfC_27102023.pdf
C_27102023.pdf
 
Σχεδίαση και ανάπτυξη Μηχανισμού Αυτοματοποίησης παραγωγής Λογισμικού Ελέγχου...
Σχεδίαση και ανάπτυξη Μηχανισμού Αυτοματοποίησης παραγωγής Λογισμικού Ελέγχου...Σχεδίαση και ανάπτυξη Μηχανισμού Αυτοματοποίησης παραγωγής Λογισμικού Ελέγχου...
Σχεδίαση και ανάπτυξη Μηχανισμού Αυτοματοποίησης παραγωγής Λογισμικού Ελέγχου...
 
Design and Implementation of a Mechanism that automates the generation of Sof...
Design and Implementation of a Mechanism that automates the generation of Sof...Design and Implementation of a Mechanism that automates the generation of Sof...
Design and Implementation of a Mechanism that automates the generation of Sof...
 
Σχεδιάζοντας τον Χρυσό Οδηγό με Design System
Σχεδιάζοντας τον Χρυσό Οδηγό με Design SystemΣχεδιάζοντας τον Χρυσό Οδηγό με Design System
Σχεδιάζοντας τον Χρυσό Οδηγό με Design System
 
Ανάλυση και μοντελοποίηση προφίλ προγραμματιστών μέσω τεχνικών εξόρυξης γνώση...
Ανάλυση και μοντελοποίηση προφίλ προγραμματιστών μέσω τεχνικών εξόρυξης γνώση...Ανάλυση και μοντελοποίηση προφίλ προγραμματιστών μέσω τεχνικών εξόρυξης γνώση...
Ανάλυση και μοντελοποίηση προφίλ προγραμματιστών μέσω τεχνικών εξόρυξης γνώση...
 
Analysis and profiling of developer profiles using data mining techniques fro...
Analysis and profiling of developer profiles using data mining techniques fro...Analysis and profiling of developer profiles using data mining techniques fro...
Analysis and profiling of developer profiles using data mining techniques fro...
 
SQL Injection
SQL InjectionSQL Injection
SQL Injection
 
Εισαγωγή σε C# και .ΝΕΤ
Εισαγωγή σε C# και .ΝΕΤΕισαγωγή σε C# και .ΝΕΤ
Εισαγωγή σε C# και .ΝΕΤ
 
Webnode cms
Webnode cmsWebnode cms
Webnode cms
 
Εφαρµογή τεχνικών µηχανικής µάθησης και ευφυούς διαχείρισης πληροφορίας για τ...
Εφαρµογή τεχνικών µηχανικής µάθησης και ευφυούς διαχείρισης πληροφορίας για τ...Εφαρµογή τεχνικών µηχανικής µάθησης και ευφυούς διαχείρισης πληροφορίας για τ...
Εφαρµογή τεχνικών µηχανικής µάθησης και ευφυούς διαχείρισης πληροφορίας για τ...
 
Employing Machine Learning and Intelligent Information Management Techniques ...
Employing Machine Learning and Intelligent Information Management Techniques ...Employing Machine Learning and Intelligent Information Management Techniques ...
Employing Machine Learning and Intelligent Information Management Techniques ...
 
ΥπερΔιαύγεια
ΥπερΔιαύγειαΥπερΔιαύγεια
ΥπερΔιαύγεια
 
Java free-book
Java free-bookJava free-book
Java free-book
 
Theory Intro
Theory IntroTheory Intro
Theory Intro
 
Dimitris Niras
Dimitris NirasDimitris Niras
Dimitris Niras
 
Βασίλης Μπούντρης
Βασίλης ΜπούντρηςΒασίλης Μπούντρης
Βασίλης Μπούντρης
 

More from Patroklos Papapetrou (Pat)

Voxxed Days Thessaloniki 2016 - JDK 9 : Big Changes To Make Java Smaller
Voxxed Days Thessaloniki 2016 - JDK 9 : Big Changes To Make Java Smaller Voxxed Days Thessaloniki 2016 - JDK 9 : Big Changes To Make Java Smaller
Voxxed Days Thessaloniki 2016 - JDK 9 : Big Changes To Make Java Smaller Patroklos Papapetrou (Pat)
 
Boost your development speed - ITAKE Unconference
Boost your development speed - ITAKE UnconferenceBoost your development speed - ITAKE Unconference
Boost your development speed - ITAKE UnconferencePatroklos Papapetrou (Pat)
 
ITAKE Unconference - Holding down your technical debt with Sonarqube
ITAKE Unconference - Holding down your technical debt with SonarqubeITAKE Unconference - Holding down your technical debt with Sonarqube
ITAKE Unconference - Holding down your technical debt with SonarqubePatroklos Papapetrou (Pat)
 
Tracking and improving software quality with SonarQube
Tracking and improving software quality with SonarQubeTracking and improving software quality with SonarQube
Tracking and improving software quality with SonarQubePatroklos Papapetrou (Pat)
 

More from Patroklos Papapetrou (Pat) (7)

Voxxed Days Thessaloniki 2016 - JDK 9 : Big Changes To Make Java Smaller
Voxxed Days Thessaloniki 2016 - JDK 9 : Big Changes To Make Java Smaller Voxxed Days Thessaloniki 2016 - JDK 9 : Big Changes To Make Java Smaller
Voxxed Days Thessaloniki 2016 - JDK 9 : Big Changes To Make Java Smaller
 
The Art of Software Gardening
The Art of Software GardeningThe Art of Software Gardening
The Art of Software Gardening
 
Boost your development speed - ITAKE Unconference
Boost your development speed - ITAKE UnconferenceBoost your development speed - ITAKE Unconference
Boost your development speed - ITAKE Unconference
 
ITAKE Unconference - Holding down your technical debt with Sonarqube
ITAKE Unconference - Holding down your technical debt with SonarqubeITAKE Unconference - Holding down your technical debt with Sonarqube
ITAKE Unconference - Holding down your technical debt with Sonarqube
 
Tracking and improving software quality with SonarQube
Tracking and improving software quality with SonarQubeTracking and improving software quality with SonarQube
Tracking and improving software quality with SonarQube
 
Thessaloniki through history with images
Thessaloniki through history with imagesThessaloniki through history with images
Thessaloniki through history with images
 
J2EE Introduction
J2EE IntroductionJ2EE Introduction
J2EE Introduction
 

Sonar platform

  • 1. Sonar@Origin Platform • Ειςαγωγό – Τι εύναι το Sonar; • Τι κϊνει και πωσ λειτουργεύ; • Γιατύ Sonar; • Πωσ αναλύουμε ϋνα project; • Οι 7 ϊξονεσ τησ ποιότητασ • Οι βαςικϋσ Μετρικϋσ και οι ςημαςύα τουσ OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
  • 2. Sonar and me… • Ενεργό μϋλοσ των user και developer mailing lists • Κύριοσ contributor / release manager ςτα παρακϊτω Plugins • SCM Stats • Google Calendar • Thucydides • Greek Pack ( Localization ) • Contributor των παρακϊτω Plugins • Widget Lab • Branding • Scala (Support for Scala source code analysis) • Co-Author του βιβλύου Sonar in Action • Co-Author του DZone Sonar refcard - TBD OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
  • 3. Ειςαγωγό – Τι εύναι το Sonar; • Open Source “code quality platform” • Εκατοντϊδεσ Μετρικϋσ τησ τρϋχουςα εικόνασ ενόσ project • Τόρηςη ιςτορικού και ςύγκριςη προόδου • Τϊςεισ και Μελλοντικϋσ προβλϋψεισ • Εργαλεύα για βελτύωςη τησ ποιότητασ OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
  • 4. Ειςαγωγό – Τι κϊνει το Sonar; • «Διαβϊζει» και αναλύει τον πηγαύο κώδικα • Υπολογύζει τισ τιμϋσ των μετρικών • Καταγρϊφει τισ μετρικϋσ για το ςτιγμιότυπο ( snapshot ) τησ ανϊλυςησ • Προβϊλλει τα αποτελϋςματα μϋςω widgets ςε dashboards. OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
  • 5. Sonar για όλουσ … Για τουσ testers => Ποια τμόματα του λογιςμικού δεν ϋχουν επϊρκεια ςε Testing; Για τουσ developers => Τι «προβλόματα» ϋχει ο κώδικϊσ και πωσ μπορεύ να βελτιωθεύ; Για τουσ architects => Το αρχικό design ϋχει αρχύςει να «χαλϊει»; Τι γύνεται με την πολυπλοκότητα; Για τουσ managers => Δώςτε μου μετρικϋσ και ποιεσ από αυτϋσ βελτιώθηκαν / χειροτϋρεψαν! OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
  • 6. … και για όλα • Αρχικϊ : Υποςτόριξη μόνο Java και 2-3 ϊλλεσ γλώςςεσ. • Σόμερα : Πϊνω από 20 γλώςςεσ μϋςω Plugins Commercial : ABAP, C , Cobol, Natural, PL/SQL, Visual Basic Open Source : C++ , C#, Delphi, Drools, Flex, Groovy, Javascript, PHP, Python, XML , Web(xhtml, jsp , jsf, ) OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
  • 7. Βαςιςμϋνο ςε γνωςτϊ εργαλεύα • Static Analysis : PMD, FindBugs, CheckStyle • Code Coverage Tools: JaCoCo, Cobertura, Emma, coverage.py • Unit Test execution : Junit, PHPUnit, Nunit , JsTestDriver • Complexity : PHP_Depend, Cecil • Duplications : Embedded Mechanism , CPD OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
  • 8. Πωσ αναλύουμε ϋνα project • Sonar Runner : Ο προτεινόμενοσ τρόποσ – Για κϊθε εύδουσ project και πηγαύο κώδικα • Maven: Μόνο για Java Maven projects • Sonar Ant Task : Μόνο για χρόςη ςε Ant build scripts • Continuous Integration Engine : Hudson/Jenkins, Bamboo κ.α. OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
  • 9. Οι 7 ϊξονεσ τησ ποιότητασ • Πιθανϊ ςφϊλματα κώδικα • Διπλόσ κώδικασ • Unit Tests • Coding Rules • Πολυπλοκότητα • Τεκμηρύωςη και Σχόλια • Σχεδύαςη και Αρχιτεκτονικό OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
  • 10. Η ϋννοια του Tehcnical Debt • Τι εύναι ; Το ςυνολικό και αυξανόμενο κόςτοσ βελτύωςησ πρόχειρου ό κακογραμμϋνου κώδικα ( refactoring ) • Όλα τα projects ϋχουν Technical Debt • Δεν εύναι απαραύτητα κακό, αρκεύ να μη ξεφύγει (όπωσ και η χρϋωςη ςτισ πιςτωτικϋσ κϊρτεσ και τα δϊνεια) OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
  • 11. Violations & Coding Rules • Violation = Broken Coding Rule • Γιατύ εύναι ςημαντικϋσ; Τι υποδηλώνουν; • Σύγουρα ςφϊλματα • Πιθανϊ ςφϊλματα, • Ενδεύξεισ για ανθρώπινα λϊθη • Καταςτϊςεισ που μπορεύ να οδηγόςουν ςε ανθρώπινα λϊθη ςτο μϋλλον • Μη αποδοτικό κώδικα (φιλικό ςε μνόμη & resources) • Στιλιςτικϋσ ατϋλειεσ OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
  • 12. Violations & Coding Rules (Metrics) • Βαςικϋσ μετρικϋσ • Πλόθοσ violations ςε κϊθε κατηγορύα • Συμμόρφωςη ςε κανόνεσ (ςε ποςοςτό) OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
  • 13. Διπλόσ Κώδικασ • Πωσ δημιουργεύται; • Έλλειψη χρόνου – ςτενϊ χρονοδιαγρϊμματα • Φτωχό επικοινωνύα εντόσ τησ ομϊδασ ανϊπτυξησ • Μη κατανόηςη του domain, του προβλόματοσ προσ επύλυςη, του ύδιου του κώδικα • Projects merging • Πληρωμό για κϊθε γραμμό κώδικα OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
  • 14. Διπλόσ Κώδικασ (Metrics) • Βαςικϋσ Μετρικϋσ • Ποςοςτό διπλού κώδικα • Πλόθοσ διπλών γραμμών • Πλόθοσ code blocks με διπλό κώδικα • Πλόθοσ αρχεύων με διπλό κώδικα • Δευτερεύουςεσ μετρικϋσ (από plugins) • Διπλϋσ γραμμϋσ που μπορούν να αφαιρεθούν OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
  • 15. Test Coverage • Unit Testing : Σενϊρια ελϋγχου ςε επύπεδο μονϊδασ (JUnit , TestNG, NUnit κτλ. • Integration Testing : Σενϊρια ελϋγχου ςε επύπεδο ολοκλόρωςησ (DBUnit , JSFUnit, Arquillian, Selenium etc. ) • Code Coverage Tools : JaCoCo ( default ), Covertura, Emma OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
  • 16. Test Coverage (Metrics) • Κϊλυψη • Συνολικό κϊλυψη από Tests • Κϊλυψη γραμμών από Tests (Line Coverage) • Κϊλυψη διακλαδώςεων από Tests(Branch Coverage) • Επιτυχύα Ελϋγχων • Ποςοςτό •Πλόθοσ αποτυχιών, λαθών, ελϋγχων •Διϊρκεια εκτϋλεςησ OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
  • 17. Πολυπλοκότητα • Σε επύπεδο κλϊςησ / αρχεύο • Lack of Cohesion of Methods – LCOM4 (Καλό να παραμϋνει ύςο με ϋνα) • Response for Class – RFC ( Όςο το δυνατόν χαμηλότερη - Μϋχρι 50 θεωρεύται αποδεκτό ) • Afferent / Efferent couplings (Εξαρτόςεισ από και προσ ϊλλεσ κλϊςεισ ) • Cyclomatic Complexity (MaCaBe Metric ) • Υπολογύζεται για μϋθοδο, για κλϊςη, για αρχεύο • Πωσ υπολογύζεται; OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
  • 18. Πολυπλοκότητα (πωσ επηρεϊζει) Πολύπλοκοσ Κώδικασ Πύεςη Δυςκολύα χρόνου κατανόηςησ κώδικα Επιβρϊδυνςη Δυςκολύα παραγωγικότητασ ςυντόρηςησ Ευκολύα ςτη δημιουργύα Δυςκολύα bugs επϋκταςησ OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
  • 19. Πολυπλοκότητα (Metrics) OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
  • 20. Σχεδύαςη / Αρχιτεκτονικό •Ασ ςταματόςουμε το ςκυλύ να κυνηγϊει την ουρϊ του • Κύκλοι εξαρτόςεων μεταξύ κλϊςεων ό πακϋτων • Πόςο κακό κϊνουν; • Μπορούν να εξαλειφθούν τελεύωσ; OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
  • 21. Σχεδύαςη / Αρχιτεκτονικό OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
  • 22. Σχεδύαςη / Αρχιτεκτονικό (Μετρικϋσ) • Κύκλοι • Ποςοςτό κύκλων • Πλόθοσ κύκλων • Εξαρτόςεισ που μπορούν να αφαιρεθούν • Μεταξύ πακϋτων • Μεταξύ κλϊςεων OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
  • 23. Τεκμηρύωςη / Σχόλια • Το παρα-παύδι τησ ποιότητασ • από τουσ developers και όχι μόνο • Που βοηθϊει • ςτην διευκόλυνςη τησ ςυντόρηςησ • ςτη χρόςη API χωρύσ την ανϊγκη μελϋτησ κώδικα • ςτην εξόγηςη του «τι» και του «γιατύ» όχι του «πωσ» ςε μεθόδουσ ό κλϊςεισ • Προςοχό όμωσ : Clean Code over Commenting OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ
  • 24. Τεκμηρύωςη / Σχόλια (Μετρικϋσ) • Σχόλια • Ποςοςτό ςχολύων ( No silver bullet ) • Πλόθοσ γραμμών ςε ςχόλια • Τεκμηρύωςη (Java Doc) • Ποςοςτό τεκμηριωμϋνου API • Πλόθοσ δημόςιου API • Πλόθοσ δημόςιου API χωρύσ τεκμηρύωςη OTS SA, 2012 © Παπαπϋτρου Πϊτροκλοσ