数据驱动的软件开发者智能协作技术
张建1,2,3,孟祥鑫1,2,3,孙海龙1,2,3,王旭1,2,3,刘旭东1,2,3
1软件开发环境国家重点实验室(北京航空航天大学),北京
2北京航空航天大学大数据科学与脑机智能高精尖创新中心,北京
3北京航空航天大学计算机学院,北京
摘要:通过挖掘并利用软件大数据中蕴含的知识来提高软件开发的智能化水平已成为软件工程领域的热点研究问题。然而,对软件开发者及其群体协作方法的研究尚未形成系统化的研究成果。针对此问题,以开发者群体为研究对象,通过深入分析开发者的行为历史数据,研究面向智能协作的关键技术,并以此为基础研制相应的支撑环境。首先,收集并分析了海量的开发者相关数据;第二,给出了软件开发者能力特征模型及其协作关系模型,并构建了开发者知识图谱;第三,以开发者知识图谱为支撑,阐述了基于智能推荐的协作开发方法。基于以上关键技术,研发了相应的支撑工具,并构建了智能协作开发环境系统;最后,对未来的工作进行了展望。
关键词:智能化软件开发;大数据;群体协作;知识图谱;推荐系统
论文引用格式:
张建,孟祥鑫,孙海龙,etal.数据驱动的软件开发者智能协作技术[J].大数据,,7(1):76-93.
ZHANGJ,MENGXX,SUNHL,etal.Datadrivenintelligentcollaborationofsoftwaredevelopers[J].BigDataResearch,,7(1):76-93.
1引言
软件开发是以“开发者”为中心的智力密集型活动。尽管在模型驱动和人工智能等技术的推动下,部分开发任务可以实现一定程度的自动处理,但是由于软件开发的高度复杂性,大多数开发任务尚难以自动完成,开发者依然是软件开发过程中的核心要素。不仅如此,软件开发的复杂性使得大部分软件开发任务难以由单个开发人员独立完成,通常需要开发者群体的共同协作。例如,据报道,Windows7的开发涉及多人共25个子团队的协作。特别是,开源软件、众包等基于互联网的软件开发模式涉及的开发者数量庞大,且开发者相互之间了解有限,因此,建立开发者之间的高效协作成为更加迫切的需求。例如,开源社区GitHub拥有多万个注册用户,其中拉取请求(pullrequest)机制是GitHub倡导的社会化编程的核心内容,但如果没有推荐技术的支持,一个拉取请求得到用户评论的平均时间会延长12天;软件开发问答社区StackOverflow汇聚了多万个用户,但仍然有超过万个问题(约占总问题的30%)未得到有效回答,其主要原因是缺乏针对问题进行回答者推荐的支持。总之,开发者群体在开发过程中的协作效率与效果在很大程度上影响着软件的开发效率和质量。因此,研究开发者的能力、行为及其相互影响,并提供相应的协作支撑方法具有重要的意义。
图灵奖获得者FrederickP.Brooks在其《人月神话》一书中明确指出:简单地基于“人月”来度量和计划软件开发任务存在不足。例如,软件开发成本会随着开发人数和时间的变化而发生变化,但进度却可能变缓甚至停滞。这充分说明,仅考虑开发者数量和开发时间而忽视开发任务的复杂性以及开发者的协作效率是不可行的。实际上,广义的开发者群体协作主要研究以开发者为中心的软件开发过程中各种要素之间的连接、交互和作用机理,以提升人与人、人与工具、人与数据、数据与工具之间的协作效率,从而提高软件开发的效率和质量。而狭义的群体协作主要指开发者群体之间的协作,一般体现在4个方面:直接的沟通与交流、开发任务的分配、开发结果的汇聚、开发资源的重用。在现有的软件开发中,开发者之间的协作多依赖于开发者的主观经验进行,协作效率低,缺乏智能化的支持。例如,在开发者的沟通与交流方面,交流的对象往往局限于开发团队内相互熟悉的人员,但是团队外或者互联网上可能存在大量潜在的协作者;在开发任务的分配上,一般由技术负责人依据其对开发人员和开发任务的主观了解进行任务分配,缺乏客观准确的任务分配方法;在开发结果的汇聚上,多采用版本管理工具进行结果的聚合,这些工具假定每个开发者的贡献是可信的,在出现错误甚至恶意贡献的情况下,需要复杂的回滚等操作;在开发资源的重用方面,往往局限于开发团队内部积累的软件资源库,而缺乏对互联网上更大范围的资源的重用支持。因此,基于互联网中的海量开发者相关数据,近年来大量的工作研究了面向特定开发任务的开发者推荐和开发资源推荐。一方面,开发者推荐面向开发过程中的不同阶段,推荐合适的开发人员,包括代码评审者推荐、开发者以及开发团队推荐等;另一方面,开发资源推荐推荐的是开发过程中需要的软件资源,包括应用程序接口(applicationprogramminginterface,API)推荐、代码推荐和代码修复补丁推荐等。然而,这类工作只