论文部分内容阅读
近年来,随着开源软件社区逐渐发展壮大,越来越多的开发者参与了社区中软件的开发、演化和维护活动,并认识到开源软件社区中历史数据资源的价值,但是在超量信息环境下,“信息过载”问题日趋严重,面临着以下挑战:(1)开发人员在开源社区相互协作或参与他们感兴趣的项目开发时,通常会搜索与其开发工作相关的项目,以复用其功能和特性。但是,由于开源软件社区存在海量的项目,他们寻找到自己真正感兴趣的项目,需要花费大量的时间和精力,并且不同的开发者可能对相关项目有不同的需求,所以向开发人员推荐相关项目非常困难。(2)在软件系统的演化过程中,用户会不断提出新的功能请求以对软件进行维护。为实现这些新的功能,开发人员通常使用现有的第三方库并利用其中的应用程序编程接口(Application programming interface,API)来实现这些新功能。然而,究竟选择哪些API、在什么位置以及如何使用这些API,解决这些问题对开发人员来说耗时且费力。(3)由于软件缺陷(bug)的复杂性和历史原因,大多软件bug往往不是一个开发人员就能解决的,开发人员在修改之前需要探讨bug问题,并且当开发人员在完成修复bug任务碰到困难时,他们需要快速找到合适的交流对象以提高修改软件bug的效率。现有的开发人员推荐技术都致力于推荐一个最合适的开发人员修复软件bug,不能帮助开发人员找到合适的交流对象,这样就降低了软件维护效率。为了应对以上这些挑战,本文开展了以下的工作:(1)提出了一种面向GitHub的个性化软件项目的推荐方法。该方法基于项目的特点和用户对其他项目的行为,针对每一个开发者给出Top-N的个性化推荐。此外,该方法还整合了用户反馈以进一步提高推荐的准确度。从GitHub爬取的数据进行了实证研究,结果表明该方法可以为开发者准确地推荐相关软件项目。(2)提出了使用特征定位技术将功能相关的源代码文件标识为API的使用位置,基于API的使用位置,通过挖掘历史功能请求库和API库来进行API方法的推荐。为评估本方法的有效性,在五个Java项目的5000多个功能请求中进行了实验验证,结果表明了本方法的有效性。(3)开发了一个针对软件bug修复的推荐工具,该工具可以分析bug请求数据、推荐开发者的个性化文件、生成相关开发者的关系图、以及分析开发者的历史bug修改记录等。该工具不仅从开发人员历史开发经验和行为模式角度推荐出修复某一特定bug的开发人员,而且结合该开发人员的开发历史任务构建“开发者——bug信息——开发者”关系网,帮助开发人员完成修复bug任务时找到合适的交流对象。