国家重点研发计划课题“基于大数据的软件智能开发方法和环境”之课题四:“基于开发者关联分析的智能协作关键技术与支撑环境”
基于关键词的开发者搜索与排序工具
产品介绍
基于关键词的开发者搜索与排序工具是一款基于GitHub、Stack Overflow、Topcoder和CSDN四个社区平台,根据不同的检索条件、不同的排序方式找到符合条件的开发者,获得开发者的相关信息及开发者画像的产品。
基于关键词的开发者搜索与排序工具总体架构
基于关键词的开发者搜索与排序工具拥有数据支撑模块、搜索引擎构建模块和在线搜索模块。其中数据支撑模块主要是通过数据库(包括Neo4j、MongoDB、MySQL等)存储开发者的信息,包括开发者基本个人信息、开发活动信息、社交信息等。数据支撑模块是其他模块的基础和数据的最初形式。搜索引擎构建模块是在数据支撑模块的基础上,针对不同平台开发者的信息,进行基本信息的抽取、技能标签值的计算、开发者协作度的计算、开发者贡献度的计算,然后通过搜索引擎(Elasticsearch)来建立开发者索引。在线搜索模块是最上层的模块,在数据支撑模块和搜索引擎构建模块的基础上,对于实时的查询进行处理,并给出开发者的检索结果。该模块,首先对查询进行预处理,然后针对不同的搜索方式进行检索,最终将检索出来的开发者从数据支撑模块中提取开发者详细信息。
基于开发者特征与关联关系的资源协同推荐工具
本工具以Eclipse插件的形式,为开发者提供便捷的编写代码时的自动推荐、程序抛出异常时的自动推荐、开发人员请求推荐、开发人员主动检索给出推荐内容。
开发者关联搜索与可视化工具
当我们想要进一步了解某个开发人员与其他人在开发过程中产生的协作关系时,可以应用到这个功能。我们的开发者大数据来自于GitHub、Stack Overflow、Topcoder、CSDN和GitLab这5个不同的数据平台,其中前四个平台的数据收集整合于互联网中的大量开发数据,而GitLab平台的数据收集整合于北航ACT实验室搭建的GitLab服务器上的内部开发数据。由于每个平台的功能不同,因此不同平台中的开发者之间产生的协作关系的类型也有所差异。我们抽取了每个数据平台中最重要的一种或多种协作关系,并通过“关系图”的形式将这些关系清楚地展示出来,最终形成了开发者关联搜索与可视化工具。
关系图表现了开发者与其他人的协作关系,是开发者能力评估的重要组成部分。查看某个开发者的关系图可以分为两个步骤,首先我们需要先进入一个GitHub开发者的用户画像,之后点击画像中的“关系图”按钮便可以查看到该开发者的关系图了。
开发者能力定量评估工具
GitHub
开发者贡献分析: 从仓库数、提交数、pull requests、issues和评论五个指标来展示开发者的贡献。
开发者合作分析: 从被star数、粉丝数、被评论数和被fork数四个指标来展示开发者与其他开发者的合作情况。Stack Overflow
开发者贡献分析: 从开发者声望值、获得徽章数、开发者的回答次数和开发者的问题数四个指标来展示开发者的贡献。
开发者合作分析: 从共同评论者数、评论次数、共同编辑者数、编辑次数、共同回答者数、回答次数和问题被回答的人数七个指标来展示开发者与其他开发者的合作情况。Topcoder
开发者贡献分析: 从注册的挑战、提交的挑战和胜利的挑战三个指标来展示开发者的贡献。
开发者合作分析: 从合作次数、打败别人的次数和被打败的次数三个指标来展示开发者与其他开发者的合作情况。CSDN
开发者贡献分析: 从论坛数、问答数和博客数三个指标来展示开发者的贡献。
开发者合作分析: 从问题-回答数、评论-问题数、跟随数和评论-博客数四个指标来展示开发者与其他开发者的合作情况。GitLab
- 开发者贡献分析: 从仓库数、评论数、issues数和评论数四个指标来展示开发者的贡献。
- 开发者合作分析: 从同事、被评论数、共同修改者和指定回答者数四个指标来展示开发者与其他开发者的合作情况。
- 开发者代码质量分析: 从违规数、bug数、漏洞数、坏味道数和重复率五个指标来展示开发者的代码质量。
开发者能力特征画像工具
技能云介绍:技能云以词云的方式将开发者的技能全部展示出来,技能值的大小由词的字号来反映,字号越大技能值越大。将鼠标悬停在技能云的技能上,技能的文字会变成红色,同时弹出悬窗显示技能的数值。如图3-3所示,javascript的值为7414507。
技能雷达介绍:技能雷达展示了开发者最擅长的前六项技能。将鼠标悬浮在技能雷达的技能点上,会弹出悬窗显示技能的数值。如图3-4所示,c++的值为7671416。
技能列表介绍:技能列表以列表的形式展示了开发者的所有技能,如图3-5所示。
堆叠区域图介绍:堆叠区域图展示了随着时间的变化,几种技能帖子占本月所有帖子的比例。用户可以通过点击图例来改变堆叠区域图展示的技能种类。如图3-9所示,当点击一次html的图例后,图例和html的数据会消失。
开发者特征与关联感知的资源聚类工具
开发者特征与关联感知的资源聚类工具是对在开源社区中和开发者有关的资源进行统计、分析与展示的工具。本工具对开源社区GitHub、众包平台Topcoder、开发者社区Stack Overflow、GitLab四个平台的开发者进行了资源聚类与。通过对平台上开发者相关数据的分析和挖掘,图形化展示了与开发者相关的资源的特征和开发者能力。通过本工具用户可以更加全面直观地了解开发者的能力。
面向开发任务分配的开发者推荐工具
推荐代码评审者
传统的代码评审活动通常是线下的会议,这不适用于分布式开发的开源软件。因此基于工具的,轻量的代码评审实践应运而生,称为现代代码评审(Modern Code Review)。现代代码评审运用代码评审工具将代码评审活动线上化,从而解决了开源软件的代码评审活动的组织问题。
开源软件开发的特点也带来了问题,那就是现代代码评审的评审者如何确定。如果不指定评审者会造成评审需求长时间无人问津,导致评审效率低下,耽误项目开发进度。如果人工分配的话,由于开源软件的众多开发者很难彼此了解,所以难以指定合适的评审者,同时在流行项目中人工指定评审者对于分配者来说是一件具有较大压力的工作,因为流行项目的评审需求众多。因此对于现代代码评审来说,自动的评审者推荐具有重要意义,不仅能够加快评审效率保证评审质量,还能减轻分配者的压力。
推荐众包开发
众包软件开发具有低成本,短周期,高创新性等优势,可以减少软件开发成本及周期,充分利用群体智慧,汇聚群体的解决方案并从中获取新颖的想法。但是众包式软件开发中开发者任务匹配问题尚待解决。从开发者角度出发,众包平台上任务种类、数量过多,开发者需要花费大量的时间和精力从中选取合适的任务。从任务发布者角度出发,选择高水平的开发者完成任务是保证任务质量的关键,但开发者个体分布在不同地址位置、不同时区,其能力、兴趣、可靠性等信息都无法得知。这导致不少众包软件完成质量较差甚至被取消。此外,软件开发项目比较复杂,往往由一系列相互关联的开发任务构成,需要由包含若干开发者的开发团队共同完成,项目的质量不仅与开发者团队的能力、经验有关,而且与开发者之间的协作关系高度相关。因此,在众包软件开发快速发展的同时,众包软件开发中存在的问题也日益突出,如何保证众包软件的质量成为了研究的重点,而为众包任务推荐合适的开发者是保证任务质量的关键,也是最直接最有效的方法。
推荐问题回答者
随着软件开发从业者及编程爱好者的快速增加,以及各种软件技术的爆发性增长,开发者必须保持不断学习的能力,并能自己去学习更多新技术、新知识。而当开发者在学习或者使用一些新的技术时,总会遇到一些或大或小的问题,这时候他们经常会选择求助于 API 文档和问答社区。相比于问答社区,API文档作为官方提供的说明文档,并不能绝对的覆盖所有的现实场景或可能问题, 这就会造成 API 文档很多时候并不能很好解决开发者遇到的问题。问答社区就不同,随着问答社区的壮大,其中不仅包含了大量的软件开发知识,同时还积累了大量的开发者用户,当开发者遇到问题时,不仅可以通过问答社区搜索答案, 还能自己提出问题直接寻找帮助,在大量的开发者用户中也有很多用户乐于在问答网站上解决或讨论大家遇到的问题,这也使得问答社区可以在实际中为开发者提供帮助,软件问答社区也就变成开发者一项重要的辅助开发工具。
Gitlab推荐问题解决者
Gitlab为针对企业内部开发人员使用的cooper。相对于互联网可访问的cooper,这个版本的系统基于内网gitlab,不与外网连通,并且只有内部员工、注册用户才有权查看上面的内容。当企业内部项目出现问题,或者内部开发者有问题想向内部社区中的开发者提问时,可以是使用Gitlab推荐问题解决者工具。在一个企业内部,其问题和解决方案往往和互联网上社区中的问题回答不同,并且在庞大的企业开发团队内部,技术人员之间可能有问题需要相互咨询的适宜。这时碍于开发人员之间不了解对方的技术专长、不方便联系对方等等原因,导致工作效率降低。这时可以使用该工具,智能匹配最合适的问题回答者。
智能协作开发支撑环境
软件开发是以“开发者”为中心的智力密集型活动,其一般由开发团队通过各类开发活动协作完成,因此,如何实现高效的开发者协作是影响软件开发效率和质量的重要问题之一。传统软件开发协作中存在人员分配静态固化、需求变化反应迟钝、开发活动依靠经验缺乏辅助等问题和挑战。同时,基于互联网的开源软件、众包软件开发、开发者社区、云开发服务平台以及企业内软件基础设中积累了大量的软件开发者数据,这给分析、理解开发者的特征,进而提高开发者协作效率提供了重要机会。
针对开发者协作所面临的技术挑战和发展机遇,COOPER平台通过分析软件开发者大数据对开发者进行全方位精准画像和协作关系刻画,进一步构建软件开发者知识图谱,在此基础上利用开发者与开发资源中存在的关联关系构建推荐引擎,面向软件开发任务提供开发者推荐和开发资源推荐服务。