【综述解析·IV】State-of-the-Art and Challenges of Engineering ML- Enabled Software Systems in the Deep Learning Era

元信息:

  • 领域:机器学习驱动的软件系统(ML-enabled systems),软件工程
  • 作者单位:挪威克里斯蒂安尼亚应用科技大学(Kristiania University of Applied Sciences)
  • TL;DR:本综述聚焦在传统软件工程方法如何适配并改进机器学习系统开发的全过程,强调跨学科挑战与未来研究方向。(不是强调的是应用,所以该综述是更加抽象层次告诉读者如何开发 MLSys 并说明现存问题)

原文翻译&注释

摘要: 自20世纪60年代的软件危机以来,传统软件系统在软件工程(Software Engineering, SE)实践的推动下得到了显著改进。与此同时,人工智能(Artificial Intelligence, AI)致力于增强或替代人类的决策能力。在当今技术环境中,作为AI的一个重要分支,机器学习(Machine Learning, ML)通过利用来自多样化来源的大规模数据,推动了ML赋能(智能)软件系统的不断发展。尽管ML在传统软件开发中的应用日益广泛,但在后2010年深度学习(Deep Learning, DL)时代,软件工程实践在ML赋能系统开发中的整合,特别是贯穿典型软件开发生命周期(Software Development Life Cycle, SDLC)各阶段与方法论的应用,仍然缺乏深入探索。我们对现有文献的调研揭示了当前实践中的若干关键洞见,突出反映了在开发ML赋能软件过程中跨学科协作所面临的挑战,包括数据质量、伦理问题、可解释性、持续监控与适应性、安全性等方面的复杂性。本研究强调持续进行研究与开发的紧迫性,建议未来工作应聚焦于数据驱动的假设建模、非功能性需求的明确定义、成熟的设计原则的应用、以ML为核心的集成策略、开发流程的自动化、专门化的测试机制以及敏捷方法的有效运用。

引言

受20世纪60年代软件危机的推动,软件工程(Software Engineering, SE)这一学科应运而生,并促进了高质量软件的生产。软件工程旨在通过系统化方法来指导软件开发,从而实现软件项目的成功实施。换言之,软件工程是在软件开发中应用工程原理,这一定义已被IEEE标准术语词汇表所采纳。在开创性研究中,Wirth指出,尽管软件系统曾被高度承诺,但由于复杂性过高尤其是在分时系统引入之后许多软件项目未能按时完成与交付。为应对软件复杂性,软件工程引入了系统化和可量化的方法,用于软件的开发、运行、维护与退役。在软件工程中,软件开发生命周期(Software Development Life Cycle, SDLC)为高质量软件的生产提供了结构化流程,确保符合既定的质量、成本与时间要求。SDLC通常包括若干核心阶段:需求获取、软件设计、开发、测试与集成、部署、运行与维护

与此同时,人工智能(Artificial Intelligence, AI)也被用于构建自主系统(autonomous systems),以实现对人类决策过程的增强或替代,这一目标最终促成了机器学习(Machine Learning, ML)的发展。尽管在AI的发展历程中曾多次经历所谓的“AI寒冬”阶段,其研究与开发趋于沉寂,但在当前,机器学习作为AI的一个重要子集,结合来自物联网(IoT)、Web应用、企业数据库、智能手机和传感器等多种系统的大量数据,已成为极具活力的研究与应用领域。机器学习使计算机能够基于历史经验生成可行性洞察,并构建具备智能特征的ML赋能软件系统。在这类系统中,引入了运用机器学习算法与技术的模块或功能单元,称为ML组件,其用于执行传统上需依赖人类智能完成的任务。ML组件赋予系统部分自主性,用于评估与优化流程,以及预测未来趋势。ML的发展是一个多阶段过程,涵盖了各种算法和模型(如神经网络),以支持复杂的决策过程。ML模型开发过程一般包括数据收集、数据预处理、模型选择、训练、评估、参数调优和部署等阶段。尽管机器学习算法最初主要用于求解数学问题和目标识别,随后“最近邻算法”和“K最近邻算法”被引入以进行模式识别,而深度学习(Deep Learning, DL)则通过模拟人类思维过程推动了新一轮的发展浪潮。DL在2010年后获得显著突破,被广泛视为现代深度学习时代的起点,主要得益于GPU计算能力的大幅提升,从而催生了诸如AlexNet等新型卷积神经网络(CNN)架构。近年来,ML在全球范围内的快速发展,受益于大型语言模型(Large Language Models, LLM)和生成式人工智能的兴起。这些模型能够生成连贯且具有语境关联性的文本,使其能够执行文本补全、文本生成、对话式人工智能等多种任务。

关于SE与ML两大领域之间的相互作用,并非全新的研究议题,大量文献已探讨其相互影响。例如,有研究分析了这两个领域在软件体系结构设计中的交叉点,后者提供了关于软件组件及其交互的高层次描述。在此背景下,ML被视为提升传统软件系统架构设计能力的一种工具。所谓“传统软件”,即指用于自动化具体任务(如业务功能、网站等)的经典软件系统。在这方面,已有文献提供了诸多关于ML工具、技术和方法在软件工程中的应用视角,从而推动了高质量软件系统的构建。例如,ML已被应用于SDLC的特定阶段的自动化,如软件测试。此外,亦亟需设计架构风格、模式与框架,以实现ML组件在ML赋能软件系统设计中的无缝集成这种对SE与ML元素交互的架构关注,虽然代表了SE实践的一个重要方面,但现有研究尚未全面探讨SE工具、技术和方法在ML赋能软件系统(即由ML驱动的系统)开发中的应用,尤其是贯穿深度学习时代(即2010年之后)典型生命周期阶段与方法论的系统性研究仍属稀缺。

因此,本研究采用了整体视角来审视SE实践在ML赋能软件系统开发中的应用。我们对现有文献进行了系统回顾,深入探讨了当前软件工程实践在构建ML赋能系统中的状态与挑战,特别聚焦于典型SDLC阶段(以下简称为SE过程域)及软件开发方法。通过分析已有研究的发现,本研究力求提供对该领域知识现状的全面理解。

文章的其余部分结构如下:第2与第3节分别介绍研究的背景与方法;第4节呈现关于ML赋能软件工程实践与挑战的研究结果;第5节对此结果进行讨论;第6节为全文的结论。

背景

软件作为一种被设计与定制开发的产物,随时间推移会发生性能退化,并依赖于不断演进的技术框架。因此,软件工程(Software Engineering, SE)整合了流程、方法与工具,强调通过全面质量管理(Total Quality Management, TQM)、能力成熟度模型集成(Capability Maturity Model Integration, CMMI)、六西格玛(Six Sigma)及国际标准化组织(ISO)等原则,实现组织对质量标准的承诺。软件开发生命周期(Software Development Life Cycle, SDLC)将开发过程划分为若干可管理的活动,包括需求规格说明、设计、开发、测试、部署与维护等阶段,以便有效达成质量标准。SE方法提供了技术性指导,旨在解决缺陷管理、进度安排、资源分配与成本控制等问题。常见的软件工程方法包括瀑布模型、原型法、螺旋模型与敏捷开发等。在工具层面,软件工程采用诸如计算机辅助软件工程(Computer Aided Software Engineering, CASE)工具等技术手段,自动化各类开发任务,从而通过结构化或面向对象范式提升开发效率与软件质量。典型工具包括建模与图示工具、自动化测试工具以及代码生成器等。在接下来的子章节中,我们将介绍机器学习(Machine Learning, ML)中的核心概念与现代方法,以及其在开发ML赋能软件系统中与软件工程的交互机制。

2.1 机器学习的核心概念与应用

在深入探讨ML赋能系统的开发之前,有必要先阐明人工智能(Artificial Intelligence, AI)的基本内涵。文献指出,AI作为一个术语难以被严格定义。然而,已有诸多学者从历史角度尝试对其进行描述。例如,一个广泛接受的定义将AI描述为“在计算机中模拟人类智能,使其具备类人思维并模仿人类行为的能力”。

AI系统可以被设计为基于规则的系统或基于学习的系统。基于规则的系统(又称专家系统)是AI最基本的形式,其通过一组规则与基本数据构建知识表示,从而形成AI模型,用于模拟人类专家在处理知识密集型问题时的推理能力。而基于计算机学习的AI,即机器学习,则通过大量表示特定领域的数据集来生成其模型。

换言之,人工智能是一个涵盖所有旨在提升机器智能水平的总括性学科,而机器学习则是其中的一个子领域,专注于实现可基于算法自我学习并随时间持续进化的模型系统,无需人工干预

