Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ...

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

description

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

Transcript of Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ...

Page 1: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Μεθοδολογίες Προγραμματισμού ΙΙΜεθοδολογίες Προγραμματισμού ΙΙ

Μ Ε Τ Ρ Ι Κ Ε ΣΜ Ε Τ Ρ Ι Κ Ε Σ

ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ

Ποιότητα ΛογισμικούΠοιότητα Λογισμικού

Παναγιώτης Σφέτσος, PhD

http://aetos.it.teithe.gr/~sfetsos/

[email protected]

Page 2: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 2

ΣτόχοιΣτόχοι

Ποιότητα ΛογισμικούΠοιότητα Λογισμικού

Μετρήσεις - Μετρικές ΛογισμικούΜετρήσεις - Μετρικές Λογισμικού

Αντικειμενοστρεφείς ΜετρικέςΑντικειμενοστρεφείς Μετρικές

Page 3: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 3

Ποιότητα ΛογισμικούΠοιότητα Λογισμικού

Το πρότυπο ISO / IEC 9126:ISO / IEC 9126:Στοχεύει στη διασφάλιση της ποιότητας των προϊόντων του λογισμικού, καθορίζοντας τα χαρακτηριστικά και τα υπό-χαρακτηριστικά της ποιότητας καθώς και τις συνδεδεμένες μετρικές.

Εξωτερικές μετρικές: εφαρμόζονται στο λογισμικό όταν είναι σε λειτουργία. Εσωτερικές μετρικές: δεν στηρίζονται στην λειτουργία του λογισμικού, είναι

συνήθως μετρικές κώδικα (στατικές μετρικές). Σε χρήση μετρικές: είναι διαθέσιμες όταν το λογισμικό χρησιμοποιείται σε

πραγματικές συνθήκες.

:: ISO / IEC 9126 (1/2)

Page 4: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 4

Ποιότητα ΛογισμικούΠοιότητα Λογισμικού

Το μοντέλο Εξωτερικής/Εσωτερικής Ποιότητας του προτύπου ISO/IEC 9126-1

:: ISO / IEC 9126 (2/2)

Page 5: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 5

Μετρήσεις - ΜετρικέςΜετρήσεις - Μετρικές

ΜέτρησηΜέτρηση (measure) ονομάζεται η διαδικασία κατά την οποία αριθμοί και

σύμβολα συνδέονται με ιδιότητες οντοτήτων του πραγματικού κόσμου έτσι ώστε

να τα περιγράφουν σύμφωνα με αυστηρά καθορισμένους κανόνες [Norman Fenton].

Οφέλη: Ποσοτική και αντικειμενική θεώρηση των δυνατοτήτων και αδυναμιών των

διαδικασιών, προϊόντων και πόρων. Ερευνητές και Επαγγελματίες: Κατανόηση συμπεριφορών και αποτελεσμάτων

για καλύτερη επιλογή τεχνικών και εργαλείων. Κατασκευαστές: μετρούν τα χαρακτηριστικά του λογισμικού, για να διαπιστώσουν

1) την πρόοδο του έργου, 2) εάν ικανοποιούνται πλήρως οι απαιτήσεις των

πελατών και 3) για να εξακριβώσουν εάν ο σχεδιασμός είναι σωστός. Διευθυντές: συμβουλεύονται τις μετρήσεις, για να διαπιστώσουν την πορεία του

έργου σε σχέση με τα χρονοδιαγράμματα και τους καθορισμένους προϋπολογισμούς.

:: Τι είναι μέτρηση (1/2)

Page 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)

Page 7: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 7

Μετρήσεις - ΜετρικέςΜετρήσεις - Μετρικές

ΜετρικήΜετρική (metric) είναι μια εμπειρική αντικειμενική αντιστοίχηση ενός αριθμού

ή συμβόλου σε μια οντότητα με στόχο να χαρακτηρίσει ένα συγκεκριμένο

χαρακτηριστικό της [Norman Fenton].

Μέτρο: ποσοτική ένδειξη αριθμού, διαστάσεων, χωρητικότητας, όγκου κτλ.

