Ελευθεριάδου

30
1 Θεσσαλονίκη 2014

Transcript of Ελευθεριάδου

1

Θεσσαλονίκη 2014

2

Εμπειρική Επικύρωση Αντικειμενοστρεφών Μετρικών σε Λογισμικό Ανοιχτού Κώδικα για την Πρόβλεψη Σφαλμάτων

Ελευθεριάδου Νίνα ΤΗΜΜΥ/ΑΠΘ

3

Δομή της παρουσίασηςΟρισμός του Προβλήματος

Στόχος Διπλωματικής

Αλγόριθμοι Πρόβλεψης

Μετρικές Πρόβλεψης

Πειραματικά Αποτελέσματα

Συμπεράσματα

Μελλοντικές Επεκτάσεις

Πρόβλεψη Σφαλμάτων σε Λογισμικό Ανοιχτού Κώδικα

4Ορισμός του προβλήματος

Μοντέλο ανάπτυξης λογισμικού ανοιχτού κώδικα

volunteer

volunteer

volunteer

volunteer

Project lead

Πρόβλεψη Σφαλμάτων σε Λογισμικό Ανοιχτού Κώδικα

5Κίνητρο

Bugs

Detection

Prediction

Observation

Analysis

Πρόβλεψη Σφαλμάτων σε Λογισμικό Ανοιχτού Κώδικα

6Κίνητρο…

Prediction

Πρόβλεψη Σφαλμάτων σε Λογισμικό Ανοιχτού Κώδικα

Πρόβλεψη σφαλμάτων σε επίπεδο κλάσεων

1. Number Of Bugs2. Number Of Major Bugs3. Number Of Critical Bugs4. Number Of High Priority Bugs

7Στόχος διπλωματικής

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

Η σύγκριση διαφορετικών αλγορίθμων πρόβλεψης, προκειμένου να διαπιστωθεί ποιος από αυτούς είναι περισσότερο αποδοτικός όταν εφαρμόζεται πάνω στις υπό εξέταση αντικειμενοστρεφείς μετρικές.

Πρόβλεψη Σφαλμάτων σε Λογισμικό Ανοιχτού Κώδικα

8Αλγόριθμοι Πρόβλεψης

Στατιστικές Τεχνικές

Γραμμική Παλινδρόμηση

Λογιστική Παλινδρόμηση

Δένδρα Απόφασης

Ενίσχυση

Πρόβλεψη Σφαλμάτων σε Λογισμικό Ανοιχτού Κώδικα

9Γραμμική Παλινδρόμηση

Μοντελοποιεί τη σχέση ανάμεσα σε μία ανεξάρτητη μεταβλητή (μεταβλητή πρόβλεψης) X και μία εξαρτημένη μεταβλητή (μεταβλητή στόχο) Y, χρησιμοποιώντας μία σχέση που εκφράζει την Y ως γραμμική συνάρτηση της X.

Γραμμική Παλινδρόμηση

Απλή Γραμμική Παλινδρόμηση

Πολλαπλή Γραμμική

Παλινδρόμηση

Χρησιμοποιούνται οι τιμές μιας μόνο μεταβλητής πρόβλεψης

Χρησιμοποιούνται οι τιμές πολλών μεταβλητών πρόβλεψης

Πρόβλεψη Σφαλμάτων σε Λογισμικό Ανοιχτού Κώδικα

10Γραμμική Παλινδρόμηση…

Πολλαπλή γραμμική

παλινδρόμηση

Υi= (βο+β1Χi + β2Χ2 + …+ βnΧn ) + εi

Αποτέλεσμα = (Μοντέλο) + Λάθος

β1, β2, βn = συντελεστής παλινδρόμησης των μεταβλητών πρόβλεψης

β0= ο σταθερός όρος (δηλ. η τιμή του Υ όταν το Χ=0).

εi= το σφάλμα που αντιστοιχεί στη διαφορά ανάμεσα στην τιμή που προβλέπει η ευθεία γραμμή για το στιγμιότυπο i και την πραγματική τιμή που έχει το συγκεκριμένο στιγμιότυπο.

Πρόβλεψη Σφαλμάτων σε Λογισμικό Ανοιχτού Κώδικα

11Λογιστική Παλινδρόμηση

Προβλέπει την πιθανότητα εμφάνισης ενός γεγονότος με την τοποθέτηση των δεδομένων σε μια συνάρτηση logit (λογιστική λειτουργία). Πρόκειται για μία δημοφιλή μέθοδο ταξινόμησης, της οποίας η συνάρτηση πρόβλεψης αποτελείται από ένα μετασχηματισμένο γραμμικό συνδυασμό μεταβλητών.

Λογιστική Παλινδρόμηση

Μία μεταβλητή πρόβλεψης