2.1.1 机器学习的原理与应用

Sarker指出,当前的数字世界充斥着来自物联网(IoT)、网络安全、移动设备、商业系统、社交媒体以及健康类应用等多种来源的数据。机器学习(Machine Learning, ML)在分析这些数据以及构建智能应用方面发挥着关键作用。ML方法通常被划分为四类:有监督学习、无监督学习、半监督学习和强化学习。这些模型被广泛应用于现实世界中的多个领域,以提升应用系统的智能化水平与功能表现,典型场景包括网络安全系统、智慧城市、医疗健康、电子商务、农业等。

注:当然还有弱监督学习

在ML模型开发中常用的算法包括线性回归、逻辑回归、决策树、支持向量机(Support Vector Machines, SVM)、朴素贝叶斯、神经网络、K均值聚类以及随机森林等。常见的机器学习应用实例包括交通预警、社交媒体内容分析、自动语言翻译、交通与通勤管理、动态定价与产品推荐、虚拟个人助手、自动驾驶车辆等。此外,深度学习(Deep Learning, DL)及其核心技术深度神经网络(Deep Neural Networks)也属于ML方法的一部分,能够对大规模数据进行智能分析。

ML开发过程通常包括以下几个主要阶段:数据收集、数据预处理、模型选择、模型训练、模型评估、参数调优以及预测生成。其中,数据预处理阶段对最终模型的质量具有显著影响,是整个流程中的关键环节。该阶段涵盖对原始数据进行评估与优化的操作,例如数据清洗、数据转换与降维等。此类处理旨在解决诸如缺失数据、不一致数据、格式错误以及数据类型不规范等问题。然而,尽管其重要性不容忽视,数据预处理在实际ML开发过程中却往往未能获得足够重视

2.1.2 对大规模数据集的需求

在ML模型的各个开发阶段中,数据均具有举足轻重的地位。普遍观点认为,训练数据集的规模越大,模型的性能表现越优。因此,从企业应用、网站、电子邮件、物联网设备、智能手机和传感器等多样化来源广泛收集数据,已成为ML模型开发的重要前提。

在训练过程中,特征选择的代表性至关重要,需避免样本数量过小或过大的情况。为确保模型的性能,必须对数据集进行系统性的训练测试验证划分,并在每一训练阶段后进行精细调优。这些过程有助于提升模型的泛化能力与稳定性,从而确保其在真实场景中的有效性与鲁棒性。

2.1.3 机器学习中的质量考量

在机器学习系统的性能、稳健性、可靠性、公平性、可扩展性等质量保障中,数据与算法均扮演着至关重要的角色。然而,当前多数研究人员与从业者更倾向于聚焦于算法本身,而相对忽视了数据质量的影响。在关系数据库中,已有大量领域特定的技术用于评估与提升数据质量,这些技术在机器学习中的适用性亟需审视。此外,在机器学习语境下,还存在跨领域与通用维度的数据质量要求,包括:数据质量的业务规则与治理标准、文档化数据规范与完整性维护、数据一致性、新鲜度、重复性、完整性、来源与异质性;数据流处理、采样、降维与异常值处理;特征选择与提取;数据准确性与偏差;以及安全性方面的问题,包括机密性、隐私性、可用性与访问控制等。就安全性而言,McGraw等人指出了机器学习相关风险中最为关键的几类安全风险。这些风险在下表中予以详细描述。

表 1:机器学习中的主要安全风险

风险类型 特征说明
对抗样本 对抗样本是最常见的机器学习风险之一,指通过恶意构造输入使模型产生错误预测。
数据投毒 攻击者通过蓄意篡改训练数据,破坏机器学习系统的正常行为。
在线系统操纵 在系统持续学习阶段,攻击者可通过输入错误数据“引导”系统逐步偏离正确行为。
基础系统被攻陷 若基础模型在迁移学习中已遭篡改,可能导致迁移结果出现异常行为。
数据机密性泄露 攻击者可能从使用敏感数据训练的模型中提取出私密信息。
数据可信性不足 数据来源不可靠(如传感器不稳定或数据缺乏完整性)将导致风险。
缺乏可复现性 若机器学习系统的实现缺乏良好描述与报告,其结果不可复现,从而导致潜在风险难以察觉。
过拟合 模型因过度记忆训练数据而非泛化能力增强,容易受到对抗样本攻击。
编码完整性问题 元数据等编码信息失真可能使模型偏离实际任务,错误聚焦于无关特征。
输出完整性问题 若模型输出未经验证,攻击者可在结果中隐匿行为,构成潜在威胁。

物联网(IoT)的兴起也引发了关于数据质量的多重担忧,尤其是在安全性与隐私方面。相关研究指出,智能设备通过未授权监控、非受控数据生成与使用、不充分的身份验证机制等方式采集个人数据,带来了政策与治理层面的挑战。传统的隐私保护策略已难以有效应对此类数据采集与使用。此外,传感器产生的多样化数据类型、采集粒度与用户人群异质性也进一步影响了数据共享中的安全性与隐私性。在具体的物联网应用中,研究者亦对商业化语音用户接口(如智能音箱)的质量特性进行了研究。例如,Pyae与Joelsson的研究考察了Google Home在可用性、用户体验与实用性方面的表现。

2.1.4 机器学习在软件开发中的应用

Meinke 与 Bennaceur 的研究指出,机器学习(ML)已在多个软件工程(SE)领域得到成功应用,涵盖从软件行为抽取到测试与缺陷修复等方面。机器学习、深度学习(DL)以及大语言模型(LLM)的应用可预见地扩展至软件规范抽取、设计模式识别、代码生成、测试用例生成、缺陷检测以及软件配置中的自适应策略学习等任务。机器学习方法亦可用于预测或估算软件质量、软件规模、开发成本、开发工作量、可靠性、软件缺陷、可复用性、发布时间节点与可测试性等关键指标。

在软件维护领域,Panichella 等人提出了一些关于移动应用维护与演化的有价值洞见。首先,机器学习能够基于用户评论内容,构建出与维护和演化相关的句子类别的高层次分类体系。同时,借助自然语言处理(NLP)技术,机器学习可提取用户在应用商店评论中表达的与维护和演化相关的意图。与此同时,软件工业中所产生的庞大源代码及其他软件工件数据,为模式学习与生产力工具开发提供了基础,例如基于 NLP 的软件代码搜索、代码推荐与自动缺陷修复等功能。据研究,GitHub 及其他私有代码库中积累了大量源代码,同时也存在着诸如版本差异的增量更改、持续集成测试及其结果、开发者在 Stack Overflow 等论坛上的回复等丰富的软件工件。Abubakar 等人亦讨论了软件工程与机器学习之间在项目工作量与质量估算方面的交互作用,并进一步展望了两者在规模扩展、工具集成与性能评估等方面融合的潜力。Meinke 与 Bennaceur 同时指出,敏捷开发正日益成为融合机器学习于增量与探索性编程的趋势

搜索式软件工程(SBSE) 是机器学习在软件工程中的另一个典型应用领域,其利用元启发式搜索技术生成并评估满足适应度函数标准的软件测试。Harman 将其描述为一种应对噪声大、定义不明确、相互竞争且交织复杂的系统开发问题的方法。在该语境下,机器学习的引入促使软件工程从追求完美的理想化目标转向更加现实但不完美的开发实践。

总体而言,机器学习为软件行为抽取、测试与缺陷修复等任务提供了更为高效的流程支持。在基于 NLP 的代码搜索中,机器学习提高了检索的精确度与速度;在项目的成本、规模、工作量与质量估算方面也发挥了显著作用,从而优化项目规划与决策,简化复杂任务,并助力实现更加务实的软件开发实践。此外,机器学习对软件的可靠性、可复用性、可测试性与发布时间的预测也有助于资源的合理分配。然而,机器学习在设计模式识别与代码生成等方面的应用仍具复杂性,需精细建模与专业知识的支撑。尽管在测试用例生成与缺陷检测方面表现优异,但其决策过程的透明性仍存在不足。因此,数据质量与专业知识成为其应用中的关键考量,突显出机器学习在软件工程应用中的权衡与复杂性。

2.2 面向机器学习增强软件系统的工程实践

在本研究的语境下,所谓“ML增强软件系统”是指融合了机器学习(ML)组件的软件系统。此类软件利用机器学习执行通常需要人类智能才能完成的任务,例如语言翻译、图像识别或决策制定等。通过对大规模数据进行训练,ML组件能够以极高的精度完成这些任务。因此,将机器学习集成至软件中,可显著提升其处理复杂任务的效率与效果,超越传统软件在单独运行下的能力。

