乐于分享
好东西不私藏

重新思考软件质量:人工智能时代的架构

重新思考软件质量:人工智能时代的架构

人工智能辅助开发过程中的质量属性、架构评审和系统治理

可读性、模块化和结构清晰等质量属性通常被认为是设计良好的软件系统的普遍特征。然而,在实践中,许多此类属性的出现是为了适应人类认知的局限性——在以人类为主要代码编写者、阅读者和修改者的开发环境中。随着人工智能 (AI) 越来越多地参与软件的创建、转换和解释,这些质量属性的基本假设正受到挑战。

本文区分了以人为中心的质量属性(主要服务于人类的可理解性)和系统不变性(定义系统行为,独立于其实现方式)。文章认为,人工智能削弱了代码结构作为系统质量指标的历史作用,并将架构实践从工件检查转向显式治理——从而以可管理性取代可理解性,成为架构的首要关注点。

介绍

软件开发中的架构讨论始终围绕质量展开。架构决策通常会以可维护性、可读性、模块化或清晰度等特性来论证。架构评审往往将这些特性视为优秀设计的不言而喻的指标。在实践中,它们既是评估标准,也是团队间的协调机制。

然而,这些属性之所以占据如此核心的地位,其原因却鲜少受到质疑。人们常常将质量属性视为软件系统固有的特征——很大程度上独立于软件开发和后续完善的条件。这种隐含的假设在数十年的技术变革中都保持了惊人的稳定性。

人工智能对这种稳定性提出了挑战。随着人工智能系统越来越多地参与软件产品的创建、修改和解释,长期以来关于质量生成和评估方式的假设变得不再可靠。但这并不意味着质量的重要性正在降低。然而,这确实意味着许多质量属性背后的逻辑需要重新审视。这种转变是渐进且不均衡的,对不同的环境、团队规模和人工智能集成程度的影响程度各不相同。尽管如此,这是一种结构性的变化,而非暂时的。

本文提出了一种重新评估软件质量的方法,该方法区分了主要服务于人类认知的功能属性和独立于实现方式而定义系统行为的功能属性。在此基础上,本文探讨了在人工智能驱动的开发过程中,架构评审和治理实践必须如何改变。

质量属性作为情境相关的调整

当今大多数被普遍接受的质量特性并非源于正式的计算理论或抽象的设计原则,而是源于经验——更准确地说,源于那些试图构建和运行复杂度超出个人理解范围的系统的人的经验。

可读性、一致的结构、明确的职责分离和规范的命名规则可以降低认知负荷。它们使开发人员能够轻松阅读不熟悉的代码、理解变更,并在时间压力下与他人协作。代码重复之所以会造成问题,并非因为它违反了软件的理论属性,而是因为人们很难在长时间内可靠地理解多个类似逻辑的副本。

这些特性是对特定限制——人类认知局限性——的回应。它们帮助团队应对规模扩张、系统波动和漫长的系统生命周期。从这个意义上讲,质量特性并非普世真理,而是依赖于具体情境的适应性调整。

只要人类是软件开发中唯一或主要的参与者,这些适应性调整就至关重要。当这种情况发生变化时,他们的角色也必须重新评估。

以人为中心的质量特征

为了明确这一区别,引入以人为中心的质量特征的概念是有帮助的。

以人为中心的质量特性是指那些主要目的是在开发和维护过程中支持人类认知、沟通和协调的特性。它们并不直接限制系统行为,而是使系统更易于人类思考和管理。

这些特性包括可读性、风格一致性、明确的结构对称性、惯用模式以及低重复性,从而防止人为错误。这些特性在以人为中心的开发过程中已被证明不可或缺,并且在人类继续直接参与实施的任何地方都具有重要价值。有些特性——模块化是最明显的例子——难以简单地归入单一类别。它们既服务于以人为本的设计,又服务于技术解耦。这种双重作用需要根据具体情况进行明确分类。

然而,以人为中心的质量属性并非一成不变。它们的重要性取决于人们为了安全地修改实现方式而需要了解的详细程度。将它们视为普适属性会掩盖这种依赖性。

人工智能使这种依赖关系显现出来。

人工智能对开发环境的影响

人工智能并非通过消除质量问题来改变开发环境,而是通过改变这些问题出现的条件来实现的。人工智能系统能够分析、转换和重新生成大型代码库,而无需依赖人类所需的视觉和结构线索。它们可以轻松处理庞大的上下文,并提供解释,而无需考虑具体的代码组织结构。

这意味着,对实施方案的深入理解不再总是变革的先决条件。在许多情况下,变革是由人工智能系统推动的,这些系统基于人类难以直接理解或理解效率低下的表征方式运行。

这削弱了某些以人类为中心的品质属性的历史必要性。那些曾经促成可靠变革的属性,如今越来越多地成为人类合作的优化手段,而不再是进化的必要前提。

值得注意的是,这种变化既非突如其来,也非一成不变。人的参与并未消失,而是发生了转变。因此,建筑实践必须考虑不同程度的人机协作开发,而不是假定存在一种稳定、统一的开发模式。

建筑表现形式与历史参照

