Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού Παναγιώτης Σφέτσος, PhD

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού Παναγιώτης Σφέτσος, PhD"— Μεταγράφημα παρουσίασης:

1 Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού Παναγιώτης Σφέτσος, PhD http://aetos.it.teithe.gr/~sfetsos/ sfetsos@it.teithe.gr

2 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 2 Στόχοι  Ποιότητα Λογισμικού  Μετρήσεις - Μετρικές Λογισμικού  Αντικειμενοστρεφείς Μετρικές

3 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 3 Ποιότητα Λογισμικού ISO / IEC 9126: Το πρότυπο ISO / IEC 9126: Στοχεύει στη διασφάλιση της ποιότητας των προϊόντων του λογισμικού, καθορίζοντας τα χαρακτηριστικά και τα υπό-χαρακτηριστικά της ποιότητας καθώς και τις συνδεδεμένες μετρικές.  Εξωτερικές μετρικές: εφαρμόζονται στο λογισμικό όταν είναι σε λειτουργία.  Εσωτερικές μετρικές: δεν στηρίζονται στην λειτουργία του λογισμικού, είναι συνήθως μετρικές κώδικα (στατικές μετρικές).  Σε χρήση μετρικές: είναι διαθέσιμες όταν το λογισμικό χρησιμοποιείται σε πραγματικές συνθήκες. :: ISO / IEC 9126 (1/2)

4 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 4 Ποιότητα Λογισμικού Το μοντέλο Εξωτερικής/Εσωτερικής Ποιότητας του προτύπου ISO/IEC 9126-1 :: ISO / IEC 9126 (2/2)

5 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 5 Μετρήσεις - Μετρικές Μέτρηση Μέτρηση (measure) ονομάζεται η διαδικασία κατά την οποία αριθμοί και σύμβολα συνδέονται με ιδιότητες οντοτήτων του πραγματικού κόσμου έτσι ώστε να τα περιγράφουν σύμφωνα με αυστηρά καθορισμένους κανόνες [Norman Fenton]. Οφέλη:  Ποσοτική και αντικειμενική θεώρηση των δυνατοτήτων και αδυναμιών των διαδικασιών, προϊόντων και πόρων.  Ερευνητές και Επαγγελματίες: Κατανόηση συμπεριφορών και αποτελεσμάτων για καλύτερη επιλογή τεχνικών και εργαλείων.  Κατασκευαστές: μετρούν τα χαρακτηριστικά του λογισμικού, για να διαπιστώσουν 1) την πρόοδο του έργου, 2) εάν ικανοποιούνται πλήρως οι απαιτήσεις των πελατών και 3) για να εξακριβώσουν εάν ο σχεδιασμός είναι σωστός.  Διευθυντές: συμβουλεύονται τις μετρήσεις, για να διαπιστώσουν την πορεία του έργου σε σχέση με τα χρονοδιαγράμματα και τους καθορισμένους προϋπολογισμούς. :: Τι είναι μέτρηση (1/2)

6 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 6 Μετρήσεις - Μετρικές  “You cannot control what you cannot measure” [Τοm De Marco]  “The degree to which you can express something in numbers is the degree to which you really understand it.” [Lord Kelvin]  Για την παρακολούθηση, διαχείριση, ποιοτική μελέτη και βελτίωση οποιουδήποτε τεχνικού έργου είναι απαραίτητη η έννοια της μέτρησης.  Η εξαγωγή μέτρων είναι υποκειμενική, π.χ. αξιολόγηση της ικανοποίησης του πελάτη, της πολυπλοκότητας του λογισμικού, κλπ. :: Τι είναι μέτρηση (2/2)

