Εμφάνιση αναρτήσεων με ετικέτα Software Metrics. Εμφάνιση όλων των αναρτήσεων
Εμφάνιση αναρτήσεων με ετικέτα Software Metrics. Εμφάνιση όλων των αναρτήσεων

Software Metrics - Μετρήσεις αντικειμενοστραφούς πηγαίου κώδικα



  •  AMS (Average Method Size): Υπολογίζει το μέσο μήκος των μεθόδων ενός λογισμικού (Lorenz M., Kidd j.; 1994).
  • ΑNA (Number of Ancestors). Μετρά τον αριθμό των διακριτών κλάσεων που μια κλάση κληρονομεί. (Bansiya J., Davis C.; 2002).
  • ANP (Average Number of Parameters per Operation). Είναι ο αριθμός των παραμέτρων για μια μέθοδο (Lorenz M., Kidd j.; 1994).
  • AOS (Average Operation Size). Ο αριθμός των μηνυμάτων που στέλνεται σε μια μέθοδο σε μια συνεδρία (Lorenz M., Kidd j.; 1994).
  • CAM (Cohesion among Method of Class). Αποτιμά την συνοχή μιας κλάσης μελετώντας τις σχέσεις μεταξύ των μεθόδων της (Bansiya J., Davis C.; 2002).
  • CS (Class Size). Μετρά το μέγεθος μιας κλάσης, δηλαδή το συνολικό αριθμό των μεθόδων ή των χαρακτηριστικών της (Lorenz M., Kidd j.; 1994).
  • CC (Class Coupling). Καταμετρά τον αριθμό των κλάσεων που συνδέονται μεταξύ τους (Chidamber S., Kemerer C.; 1994).
  • DAM (Data Access Metric). Είναι ο λόγος των protected χαρακτηριστικών ως προς το σύνολο των χαρακτηριστικών (Bansiya J., Davis C.; 2002).
  • DCC (Direct Class Coupling). Μετρά το πλήθος των κλάσεων με τις οποίες μια κλάση είναι συσχετισμένη (Bansiya J., Davis C.; 2002).
  • DIT (Depth of the Inheritance Tree). Ορίζεται ως το μέγιστο μήκος από την ρίζα μιας κλάσης την ίδια την κλάση. Όσο μεγαλύτερο είναι το μήκος τόσο μεγαλύτερη είναι και η πολυπλοκότητα (Chidamber S., Kemerer C.; 1994).
  • DSC (Design Size in Classes). Μετρά τον συνολικό αριθμό των κλάσεων σε ένα λογισμικό (Bansiya J., Davis C.; 2002).
  • OC (Operation Complexity). Μετρά την πολυπλοκότητα μιας μεθόδου (Lorenz M., Kidd j.; 1994).
  • SSC (System Size in Classes). Μετρά το σύνολο των κλάσεων στο λογισμικό.
  • INP (Internal Privacy). Αναφέρεται στη χρήση συναρτήσεων που ενεργούν πάνω στα αντικείμενα (Xenos M., Stavrinoudis D, Zikouli K, Christodoulakis D.; 2000).
  • LCM (Lack of Cohesion in Methods). Η συνοχή μιας κλάσης εξαρτάται από τις συσχετίσεις των μεθόδων και των ιδιοτήτων της. Η μετρική αναζητεί το πλήθος των μη εξαρτημένων μεθόδων σε μια κλάση (Chidamber S., Kemerer C.; 1994).
  • LOP (Length of OO Program). Μετρά το μήκος του προγράμματος βασιζόμενη στον σύνολο των κλάσεων και των μεθόδων που αυτές διαθέτουν.
  • NIC (Number of Independent Classes). Μετρά τον αριθμό των κλάσεων που δεν ανήκουν σε καμία ιεραρχία και δε κληρονομούνται απλό καμία κλάση
  • NMI (Number of Multiple Inheritances). Μετρά τον αριθμό των κλάσεων που εμφανίζουν πολλαπλή κληρονομικότητα (Xenos M., Stavrinoudis D, Zikouli K, Christodoulakis D.; 2000).
  • NOC (Number of Children). Είναι ο αριθμός των υποκλάσεων από τις οποίες αποτελείται μια κλάση (Chidamber S., Kemerer C.; 1994).
  • NOH (Number of Hierarchies). Ο αριθμός των διακριτών ιεραρχιών στο λογισμικό (Bansiya J., Davis C.; 2002).
  • NOM (Number of Methods).  Μετρά τον αριθμό των μεθόδων ανά κλάση (Bansiya J., Davis C.; 2002).
  • NIM (Number of Inline Methods). Ο αριθμός των μεθόδων που ορίζονται σε μια κλάση.

