μετρικες

Download Report

Transcript μετρικες

Μεθοδολογίες Προγραμματισμού ΙΙ
Μ Ε Τ Ρ Ι Κ Ε Σ
ΑΝΤΚΕΙΜΕΝΟΣΤΡΕΦΟΥΣ ΣΧΕΔΙΑΣΗΣ
Ποιότητα Λογισμικού
Παναγιώτης Σφέτσος, PhD
http://aetos.it.teithe.gr/~sfetsos/
[email protected]
Στόχοι

Ποιότητα Λογισμικού

Μετρήσεις - Μετρικές Λογισμικού

Αντικειμενοστρεφείς Μετρικές
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
2
Ποιότητα Λογισμικού
:: ISO / IEC 9126 (1/2)
Το πρότυπο ISO / IEC 9126:
Στοχεύει στη διασφάλιση της ποιότητας των προϊόντων του λογισμικού,
καθορίζοντας τα χαρακτηριστικά και τα υπό-χαρακτηριστικά της ποιότητας
καθώς και τις συνδεδεμένες μετρικές.



Εξωτερικές μετρικές: εφαρμόζονται στο λογισμικό όταν είναι σε λειτουργία.
Εσωτερικές μετρικές: δεν στηρίζονται στην λειτουργία του λογισμικού, είναι
συνήθως μετρικές κώδικα (στατικές μετρικές).
Σε χρήση μετρικές: είναι διαθέσιμες όταν το λογισμικό χρησιμοποιείται σε
πραγματικές συνθήκες.
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
3
Ποιότητα Λογισμικού
:: ISO / IEC 9126 (2/2)
Το μοντέλο Εξωτερικής/Εσωτερικής Ποιότητας του προτύπου ISO/IEC 9126-1
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
4
Μετρήσεις - Μετρικές
:: Τι είναι μέτρηση (1/2)
Μέτρηση (measure) ονομάζεται η διαδικασία κατά την οποία αριθμοί και
σύμβολα συνδέονται με ιδιότητες οντοτήτων του πραγματικού κόσμου έτσι ώστε
να τα περιγράφουν σύμφωνα με αυστηρά καθορισμένους κανόνες [Norman Fenton].
Οφέλη:
 Ποσοτική και αντικειμενική θεώρηση των δυνατοτήτων και αδυναμιών των
διαδικασιών, προϊόντων και πόρων.
 Ερευνητές και Επαγγελματίες: Κατανόηση συμπεριφορών και αποτελεσμάτων
για καλύτερη επιλογή τεχνικών και εργαλείων.
 Κατασκευαστές: μετρούν τα χαρακτηριστικά του λογισμικού, για να διαπιστώσουν
1) την πρόοδο του έργου, 2) εάν ικανοποιούνται πλήρως οι απαιτήσεις των
πελατών και 3) για να εξακριβώσουν εάν ο σχεδιασμός είναι σωστός.
 Διευθυντές: συμβουλεύονται τις μετρήσεις, για να διαπιστώσουν την πορεία του
έργου σε σχέση με τα χρονοδιαγράμματα και τους καθορισμένους προϋπολογισμούς.
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
5
Μετρήσεις - Μετρικές
:: Τι είναι μέτρηση (2/2)

“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]

Για την παρακολούθηση, διαχείριση, ποιοτική μελέτη και βελτίωση
οποιουδήποτε τεχνικού έργου είναι απαραίτητη η έννοια της
μέτρησης.

Η εξαγωγή μέτρων είναι υποκειμενική, π.χ. αξιολόγηση της
ικανοποίησης του πελάτη, της πολυπλοκότητας του λογισμικού, κλπ.
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
6
Μετρήσεις - Μετρικές
:: Μετρικές Λογισμικού (1/5)
Μετρική (metric) είναι μια εμπειρική αντικειμενική αντιστοίχηση ενός αριθμού
ή συμβόλου σε μια οντότητα με στόχο να χαρακτηρίσει ένα συγκεκριμένο
χαρακτηριστικό της [Norman Fenton].

