论文部分内容阅读
软件复用通常是指程序员依赖自身积累的或是群体贡献的知识和经验去快速搭建原型系统。软件复用历经了基于代码段的局部复用,基于构件技术的小范围复用以及基于开源软件的大规模复用三个阶段。现阶段,越来越多的人加入到开源运动中,他们的贡献丰富了开源世界中的可复用资源,给软件复用提供了更为广泛的选择。然而开源软件项目数量大、增长快的特点使得其规模和多样性远远超出了开发者的认知范围,一般开发者在快速准确甚至是精细定位并复用所需开源软件时面临着巨大的挑战。针对上述挑战,本文将开源软件推荐作为开源模式下应用软件复用的新机制,依据此思想,本文研究了两种推荐算法并设计实现了一个推荐原型系统:1、基于复用网络的相似软件推荐算法研究。在GitHub开源托管社区中,软件项目往往高度开放、自由管理,它们既没有标签信息,也可能没有描述信息,这使得语言文字类的文本属性很难鉴别同类软件之间的差别。因此,本文从复用关系这一新角度出发,对所构建的复用网络图进行了深入分析,并提出了基于复用网络的相似软件推荐算法,该算法以复用关系为特征,以TF-IDF值为权重,以余弦公式为法则,有效地计算了软件项目的相似关系。同时,应用GitHub中的真实软件项目作为数据集,进行实验评估,结果表明该算法具有良好的推荐效果,可以作为搜索结果的一种补充。2、基于同现网络的组合软件推荐算法研究。在基于软件复用的软件开发过程中,除了帮助开发者快速准确甚至是精细定位到所需的开源软件项目,还需要让开发者了解哪些软件项目通常一起使用,哪些一起使用会有冲突。但是开源软件复用关系规模较大,数据较为稀疏,使得传统的频繁项集和关联规则的概念在此背景下效果不理想,因此,本文从同现关系这一角度出发,对所构建的同现网络图进行了深入分析,并提出了基于同现网络的组合软件推荐算法,该算法以同现网络图为基础,以顶点和边属性为计算对象,以闭环发现模型为优化方法,有效地发掘了软件群的同现关系,并以启发式思想为主要策略实现了组合软件推荐。同样,应用GitHub的真实软件项目作为数据集,进行实验评估,取得了良好的推荐效果。3、设计实现了开源软件综合推荐系统。为了将本文所研究的推荐算法服务化,本文后续设计实现了包括采集、处理、算法实现、展示四大模块在内的SC-OSSREC开源软件综合推荐系统,目前为超过12万的开源软件项目推荐相应的软件项目列表,并依据用户反馈进行动态调整,有效地增强了推荐的效果。