Βιβλιογραφία

  1. Lorenz M., Kidd j.; (1994); Object Oriented Software Metrics; New Jersey: PTR Prentice Hall
  2. Bansiya J., Davis C.; (2002); “A Hierarchical Model for Object  Oriented Design Quality Assessment”; IEEE Transactions on Software engineering; Vol 28, Issue 1; January 2002.
  3. Chidamber S., Kemerer C.; (1994); “A Metric Suite for Object-Oriented Design”; IEEE Trans. Software Engineering; vol. 20; no 6; pp. 476-493
  4. Xenos M., Stavrinoudis D, Zikouli K, Christodoulakis D.; (2000); “Object Oriented Metrics – A Survey”; Proceedings of the FESMA 2000, Federation of European Software Measurement Associations, Madrid, Spain, 2000.

Software Metrics - Μετρήσεις πηγαίου κώδικα (II)



  • DC (Decision Count): Αποτιμά τη λογική δομή ενός προγράμματος (Rushby J.; 1988). Καθορίζεται από το πλήθος των δομών ελέγχου (υπό-συνθήκη δομές και ανακυκλώσεις).

  • DSI (Delivered Source Instructions): Ο δείκτης αναφέρεται στο πλήθος των εκτελέσιμων εντολών ενός λογισμικού (Boehm B.;19814. Μετρά τις διαφορετικές εντολές στην ίδια γραμμή ως διαφορετικές και αγνοεί τα σχόλια, τις δηλώσεις δεδομένων και τα headings.

  •  ECM (Essential Complexity Measure): Η βασική πολυπλοκότητα ενός τμήματος λογισμικού (module) υπολογίζεται αφού πρώτα αφαιρεθούν όλα τα πρωτογενή στοιχεία δομής του. Μετρά δηλαδή πόσο θα ‘μειωθεί’ o γράφος ροής, δηλαδή αν αποσυντεθεί σε στοιχειώδεις δομές (Watson A., McCabe T.; 1996).

  • EOR (Extent of Reuse): Μετρά το ποσοστό επαναχρησιμοποίησης κώδικα σε ένα υπάρχον πρόγραμμα. Ορίζονται τέσσερα διαφορετικά επίπεδα: reused verbatim (κώδικας που επαναχρησιμοποιήθηκε χωρίς καμία αλλαγή), slightly modified (λιγότερο από 25% κώδικα έχει αλλαχθεί), extensively modified (25% και περισσότερο των γραμμών του κώδικα έχει αλλαχθεί) και new (εντελώς νέος κώδικας). Με τον τρόπο αυτό, για ένα συγκεκριμένο πρόγραμμα ορίζεται το μέγεθος (size) που τροποποιήθηκε σε σχέση με το συνολικό και, επομένως, το ποσοστό επαναχρησιμοποίησης στα τέσσερα επίπεδα (Frakes W. Terry C.;1996).

  • ESM (Equivalent Size Measure): Μια καλή πρακτική κατά την ανάπτυξη λογισμικού είναι η επαναχρησιμοποίηση κώδικα. Έτσι για πολλούς το μέγεθος των προγραμμάτων έχει δύο συνιστώσες. Μια για πρόσφατο κώδικα και μια για κώδικα που υπήρχε και προσαρμόστηκε για να επαναχρησιμοποιηθεί. Οι συνιστώσες αυτές μπορεί να εκφραστούν με μετρήσεις σε γραμμές κώδικα (Boehm B.;1981).

  • FC (Function Count): Ορίζεται από τον αριθμό των συναρτήσεων (functions) ενός προγράμματος. Συνάρτηση θεωρείται μια συλλογή εκτελέσιμων εντολών που πραγματοποιούν μια συγκεκριμένη εργασία και οι δηλώσεις των παραμέτρων που διαχειρίζονται οι εντολές αυτές (Conte S., Dunsmore H., Shen V., Zage W.; 1987)

  • FUP (Function Points):  Ο δείκτης είναι βασισμένος στο πλήθος των δομών δεδομένων που ορίζονται κα χρησιμοποιούνται σε ένα λογισμικό και επιχειρεί να καταδείξει με ένα αριθμητικό μέγεθος την ποσότητα των επιχειρησιακών λειτουργιών που προσφέρει ένα λογισμικό στον τελικό χρήστη του (Albrecht A., Gaffney J.;1983).

  • IFL (Information Flow): Είναι δείκτης ο οποίος αποτυπώνει την πολυπλοκόητητα ενός τμήματος λογισμικού (module). Μετρά τις κλήσεις ενός υποπρογράμματος (module) από το λογισμικό (Henry S., Kafura D.;1981).

  •  ΚΝΜ (Knot Measure): Είναι δείκτης ο οποίος καταμετρά τον συνολικό αριθμό των διελεύσεων από κάθε σημείο ελέγχου ροής ενός λογισμικού (Woodward M., Hennell M., Hedley D.;1979).

  • LVA (Live Variables): H μετρική μετρά για κάθε γραμμή κώδικα πόσες μεταβλητές βρίσκονται σε χρήση (Dunsmore H., Gannon J.;1979).

  • LOC (Lines Of Code):  Μετρά τον αριθμό των γραμμών κώδικα. Παραλλαγές της είναι οι μετρικές που μετράνε τον αριθμό των κενών γραμμών, του εκτελέσιμου κώδικα, των γραμμών του πηγαίου κώδικα, το ποσοστό σχολίων κλπ. (Conte S., Dunsmore H., Shen V.;1986);

  • MNP (Minimum Number Of Path): Μετρά τον ελάχιστο αριθμό των μονοπατιών κατά την εκτέλεση εντός προγράμματος και την επισκεψιμότητα καθενός κόμβου του προγράμματος  (Schneidewind N., Hoffmann H.;1979).

  • MOR (Morphology Metrics): Μετρά τα μορφολογικά χαρακτηριστικά ενός λογισμικού, όπως το μέγεθος του, το αριθμό των υποπρογραμμάτων του, το πλήθος των διεπαφών μεταξύ υποπρογραμμάτων κλπ (Yourdon E., Constantine L.;1979).

  • NLE (Nesting Levels): Ο δείκτης αποτυπώνει το βάθος των εμφωλιασμένων δομών στις δομές ελέγχου του προγράμματος (Zolnowski J., Simmons D.;1981);

  • RA (Reach Ability): Μετρά τη λογική δομή του προγράμματος. Ορίζει την επισκεψιμότητα ως

R = πλήθος διαφορετικών τρόπων για να φτάσει κάποιος ένα κόμβο και
R’ = (συνολικό πλήθος μονοπατιών) / (αριθμός κόμβων)
Η μετρική αυτή σχετίζεται με τον αριθμό των λαθών και τον χρόνο εντοπισμού τους (Schneidewind N., Hoffmann H.;1979);

  •  SSC (Software Science and Cyclomatic complexity): Αφορά ένα σύνθετο δείκτη ο οποίος συνδυάζει αφενος την προσέγγιση Halsteads Software Science (θεωρεί ότι τα προγράμματα μπορούν να ειδωθούν ως γλώσσες έκφρασης και εκπονεί διάφορους δείκτες) και αφετέρου την προσέγγιση του McCabe ως προς την πολυπλοκότητα (Baker A., Zweben S.;1980);
  • SSM (Software Science Metrics): Αφορά ένα σύνολο δεικτών οι οποίοι απεικονίζουν διάφορα χαρακτηριστικά του λογισμικού. Βασίζονται κατ’ εξοχήν σε δύο ποσοτικά χαρακτηριστικά ενός προγράμματος α) το πλήθος των διακριτών  τελεστών και β) το πλήθος των διακριτών  των τελεστέων  (Halstead M.;1977).
  • SWM (Specification Weight Metrics): Η παρούσα μετρική αποτελείται από 2 δείκτες. Την δείκτη function bang που βασίζεται στον αριθμό των χαμηλότερου επιπέδου (πρωτογενών) λειτουργιών σε ένα διάγραμμα ροής δεδομένων και τον δείκτη data bang που σταθμίζεται ανάλογα με τον αριθμό των σχέσεων που εμπλέκονται σε κάθε οντότητα (DeMarco T,; 1982);
  • TRI (Tree Impurity): Ένα σωστά σχεδιασμένο σύστημα έχει ιεραρχική δομή. Αυτό σημαίνει ότι ένα υψηλότερο επίπεδο κανονικά πρέπει να χρησιμοποιεί αρκετές λειτουργίες χαμηλότερου επιπέδου. Έτσι η εξάρτηση αυτή μπορεί να σχεδιαστεί με την μορφή δέντρου (γράφου). Ο παρών δείκτης μετρά πόσο ο σχηματιστείς γράφος απέχει από το να έχει δενδρική δομή (Breiman L., Freidman R., Olsen R. Stone C.; 1984).
  • TRU (Transfer Usage): Ένα πρόγραμμα είναι κατανοητό αν οι διαδοχικές δηλώσεις αντιστοιχούν σε διαδοχικές δράσεις στο χρόνο. Η χρήση μη δομημένων εντολών μεταφοράς προγράμματος από ένα σημείο σε ένα άλλο χωρίς εννοιολογική συσχέτιση, π.χ. με χρήση της εντολής GOTO, διαταράσσει την ομαλή ροή και κάνει ιδιαίτερα δύσκολη την κατανόηση του. Ο δείκτης TRU αποτυπώνει αν και κατά πόσο τηρείται η λογική ακολουθία στο λογισμικό (Woodward M., Hennell M., Hedley D.;1979). 