7 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 7 Μετρήσεις - Μετρικές Μετρική Μετρική (metric) είναι μια εμπειρική αντικειμενική αντιστοίχηση ενός αριθμού ή συμβόλου σε μια οντότητα με στόχο να χαρακτηρίσει ένα συγκεκριμένο χαρακτηριστικό της [Norman Fenton].  Μέτρο: ποσοτική ένδειξη αριθμού, διαστάσεων, χωρητικότητας, όγκου κτλ. προϊόντος ή διαδικασίας.  Μέτρηση: Διαδικασία υπολογισμού μέτρου/ων.  Μετρική: ποσοτική εκτίμηση του βαθμού κατά τον οποίο ένα σύστημα κατέχει ένα χαρακτηριστικό. Αριθμός λαθών σε ένα πρόγραμμα = Μέτρο Συλλογή και καταμέτρηση λαθών = Μέτρηση Συσχετισμός λαθών με κάποιο χαρακτηριστικό, π.χ. ποιότητα (πάνω από 100 λάθη => κακή ποιότητα, κάτω από 10 λάθη => καλή ποιότητα) = Μετρική :: Μετρικές Λογισμικού (1/5)

8 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 8 Μετρήσεις - Μετρικές Μια μετρική είναι καλή όταν η αριθμητική της τιμή χαρακτηρίζει με ακρίβεια την συγκεκριμένη ιδιότητα του αντικειμένου [Fenton]. Μια ιδανική μετρική θα πρέπει να είναι:  Απλή και υπολογίσιμη  Εμπειρικά και διαισθητικά πειστική  Συνεπής και αντικειμενική  Συνεπής ως προς τη χρήση ποσοτικών μονάδων  Ανεξάρτητη από γλώσσες προγραμματισμού και διαδικασίες ανάπτυξης  Ελέγξιμη και ‘ανοικτή’ σε ουσιαστικούς μηχανισμούς ανάδρασης :: Μετρικές Λογισμικού (2/5)

9 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 9 Μετρήσεις - Μετρικές Μια ιδανική μέτρηση θα πρέπει να περιλαμβάνει τις δραστηριότητες:  Διατύπωση (καθορισμός μετρικών)  Συλλογή (συγκέντρωση δεδομένων)  Ανάλυση (υπολογισμός μετρικών)  Ερμηνεία (αξιολόγηση μετρικών)  Ανάδραση (συστάσεις για βελτίωση) :: Μετρικές Λογισμικού (3/5)

10 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 10 Μετρήσεις - Μετρικές Αρχές Διατύπωσης Μετρικών Καθορισμός στόχων των μετρήσεων πριν τη συλλογή των δεδομένων Ακριβής ορισμός των μετρικών Χρήση μετρικών προσαρμοσμένων στα προϊόντα και τις διαδικασίες Αρχές Συλλογής και Ανάλυσης Μετρικών Αυτοματοποίηση στη συλλογή και ανάλυση των μετρικών (όπου είναι δυνατή) Χρήση αξιόπιστων στατιστικών τεχνικών για διερεύνηση εσωτερικών και εξωτερικών χαρακτηριστικών Καθορισμός συγκεκριμένων κανόνων ερμηνείας των μετρικών :: Μετρικές Λογισμικού (4/5)

11 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 11 Μετρήσεις - Μετρικές Οι μετρικές διακρίνονται σε:  μετρικές προϊόντος (product metrics)  μετρικές διαδικασίας (process metrics)  μετρικές έργου (project metrics) Οι μετρικές προϊόντος χωρίζονται στις: Εσωτερικές: π.χ. αριθμός γραμμών (LOC), χρόνος εκτέλεσης, λάθη του κώδικα Εξωτερικές: π.χ. λειτουργικότητα (functionality), ποιότητα (quality), πολυπλοκότητα (complexity), αποτελεσματικότητα (efficiency), αξιοπιστία (reliability), συντηρησιμότητα (maintainability). Μετρικές διαδικασίας: μετρούν τη διαδικασία κατασκευής ενός προϊόντος, για παράδειγμα το σχεδιασμό, τη συγγραφή κώδικα, τους απαιτούμενους πόρους. Μετρικές έργου: χρησιμοποιούνται για τον καθορισμό στρατηγικής, σχετίζονται με την τακτική εκτέλεσης του έργου και καθορίζουν τη ροή του και τις τεχνικές που θα ακολουθηθούν. :: Μετρικές Λογισμικού (5/5)

