Software library reuse promotes efficient and effective software development, as it leads to improvement in the overall quality, reduces time-to-market and lets developers write application specific code instead of reinventing the wheel. The availability of a huge amount of reusable libraries facilitates effective software development. Code repositories provide an increasingly large number of such libraries. However, manually identifying which ones are relevant for a specific implementation is a fastidious and time consuming task for developers. In this work we focus at the early stages of software development, where finding appropriate libraries is based solely on a keyword-based description of the software. Existing recommendation systems rely on the similarity of such keywords with the descriptions of reusable libraries. This method, however, does not take into consideration the popularity of each library and the semantic similarity of searched keywords with other software entities, other than the library itself, like, for example, the descriptions of projects that use these libraries. In order to encompass in one model both the semantic similarity and the popularity of reusable libraries, we propose a collaborative filtering approach. More specifically, we organize in a relational graph keywords and libraries, such that an edge between a keyword and a library corresponds to the usage of this keyword in the description of a software project that uses this library. Given this structure, we use variants of the PageRank algorithm in order to rank the nodes of this graph depending on their relevance to a set of keywords that describe the software we want to develop. Based on this ranking, we recommend the libraries with the highest rank. We compare our method to existing library search methods on two datasets that list dependencies of Java projects, where we use the Project title as a short description. Our method performs better than the simple similarity based approach, with an execution time of a fraction of a second and could be modified in order to make heterogeneous predictions.
Static Analysis of Python code and Identification of Potential Security Vulne...
Keyword-based software library recommendation in order to bootstrap software development
1. Πρόταση βιβλιοθηκών σχετικών με
λέξεις-κλειδιά για την εκκίνηση της
διαδικασίας ανάπτυξης λογισμικού
Διπλωματική εργασία
Εκπόνηση:
Δημήτριος Βαδικόλιας
ΑΕΜ : 7656
Επιβλέποντες:
Καθηγητής Ανδρέας Συμεωνίδης
Υπ. Διδάκτωρ Εμμανουήλ Κρασανάκης
Intelligent Systems & Software
Engineering Labgroup
Πολυτεχνική Σχολή
Τμήμα Ηλεκτρολόγων Μηχανικών και
Μηχανικών Υπολογιστών
2. Κίνητρο
Επιτάχυνση ανάπτυξης → πρόταση σχετικών βιβλιοθηκών
• κατά το αρχικό στάδιο της ανάπτυξης
• βάσει λέξεων-κλειδιών που περιγράφουν το λογισμικό
3. Βιβλιογραφία πρότασης βιβλιοθηκών
α) Βάσει ομοιότητας περιγραφών τους
(π.χ. αναζήτηση “XML” επιστρεφόμενη βιβλιοθήκη ‘Jackson XML’)
• αγνοεί πρότυπα κοινής χρήσης
β) Βάσει ήδη χρησιμοποιούμενων σε έργα
(π.χ. συλλογικό φιλτράρισμα, γράφοι εξαρτήσεων)
• αγνοεί λέξεις-κλειδιά
Από περιγραφές έργων;
6. Προτεινόμενη μεθοδολογία
Εξαγωγή λέξεων-κλειδιών από περιγραφές έργων λογισμικού
Κατασκευή γράφου συσχετίσεων βιβλιοθηκών με λέξεις κλειδιά.
Πρόταση βάσει σημασιολογικών συσχετίσεων και δημοτικότητας
7. Επιλογή καταλληλότερων βιβλιοθηκών
• Χρήση φίλτρων γράφου
(αναλύουν συσχετίσεις μεταξύ κόμβων για βαθμολόγηση του πόσο “κοντά” είναι όλοι οι κόμβοι
στο δοσμένο σύνολο από λέξεις-κλειδιά)
• Εφαρμογή προσωποποιημένου PageRank
(φίλτρο γράφων ισοδύναμο με τυχαίους περιπάτους με επανεκκίνηση)
𝑷𝑷𝑹 = 𝛼 ∙ 𝑃 ∙ 𝑷𝑷𝑹 + (1 − 𝑎) ∙ 𝒑𝒆𝒓𝒔𝒐𝒏𝒂𝒍𝒊𝒛𝒂𝒕𝒊𝒐𝒏_𝒗𝒆𝒄𝒕𝒐𝒓
16. Μελλοντική εργασία
• Εξαγωγή λέξεων-κλειδιών από πληρέστερη περιγραφή
• Cache αποτελέσματα του PageRank λόγω γραμμικότητας
• Εφαρμογή μεθόδων σε γράφους συσχετίσεων άλλων οντοτήτων με
λέξεις-κλειδιά