Βιβλιογραφία

  1. Rushby J.; (1988); “Quality Measures and Assurance for AI Software”; SRI International; Sponsored by National Aeronautics and Space AdministrationLangley Research Center
  2. Boehm B.;(1984); “Software engineering economics”; ”; IEEE Transactions on Software Engineering; SE-10; Issue 1; pp 4-21.
  3. Watson A., McCabe T.; (1996); “Structured Testing: A Testing Methodology
    Using the Cyclomatic Complexity Metric”; National Institute of Standards and Technology Special Publication 500-235
  4. Frakes W. Terry C.;(1996); “Software Reuse: Metrics and Models”; ACM Computing Surveys; Vol. 28; No. 2; pp 416- 435
  5. Conte S., Dunsmore H., Shen V., Zage W.; (1987); “A Software Metrics Survey”; Computer Science Technical Report; Paper 621; Purdue University
  6. Albrecht A., Gaffney J.;(1983); “Software function, source lines of code and development effort prediction”; IEEE Transactions on Software Engineering; SE-9; Volume 6;  pp 639-648.
  7. Henry S., Kafura D.;(1981); “Software structure metrics based on information flow”; IEEE Transactions on Software Engineering; SE-7; Volume 5;  pp 510-518.
  8. Woodward M., Hennell M., Hedley D.;(1979); “A measure of control flow complexity in program text”; IEEE Transactions on Software Engineering; SE-5; Volume 1;  pp 45-50.
  9. Dunsmore H., Gannon J.;(1979);  “Data referencing: an empirical investigation”; IEEE Computer; Volume 12;  pp 50-59.
  10. Conte S., Dunsmore H., Shen V.;(1986); “Software engineering metrics and models”; Benjamin/Cummings; pp 62-70.
  11. Schneidewind N., Hoffmann H.;(1979); “An experiment in software error data collection and analysis”; IEEE Transactions on Software Engineering; SE-5; Volume 3; pp 276- 286.
  12. Yourdon E., Constantine L.;(1979); Structured Design; New Jersey: PTR Prentice Hall.
  13. Zolnowski J., Simmons D.;(1981); “Taking the measure of program complexity”; Proceedings of the National Computer Conference;  pp 329-336.
  14. Baker A., Zweben S.;(1980); “A comparison of measures of control flow complexity”; IEEE Transactions on Software Engineering; SE-6; Volume 6; pp 506-512.
  15. Halstead M.;(1977); Elements of software science; New York: Elsevier Science LTD, 1977.
  16. DeMarco T,;(1982); Controlling Software Projects; Yourdon Press, 1982.
  17. Breiman L., Freidman R., Olsen R. Stone C.; (1984); Classification and Regression Trees; New York: Wadsworth; Pacific Grove, CA, 1984.