12 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 12 Μετρήσεις - Μετρικές Βασικές κατηγορίες αντικειμενοστρεφών μετρικών:  Πολυπλοκότητας  Κληρονομικότητας  Μεγέθους  Σύζευξης  Συνοχής Οι Chidamber & Kemerer (1991) πρότειναν την πρώτη σουίτα αντικειμενοστρεφών μετρικών. Στη συνέχεια προέκυψαν αρκετές παραλλαγές. :: Αντικειμενοστρεφεις Μετρικές

13 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 13 Μετρήσεις - Μετρικές  Το πλήθος και η πολυπλοκότητα των μεθόδων μιας κλάσης, είναι ενδεικτικά του πόσος χρόνος και προσπάθεια χρειάζεται για την ανάπτυξη και την συντήρηση της.  Όταν το πλήθος των μεθόδων μιας κλάσης είναι μεγάλο, τότε είναι μεγάλη και η εξάρτηση των υποκλάσεων της από αυτήν.  Μεγάλο πλήθος μεθόδων σημαίνει μειωμένη επαναχρησιμοποίηση. Ωστόσο υπάρχουν εφαρμογές που απαιτούν μεγάλο πλήθος μεθόδων. :: Πολυπλοκότητα (1/2)

14 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 14 Μετρήσεις - Μετρικές Τρεις μετρικές πολυπλοκότητας:  Cyclomatic Complexity (CC), κυκλωματική πολυπλοκότητα (πολυπλοκότητα μεθόδου)  Weighted Method per Class 1 (WMPC1), πολυπλοκότητα κλάσης  Weighted Method per Class 2 (WMPC2), πολυπλοκότητα κλάσης :: Πολυπλοκότητα (2/2)

15 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 15 Cyclomatic Complexity Η ‘Κυκλωματική Πολυπλοκότητα’ προτάθηκε από τον McCabe το 1976. Μετρά τον αριθμό των πιθανών μονοπατιών μέσα στον αλγόριθμο μιας μονάδας λογισμικού (π.χ. μεθόδου), ελέγχοντας τις διακριτές περιοχές του γράφου ροής (flow graph), δηλαδή τον αριθμό των if, switch, for, while (και do..while) εντολών στο σώμα της μεθόδου. Ο τύπος υπολογισμού: Cyclomatic Complexity : CC = E - N + 2P (δεν θα πρέπει να ξεπερνά το 10) όπου : E, είναι ο αριθμός των ακμών γράφου N, είναι ο αριθμός των κόμβων γράφου P, είναι ο αριθμός των συνδεδεμένων τμημάτων ή συνεκτικών συνιστωσών. :: Κυκλωματική Πολυπλοκότητα (1/6)

16 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 16 Cyclomatic Complexity Ένας πρακτικός οδηγός μέτρησης χωρίς τους γράφους: Βήματα: Κατηγορία Προσθήκη μονάδας για καθένα από: Μεθόδους Κάθε return (όχι τελευταία εντολή της μεθόδου) Επιλογέςif, else, case, default Επαναλήψειςfor, while, do-while, break, και continue Τελεστές&&, ||, ?, and : Εξαιρέσειςcatch, finally, throw, ή throws clause :: Κυκλωματική Πολυπλοκότητα (2/6)

17 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 17 Cyclomatic Complexity CC = 2 public class Hello { public static void main(String[] args) { if(args.length == 0) {System.out.println("Hello, World!"); } else { System.out.println("Hello, " + args[0] + "!"); } } } CC = 3 public class Hello { public static void main(String[] args) { if(args.length == 0) {System.out.println("Hello, World!"); } else if(args.length == 1){ System.out.println("Hello, " + args[0] + "!"); } else { System.out.println("Aargh, too many people to say hello to!"); } } } :: Κυκλωματική Πολυπλοκότητα (3/6)