προϊόντος ή διαδικασίας.

Μέτρηση: Διαδικασία υπολογισμού μέτρου/ων.

Μετρική: ποσοτική εκτίμηση του βαθμού κατά τον οποίο ένα σύστημα κατέχει

ένα χαρακτηριστικό.

Αριθμός λαθών σε ένα πρόγραμμα = Μέτρο

Συλλογή και καταμέτρηση λαθών = Μέτρηση

Συσχετισμός λαθών με κάποιο χαρακτηριστικό, π.χ. ποιότητα (πάνω από

100 λάθη => κακή ποιότητα, κάτω από 10 λάθη => καλή ποιότητα) = Μετρική

:: Μετρικές Λογισμικού (1/5)

Page 8: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 8

Μετρήσεις - ΜετρικέςΜετρήσεις - Μετρικές

Μια μετρική είναι καλή όταν η αριθμητική της τιμή χαρακτηρίζει

με ακρίβεια την συγκεκριμένη ιδιότητα του αντικειμένου [Fenton].

Μια ιδανική μετρική θα πρέπει να είναι: Απλή και υπολογίσιμη Εμπειρικά και διαισθητικά πειστική Συνεπής και αντικειμενική Συνεπής ως προς τη χρήση ποσοτικών μονάδων Ανεξάρτητη από γλώσσες προγραμματισμού και

διαδικασίες ανάπτυξης Ελέγξιμη και ‘ανοικτή’ σε ουσιαστικούς μηχανισμούς ανάδρασης

:: Μετρικές Λογισμικού (2/5)

Page 9: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 9

Μετρήσεις - ΜετρικέςΜετρήσεις - Μετρικές

Μια ιδανική μέτρηση θα πρέπει να περιλαμβάνει τις δραστηριότητες:

Διατύπωση (καθορισμός μετρικών) Συλλογή (συγκέντρωση δεδομένων) Ανάλυση (υπολογισμός μετρικών) Ερμηνεία (αξιολόγηση μετρικών) Ανάδραση (συστάσεις για βελτίωση)

:: Μετρικές Λογισμικού (3/5)

Page 10: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 10

Μετρήσεις - ΜετρικέςΜετρήσεις - Μετρικές

Αρχές Διατύπωσης Μετρικών Καθορισμός στόχων των μετρήσεων πριν τη συλλογή των δεδομένων Ακριβής ορισμός των μετρικών Χρήση μετρικών προσαρμοσμένων στα προϊόντα και τις διαδικασίες

Αρχές Συλλογής και Ανάλυσης Μετρικών Αυτοματοποίηση στη συλλογή και ανάλυση των μετρικών (όπου είναι δυνατή) Χρήση αξιόπιστων στατιστικών τεχνικών για διερεύνηση εσωτερικών

και εξωτερικών χαρακτηριστικών Καθορισμός συγκεκριμένων κανόνων ερμηνείας των μετρικών

:: Μετρικές Λογισμικού (4/5)

Page 11: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 11

Μετρήσεις - ΜετρικέςΜετρήσεις - Μετρικές

Οι μετρικές διακρίνονται σε: μετρικές προϊόντος (product metrics) μετρικές διαδικασίας (process metrics) μετρικές έργου (project metrics)

Οι μετρικές προϊόντος χωρίζονται στις: Εσωτερικές: π.χ. αριθμός γραμμών (LOC), χρόνος εκτέλεσης, λάθη του κώδικα Εξωτερικές: π.χ. λειτουργικότητα (functionality), ποιότητα (quality),

πολυπλοκότητα (complexity), αποτελεσματικότητα (efficiency), αξιοπιστία

(reliability), συντηρησιμότητα (maintainability).

Μετρικές διαδικασίας: μετρούν τη διαδικασία κατασκευής ενός προϊόντος, για

παράδειγμα το σχεδιασμό, τη συγγραφή κώδικα, τους απαιτούμενους πόρους.

Μετρικές έργου: χρησιμοποιούνται για τον καθορισμό στρατηγικής, σχετίζονται

