基于大数据的软件智能化开发方法与环境

基于大数据的软件智能化开发方法与环境

基于大数据的软件智能化开发方法与环境

谢冰1, 彭鑫2,3, 尹刚4,5, 李宣东6, 魏峻7,8, 孙海龙9,10

1 北京大学信息科学技术学院,北京 100871

2 复旦大学计算机科学技术学院,上海 200438

3 上海市数据科学重点实验室,上海 200438

4 绿色计算产业联盟,北京 100036

5 湖南智擎科技有限公司,湖南 长沙 410073

6 计算机软件新技术国家重点实验室(南京大学),江苏 南京 210023

7 上中国科学院大学,北京 100190

8 中国科学院软件研究所,北京 100190

9 软件开发环境国家重点实验室(北京航空航天大学),北京 100191

10 北京航空航天大学计算机学院,北京 100191

摘要阐述了围绕软件工程大数据的汇聚组织、知识表示提炼、软件工具智能化和智能开发服务环境等关键技术开展的一系列研究工作,建立了基于大数据的软件智能化开发技术体系,研发关键性的软件智能化开发工具,形成了“人-工具-数据”融合的新一代软件智能化开发环境,并构建了软件智能化开发云平台。面向万众创新的社会需求,构建了服务大众的公共服务平台;针对企业创新能力的提升,提供了智能化的企业软件开发环境。

关键词软件复用 ; 大数据 ; 智能化软件开发 ; 知识图谱 ; 推荐

基于大数据的软件智能化开发方法与环境

论文引用格式:

谢冰, 彭鑫, 尹刚, 等. 基于大数据的软件智能化开发方法与环境[J]. 大数据, 2021, 7(1): 3-21.

XIE B, PENG X, YIN G, et al. Big data based intelligent software development methodology and environment[J]. Big Data Research, 2021, 7(1): 3-21.

基于大数据的软件智能化开发方法与环境

1 引言

以开源软件为代表的互联网软件开发具有边界开放、群体分散、交付频繁、知识复杂等特征。与此同时,企业软件开发也逐渐转向以开发运维一体化(DevOps)为特征的云化开发平台。这些网络化开发方式产生了包含源代码、缺陷报告、版本历史、测试用例等在内的全生命周期数据。例如,开源软件社区GitHub已经集聚了超过2.7亿个软件项目,软件开发问答网站Stack Overflow已经积累了超过1 700万个与软件开发相关的问题。这些数据中蕴含的规律可以通过统计和机器学习等技术进行吸收和泛化,用于构造各种智能化的软件工程工具。

智能化软件开发一直是软件工程追求的核心目标之一。学术界著名的以软件开发智能化为核心主题的自动化软件工程(ASE)会议始于20世纪80年代。近年来,在软件工程领域顶级会议ICSE、FSE等中出现了越来越多基于数据、知识驱动的开发智能化技术研究。例如,于2001年发起的软件仓库挖掘会议(MSR)已经得到了广泛关注,并开启了一个重要的软件工程研究子领域。2010年,Robillard M P等人综述了软件工程中的智能推荐系统,指出这些系统在大范围的软件开发活动(如代码复用、软件维护等)中显著地提升了软件开发者的工作效率与质量。

软件开发中的知识获取与应用一直是产业界关注的焦点之一。软件开发问答网站Stack Overflow利用专家回答的群智机制,提供了大量软件开发问题的答案。Eclipse和Visual Studio等集成开发环境(integrated development environment, IDE)都提供了代码自动补全功能。此后流行的IntelliJ IDEA则将智能编码支持作为特色,提供了智能化代码规范检查、自动生成Java规范的基础方法框架、自动补充方法或类代码框架等智能推荐支持。近年来,Eclipse和Visual Studio都在云开发平台方面取得了突破,在云端可以汇集大量开发数据,为更高层次的基于大数据的开发智能化提供了基础平台。