ML增强软件系统的工程实践,构成了软件工程(SE)与机器学习学科交汇的另一关键维度。多位研究者指出,开发此类系统时需采用差异化的工程方法。例如,有学者将ML增强系统定义为通过至少一个ML组件实现关键功能的软件系统。这些组件可用于图像识别、语音识别、交通预测、产品推荐、自动驾驶、垃圾邮件过滤、恶意软件检测、虚拟个人助理及欺诈识别等场景。上述应用场景凸显出在ML增强系统的开发过程中,需格外关注其技术、伦理与社会层面的考量。

基于此,有研究提出了机器学习治理的分层模型,并引入了发展“可问责ML算法”的一系列原则,包括责任性、可解释性、准确性、可审计性与公平性等,其对社会产生深远影响。研究也指出,当前集成机器学习至传统软件系统的兴趣日益浓厚,这一趋势促使软件开发流程发生转变。具体而言,机器学习引发了若干与传统软件开发本质不同的挑战,例如数据发现与管理的复杂性显著上升;模型定制与重用对技能的要求大不相同;此外,ML组件难以被视作独立的模块进行处理。

在相关研究中,有学者强调了ML增强系统的一些内在特性,她指出,这类系统本质上依赖于通过算法实现学习与问题求解能力的数据驱动组件,具备明显的概率性特征,而非传统软件所具有的确定性特征。尽管ML增强系统在构建、部署和维护方面与传统系统有许多共性,但由于预测型算法本身所带的不确定性,此类系统存在较高的误差边际,使得其测试与验证过程更加复杂。针对需求工程的角度,研究也指出,开发基于ML的复杂系统时,亟需针对性的软件开发流程加以支持。然而,当前尚无专门面向此类系统需求定义与规范制定的开发流程。

从软件质量与测试的视角看,也有研究表明,目前许多ML应用系统由缺乏软件工程专业知识的开发人员构建,导致其测试覆盖不足、整体质量水平较低。

2.3 背景总结

本节概述了软件工程原理及其与机器学习的融合,重点阐明二者在现代软件开发中的交叉关系。软件工程涵盖了一系列旨在保障软件质量的过程、方法与工具。软件开发生命周期(SDLC)将开发活动划分为需求分析、设计、开发、测试、部署与维护等阶段,每一阶段对于实现质量标准与提升生产效率均具有关键作用。

而机器学习聚焦于通过监督学习、非监督学习、半监督学习与强化学习等算法形式,赋予系统以自学习能力,推动了包括网络安全、医疗健康与电子商务等领域的重大进展。线性回归、神经网络与深度学习等技术为机器学习从海量数据中提取洞见提供了基础。

将机器学习整合至软件工程实践中展现出显著潜力,尤其体现在测试自动化与网络安全等任务的推进方面。此外,已有研究尝试将软件工程原理适配于ML增强系统所面临的独特挑战,后者因其概率性算法带来了全新的复杂性。然而,当前文献仍缺乏对如何有效借助软件工程方法开发具备鲁棒性、可靠性与伦理规范的ML增强软件系统的深入探讨。

本研究旨在填补这一空白,探索SE与ML的无缝集成路径,促进两大学科在理论与实践层面的共同进步。下一节将介绍本研究采用的文献综述方法,以识别当前领域的研究趋势与存在的知识空缺。

3 方法论

本研究的目标是提炼出研究者关于软件工程(SE)与机器学习(ML)领域交互的核心见解。具体而言,我们专注于探讨与ML增强软件系统开发相关的SE实践中的现状与挑战。我们的目标是分析并整合现有研究,从而深入理解基本原理,并得出关于分层技术的结论,重点关注SE过程领域和软件开发方法。在本节中,我们将介绍我们的文献综述指南、文献选择策略和分析方法。

3.1 采用的综述指南

综述指南作为构建我们综述过程的方法论框架,至关重要。在本节中,我们总结了现有的综述指南,这些指南对于确保我们研究的完整性和可靠性起到了重要作用。Kitchenham 等人和 Kitchenham 与 Brereton 提出的指南强调了综述过程中的关键里程碑,涵盖了目标定义、综述执行和研究结果报告等内容。这些详尽的指南列出了若干具体活动,包括制定综述协议、进行系统搜索、做出选择性决策(如纳入与排除标准)、数据提取、结果分析及随后的讨论与结论。此外,Okoli 和 Schabram 提出了一个扩展的指南,将质量评估和综合分析作为补充环节。另有 Randolph 及 Creswell 和 Poth 描述的定性(现象学)综述指南,专门旨在阐明个体与特定现象相关的“生活经验”。该指南包括一系列步骤,如括化、数据收集、识别有意义的陈述、解释以及对观察现象的全面描述。

对于我们的研究,我们选择了一个包含目标定义、文献搜索、选择过程(纳入标准)、数据提取、结果分析及随后的讨论与结论的综述指南。根据 Randolph 提出的现象学方法,我们特意摒弃了与ML增强软件引入相关的个人经验、偏见和预设观点。这一方法确保我们的综述在探索所考察主题时保持客观和无偏的视角。

3.2 文献搜索与选择策略

为了与我们的综述目标及所采用的综述指南保持一致,我们选择了五个权威的数字图书馆:SpringerLink、Scopus、ScienceDirect、IEEE Xplore 和 ACM-DL,用于收集与本研究相关的文献,这些文献的时间范围从2010年1月开始。该时间框架的选择标志着现代深度学习(DL)时代的开始,促使了成千上万的AI初创公司致力于深度学习技术的发展。在文献搜索中,我们使用了与需求规格、设计、开发、测试、部署、维护以及开发方法论相关的多个关键词,尤其是在工程化ML增强软件的背景下(见第2节)。此外,我们在文献搜索策略中采用了纳入标准,并制定了搜索查询,以在数字图书馆中进行高级搜索。搜索查询包含了作为操作数的替代搜索词或同义词,以及“AND”和“OR”操作符。因此,我们运行了以下搜索查询,并从选定的数字图书馆中收集了期刊和会议文章。搜索字符串的构造基于本研究所采用的一般框架:“software development phases” AND “integration with ML” AND “software development methodologies.”。

software engineering” OR “requirement specification” OR “requirements engineering” OR “software construction” OR “software design” OR “software architecture” OR “software implementation” OR “software testing” OR “software deployment” OR “software maintenance” OR “user support” OR “software release” OR “software analysis” OR “software configuration management” OR “software qualityAND

AI-based” OR “AI-powered” OR “AI-enabled” OR “artificial intelligence-based” OR “artificial intelligence-powered” OR “artificial intelligence-enabled” OR “ML-based” OR “ML-powered” OR “ML-enabled” OR “intelligent software” OR “AI-augmented” OR “ML-augmented” OR “AI-infused” OR “ML software” OR “AI softwareAND

agile OR scrum OR kanban OR waterfall OR spiral OR “component-based” OR DevOps OR iterative OR lean OR “extreme programming

此外,我们制定了以下搜索查询,以满足ScienceDirect对较短搜索字符串的要求。在该搜索字符串中,我们基于与“软件工程”、“ML增强”或“基于AI”以及“敏捷”相关术语的变体,使用了两个AND操作符连接三个操作数:

“software engineering” AND (“AI-based” OR “AI-powered” OR “AI-enabled” OR “ML-based” OR “intelligent software” OR “AI-infused” OR “AI software”) AND “agile”

表2概述了选择和排除主要文献的标准,以确保专注于相关的、高质量的同行评审文献。因此,共收集了412篇期刊和会议文章。图1展示了这些收集到的文章在各数字图书馆中的年度分布。随后,我们应用了基于标题、摘要和全文内容的过滤条件,专注于与开发ML增强系统的软件工程实践相关的论文。与软件工程中ML工具应用相关的论文被排除,最终识别并选择了40篇与我们研究相关的论文。

表2. 主要研究文献的纳入与排除标准

标准 纳入标准 排除标准
时间范围 2010年1月及以后发布的研究。 2010年之前发布的研究。
来源 来自SpringerLink、Scopus、ScienceDirect、IEEExplore和ACM-DL的期刊和会议论文。 来自这五个数字图书馆之外的来源的论文。
发表类型 同行评审的期刊文章、会议和研讨会论文。 非同行评审的文章、书籍、学位论文、灰色文献。
关键词与范围 聚焦于软件开发阶段与机器学习的集成、软件开发方法论(见搜索字符串)。 与ML增强软件开发或方法论无关的研究。
语言 英文论文。 非英文论文。
image-20250724073633.webp
除了使用上述搜索字符串外,我们还通过向前和向后滚雪球法进行验证,选择了初始论文,并通过我们的数据提取过程进行指导,该过程包括基于标题、摘要和全文的筛选。滚雪球法作为验证方法,最终为我们的分析增加了26篇论文。每个数字图书馆查询和选择的主要研究数量的摘要列于附录A中。