18 Οι τέσσερις περιπτώσεις οι οποίες συναντιόνται συχνότερα στο γράφο ροής είναι: Ακολουθιακές Εντολές Επανάληψη Επανάληψη εντολές Διακλάδωσης με έξοδο με έξοδο (if -else ) στην αρχή στο τέλος (while) (do..while) Οι τέσσερις περιπτώσεις οι οποίες συναντιόνται συχνότερα στο γράφο ροής είναι: Ακολουθιακές Εντολές Επανάληψη Επανάληψη εντολές Διακλάδωσης με έξοδο με έξοδο (if -else ) στην αρχή στο τέλος (while) (do..while) Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 18 Cyclomatic Complexity :: Κυκλωματική Πολυπλοκότητα (4/6)

19 Δύο ξεχωριστές απεικονίσεις if-else : Αριστερ ή απεικόνιση : H συνθήκη ικανοποιείται (επίσκεψη στον κόμβο 3). Δεξιά απεικόνιση: H συνθήκη δεν ικανοποιείται (επίσκεψη στον κόμβο 4). Δύο ξεχωριστές απεικονίσεις if-else : Αριστερ ή απεικόνιση : H συνθήκη ικανοποιείται (επίσκεψη στον κόμβο 3). Δεξιά απεικόνιση: H συνθήκη δεν ικανοποιείται (επίσκεψη στον κόμβο 4). Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 19 Cyclomatic Complexity :: Κυκλωματική Πολυπλοκότητα (5/6) Η CC = 2 και στις δύο περιπτώσεις

20 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 20 Cyclomatic Complexity :: Κυκλωματική Πολυπλοκότητα (6/6) Amethod() { if (x = = a) do { x++; y = y+a; } while(x< = b); else { x = a; y = 2*a+4*b; } while (y! = a) { y++; x+ = a; } z = x+y*y; } Αριθµός ακµών = 9, Αριθµός κόµβων = 7 Συνεκτικές συνιστώσες P = 1. Κυκλωµατική πολυπλοκότητα = 9-7+2=4

21 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 21 Weighted Methods per Class (WMC) :: Σταθμισμένες Μέθοδοι ανά Κλάση (1/3) Η WMC υπολογίζεται ως το άθροισμα των μετρικών της πολυπλοκότητας κάθε μεθόδου για όλες τις μεθόδους [Chidamber 94]. Υπολογίζεται ως εξής: n WMC = Σ c i i = 1 Όπου: n, ο αριθμός των μεθόδων ανά κλάση και ci, η πολυπλοκότητα κάθε μεθόδου Υπάρχουν δυο υποκατηγορίες σε αυτήν τη μετρική: WMPC1 - Weighted Methods Per Class 1 WMPC2 - Weighted Methods Per Class 2

22 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 22 WMPC1 - Weighted Methods Per Class 1 :: Σταθμισμένες Μέθοδοι ανά Κλάση - 1 (2/3)  Μετρά το ποσό της πολυπλοκότητας όλων των μεθόδων σε μια κλάση, όπου κάθε μέθοδος σταθμίζεται από την κυκλωματική πολυπλοκότητά της.  Η πολυπλοκότητα των μεθόδων μετριέται με χρήση της Κυκλωματικής Πολυπλοκότητας (CC).  WMPC1 μιας κλάσης ορίζεται ο μέσος όρος ή το άθροισμα των CC όλων των μεθόδων της.  Στη διαδικασία της μέτρησης δεν συμπεριλαμβάνονται μέθοδοι που κληρονομούνται από υπερκλάσεις.  Η τιμή της μετρικής για τις μεθόδους δεν πρέπει να υπερβαίνει το 10 ενώ για τις κλάσεις το 30. Για να μειωθούν οι τιμές πρέπει να σπάμε τις μεθόδους και τις κλάσεις.

