Ορισμένες από
τις πιο γνωστές τεχνικές για την μέτρηση του πηγαίου κώδικα είναι:
- AML (Average Module Length): Ένα συγκεκριμένο λογισμικό, μπορεί να είναι δύσκολο να κατανοηθεί λόγω του τρόπου που είναι γραμμένο. Κατά την συντήρηση είναι πιθανό να δημιουργηθούν νέα λάθη σε λογισμικά που είναι γραμμένα με τρόπο δυσκολονόητο. Μια από τις μετρήσεις που καταγράφει την πολυπλοκότητα των λογισμικών είναι και η AML, η οποία μετρά το μέσο μέγεθος των υποπρογραμμάτων ενός συστήματος λογισμικού (Boehm B., Brown J., Kaspar J.; 1978). Ως τμήματα υποπρογραμμάτων (modules) ορίζονται τα τμήματα εκείνα του πηγαίου κώδικα που θεωρούνται ανεξάρτητα και εκτελούν εργασία που δε σχετίζεται με το περιβάλλον του (Banker R., Datar S., Kemerer C., Zweig D.;2002)
- BAM (Binding Among Modules): Ο δείκτης αυτός προσπαθεί να διαπιστώσει τον βαθμό εξάρτησης σε επίπεδο ανταλλαγής δεδομένων που υπάρχει μεταξύ των διάφορων υποσυστημάτων του λογισμικού (Banker R., Datar S., Kemerer C., Zweig D.;1991).
- CCN (Cyclomatic Complexity Number): Ο δείκτης CCN χρησιμοποιείται για να δείξει την πολυπλοκότητα ενός λογισμικού. Μετρά τον αριθμό των ανεξάρτητων διαδρομών ενός προγράμματος χρησιμοποιώντας το γράφημα ελέγχου ροής του προγράμματος και τις δομές ελέγχου του (Basili V., Turner A.; 1975).
Η πολυπλοκότητα ορίζεται μαθηματικά ως CCN = E –
N + 2P
Όπου Ε = το πλήθος των ακμών του γράφου, Ν = το πλήθος των κόμβων του
γράφου και P = το πλήθος των κόμβων εξόχου. Έτσι για το παραπάνω γράφημα έχουμε Ε=9, Ν=8, Ρ=1 και
άρα CNN = 9 – 8 + ( 2 *
1 ) = 3
- CDF (Control flow complexity and Data Flow complexity): Είναι ένας συνδυαστικός δείκτης (Oviedo E.;1980), ο οποίος συνυπολογίζει την πολυπλοκότητα ενός προγράμματος ως το γινόμενο της πολυπλοκότητας της ροής ελέγχου επί της πολυπλοκότητα της ροής δεδομένων.
- COC (Conditions and Operations Count): Ο δείκτης αυτός επιδιώκει να μετρήσει τη πολυπλοκότητα ενός λογισμικού βασισμένος στην ιδέα ότι ο αριθμός των πιθανών μονοπατιών τα οποία μπορεί να διαπεραστούν κατά την διάρκεια εκτέλεσης του κώδικα ενός λογισμικού, είναι ένα τέτοιο κριτήριο (Gill G., Kemere C.; 1990). Δεδομένου ότι ο αριθμός των μονοπατιών σε ένα πρόγραμμα λαμβάνοντας υπόψη και τις δομές επανάληψης μπορεί να είναι άπειρος, προτάθηκε ότι αξιόπιστος δείκτης μέτρησης της πολυπλοκότητας μπορεί να αποτελέσει ο αριθμός των ανεξάρτητων μονοπατιών (Hansen W.;1978).
- COP (Complexity Pair): Σύμφωνα με τον Mayers G. (1977), στη μετρική COC (Conditions and Operations Count) οι δομές ελέγχου και επανάληψης που χρησιμοποιούνται μπορεί να δώσουν λανθασμένες ενδείξεις όταν δεν λαμβάνεται υπόψη και η λογική δομή (logic structure) των ελέγχων αυτών. Έτσι για τον υπολογισμό του δείκτη αυτού και ανάλογα με την ποιότητα του εισαγάγει βαρύτητες.
- COR (Coupling Relation): Η σύζευξη (Coupling) αναφέρεται στον βαθμό αλληλεξάρτησης μεταξύ των συστατικών (components) ενός λογισμικού. Είναι στην πραγματικότητα ένα χαρακτηριστικό που αφορά την ανάπτυξη του κώδικα ενός λογισμικού και επηρεάζει σημαντικά την συντηρησημότητα, την ιχνηλασιμότητα και την ευρωστία του (Joshi P., Joshi R.;2006). Οι μετρήσεις που αφορούν την σύζευξη έχουν σχετιστεί με την ποιότητα του λογισμικού. Όσο μεγαλύτερα είναι τα επίπεδα αυτά τόσο χαμηλότερη θεωρείται η ποιότητα του (Chidamber S., Darcy D., Kemerer C.;1998).
- CRM (Cohesion Ratio Metrics): Η συνοχή (cohesion) είναι ένα επιθυμητό χαρακτηριστικό που αφορά μονάδες ή υποσυστήματα λογισμικού και αναφέρεται σε υφιστάμενες εξαρτήσεις μεταξύ τους. Μια μονάδα λογισμικού υψηλής συνοχής είναι δύσκολο να διαχωριστεί με επιμέρους συστατικά (components). Ο δείκτης υπολογίζεται ως το πηλίκο της λειτουργικής συνοχής προς τον συνολικό αριθμό των υποσυστημάτων (Bieman J., Ott L.;1994) & (Macro A., Buxton J.;1987) & (Yourdon E., Constantine L.;1979).
- CM (Chen Metric): Εξετάζει την εντροπία ενός προγράμματος. Οι Bianchi, A., Caivano, D., Lanubile, F., Visaggio, G. (2001) πρότειναν ότι το κακή ποιότητας λογισμικό μπορεί να μετρηθεί και επομένως να αναγνωριστεί μέσω της εντροπίας του. Ο σχετικός δείκτης απεικονίζει τα ελαττώματα που εμφανίζονται σε σχέση με τον χρόνο που απαιτείται για την συντήρηση του.
Βιβλιογραφία
- Boehm B., Brown J., Kaspar J.; (1978); Characteristics of Software Quality; New Work: Elsevier Science Ltd; 1st edition.
- Banker R., Datar S., Kemerer C., Zweig D.;(1991); “Software complexity metrics: An empirical study, working paper”; University of Minnesota.
- Basili V., Turner A.;(1975); “Iterative enhancement: a practical technique for software development”; IEEE Transactions on Software Engineering; SE-1, Volume 4; pp 390-396.
- Oviedo E.;(1980); “Control flow, data flow and program complexity”; Proceedings of the IEEE Computer Software and Applications Conference; pp 146-152.
- Gill G., Kemere C.; (1990); “Productivity Impacts of Software Complexity and Developer Experience”; MIT Sloan School; WP #3107-90; January 1990
- Hansen W.;(1978); “Measurement of program complexity by the pair (cyclomatic number, operation count)”; ACM SIGPLAN Notices 13; Volume 3; pp 29-33.
- Mayers G.;(1977); “An extension to the cyclomatic measure of program complexity”; ASM SIGPLAN Notices 12; Volume 10; pp 61-64
- Joshi P., Joshi R.;(2006); “Microscopic Coupling Metrics for Refactoring”; Proceedings of the Conference on Software Maintenance and Reengineering CSMR 2006; 22-24 March 2006; pp.145–152.
- Chidamber S., Darcy D., Kemerer C.;(1998); “Managerial Use of Metrics for Object-Oriented Software: An exploratory analysis”; IEEE Transactions on Software Engineering; pp. 629–639.
- Bieman J., Ott L.;(1994); “Measuring functional cohesion”; IEEE Transactions on Software Engineering; SE-20; Volume 8; pp 254-259.
- Macro A., Buxton J.;(1987); The Craft of Software Engineering; Boston: Addison-Wesley.
- Yourdon E., Constantine L.;(1979); Structured Design; New Jersey: PTR Prentice Hall.
- Bianchi, A., Caivano, D., Lanubile, F., Visaggio, G.; (2001); “Evaluating Software Degradation through Entropy,” Dipartimento di Informatica - Universith di Bari, Italy
Δεν υπάρχουν σχόλια:
Δημοσίευση σχολίου