本发明属于计算机,尤其是软件质量保障领域。本发明提供了一种面向软件开发的、基于机器学习模型的stackoverflow问答更新情况的预测方法,帮助开发者修复缺陷并控制软件产品的质量。
背景技术:
1、软件项目不仅由源代码组成,还包括了注释、说明文档、编译系统等。代码实体之间也往往彼此相关,即开发者在修改代码时往往要共同更新大量有联系的实体,在大项目中尤为明显。开发者们可以根据共同演化信息来将代码重模块化(remodularization),且这种共同演化的关系是一种逻辑上的、潜在的依赖,无法直接从源代码中理解到。还有研究者定义了共同演化图(co-changegraph),即用实体的集合作为点、实体的共同演化关系作为边的无向图。图中的边根据共同演化的次数赋予了权重,之后用聚类算法将频繁共同演化的实体分在一起。
2、为了利用共同演化信息协助开发,开发者提出了一些预测模型。对stackoverflow问答的文本信息使用lda模型,可以将stackoverflow问题根据主题分类。在此基础上,可以为这些问题按照重要性排序。使用nlp技术来解析答案,可以发现重复问题也能提供额外的知识。此外,活跃的github用户倾向于在stackoverflow多回答而少提问。对stackoverflow和android教程中的重复代码进行分析,可以发现二者间有超过1,400段重复代码,与30%的android相关问题有关,都是在android开发者无法理解教程文档时提出的。
3、在考虑stackoverflow社区的互动和软件项目代码的演化方面,现有研究并未将二者很好地结合。sotorrent中包含一个表格,其中记录了github仓库的代码中包含的对stackoverflow网页的引用。但这样的链接仅仅表示github开发者引用了某个问题或回答,却没有对引用的模式、引用的分布和场景以及对软件项目的影响等内容进行深入探索。我们希望研究开发者在引用stackoverflow问答时的场景、作用,在选择引用对象时有何考量;在引用发生后,stackoverflow问答是否更新,其更新又如何影响开发者的行为。
4、在stackoverflow答案质量方面,过去的研究者往往将重心放在用户和社区的互动,如怎样提高问题的被采纳概率、怎样分辨需要改进的答案等。很少有研究考虑到那些引用了答案的开发者的需求。在引用了问答之后,开发者往往没有精力在一段时间后再次检查被引用的问题,并从中汲取知识来完善自己的代码。作为一个高度活跃的社区,stackoverflow上的持续更新的价值无法被这些开发者获得。
技术实现思路
1、本发明提供了一种基于机器学习模型的stackoverflow问答更新情况预测方法,该方法使用sotorrent数据集获取引用了stackoverflow问答的github项目,并通过版本控制软件git中的gitclone命令获取这些项目的源程序代码;接着对项目的源程序代码进行正则表达式匹配,提取被引用的stackoverflow问答的id;之后利用stackoverflow的api获取这些问答的信息并提取度量;接下来根据问答的编辑记录为每个样例打标记,并使用机器学习算法生成预测模型;最后,对开发者新引用的stackoverflow问答进行预测,根据预测结果提示开发者关注需要进一步编辑的答案的更新情况,从而在软件开发过程中辅助开发人员修复缺陷和进行软件质量保证。
2、为达成上述目的,本发明提出一种基于机器学习模型的stackoverflow问答更新情况预测方法。方法包括下列步骤:
3、1)从sotorrent获取引用了stackoverflow问答的github项目信息;
4、2)获取github项目中的引用注释,提取被引用的stackoverflow问答的度量;
5、3)根据引用后的问答更新情况生成样例集;
6、4)使用机器学习算法建立stackoverflow问答更新情况的预测模型;
7、5)当开发者引用stackoverflow问答时,使用机器学习模型预测该问答未来是否需要更新或有更好的答案出现。
8、进一步,其中上述步骤1)的具体步骤如下:
9、步骤1)-1:起始状态;
10、步骤1)-2:在公开数据库sotorrent上找到引用了stackoverflow问答的项目仓库,使用gitclone指令将远程软件项目的源程序代码拷贝到本地;
11、步骤1)-3:github项目信息采集完毕。
12、进一步,其中上述步骤2)的具体步骤如下:
13、步骤2)-1:起始状态;
14、步骤2)-2:对github项目的源程序代码逐行扫描,利用正则表达式匹配包含了stackoverflow网址的代码;
15、步骤2)-3:根据网址包含的id,使用stackoverflow的api获取相关问答的数据并提取度量;
16、步骤2)-4:被引用stackoverflow问答的度量生成完毕。
17、进一步,其中上述步骤3)的具体步骤如下:
18、步骤3)-1:起始状态;
19、步骤3)-2:根据被引用stackoverflow问答的编辑记录,判断github项目引用后是否更新过或出现了更好的答案,作为标记建立样例集;
20、步骤3)-3:被引用stackoverflow问答的更新情况的样例集完毕。
21、进一步,其中上述步骤4)的具体步骤如下:
22、步骤4)-1:起始状态;
23、步骤4)-2:使用样例集,基于随机森林算法生成模型;
24、步骤4)-3:stackoverflow问答更新情况的预测模型生成完毕。
25、进一步,其中上述步骤5)的具体步骤如下:
26、步骤5)-1:起始状态;
27、步骤5)-2:在开发者引用stackoverflow问答时,提取该问答的度量;
28、步骤5)-3:基于步骤4)生成的模型,预测被引用的问答是否会更新或被更好的答案取代;
29、步骤5)-4:将步骤5)-3中会被更新的问答报告给开发者,提醒开发者跟进其更新;
30、步骤5)-5:stackoverflow问答更新情况预测完毕。
31、本发明基于sotorrent数据集,收集github上引用了stackoverflow问答的项目和被引用的问答信息,对问答被引用后的更新情况建模并进行预测;在识别需要更新的问答后同志开发者,提供了一种面向软件开发的、基于机器学习模型的stackoverflow问答更新情况的预测方法,解决了目前软件代码缺乏与stackoverflow问答的共同更新的问题,进而帮助开发者修复缺陷,提高软件的鲁棒性,从而能更好地控制软件产品的质量。
1.一种基于随机森林模型的stackoverflow问答更新情况预测方法,其特征是一个预测模型,用于预测stackoverflow问答更新情况,主要包括以下流程:
2.根据权利要求2所述的基于随机森林模型的stackoverflow问答更新情况预测方法,其特征在于在公开数据库sotorrent上找到引用了stackoverflow问答的项目仓库,使用gitclone指令将远程软件项目的源程序代码拷贝到本地;
3.根据权利要求2所述的基于随机森林模型的stackoverflow问答更新情况预测方法,其特征在于对github项目的源程序代码逐行扫描,利用正则表达式匹配包含了stackoverflow网址的代码;根据网址包含的id,使用stackoverflow的api获取相关问答的数据并提取度量;
4.根据权利要求3所述的基于随机森林模型的stackoverflow问答更新情况预测方法,其特征在于根据被引用stackoverflow问答的编辑记录,判断github项目引用后是否更新过或出现了更好的答案,作为标记建立样例集,基于随机森林算法生成模型;
5.根据权利要求4所述的基于随机森林模型的stackoverflow问答更新情况预测方法,其特征在于开发者引用stackoverflow问答时,提取该问答的度量并预测被引用的问答是否会更新或被更好的答案取代;将会被更新的问答报告给开发者,提醒开发者跟进其更新。