全媒体视角
智能化软件开发一直是软件工程追求的核心目标之一。随着软件开发大数据的不断积累,数据驱动的软件智能化开发技术研究已经成为学术界和工业界共同关注的热点。近日,中教全媒体采访了yl7703永利官网副院长、软件学院副院长、中国计算机学会软件工程专委会副主任彭鑫教授,就软件智能化开发进展与挑战、软件人才培养、开源技术等话题展开了对话。
yl7703永利官网副院长、软件学院副院长、中国计算机学会软件工程专委会副主任 彭鑫
文 / 中教全媒体 张晓攀
数据驱动软件智能化开发 有效实现人机协作任重道远
中教全媒体:您的研究重点关注于大数据、人工智能与软件工程的结合,如何理解其中的的相关关系?
彭鑫:不管是大数据还是人工智能,和软件工程之间的关系都是双向的。以人工智能为例,学界及业界都在提SE for AI和AI for SE,二者的结合是非常有吸引力的。
在软件工程领域,首先引起关注的是AI for SE的研究,因为AI for SE为软件工程领域一直以来所追求的软件开发效率和质量提供了新的技术手段。当前,“软件定义一切”已经成为新的技术趋势,软件不仅加速渗透到社会经济生活的方方面面,而且对于交付速度和软件质量的要求越来越高,因此企业对于软件工程的重视程度也越来越高。从传统意义上看,软件工程在实践中很多时候体现为一种指导软件开发过程的方法学。在过去的一二十年里面,软件开发中代码、文档等相关数据积累越来越多。在2005年左右,软件工程领域兴起了一个名为MSR(Mining Software Repository,即软件开发库挖掘)的研究方向。这个时期的MSR研究主要是在各种软件开发数据基础上进行数据挖掘和分析,并取得了一些成效。随着各种软件工程数据的不断积累以及人工智能技术的不断发展,深度学习、知识图谱等人工智能技术被越来越多地应用到了软件工程领域,以智能化分析、推荐、问答等形式为软件开发、演化和运维提供更加自动化和智能化的工具和技术支持,由此形成了AI for SE的研究潮流。
SE for AI是近年来兴起的研究领域,主要关注于人工智能应用和人工智能系统中的软件工程问题。人工智能技术通常需要以软件系统的形态实现落地应用。在这种人工智能系统中,AI模型(例如深度学习模型)只是其中的一个组成部分,除此之外还包括软件模块、硬件设备、人员等其他系统要素。从整体的系统质量保障以及广受关注的可信AI的角度看,人工智能系统的测试、调试、故障分析以及可信性评价都涉及软件工程和系统工程问题。不同于传统软件的确定性逻辑,嵌入AI模块的人工智能软件系统质量保障和可信分析面临着概率性、不确定性、可解释性等多个方面的问题和挑战。从应用构造的角度看,人工智能技术应用的最后一公里是场景,如何在特定场景中按需融合人机物资源以及各种智能化能力从而实现用户目标是一个关键问题,而这正是类似于20年前流行的企业应用集成(EAI)的软件工程和系统工程问题的又一种具体体现。在此过程中,软件作为一种“万能集成器”扮演着融合人机物资源的关键角色。
总的来说,AI for SE和 SE for AI这两个方向的研究都有非常重要的意义,都能够促使我们对软件工程的定位以及发展方向形成新的认识。
中教全媒体:您在软件智能化开发与运维领域深有研究,请谈谈您的研究方向和研究成果?
彭鑫:我们在同企业的合作过程中,发现企业软件开发中的一个普遍问题是知识的浪费。软件开发知识包括实现代码、API(应用程序编程接口)、软件设计、业务需求等多个层面。软件开发人员经常需要重复思考和理解相似的软件开发问题,例如某段代码的含义或其设计意图、某个技术问题的解决方案等,甚至重复实现相似的功能或不断提出相似的问题。造成这种情况的主要原因是各种软件开发知识没有被有效地捕捉和收集,因此也无法在需要的时候发挥作用。
目前我们正在围绕数据驱动的软件智能化开发与运维开展研究工作,其基本思想是利用数据挖掘、深度学习和知识图谱等技术实现软件开发与运维的智能辅助能力以及相关知识的抽取和沉淀。具体而言,我们面向软件开发者、管理者以及运维人员三类人群的智能化辅助支持开展了一系列研究和实践。
面向软件开发者,我们提供智能化辅助开发能力,包括智能化代码推荐和补全以及基于软件开发知识图谱的智能化问答等。
面向软件开发管理者,我们提供软件开发大数据分析能力,从软件质量和开发效能两方面进行辅助分析,包括代码质量分析与评估、软件开发问题追踪、代码克隆检测与管理、三方库依赖与软件供应链安全管理、开发人员画像等。
面向软件运维人员,我们提供智能化运维辅助支持,包括异常检测、故障根因定位、微服务架构评估等。
中教全媒体:国内目前的软件智能化开发在研究和实践中面临着哪些问题和挑战?
彭鑫:软件智能化开发目前在前端界面自动化、数据分析应用等细分领域中已经做得比较成功,实现了较高程度的自动化代码生成。现在面临的主要问题和挑战是如何支持更广泛意义上的软件智能化开发,从而实现真正的质的飞跃。
软件开发是一种创造性的工作,软件工程师在未来很多年里面依然会是软件开发的主体,智能化工具只是辅助性角色。在此背景下,如何实现人机协作就成了一个很重要的问题。例如,当前的智能化开发工具一般以逐行推荐的方式提供智能化辅助支持,这种模式与人类程序员由抽象到具体的思考方式其实是不匹配的,如何实现有效的人机协作还面临着很大挑战。
此外,软件开发的复杂性和创造性很大程度上来自于高层的应用需求和设计,人工智能在这两个层面上目前很难提供有效的帮助。与此同时,软件开发过程中又存在很多重复劳动,这些创造性不那么强的部分可能逐步会被机器取代。如何将人对于需求和设计的深度理解和思考等创造性思维和机器的智能化推荐等能力有机结合,以人机协作的方式将智能化开发向深层次推进,是我们需要持续探索和思考的问题。
中教全媒体:软件智能化开发未来将向何处发展?
彭鑫:我非常看好软件智能化开发的发展前景。软件定义一切,软件应用越来越广泛,并且会持续发生变化,所以软件开发的需求会越来越多。这要求我们必须通过智能化的手段和工具协助开发人员高质量地完成开发任务。此外,各种软件开发技术不断发展成熟,软件开发数据积累也越来越丰富,这些都为软件智能化开发的发展提供了有力的支持。
软件智能化开发未来应该会逐步向人机协作的深层次智能化开发发展。智能化辅助工具要想实现和人的深度协作,其智能化辅助推荐的过程就要与人的思考方式合拍,让人能够有效理解并与之交互。在实现人机交互过程中,可解释性也是非常重要的,这要求机器在给出推荐的同时提供一些原理性的说明和解释。同时,人的创造性思维也要和机器的智能化推荐有机结合。
总的来说,人机协作的深层次智能化开发要求智能化工具与人的思考方式更加合拍,以一种可理解的方式进一步实现有效的人机协作。
面向新型平台软件 培养高素质软件人才
中教全媒体:结合软件开发的历史进程看,当下软件开发有哪些特点?未来软件开发又将走向何处?
彭鑫:当前软件开发有四大特点。
一是敏捷化。敏捷开发的思想已有20多年的发展历史,如今已经深入人心。越来越多的软件都面临着持续交付和持续更新的压力,同时还要保证软件质量,因此软件开发必须通过一种快速迭代、快速反馈的方式进行。开发运维一体化(DevOps)、持续交付、持续部署都是这一思想进一步发展的体现。
二是云化。现在的软件开发环境大量都上云了,包括公有云和私有云。从版本库到持续集成环境和持续集成流水线,企业软件开发环境变得越来越复杂,已经不适合在单机上运行。在云化开发环境中,从代码提交到集成、发布、部署的整个过程都是在云上发生的,相关的工具也是以云化的方式部署和运行的。
三是流水线化。当前软件开发从持续集成到持续交付再到持续部署,已经高度流水线化。此外,来自软件运行环境的运维数据也已经实现了系统化的收集、处理、分析,并形成对于开发环节的快速反馈,从而进一步打通开发和运维环节,最终让整个软件的持续开发和演化过程都实现高度的流水线化。
四是开源和闭源相结合。拥抱开源现在已经成为很多企业的共同选择。很多企业软件产品和系统中都包括来自开源社区的操作系统、中间件、软件框架和代码组件。一些更大的企业还会有自己的开源战略,例如一些企业选择建立开源+闭源的混合生态,还有一些企业将自身的项目贡献给开源社区。
我认为软件开发的未来发展趋势可能包括以下三个方面。
一是更加智能化。一些简单、重复的劳动会越来越多地由智能化工具来承担或提供辅助支持。开发人员可以专注于业务、技术等方面的创新工作。
二是更加云化。各种软件开发工具与环境以及各种基础性的技术和业务服务都会以云服务的方式为应用软件开发提供更加有力的支持。
三是更加生态化。目前互联网企业有很多开放平台,例如各种小程序平台等。未来的软件开发会呈现更加全面和深入的生态化特点,不同的企业甚至个人都可以参与到生态化开发中来,甚至最终用户(End User)未来都会越来越多地通过最终用户编程的方式参与其中。此外,开源社区未来会和商业生态实现更加深度的融合。
中教全媒体: 新时代背景下,如何更好地培养核心软件研发人才?
彭鑫:新时代背景下的软件研发人才培养需要充分考虑智能化、云化和生态化软件开发的要求。例如,我们yl7703永利官网软件学院正在开展特色化示范性软件学院建设,其主要定位就是培养适应大数据和人工智能等新型平台软件要求的高素质软件人才。此外,我们还要更加重视对软件人才实践化能力的培养。实践是课程教学的重要组成部分,很多软件开发知识、技能都需要通过实践去理解和掌握。
首先,学生要深刻理解新时代软件开发云化、流水线化、智能化、生态化等特点。例如,为让学生理解云化软件开发的特点,我在本科软件工程课程中融入微服务架构和云原生软件的思想,同时通过华为软件开发云平台开展课程实践。整个课程开发实践中使用的软件版本库和持续集成流水线都在云上运行,同时学生还利用华为云虚拟主机在云上部署他们所开发的软件。
此外,学生要对计算机系统有整体的理解,同时重视计算思维、算法能力、分析解决问题能力等传统计算机和软件人才的基本能力。现在的软硬件技术栈越来越成熟,同时软件开发辅助工具也越来越强大,这些都使得应用开发变得越来越容易,开发人员对于底层系统的理解越来越少。但是,作为一个高层次软件人才,还是需要对整个软硬件技术栈和计算机系统有一个完整的理解。
中教全媒体:新工科发展背景下,结合软件工程教学实践,请谈谈如何做好新工科建设?
彭鑫:面向信息技术领域新工科建设,新一代的软件研发人员要在专业能力基础上有更广阔的视野。要对最新的软件开发技术潮流、软件开发生态有深刻理解,并且要对繁荣的互联网行业背后的生态链形成系统观、生态观。在国家发展和国际竞争格局之下,清楚认识到在表面繁荣的应用层面之下还有很多我们没有掌握的核心技术,在享受互联网生态发展所带来的红利的同时,要注意补足薄弱环节。
总的来说,做好新工科建设要在抓好原有专业能力培养的基础上,引导学生面向人机物融合的新时代建立深刻的系统观和生态观。
拥抱开源 贡献开源
中教全媒体:您如何认识开源?
彭鑫:开源对IT和软件技术的发展发挥了很大的促进作用,开源能够推动技术开放共享和群体创新。虽然今天的开源环境也融入了一些商业生态,但无论如何,开源的精神仍然激励着大家用一种开放的心态去面对技术的发展,打破商业壁垒和技术壁垒,共同推进技术发展。在过去的一二十年间,开源大大促进了我国IT和互联网行业的发展。现在中国企业不仅仅在用开源,同时也在投身开源、贡献开源。
总的来说,我认为开源对中国整个IT和互联网行业都是非常重要的,是促使相关行业迅猛发展的重要推动力量。目前,中国也正在建立自己的开源社区,面向未来,相信开源会继续蓬勃发展。
中教全媒体:面对中国开源市场发展现状,您有哪些思考或者建议?
彭鑫:中国企业充分发挥后发优势,积极参与并贡献开源社区,开源市场正在蓬勃发展。例如,国内建立的木兰开源社区目前正在蓬勃发展;此外,很多企业都在有意识地建设开源社区,例如华为主导建设的鸿蒙开源社区,同时通过开源软件竞赛等形式吸引更多的学生熟悉并参与开源社区发展。中国企业正在积极地参与开源、主导开源、贡献开源。
未来我们面临的一大问题是,在新的国际竞争形势下,开源社区的建设如何实现国际开源社区和国内开源社区的协调发展。我认为在当前发展阶段,一定要自主掌握开源平台,同时也要和国际开源社区进行良好的交流和互动。此外,中国企业要更加有意识地主导开源社区发展,借助于开源社区的力量提升企业市场竞争力。
转载来源:中教全媒 公众号