国内主要软件工程研究团队在此方面也开展了大量的研究工作。北京大学2012年提出了知识驱动的软件复用方法;南京大学在基于数据的软件分析、测试方面进行了算法、工具和实践研究;中国科学院软件研究所基于云平台和数据分析技术,在软件运行时测试和演化方面开展研究;北京航空航天大学在开源软件数据的基础上研究了开发人员推荐问题;国防科技大学在开源数据收集和知识获取方面进行了大量的工作,维护并运行了Trustie社区和网络群体化软件开发环境。国内的浪潮通用软件有限公司、金蝶软件(中国)有限公司等也在获取开发人员操作、数据等方面研发了相应的工具环境;CSDN和OSCHINA等在软件开发技术论坛、代码托管和软件资源汇聚方面建立了大规模的社区。

当前,软件智能化开发成为热点的关键原因在于新时代带来的技术发展的新环境:开源及企业软件开发产生了大数据源,机器学习和信息检索技术的发展提供了知识获取的核心支撑,企业领域工程的广泛实践积累了大量的领域资源。然而,作为智能化软件开发基础的软件开发数据具有规模巨大、碎片分散、快速膨胀的特点。在此基础上实现智能化软件开发支持仍然需要解决一系列基础性的数据采集分析以及知识抽取利用等方面的问题,并以智能推荐、问答等方式提升软件开发工具的智能程度,提高软件开发的质量和效率。在此基础上,智能化的软件工具可以基于数据和知识向开发人员提供推荐、检索和问答等方面的智能化支持。

围绕相关方面,学术界和工业界已经开展了大量的技术研究和实践探索。然而,从总体方法论和技术体系来看,目前的研究和实践探索仍然局限于特定的技术关注点,使用的数据都是针对特定问题本身进行采集的,缺少大数据环境支撑的跨领域智能化技术研究,也没有形成完善的技术体系和环境。为此,笔者团队在国家重点研发计划项目“基于大数据的软件智能开发方法和环境”的支持下,围绕软件工程大数据的汇聚组织、知识表示提炼、软件工具智能化和智能开发服务环境等关键技术开展研究工作,建立基于大数据的软件智能化开发技术体系,研发关键性的软件智能化开发工具,形成“人-工具-数据”融合的新一代软件智能化开发技术体系和环境,并构建软件智能化开发云平台。本项目构建的基于大数据的软件智能化开发方法和环境面向万众创新的社会需求,运行服务大众的公共服务平台;针对企业创新能力提升,提供智能化的企业软件开发环境。

本文将从系统架构、核心技术、应用效果3个方面介绍基于大数据的软件智能化开发方法与环境。

2 系统架构

基于大数据的软件智能化开发方法与环境整体技术架构如图1所示。整个方法体系和环境以开源及企业软件项目代码仓库、交付制品、部署和运维监控等多种类型的软件开发数据源为基础,包含软件大数据汇聚及知识提炼、软件智能化开发支持、软件智能化开发服务3个层次。其中,软件大数据汇聚及知识提炼通过自动化的方法采集和汇聚各种类型的软件开发数据,形成自生长的多源异构软件大数据环境,在此基础上,以知识图谱、经验案例、分类器、规则、模板等多种形式提炼和抽取各种软件开发知识。软件智能化开发支持从软件构造、测试验证、群体协作、运维演化4个重要的方面构建相应的工具平台和支撑环境,为相应的软件开发活动提供智能化支持。软件智能化开发服务基于以软件仓库为中心的分布式智能化开发环境集成技术,构建软件智能化开发云环境运行体系结构与集成框架,实现高可扩展的智能开发环境集成与部署,从而建立面向公众和企业的软件智能化开发服务平台。

基于大数据的软件智能化开发方法与环境

图2   软件工程大数据分类体系

● 数据实例:通过丰富的接口和服务,针对不同的需求与应用提供相应的数据服务,针对不同类型的数据,对外提供不同的数据服务,包括以项目为中心的数据服务、以测试为目标的数据服务、以人为中心的数据服务、以运维为目标的数据服务等。

在此基础上,针对网页数据、版本库数据、缺陷库数据等,提出了主动感知、定向采集、多源关联和增量检测等一系列关键技术,设计构建如图3所示的分布式数据采集处理框架,部署了分布式爬虫,实现了基于网页爬虫和应用程序接口(application programming interface,API)的数据获取、数据包下载等多种收集方式。