Μέτρο: ποσοτική ένδειξη αριθμού, διαστάσεων, χωρητικότητας, όγκου κτλ.
προϊόντος ή διαδικασίας.

Μέτρηση: Διαδικασία υπολογισμού μέτρου/ων.

Μετρική: ποσοτική εκτίμηση του βαθμού κατά τον οποίο ένα σύστημα κατέχει
ένα χαρακτηριστικό.
Αριθμός λαθών σε ένα πρόγραμμα = Μέτρο
Συλλογή και καταμέτρηση λαθών = Μέτρηση
Συσχετισμός λαθών με κάποιο χαρακτηριστικό, π.χ. ποιότητα (πάνω από
100 λάθη => κακή ποιότητα, κάτω από 10 λάθη => καλή ποιότητα) = Μετρική
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
7
Μετρήσεις - Μετρικές
:: Μετρικές Λογισμικού (2/5)
Μια μετρική είναι καλή όταν η αριθμητική της τιμή χαρακτηρίζει
με ακρίβεια την συγκεκριμένη ιδιότητα του αντικειμένου [Fenton].
Μια ιδανική μετρική θα πρέπει να είναι:
 Απλή και υπολογίσιμη
 Εμπειρικά και διαισθητικά πειστική
 Συνεπής και αντικειμενική
 Συνεπής ως προς τη χρήση ποσοτικών μονάδων
 Ανεξάρτητη από γλώσσες προγραμματισμού και
διαδικασίες ανάπτυξης
 Ελέγξιμη και ‘ανοικτή’ σε ουσιαστικούς μηχανισμούς ανάδρασης
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
8
Μετρήσεις - Μετρικές
:: Μετρικές Λογισμικού (3/5)
Μια ιδανική μέτρηση θα πρέπει να περιλαμβάνει τις δραστηριότητες:





Διατύπωση (καθορισμός μετρικών)
Συλλογή (συγκέντρωση δεδομένων)
Ανάλυση (υπολογισμός μετρικών)
Ερμηνεία (αξιολόγηση μετρικών)
Ανάδραση (συστάσεις για βελτίωση)
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
9
Μετρήσεις - Μετρικές
:: Μετρικές Λογισμικού (4/5)
Αρχές Διατύπωσης Μετρικών
 Καθορισμός στόχων των μετρήσεων πριν τη συλλογή των δεδομένων
 Ακριβής ορισμός των μετρικών
 Χρήση μετρικών προσαρμοσμένων στα προϊόντα και τις διαδικασίες
Αρχές Συλλογής και Ανάλυσης Μετρικών
 Αυτοματοποίηση στη συλλογή και ανάλυση των μετρικών (όπου είναι δυνατή)
 Χρήση αξιόπιστων στατιστικών τεχνικών για διερεύνηση εσωτερικών
και εξωτερικών χαρακτηριστικών
 Καθορισμός συγκεκριμένων κανόνων ερμηνείας των μετρικών
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
10
Μετρήσεις - Μετρικές
:: Μετρικές Λογισμικού (5/5)
Οι μετρικές διακρίνονται σε:
 μετρικές προϊόντος (product metrics)
 μετρικές διαδικασίας (process metrics)
 μετρικές έργου (project metrics)
Οι μετρικές προϊόντος χωρίζονται στις:
 Εσωτερικές: π.χ. αριθμός γραμμών (LOC), χρόνος εκτέλεσης, λάθη του κώδικα
 Εξωτερικές: π.χ. λειτουργικότητα (functionality), ποιότητα (quality),
πολυπλοκότητα (complexity), αποτελεσματικότητα (efficiency), αξιοπιστία
(reliability), συντηρησιμότητα (maintainability).
Μετρικές διαδικασίας: μετρούν τη διαδικασία κατασκευής ενός προϊόντος, για
παράδειγμα το σχεδιασμό, τη συγγραφή κώδικα, τους απαιτούμενους πόρους.
Μετρικές έργου: χρησιμοποιούνται για τον καθορισμό στρατηγικής, σχετίζονται
με την τακτική εκτέλεσης του έργου και καθορίζουν τη ροή του και τις τεχνικές
που θα ακολουθηθούν.
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
11
Μετρήσεις - Μετρικές
:: Αντικειμενοστρεφεις Μετρικές
Βασικές κατηγορίες αντικειμενοστρεφών μετρικών:





Πολυπλοκότητας
Κληρονομικότητας
Μεγέθους
Σύζευξης
Συνοχής
Οι Chidamber & Kemerer (1991) πρότειναν την πρώτη σουίτα
αντικειμενοστρεφών μετρικών. Στη συνέχεια προέκυψαν αρκετές
παραλλαγές.
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
12
Μετρήσεις - Μετρικές
:: Πολυπλοκότητα (1/2)

Το πλήθος και η πολυπλοκότητα των μεθόδων μιας κλάσης, είναι
ενδεικτικά του πόσος χρόνος και προσπάθεια χρειάζεται για την
ανάπτυξη και την συντήρηση της.

Όταν το πλήθος των μεθόδων μιας κλάσης είναι μεγάλο, τότε είναι
μεγάλη και η εξάρτηση των υποκλάσεων της από αυτήν.

Μεγάλο πλήθος μεθόδων σημαίνει μειωμένη επαναχρησιμοποίηση.
Ωστόσο υπάρχουν εφαρμογές που απαιτούν μεγάλο πλήθος μεθόδων.
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
13
Μετρήσεις - Μετρικές
:: Πολυπλοκότητα (2/2)
Τρεις μετρικές πολυπλοκότητας:

Cyclomatic Complexity (CC), κυκλωματική πολυπλοκότητα
(πολυπλοκότητα μεθόδου)

Weighted Method per Class 1 (WMPC1), πολυπλοκότητα κλάσης

Weighted Method per Class 2 (WMPC2), πολυπλοκότητα κλάσης
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
14
Cyclomatic Complexity
:: Κυκλωματική Πολυπλοκότητα (1/6)
Η ‘Κυκλωματική Πολυπλοκότητα’ προτάθηκε από τον McCabe το 1976.
Μετρά τον αριθμό των πιθανών μονοπατιών μέσα στον αλγόριθμο μιας μονάδας
λογισμικού (π.χ. μεθόδου), ελέγχοντας τις διακριτές περιοχές του γράφου ροής
(flow graph), δηλαδή τον αριθμό των if, switch, for, while (και do..while)
εντολών στο σώμα της μεθόδου.
Ο τύπος υπολογισμού:
Cyclomatic Complexity : CC = E - N + 2P
όπου :
• E, είναι ο αριθμός των ακμών γράφου
• N, είναι ο αριθμός των κόμβων γράφου
(δεν θα πρέπει να ξεπερνά το 10)
• P, είναι ο αριθμός των συνδεδεμένων τμημάτων ή συνεκτικών συνιστωσών.
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
15
Cyclomatic Complexity
:: Κυκλωματική Πολυπλοκότητα (2/6)
Ένας πρακτικός οδηγός μέτρησης χωρίς τους γράφους:
Βήματα:
Κατηγορία
Μεθόδους
Επιλογές
Επαναλήψεις
Τελεστές
Εξαιρέσεις
Προσθήκη μονάδας για καθένα από:
Κάθε return (όχι τελευταία εντολή της μεθόδου)
if, else, case, default
for, while, do-while, break, και continue
&&, ||, ?, and :
catch, finally, throw, ή throws clause
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
16
Cyclomatic Complexity
:: Κυκλωματική Πολυπλοκότητα (3/6)
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!"); } } }
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
17
Cyclomatic Complexity
:: Κυκλωματική Πολυπλοκότητα (4/6)
Οι τέσσερις περιπτώσεις οι οποίες συναντιόνται συχνότερα στο γράφο ροής είναι:
Ακολουθιακές
εντολές
Εντολές
Επανάληψη Επανάληψη
Διακλάδωσης με έξοδο
με έξοδο
(if -else )
στην αρχή
στο τέλος
(while)
(do..while)
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
18
Cyclomatic Complexity
:: Κυκλωματική Πολυπλοκότητα (5/6)
Δύο ξεχωριστές απεικονίσεις if-else:
Αριστερή απεικόνιση: H συνθήκη ικανοποιείται (επίσκεψη στον κόμβο 3).
Δεξιά απεικόνιση: H συνθήκη δεν ικανοποιείται (επίσκεψη στον κόμβο 4).
Η CC = 2 και στις δύο περιπτώσεις
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
19
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
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
20
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
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
21
WMPC1 - Weighted Methods Per Class 1
:: Σταθμισμένες Μέθοδοι ανά Κλάση - 1 (2/3)
 Μετρά το ποσό της πολυπλοκότητας όλων των μεθόδων σε μια κλάση, όπου