23 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 23 WMPC1 - Weighted Methods Per Class 2 :: Σταθμισμένες Μέθοδοι ανά Κλάση - 2 (3/3)  Η μετρική αυτή βασίζεται στην υπόθεση ότι μια κλάση με περισσότερες μεθόδους από μία άλλη είναι πιο σύνθετη.  Επιπλέον, θεωρεί ότι μια μέθοδος με περισσότερες παραμέτρους από μια άλλη είναι και πιο σύνθετη.  Η μετρική αθροίζει τις μεθόδους και τις παραμέτρους των μεθόδων μιας κλάσης. Αποφεύγονται οι κλάσεις με τιμή μετρικής άνω του 100.  Στη διαδικασία δεν περιλαμβάνονται μέθοδοι που κληρονομούνται από υπερκλάσεις.

24 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 24 Μετρικές Κληρονομικότητας Δύο μετρικές κληρονομικότητας:  Depth of Inheritance Tree (DIT)  Number of Child Classes (NOCC)

25 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 25 Depth of Inheritance Tree (DIT)  Η κληρονομικότητα είναι σημαντική έννοια και πρέπει να την χειριζόμαστε προσεκτικά.  Όσο βαθύτερα είναι μια κλάση στο κληρονομικό δένδρο, τόσο δυσκολότερα την αναπτύσσουμε, ελέγχουμε και συντηρούμε. Επομένως, πρέπει να γνωρίζουμε και να υπολογίζουμε αυτό το βάθος.  Η μετρική αυτή παρέχει την θέση της κλάσης στην ιεραρχία. Η Java δεν υποστηρίζει την πολλαπλή κληρονομικότητα. Στο παράδειγμα: DIT (C0) = 0 DIT (C0’) = 0 DIT (C1) = 1 DIT (C2) = 2 DIT (C3) = 3 DIT (C4) = 4

26 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 26 Number of Child Classes (NOCC) - 1/2  Μετράει τον αριθμό των κλάσεων που κληρονομούν την υπό εξέταση κλάση.  Μη μηδενική τιμή της μετρικής συνιστά ότι η συγκεκριμένη κλάση επαναχρησιμοποιείται.  Παρόλα αυτά, η αφαίρεση της κλάσης μπορεί να είναι φτωχή αν υπάρχουν πάρα πολλές υποκλάσεις - παιδιά.  Επιπλέον, υψηλές τιμές της μετρικής δείχνουν ότι θα χρειαστεί αυξημένος αριθμός ελέγχων για κάθε κλάση – παιδί

27 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 27 Number of Child Classes (NOCC) - 2/2 Στο παράδειγμα: NOCC (interface) = 7 NOCC (EventSupport) = 6

28 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 28 Μετρικές μεγέθους κώδικα Δύο μετρικές μεγέθους: Lines of Code Lines of Code (LOC): Μετρά τον αριθμό των γραμμών κώδικα. Σχόλια και κενές γραμμές δεν υπολογίζονται. Number of Classes Number of Classes (NOC): Μετρά τον αριθμό των κλάσεων του συστήματος. Υπολογίζεται μόνο σε επίπεδο πακέτου ή συστήματος.

29 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 29 Coupling  Αυξημένα επίπεδα σύζευξης: είναι ανεπιθύμητα σε συστήματα με πολλές υπό-μονάδες. Τροχοπέδη στην επαναχρησιμοποίηση.  Όσο πιο ανεξάρτητο είναι ένα αντικείμενο τόσο πιο εύκολα επανα- χρησιμοποιείται.  Όσο πιο αυξημένη είναι η σύζευξη μεταξύ των αντικειμένων ενός συστήματος, τόσο πιο ευαίσθητο είναι σε αλλαγές σε διάφορα μέρη του σχεδίου. Δυσκολότερη συντήρηση. :: Μετρικές Σύζευξης (1/2)

30 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 30 Coupling Τέσσερις μετρικές σύζευξης: Coupling Factor (CF)  Coupling Factor (CF) - Παράγοντας Σύζευξης: σύζευξη σε επίπεδο συστήματος. Coupling Between Objects (CBO)  Coupling Between Objects (CBO) - Σύζευξη μεταξύ Αντικειμένων Κλάσεων: σύζευξη σε επίπεδο κλάσης. Fan Out (FO) -  Fan Out (FO) - σύζευξη σε επίπεδο κλάσης. Fan In (FI) -  Fan In (FI) - σύζευξη σε επίπεδο κλάσης. :: Μετρικές Σύζευξης (2/2)