3.3 次级研究分析

多个系统性文献综述和映射研究突出展示了与机器学习(ML)增强系统相关的各种软件工程(SE)实践,涵盖了非功能需求、架构、项目管理和软件质量保障等领域。

  • ML增强系统中的非功能需求 :De Martino 和 Palomba 对ML增强软件中的非功能需求(NFRs)进行了分类和讨论。作者重点关注了公平性、透明性、安全性和性能优化等关键问题,强调了自动化工具在处理这些方面中的必要性。研究指出,ML系统需要持续监控和调整,以确保符合非功能需求。
  • 架构考虑因素 :Nazir 等人探讨了ML增强系统的架构挑战和最佳实践。他们识别了主要的设计权衡,例如在模型精度和计算效率之间的平衡、处理ML预测中的不确定性以及确保不同ML组件间API一致性。该研究还强调了将ML功能模块化的重要性,以提升可维护性和可扩展性。
  • ML的SE实践 :Nascimento 等人提供了应用于ML软件的SE实践的系统性综述。作者发现,传统的SE方法在应用于ML增强系统时存在空白,尤其是在需求工程、测试和持续集成方面。该研究建议应调整SE框架,以更好地适应ML开发的迭代性和数据驱动特性。
  • 软件项目管理 :Cerdeiral 和 Santos 研究了高成熟度环境下的软件项目管理,提供了与ML增强系统相关的见解。研究突出了需要灵活的项目管理方法,以适应ML开发的实验性特性,强调迭代周期和持续反馈循环。
  • SE实践中的ML应用 :Wang 等人研究了ML在软件工程中的作用,回顾了ML模型如何用于增强各种SE任务,包括缺陷预测、代码生成和自动化测试。作者指出,虽然ML技术可以提升软件质量,但它们也带来了与可解释性和可靠性相关的新挑战。
  • 用于自动化软件维护的MLZhang 等人聚焦于大语言模型(LLM)在自动化程序修复中的应用。研究结果表明,LLM可以显著增强软件维护过程,但作者也指出了诸如幻觉、缺乏可解释性以及将ML驱动的修复技术整合到传统SE工作流中的困难等问题。
  • 特定领域应用中的ML :Antonopoulos 等人对能源需求响应中的ML方法进行了系统性综述。尽管该研究具有特定领域性质,但它提供了更广泛的见解,表明ML工程实践必须根据行业特定的约束、数据可用性和操作需求进行适应。
    总体而言,回顾的次级研究共同揭示了工程化ML增强软件的复杂性和不断演变的特性。尽管传统的SE实践为基础框架提供了支撑,但它们往往难以解决ML特有的挑战,如数据依赖性、模型行为的演变和非功能需求的合规性。此外,迫切需要自动化工具来简化非功能需求管理、测试和持续集成。灵活的架构模式对于支持ML模型的模块化、不确定性管理和可扩展部署至关重要。ML从业者与软件工程师之间的跨学科合作对于弥合模型开发与软件系统需求之间的鸿沟至关重要。进一步而言,需改进项目管理方法,以便更好地与ML工作流的迭代性和实验性特征相适应。

3.4 分析与解释方法

在本研究中,我们将选定的文章作为分析单元,而不是直接对与该领域相关的个别专家进行访谈。实际上,我们依赖现有的研究作为次级数据来源,旨在阐明在机器学习(ML)与软件工程(SE)交互领域内,开发ML增强软件的主流工程实践。选定的研究经过进一步审查,旨在识别与SE实践各个领域相关的有意义陈述。为此,我们收集了作者关于ML增强软件系统开发中实践和挑战的经验性陈述,并将其原文保存在电子表格中。随后,这些经验性陈述被重新表述,以提供更清晰的阐述和背景,如第5节所讨论的那样。研究结果通过表格、折线图、甜甜圈图和饼图等方式进行可视化呈现。

4 结果与分析

本节深入探讨了我们关于工程化ML增强软件的现状和挑战的综述核心结果。我们的目标是提供关于ML增强软件系统开发中SE过程领域和方法论的当前实践的见解,同时揭示研究人员、开发人员和行业从业者面临的挑战。我们的分析不仅概述了该领域的现状,也为更深入理解SE与ML之间的相互作用铺平了道路。接下来,我们将呈现关于SE过程、各个过程领域和软件开发方法论的结果。

4.1 SE过程领域

我们对选定研究的分析表明,过去十年中,关于开发ML增强软件的工程实践的研究数量有所增加,如图1中的气泡图所示,我们预计这一趋势将继续增长。接下来,我们调查了选定研究在每个典型软件开发生命周期(SDLC)阶段的分布情况。图2中的甜甜圈图展示了每个过程领域及其在选定研究中的百分比分布。该分析还包括一个引用映射图(图3),该图描绘了SE过程领域——需求、设计、编码、测试、部署和维护——中选定研究的相互关系。此图提供了与每个过程领域相关的引用概述,并揭示了研究是否涉及针对ML增强软件的过程领域的一般问题,或是深入探讨与ML组件相关的具体方面。选定研究的审查进一步展开,重点关注作者对在开发ML增强软件过程中实施典型SDLC阶段的当前实践的看法。以下,我们将介绍作者关于需求规格、设计、编码、测试、部署和维护的观点
image-20250724074109.webp
image-20250724074214.webp

4.2 需求规格

选定研究的作者在实施ML增强软件的需求规格方面提出了不同的观点,特别是在传统软件组件与ML组件之间的集成水平方面。图2展示了选定研究在SE过程领域中的百分比分布。

在这方面,Rahman 等人是尝试反映两个组件的需求规格的研究之一。根据作者的见解,为ML增强应用程序制定需求规格需要结合传统软件开发中使用的ML特定需求和传统需求工程活动。他们强调,ML组件的规格可能会频繁变化,这为精确描述需求带来了挑战。Czarnecki 还指出了在自动驾驶车辆(AV)软件上下文中需求工程的性质。自动驾驶车辆的功能需要数据驱动,这要求通过专家辅助的方式从交通数据中持续提取驾驶规格。类似地,Muhammad 关注城市环境中的自动驾驶车辆,并提出了在人与自动驾驶车辆之间的通信中,信任、接受度和安全等人因因素作为需求的重要性。这有助于构建具有更高安全性、信任度、驾驶性能以及自动驾驶车辆与驾驶员互动的自动驾驶车辆。Martínez-Fernández 等人的综述指出,60%的选定研究专门集中于ML组件的非功能需求。作者强调,这些研究主要旨在引入新的ML特定质量属性和规格符号,以应对概率结果或模糊性挑战。此外,综述还揭示,只有少数研究提供了关于ML增强系统开发中需求工程过程的全面视角

当将机器学习(ML)组件添加到传统软件中时,软件开发人员在适当地识别和理解这些复杂且异质的背景时面临更多挑战。在这方面,Wolf 和 Paine 提出了一个用于进行需求规格的感知理论,从而厘清传统软件和ML增强系统开发中需求规格阶段之间的交互情况。

根据 Lu 等人的研究,现有的需求规格实践通常忽略或模糊表述了构建负责任AI的特殊需求。鉴于安全性的关键伦理性,尤其是在处理文化敏感数据的ML增强系统中,作者提倡更深入地探索这些需求。他们建议使用诸如伦理用户故事、研讨会、访谈、演示和原型等需求提取技术。他们还建议将伦理原则分类为非功能质量需求,确保可验证性,并在整个SDLC中保持数据需求。关于ML组件特有的需求规格的实践,以下几项研究进行了进一步阐述:

  • 在关于可信AI软件的技术简报中,Vakkuri 等人强调了伦理原则和法规(如通用数据保护条例GDPR)的融入,重点关注ML组件。作者概述了常见的AI伦理原则,包括透明性、公正性、平等性、不伤害原则、责任、问责制、隐私、善意、自由、自治、信任、可持续性、尊严和团结等。
  • Habibullah 等人强调,与传统系统相比,依赖ML的系统对非功能需求提出了独特要求。传统需求如模型准确性被解释性等新需求所增强。
  • 针对因不确定性而导致的ML项目规划挑战,Nahar 等人提出了缓解策略,包括加入缓冲时间。他们将数据安全视为一种非功能需求,并强调了管理层对SE和ML的理解对将产品团队与模型团队对齐的重要性。
  • Dey 和 Lee 强调了安全性和稳健性作为ML关键需求,指出缺乏适当的需求分析和建模技术来处理不确定性。作者倡导明确的需求规格,涉及数据、ML模型和ML过程。此外,他们建议为可解释性、伦理、法律和稳健性等非功能需求建立量化和可衡量的定性目标。