κάθε μέθοδος σταθμίζεται από την κυκλωματική πολυπλοκότητά της.
 Η πολυπλοκότητα των μεθόδων μετριέται με χρήση της Κυκλωματικής
Πολυπλοκότητας (CC).
 WMPC1 μιας κλάσης ορίζεται ο μέσος όρος ή το άθροισμα των CC
όλων των μεθόδων της.
 Στη διαδικασία της μέτρησης δεν συμπεριλαμβάνονται μέθοδοι που
κληρονομούνται από υπερκλάσεις.
 Η τιμή της μετρικής για τις μεθόδους δεν πρέπει να υπερβαίνει το 10 ενώ για
τις κλάσεις το 30. Για να μειωθούν οι τιμές πρέπει να σπάμε τις μεθόδους και
τις κλάσεις.
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
22
WMPC1 - Weighted Methods Per Class 2
:: Σταθμισμένες Μέθοδοι ανά Κλάση - 2 (3/3)
 Η μετρική αυτή βασίζεται στην υπόθεση ότι μια κλάση με περισσότερες
μεθόδους από μία άλλη είναι πιο σύνθετη.
 Επιπλέον, θεωρεί ότι μια μέθοδος με περισσότερες παραμέτρους από μια άλλη
είναι και πιο σύνθετη.
 Η μετρική αθροίζει τις μεθόδους και τις παραμέτρους των μεθόδων μιας
κλάσης. Αποφεύγονται οι κλάσεις με τιμή μετρικής άνω του 100.
 Στη διαδικασία δεν περιλαμβάνονται μέθοδοι που κληρονομούνται από
υπερκλάσεις.
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
23
Μετρικές Κληρονομικότητας
Δύο μετρικές κληρονομικότητας:
 Depth of Inheritance Tree (DIT)
 Number of Child Classes (NOCC)
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
24
Depth of Inheritance Tree (DIT)
 Η κληρονομικότητα είναι σημαντική έννοια και πρέπει να την χειριζόμαστε
προσεκτικά.
 Όσο βαθύτερα είναι μια κλάση στο κληρονομικό δένδρο, τόσο δυσκολότερα
την αναπτύσσουμε, ελέγχουμε και συντηρούμε. Επομένως , πρέπει να
γνωρίζουμε και να υπολογίζουμε αυτό το βάθος.
 Η μετρική αυτή παρέχει την θέση της κλάσης
στην ιεραρχία. Η Java δεν υποστηρίζει την
πολλαπλή κληρονομικότητα.
Στο παράδειγμα:
DIT (C0) = 0
DIT (C0’) = 0
DIT (C1) = 1
DIT (C2) = 2
DIT (C3) = 3
DIT (C4) = 4
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
25
Number of Child Classes (NOCC) - 1/2
 Μετράει τον αριθμό των κλάσεων που κληρονομούν την υπό εξέταση
κλάση.
 Μη μηδενική τιμή της μετρικής συνιστά ότι η συγκεκριμένη κλάση
επαναχρησιμοποιείται.
 Παρόλα αυτά, η αφαίρεση της κλάσης μπορεί να είναι φτωχή αν υπάρχουν
