1. DPDHMMY
Εργαλείο Ανίχνευσης Σχεδιαστικών Προτύπων Λογισμικού
ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ
ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ & ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ
ΕΡΓΑΣΤΗΡΙΟ ΕΥΦΥΩΝ ΣΥΣΤΗΜΑΤΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΛΟΓΙΣΜΙΚΟΥ
Νούτσος Αντώνης
anoutsos@auth.gr
ΑΕΜ 6992
Διπλωματική εργασία υπό την επίβλεψη του Επ. Καθηγητή κ. Ανδρέα
Λ. Συμεωνίδη
Και του υποψήφιου διδάκτορα
Διαμαντόπουλου Θεμιστοκλή
Θεσσαλονίκη 2015
2. Δομή παρουσίασης
Εισαγωγή
State of the Art
Σκοπός της διπλωματικής
Ανάλυση του συστήματος
Αναπαράσταση αντικειμένων και σχέσεων του κώδικα
Parser
Αλγόριθμος ανίχνευσης προτύπων σχεδίασης
Αποτελέσματα πειραμάτων
Συμπεράσματα & Μελλοντική εργασία
Γραφικό περιβάλλον
2
3. Εισαγωγή:
Σχεδιαστικά Πρότυπα(Design Patterns)
Μη λειτουργικές απαιτήσεις
Επεκτασιμότητα (Extensibility)
Στιβαρότητα (Robustness)
Ευχρηστία (Usability)
Συντηρησιμότητα (Maintainability)
Μεταφερσιμότητα (Portability)
Ελεγξιμότητα (Testability)
Δυνατότητα Επαναχρησιμοποίησης (Reusability)
Σκοπός του κάθε προτύπου
Δημιουργικά – Δημιουργία αντικειμένων
Δομικά – Σύνθεση κλάσεων και αντικειμένων
Συμπεριφοράς – Αλληλοεπίδραση κλάσεων ή/και αντικειμένων
3
4. Εισαγωγή:
Εργαλεία Ανίχνευσης Σχεδιαστικών Προτύπων
(DPD Tools)
Μεγάλος σε έκταση κώδικας
4
Ανάγκη εξαγωγής πληροφορίας από
τον πηγαίο κώδικα
Δύσκολη κατανόηση Μεγάλα συστήματα λογισμικού
Αυτοματοποιημένα συστήματα εξαγωγής δομής, συνδέσεων και συμπεριφοράς
ενός μεγάλου έργου λογισμικού
5. State of the Art:
Κατηγοριοποίηση των DPD tools
Τύπος ανάλυσης
Δομική ανάλυση
Ανάλυση συμπεριφοράς
Σημασιολογική ανάλυση
Τύπος αναγνώρισης
Τύπος εισόδου
Ενδιάμεση αναπαράσταση
5
6. State of the Art:
Γνωστά DPD Tools
DP-Miner
DPRE
PINOT
DeMIMA
PTIDEJ
FUJABA
6
7. Σκοπός της διπλωματικής
Κατασκευή ενός εργαλείου για ανίχνευση σχεδιαστικών προτύπων στον κώδικα
που προσφέρει:
Ευελιξία
Δομική ανάλυση Εξέταση κώδικα με λάθη
Μεταφερσιμότητα
Δομική ανάλυση Εξέταση μη μεταγλωττισμένου κώδικα
Διαδραστικότητα
Δυνατότητα ορισμού σχεδιαστικών προτύπων προς ανίχνευση από το χρήστη
Αξιοπιστία
Ταχύτητα
7
8. Ανάλυση του συστήματος: Αναπαράσταση
αντικειμένων και σχέσεων του κώδικα
Κάθε κλάση αποτελεί μια οντότητα ClassObject
Οι κλάσεις αλληλοσυνδέονται Connection
Κάθε κλάση κατηγοριοποιείται ως:
Normal: Μια απλή κλάση.
Abstract: Μια αφαιρετική (abstract) κλάση.
Interface: Μια διεπαφή (interface).
Abstracted: Μια κλάση που είναι είτε interface ή abstract.
Any: Μια κλάση οποιουδήποτε τύπου.
Οι συνδέσεις αντιπροσωπεύουν τις σχέσεις μεταξύ κλάσεων και βασίζονται στη
UML
8
9. Ανάλυση του συστήματος: Αναπαράσταση
αντικειμένων και σχέσεων του κώδικα
Τύπος Σύνδεσης Περιγραφή Σχέση UML
Σύμβολο
UML
A calls B
Μια μέθοδος της κλάσης A καλεί μία μέθοδο
της κλάσης B
Εξάρτηση
A creates B
Η κλάση A δημιουργεί ένα αντικείμενο της
κλάσης Β με την εντολή new
Σύνθεση
A uses B
Μια μέθοδος της κλάσης Α επιστρέφει ένα
αντικείμενο της κλάσης Β
Εξάρτηση
A has B
Η κλάση A έχει ένα ή περισσότερα
αντικείμενα τύπου κλάσης Β
Συσσωμάτωση/
Πολλαπλότητα
A references B
Μια μέθοδος της κλάσης Α έχει ως όρισμα
ένα αντικείμενο της κλάσης Β
Σύνδεσμος
A inherits B Η κλάση A κληρονομεί την κλάση B
Κληρονομιά/
Πραγματοποίηση
9
10. Ανάλυση του συστήματος: Αναπαράσταση
αντικειμένων και σχέσεων του κώδικα
10
Member Abstraction Ability
A Normal Concrete Factory
B Abstracted Abstract Factory
C Normal Product
D Abstracted Abstract Product
From Connection Type To
A inherits B
C inherits D
A creates C
A uses D
Pattern
B Abstracted
A Normal
C Normal
D Abstracted
Inherits
Inherits
Creates
Uses
Abstract
Factory
Concrete
Factory
Abstract
Product
Product
11. Ανάλυση του συστήματος:
Parser
Treescanner:
Tree API του Compiler της Java
Υλοποιεί το interface TreeVisitor
Σαρώνει όλα τα παιδιά ενός δέντρου με
τις οντότητες του αρχείου .java
Συναρτήσεις προσπέλασης:
visitClass
visitVariable
visitMethodInvocation
visitNewClass
Συναρτήσεις ανίχνευσης συνδέσεων:
findUses
findInherits
findHas
findCalls
findCreates
findReferences
11
12. Ανάλυση του συστήματος:
Αλγόριθμος ανίχνευσης προτύπων σχεδίασης
Δομικά μέλη:
Pattern: Αντιπροσωπεύει ένα πρότυπο σχεδίασης με τα ClassObject και τα
Connection που τα διέπουν
PatternCandidate: Αντιπροσωπεύει ένα πρότυπο σχεδίασης που
ανιχνεύτηκε στο κώδικα και τις αντιστοιχίες των μελών του ως προς το
pattern.
PatternDetectionAlgorithm: Περιέχει τις βασικές συναρτήσεις ανίχνευσης
σχεδιαστικών προτύπων
12
13. Ανάλυση του συστήματος:
Αλγόριθμος ανίχνευσης προτύπων σχεδίασης
13
𝒏!
𝒏 − 𝒓 !
Pattern
Members
A
B
C
Δυνατοί Συνδυασμοί για ClassObjects {Car, Wheel, Tires, Fuel}
F(n, r) = Εδώ: 24
n = ClassObjects Εδώ: 4
r = Pattern Members Εδώ: 3
Car
Car
Wheel
Wheel
Tires
Tires
Tires
Tires
Car
Car
Wheel
Wheel
Wheel
Wheel
Tires
Tires
Car
Car
Car
Car
Wheel
Wheel
Fuel
Fuel
Wheel
Wheel
Fuel
Fuel
Car
Car
Fuel
Fuel
Car
Car
Wheel
Wheel
Wheel
Wheel
Tires
Tires
Fuel
Fuel
Fuel
Fuel
Wheel
Wheel
Tires
Tires
Tires
Tires
Fuel
Fuel
Wheel
Wheel
Car
Car
Tires
Tires
Fuel
Fuel
Fuel
Fuel
Car
Car
Tires
Tires
Tires
Tires
Car
Car
Fuel
Fuel
14. Ανάλυση του συστήματος:
Αλγόριθμος ανίχνευσης προτύπων σχεδίασης
14
Pattern
Connections
A has B
A uses C
has
has
uses
Candidate 1 Candidate 2 Not Candidate Not Candidate
A --
B --
C --
A --
B --
C --
A --
B --
C --
A --
B --
C --
Car has Wheel
Car uses Fuel
Car has Tires
Car uses Fuel
Car has Fuel
Car uses Tires
Car has Tires
Car uses Wheel
Car
Wheel
Tires
Fuel
Car
Wheel
Fuel
Car
Tires
Fuel
Car
Fuel
Tires
Car
Tires
Wheel
15. Ανάλυση του συστήματος:
Αλγόριθμος ανίχνευσης προτύπων σχεδίασης:
FastPatternDetection
15
has
has
has
Car uses Car uses Car usesCar uses
has
has
has
has
has
hashas
has
has
Συνδυασμοί: 2 1/12 από το σύνολο των συνδυασμών πριν
Car
Wheel Tires Fuel
Tires Fuel Wheel Fuel
Wheel
Car Tires Fuel
Fuel
Car Wheel Tires
Tires
Car Fuel Wheel
16. Ανάλυση του συστήματος:
Αλγόριθμος ανίχνευσης προτύπων σχεδίασης:
Fast vs Normal
PatternDetection FastPatternDetection
Abstract Factory
Example
93ms 16ms
Pattern
Compilation
2563ms 31ms
JHotDraw * 594ms
16
PatternDetection FastPatternDetection
Abstract Factory
Example
27ms 2ms
Pattern Compilation 1400ms 7ms
JHotDraw * 210ms
Τεράστια διαφορά στη ταχύτητα
Αυξημένη πολυπλοκότητα
Αναγκαίο κακό/(καλό!?) για μεγάλα projects
Συσκευές πειραμάτων:
Laptop: Acer Aspire 5930G, Windows 8.1, επεξεργαστή Intel® Core™ 2 Duo @2.00
Ghz και 3GB RAM
Desktop: Windows 8.1, επεξεργαστή Intel® Core™ i3 @3.07 Ghz με δύο πυρήνες και
4GB RAM
17. Ανάλυση του συστήματος:
Αλγόριθμος ανίχνευσης προτύπων σχεδίασης: Ομαδοποίηση
17
Σχεδιαστικά πρότυπα - Δυνατότητα πολλαπλότητας
Ίδια κλάση - Μέρος του ίδιου προτύπου σε πολλά περιστατικά
Ένα μεγάλο περιστατικό προτύπου > Πολλών μικρών
DPDHMMY:
Εύρεση μικρών περιστατικών Ανάγκη για ομαδοποίηση
PatternCandidate
SuperCandidate
HyperCandidate
18. Ανάλυση του συστήματος:
Αλγόριθμος ανίχνευσης προτύπων σχεδίασης: Ομαδοποίηση
SuperCandidates
Concrete Factory Reptile Factory Mammal Factory
Abstract Factory Species Factory Species Factory
Product (Snake, Tyrannosaurus) (Cat, Dog)
Abstract Product Animal Animal
18
HyperCandidates
Concrete Factory [Reptile Factory, Mammal Factory]
Abstract Factory Species Factory
Product [(Snake, Tyrannosaurus), (Cat, Dog)]
Abstract Product Animal
Candidates
Concrete Factory Reptile Factory Reptile Factory Mammal Factory Mammal Factory
Abstract Factory Species Factory Species Factory Species Factory Species Factory
Product Snake Tyrannosaurus Cat Dog
Abstract Product Animal Animal Animal Animal
19. Ανάλυση του συστήματος:
Αλγόριθμος ανίχνευσης προτύπων σχεδίασης: Ομαδοποίηση
19
Pattern
Abstract
Factory
Concrete
Factory
Abstract
Product
Product
PatternCandidates
Species
Factory
Reptile
Factory
Animal
Snake
Species
Factory
Reptile
Factory
Animal
Tyrannos
aurus
Species
Factory
Mammal
Factory
Animal
Cat
Species
Factory
Mammal
Factory
Animal
Dog
20. Ανάλυση του συστήματος:
Αλγόριθμος ανίχνευσης προτύπων σχεδίασης: Ομαδοποίηση
20
SuperCandidates
Species
Factory
Reptile
Factory
Animal
Snake Tyrannos
aurus
Species
Factory
Mammal
Factory
Animal
Cat Dog
HyperCandidate
Reptile
Factory
Species
Factory
Mammal
Factory
Animal
Snake Tyrannos
aurus
Cat Dog
21. Αποτελέσματα Πειραμάτων
Πείραμα 1: Μικρά project, στιγμιότυπα προτύπων σχεδίασης
Εφαρμογή DPDHMMY:
Ένα προς ένα project
Συνολικό project που περιέχει πολλά μικρά
Πείραμα 2: Μεγάλα project, γνωστές βιβλιοθήκες της Java
Βιβλιοθήκες JHotDraw, Java AWT, Apache Ant
Ποσοτική σύγκριση με PINOT
21