Περίληψη |
Το μέγεθος του πηγαίου κώδικα των συστημάτων λογισμικού σήμερα αυξάνεται εκθετικά. Τα εμπορικά συστήματα λογισμικού όπως τα παιχνίδια αποτελούνται από εκατοντάδες χιλιάδες γραμμές κώδικα. Το κυρίως πρόβλημα της ανάπτυξης ενός συστήματος τέτοιας κλίμακας συνδέεται με θέματα συντήρησης και επέκτασης. Η τεχνολογία ανάπτυξης τέτοιων συστημάτων επικεντρώνεται κυρίως στο σχεδιαστικό επίπεδο, όπου η χρήση προηγμένων προγραμματιστικών τεχνικών κρίνεται απαραίτητη. Η ανάπτυξη λογισμικού οδηγούμενη από μοντέλα (Model-Driven Engineering, MDE) είναι μία προηγμένη προγραμματιστική τεχνική η οποία βασίζεται στη δημιουργία, επαναχρησιμοποίηση και εξέλιξη μοντέλων. Γενικά, το MDE επικαλείται εργαλεία, μοντέλα, διεργασίες, μεθόδους και αλγόριθμους που αντιμετωπίζουν το απαιτητικό πρόβλημα της (ημί-) αυτόματης παραγωγής πηγαίου κώδικα. Από τη μια πλευρά η χρησιμοποίηση εργαλείων βελτιώνει την εφαρμογή του MDE, από την άλλη όμως προκαλούνται αρκετά προβλήματα. Ένα από τα πιο σοβαρά προβλήματα αφορά θέματα συντήρησης που βρίσκονται εγγενώς στα εργαλεία παραγωγής κώδικα που βασίζονται σε μοντέλα. Το πρόβλημα αυτό εμφανίζεται κατά την διάρκεια του κύκλου ανάπτυξης λογισμικού. Συγκεκριμένα, ο αυτόματα παραγόμενος πηγαίος κώδικας τροποποιείται και συμπληρώνεται κατάλληλα από τους προγραμματιστές ώστε να ολοκληρωθεί το υπό ανάπτυξη έργο. Ο πηγαίος κώδικας που προστίθεται με το χέρι χάνεται όταν ξαναδημιουργηθεί ο αυτόματα παραγόμενος πηγαίος κώδικας από ένα μοντέλο. Παρόλο που το MDE χρησιμοποιείται ευρέως ως μεθοδολογία κατασκευής λογισμικού, συνήθως είναι απομονωμένο από την υπόλοιπη διαδικασία που λαμβάνει χώρα σε ολοκληρωμένα περιβάλλοντα ανάπτυξης (IDE). Παρότι υπάρχουν MDE εργαλεία που διατίθενται ως επεκτάσεις σε κάποια IDE, ωστόσο ένας μεγάλος αριθμός από αυτά δεν ενσωματώνονται επαρκώς.
Σε αυτή την εργασία, προτείνουμε μια εναλλακτική προσέγγιση για MDE, χρησιμοποιώντας ένα προηγμένο χαρακτηριστικό, τον μετα-προγραμματισμό, ο οποίος υποστηρίζεται από αρκετές γλώσσες προγραμματισμού. Η προσέγγιση μας είναι βασισμένη στις ακόλουθες αρχές: (i) το MDE εργαλείο επικαλείται σαν μέρος της αποτίμησης του μετα-προγράμματος, (ii) αντί να παραχθεί πηγαίος κώδικας, το MDE εργαλείο δημιουργεί τμήματα κώδικα στην μορφή αφηρημένων συντακτικών δέντρων (AST), (iii) τα δημιουργημένα τμήματα κώδικα εισάγονται άμεσα στο κυρίως πηγαίο πρόγραμμα μέσω μακροεντολών του μετα-προγράμματος, και (iv) το πρόγραμμα που προκύπτει ενσωματώνει τον αυτόματα παραγόμενο κώδικα με τον επιπλέον κώδικα της εφαρμογής και μεταγλωττίζεται κανονικά ώστε να παραχθεί η τελική εφαρμογή.
Έχουμε εφαρμόσει την προτεινόμενη προσέγγιση στην γλώσσα προγραμματισμού Delta, η οποία υποστηρίζει μετα-προγραμματισμό κατά τη μεταγλώττιση (compile-time metaprogramming). Τέλος, έχουμε αναπτύξει αρκετά σενάρια χρήσης ώστε να ελέγξουμε την εγκυρότητα και την αποτελεσματικότητα της προσέγγισής μας.
|