4.3 设计

与需求规格类似,作者们对于在开发ML增强软件时,执行设计阶段的现有实践提出了不同的观点,特别是在传统软件组件和ML组件之间的集成方面。根据一项研究,73%的ML系统开发项目部分或完全应用了传统的软件设计方法,并根据用户需求调整设计流程。作者还补充道,在ML系统的开发中应用SE方法将提高用户满意度。

在针对ML增强系统的软件设计领域,Meyer 和 Gruhn 强调了采用一些成熟的设计原则,如关注点分离、设计模式以及面向对象和面向组件的开发。作者引入了基于概念的软件工程(SE)概念,这是面向组件的软件工程的设计目标的融合,涵盖了生产力和可扩展性,并与ML考虑因素相结合,特别关注强化学习的准确性。然而,Subramonyam 等人认为,人机交互禁止了用户体验设计师和开发者之间的关注点分离。根据他们的观点,这是因为人类需求必须塑造ML界面设计、底层ML子组件和训练数据。

在相关的工作中,Jüngling 等人提倡应用设计模式作为可视化ML系统设计的手段。他们通过一个乘客计数系统的用例进行示范,采用了策略设计模式,将基于规则和ML组件相结合。此外,作者建议采用统一建模语言(UML),以便软件工程师、ML专家和知识工程师之间的设计描述能够更有效地沟通。

此外,Lu 等人深入探讨了通过设计实现可信度,识别了数据、算法、架构和整个软件等关键因素。他们还强调了在设计可解释AI(XAI)用户界面方面的持续努力。广泛来说,正如某些研究所强调的,ML增强系统的设计、开发和操作与传统软件系统存在显著差异。以下是不同作者关于在软件设计中,特别是在ML组件方面的现有实践的进一步见解。

  • 在他们的研究中,Hartikainen 等人深入探讨了机器学习应用开发中的人机交互(HCI)设计实践。他们对人工智能的人机交互(HCAI)进行了详细阐述,强调了信任度和可用性等关键设计约束,以及可解释性、透明性、伦理、公平性、责任和可持续性等关键原则。作者通过各种机器学习应用领域的示例说明了这些概念,涵盖了从客户服务聊天机器人到企业资源规划(ERP)系统及物联网(IoT)解决方案等多个方面。
  • Kusmenko 等人讨论了将深度神经网络模型集成到软件架构中的问题,这些神经网络与传统代码共存。其方法论自动化了神经网络的ML开发过程,强调设计数学密集型算法以解决复杂问题,而无需进行分解。
  • Czarnecki 探讨了模块化和可重配置架构,使用依赖性模式为自动驾驶系统构建了一个发布-订阅框架。作者通过机器人操作系统(ROS)举例说明了这种方法,其中组件具有基于消息的接口,并支持轻松的运行时重配置。
  • Rahman 等人讨论了挑战,强调了ML增强系统中灵活设计的必要性,以适应算法和框架的快速变化。他们指出,由于数据模式的变化,ML增强系统的性能可能随着时间的推移而下降,这与需求变化或存在的漏洞无关。这种动态特性使得预测维护需求变得困难,突显了设计灵活性的重要性。

4.4 编码 (Coding)

在传统软件的编码阶段,涉及软件集成以及函数、对象等的构建。在开发ML增强软件的背景下,编码扩展到数据预处理和模型训练等任务。以下是关于编码现有实践的不同观点:对于 Martínez-Fernández 等人来说,ML增强软件中的ML组件被视为嵌入式的ML代码或库,作为ML算法的具体实现。Lu 等人提出了伦理知识图谱,作为在ML增强系统中实施伦理原则和指南(例如GDPR)的一种工具,能够自动评估应用程序编程接口(API)是否符合AI伦理法规。在 Rahman 等人的研究中,重点讨论了ML组件,强调ML应用的编码框架、库和方法应与目标平台的需求相一致。作者提倡采用代码重用、精心选择框架(例如scikit-learn、TensorFlow、Keras)以及ML模型的持续集成等实践。这种方法确保了在硬件-软件生态系统快速发展的背景下,实施选择考虑了可移植性、兼容性和适应性。在自动驾驶系统的背景下,Czarnecki 强调了将监督学习与深度神经网络结合,以实现基于ML的感知功能。

4.5 测试

在传统的SDLC中,测试的目的是评估和验证结果软件,重点关注诸如修复错误、降低开发成本和提升性能等方面。随着ML逐步融入软件系统,测试方法必须发展以应对ML增强应用程序所带来的独特挑战和需求。接下来,我们将呈现对次级研究的分析,这些研究被分类为关于ML系统中各种测试策略和挑战的概述。
表3. 作者对ML增强软件测试实践的见解

测试方法 特点说明
模糊测试(Fuzzy testing) 利用随机输入数据识别系统漏洞、增强鲁棒性,同时不影响系统运行。
金丝雀测试(Canary testing) 在真实运行环境中由用户协助验证新特性,在全面部署前先行上线小规模版本进行测试。
ML测试/评估 评估ML模型性能,用于模型优化。
系统验证(System verification) 在预生产环境中对开发系统进行验证,采用半自动或自动化过程,涉及形式化模型及多种类型的测试方法。
混合系统的集成测试 在部署后进行实时监控,评估ML与非ML组件集成效果。
分布式系统的集成测试 在完成ML模型测试后进行系统集成测试,例如与TORCS模拟器集成。
单元测试(Unit testing) 使用如 PyUnit(Python)等框架对代码单元进行验证。
ML交叉验证测试 确保测试结果具有统计学意义,防止过拟合与偏差。
(半)自动与迭代验证 在CI/CD管道中对数据、数据模式及模型进行持续测试与验证。
伦理接受测试(Ethical acceptance testing) 为伦理原则定义可测试的接受标准,将ML与非ML组件交互纳入测试,同时考虑AI智商(AIQ)与人因要素。
  • 测试方法 :选定研究的作者展示了对ML增强系统进行不同层次的功能和非功能性测试(即接受测试、单元测试、性能测试、回归测试和可扩展性测试),如表3所示。例如,Syahputri 等人编纂了当前研究中观察到的敏捷方法中的测试方法。此外,Gutierrez 等人提出了基于模糊测试的方法,作为加速操作测试的一种手段,确保飞行软件的完整性而不干扰系统运行。类似地,其他研究强调了诸如金丝雀测试(canary testing)等测试方法,这是DevOps背景下的一种自动化质量保障方法。
  • 模型验证 :在机器学习中,通常所称的“模型验证”是指使用模型在训练过程中未接触过的数据来评估其性能。在DevOps中,验证通常在提交代码并本地运行测试之前进行。一旦模型评估满足性能要求,ML代码就需要与系统代码进行集成,以便进行生产使用。此外,针对ML基础软件组件的测试不仅仅集中于检测源代码中的错误,还包括模型错误和不确定性所带来的固有问题。因此,自动化测试过程成为SE中的重要策略,测试团队需要创建测试用例以捕捉ML模型所需的行为。
  • 自动化与集成测试 :此外,在分布式环境中,集成测试是必须的,并且在ML模型测试之后进行,目的是验证和确认开发模型的质量。就此,Steidl 等人讨论了作为CI/CD(持续集成-持续交付)管道一部分的测试,测试可以手动、半自动或自动进行,涉及数据、数据模式和模型。
  • 早期测试与用户反馈 :通过在开发过程的早期进行测试来确保ML增强软件的功能至关重要,尤其是考虑到ML本身固有的不确定性。采用专家评估并在初期阶段收集最终用户的反馈,有助于在迭代的ML开发过程中尽早发现模型缺陷。
  • 伦理与质量保障挑战 :验证与确认测试在满足ML增强系统需求规格中起着关键作用,其中伦理接受测试提供了一种识别和验证与伦理相关的设计缺陷的方法。然而,测试ML增强软件充满挑战。ML增强系统的复杂性质给ML组件以及整个软件产品或服务的测试和质量保障带来了诸多挑战。常见的挑战包括缺乏明确的测试策略、模型测试的低优先级、系统测试承诺不明确,以及团队内测试过程和结果的不透明性。
  • 独特的质量标准 :ML模型中固有的不确定性要求在实施严格测试时需要专门的专业知识,特别是针对ML增强系统中的非功能性需求。为ML增强系统开发测试用例需要独特的质量标准,以应对与ML模型输出相关的不确定性。Rahman 等人指出,测试和修复ML应用中的错误是一项艰巨的挑战,这一挑战由于ML模型的不可解释性而加剧,进而妨碍了对错误行为的理解和解释。