其主要特点如下:

● 构建了大规模多类型的分布式爬虫,实现对全球数十个开源社区的代码仓库、开发历史及软件知识等类型数据的主动感知、定向采集和增量更新;

● 对于异构的代码数据和代码历史提交等数据,基于Git版本管理工具实现了差异分析和增量拉取;

● 对于软件知识数据,通过对不同网站帖子的历史浏览等数据进行分析,形成帖子的关注度衰减模型,从而基于该模型确定对每个网站帖子的更新抓取频率。

采用实时监测、元数据本地存储、按需获取与构建的模式,在兼顾可控性和效费比的情况下,针对不同类型数据的软件数据进行汇聚、收集和整理,实现对全球PB级开源数据(包括原始数据、处理后数据以及元数据)的自主掌控。采用分散存储、平台汇聚的模式提供共享管理和在线访问统一入口,部署于UCloud和阿里云等公有云,并提供统一的汇聚数据说明和访问入口。在此基础上,建立了如下3个软件工程大数据获取与服务平台。

(1)全球开源软件检索与分析平台OSSEAN

针对软件问答社区、开源软件项目、软件开发工具、开发者等类型的数据进行了汇聚和收集整理,构建了面向全球开源软件的检索与分析平台OSSEAN。其包括3层:数据获取层、数据分析层、数据展示层。其中,数据获取层完成数据的采集工作,为平台提供高效、稳定、持续、准确的数据服务;数据分析层对数据获取层获取的页面信息进行抽取,提取出每个页面中的关键信息,并对抽取结果进行验证,同时通过数据挖掘对抽取的数据进行分析(例如社区关联、软件评估等);数据展示层对得到的数据处理结果按照平台展示的数据格式进行处理,并将处理结果存放于数据缓冲池中,为平台的展示提供数据支持。目前,OSSEAN的数据获取模块已覆盖全球20多个主要开源社区,通过持续监控,实时抓取了超过 1 400万个开源项目/仓库元数据以及超过2 000万条在线讨论数据,同时提供了开源软件分析、检索、排序以及热点话题分析等服务。

基于大数据的软件智能化开发方法与环境

图4   基于机器学习的软件开发知识提炼方法与技术体系

基于大数据的软件智能化开发方法与环境

图6   软件项目知识图谱自动构造支持平台的系统框架

3.3 智能化软件构造

智能化软件构造主要面向编码、代码评审、代码重构这3种主要的软件构造活动,分别提供智能化代码辅助完成、代码变更差异分析和智能化自动重构功能。

(1)智能化代码辅助完成

软件开发人员经常依赖于各种通用API(例如JDK、Android中的API)来完成开发任务。但是这类API数量众多,开发人员难以熟知所有API的功能及其使用场合。如何在具体的代码上下文中选择合适的API,并按照正确的方式使用,是开发人员经常遇到的难题。为此,项目团队提出了一种基于上下文分析及深度学习的代码生成式补全方法,如图7所示。该方法采用Tree-LSTM模型,并采用一种基于抽象代码树结构的代码表示。其中,结点表示抽象的API使用语句、变量声明、赋值语句或控制结构,边表示它们之间的控制流关系。

基于大数据的软件智能化开发方法与环境

图8   基于抽象语法树的代码差异分析设计框架

(3)智能化自动重构

软件重构是提高软件质量的一种重要技术手段。它在不改变软件外部行文特性的情况下,通过优化、调整软件的内部结构来提高软件的质量,尤其是软件的可读性和可扩展性。目前IDE对软件重构的自动化支持仅限于重构的执行环节,对于重构机会的发掘与重构方案的推荐则没有强力的工具支撑。在实际软件构造的过程中,经常出现实现代码与理想高层设计不一致的问题,这就需要结合业务逻辑和设计知识给出理想的设计。因此,项目团队提出了一种基于高层设计及搜索算法的自动化重构方法,并开发了高层设计驱动的软件自动化重构工具。针对在长期演化过程中发生设计质量退化的复杂软件系统,该方法能够通过高层设计与代码的自动映射提供交互式的重构建议,及时识别设计演进过程中的腐化苗头,从而提高软件系统的设计质量,保障设计的平滑演进。