πάρα πολλές υποκλάσεις - παιδιά.
 Επιπλέον, υψηλές τιμές της μετρικής δείχνουν ότι θα χρειαστεί αυξημένος
αριθμός ελέγχων για κάθε κλάση – παιδί
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
26
Number of Child Classes (NOCC) - 2/2
Στο παράδειγμα:
NOCC (interface) = 7
NOCC (EventSupport) = 6
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
27
Μετρικές μεγέθους κώδικα
Δύο μετρικές μεγέθους:
Lines of Code (LOC): Μετρά τον αριθμό των γραμμών κώδικα.
Σχόλια και κενές γραμμές δεν υπολογίζονται.
Number of Classes (NOC): Μετρά τον αριθμό των κλάσεων του
συστήματος. Υπολογίζεται μόνο σε επίπεδο πακέτου ή συστήματος.
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
28
Coupling
:: Μετρικές Σύζευξης (1/2)
 Αυξημένα επίπεδα σύζευξης: είναι ανεπιθύμητα σε συστήματα με πολλές
υπό-μονάδες. Τροχοπέδη στην επαναχρησιμοποίηση.
 Όσο πιο ανεξάρτητο είναι ένα αντικείμενο τόσο πιο εύκολα επαναχρησιμοποιείται.
 Όσο πιο αυξημένη είναι η σύζευξη μεταξύ των αντικειμένων ενός συστήματος,
τόσο πιο ευαίσθητο είναι σε αλλαγές σε διάφορα μέρη του σχεδίου.
Δυσκολότερη συντήρηση.
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
29
Coupling
:: Μετρικές Σύζευξης (2/2)
Τέσσερις μετρικές σύζευξης:
 Coupling Factor (CF) - Παράγοντας Σύζευξης: σύζευξη σε επίπεδο
συστήματος.
 Coupling Between Objects (CBO) - Σύζευξη μεταξύ Αντικειμένων Κλάσεων:
σύζευξη σε επίπεδο κλάσης.
 Fan Out (FO) - σύζευξη σε επίπεδο κλάσης.
 Fan In (FI) - σύζευξη σε επίπεδο κλάσης.
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
30
Coupling Factor (CF)
:: Παράγοντας Σύζευξης
 Υπολογίζεται μόνο σε επίπεδο συστήματος.
 Υπολογίζεται ως κλάσμα.
 Ο αριθμητής αντιπροσωπεύει τον αριθμό μη-κληρονομικών συζεύξεων.
 Ο παρονομαστής είναι ο μέγιστος πιθανός αριθμός συζεύξεων σε ένα σύστημα.
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
31
Coupling Between Objects (CBO)
:: Σύζευξη μεταξύ Αντικειμένων Κλάσεων
 Μετράει τον αριθμό των κλάσεων με τις οποίες συνδέεται μια κλάση.
 Με τον όρο η κλάση Α συνδέεται με την κλάση Β εννοούμε: Δήλωση μιας
ιδιότητας τύπου Β, στην κλάση Α επιστροφή τύπου Β, σε μια μέθοδο της
κλάσης Α. Η κλάση Β κληρονομεί την Α.
Διαφορά με CF:
Συμπεριφορά ως προς κληρονομικότητα: Στην CF αμφίδρομες κλήσεις μετράνε
ως 2, ενώ στην CBO ως 1.
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
32
Fan Out – Fan In
 Κάθε συσχέτιση για τον υπολογισμό της CBO μπορεί να θεωρηθεί είτε ότι
“φεύγει” σε μία κλάση είτε ότι “έρχεται” από μια κλάση.
 Ο αριθμός των ακμών που φεύγουν από μια κλάση ονομάζεται Fan-Out
(outputs). Υποδηλώνει τον αριθμό των συναρτήσεων που καλεί η εξεταζόμενη
συνάρτηση (δεν πρέπει η τιμή της μετρικής να είναι άνω του 15).
 Ο αριθμός των ακμών που καταλήγουν σε μια κλάση ονομάζεται Fan-In