Πολλές μεταβλητές πρόβλεψης

)110(11)(

iXbbeYP

)...22110(1

1)( inXnbXbXbbeYP

Είναι της μορφής , γνωστή ως σιγμοειδή συνάρτηση. Απώτερος σκοπός είναι να χαρτογραφηθεί κάθε πραγματικός αριθμός που χρησιμοποιείται ως είσοδος στην πρόβλεψη μας, η οποία θα κυμαίνεται από 0 έως 1.

Πρόβλεψη Σφαλμάτων σε Λογισμικό Ανοιχτού Κώδικα

12

Λογιστική Παλινδρόμηση…Η πιο διαδεδομένη βιβλιογραφικά έκφραση της λογιστικής παλινδρόμησης είναι

ln(odds) = a+ b1x1 + b2 x2 +………+ bk xk

Οι συντελεστές των ανεξάρτητων μεταβλητών στην εξίσωση παλινδρόμησης εκτιμώνται με βάση τη μέθοδο Μεγίστης Πιθανοφάνειας. Στην ουσία προσδιορίζεται η επίδραση της εκάστοτε ανεξάρτητης μεταβλητής στη διαμόρφωση των τιμών της εξαρτημένης μεταβλητής.

Το δεξί μέρος της εξίσωσης δημιουργείται από ένα γραμμικό συνδυασμό των ανεξάρτητων μεταβλητών που συμμετέχουν στο μοντέλο παλινδρόμησης.

Το αριστερό μέρος περιέχει τις τιμές της εξαρτημένης μεταβλητής, με τη μορφή του λογαρίθμου των odds, δηλαδή του λογαρίθμου της σχέσης odds = Prob/(1-Prob). To odds εναλλακτικά ονομάζεται logit και ο όρος Prob εκφράζει την πιθανότητα του συμβάντος του γεγονότος.

Πρόβλεψη Σφαλμάτων σε Λογισμικό Ανοιχτού Κώδικα

13

Δένδρα Απόφασης Αναπαριστούν μια διαδικασία λήψης απόφασης. Κάθε πιθανό “σημείο απόφασης” ή κατάσταση αναπαριστάται από έναν κόμβο. Κάθε πιθανή επιλογή που μπορεί να γίνει σε ένα σημείο

απόφασης αναπαριστάται με μια ακμή προς έναν κόμβο-παιδί.

Θεωρούνται μια ταξινομημένη δομή δέντρου, το οποίο χρησιμοποιείται για να ταξινομήσει κλάσεις (classes) με την εκμάθηση απλών κανόνων απόφασης (rules) που προκύπτουν από τα χαρακτηριστικά (attributes) της τάξης. Πρόβλεψη Σφαλμάτων σε Λογισμικό Ανοιχτού Κώδικα

14Ενίσχυση

Εκμεταλλεύεται την αστάθεια που παρουσιάζουν διάφοροι αλγόριθμοι μάθησης.Βασίζεται στη σειριακή εκπαίδευση των ταξινομητών από έναν αλγόριθμο μάθησης. Με τον τρόπο αυτό ο ν-οστός ταξινομητής λαμβάνει υπόψη την επίδοση των προηγούμενων ν-1 ταξινομητών για καθένα στιγμιότυπο, επικεντρώνοντας έτσι την προσπάθειά του στη σωστή πρόβλεψη των δειγμάτων για τα οποία οι προηγούμενοι απέτυχαν περισσότερο.

Πρόβλεψη Σφαλμάτων σε Λογισμικό Ανοιχτού Κώδικα

15

Ενίσχυση…

Data set 1 Data set 2 Data set T

Learner1 Learner2 LearnerT… ...

… ...

… ...

Τα στιγμιότυπα εκπαίδευσης που ταξινομήθηκαν λανθασμένα από τον ταξινομητή Learner1 θα παίξουν περισσότερο σημαντικό ρόλο στα στιγμιότυπα εκπαίδευσης του ταξινομητή Learner2

Original training set

Πρόβλεψη Σφαλμάτων σε Λογισμικό Ανοιχτού Κώδικα

16Μετρικές Πρόβλεψης

Change metrics

Previous defects

Source code metrics

Τα σφάλματα προκαλούνται απόαλλαγές.

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

Προηγούμενες ατέλειες του κώδικα μπορούν να προβλέψουν μελλοντικές ατέλειες.

Πρόβλεψη Σφαλμάτων σε Λογισμικό Ανοιχτού Κώδικα

Μετρική ΕπεξήγησηNR Αριθμός αναθεωρήσεων.

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

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

NAUTH Αριθμός συγγραφέων που έλεγξαν το αρχείο.

LINES Γραμμές που προστέθηκαν και διεγράφησαν (άθροισμα, μέγιστο, μέσος όρος).

CHURN Codechurn (άθροισμα, μέγιστο και μέσος όρος).

CHGSET Αλλαγή μεγέθους συνόλου (μέγιστο και μέσος όρος).

AGE Ηλικία και σταθμισμένη ηλικία.

Τύπος μετρικών Μετρική Επεξήγηση

CK WMC Σταθμισμένη μέθοδος μέτρησης.

CK DIT Βάθος δένδρου κληρονομικότητας.

CK RFC Απόκριση για κλάση.

CK NOC Αριθμός παιδιών.

CK CBO Σύζευξη μεταξύ αντικειμένων.

CK LCOM Έλλειψη συνοχής στις μεθόδους.

Τύπος μετρικών Μετρική Επεξήγηση

OO FanIn Αριθμός κλάσεων, που κάνουν αναφορά στην κλάση.

OO FanOut Αριθμός κλάσεων στις οποίες αναφέρεται η κλάση.

OO NOA Αριθμός γνωρισμάτων.

OO NOPA Αριθμός δημόσιων γνωρισμάτων.

OO NOPRA Αριθμός ιδιωτικών γνωρισμάτων.

OO NOAI Αριθμός γνωρισμάτων που κληρονομούνται.

OO LOC Αριθμός γραμμών κώδικα.

OO NOM Αριθμός μεθόδων.

OO NOPM Αριθμός δημόσιων μεθόδων.

OO NOPRM Αριθμός ιδιωτικών μεθόδων.

OO NOMI Αριθμός μεθόδων που κληρονομούνται.

Μετρική Επεξήγηση

Number Of Bugs Συνολικός αριθμός σφαλμάτων.

Number Of Non Trivial Bugs: Σφάλματα τα οποία επηρεάζουν τη λειτουργικότητα του συστήματος.

Number Of Major Bugs: Σφάλματα τα οποία οδηγούν σε κατάρρευση του συστήματος.

Number Of Critical Bugs : Σφάλματα τα οποία οδηγούν σε αποτυχία του συστήματος.

Number Of High Priority Bugs: Σφάλματα τα οποία έχουν κριθεί υψηλής προτεραιότητας.

17

Μετρικές Πρόβλεψης…Entropy of

change metrics

Churn of Source code metrics

Entropy of Source code

metrics

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

Η χρήση μετρικών source code (σε αντιπαράθεση με τις κλασικές CK τεχνικές) δίνει μια καλύτερη προσέγγιση του entropy of changes από ότι η απλή τεχνική entropy of changes.

Η χρήση μετρικών source code (σε αντιπαράθεση με τις κλασικές CK τεχνικές) δίνει μια καλύτερη προσέγγιση του code churn από ότι η απλή τεχνική code churn.

Πρόβλεψη Σφαλμάτων σε Λογισμικό Ανοιχτού Κώδικα

Μετρική Επεξήγηση

CvsEntropy Εντροπία συστήματος

CvsWEntropy Σταθμισμένη εκδοχή εντροπίας

CvsLinEntropy Γραμμική εκδοχή εντροπίας

CvsLogEntropy Λογαριθμική εκδοχή εντροπίας

CvsExpEntropy Εκθετική εκδοχή εντροπίας

18Πειραματικά Αποτελέσματα

Προ-επεξεργασία Επιλογή συνόλου δεδομένων eclipse JDT Core

Λάβαμε υπόψη 998 κλάσεις προς εξέταση. Για κάθε κλάση υπολογίστηκαν οι προαναφερθέντες μετρικές :

Change metrics: 15 Previous defects: 5 Source code metrics: 17 Entropy of changes: 5 Churn of source code metrics: 17 Entropy of source code metrics: 17

Χρήση βιβλιοθήκης Scikit Learn – Machine Learning in PythonΧωρισμός συνόλου δεδομένων σε training –testing data.

Εφαρμογή μεθόδου 10 – fold cross – validation στο σύνολο δεδομένων.Χωρισμός κλάσεων πηγαίου κώδικα σε δύο ομάδες:

Η ομάδα περιέχει κλάσεις με τουλάχιστον ένα σφάλμα. Η ομάδα περιέχει κλάσεις που δεν έχουν σφάλματα.

Πρόβλεψη Σφαλμάτων σε Λογισμικό Ανοιχτού Κώδικα

19

Πειραματικά Αποτελέσματα…Μετρικές ποιότητας

Specificity

Από το συνολικό αριθμό των κλάσεων που δεν περιέχουν σφάλματα, δίνει το ποσοστό αυτών που έχουν ταξινομηθεί σωστά ως defect free.

Sensitivity/Recall

Από το συνολικό αριθμό των κλάσεων που περιέχουν σφάλματα, δίνει το ποσοστό αυτών και έχουν ταξινομηθεί σωστά ως defect prone.

PrecisionΑπό το συνολικό αριθμό των κλάσεων που προβλέφθηκαν ως defect prone, δίνει το ποσοστό αυτών που πράγματι περιείχαν σφάλματα.

Πρόβλεψη Σφαλμάτων σε Λογισμικό Ανοιχτού Κώδικα

20

Πειραματικά Αποτελέσματα…Μετρικές ποιότητας

Accuracy Δίνει το ποσοστό των ορθά ταξινομημένων κλάσεων (true positives, true negatives).

Roc Curve

Συνεχές γράφημα που ορίζουν τα σημεία (FP, TP) Όσο μεγαλύτερη κυρτότητα εμφανίζει η Roc καμπύλη προς την άνω αριστερή γωνία (οπτική εκτίμηση), και επομένως όσο μεγαλύτερο είναι το εμβαδόν που ορίζεται κάτω από αυτή (ποσοτική εκτίμηση), τόσο μεγαλύτερη θα είναι και η διακριτική ικανότητα που θα παρουσιάζει.

Πρόβλεψη Σφαλμάτων σε Λογισμικό Ανοιχτού Κώδικα

21

Πειραματικά Αποτελέσματα… Change metrics Source code metrics

Πρόβλεψη Σφαλμάτων σε Λογισμικό Ανοιχτού Κώδικα

22

Πειραματικά Αποτελέσματα…Complexity code metrics Bug metrics (Entropy of changes)

Πρόβλεψη Σφαλμάτων σε Λογισμικό Ανοιχτού Κώδικα

23Πειραματικά Αποτελέσματα…

Churn of Source code metrics Entropy of Source code metrics

Πρόβλεψη Σφαλμάτων σε Λογισμικό Ανοιχτού Κώδικα

24Πειραματικά Αποτελέσματα…

Lin – churn of Source code metrics Lin – entropy of Source code metrics

Πρόβλεψη Σφαλμάτων σε Λογισμικό Ανοιχτού Κώδικα

25

Πειραματικά Αποτελέσματα…

Log – churn of Source code metrics Log – entropy of Source code metrics

Πρόβλεψη Σφαλμάτων σε Λογισμικό Ανοιχτού Κώδικα

26Πειραματικά Αποτελέσματα…

Exp – churn of Source code metrics Exp – entropy of Source code metrics

Πρόβλεψη Σφαλμάτων σε Λογισμικό Ανοιχτού Κώδικα

27

Πειραματικά Αποτελέσματα…Weighted – churn of Source code Weighted – entropy of Source code metrics metrics

Πρόβλεψη Σφαλμάτων σε Λογισμικό Ανοιχτού Κώδικα

28

Συμπεράσματα

Εισάγαμε ένα σημείο αναφοράς, το οποίο μας επέτρεψε την επίτευξη κοινής σύγκρισης μετρικών και αλγορίθμων πρόβλεψης. Τα αποτελέσματα που προέκυψαν έδωσαν ποσοστά επιτυχούς πρόβλεψης πάνω από 80%.

Entropy of Source Code Metrics και Lin-Churn Metrics: 81%-83%

Log-Entropy Metrics και Weighted-Churn Metrics : 81%-84%.

H απόδοση του αλγορίθμου Ενίσχυσης υπερτερεί έναντι των υπόλοιπων υπό εξέταση αλγορίθμων.

Log-Churn Metrics: 78% - 79% 84%. Source Code Metrics: 78% 83%.

Πρόβλεψη Σφαλμάτων σε Λογισμικό Ανοιχτού Κώδικα

29

Μελλοντικές ΕπεκτάσειςΗ αναζήτηση περισσότερων έργων λογισμικού ανοιχτού κώδικα, πάνω στα οποία θα εφαρμοστούν οι προσεγγίσεις που έχουν προταθεί στην παρούσα διπλωματική εργασία, για την πρόβλεψη μελλοντικών σφαλμάτων.Η ανάπτυξη άλλων προσεγγίσεων σε συστήματα λογισμικού, οι οποίες θα διαμορφωθούν με βάση τις πηγές δεδομένων που αυτές χρησιμοποιούν και τα συστήματα στα οποία αυτές επικυρώνονται.Η μελέτη και η ανάπτυξη άλλων αλγορίθμων, οι οποίοι θα ανταποκρίνονται στα ιδιαίτερα χαρακτηριστικά των υπό μελέτη δεδομένων.

Πρόβλεψη Σφαλμάτων σε Λογισμικό Ανοιχτού Κώδικα

30Ερωτήσεις – Σχολιασμός

Ιδιαίτερες ευχαριστίες στον κ.Συμεωνίδη Ανδρέα και Διαμαντόπουλο Θέμη

Πρόβλεψη Σφαλμάτων σε Λογισμικό Ανοιχτού Κώδικα