3.4 智能化测试验证

智能化测试验证的目标是基于软件开发和维护过程形成的各类软件工程数据和机器学习等智能化途径,突破软件测试和验证技术面临的障碍,控制相关问题的复杂性,提高相关技术与工具的有效性和可扩展性。

基于程序运行信息、缺陷报告、编程经验交流信息、静态分析警报、技术文档、历史修复记录、用户评价等软件开发和演化过程中产生的数据,采用机器学习、启发式搜索、自然语言理解等智能化途径,围绕测试、验证、分析、调试和修复等软件质量保障环节,针对测试用例生成、代码模型检验、静态分析警报确认、程序缺陷定位和修复信息推荐中的难点问题展开研究工作,具体包括:

● 在测试用例生成方面,针对现有技术难以处理非线性运算、浮点运算、第三方函数调用等程序复杂特征的难点,提出基于智能搜索的复杂软件测试用例生成技术;

● 在代码模型检验方面,针对现有技术难以应对源代码验证的规模和复杂性问题,提出基于不可行路径分析与学习的智能化有界模型检验技术;

● 在静态分析警报确认方面,针对静态分析警报数量非常大、目前基本上靠人工处理的难题,提出静态分析缺陷警报智能化分析与确认技术;

● 在程序缺陷定位方面,针对现有技术的定位精度和效率不高的问题,提出基于缺陷报告与历史修复记录的软件代码缺陷智能定位技术;

● 在程序缺陷修复信息推荐方面,针对现有技术的修复推荐准确度不高的问题,提出基于社区问答网站的软件缺陷修复信息智能推荐技术。

3.5 智能化协作

软件开发作为以开发者为中心的智力活动,开发者协作始终是影响软件开发效率和质量的重要问题之一。基于大数据的软件开发智能协作以提高开发者的协作效率为目标,建立基于多源软件大数据的开发者知识库体系结构以及开发者能力评估和关系挖掘、开发者智能推荐、软件资源智能推荐等智能协作关键技术体系,通过学习开发者的能力特征、挖掘隐含的协作关系,建立以开发者为中心的知识库。在此基础上,根据开发者能力和行为等进行开发者的推荐和智能的任务分配,基于开发者关联进行软件资源(代码、问答等)的智能推荐和重用,从而实现软件的智能协作开发。智能化协作技术体系如图9所示。

基于大数据的软件智能化开发方法与环境

图10   自调节的开发运维一体化

3.7 智能化开发服务环境

软件智能化开发服务环境突破以软件仓库为中心的分布式智能化开发环境集成技术,构建软件智能化开发云环境运行体系结构与集成框架,实现高可扩展的智能开发环境集成与部署。围绕软件开发制品和活动的完整数据,设计智能化开发环境的集成方法与工具,包括运行环境集成和桌面开发环境的集成机制、基于Eclipse Che的架构设计与交互技术,以及智能化开发工具管理中心,设计实现了以软件项目版本管理为中心,以Trustie平台为基础,基于版本库串联Trustie的协同开发环境、Che在线编程环境以及DevOps运行部署环境,实现按需接入、高可扩展的智能化开发体系架构。依托该架构,协同开发、在线编程和部署运维等智能化工具和服务均可以基于插件模式快速集成,并形成智能化开发环境。

在面向创新实践的软件智能化开发公共服务平台方面,面向创新实践和安全可控需求,突破智能化推荐等关键技术,构建面向开放创新和人才培养的软件智能化开发公共服务平台,支撑我国开源生态的建设。本项目针对开源生态中软件资源和知识资源呈现的多层次、多维度特性,研究了面向协同开发社区的代码贡献者推荐算法、基于多维特征的开源项目个性化推荐方法,以及跨项目的贡献审查者推荐方法等技术。在此基础上,面向国家基础及前沿技术安全可控和自主创新的重大需求,依托智能开发技术与工具,构建形成了开源模式的开放创新服务环境和大规模开放在线实践(massive open online practice,MOOP)模式的人才培养服务环境,围绕大规模开放创新实践和人才培养开展了大规模的应用和服务。

