To PropEr είναι ένα εργαλείο ανοιχτού λογισμικού για τον αυτόματο τυχαίο έλεγχο
ιδιοτήτων συναρτήσεων, γραμμένων στη γλώσσα Erlang, από τις προδιαγραφές τους.
Αρχικά ήταν επικεντρωμένο στον έλεγχο αγνών συναρτήσεων. Ωστόσο, οι εφαρμογές
που υλοποιούνται σε Erlang συνήθως αποτελούνται από κώδικα με εσωτερική
κατάσταση.
Στην παρούσα διπλωματική εργασία, έχουμε επεκτείνει το PropEr με δύο
βιβλιοθήκες που υποστηρίζουν τον τυχαίο ελέγχο συστημάτων με εσωτερική
κατάσταση βάσει μοντέλου. Ο χρήστης καλείται να προσδιορίσει ένα μοντέλο της
συμπεριφοράς του συστήματος υπό έλεγχο. Δεδομένου αυτού του μοντέλου, ελέγχουμε
ένα σύστημα παράγοντας και εκτελώντας ακολουθίες κλήσεων προς αυτό, ενώ
καταγράφουμε τις αποκρίσεις του ώστε να επιβεβαιώσουμε ότι το σύστημα
παρουσιάζει την αναμενόμενη συμπεριφορά.
Η πρώτη βιβλιοθήκη, που ονομάζεται proper\_statem, έχει σχεδιαστεί για
τον έλεγχο γενικευ- μένων εξυπηρετητών και άλλων συστημάτων των οποίων η διεπαφή
παρουσιάζει εσωτερική κατάσταση. Οι παρενέργειες των συστημάτων προσδιορίζονται
μέσω μίας αφηρημένης μηχανής κατάστασης. Η ίδια μηχανή κατάστασης μπορεί επίσης
να χρησιμοποιηθεί για την παραγωγή ακολουθιών κλήσεων, οι οποίες θα εκτελεστούν
παράλληλα για τον εντοπισμό συνθηκών ανταγωνισμού. Η δεύτερη βιβλιοθήκη, που
ονομάζεται proper\_fsm, προσφέρεται για τον έλεγχο συστημάτων που
παρουσιάζουν συμπεριφορά μηχανής πεπερασμένης κατάστασης, αφού είναι
σχεδιασμένη ώστε να φέρνει την περιγραφή του μοντέλου του συστήματος πολύ κοντά
σε ένα διάγραμμα κατάστασης.
Ο προσδιορισμός ενός μοντέλου για το σύστημα υπό έλεγχο δεν είναι σε καμία
περίπτωση τετριμμένη διαδικασία. Γι'αυτό το λόγο, παρουσιάζουμε λεπτομερή
επεξηγηματικά παραδείγματα σχετικά με την αποτελεσματική χρήση των νέων
βιβλιοθηκών για τον έλεγχο συστημάτων με εσωτερική κατάσταση.
PropEr is an open-source tool for automated random testing of Erlang function
properties from specifications. Its original focus was on testing pure
functions. Nevertheless, projects implemented in Erlang typically consist of
stateful code. In this thesis, we have extended PropEr with two library modules
that support random model-based testing of stateful reactive systems. The model
behaviour of the system under test should be defined in a callback module.
Given this model, we test a stateful system by generating and performing
sequences of calls to that system, while monitoring its actual responses to
ensure the system behaves as expected.
The first module, proper\_statem, is designed to test generic servers and other
systems with stateful interfaces, whose side-effects are specified via an
abstract state machine. The same state machine specification can also be used
for generating sequences of calls that will be executed in parallel to test for
race conditions. The second module, proper\_fsm, offers a convenient way
to test systems exhibiting a finite state machine behaviour, as it is designed
to bring the callback module specification very close to a state diagram.
Defining a model of the system under test is by no means a trivial task.
To compensate for that, we present detailed tutorials on effectively using the
new library modules to test stateful systems.