με την τακτική εκτέλεσης του έργου και καθορίζουν τη ροή του και τις τεχνικές

που θα ακολουθηθούν.

:: Μετρικές Λογισμικού (5/5)

Page 12: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 12

Μετρήσεις - ΜετρικέςΜετρήσεις - Μετρικές

Βασικές κατηγορίες αντικειμενοστρεφών μετρικών:

Πολυπλοκότητας Κληρονομικότητας Μεγέθους Σύζευξης Συνοχής

Οι Chidamber & Kemerer (1991) πρότειναν την πρώτη σουίτα

αντικειμενοστρεφών μετρικών. Στη συνέχεια προέκυψαν αρκετές

παραλλαγές.

:: Αντικειμενοστρεφεις Μετρικές

Page 13: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 13

Μετρήσεις - ΜετρικέςΜετρήσεις - Μετρικές

Το πλήθος και η πολυπλοκότητα των μεθόδων μιας κλάσης, είναι

ενδεικτικά του πόσος χρόνος και προσπάθεια χρειάζεται για την

ανάπτυξη και την συντήρηση της.

Όταν το πλήθος των μεθόδων μιας κλάσης είναι μεγάλο, τότε είναι

μεγάλη και η εξάρτηση των υποκλάσεων της από αυτήν.

Μεγάλο πλήθος μεθόδων σημαίνει μειωμένη επαναχρησιμοποίηση.

Ωστόσο υπάρχουν εφαρμογές που απαιτούν μεγάλο πλήθος μεθόδων.

:: Πολυπλοκότητα (1/2)

Page 14: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 14

Μετρήσεις - ΜετρικέςΜετρήσεις - Μετρικές

Τρεις μετρικές πολυπλοκότητας:

Cyclomatic Complexity (CC), κυκλωματική πολυπλοκότητα

(πολυπλοκότητα μεθόδου)

Weighted Method per Class 1 (WMPC1), πολυπλοκότητα κλάσης

Weighted Method per Class 2 (WMPC2), πολυπλοκότητα κλάσης

:: Πολυπλοκότητα (2/2)

Page 15: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 15

Cyclomatic Complexity Cyclomatic Complexity

Η ‘Κυκλωματική Πολυπλοκότητα’ προτάθηκε από τον McCabe το 1976.

Μετρά τον αριθμό των πιθανών μονοπατιών μέσα στον αλγόριθμο μιας μονάδας

λογισμικού (π.χ. μεθόδου), ελέγχοντας τις διακριτές περιοχές του γράφου ροής

(flow graph), δηλαδή τον αριθμό των if, switch, for, while (και do..while)

εντολών στο σώμα της μεθόδου.

Ο τύπος υπολογισμού:

Cyclomatic Complexity : CC = E - N + 2P (δεν θα πρέπει να ξεπερνά το 10)

όπου :

• E, είναι ο αριθμός των ακμών γράφου

• N, είναι ο αριθμός των κόμβων γράφου

• P, είναι ο αριθμός των συνδεδεμένων τμημάτων ή συνεκτικών συνιστωσών.

:: Κυκλωματική Πολυπλοκότητα (1/6)

Page 16: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 16

Cyclomatic Complexity Cyclomatic Complexity

Ένας πρακτικός οδηγός μέτρησης χωρίς τους γράφους:

Βήματα:

Κατηγορία Προσθήκη μονάδας για καθένα από:

Μεθόδους Κάθε return (όχι τελευταία εντολή της μεθόδου)

Επιλογές if, else, case, default

Επαναλήψεις for, while, do-while, break, και continue

Τελεστές &&, ||, ?, and :

Εξαιρέσεις catch, finally, throw, ή throws clause

:: Κυκλωματική Πολυπλοκότητα (2/6)

Page 17: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 17

Cyclomatic Complexity Cyclomatic Complexity

CC = 2CC = 2public 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 = 3CC = 3public 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)

Page 18: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Οι τέσσερις περιπτώσεις οι οποίες συναντιόνται συχνότερα στο γράφο ροής είναι:

Ακολουθιακές Εντολές Επανάληψη Επανάληψη

εντολές Διακλάδωσης με έξοδο με έξοδο

(if -else ) στην αρχή στο τέλος

(while) (do..while)

Οι τέσσερις περιπτώσεις οι οποίες συναντιόνται συχνότερα στο γράφο ροής είναι:

Ακολουθιακές Εντολές Επανάληψη Επανάληψη

εντολές Διακλάδωσης με έξοδο με έξοδο

(if -else ) στην αρχή στο τέλος

(while) (do..while)

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 18

Cyclomatic Complexity Cyclomatic Complexity :: Κυκλωματική Πολυπλοκότητα (4/6)

Page 19: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Δύο ξεχωριστές απεικονίσεις if-else:

Αριστερή απεικόνιση: H συνθήκη ικανοποιείται (επίσκεψη στον κόμβο 3).

Δεξιά απεικόνιση: H συνθήκη δεν ικανοποιείται (επίσκεψη στον κόμβο 4).

Δύο ξεχωριστές απεικονίσεις if-else:

Αριστερή απεικόνιση: H συνθήκη ικανοποιείται (επίσκεψη στον κόμβο 3).

Δεξιά απεικόνιση: H συνθήκη δεν ικανοποιείται (επίσκεψη στον κόμβο 4).

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 19

Cyclomatic Complexity Cyclomatic Complexity :: Κυκλωματική Πολυπλοκότητα (5/6)

Η CC = 2 και στις δύο περιπτώσεις

Page 20: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 20

Cyclomatic Complexity 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

Page 21: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 21

Weighted Methods per Class (WMC)Weighted Methods per Class (WMC):: Σταθμισμένες Μέθοδοι ανά Κλάση (1/3)

Η WMC υπολογίζεται ως το άθροισμα των μετρικών της πολυπλοκότητας κάθε μεθόδου για όλες τις μεθόδους [Chidamber 94].

Υπολογίζεται ως εξής:

n

WMC = Σ ci

i = 1

Όπου:n, ο αριθμός των μεθόδων ανά κλάση και ci, η πολυπλοκότητα κάθε μεθόδου

Υπάρχουν δυο υποκατηγορίες σε αυτήν τη μετρική:

• WMPC1 - Weighted Methods Per Class 1

• WMPC2 - Weighted Methods Per Class 2

Page 22: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 22

WMPC1 - Weighted Methods Per Class 1WMPC1 - Weighted Methods Per Class 1:: Σταθμισμένες Μέθοδοι ανά Κλάση - 1 (2/3)

Μετρά το ποσό της πολυπλοκότητας όλων των μεθόδων σε μια κλάση, όπου κάθε μέθοδος σταθμίζεται από την κυκλωματική πολυπλοκότητά της.

Η πολυπλοκότητα των μεθόδων μετριέται με χρήση της Κυκλωματικής Πολυπλοκότητας (CC).

WMPC1 μιας κλάσης ορίζεται ο μέσος όρος ή το άθροισμα των CC όλων των μεθόδων της.

Στη διαδικασία της μέτρησης δεν συμπεριλαμβάνονται μέθοδοι που κληρονομούνται από υπερκλάσεις.

Η τιμή της μετρικής για τις μεθόδους δεν πρέπει να υπερβαίνει το 10 ενώ για τις κλάσεις το 30. Για να μειωθούν οι τιμές πρέπει να σπάμε τις μεθόδους και τις κλάσεις.

Page 23: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 23

WMPC1 - Weighted Methods Per Class WMPC1 - Weighted Methods Per Class 22:: Σταθμισμένες Μέθοδοι ανά Κλάση - 2 (3/3)

Η μετρική αυτή βασίζεται στην υπόθεση ότι μια κλάση με περισσότερες μεθόδους από μία άλλη είναι πιο σύνθετη.

Επιπλέον, θεωρεί ότι μια μέθοδος με περισσότερες παραμέτρους από μια άλλη είναι και πιο σύνθετη.