(inputs). Υποδηλώνει τον αριθμό των συναρτήσεων που καλούν την
εξεταζόμενη συνάρτηση.
 Μεγάλο Fan-Out = > Η κλάση δεν είναι αυτάρκης
 Μεγάλο Fan-In => Η κλάση παρέχει μεγάλη λειτουργικότητα
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
FI=2, FO=3
33
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)
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
34
Lack of Cohesion of Methods 1 (1/2)
:: Έλλειψη συνεκτικότητας μεταξύ των Μεθόδων - 1
 Παίρνουμε κάθε ζευγάρι μεθόδων σε μια κλάση. Αν μοιράζονται ασύνδετα σύνολα
μεταβλητών αυξάνουμε το P κατά 1 (καμία κοινή μεταβλητή). Αν μοιράζονται
τουλάχιστον μια μεταβλητή, τότε αυξάνουμε το Q κατά 1.
LCOM1 = P – Q (αν P > Q), διαφορετικά LCOM1 = 0
 LCOM1 = 0, σημαίνει συνεκτική κλάση.
 LCOM1 > 0, σημαίνει ότι η κλάση πρέπει να ‘σπάσει’ σε δύο ή περισσότερες κλάσεις,
καθότι οι μεταβλητές τους ανήκουν σε διαφορετικά σύνολα.
Η γενική μορφή της μετρικής:
P  {I i , I j  | I i  I j  
Q  {I i , I j  | I i  I j  
LCOM 
PQ
if P  Q
0
otherwise
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
35
Lack of Cohesion of Methods 1 (2/2)
:: Έλλειψη συνεκτικότητας μεταξύ των Μεθόδων - 1
Κριτική για την LCOM1:
 Δίνει τιμή 0 για πολύ διαφορετικές κλάσεις.
 O Gupta ισχυρίζεται ότι η LCOM1 δεν είναι η κατάλληλη μετρική για να υπολογίσει την
συνεκτικότητα μιας κλάσης και αυτό γιατί βασίζεται στην αλληλεπίδραση των δεδομένων
της μεθόδου (μη σωστός τρόπος για τον ορισμό της συνεκτικότητας). Πολύ διαφορετικές
κλάσεις μπορεί να έχουν ίδιο LCOM1.
 Για κλάσεις που ορίζουν και προσπελούν τα εσωτερικά τους δεδομένα μέσω sets και gets
και όχι μέσω read/write εντολές μπορεί να δείξουν υψηλό LCOM1.
 Για να λυθούν αυτά τα πρόβλημα προτάθηκαν η LCOM2 και LCOM3.
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
36
Lack of Cohesion of Methods 2
:: Έλλειψη συνεκτικότητας μεταξύ των Μεθόδων - 2
H LCOM2 ισούται με το ποσοστό των μεθόδων που δεν προσπελούν κάποιο
χαρακτηριστικό της κλάσης σε σχέση με όλα τα χαρακτηριστικά της κλάσης (εξάγοντας
το μέσο όρο όλων των χαρακτηριστικών στην κλάση).
Ορισμός της LCOM2:
LCOM2 = 1 - sum(mA)/(m*a)
Όπου:
m
a
mA
sum(mA)
αρ. των μεθόδων της κλάσης
αρ. των χαρακτ./μεταβλητών της κλάσης
αρ. των μεθόδων που έχουν πρόσβαση σε ένα χαρακτ./μεταβλητή
άθροισμα όλων των mA στο σύνολο των χαρακτ./μεταβλητών της
κλάσης
 Αν ο αρ. των μεθόδων ή χαρακτ./μεταβλητών έχουν τιμή 0, τότε η LCOM2 ορίζεται σαν
απροσδιόριστη και λαμβάνει τιμή 0.
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
37
Lack of Cohesion of Methods 3
:: Έλλειψη συνεκτικότητας μεταξύ των Μεθόδων - 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 στο σύνολο των χαρακτ./μεταβλητών της
κλάσης
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
38