31 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 31 Coupling Factor (CF)  Υπολογίζεται μόνο σε επίπεδο συστήματος.  Υπολογίζεται ως κλάσμα.  Ο αριθμητής αντιπροσωπεύει τον αριθμό μη-κληρονομικών συζεύξεων.  Ο παρονομαστής είναι ο μέγιστος πιθανός αριθμός συζεύξεων σε ένα σύστημα. :: Παράγοντας Σύζευξης

32 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 32 Coupling Between Objects (CBO)  Μετράει τον αριθμό των κλάσεων με τις οποίες συνδέεται μια κλάση.  Με τον όρο η κλάση Α συνδέεται με την κλάση Β εννοούμε: Δήλωση μιας ιδιότητας τύπου Β, στην κλάση Α επιστροφή τύπου Β, σε μια μέθοδο της κλάσης Α. Η κλάση Β κληρονομεί την Α. Διαφορά με CF: Συμπεριφορά ως προς κληρονομικότητα: Στην CF αμφίδρομες κλήσεις μετράνε ως 2, ενώ στην CBO ως 1. :: Σύζευξη μεταξύ Αντικειμένων Κλάσεων

33 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 33 Fan Out – Fan In  Κάθε συσχέτιση για τον υπολογισμό της CBO μπορεί να θεωρηθεί είτε ότι “φεύγει” σε μία κλάση είτε ότι “έρχεται” από μια κλάση.  Ο αριθμός των ακμών που φεύγουν από μια κλάση ονομάζεται Fan-Out (outputs). Υποδηλώνει τον αριθμό των συναρτήσεων που καλεί η εξεταζόμενη συνάρτηση (δεν πρέπει η τιμή της μετρικής να είναι άνω του 15).  Ο αριθμός των ακμών που καταλήγουν σε μια κλάση ονομάζεται Fan-In (inputs). Υποδηλώνει τον αριθμό των συναρτήσεων που καλούν την εξεταζόμενη συνάρτηση.  Μεγάλο Fan-Out = > Η κλάση δεν είναι αυτάρκης  Μεγάλο Fan-In => Η κλάση παρέχει μεγάλη λειτουργικότητα FI=2, FO=3

34 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 34 Lack Of Cohesion Of Methods (LOCOM)  Σύμφωνα με την μετρική, κάθε μέθοδος σε μια κλάση θεωρείται ότι προσπελαύνει ένα ή περισσότερα κοινά μέλη δεδομένων. Δύο μέθοδοι είναι συνεκτικές εάν τα μέλη δεδομένων που χρησιμοποιούν έχουν κοινά στοιχεία.  Συνεκτικότητα (cohesion) αναφέρεται στο βαθμό εσωτερικής λειτουργικής συνάφειας μεταξύ των τμημάτων ενός συστατικού.  Η συνοχή των μεθόδων σε μία κλάση είναι επιθυμητή από την στιγμή που προωθεί την ενθυλάκωση.  Η έλλειψη συνοχής υποδηλώνει ότι η κλάση πιθανώς να πρέπει να διασπαστεί σε δύο ή περισσότερες κλάσεις.  Η έλλειψη συνοχής αυξάνει την πολυπλοκότητα και την πιθανότητα εμφάνισης λαθών κατά την ανάπτυξη. Τρείς Μετρικές Συνοχής: Lack Of Cohesion of Methods 1 (LOCOM1) Lack Of Cohesion of Methods 2 (LOCOM2) Lack Of Cohesion of Methods 3 (LOCOM3) :: Έλλειψη συνεκτικότητας μεταξύ των Μεθόδων

