A study on machine learning techniques for technical debt estimation and forecasting
Authors: Τσουκαλάς Δημήτριος 
Published: February 2022

Ο όρος «τεχνικό χρέος» είναι μια επιτυχημένη μεταφορά η οποία εισήχθη το 1992 ώστε να περιγράψει το φαινόμενο κατά το οποίο τεχνικοί συμβιβασμοί που αφορούν την ποιότητα σε ένα σύστημα λογισμικού (π.χ. σχεδίαση ή κώδικας) και πραγματοποιούνται ώστε να αποφέρουν βραχυπρόθεσμα οφέλη, ενδέχεται να οδηγήσουν σε μακροπρόθεσμα προβλήματα εάν δεν επιλυθούν άμεσα. Λόγω της οικονομικής φύσης του, χρησιμοποιήθηκε ευρέως για να περιγράψει τις συνέπειες που φέρουν τα προβλήματα στην ποιότητα του λογισμικού, αλλά και να τονίσει τις ανάγκες εξάλειψής τους, τόσο σε τεχνικά- όσο και σε μη τεχνικά-καταρτισμένους ενδιαφερόμενους. Τα τελευταία χρόνια, το τεχνικό χρέος έχει προσελκύσει την προσοχή τόσο του ακαδημαϊκού χώρου όσο και της βιομηχανίας. Ως αποτέλεσμα, έχει υπάρξει μια σημαντική αύξηση στον αριθμό και την παρεχόμενη λειτουργικότητα των μεθόδων και των εργαλείων που υποστηρίζουν δραστηριότητες διαχείρισης τεχνικού χρέους.Ωστόσο, λόγω της έλλειψης ενός κοινά αποδεκτού προτύπου για την αναγνώριση και την ποσοτικοποίηση του τεχνικού χρέους, δεν είναι σαφές πώς τα υπάρχοντα εργαλεία διαχειρίζονται τις παραπάνω δραστηριότητες, καθώς το καθένα υιοθετεί το δικό του σύνολο κανόνων. Ως αποτέλεσμα, οι αποκλίνουσες εκτιμήσεις τεχνικού χρέους που παράγονται από αυτά τα εργαλεία θέτουν υπό αμφισβήτηση την αξιοπιστία των ευρημάτων τους. Το παραπάνω πρόβλημα τονίζει την ανάγκη για νέες μεθόδους που θα ενσωματώνουν τη συλλογική γνώση που εξάγεται από πολλαπλά εργαλεία τεχνικού χρέους, αξιοποιώντας με αυτόν τον τρόπο μια κοινά αποδεκτή «βάση γνώσης τεχνικού χρέους» για τη βελτίωση των δραστηριοτήτων αναγνώρισης και ποσοτικοποίησης του τεχνικού χρέους.Από την άλλη πλευρά, οι υπάρχουσες μέθοδοι και εργαλεία επικεντρώνονται κυρίως στην αξιολόγηση του τεχνικού χρέους ενός συστήματος λογισμικού στην τρέχουσα κατάστασή του. Ωστόσο, μια απόφαση σχετικά με το εάν θα αποπληρωθεί ή όχι ένα αντικείμενο τεχνικού χρέους έχει διαφορετικές συνέπειες ανάλογα με το πότε λαμβάνεται. Το παραπάνω τονίζει την ανάγκη δημιουργίας μεθόδων και συνοδευτικών εργαλείων τα οποία θα επιτρέπουν την μακροπρόθεσμη αποτελεσματική συντήρηση λογισμικού, προβλέποντας την εξέλιξη του τεχνικού χρέους ενός συστήματος λογισμικού και παρέχοντας πληροφορίες σχετικά με το πώς και πότε πρέπει να αποπληρωθεί.Με βάση τα παραπάνω ζητήματα, σκοπός της παρούσας διατριβής είναι να συνδράμει στους τομείς της εκτίμησης και της πρόβλεψης τεχνικού χρέους, προτείνοντας νέες προσεγγίσεις οι οποίες βασίζονται κυρίως σε τεχνικές μηχανικής μάθησης. Οι προσεγγίσεις αυτές στοχεύουν στην διευκόλυνση των δραστηριοτήτων διαχείρισης τεχνικού χρέους και επιτρέπουν τη λήψη αποφάσεων υπό συνθήκες αβεβαιότητας.Πιο συγκεκριμένα, δεδομένης της έλλειψης συγκεκριμένων προσεγγίσεων σχετικά με την έννοια της πρόβλεψης τεχνικού χρέους, η παρούσα διατριβή εξέτασε ένα πλήθος διαφορετικών μεθόδων πρόβλεψης, οι οποίες κυμαίνονται από απλά μοντέλα χρονοσειρών έως πιο εξελιγμένα μοντέλα μηχανικής μάθησης, για την ικανότητά τους να προβλέπουν με ακρίβεια τη μελλοντική εξέλιξη του τεχνικού χρέους σε συστήματα λογισμικού με μακροχρόνιο ιστορικό ανάπτυξης. Τα αποτελέσματα έδειξαν ότι τα μοντέλα χρονοσειρών είναι σε θέση να παρέχουν ικανοποιητικές προβλέψεις τεχνικού χρέους για βραχυπρόθεσμους ορίζοντες πρόβλεψης. Ωστόσο, παρατηρήθηκε ότι η προγνωστική τους ισχύς μειώνεται σημαντικά όταν προσπαθούν να προβλέψουν στο πιο μακρινό μέλλον. Από την άλλη πλευρά, οι τεχνικές μηχανικής μάθησης αποδείχθηκαν πιο αποτελεσματικές στη μοντελοποίηση της μελλοντικής εξέλιξης του τεχνικού χρέους κατά την εξέταση τόσο βραχυπρόθεσμων όσο και μακροπρόθεσμων οριζόντων πρόβλεψης. Πιο συγκεκριμένα, αποδείχθηκε ότι τα μοντέλα μηχανικής μάθησης αποτελούν μια κατάλληλη και αποτελεσματική προσέγγιση για την πρόβλεψη τεχνικού χρέους, καθώς είναι σε θέση να παρέχουν ουσιαστικές εκτιμήσεις της εξέλιξης του τεχνικού χρέους για μια σχετικά μεγάλη περίοδο, πετυχαίνοντας στις περισσότερες περιπτώσεις επαρκή επίπεδα ακρίβειας.Εκτός από την πρόβλεψη της εξέλιξης του τεχνικού χρέους σε συστήματα λογισμικού με μακροχρόνιο ιστορικό ανάπτυξης, η παρούσα διατριβή διερεύνησε επίσης την ικανότητα των τεχνικών ομαδοποίησης δεδομένων να βελτιώσουν την ακρίβεια της πρόβλεψης τεχνικού χρέους μεταξύ έργων, επιτρέποντας με αυτόν τον τρόπο την παροχή αξιόπιστων προβλέψεων για έργα με ανεπαρκή ιστορικά δεδομένα, όπως νέα έργα ή έργα από τα οποία δεν είναι δυνατό να ανακτηθούν παρελθοντικά δεδομένα. Χρησιμοποιώντας μετρικές κώδικα για την ομαδοποίηση «παρόμοιων» έργων λογισμικού, παρατηρήσαμε ότι η ακρίβεια πρόβλεψης μοντέλων μηχανικής μάθησης τα οποία είχαν εκπαιδευτεί σε κάποιο έργο λογισμικού μιας συγκεκριμένης ομάδας ήταν υψηλότερη για τα έργα λογισμικού που ανήκαν στην ίδια ομάδα, σε σύγκριση με την ακρίβεια για έργα λογισμικού που εκχωρήθηκαν σε διαφορετικές ομάδες. Αυτό υποδηλώνει ότι η ομοιότητα μεταξύ έργων λογισμικού μπορεί να αποτελέσει ένα βασικό παράγοντα για τη βελτίωση της πρόβλεψης τεχνικού χρέους μεταξύ έργων λογισμικού και, κατά συνέπεια, ότι η ομαδοποίηση μπορεί να είναι μια βιώσιμη λύση για την ανάπτυξη μοντέλων πρόβλεψης για αυτό το σκοπό.Τέλος, αναγνωρίζοντας την έλλειψη μιας κοινά αποδεκτής βάσης σχετικά με την αναγνώριση και την ποσοτικοποίηση του τεχνικού χρέους, η παρούσα διατριβή διερεύνησε την ικανότητα των μοντέλων μηχανικής μάθησης να αξιοποιούν τη συλλογική γνώση που εξάγεται συνδυάζοντας αποτελέσματα διαφορετικών εργαλείων τεχνικού χρέους. Χρησιμοποιώντας διάφορες μετρήσεις που σχετίζονται με τον πηγαίο κώδικα και τη δραστηριότητα αποθετηρίου ως είσοδο, αλλά και ένα σύνολο κλάσεων που μοιράζονται παρόμοια επίπεδα τεχνικού χρέους ως σημείο αναφοράς, η μέθοδος ταξινόμησης που προτείνουμε αποδείχθηκε ικανή να προσδιορίσει με ακρίβεια υποψήφιες κλάσεις υψηλού τεχνικού χρέους, εξαλείφοντας αυτό τρόπο την ανάγκη καταφυγής σε ένα πλήθος εμπορικών εργαλείων για την παραπάνω διαπίστωση. Επιπλέον, με βάση τα εξαγόμενα αποτελέσματα, υλοποιήσαμε ένα πρωτότυπο εργαλείο το οποίο αυτοματοποιεί την παραπάνω διαδικασία.