Η μετρική αθροίζει τις μεθόδους και τις παραμέτρους των μεθόδων μιας κλάσης. Αποφεύγονται οι κλάσεις με τιμή μετρικής άνω του 100.

Στη διαδικασία δεν περιλαμβάνονται μέθοδοι που κληρονομούνται από υπερκλάσεις.

Page 24: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 24

Μετρικές ΚληρονομικότηταςΜετρικές Κληρονομικότητας

Δύο μετρικές κληρονομικότητας:

Depth of Inheritance Tree (DIT)

Number of Child Classes (NOCC)

Page 25: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 25

Depth of Inheritance Tree (DIT)Depth of Inheritance Tree (DIT) Η κληρονομικότητα είναι σημαντική έννοια και πρέπει να την χειριζόμαστε προσεκτικά.

Όσο βαθύτερα είναι μια κλάση στο κληρονομικό δένδρο, τόσο δυσκολότερα την αναπτύσσουμε, ελέγχουμε και συντηρούμε. Επομένως , πρέπει να γνωρίζουμε και να υπολογίζουμε αυτό το βάθος.

Η μετρική αυτή παρέχει την θέση της κλάσης στην ιεραρχία. Η Java δεν υποστηρίζει την πολλαπλή κληρονομικότητα.

Στο παράδειγμα: DIT (C0) = 0 DIT (C0’) = 0 DIT (C1) = 1 DIT (C2) = 2 DIT (C3) = 3 DIT (C4) = 4

Page 26: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 26

Number of Child Classes (NOCC)Number of Child Classes (NOCC) - 1/2 - 1/2

Μετράει τον αριθμό των κλάσεων που κληρονομούν την υπό εξέταση κλάση.

Μη μηδενική τιμή της μετρικής συνιστά ότι η συγκεκριμένη κλάση επαναχρησιμοποιείται.

Παρόλα αυτά, η αφαίρεση της κλάσης μπορεί να είναι φτωχή αν υπάρχουν πάρα πολλές υποκλάσεις - παιδιά.

Επιπλέον, υψηλές τιμές της μετρικής δείχνουν ότι θα χρειαστεί αυξημένος αριθμός ελέγχων για κάθε κλάση – παιδί

Page 27: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 27

Number of Child Classes (NOCC)Number of Child Classes (NOCC) - 2/2 - 2/2

Στο παράδειγμα:

NOCC (interface) = 7

NOCC (EventSupport) = 6

Page 28: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 28

Μετρικές μεγέθους κώδικαΜετρικές μεγέθους κώδικα

Δύο μετρικές μεγέθους:

Lines of Code Lines of Code (LOC): Μετρά τον αριθμό των γραμμών κώδικα. Σχόλια και κενές γραμμές δεν υπολογίζονται.

Number of Classes Number of Classes (NOC): Μετρά τον αριθμό των κλάσεων του συστήματος. Υπολογίζεται μόνο σε επίπεδο πακέτου ή συστήματος.

Page 29: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 29

CouplingCoupling

Αυξημένα επίπεδα σύζευξης: είναι ανεπιθύμητα σε συστήματα με πολλές υπό-μονάδες. Τροχοπέδη στην επαναχρησιμοποίηση.

Όσο πιο ανεξάρτητο είναι ένα αντικείμενο τόσο πιο εύκολα επανα- χρησιμοποιείται.

Όσο πιο αυξημένη είναι η σύζευξη μεταξύ των αντικειμένων ενός συστήματος, τόσο πιο ευαίσθητο είναι σε αλλαγές σε διάφορα μέρη του σχεδίου. Δυσκολότερη συντήρηση.

:: Μετρικές Σύζευξης (1/2)

Page 30: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 30

CouplingCoupling

Τέσσερις μετρικές σύζευξης:

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)

Page 31: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 31

Coupling Factor (CF) Coupling Factor (CF)

Υπολογίζεται μόνο σε επίπεδο συστήματος.

Υπολογίζεται ως κλάσμα.

Ο αριθμητής αντιπροσωπεύει τον αριθμό μη-κληρονομικών συζεύξεων.