在软件智能化企业开发支撑技术与服务平台方面,研发企业大型软件资源库和领域知识图谱,为企业智能化软件开发提供支撑技术与服务平台。项目汇聚涵盖需求、设计、开发、测试、运行、运维、支持服务等软件全生命周期的数据资源,突破了装备制造和智能仓储领域的知识库构建技术,研发了面向企业管理软件的智能化云开发服务环境。在此基础上,浪潮通用软件有限公司集成项目研究成果搭建的智能化企业开发平台有效提升了现有开发方法和平台的智能化水平。同时,应用项目研发的软件工程教育平台开展企业研发人员的培训,可有效提升研发人员的开发实践能力,降低企业的运营成本。

4 应用效果

面向公众的软件智能开发服务平台通过衔接高校、科研机构、软件园区、软件企业等利益相关方,降低软件开发门槛、释放软件开发潜力,推动软件驱动的“产学研用”创新创业生态的构建。

在多源异构软件工程大数据的汇聚与管理方面,研究并建立了覆盖“开发-交付-应用”的软件生命全周期的数据分类体系,突破主动感知、定向采集、多源关联、增量检测等关键技术,构建了自生长的软件工程大数据共享平台SBD。SBD以原始数据、处理后数据以及元数据等形式汇聚了全球主流开源社区的开源软件项目、软件问答讨论、软件开发工具、Docker镜像、开发者等不同类型的数据;通过对数据源进行感知与监测,利用元数据分析比对等技术实现对数据变化的感知和追踪,实现持续演化的软件工程大数据的增量式获取,提升对开源软件大数据的掌控能力。目前,平台上可跟踪和获得的数据总量超过1.5 PB,其中集中存储约25 TB,分散存储约217 TB,实时监控数据约1 278 TB。

在数据与工具开源方面,针 对Apache开源软件基金会中的192个开源软件项目(共计482.48 GB软件项目数据),分别构建了相应的软件项目知识图谱。以Apache Lucene项目的知识图谱为例,共抽取出了378 897个实体,以及这些实体之间的1 902 683条关联关系;在此基础上,对外提供了软件项目智能问答服务。开发者可以提出自然语言问题,系统基于知识推理在知识图谱以及项目文档中进行搜索,并给出答案。同时,项目将项目团队自主研发的、自主可控的35项智能开发工具与相关软件数据进行了汇聚整理,开源到木兰开源社区。

在国内开源生态建设方面,项目支持GCC建成了面向“开放计算架构+开源软件技术”的中国绿色计算开源技术和产品开发社区,汇聚了国内的企业团队和大众贡献者;基于Trustie构建的中国绿色计算开源技术已经发展成我国最大的ARM开源开发和创新社区,有效支持了产、学、研、用各界的开源开发和评测活动;支持新一代人工智能产业技术创新联盟OpenI启智开源社区的建设,推动人工智能领域开源开放协同创新生态的构建;支持的可控开源创造行动是我国2020年启动的重大创新体系建设计划,核心是激活和汇聚开放群体智慧和贡献,构建一种可持续发展的生态。

在科学研究创新方面,项目有效地帮助了micROS机器人操作系统团队、NuBot国际顶尖机器人竞技团队、Trustie群体化软件开发研究团队等解决了智能化软件开发和持续性质量改进等难题。

在高校实践教学方面,智能化实践学习平台头歌(EduCoder)支撑产教各界开发了超过6.9万个在线计算机训练项目、391万个开源代码仓库,各类师生和开发者超过80万人,提供实践课程3 900余门。此外,项目还参与支撑了3届“全国高校绿色计算创新大赛”,参赛人数总量超过2万人次。

5 结束语