35 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 35 Lack of Cohesion of Methods 1 (1/2)  Παίρνουμε κάθε ζευγάρι μεθόδων σε μια κλάση. Αν μοιράζονται ασύνδετα σύνολα μεταβλητών αυξάνουμε το P κατά 1 (καμία κοινή μεταβλητή). Αν μοιράζονται τουλάχιστον μια μεταβλητή, τότε αυξάνουμε το Q κατά 1. LCOM1 = P – Q (αν P > Q), διαφορετικά LCOM1 = 0  LCOM1 = 0, σημαίνει συνεκτική κλάση.  LCOM1 > 0, σημαίνει ότι η κλάση πρέπει να ‘σπάσει’ σε δύο ή περισσότερες κλάσεις, καθότι οι μεταβλητές τους ανήκουν σε διαφορετικά σύνολα. Η γενική μορφή της μετρικής: :: Έλλειψη συνεκτικότητας μεταξύ των Μεθόδων - 1

36 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 36 Lack of Cohesion of Methods 1 (2/2) Κριτική για την LCOM1:  Δίνει τιμή 0 για πολύ διαφορετικές κλάσεις.  O Gupta ισχυρίζεται ότι η LCOM1 δεν είναι η κατάλληλη μετρική για να υπολογίσει την συνεκτικότητα μιας κλάσης και αυτό γιατί βασίζεται στην αλληλεπίδραση των δεδομένων της μεθόδου (μη σωστός τρόπος για τον ορισμό της συνεκτικότητας). Πολύ διαφορετικές κλάσεις μπορεί να έχουν ίδιο LCOM1.  Για κλάσεις που ορίζουν και προσπελούν τα εσωτερικά τους δεδομένα μέσω sets και gets και όχι μέσω read/write εντολές μπορεί να δείξουν υψηλό LCOM1.  Για να λυθούν αυτά τα πρόβλημα προτάθηκαν η LCOM2 και LCOM3. :: Έλλειψη συνεκτικότητας μεταξύ των Μεθόδων - 1

37 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 37 Lack of Cohesion of Methods 2 H LCOM2 ισούται με το ποσοστό των μεθόδων που δεν προσπελούν κάποιο χαρακτηριστικό της κλάσης σε σχέση με όλα τα χαρακτηριστικά της κλάσης (εξάγοντας το μέσο όρο όλων των χαρακτηριστικών στην κλάση). Ορισμός της LCOM2: LCOM2 = 1 - sum(mA)/(m*a) Όπου: mαρ. των μεθόδων της κλάσης aαρ. των χαρακτ./μεταβλητών της κλάσης mAαρ. των μεθόδων που έχουν πρόσβαση σε ένα χαρακτ./μεταβλητή sum(mA)άθροισμα όλων των mA στο σύνολο των χαρακτ./μεταβλητών της κλάσης  Αν ο αρ. των μεθόδων ή χαρακτ./μεταβλητών έχουν τιμή 0, τότε η LCOM2 ορίζεται σαν απροσδιόριστη και λαμβάνει τιμή 0. :: Έλλειψη συνεκτικότητας μεταξύ των Μεθόδων - 2

38 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 38 Lack of Cohesion of Methods 3 H LCOM3 (Henderson-Sellers το 1995). Οι τιμές μεταξύ 0 και 2. Από 1-2 θεωρούνται προβληματικές. Όταν η LCOM3=0, τότε κάθε μέθοδος έχει πρόσβαση σε όλες τις μεταβλητές. Ορισμός της LCOM3: LCOM3 = (m - sum(mA)/a) / (m-1) Όπου: mαρ. των μεθόδων της κλάσης aαρ. των χαρακτ./μεταβλητών της κλάσης mAαρ. των μεθόδων που έχουν πρόσβαση σε ένα χαρακτ./μεταβλητή sum(mA)άθροισμα όλων των mA στο σύνολο των χαρακτ./μεταβλητών της κλάσης :: Έλλειψη συνεκτικότητας μεταξύ των Μεθόδων - 3


Κατέβασμα ppt "Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού Παναγιώτης Σφέτσος, PhD"

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google