在深度学习(DL)背景下,测试和调试的先进技术对提高ML系统的可靠性和性能至关重要。关于DL错误特征和修复的综合研究揭示了DL系统中的常见错误模式和挑战,具体如下:

  • 先进的技术 :诸如DeepLocalize等先进技术用于深度神经网络(DNNs)的故障定位,UMLAUT用于通过程序结构调试DL程序,DeepDiagnosis用于自动诊断DL程序中的故障并推荐可行修复的解决方案。这些研究强调了结构分析和自动诊断在定位DL模型故障中的重要性。
  • 自动化调试工具 :MODE是一个自动化的错误调试系统,通过使用状态差异分析和战略性输入选择来识别和修正模型中的异常。
  • AUTOTRAINER :类似地,AUTOTRAINER通过自动化检测和修复深度神经网络中常见的训练问题(如梯度消失和数据预处理错误),并通过调整学习率和修改架构等解决方案来实现这一点。
  • 安全相关的研究 :这些关于ML增强软件的安全性研究还讨论了最近在软件安全领域取得的进展的局限性。
    这个关于ML增强软件开发中测试方法及其影响的结构化概述突出了在应对ML技术带来的独特挑战时,适应现有实践的重要性。

4.6 部署

部署阶段描述了将软件系统投放至目标环境(如生产服务器或终端用户设备)以供使用的过程。部署方式可能因软件类型、目标平台以及项目的具体需求而异。在ML增强软件中,部署的核心任务是将已训练好的ML模型置于实际运行环境中,使其按照预期完成指定任务。我们对相关次级研究的分析结果如下所示。

  • Nguyen-Duc 和 Abrahamsson 指出,部署可被视为DevOps中CI/CD(持续集成/持续交付)流水线的一部分。此外,通过将与ML模型关联的API进行封装,并在开发其他ML增强解决方案时将其作为标准库使用,也可实现模型部署。
  • Lwakatare 等人指出,ML增强软件的部署可在预生产环境中以手动、半自动或全自动方式完成。在此相关背景下,已有研究对ML增强软件工程中不同的部署策略及其所面临的挑战进行了探讨,其要点归纳于表4的前半部分。
  • 此外,Alnafessah 等人通过一项调研总结了在生产环境中通过运行时服务管理持续重新部署ML模型的实践,该方法用于微服务架构下动态资源调度。
  • 在DevOps中,CI/CD是稳定、优化并自动化ML模型部署过程的关键驱动。CI/CD不仅有助于构建自动化基础设施、提升系统可用性、改进支持服务与事故响应能力,还要求为ML系统提供一致的API,以避免对其他库的依赖。具体而言,持续集成(CI)涉及将代码合并至主分支,并自动化系统的构建与测试流程。
  • 然而,在DevOps实践中,开发流水线可能频繁变动,使得在本地环境之外重现该过程变得困难,除非借助专业的数据与代码版本控制工具(如 Git、DVC)。因此,在部署并测试ML模型之后,还需结合DevOps(针对ML项目则称为MLOps)工作流,持续进行模型监控。这意味着ML模型的部署过程需要经过合理的规划、监控和文档化管理。
  • Lu 等人还提出了面向负责任AI部署策略的相关挑战,这些挑战涉及基于新数据的持续学习、高度不确定性以及其它潜在风险。其建议的策略包括采用阶段性部署方式,仅向部分用户群体推送ML增强系统的子集,从而降低伦理风险和系统同质性冗余。

表4. 作者对ML增强软件部署、维护与支持的见解

方法 描述说明
开集识别(Open-set recognition) 检查训练模型的适用性,识别整体模型性能下降现象。
持续实验(Continuous experimentation) 在运行时收集用户反馈,用于模型行为的动态校准与改进。
持续监控与验证 实现动态、自适应、可扩展的伦理风险评估机制。结合版本反馈与激励机制。
关键与非关键性部署 采用级联方式部署ML组件,包括自主式ML模块的上线管理。
运行时集体反馈 尽早收集最终用户(Ops)反馈,实现准实时质量需求监控。
预测性维护(PdM) 利用预测性维护系统实现可行性操作,实施概念适配与约束缓解等具体化过程。
测试追踪与验证 追踪在先前阶段中验证过的测试案例,辅助领域专家与技术人员定位故障组件。

4.7 维护

与传统软件类似,ML增强软件的维护与支持同样包括性能监控以及横向和纵向的系统扩展。在这方面,一旦训练完成的ML组件被部署到实际运行环境中,系统需持续监控,以及时发现诸如性能下降、兼容性问题、可移植性障碍和可扩展性限制等问题。然而,ML模型的部署与性能优化通常伴随大量数据处理与知识迁移,这为系统维护引入了新的挑战。以下是我们对该主题相关次级研究的分析结果:

  • Yang 和 Rossi 阐述了“开集识别”(open-set recognition)作为衡量已训练模型在生产环境中适应性的关键机制,能够识别推理过程中出现的新颖性,同时通过追踪同一模型的多次推理过程,确保对性能下降的及时与准确检测。
  • 类似地,其他研究也强调了运行时获取集体反馈或警报的重要性,这些反馈可用于激活维护子系统,从而支持动态适应。
  • 此外,ML模型结构或数据的微小变动往往会对其性能属性产生显著影响。因此,在模型投产后,对端到端流程进行持续维护、定制与复用成为常态,这一过程需要涵盖多个领域的专业知识。
  • 表4的后续部分总结了相关作者关于ML增强系统的运行、维护与支持方面的主要观点。

4.8 开发方法论

软件开发方法论是分层技术体系中的核心组成部分,在构建高质量软件产品或服务的过程中发挥着至关重要的作用。在众多方法论中,敏捷及其变体(如SCRUM)因其灵活性、动态性和对具体场景的适应性而尤为突出。这些质量特性通过积极的客户参与、增量式交付、以人为本的思维方式(即关注个体胜于过程)、拥抱变化和简约优先等原则得以体现。

鉴于上述特性,当前在ML项目中逐步融合传统软件开发方法(尤其是敏捷框架)的趋势日益明显。因此,我们对开发模式进行了研究,重点关注ML增强软件项目中对轻量级、可扩展与自动化(类敏捷)方法论的采用情况。研究发现,57%的选定文献聚焦于将ML增强软件开发项目与既有开发方法相融合的实践,相关内容如下所述:

一部分研究集中讨论了集成ML组件的复杂系统开发中所面临的挑战及可能的解决方案。这些研究深入探讨了DevOps与ML开发流程并行应用的具体做法。另一些文献则展示了AIOps、MLOps 和 DataOps 等新兴术语的采用,这些术语代表着将ML集成进传统DevOps过程的演化路径。

第二类研究以敏捷方法为灵感,探讨了如“用于ML系统的敏捷开发”“Agile4ML”“类敏捷工程流程”等情境,尝试将ML增强项目的独特属性融合进现代敏捷开发框架中。此外,Halme 提出了一种在敏捷流程中纳入ML项目伦理需求的实践方法,即伦理用户故事(Ethical User Stories, EUS)。

第三类研究旨在构想其他适用于ML增强软件开发的开发方法,提供了对现有方法论进行调整与适配的通用思路。这包括实施如GDPR等合规法规的观点,面向组件开发的团队组织模式,以及为安全关键型ML应用提供规范、数据编排、模型训练与集成的持续开发流水线。此外,这些研究还探讨了多样化开发模式的识别与应用。

5 讨论

本节对第4节中的研究结果进行讨论,重点分析当前在工程化ML增强软件过程中,软件工程(SE)各个过程领域与开发方法论中的主流实践与关键挑战。

5.1 研究趋势分析

如图1所示,我们的分析揭示了选定研究在年度分布上的持续增长趋势,其中ScienceDirect与Scopus已成为该主题领域中最主要的文献资源库。推动ML增强软件研究活动蓬勃发展的因素多方面交织。一方面,市场对ML增强解决方案的需求日益增长,这些解决方案旨在提高效率、简化流程、并从数据中提取有价值的信息。因此,软件工程研究者愈加关注利用ML构建智能系统,推动任务自动化、复杂流程优化及整体性能提升。

