Τεχνολογία λογισμικού ΜΕΤΡΙΚΕΣ ΠΟΙΟΤΗΤΑΣ ΛΟΓΙΣΜΙΚΟΥ (SOFTWARE QUALITY METRICS) Βασικές έννοιες Μετρική (metric) Εμπειρικός – αντικειμενικός χαρακτηρισμός συγκεκριμένου χαρακτηριστικού γνωρίσματος / ιδιότητας μίας οντότητας για την περιγραφή της με βάση καθορισμένους κανόνες μέσω αντιστοίχησης (μέτρησης – measurement) σ’ αυτή ενός αριθμού ή συμβόλου. Μετρική (metric) χαρακτηρισμός απλών ιδιοτήτων λογισμικού (μήκος γραμμών κώδικα, κυκλωματική πολυπλοκότητα) συσχετισμός ιδιοτήτων και χαρακτηρισμός πολύπλοκων ιδιοτήτων (κόστος, πολυπλοκότητα τμήματος κώδικα) Μέτρο (measure) Τεχνολογία λογισμικού Δυνατότητα καθορισμού μετρήσιμων μεγεθών κατά τη σχεδίαση / ανάπτυξη έργων Πρώτη εμφάνιση μετρικών λογισμικού: τέλος ’70 (Halstead – 75, McCabe – 76)
ΜΕΤΡΙΚΕΣ ΠΟΙΟΤΗΤΑΣ ΛΟΓΙΣΜΙΚΟΥ Κατηγοριοποίηση κριτήριο είδος μετρήσιμου χαρακτηριστικού / ιδιότητας συσχετιζόμενος στόχος συστήματος ποιότητας Εσωτερικές (Internal) Διαδικασίας (process) Μέτρηση εσωτερικών χαρακτηριστικών (γραμμές / πλήθος σχολίων κώδικα, αριθμός εντολών goto σε συνάρτηση κλπ.) που μετρώνται εύκολα αλλά δεν παρέχουν πληροφόρηση σχετικά με την ποιότητα του λογισμικού (στόχος συστήματος ποιότητας) Μέτρηση χαρακτηριστικών διαδικασίας είτε άμεσα (με εσωτερικές μετρικές) είτε έμμεσα (εξωτερικά χαρακτηριστικά). Άμεσα μετρήσιμα: διάρκεια / ανθρωπομήνες ολοκλήρωσης διαδικασίας, εντοπισμένα λάθη ανά ώρα ελέγχου μονάδας, πλήθος συνεντεύξεων με πελάτη για καθορισμό προδιαγραφών κλπ. Έμμεσα μετρήσιμα: σταθερότητα διαδικασίας, δυνατότητα παρακολούθησής της από υπεύθυνο έργου κλπ. Εξωτερικές (External) ή Ποιότητας (quality) Πόρων (resource) Προϊόντος (product) Μέτρηση εξωτερικών χαρακτηριστικών (ευχρηστία, αξιοπιστία κλπ.), υψηλού επιπέδου αφαίρεσης, σχετιζόμενων με την ποιότητα. Δύσκολα μετρώνται άμεσα. Τα αποτελέσματά τους προκύπτουν εμπειρικά (ερωτηματολόγια, συνεντεύξεις πελατών κλπ.) Μέτρηση μεθόδων ανάπτυξης, υλικού (αναλώσιμα, εξοπλισμός), εργαλείων (HW / SW) που χρησιμοποιήθηκαν. Κατά κανόνα μετρούν άμεσα εσωτερικά χαρακτηριστικά. Μέτρηση χαρακτηριστικών λογισμικού που σχετίζονται με τον πελάτη.
ΜΕΤΡΙΚΕΣ ΠΟΙΟΤΗΤΑΣ ΛΟΓΙΣΜΙΚΟΥ Εσωτερικές μετρικές Πληροφορούν για χαρακτηριστικά σαφώς προσδιορισμένα που μετρώνται με σαφώς προκαθορισμένο τρόπο (ο οποίος περιλαμβάνεται στο εγχειρίδιο ποιότητας της εταιρίας). Παράδειγμα σύμβασης προκαθορισμού: στη μέτρηση γραμμών κώδικα (LOC) στη γλώσσα C, δεν προσμετρούμε (στο πλήθος τους) κενές γραμμές, γραμμές σχολίων ή γραμμές που καλύπτονται μόνο από αγκύλες. /* ……………….*/ main ( ) { ……….. ……….... } Σύνολο γραμμών κώδικα 9 LOC 4 Δεν προσμετρώνται Ανεξάρτητα από το ποιος διενεργεί τη μέτρηση, αυτή πρέπει πάντοτε να παράγει το ίδιο αποτέλεσμα.
ΜΕΤΡΙΚΕΣ ΠΟΙΟΤΗΤΑΣ ΛΟΓΙΣΜΙΚΟΥ Είναι σημαντικές όταν μπορούν να «συνδέονται» (αφού αναλυθούν κατάλληλα και συνεκτιμηθούν με ιστορικά δεδομένα) με εξωτερικά ποιοτικά χαρακτηριστικά του λογισμικού. π.χ. η «σύνδεση» της LOC με πλήθος / είδος λαθών που εντόπισε ο πελάτης παράγει μία αναλογία λάθη πελάτη / KLOC που μπορεί να αξιοποιηθεί για να ορισθεί το ιδανικό μέγεθος (πλήθος γραμμών) κάθε τμήματος κώδικα. Εσωτερικές μετρικές Παράδειγμα διαχείρισης / ανάλυσης εσωτερικής μετρικής LOC σε 5 τμήματα κώδικα A/A τμήματος LOC τμήματος Λάθη τμήματος (πελάτης) Λάθη τμήματος / KLOC 1 145 0,00 2 765 5 6,54 3 504 5,95 4 907 7 7,72 1145 9 7,86 Ζητούμενα μέσο ποσοστό λαθών / KLOC στο συνολικό κώδικα. γραφική αναπαράσταση μεταβολής του Συνολικό LOC 3466 Συνολικά λάθη 24 Μέσο ποσοστό λαθών / KLOC 24/3466*1000 = 6,92 λάθη / KLOC 200 400 600 800 1000 1200 LOC Λάθη / KLOC 0,00 1,00 2,00 3,00 4,00 5,00 6,00 7,00 8,00 Συμπέρασμα Τμήματα με LOC μέχρι 900 έχουν λάθη / KLOC λιγότερα από το μέσο όρο. Τμήματα με LOC πάνω από 900 έχουν λάθη / KLOC περισσότερα από το μέσο όρο Γράφημα διασποράς
ΜΕΤΡΙΚΕΣ ΠΟΙΟΤΗΤΑΣ ΛΟΓΙΣΜΙΚΟΥ Κυκλωματική πολυπλοκότητα (cyclomatic complexity) Εσωτερικές μετρικές Γράφος ροής (flow graph) Από τις πιο διαδεδομένες μετρικές. Ενταγμένη στα προγράμματα μετρήσεων πολλών εταιριών. Μετρική ανεξάρτητη από τη χρησιμοποιούμενη γλώσσα προγραμματισμού. Έχουν προταθεί διάφορες εκδόσεις της. Στόχος: εντοπισμός δύσκολα κατανοήσιμων, ελέγξιμων και συντηρήσιμων τμημάτων του κώδικα. Βασικό εργαλείο: γράφος ροής του εξεταζόμενου κώδικα. Εργαλείο αναπαράστασης των δυνατών διαδρομών (μονοπατιών) που μπορεί να ακολουθήσει η εκτέλεση ενός προγράμματος επιλέγοντας σε κάθε εκτέλεση (μέσα από τις διαθέσιμες δυνατότητες επιλογής) διαφορετική διαδρομή. Βασικές δομές γράφου ροής Ακολουθιακή Σειριακή εκτέλεση εντολών χωρίς δυνατότητα επιλογής διαφορετικής διαδρομής εκτέλεσης. Διακλάδωσης Δρομολογούν δύο διαδρομές επιλογής καθεμία από τις οποίες καταλήγει σε κοινό σημείο του κώδικα (εκκίνηση επόμενης εντολής) Κύκλου με έξοδο στην αρχή Δομή επανάληψης τύπου “while /do” Κύκλου με έξοδο στo τέλος Δομή επανάληψης τύπου “do / while”
ΜΕΤΡΙΚΕΣ ΠΟΙΟΤΗΤΑΣ ΛΟΓΙΣΜΙΚΟΥ Εσωτερικές μετρικές Βασική ιδιότητα γράφου ροής Ένας γράφος ροής διαθέτει μία μόνο είσοδο και μία μόνο έξοδο. Κόμβος από τον οποίο μπορούμε να επισκεφθούμε όλους τους υπόλοιπους κόμβους του γράφου. Από οποιονδήποτε κόμβο του γράφου υπάρχει διαδρομή που να οδηγεί σ’ αυτόν. G3 G4 Παραδείγματα G2 G1 G1 (δύο είσοδοι, δύο έξοδοι) Γράφοι ροής G4 Μη Γράφοι ροής G2 (καμία έξοδος) G3 (δύο έξοδοι)
ΜΕΤΡΙΚΕΣ ΠΟΙΟΤΗΤΑΣ ΛΟΓΙΣΜΙΚΟΥ Εσωτερικές μετρικές Ισχυρά συνεκτικοί γράφοι c b a d G1 Γράφοι στους οποίους οποιοσδήποτε κόμβος επικοινωνεί με οποιονδήποτε άλλο μέσω μιας διαδρομής. Ισχυρά συνεκτικός γράφος Κυκλωματικός αριθμός ισχυρά συνεκτικού γράφου με α ακμές και κ κόμβους Παραδείγματα ισχυρά συνεκτικών γράφων α – κ + 1 G2 a b f c d e Παράδειγμα Ο κυκλωματικός αριθμός του G1 ισούται με 5 – 4 + 1 = 2 Μη Ισχυρά συνεκτικός γράφος (δεν υπάρχει διαδρομή από f προς a.
ΜΕΤΡΙΚΕΣ ΠΟΙΟΤΗΤΑΣ ΛΟΓΙΣΜΙΚΟΥ Εσωτερικές μετρικές Οι γράφοι ροής δεν είμαι ισχυρά συνεκτικοί γράφοι. 1ος τρόπος υπολογισμού Ο αριθμός Mc Cabe ενός γράφου ροής G αντιστοιχεί στον κυκλωματικό αριθμό ενός ισχυρά συνεκτικού γράφου G’ ο οποίος κατασκευάζεται προσθέτοντας στον G μία ακμή από την έξοδο προς την είσοδο. Αριθμός Mac Cabe V(G) Ορισμός κυκλωματικής πολυπλοκότητας για ένα γράφο ροής G Ο G’ καθίσταται έτσι ισχυρά συνεκτικός γράφος. a b c e f d Μοναδική είσοδος Μοναδική έξοδος Ακμή που προστίθεται για να γίνει ο γράφος ροής G ισχυρά συνεκτικός G Λόγω της προσθήκης μιας επιπλέον ακμής, o κυκλωματικός αριθμός του G’ είναι κατά 1 μεγαλύτερος από τον κυκλωματικό αριθμό του G. Παράδειγμα V(G) = (a – k + 1) + 1 = (9 – 6 + 1) + 1 = 5
ΜΕΤΡΙΚΕΣ ΠΟΙΟΤΗΤΑΣ ΛΟΓΙΣΜΙΚΟΥ Προτείνονται τμήματα κώδικα με V(G) ≤ 10 Αριθμός Mac Cabe V(G) Εσωτερικές μετρικές 2ος τρόπος υπολογισμού Ο αριθμός Mc Cabe ενός γράφου ροής G ισούται με το άθροισμα των πλεονασμάτων σε ακμές απ’ όλους τους κόμβους απόφασης (if, while /do, do / while repeat) του G, αυξημένο κατά 1. a b c e f d Μοναδική είσοδος Μοναδική έξοδος G Για έναν κόμβο απόφασης Α Ισούται με το πλήθος των εξερχόμενων ακμών από τον κόμβο d+(Α) μειωμένο κατά 1 Κόμβοι με πλήθος εξερχόμενων ακμών μεγαλύτερο του 1 Παράδειγμα Στον γράφο G έχουμε: V(G) = (1 + 2 + 1) + 1 = 5 Παράδειγμα Στον γράφο G οι κόμβοι απόφασης είναι b, c, e Ισοδύναμος ορισμός Mac Cabe Ο αριθμός Mc Cabe ενός προγράμματος ισούται με το πλήθος των απλών συνθηκών που εμφανίζονται μέσα σ’ αυτό, αυξημένο κατά 1. Προτείνονται τμήματα κώδικα με V(G) ≤ 10