Περίληψη:
Τα συστήματα λογισμικού είναι συνήθως μεγάλα και πολύπλοκα, κατά συνέπεια η κατανόηση της δομής τους είναι δύσκολη. Ένας από τους λόγους που συντελούν σε αυτή την πολυπλοκότητα είναι ότι ο πηγαίος κώδικας αποτελείται από πολλές διαφορετικού τύπου οντότητες που εξαρτώνται μεταξύ τους με περίπλοκους τρόπους. Επιπλέον από τη στιγμή που ένας μηχανικός λογισμικού κατανοήσει τη δομή ενός συστήματος είναι δύσκολο να διατηρηθεί αυτή η κατανόηση εφόσον η δομή του συστήματος τείνει να αλλάζει κατά τη συντήρηση. Ως εκ τούτου απαιτούνται κατάλληλες γενικεύσεις για τη δομή του συστήματος. Τα εργαλεία συσταδοποίησης λογισμικού χρησιμοποιούνται για τη δημιουργία αυτών των γενικεύσεων. Στην εργασία αυτή περιγράφονται αλγόριθμοι αναζήτησης που στοχεύουν στη συσταδοποίηση του λογισμικού. Το εργαλείο που αναπτύχθηκε παράγει ένα υποσύστημα αποσύνθεσης μέσω της κατάτμησης ενός γράφου, ο οποίος αποτελείται από τις οντότητες του πηγαίου κώδικα και τις μεταξύ τους σχέσεις, χρησιμοποιώντας μια συνάρτηση καταλληλότητας για την αξιολόγηση της ποιότητας των κατατμήσεων και έναν αλγόριθμο αναζήτησης για την εύρεση ικανοποιητικής λύσης.