Ο παρονομαστής είναι ο μέγιστος πιθανός αριθμός συζεύξεων σε ένα σύστημα.

:: Παράγοντας Σύζευξης

Page 32: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 32

Coupling Between Objects (CBO) Coupling Between Objects (CBO)

Μετράει τον αριθμό των κλάσεων με τις οποίες συνδέεται μια κλάση.

Με τον όρο η κλάση Α συνδέεται με την κλάση Β εννοούμε: Δήλωση μιας

ιδιότητας τύπου Β, στην κλάση Α επιστροφή τύπου Β, σε μια μέθοδο της

κλάσης Α. Η κλάση Β κληρονομεί την Α.

Διαφορά με CF:

Συμπεριφορά ως προς κληρονομικότητα: Στην CF αμφίδρομες κλήσεις μετράνε

ως 2, ενώ στην CBO ως 1.

:: Σύζευξη μεταξύ Αντικειμένων Κλάσεων

Page 33: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 33

Fan Out – Fan InFan Out – Fan In

Κάθε συσχέτιση για τον υπολογισμό της CBO μπορεί να θεωρηθεί είτε ότι “φεύγει” σε μία κλάση είτε ότι “έρχεται” από μια κλάση.

Ο αριθμός των ακμών που φεύγουν από μια κλάση ονομάζεται Fan-Out (outputs). Υποδηλώνει τον αριθμό των συναρτήσεων που καλεί η εξεταζόμενη συνάρτηση (δεν πρέπει η τιμή της μετρικής να είναι άνω του 15).

Ο αριθμός των ακμών που καταλήγουν σε μια κλάση ονομάζεται Fan-In (inputs). Υποδηλώνει τον αριθμό των συναρτήσεων που καλούν την εξεταζόμενη συνάρτηση.

Μεγάλο Fan-Out = > Η κλάση δεν είναι αυτάρκης

Μεγάλο Fan-In => Η κλάση παρέχει μεγάλη λειτουργικότηταFI=2, FO=3

Page 34: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 34

Lack Of Cohesion Of MethodsLack Of Cohesion Of Methods ( (LOCOMLOCOM))

Σύμφωνα με την μετρική, κάθε μέθοδος σε μια κλάση θεωρείται ότι προσπελαύνει ένα ή περισσότερα κοινά μέλη δεδομένων. Δύο μέθοδοι είναι συνεκτικές εάν τα μέλη δεδομένων που χρησιμοποιούν έχουν κοινά στοιχεία.

Συνεκτικότητα (cohesion) αναφέρεται στο βαθμό εσωτερικής λειτουργικής συνάφειας μεταξύ των τμημάτων ενός συστατικού.

Η συνοχή των μεθόδων σε μία κλάση είναι επιθυμητή από την στιγμή που προωθεί την ενθυλάκωση.

Η έλλειψη συνοχής υποδηλώνει ότι η κλάση πιθανώς να πρέπει να διασπαστεί σε δύο ή περισσότερες κλάσεις.

Η έλλειψη συνοχής αυξάνει την πολυπλοκότητα και την πιθανότητα εμφάνισης λαθών κατά την ανάπτυξη.

Τρείς Μετρικές Συνοχής:Lack Of Cohesion of Methods 1 (LOCOM1) Lack Of Cohesion of Methods 2 (LOCOM2) Lack Of Cohesion of Methods 3 (LOCOM3)

:: Έλλειψη συνεκτικότητας μεταξύ των Μεθόδων

Page 35: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 35

Lack of Cohesion of Methods 1 (1/2)Lack of Cohesion of Methods 1 (1/2)

Παίρνουμε κάθε ζευγάρι μεθόδων σε μια κλάση. Αν μοιράζονται ασύνδετα σύνολα μεταβλητών αυξάνουμε το P κατά 1 (καμία κοινή μεταβλητή). Αν μοιράζονται τουλάχιστον μια μεταβλητή, τότε αυξάνουμε το Q κατά 1.

