Περίληψη
Ο όρος «τεχνικό χρέος» (ΤΧ) είναι μια μεταφορά που χρησιμοποιείται για να περιγράψει τεχνικούς συμβιβασμούς που αφορούν την ποιότητα που εισάγονται στον κώδικα ως προϊόν του ταχύτερου χρόνου παράδοσης του προϊόντος. Λόγω της ικανότητας που έχει αυτή η μεταφορά, να κλείνει το χάσμα μεταξύ μελών μια εταιρίας και προγραμματιστών, τα τελευταία χρόνια έχει προσελκύσει μεγάλη προσοχή από τον ακαδημαϊκό χώρο και τη βιομηχανία. Ως αποτέλεσμα, έχει δοθεί αυξανόμενη προσοχή στη διαχείριση του ΤΧ, με εργαλεία ή συγκεκριμένες δραστηριότητες από την ποσοτικοποίηση μέχρι την αποπληρω-μή του. Παρόλο που η μεταφορά του ΤΧ έχει εισαχθεί στην βιβλιογραφία πριν από περισσότερες από τρεις δεκαετίες, υπάρχουν ακόμα πολλές πτυχές της που δεν καλύπτονται ή πρέπει να εξετάζονται συνεχώς μαζί με την εξέλιξη της ανάπτυξης λογισμικού: •Είναι ευρέως γνωστό ότι για να μειωθεί το ΤΧ ένας μηχανικός λογισμικού χρειά-ζεται να εκτελέσει ανακατασκευές (η πιο σημαντική μέθοδος αποπληρωμής ΤΧ). Ωστόσο, αυτή η δραστηριότητ ...
Ο όρος «τεχνικό χρέος» (ΤΧ) είναι μια μεταφορά που χρησιμοποιείται για να περιγράψει τεχνικούς συμβιβασμούς που αφορούν την ποιότητα που εισάγονται στον κώδικα ως προϊόν του ταχύτερου χρόνου παράδοσης του προϊόντος. Λόγω της ικανότητας που έχει αυτή η μεταφορά, να κλείνει το χάσμα μεταξύ μελών μια εταιρίας και προγραμματιστών, τα τελευταία χρόνια έχει προσελκύσει μεγάλη προσοχή από τον ακαδημαϊκό χώρο και τη βιομηχανία. Ως αποτέλεσμα, έχει δοθεί αυξανόμενη προσοχή στη διαχείριση του ΤΧ, με εργαλεία ή συγκεκριμένες δραστηριότητες από την ποσοτικοποίηση μέχρι την αποπληρω-μή του. Παρόλο που η μεταφορά του ΤΧ έχει εισαχθεί στην βιβλιογραφία πριν από περισσότερες από τρεις δεκαετίες, υπάρχουν ακόμα πολλές πτυχές της που δεν καλύπτονται ή πρέπει να εξετάζονται συνεχώς μαζί με την εξέλιξη της ανάπτυξης λογισμικού: •Είναι ευρέως γνωστό ότι για να μειωθεί το ΤΧ ένας μηχανικός λογισμικού χρειά-ζεται να εκτελέσει ανακατασκευές (η πιο σημαντική μέθοδος αποπληρωμής ΤΧ). Ωστόσο, αυτή η δραστηριότητα από μόνη της δεν είναι ικανή να αποτρέψει τη συσσώρευση ΤΧ. Ως αποτέλεσμα, υπάρχει ανάγκη να διερευνηθεί ποιες δραστη-ριότητες στη διαδικασία ανάπτυξης επηρεάζουν τη συσσώρευση ΤΧ και εάν αυτές οι δραστηριότητες μπορούν να εκτελεστούν σε επίπεδο διαχείρισης του έρ-γου ή σε επίπεδο ανάπτυξης. Για το σκοπό αυτό, οι προγραμματιστές και οι δια-χειριστές πρέπει να γνωρίζουν την επίδραση που μπορεί να έχει κάθε δραστηριότη-τα στο ΤΧ και ποιες ενέργειες μπορούν να κάνουν για να το μειώσουν. •Δεδομένου του γεγονότος ότι οι πρακτικές ανάπτυξης λογισμικού εξελίσσονται γρήγορα και αλλάζουν συνεχώς, οι προσεγγίσεις διαχείρισης ΤΧ πρέπει συνέχεια να ενημερώνονται. Πιο συγκεκριμένα, συγκεκριμένες σύγχρονες μέθοδοι ανάπτυ-ξης λογισμικού (π.χ. αρχιτεκτονικές προσανατολισμένες στις υπηρεσίες) ενδέχεται να απαιτούν διαφορετική προσέγγιση για την ποσοτικοποίηση και διαχείριση του ΤΧ. Για παράδειγμα, η οργάνωση των εφαρμογών που βασίζονται σε υπηρεσίες (πχ SOA) είναι διαφορετική σε σύγκριση με τις παραδοσιακές αντικειμενοστρα-φείς εφαρμογές, επομένως χρειάζονται διαφορετικό επίπεδο ανάλυσης. Αυτό υπο-γραμμίζει την ανάγκη για νέες μεθόδους που θα είναι πιο ακριβείς για αναδυό-μενους τομείς και τρόπους ανάπτυξης λογισμικού. Επομένως, ο σκοπός αυτής της διατριβής είναι να προωθήσει την τελευταία λέξη της τεχνολογίας στους το-μείς της διαχείρισης του ΤΧ, της αποπληρωμής, και της ποσοτικοποίησης έχοντας υπόψη και την προσαρμογή στις νέες πρακτικές ανάπτυξης που προκύπτουν. Η πρώτη γραμμή έρευνας, σε αυτό το διδακτορικό έργο είναι να επιχειρήσουμε να κατα-νοήσουμε τους λόγους συσσώρευσης TX. Αρχικά, κατηγοριοποιήσαμε τις δραστηριότητες βελτίωσης της ποιότητας σε δύο κατηγορίες: (α) μικρο-διαχείριση: παρεμβάσεις που εφαρμόζονται σε επίπεδο κλάσης ή μεθόδου, με εφαρμογή αναδιαμόρφωσης, και (β) μακροδιαχείριση: παρεμβάσεις που εφαρμόζονται σε μεγάλη κλίμακα (π.χ., σε επίπεδο έργου, χρησιμοποιώντας ένα νέο framework ή επιβάλλοντας μια πύλη ποιότητας), και στη συνέχεια εξετάζουμε τη σχέση αυτών των δραστηριοτήτων με τη συσσώρευση ΤΧ. Με βάση τα αποτελέσματα, επιβεβαιώνουμε ότι οι παράμετροι μικρο-διαχείρισης συσχετίζονται με την πιθανότητα μια κλάση να έχει υψηλό ΤΧ, αλλά τα αποτελέσματα μπορούν να βελτιωθούν περαιτέρω ελέγχοντας και ορισμένες παραμέτρους σε επίπεδο έργου. Επιπλέον, προχωρήσαμε βαθύτερα σε αυτόν τον τομέα εξετάζοντας συγκεκριμένες δραστηριό-τητες ανάπτυξης ως συνεισφορές (pull requests) σε λογισμικό ανοιχτού κώδικα (OSS). Αυτό μας έδειξε ότι η προσθήκη νέων δυνατοτήτων σε έργα λογισμικού τείνει να αυξάνει το Κεφάλαιο ΤΧ, οι δραστηριότητες ανακατασκευής έχουν σχεδόν σταθερό θετικό αποτέλεσμα (μειώνοντας το Κεφάλαιο ΤΧ) και οι δραστηριότητες διόρθωσης σφαλμάτων δεν έχουν κάποιο σταθερό αντίκτυπο στο ΤΧ. Επιπλέον, έχουμε επικεντρωθεί παραπάνω στις δραστηριότητες αναδιαμόρφωσης, καθώς φαίνεται να είναι ο de facto τρόπος μείωσης του ΤΧ. Από τα αποτελέσματά μας, είναι προφανές ότι οι ανακατασκευές δεν επηρεάζουν πάντα θετικά την ποιότητα του έργου και ότι η λίστα ευκαιριών ανακατασκευής μπορεί να είναι πολύ μεγάλη και δαπανηρή για να τις εφαρμόσουμε όλες. Έχοντας αυτό κατά νου, και επαναχρησιμοποιώντας έναν τρόπο ιεράρχησης, προτείναμε μια προσέγγιση βασισμένη σε μετρήσεις για την καθοδήγηση των επαγγελματιών σχετικά με το πώς να δίνουν προτεραιότητα στις ευκαιρίες ανακατασκευής. Η δεύτερη γραμμή έρευνας σε αυτό το διδακτορικό έργο προσπαθεί να προσφέρει μια ενημερωμένη προοπτική για τη διαχείριση ΤΧ για σύγχρονες εφαρμογές, όπως υπηρεσίες cloud και web. Πρώτον, αναγνωρίζοντας ότι στις υπηρεσίες web, οι προγραμματιστές οργανώνουν την επιθυμητή λειτουργικότητα σε αυτόνομες και ανεξάρτητες υπηρεσίες (κλή-σεις API), είναι φυσικό και η συντήρησή τους να είναι ανεξάρτητη μέχρι έναν βαθμό. Ως εκ τούτου, είναι λογικό να χρησιμοποιείται ως μονάδα ανάλυσης η υπηρεσία αυτή κα-θαυτή, παρά το πλήρες έργο ή οι συγκεκριμένες κλάσεις κάθε φορά. Επομένως, προτείναμε μια νέα μεθοδολογία για τη μέτρηση του ΤΧ κάθε υπηρεσίας λαμβάνοντας υπόψη τον υποκείμενο κώδικα που υποστηρίζει το αντίστοιχο endpoint. Η προτεινόμενη μεθοδο-λογία βασίζεται στο γράφημα κλήσης της μεθόδου, που ξεκινά από το endpoint μιας υ-πηρεσίας και διασχίζει όλες τις μεθόδους που παρέχουν τη λειτουργικότητα της υπηρεσί-ας. Επιπλέον, προτείναμε και παρουσιάζουμε μια μεθοδολογία και πλαίσιο ανάπτυξης cloud, το SmartCLIDE. Αυτή η μεθοδολογία και το πλαίσιο έχουν στον πυρήνα τους την επαναχρησιμοποίηση των υπηρεσιών ώστε να είναι πιο αποτελεσματικές (από άποψη χρόνου, ποιότητας, ελαττωμάτων και διαδικασίας). Τέλος, για να παρέχει μια πιο συγκεκριμένη προσέγγιση στην ανάπτυξη λογισμικού, αυτό το διδακτορικό έργο επεκτείνεται στον τομέα σχεδιασμού και αρχιτεκτονικής της μηχανικής λογισμικού. Δεδομένης της έλλειψης μετρήσεων για τη χρήση των βιβλιοθηκών, προτείναμε 5 μετρήσεις που αποτυ-πώνουν τον βαθμό στον οποίο κάθε βιβλιοθήκη χρησιμοποιείται στον κώδικα, παρέχοντας πληροφορίες στους μηχανικούς λογισμικού για την πραγματική χρησιμότητα της βιβλιοθήκης στο τελικό προϊόν.
περισσότερα
Περίληψη σε άλλη γλώσσα
Technical Debt (TD) is a metaphor which is used to describe the software inefficiencies that are introduced in the code base as “the price to pay” for the quicker delivery of the product. In recent years TD has attracted a lot of attention from academia and industry, probably due to the ability of the metaphor to bridge the gap between business and technical stakeholders. Driven by this, we have observed an increased attention to the process of TD management, with the introduction of tools or specific TD activities from the quantification all the way to its repayment. Even though the TD metaphor was introduced more than three decades ago, there are still a lot of aspects that are underexplored or need to be continuously examined following the advanced in the software development process: •it is well-known that to reduce TD a software engineer needs to perform refactorings (the most prominent TD repayment method); however, this activity alone is not able to prevent TD accumulation. As a ...
Technical Debt (TD) is a metaphor which is used to describe the software inefficiencies that are introduced in the code base as “the price to pay” for the quicker delivery of the product. In recent years TD has attracted a lot of attention from academia and industry, probably due to the ability of the metaphor to bridge the gap between business and technical stakeholders. Driven by this, we have observed an increased attention to the process of TD management, with the introduction of tools or specific TD activities from the quantification all the way to its repayment. Even though the TD metaphor was introduced more than three decades ago, there are still a lot of aspects that are underexplored or need to be continuously examined following the advanced in the software development process: •it is well-known that to reduce TD a software engineer needs to perform refactorings (the most prominent TD repayment method); however, this activity alone is not able to prevent TD accumulation. As a result, there is a need to explore which activities in the development process affect TD accumulation, and if these activities can be performed at management or engineering level. To this end, developers and managers need to be aware of the effect that each activity can have on TD, and what actions they can take to reduce TD. •given the fact that the software development practices rapidly evolve and change continuously, TD management approaches need to be updated. More specifically, specific modern software development methods (e.g., service-oriented architectures) might require a different approach for TD quantification and management approaches. For example, the organization of SOA applications is different com-pared to traditional object-oriented applications, yielding for different level of analysis. This highlights the need for novel methods that would be more accurate for emerging domains. To this end, the purpose of this dissertation is to advance the state of the art in the fields of TD management, TD repayment, and TD quantification keeping in mind and adapting to the new development practices that arise. Following the first line of research, in this PhD project we attempt to understand the rea-sons of TD accumulation. Initially, we categorized quality improvements activities into two classes: (a) micro-management: interventions applied at a fine-grained level (e.g., at a class level by applying a refactoring); and (b) macro-management: interventions applied at a large-scale (e.g., at project level, by using a new framework or imposing a quality gate); and next we examine the relation of these activities to TD accumulation. Based on the results, we confirm that micro-management parameters are associated with the probability of a class having high TD, but the results can be further improved by controlling some project-level parameters as well. Moreover, we moved deeper into this area by examining specific development activities as pull request contributions in open-source software (OSS). This shows that the addition of features tends to increase TD Principal, refactoring activities have an almost consistent positive effect (reducing TD Principal), and bug fixing activities have an indecisive impact on TD Principal. Furthermore, we have focused on refactoring activities, since they seem to be the de facto way of reducing TD. From our results, it is evident that refactorings do not always positively affect the quality of the project, and that the list of refactoring opportunities can be way too long and costly to apply them all. Having this in mind, and by reusing a benchmark of real-world refactorings, we have proposed a metrics-based approach for guiding practitioners on how to prioritize refactoring opportunities. Following the second line of research, this PhD project has also provided an updated perspective on TD management for modern applications, like cloud and web services. First by acknowledging that in web services, developers organize the desired functional-ity into self-contained and independent services (API calls), it is only natural that the maintenance of them is independent. Thus, it makes sense to use as unit of analysis the service-per se, rather than the complete project or specific classes at a time. Alternative-ly, we proposed a novel methodology to measure the TD of each service considering the underlying code that supports the corresponding endpoint. The proposed methodology relies on the method call graph, initiated by the service end-point, and traverses all methods that provide the service functionality. Moreover, we proposed and present a cloud development methodology and framework, namely SmartCLIDE. This methodology and framework have in their core the reusability of services to be more efficient (in terms of time, quality, defects, and process). Finally, to provide a more concrete approach to software development, this PhD project expands to the design and architecture area of software engineering. Given the lack of metrics for the usage of libraries, we proposed 5 metrics that capture the extent to which each library is utilized in the code-base, providing information to the software engineers on the actual utility of the library in the final product.
περισσότερα