(图片来自 《星球大战前传1:幽灵的威胁》)
今年是软件工程3.0的元年,也已发布,其软件新范式是ML-(机器学习驱动研发和运维),更准确地说是LLM-:大模型驱动开发、大模型驱动运维,但是ML模型包含了大模型,而且解决问题往往需要不同的途径和方法,用“模型”更合适。
(软件工程3.0的新范式)
虽然我们把GPT-4的发布作为软件工程3.0的标志性事件,它是有着决定性的力量,但不是一触而就的,在这之前,人们做了大量工作,仅仅就GPT就经过GPT-1、GPT-2、GPT-3、GPT-3.5… 见下面这张图。
(GPT的演化历史,来自陆奇演讲PPT)
中的GPT3.5采用了深度神经网络学习和强化学习,只是基于序列建模的强化学习,而GPT-4则引入了RLHF(g from Human ,人类反馈强化学习)技术。所以,“软件工程3.0前传” 这篇文章,主要是讨论软件工程引入AI的那段历史故事。
说起人工智能和软件工程的关系,我们可以追溯到1950年图灵发表了文章:《》,在这篇文章中,图灵首次提出图灵测试,人工智能(AI)由此诞生(虽然人们普遍认为1956年是人工智能的元年,因为标志性事件:1956年在美国达特茅斯学院会议上,John 正式提出“人工智能”的概念,同年成立了国际人工智能联合会,致力于推进人工智能技术的研究和应用)。而将AI应用于软件工程,要迟20多年,例如在软件测试数据生成上,从1976年开始就有这方面的研究,但真正的研究历史应该从1990/1992年开始算。
(借助AI算法生成测试数据的论文发表数量)
1. AI驱动软件需求挖掘与建模
LLM本身就是大语言模型,未来在需求理解上能发挥很好的作用,而之前AI在软件需求工程实践上应用不多,更多是在学术研究上,华为公司有征集过这方面的研究课题,如 “研究拟基于SysML标准,研究自然语言处理算法、专业领域词库等方法的综合应用,以实现自然语言语料到系统模型的的半自动/自动转换,为基于云的MBSE建模服务提供基础能力支撑”。
这方面的研究及其应用实践主要有:
2. AI驱动软件设计
在设计上,AI应用相对比较少,毕竟算法缺少抽象能力、跨领域知识等,但它还是可以辅助设计,甚至可以利用机器学习的洞察力,通过 AI 驱动的工作流程探索复杂设计问题的新解决方案,并通过协作和设计融合实现更多的产品创新:
3.AI辅助编程
智能代码补全( code )根据源代码建立语言模型,从语料库学习已有代码特征(基于编程语言表征和基于统计语言表征),根据待补全位置的上下文代码特征在语料库中检索最相似的匹配项进行推荐和预测。相对于传统代码补全,智能代码补全的准确率高、补全形式多且可学习迭代。其中:
这方面有比较多的案例,例如国内的。
4.AI赋能测试
AI赋能测试的案例比较多,通过智能化手段增强测试路径生产能力、测试数据特征诊断能力以及测试断言的准确性。多数案例是基于图像识别技术、OCR技术完成图形化界面(GUI)的自动化测试,还有借助AI生成测试代码(知名的工具有)、接口测试参数等。在GUI上,基于计算机视觉识别能力构建UI的功能录制回放、设计还原、性能诊断与线上巡检已慢慢有所沉淀,有代表性的平台包括Test.AI、、Mabl 、、、、、RXT、 、、等。本公众号之前介绍这方面等内容比较多,例如:
5.AI赋能运维
AI在运维上的能力也比较突出,因为有大数据,所以形成AIOps这样一个大方向,AIOps有三大能力:
全面感知系统运维状态的能力,如立体化的实时监控、系统运行日志、告警、历史案例库等;
通过AI算法能力从大量运维数据中提取知识,根据知识下发命令;
系统具备自动化运维能力。
这里还总结得不够全,但已经足够显示人工智能在软件工程1.0、2.0时代已经发挥了一定的作用,只是在某些点、某些方面表现得还不错。但大模型GPT-4发布之后,则是全面等,甚至我们不用做什么设计、不用写一行代码,程序就可以运行了(见、)。
往前看更重要,未来在等着我们。