LCOM1 = P – Q (αν P > Q), διαφορετικά LCOM1 = 0 LCOM1 = 0, σημαίνει συνεκτική κλάση.

LCOM1 > 0, σημαίνει ότι η κλάση πρέπει να ‘σπάσει’ σε δύο ή περισσότερες κλάσεις, καθότι οι μεταβλητές τους ανήκουν σε διαφορετικά σύνολα.

Η γενική μορφή της μετρικής:

:: Έλλειψη συνεκτικότητας μεταξύ των Μεθόδων - 1

otherwise

QPifQPLCOM

IIIIQ

IIIIP

jiji

jiji

0

|,{

|,{

Page 36: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 36

Lack of Cohesion of Methods 1 (2/2)Lack of Cohesion of Methods 1 (2/2)

Κριτική για την LCOM1:

Δίνει τιμή 0 για πολύ διαφορετικές κλάσεις.

O Gupta ισχυρίζεται ότι η LCOM1 δεν είναι η κατάλληλη μετρική για να υπολογίσει την συνεκτικότητα μιας κλάσης και αυτό γιατί βασίζεται στην αλληλεπίδραση των δεδομένων της μεθόδου (μη σωστός τρόπος για τον ορισμό της συνεκτικότητας). Πολύ διαφορετικές κλάσεις μπορεί να έχουν ίδιο LCOM1.

Για κλάσεις που ορίζουν και προσπελούν τα εσωτερικά τους δεδομένα μέσω sets και gets και όχι μέσω read/write εντολές μπορεί να δείξουν υψηλό LCOM1.

Για να λυθούν αυτά τα πρόβλημα προτάθηκαν η LCOM2 και LCOM3.

:: Έλλειψη συνεκτικότητας μεταξύ των Μεθόδων - 1

Page 37: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 37

Lack of Cohesion of Methods Lack of Cohesion of Methods 22

H LCOM2 ισούται με το ποσοστό των μεθόδων που δεν προσπελούν κάποιο χαρακτηριστικό της κλάσης σε σχέση με όλα τα χαρακτηριστικά της κλάσης (εξάγοντας το μέσο όρο όλων των χαρακτηριστικών στην κλάση).

Ορισμός της Ορισμός της LCOM2LCOM2::

LCOM2 = 1 - sum(mA)/(m*a)

Όπου:m αρ. των μεθόδων της κλάσηςa αρ. των χαρακτ./μεταβλητών της κλάσηςmA αρ. των μεθόδων που έχουν πρόσβαση σε ένα χαρακτ./μεταβλητή sum(mA)άθροισμα όλων των mA στο σύνολο των χαρακτ./μεταβλητών της κλάσης

Αν ο αρ. των μεθόδων ή χαρακτ./μεταβλητών έχουν τιμή 0, τότε η LCOM2 ορίζεται σαν απροσδιόριστη και λαμβάνει τιμή 0.

:: Έλλειψη συνεκτικότητας μεταξύ των Μεθόδων - 2

Page 38: Μεθοδολογίες Προγραμματισμού ΙΙ Μ Ε Τ Ρ Ι Κ Ε Σ ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ Ποιότητα Λογισμικού

Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 38

Lack of Cohesion of Methods Lack of Cohesion of Methods 33

H LCOM3 (Henderson-Sellers το 1995). Οι τιμές μεταξύ 0 και 2. Από 1-2 θεωρούνται προβληματικές. Όταν η LCOM3=0, τότε κάθε μέθοδος έχει πρόσβαση σε όλες τις μεταβλητές.

Ορισμός της Ορισμός της LCOM3LCOM3::

LCOM3 = (m - sum(mA)/a) / (m-1)

Όπου:m αρ. των μεθόδων της κλάσηςa αρ. των χαρακτ./μεταβλητών της κλάσηςmA αρ. των μεθόδων που έχουν πρόσβαση σε ένα χαρακτ./μεταβλητή sum(mA)άθροισμα όλων των mA στο σύνολο των χαρακτ./μεταβλητών της κλάσης

:: Έλλειψη συνεκτικότητας μεταξύ των Μεθόδων - 3