将实现与沟通分离并非新概念。架构作为一门学科的出现,正是因为仅靠代码不足以表达系统的意图、约束和考量。架构表示、视图、模型和决策文档正是为了将意义外化到实现工件之外而做出的尝试。

从历史上看,这些表述方式存在结构性缺陷。它们维护成本高昂,容易与代码偏离,而且很少能执行或强制执行。因此,它们主要用于解释,而非控制。代码仍然是最终真理。

人工智能正在改变这种分离的经济格局。不同表征之间的转换变得成本低廉、持续且可自动化。解释可以按需生成,机器可以监控一致性。这并非一种全新的架构概念,但它正在改变长期以来既有实践的运行意义。

因此,建筑表现形式可以重新获得权威——不是通过取代代码,而是通过管理代码。

训练数据和路径依赖性

一种常见的反驳观点是,如今的人工智能系统已经过大量人类可读、人类编写的代码训练。这没错——但这并不意味着以人为中心的质量属性在结构上仍然是必要的。

训练数据反映的是历史生产环境。模型学习的是与过去成功相关的模式,而不是曾经支撑这些模式的认知局限性。一旦人工智能能够可靠地在不同表示形式之间转换,生产代码本身必须易于人类阅读的要求就不再那么迫切了。

因此,人类可读的代码成为多种表示形式之一。它对于通信和控制仍然很重要,但不再等同于系统的运行真相。

从过去吸取教训并不意味着要被过去束缚。

系统不变量

并非所有质量属性都以人为中心。有些属性描述的是系统必须具备的特性,而与实施者(或系统)无关。

性能、可扩展性、可用性、安全性、可靠性和合规性是系统不变的要素。它们定义了特定条件下系统可接受的行为。这些属性并非风格问题,而是具有实际后果的约束条件。

系统不变性在人工智能驱动的发展过程中依然重要。在许多情况下,随着系统演进速度加快、自主性增强,它们的重要性甚至日益凸显。改变的是人们对这些不变性的信任是如何建立的。

历史上,系统属性通常是从代码结构间接推导出来的。当这种推导不再可靠时,显式的验证和强制执行机制就变得至关重要。

建筑评论超越了文物检验的范畴。

传统上,架构评审非常注重对工件的检查。通过评估结构、分层、依赖关系和模式,可以得出可维护性和可演化性等属性。只要代码结构与系统行为和未来可修改性之间保持可靠的相关性,这种做法就行之有效。

随着这种相关性的减弱,仅靠工件检查已不足以解决问题。架构评审必须更加注重治理:明确定义并执行限制系统行为的规则。

这包括对非功能性需求的评估、对违规行为的检测,以及对系统在正常和异常情况下的行为进行可观察性分析。重点从美学判断转向运行可靠性。

结构性讨论并不会因此失去其价值,但它们从架构安全的主要基础变成了几个输入因素之一。

可治理性作为一种架构考量

在以人为本的发展模式中,可理解性是核心架构考量因素。系统必须易于理解,因为理解是管理变革的最重要手段。

在人工智能驱动的流程中,这种关系发生了转变。系统会经历人类在实施层面无法完全理解的变革而不断演进。在这种情况下,架构安全与其说是取决于理解,不如说是取决于可管理性。

可控性是指能够随着时间的推移定义、执行和审查规则。它需要明确的不变性、持续的监控以及使违规行为可见且易于管理的机制。可解释性可以支持治理,但不能取代治理。

从架构角度来看,可控性成为一种属性,它使得在流畅的实现中能够安全演进。

有利的变化和建筑的连贯性

人工智能显著降低了变革成本。这实现了快速适应,但也带来了新的风险。频繁更新的系统可能在局部范围内保持正确,但却会逐渐丧失其最初的意图。

建筑风格的演变并非新鲜事,但有利的变化会加剧这一现象。当改造变得容易时,保持建筑的长期结构和功能就变得更加困难。

这凸显了显式架构记忆的重要性:即独立于具体实现而持续存在的规则、决策和边界。架构必须平衡适应性和连续性——尤其是在长期运行的系统中。

责任与问责

当人们阅读的代码减少时,责任并不会消失,而是会发生转移。

问责机制正从单个实施方案转向架构规则的定义、执行和监控。这在受监管或安全至关重要的环境中尤为重要,但也普遍适用于企业系统。

因此,架构不再仅仅负责代码组织,而是成为系统行为的责任主体。这改变了架构师的角色,但并未降低其价值。

对建筑实践的影响

总体而言,这些观察结果表明建筑实践正在发生转变,而非背离既定原则。建筑师需要更加注重定义不变要素、选择执行机制,并在持续变革中保持设计意图。

以人为中心的质量属性依然重要,但它们不再是绝对的,而是取决于具体情境。系统性不变因素仍然不可妥协,但需要更明确的治理形式。

在瞬息万变的实现方式中,架构正逐渐成为一门保持系统约束性、可问责性和连贯性的学科。

结论

许多品质属性从来都不是普遍真理。它们是在以人为中心的开发环境中,对人类认知局限性进行有效适应的结果。

人工智能正在改变这种环境。

核心架构问题不再是系统是否可以被理解,而是系统是否可以被控制。