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
   293   294   295   296   297   298   299   300   301   302   303