Software Metrics - Μετρήσεις πηγαίου κώδικα (I)

Ορισμένες από τις πιο γνωστές τεχνικές για την μέτρηση του πηγαίου κώδικα είναι:



  • 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 = EN + 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) πρότειναν ότι το κακή ποιότητας λογισμικό μπορεί να μετρηθεί και επομένως να αναγνωριστεί μέσω της εντροπίας του. Ο σχετικός δείκτης απεικονίζει τα ελαττώματα που εμφανίζονται σε σχέση με τον χρόνο που απαιτείται για την συντήρηση του. 


Βιβλιογραφία

  1. Boehm B., Brown J., Kaspar J.; (1978); Characteristics of Software Quality; New Work: Elsevier Science Ltd; 1st edition.
  2. Banker R., Datar S., Kemerer C., Zweig D.;(1991); “Software complexity metrics: An empirical study, working paper”; University of Minnesota.
  3. 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.
  4. Oviedo E.;(1980); “Control flow, data flow and program complexity”; Proceedings of the IEEE Computer Software and Applications Conference; pp 146-152.
  5. Gill G., Kemere C.; (1990); “Productivity Impacts of Software Complexity and Developer Experience”; MIT Sloan School; WP #3107-90; January 1990
  6. Hansen W.;(1978); “Measurement of program complexity by the pair (cyclomatic number, operation count)”; ACM SIGPLAN Notices 13; Volume 3; pp 29-33.
  7. Mayers G.;(1977); “An extension to the cyclomatic measure of program complexity”; ASM SIGPLAN Notices 12; Volume 10; pp 61-64
  8. 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.
  9. 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.
  10. Bieman J., Ott L.;(1994); “Measuring functional cohesion”; IEEE Transactions on Software Engineering; SE-20; Volume 8; pp 254-259.
  11. Macro A., Buxton J.;(1987); The Craft of Software Engineering; Boston: Addison-Wesley.
  12. Yourdon E., Constantine L.;(1979); Structured Design; New Jersey: PTR Prentice Hall.
  13. Bianchi, A., Caivano, D., Lanubile, F., Visaggio, G.; (2001); “Evaluating Software Degradation through Entropy,” Dipartimento di Informatica - Universith di Bari, Italy