Page 298 - 《软件学报》2024年第6期
P. 298
2874 软件学报 2024 年第 35 卷第 6 期
CodeSearch Challenge [23] 的 99 个真实场景 Query 作为查询, 并剔除掉查询文本长度短于 3 个单词的 Query, 只选取
前 50 个 Query 用于实验测试. 由于这时的查询来自于真实场景, 相应返回的代码片段也不应该来自于小型测试
集, 应该是完全不同于训练语料代码库 CSN-Python 的另一个大型的代码库, 这里本文使用 CodeSearch Challenge [23]
的代码搜索库, 其中包含大约 115 万个代码片段. 注意这里的代码搜索库量级是远远大于训练模型的代码库的, 并
且二者包含的代码片段是没有交集的. 训练模型的代码库包含的是成对的代码片段和相关注释, 而这里的代码搜
索库的代码片段是没有成对的注释的, 这样的数据集在面对真实查询时能够在一定程度上反应模型的泛化能力.
由于 FB-Java 数据集不是来自于 CodeSearch Corpus [23] , 我们只在 CSN-Python 数据集上进行真实用户查询的
评测. 为了直观地展示搜索效果, 以 FRank 作为评估标准. FRank 指标的结果符合人们浏览信息由上至下的准则,
其值越小就表示找到最好结果花费的搜索工作量越小, 也说明搜索结果越靠前. 因此 FRank 衡量单个查询搜索结
果是有效的. 表 6 展示了两个算法搜索返回前 10 名结果的 FRank 值, NF 表示没有搜索到一个相关的正确结果.
表 6 在 FRank 上的评估结果
Query GraphSearchNet GraphCS
Convert int to string 1 1
2
String to date 3 5
Sort string list 3 1
Save list to file 2 1
Set working directory 2 3
Group by count 5 3
Socket recv timeout 3 NF
Convert decimal to hex 7 4
Export to Excel 7 NF
Convert JSON to CSV 3 2
Pretty print JSON 1 1
Replace in file 4 3
k means clustering NF 4
Connect to SQL 2 1
HTML encode string NF 2
Finding time elapsed using a timer 2 6
Parse binary file to custom class NF 3
Get current IP address 5 4
Convert int to bool 2 5
Read text file line by line 1 1
Get executable path 4 7
httpclient post JSON 1 1
Get inner HTML 1 1
Convert string to number 1 1
Map to JSON 1 2
Parse JSON file 2 1
Get current observable value 7 4
Get name of enumerated value NF NF
How to empty array 1
How to get current date 1 1
How to make the checkbox checked 3 3
How to reverse a string NF 3
Read properties file NF 9
Copy to clipboard 1 1
Convert HTML to pdf 1 2
JSON to XML conversion 10 5
How to randomly pick a number 1 1