围绕基于大数据的软件智能开发方法和环境,项目团队提出了一套大数据驱动的软件智能化开发方法,涉及软件开发多个主要过程中的智能化支撑技术。项目团队研发了一批软件智能化开发工具原型系统,在基于知识图谱的软件开发问题复杂查询、数据驱动的测试、智能化群体协作、智能化开发运行一体化决策等方面均提供了基于软件大数据的智能推荐和开发支持。基于对国际开源软件社区级技术的整体分析和研究,项目团队建立了一套互联网及开源软件数据资源的获取汇聚技术和方法,以及融合利用技术方案,目前可以跟踪和获取超过1.5 PB的软件工程数据,分析监测了392万个开源软件,为全球开源领域的4 397万名开发人员建立了画像,提升了我国对此类数据的掌控能力。

在前期国家计划形成的软件资源共享与群智开发平台基础上,项目团队进一步发展了软件开发中的数据智能支撑功能,形成了较为完善的云化开发平台,并对外提供公共服务。目前,开源开发平台注册的各类用户约41.5万人,开源项目1.5万个;开源教育平台汇聚了5.4万个开源训练项目,293万个开源代码仓库,来自982所高校与企业的1.1万名注册教师、33.2万名注册学生和开发者,提供实践课程1 600余门。在6家大型软件开发企业中取得了一批应用示范的成果,显著提高了软件企业的生产效率和质量;形成了一个自主可控的软件开发共享服务的技术框架,并基于此方案支持了一批国内开源社区的支撑环境建设,包括“云计算与大数据”重点专项的集成平台的环境建设。

作者简介

谢冰(1970-),男,博士,北京大学教授、信息科学技术学院常务副院长、软件研究所所长,国家杰出青年科学基金获得者,中国软件行业协会理事,中国计算机学会高级会员,ChineseJournalofElectronics编委,入选教育部新世纪优秀人才支持计划、北京市科技新星计划,获得“中创软件人才奖”。主要研究方向为软件工程、计算机理论科学和分布式系统等 。

彭鑫(1979-),男,博士,复旦大学教授、计算机科学技术学院副院长、软件学院副院长。中国计算机学会软件工程专业委员会副主任,JournalofSoftware:EvolutionandProcess联合主编,ACMTransactionsonSoftwareEngineeringandMethodology编委,《软件学报》编委,EmpiricalSoftwareEngineering编委,IEEE软件维护与进化国际会议(ICSME)执行委员(2017—2020年)。2016年获得NASAC青年软件创新奖。主要研究方向为软件开发大数据分析、智能化软件开发、云原生与智能化运维、泛在计算软件系统等 。

尹刚(1975-),男,博士,绿色计算产业联盟实践教学工作委员会副主任,中国计算机学会会员,主要研究方向为在线教育、分布式计算、软件工程、数据挖掘、云计算等 。

李宣东(1963-),男,博士,南京大学计算机科学与技术系教授、博士生导师,软件学院院长,主要研究方向为软件建模与分析、软件测试与验证 。

魏峻(1970-),男,博士,中国科学院软件研究所研究员、博士生导师,主要研究方向为软件工程、网络分布式计算等 。

孙海龙(1979-),男,博士,北京航空航天大学计算机学院教授、博士生导师,主要研究方向为智能软件工程、群体智能和分布式系统 。

联系我们:

Tel:010-81055448

       010-81055490

       010-81055534

E-mail:bdr@bjxintong.com.cn 

http://www.infocomm-journal.com/bdr

http://www.j-bigdataresearch.com.cn/

转载、合作:010-81055537

大数据期刊

《大数据(Big Data Research,BDR)》双月刊是由中华人民共和国工业和信息化部主管,人民邮电出版社主办,中国计算机学会大数据专家委员会学术指导,北京信通传媒有限责任公司出版的期刊,已成功入选中文科技核心期刊、中国计算机学会会刊、中国计算机学会推荐中文科技期刊,并被评为2018年、2019年国家哲学社会科学文献中心学术期刊数据库“综合性人文社会科学”学科最受欢迎期刊。

基于大数据的软件智能化开发方法与环境

关注《大数据》期刊微信公众号,获取更多内容

文章知识点与官方知识档案匹配,可进一步学习相关知识云原生入门技能树首页概览8632 人正在系统学习中

来源:唐名威

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年1月1日
下一篇 2021年1月1日

相关推荐