Εργαλεία και τεχνικές ανάπτυξης

Διομήδης Σπινέλλης
Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας
Οικονομικό Πανεπιστήμιο Αθηνών
dds@aueb.gr

Ταξινόμηση εργαλείων

Μπορούμε να διαχωρίσουμε τα εργαλεία λογισμικού στις παρακάτω κατηγορίες (Houghton 1983):

Διορθωτές

Ένας καλός διορθωτής (editor) προγραμμάτων υποστηρίζει τις παρακάτω δυνατότητες: Το περιβάλλον του διορθωτή vim

Διερμηνευτές και μεταγλωττιστές

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

Γεννήτριες κώδικα

Μια σειρά από εργαλεία και τεχνικές βασίζονται στην αυτόματη δημιουργία κώδικα. Παραδείγματα:

Παραδείγματα wizard



Αποσφαλματωτές

Ο αποσφαλματωτής επιτρέπει: Αποσφαλμάτωση στο περιβάλλον Microsoft Visual Studio

Αναλυτές κατανομής

Ένας αναλυτής κατανομής εκτέλεσης (execution profiler) επιτρέπει:

Φυλλομετρητές

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

Σύστημα βοήθειας

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

Ολοκληρωμένα περιβάλλοντα ανάπτυξης

Περιβάλλοντα εργαλειοσυνόλων

Ένα περιβάλλον εργαλειοσυνόλων περιλαμβάνει σε ένα οργανωμένο σύνολο μια σειρά από εργαλεία που συνεργάζονται αρμονικά μεταξύ τους. Για παράδειγμα σύγχρονες εκδόσεις του λειτουργικού συστήματος Unix παρέχουν τα παρακάτω:

Ολοκλήρωση της διαδικασίας μεταγλώττισης

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

Ανάπτυξη με γλώσσες εξειδικευμένου πεδίου

Σύζευξη γνωστικού πεδίου - λογισμικού

Απαιτήσεις διαλεκτικής επαΐοντα

Αξιοποίηση γνωστικών δεξιοτήτων
Υποστήριξη φορμαλισμών του γνωστικού πεδίου
Δημοσίευση
Διάχυση, εκπαίδευση, ανασκόπηση
Ανασκόπηση από ομότιμους επαΐοντες
Αρχειοθέτηση
Σε μορφή κατάλληλη για ανιχνευσιμότητα
Επιλεκτική επέμβαση
Βελτίωση, συντήρηση, υποστήριξη
Επαναχρησιμοποίηση

Προβλήματα των γλωσσών γενικής χρήσης

Δύσκολες στην εκμάθηση
C++ 1997 910 σ.
Απαιτούν μεγάλες βιβλιοθήκες υποστήριξης
Windows API 3433 συναρτήσεις
Ακατάλληλες για συγκεκριμένες εφαρμογές
Συστήματα πελάτη εξυπηρετητή
Απόσταση από το φορμαλισμό του επαΐοντα

Γλώσσες εξειδικευμένου πεδίου (ΓΕΠ)

Παράδειγμα ΓΕΠ στην υλοποίηση μεταγλωττιστών

Παράδειγμα: κώδικας yacc:
unary_expression
: postfix_expression
'+' cast_expression   { $$ = $2; }
'-' cast_expression   { $$ = -$2; }
'~' cast_expression   { $$ = ~$2; }
'!' cast_expression   { $$ = !$2; }
;

cast_expression
: unary_expression
;

multiplicative_expression
: cast_expression
| multiplicative_expression '*' cast_expression { $$ = $1 * $3; }
| multiplicative_expression '/' cast_expression 
                {
                        if ($3 == 0) {
                                Error::error(E_ERR, "division by zero in #if expression");
                                $$ = 0;
                        } else
                                $$ = $1 / $3;
                }
| multiplicative_expression '%' cast_expression
                {
                        if ($3 == 0) {
                                Error::error(E_ERR, "modulo division by zero in #if expression");
                                $$ = $1;
                        } else
                                $$ = $1 / $3;
                }
;

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

Ασκήσεις

  1. Εξετάστε τα εργαλεία που χρησιμοποιείτε στην ανάπτυξη του λογισμικού σας και χωρίστε τα σε κατηγορίες σύμφωνα με την ταξινόμηση που προτείναμε.
  2. Ερευνήστε ποια νέα εργαλεία θα αύξαναν την παραγωγικότητά σας και αρχίστε να τα χρησιμοποιείτε.