1. Εξόρυξη Δεδομένων από Αποθήκες
Λογισμικού για Επαναχρησιμοποίηση
Λογισμικού Οδηγούμενη από Ελέγχους
Κατιρτζής Νικόλαος
Υπό την επίβλεψη του Ανδρέα Λ. Συμεωνίδη
Επίκουρου καθηγητή ΤΗΜΜΥ ΑΠΘ
Θεσσαλονίκη, 2014
ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ
ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ & ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ
ΕΡΓΑΣΤΗΡΙΟ ΕΥΦΥΩΝ ΣΥΣΤΗΜΑΤΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΛΟΓΙΣΜΙΚΟΥ
2. Εισαγωγή
Ορισμός προβλήματος
State of the art
Σκοπός της διπλωματικής
Ανάλυση του συστήματος
Πειράματα
Συμπεράσματα – Μελλοντική
εργασία
Εξόρυξη από Αποθήκες Λογισμικού για Επαναχρησιμοποίηση Οδηγούμενη από Ελέγχους
Δομή παρουσίασης
Κατιρτζής Νικόλαος 15-10-2014 2
3. Εισαγωγή
• Ψηφιακή Εποχή (Εποχή της Πληροφορίας)
• Μετάδοση της πληροφορίας μέσω του διαδικτύου
• Free software – Open Source software
• Δημιουργία αποθηκών λογισμικού
• Επαναχρησιμοποίηση κώδικα
Εξόρυξη από Αποθήκες Λογισμικού για Επαναχρησιμοποίηση Οδηγούμενη από Ελέγχους
Κατιρτζής Νικόλαος 15-10-2014 3
5. Παρόμοια συστήματα
Code Conjurer
CodeGenie
S6
FAST
Μειονεκτήματα
‒ Δε λειτουργούν πλέον!
‒ Δε χρησιμοποιούν ανανεώσιμες αποθήκες
λογισμικού
‒ Δεν έχουν υλοποιήσει κάποιο μοντέλο
mining, αλλά αναζητούν στις CSEs και
εκτελούν τα αποτελέσματα
‒ Δεν αντιμετωπίζουν τις διπλοεγγραφές
Εξόρυξη από Αποθήκες Λογισμικού για Επαναχρησιμοποίηση Οδηγούμενη από Ελέγχους
State of the art
Κατιρτζής Νικόλαος 15-10-2014 5
6. Σκοπός της διπλωματικής
Ενίσχυση του πεδίου των RSSE συστημάτων:
– Επισκόπηση της βιβλιογραφίας
– Ανάπτυξη δικού μας RSSE συστήματος για την αναζήτηση κώδικα
Το σύστημά μας:
Έχει ως βάση το TDD
Κάνει χρήση αναπτυσσόμενων αποθηκών λογισμικού
Κάνει χρήση ενός μοντέλου mining-scoring, επικεντρωμένου στο πρόβλημα που τίθεται
‒ Ανάκτηση Πληροφορίας (IR)
‒ Επεξεργασία Φυσικής Γλώσσας (NLP)
Εξόρυξη από Αποθήκες Λογισμικού για Επαναχρησιμοποίηση Οδηγούμενη από Ελέγχους
Κατιρτζής Νικόλαος 15-10-2014 6
7. Δομή του συστήματος
Εξόρυξη από Αποθήκες Λογισμικού για Επαναχρησιμοποίηση Οδηγούμενη από Ελέγχους
PARSER
TESTER
Code
Test Case
Signature
DOWNLOADER
MINER
Files
Top files
Results
Local
repo
Κατιρτζής Νικόλαος 15-10-2014 7
8. Δομή του συστήματος
Εξόρυξη από Αποθήκες Λογισμικού για Επαναχρησιμοποίηση Οδηγούμενη από Ελέγχους
PARSER
TESTER
Code
Test Case
Signature
DOWNLOADER
MINER
Files
Top files
Results
Local
repo
Κατιρτζής Νικόλαος 15-10-2014 8
9. 1
2
3
4
public class Stack{
public void push(Object o){}
public Object pop(){}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="1.0" encoding="UTF-8"?>
<files>
<file>
<package />
<imports />
<class>
<name>Stack</name>
<method>
<name>push</name>
<block>no</block>
<parameters>
<type>Object</type>
</parameters>
<return>void</return>
</method>
<method>
<name>pop</name>
<block>no</block>
<parameters />
<return>Object</return>
</method>
</class>
</file>
</files>
• Υλοποίηση με τον Java Compiler του JDK της Oracle
• Εξαγωγή υπογραφής σε μορφή xml
Parser
Εξόρυξη από Αποθήκες Λογισμικού για Επαναχρησιμοποίηση Οδηγούμενη από Ελέγχους
Κατιρτζής Νικόλαος 15-10-2014 9
10. Δομή του συστήματος
Εξόρυξη από Αποθήκες Λογισμικού για Επαναχρησιμοποίηση Οδηγούμενη από Ελέγχους
PARSER
TESTER
Code
Test Case
Signature
DOWNLOADER
MINER
Files
Top files
Results
Local
repo
Κατιρτζής Νικόλαος 15-10-2014 10
11. Αναζήτηση στο GitHub
Εξόρυξη από Αποθήκες Λογισμικού για Επαναχρησιμοποίηση Οδηγούμενη από Ελέγχους
Searchcode 30 users + 870
top Github users
Possible
queries
GitHub
Possible queries
Top 100 results
If no results found, restart
search using next query
Snippets Miner
Snippets
If no-valuable results found, restart
search using next query
Κατιρτζής Νικόλαος 15-10-2014 11
12. Regex: ([w<>[]]+)?s+(w+)?((.*?))s*(throwss*w+)*{
return type name parameters body
existence
Snippets Miner
Εξόρυξη από Αποθήκες Λογισμικού για Επαναχρησιμοποίηση Οδηγούμενη από Ελέγχους
Score fileisDuplicate score>0
file
Yes
No Yes
No
Main
list
Back-up
list
Κατιρτζής Νικόλαος 15-10-2014 12
13. • Η AGORA βασίζεται στην πλατφόρμα αναζήτησης Elasticsearch
• Περιλαμβάνει ένα μεγάλο αριθμό από projects του GitHub
• Διαθέτει API και δίνει τη δυνατότητα αναζήτησης με δομημένο ερώτημα
Αναζήτηση στην AGORA
Εξόρυξη από Αποθήκες Λογισμικού για Επαναχρησιμοποίηση Οδηγούμενη από Ελέγχους
AGORA
Query Top 200
results
Κατιρτζής Νικόλαος 15-10-2014 13
14. Δομή του συστήματος
Εξόρυξη από Αποθήκες Λογισμικού για Επαναχρησιμοποίηση Οδηγούμενη από Ελέγχους
PARSER
TESTER
Code
Test Case
Signature
DOWNLOADER
MINER
Files
Top files
Results
Local
repo
Κατιρτζής Νικόλαος 15-10-2014 14
15. Preprocessor:
Σκοπός είναι η απομάκρυνση των διπλοαρχείων (duplicates)
Χρήση του md5 hash (exact duplicates)
Miner
Εξόρυξη από Αποθήκες Λογισμικού για Επαναχρησιμοποίηση Οδηγούμενη από Ελέγχους
Preprocessor
Files Unique
files Scorer Postprocessor
Scores Top results
Κατιρτζής Νικόλαος 15-10-2014 15
16. Αρχικά, γίνεται αναπαράσταση των δεδομένων:
Ακολουθεί η δημιουργία διανυσμάτων (tf):
Έπειτα, γίνεται η βαθμολόγηση των διανυσμάτων, με χρήση μετρικών όπως η ομοιότητα
συνημιτόνου
Κείμενο Περιεχόμενο
𝒅 𝟏 bag of words of
𝒅 𝟐 items bag
𝒏 𝟏 𝒏 𝟐 𝒏 𝟑 𝒏 𝟒
𝒅 𝟏 1 2 1 0
𝒅 𝟐 1 0 0 1
Κείμενο Διάνυσμα
𝒅 𝟏 1,2,1,0
𝒅 𝟐 1,0,0,1
Μοντέλο Διανυσματικού Χώρου (VSM)
Term Term Index(𝑡)
bag 1
of 2
words 3
items 4
Εξόρυξη από Αποθήκες Λογισμικού για Επαναχρησιμοποίηση Οδηγούμενη από Ελέγχους
Κατιρτζής Νικόλαος 15-10-2014 16
17. Στη δική μας έκδοση:
Κάθε συνιστώσα έχει τιμή στο εύρος [0,1]
Λεξικό ≈ υπογραφή ερωτήματος
Το εκάστοτε διάνυσμα του ερωτήματος χρησιμοποιείται ως βάση κατά τη σύγκριση και όλες
οι συνιστώσες του είναι ίσες με 1
Διάνυσμα σε:
• Επίπεδο μεθόδου: 𝑚 = (𝑚𝑛, 𝑟𝑡, 𝑝𝑡)
• Επίπεδο κλάσης: 𝑐 = 𝑐𝑛, 𝑚𝑠1, … , 𝑚𝑠 𝑛
Μοντέλο που υλοποιήθηκε
Εξόρυξη από Αποθήκες Λογισμικού για Επαναχρησιμοποίηση Οδηγούμενη από Ελέγχους
method
class
file
Κατιρτζής Νικόλαος 15-10-2014 17
18. Βαθμολόγηση strings
Εξόρυξη από Αποθήκες Λογισμικού για Επαναχρησιμοποίηση Οδηγούμενη από Ελέγχους
Tokenizing
Stop words
removal
Short words
removal
Stemming
Levenshtein similarity
N-gram similarity
Tanimoto similarity
string
String or
tokens
Score
[0,1]
Κατιρτζής Νικόλαος 15-10-2014 18
19. Ομοιότητα συνημιτόνου…. Ή μήπως όχι;
Συντελεστής Tanimoto:
𝛵 𝑋, 𝑌 =
𝑋 ∗ 𝑌
𝑋
2
+ 𝑌
2
− 𝑋 ∗ 𝑌
0.5 1.0
X
Y0.5
1.0
Εξόρυξη από Αποθήκες Λογισμικού για Επαναχρησιμοποίηση Οδηγούμενη από Ελέγχους
Βαθμολόγηση διανυσμάτων
Κατιρτζής Νικόλαος 15-10-2014 19
20. Μέθοδος
ερωτήματος
𝒔𝒎𝒊
Μέθοδος αρχείου
αποθήκης
𝒙𝒎𝒊
int add(int i, int j) 0 int add(int i, int j) 0
int subtract(int i, int j) 1 int multiply(int i, int j) 1
int multiply(int i, int j) 2
int divide(int i, int j) 3
𝒔𝒎𝒊 𝒙𝒎𝒊 score
0
0 1.0
1 0.5
1
0 0.5
1 0.5
2
0 0.5
1 1.0
3
0 0.5
1 0.5
𝑢 = [1.0, 0.0, 1.0, 0.0
Stable Marriage Problem
Εξόρυξη από Αποθήκες Λογισμικού για Επαναχρησιμοποίηση Οδηγούμενη από Ελέγχους
𝒔𝒎𝒊 𝒙𝒎𝒊 score𝒔𝒎𝒊 𝒙𝒎𝒊 score
0 0 1.0
𝒔𝒎𝒊 𝒙𝒎𝒊 score
0 0 1.0
2 1 1.0
𝒔𝒎𝒊 𝒙𝒎𝒊 score
0 0 1.0
2 1 1.0
0 1 0.5
𝒔𝒎𝒊 𝒙𝒎𝒊 score
0 0 1.0
2 1 1.0
0 1 0.5
1 0 0.5
𝒔𝒎𝒊 𝒙𝒎𝒊 score
0 0 1.0
2 1 1.0
0 1 0.5
1 0 0.5
1 1 0.5
2 0 1.0
2 1 0.5
3 0 0.5
3 1 0.5
Κατιρτζής Νικόλαος 15-10-2014 20
21. Δομή του συστήματος
Εξόρυξη από Αποθήκες Λογισμικού για Επαναχρησιμοποίηση Οδηγούμενη από Ελέγχους
PARSER
TESTER
Code
Test Case
Signature
DOWNLOADER
MINER
Files
Top files
Results
Local
repo
Κατιρτζής Νικόλαος 15-10-2014 21
22. Tester
Εξόρυξη από Αποθήκες Λογισμικού για Επαναχρησιμοποίηση Οδηγούμενη από Ελέγχους
Create
projects
Copy src/
test files
Modify src/
test files
Compile src/
test files
Run test cases
Src files
Test file
Results
Κατιρτζής Νικόλαος 15-10-2014 22
23. Μετρικές αξιολόγησης αποτελεσμάτων
+Μήκος αναζήτησης (search length): Ο αριθμός των μη σχετικών αποτελεσμάτων που πρέπει να δει
ο χρήστης, έως ότου βρει Ν σχετικά.
Η σχετικότητα όμως κατά τον Mooney είναι… σχετική!
Αν όμως passed ≈ σχετικό αποτέλεσμα;
Recall
𝑪 = 𝐶𝑜𝑚𝑝𝑖𝑙𝑎𝑏𝑙𝑒 =
1
𝑁
#𝑐𝑜𝑚𝑝𝑖𝑙𝑎𝑏𝑙𝑒
𝑷 = 𝑃𝑎𝑠𝑠𝑒𝑑 =
1
𝑁
#𝑝𝑎𝑠𝑠𝑒𝑑
Precision
%
𝑷
𝑪
=
% 𝑃
% 𝐶
∗ 100%
%
𝑷
𝑪
=
1
𝑁
#𝑝𝑎𝑠𝑠𝑒𝑑
#𝑐𝑜𝑚𝑝𝑖𝑙𝑎𝑏𝑙𝑒
∗ 100%
Πειράματα
Εξόρυξη από Αποθήκες Λογισμικού για Επαναχρησιμοποίηση Οδηγούμενη από Ελέγχους
Κατιρτζής Νικόλαος 15-10-2014 23
25. Εξόρυξη από Αποθήκες Λογισμικού για Επαναχρησιμοποίηση Οδηγούμενη από Ελέγχους
Πείραμα 1 – Σύγκριση με CSEs
Κατιρτζής Νικόλαος 15-10-2014 25
26. Εξόρυξη από Αποθήκες Λογισμικού για Επαναχρησιμοποίηση Οδηγούμενη από Ελέγχους
Πείραμα 1 – Σύγκριση με CSEs
Κατιρτζής Νικόλαος 15-10-2014 26
27. Εξόρυξη από Αποθήκες Λογισμικού για Επαναχρησιμοποίηση Οδηγούμενη από Ελέγχους
Πείραμα 2 – Σύγκριση με το FAST
Κατιρτζής Νικόλαος 15-10-2014 27
28. Εξόρυξη από Αποθήκες Λογισμικού για Επαναχρησιμοποίηση Οδηγούμενη από Ελέγχους
Πείραμα 3 – Σύγκριση με το Code Conjurer
Κατιρτζής Νικόλαος 15-10-2014 28
29. Αντιλαμβανόμαστε ότι:
Δεν αρκούν οι Μηχανές Αναζήτησης Κώδικα για το πρόβλημά μας
Δεν αρκεί η απλή εφαρμογή του VSM
Είναι σημαντική η πληροφορία της εκτελεσιμότητας
Πιθανές επεκτάσεις:
Προσθήκη άλλων CSEs
Διευκόλυνση του χρήστη στη δημιουργία ερωτήματος (χρήση λέξεων κλειδιών)
Feedback χρήστη
Επέκταση σε άλλες γλώσσες προγραμματισμού
Εξόρυξη από Αποθήκες Λογισμικού για Επαναχρησιμοποίηση Οδηγούμενη από Ελέγχους
Συμπεράσματα – Μελλοντικές Επεκτάσεις
Κατιρτζής Νικόλαος 15-10-2014 29
30. Εξόρυξη από Αποθήκες Λογισμικού για Επαναχρησιμοποίηση Οδηγούμενη από Ελέγχους
Welcome to Mantissa!
Κατιρτζής Νικόλαος 15-10-2014 30
31. Εξόρυξη από Αποθήκες Λογισμικού για Επαναχρησιμοποίηση Οδηγούμενη από Ελέγχους
Ερώτημα
Κατιρτζής Νικόλαος 15-10-2014 31
32. Εξόρυξη από Αποθήκες Λογισμικού για Επαναχρησιμοποίηση Οδηγούμενη από Ελέγχους
Αποτελέσματα!
Κατιρτζής Νικόλαος 15-10-2014 32
33. Εξόρυξη από Αποθήκες Λογισμικού για Επαναχρησιμοποίηση Οδηγούμενη από Ελέγχους
Ερωτήσεις;
Κατιρτζής Νικόλαος 15-10-2014 33
Editor's Notes
Mining Software Repositories for Test-Driven Reuse
Ψηφιακή Εποχή (τέλη δεκαετίας 80) -> έκρηξη πληροφοριών -> εύκολη μετάδοση μέσω διαδικτύου
Free Software Foundation, Open-Source Initiative, Αποθήκες Λογισμικού
Επαναχρησιμοποίηση λογισμικού (McIlroy)
Σχηματισμός ερωτήματος
Λίστα αποτελεσμάτων
RSSE συστήματα
TDD
Python + Java (για Parser)
Αναζήτηση για Java
Ανερχόμενη CSE
Επαυξημένες δυνατότητες για αναζήτηση
API για επικοινωνία με clients
Το διάνυσμα μεθόδου έχει ως συνιστώσες το score για το όνομα, τον τύπο και τις παραμέτρους της μεθόδου.
Τα διανύσματα μεθόδων των αρχείων της αποθήκης θα συγκριθούν με αυτά του ερωτήματος και για κάθε μέθοδο του ερωτήματος θα προκύψει ένα score.
Τα scores αυτά θα αποτελέσουν τις συνιστώσες του διανύσματος του επόμενου επιπέδου, του διανύσματος κλάσης, το οποίο περιλαμβάνει και μία συνιστώσα για το όνομα της κλάσης.