另一方面,ML算法与数据分析技术在软件系统中的关键地位促使研究人员不断探索新的算法、模型与方法论,以提升系统的准确性与效能。此外,ML增强软件开发具有高度跨学科的特征,常涉及软件工程师、程序员、数据科学家以及领域专家之间的协作,这种协同创新模式促进了知识的融合与系统性解决方案的构建。

开源工具与框架(如 TensorFlow、PyTorch、scikit-learn)的广泛可用性也为ML开发提供了便利,加速了原型验证与系统实现,使研究人员能够更加高效地构建和测试ML增强系统,从而推动了领域的发展。同时,为确保系统的安全性、可靠性与伦理合规性而建立行业标准与规范的紧迫性,也进一步激发了研究者对ML影响的研究,并推动了相应指导方针与最佳实践的形成。

总体而言,ML增强软件工程研究的持续增长趋势由智能化系统需求、ML技术的进步、跨学科协作、工具可获取性以及行业标准的不断演进所驱动。随着ML技术的持续发展,该趋势预计将进一步加速,为ML增强软件的开发开辟更广阔的可能性。

此外,我们对各位作者观点的深入剖析为理解软件工程各过程领域中的现行实践提供了宝贵见解。以软件构成(传统软件、传统与ML组合软件、纯ML系统)为分类基础,对所选研究进行了梳理,从而构成对现有实践的分析框架。

5.2 软件工程过程领域的考察

以下对ML增强软件开发中需求规格、设计、编码、测试、部署与维护各阶段的研究结果进行具体讨论。

5.2.1 需求规格

对需求规格的分析揭示了软件工程实践的一个显著转变,尤其体现在ML组件相关的非功能性需求属性的扩展。这些新增属性包括:信任、可接受性、安全性、透明性、公正性、公平性(平等性)、无伤害性、责任性(可问责性)、隐私性、安全性、善意、自主性、可持续性、尊严、团结、准确性与可解释性等,反映了ML增强软件开发语境下对质量属性认知的不断深化。

这一范式转移带来了新的挑战,例如:需求规范在符合GDPR等法规方面的复杂性、ML固有的伦理原则、不确定性所导致的需求动态变化,以及缺乏有效的分析与建模技术等问题。研究进一步指出,ML系统对非功能性需求具有独特要求,其测量与定义需基于模型本身、相关数据或整个系统进行。

尽管研究结果显示当前在构建全面的ML增强系统需求工程过程方面仍存在不足,但也可见到诸多研究者与实践者正积极应对这些挑战。例如,通过引入“感知理论”(sense-making theory)来刻画SE与ML实践交互情境下的需求捕获机制,已成为一种探索方向。此外,采用“伦理用户故事”(ethical user stories)、在项目计划中预留不确定性缓冲时间、引入可处理概率性结果或模糊性的需求规格符号等方法,也展现出业界正在致力于解决将ML组件规格融入传统软件过程所带来的复杂性问题。
image-20250724075659.webp

5.2.2 设计阶段

然而,我们对设计阶段的考察显示,当前实践中普遍存在一种趋势,即在ML组件的设计中沿用传统软件工程中已确立的设计原则。这些原则包括关注点分离、设计模式、面向对象或基于组件的方法。然而,研究界也正在积极探索面向ML的专用设计工件,提出了一系列创新方案,如可视化设计模式、基于概念的设计、策略设计模式以及将UML引入ML系统的集成设计方式。

在用户界面设计方面,尤其是面向可解释人工智能(XAI)的设计,也展现出较高关注度,体现了对ML集成所带来的特有挑战的深入理解。现有实践强调定义适用于ML的设计约束与原则,特别重视系统的可信度与可用性,并融合可解释性、透明性、伦理、公平、责任与可持续性等关键因素。

此外,设计实践中也着力于构建可复用的架构设计模式,以实现ML组件向传统代码的无缝集成,推动模块化、运行时可重构性,并通过基于消息的接口提升系统的可靠性。与此同时,相关研究也在积极应对算法与框架频繁更新所带来的灵活性需求,以及数据模式演化导致系统性能退化的情况。然而,尽管取得了诸多进展,分析也揭示出当前设计阶段仍存在显著不足——即尚缺乏能够全面覆盖ML增强软件质量属性的通用设计框架、架构风格与模式。

5.2.3 编码阶段

在编码阶段,我们的分析表明,实践者普遍将ML组件视为嵌入式代码或库,是ML算法的具体实现。一个值得注意的研究方向是将伦理原则嵌入ML系统中,通过机制自动检测API是否符合AI伦理相关法规要求,从而在系统开发阶段就保障合规性。

在ML增强系统中,诸如利用深度神经网络实现感知功能的集成也是当前的重要实践方向。与传统软件开发中广泛使用的框架选择与方法论类似,ML开发者在编码过程中同样高度重视工具与平台的适配性,通常会优先采用适用于目标部署环境的库与框架(如TensorFlow、scikit-learn等)。

当前编码实践还体现出一些典型趋势,例如推崇代码复用策略、模型重构机制,以及采用持续集成方法。这些策略在快速演化的ML开发环境中尤其关键,有助于提升系统的适应性与响应速度。然而,尽管已有这些良好实践,但当前仍存在一项突出问题:缺乏一个能将ML组件与传统软件开发无缝融合的统一编码框架,从而无法有效支撑ML增强软件的一体化开发与维护。

5.2.4 测试阶段

在ML系统中,测试不仅仅是检测代码缺陷,更包括评估数据质量、验证模型性能,并在代码提交前处理不确定性。我们的分析指出,ML测试实践在很大程度上继承了传统软件测试方法,包括验收测试、单元测试、性能测试、回归测试、可扩展性测试与集成测试,这些通常与CI/CD流程紧密集成。

与此同时,研究者也开发并应用了一些专门面向ML的测试技术,例如“模糊测试”(fuzzy testing)——一种在系统运行时进行的动态测试方式,以及“金丝雀测试”(canary testing)——一种用于DevOps自动质量保证的机制。此外,研究还提出了用于DL和LLM系统的故障定位、自动调试及评估指标等技术。

然而,ML增强系统因其结构复杂、组成异质性强而带来了前所未有的测试挑战。模型的不透明性导致难以解释系统行为,从而加大了系统整体测试的复杂性。同时,模型开发过程中缺乏清晰的测试流程、明确的需求定义以及系统级的测试策略,也进一步加剧了测试工作的难度。

此外,为ML增强系统构造测试用例也必须引入能适应输出不确定性的质量标准。当前尚缺乏一套通用且系统化的标准,以满足测试阶段对ML系统结果可控性的需求。

5.2.5 部署阶段

在部署阶段,研究表明实践者倾向于采用类似传统软件的部署策略,例如将ML模型作为DevOps框架中的CI/CD流程的一部分进行集成部署。典型实践包括将ML模型以API形式封装为标准库,或通过运行时持续重部署机制,实现微服务资源的动态调度。

然而,ML系统的部署亦面临诸多挑战,主要包括目标基础设施对高自动化能力的需求、系统可用性保障、支持与故障响应机制的建立、以及API的一致性管理等。此外,因开发流水线变更频繁,在非本地环境中复现部署过程也存在较高难度。

特别是,在构建“负责任的AI”部署策略方面,研究强调了持续学习能力、高度不确定性与伦理风险管控等问题的复杂性。为此,逐步部署(如先对小范围用户发布)成为一种可行策略,以降低伦理风险并提升系统的冗余容错能力。

5.2.6 维护阶段

本研究表明,ML增强软件在运行阶段与传统软件类似,同样需要持续监控以识别系统缺陷,包括性能下降与故障检测等问题。值得注意的是,ML组件的性能特性可能因数据或模型结构的微小变化而发生显著变化。因此,ML增强软件的维护与支持呈现出持续性特征,尤其在需求变化引发系统横向或纵向扩展的背景下更为关键。

为应对这些挑战,当前实践中引入了开放集识别(Open-set Recognition)技术,用于在生产环境中及时检测ML组件的性能退化,从而有效触发维护与支持活动的开展。然而,研究结果也突显出ML增强软件的维护复杂性,主要源于其关联数据集规模庞大。此外,系统还需具备在运行时收集故障预警并自动触发维护机制的能力。因此,ML增强软件在运行阶段的维护工作对端到端开发流程的全面管理提出了更高要求,也亟需多领域专业知识的协同支持。

5.3 开发方法论

研究结果显示,所选文献主要聚焦于软件开发方法论,特别是ML项目中敏捷框架及其变体的广泛采用,揭示了ML增强软件工程实践中的关键趋势。该趋势契合敏捷开发所强调的灵活性、适应性与迭代性特征,在快速演进的ML开发场景中被视为极具价值。
此外,大量文献也深入探讨了如AIOps、MLOps等DevOps扩展术语的使用,体现出研究者对ML工作流在软件运维全流程中作用的重视。同时,引入如“伦理用户故事(EUS)”等实践,将AI伦理维度纳入敏捷方法,反映了开发者对ML项目中伦理治理问题的深刻认知。
尽管这些方法论提升了项目的适应能力,但也引发了对其是否足以全面应对ML增强软件开发所面临的独特挑战与特性的问题,提示未来有必要在现有方法的基础上进一步深化与拓展。

5.4 讨论总结

总体来看,本研究揭示了ML增强软件工程领域研究活动的增长趋势(详见图1),并总结了该领域的最新技术状态、关键挑战与最佳实践。

5.4.1 技术现状

在ML增强软件开发中,非功能性需求的重要性显著提升,特别是对可信性、透明性、公平性、责任性与可解释性等属性的强调。同时,自动化工具的使用也日益普遍,用于辅助捕捉与处理这类需求。在设计方面,ML组件通常借鉴传统软件的成熟设计原则,如关注点分离与面向对象方法。编码阶段则将ML组件视为嵌入式代码或库,开发者普遍采用与ML特性相契合的框架与方法,包括API伦理合规性检查、代码复用以及持续集成。测试实践融合了传统测试与面向ML的创新方法,例如模糊测试与金丝雀测试,这些方法通常集成于CI/CD流水线中。此外,研究还提出了一系列适用于DL与LLM系统的测试方法,如故障定位、自动调试与评估指标等。在部署方面,实践者倾向采用类似传统软件的CI/CD部署方式,关注API设计与持续重部署机制。维护方面则引入了如开放集识别等方法,实现对系统性能退化的及时检测与响应。在开发方法论层面,研究表明多数ML项目倾向采用敏捷方法,借助其灵活迭代优势以适应动态的开发环境。

5.4.2 面临的挑战

尽管现有实践成效显著,但仍存在诸多挑战。首先,ML系统对非功能性需求的高度依赖,以及对法规(如GDPR)与伦理准则的遵循,构成了开发初期的核心难题。其次,设计阶段虽已引入视觉化设计模式、策略模式等创新成果,但仍缺乏系统性的ML专用设计工件与通用架构框架。在测试方面,模型的不透明性导致其可解释性受限,进一步加剧了系统整体测试的复杂性。此外,测试流程不清晰、缺乏明确的模型开发需求与系统级测试策略,亦构成关键阻碍。同时,测试用例的构建需引入能容纳ML输出不确定性的质量标准。部署环节面临的主要挑战包括:目标基础设施对高度自动化的要求、系统高可用性保障、稳健的支持与响应机制、API一致性维护,以及频繁变动下部署流程的可复现性。此外,针对持续学习与高度不确定性,制定负责任AI的部署策略也是一项复杂任务。维护方面,由于数据量庞大及系统运行中自动维护触发机制的需求,使得ML系统维护愈发依赖跨学科专业知识与全流程技术支撑。现有文献中,对部署与维护阶段的关注相对不足,然而在面对数据管理、模型验证、伦理治理、用户信任、法律与安全等综合问题时,这两个阶段理应获得更高重视。此外,当前缺乏专门面向ML集成的创新型开发方法论,这一空白提示我们有必要从现有敏捷与DevOps等方法出发,探索更具针对性、可扩展性与系统性的工程策略。

5.4.3 一般性洞见与最佳实践

基于当前ML增强软件开发中的软件工程实践,以下最佳实践对于构建有效的软件工程工具、技术和方法,以及指导未来研究具有重要意义:

  • 需求规约应以数据驱动的假设为起点,并通过实验加以验证和完善。同时,应努力使ML性能指标与业务目标和关键绩效指标保持一致。
  • 优先考虑非功能性需求,如可信性、透明性、公平性和可解释性,以确保ML组件的伦理性与责任性。
  • 采用经典设计原则,如关注点分离,将ML组件作为嵌入式库处理,以提升模块化程度。同时,性能退化监控与大规模数据处理应被视为关键的ML设计要素,需配合稳健的体系结构模式加以支持。
  • 推行两阶段集成策略:首先整合ML子组件,然后将其与非ML系统组件进行集成。由于接口定义与模型持续演进的需求,应提供强有力的持续集成支持。
  • 使用自动化工具进行AI伦理合规性检查、代码复用,并通过集成CI/CD流水线以提升开发效率。
  • 实施面向ML系统的专用测试方法,包括模糊测试、金丝雀测试,以及自动化调试和性能评估指标。此外,自动回归测试与测试用例优先级排序在ML增强系统中同样至关重要,亟需依赖先进的工具与技术。
  • 采纳敏捷框架,以增强动态ML组件环境中的适应能力,并支持持续集成。
    总体而言,目前ML增强软件的工程实践多被视为传统软件工程方法与ML组件实践的融合体,而对二者之间微妙交互机制的重视尚显不足。实践者往往将ML增强软件看作由传统软件与ML组件构成的两个独立部分,从而导致集成松散,主要关注点停留在如何设计接口以实现二者交互。这种局限性强调了亟需开发更具针对性的集成方法,确保在功能性与质量属性方面实现ML组件与传统软件的无缝衔接。

随着ML在各行业的自动化进程中发挥越来越关键的作用,基于ML的软件也将不断扩展其任务自动化能力。《附录B》对当前各软件工程过程阶段及开发方法所面临的实践状况、挑战与影响进行了系统梳理。

5.5 研究的局限性

本研究采用的是近似于“前沿综述(state-of-the-art review)”的方法,重点聚焦于近年来关于ML增强软件开发的SE实践研究。因此,未严格遵循系统文献综述的流程,可能在研究效度(包括内部效度、外部效度与结构效度)方面存在潜在风险,进而影响结果的全面性与可复现性。常见的威胁包括研究选择偏倚、数据提取不一致性及出版偏差等问题。

尽管如此,本研究仍基于结构化和系统性的文献分析,提供了有价值的实践洞见。在研究选择方面,我们主要筛选2010年之后发表的文献,因该时期深度学习的兴起显著推动了ML增强系统的发展。但这一筛选标准可能遗漏早期的奠基性研究,从而在一定程度上影响研究的完整性,尽管它提升了所选文献在DL驱动背景下的相关性。此外,本研究在雪球式文献扩展过程中以研究主题为导向,而非采用明确的统计相关性标准,可能引入偏倚。然而,通过将研究内容与软件工程生命周期各阶段相对齐,本研究在上下文有效性方面得到了保障,未来研究可通过引入定量化筛选标准以提升方法严谨性。

6 结论

本综述研究系统探讨了ML增强软件的工程开发现状,重点聚焦于最新技术发展、面临的挑战、最佳实践及未来研究方向。研究结果表明,ML增强软件工程呈现出研究热度持续增长的趋势,其背后驱动因素包括行业需求增长、技术进步、跨学科合作以及行业标准不断演进。

本研究进一步指出,ML增强软件开发高度依赖特定的非功能性需求,相关处理手段也越来越依赖自动化工具。研究还揭示,当前的开发实践整合了传统与ML特有的工程方法,但面对ML本身的动态特性、模型的不透明性与维护的复杂性,仍需开发更为专业化的集成方法加以应对。

本综述的相关复现材料已公开发布在GitHub平台。研究建议包括:从数据驱动假设出发,优先考虑非功能性需求,应用既有设计原则,优先整合ML组件,实现开发流程自动化,引入专用测试策略,并采纳敏捷开发方法等。

未来研究应聚焦于克服本研究中存在的局限性,例如文献筛选偏倚、文献流失和结果报告不全等问题。建议在不同研究上下文中重新开展综述分析,包括纳入更多来自其他数字图书馆的研究文献。此外,未来研究还应深入探讨ML集成程度对软件开发流程与系统质量属性的具体影响,包括对软件生命周期各阶段的详细分析。同时,随着DL与LLM的发展,其工程实践亦需被系统性地研究与梳理。面对未来ML集成系统的演进,诸如数据质量、伦理合规性、可解释性、适应性、安全性、法律风险、可持续性及治理等议题也将逐步浮现。因此,如何将ML、DL及LLM技术有效嵌入现有系统,将是一个亟需高度设计审慎与多学科协同的工程难题,亦是未来研究的核心方向。