AI驱动的软件工程(下):AI辅助的质检与交付


📚 系列文章导航
AI驱动的软件工程(上):人机协同的设计与建模
AI驱动的软件工程(中):文档驱动的编码与执行
AI驱动的软件工程(下):AI辅助的质检与交付


大家好,我是阿威。

在系列的前两篇文章中,我们走过了一段激动人心的旅程。首先,我们作为“架构师”,通过结构化的三阶段设计流程,引导AI将一个模糊的想法,转化为了一套完整的工程蓝图。接着,我们化身“项目经理”,通过AIDC这套文档驱动的开发方法论,成功地让AI像一个遵守纪律的工程师一样,将蓝图一行行地变成了真实的代码。

至此,我们的项目代码库已经初具规模,git log里充满了AI自己生成的、格式规范的提交记录。自动化检查工具也告诉我们,代码风格良好,没有低级的语法错误。

一个尖锐的问题摆在了面前:代码存在,就等于项目完工了吗?

答案显然是否定的。静态检查无法保证业务逻辑的正确性。单元测试(即使有)也难以覆盖所有集成场景。代码在AI的“模拟环境”(它的上下文中)里是正确的,但在我这台真实的、有着复杂环境依赖的机器上,能顺利运行吗?

这就是我们收官之篇要解决的核心问题:如何对一个主要由AI构建的项目,进行最终的、可靠的“终局质检”?

事实证明,直接让人类从头到尾审查AI的全部代码,是极其低效且不现实的。我们必须设计一套全新的、依然以AI为核心执行者,但由人类掌握最终控制权的协同工作流。在这个阶段,我们的角色将再次发生转变,上演一出人机协同的“终局之战”。

终局之战中的角色再定位

在编码完成后的这个新阶段,人与AI的角色分工需要重新定义,以确保最高的效率和绝对的安全。

  • AI的角色:转型为分析师、建议者和配对伙伴。它的核心任务,是通过静态分析深度扫描代码库,找出逻辑上、结构上的潜在问题,并提出精准的代码修复建议。最关键的一点是:在这个阶段,AI不直接操作我的执行环境。它不运行任何pip install,也不启动任何服务。

  • 我的角色:成为执行者、验证者和最终决策者。我负责执行所有AI建议的终端命令,在我的本地或测试环境中部署服务,亲眼验证服务的状态,并对AI提出的每一处代码变更进行审查和批准。我,是接触真实环境的唯一一人。

这种角色划分,完美地利用了双方的优势:AI拥有无与倫比的分析速度和广度,能快速发现隐藏在代码角落里的问题;而人类则掌握着对真实环境的最终控制权和验证能力,确保了项目的安全性和最终交付质量。

这套后协同工作流,我将其划分为四个主要阶段,它将带领我们从静态的代码,走向一个经过完整验证、可随时交付的“准产品”。

四阶段质检:从静态分析到运行时验证

阶段一:静态分析与代码完整性检查 (AI主导)

这是我们质检流程的第一步,我称之为对AI代码的“全面体检”。目标是在不运行项目任何一行代码的前提下,通过AI强大的静态分析能力,识别出所有潜在的代码级问题。

我会给AI下达一个高级指令:

“现在,请对整个AgentWeaver代码库进行一次完整的静态分析和完整性检查。你需要完成以下任务,并最终汇总成一个TODO任务列表:

  1. 代码调用可达性分析:检查所有函数和方法的调用关系,找出所有参数不匹配、方法未实现、模块导入错误等硬伤。
  2. 依赖与配置分析:检查requirements.txt,分析是否存在版本冲突或不兼容问题。检查所有配置文件,确保其完整性和一致性。
  3. 代码规范复查:再次模拟运行blackruff,找出任何在开发过程中可能遗漏的格式问题。”

AI接到指令后,会像一个资深的静态代码分析工具一样,开始它的工作。

  • 可达性分析中,它可能会发现一个API路由函数调用了一个需要传入3个参数的服务层方法,但只传入了2个。或者,一个类继承了某个抽象基类,却没有实现其中一个必须实现的方法。这些都是自动化Linter很难发现的、深层次的逻辑错误。
  • 依赖分析中,它可能会发现requirements.txt中某个库的版本过低,与另一个库产生了不兼容。或者提醒我.env.template中定义了一个数据库密码,但在任何配置文件中都未被使用。
  • 规范复查后,它会把所有分析产出的问题,汇总成一个结构化的、清晰可执行的TODO任务列表。

例如:

  • [ ] [Bug] api/routes.py:56: create_agent函数调用services.agent.create时缺少user_id参数。
  • [ ] [Refactor] core/workflow.py: WorkflowEngine类未实现抽象基类Runnableget_status方法。
  • [ ] [Chore] requirements.txt: fastapi版本(0.95.0)与pydantic版本(2.1.0)存在已知的兼容性问题,建议将fastapi升级到0.103.0以上。
  • [ ] [Style] utils/parser.py: 文件末尾缺少空行。

这份清单,就是我们进入下一阶段的“作战地图”。

阶段二:协同代码修复 (人机结对)

这个阶段,我们进入了一种高效的“人机结对编程”模式。我们的目标,是根据上一阶段生成的TODO列表,逐一修复所有问题。

这个循环非常简单、高效:

  1. AI选择任务:AI从TODO列表中选择优先级最高的任务,并标记为“进行中”。
  2. AI生成修复代码:针对该问题,AI使用edit_file工具,生成一个最小化的、精确的代码变更。它不会返回整个文件,而只会提供需要修改的那几行以及足够的上下文。
  3. 我审查并批准:我作为人类开发者,审查AI提出的代码变更。确认这个修改是正确的、无害的之后,我批准应用该变更。
  4. 我本地验证:对于一些风格问题,我会在本地运行black .ruff --fix来确保修复后代码的规范性。
  5. 循环:AI将已完成的任务在TODO列表中标记为“已完成”,然后继续处理下一个任务。

这个过程会一直持续,直到TODO列表中的所有问题都被清空。这种模式避免了我亲自去定位和修改这些琐碎但重要的问题,极大地提升了修复效率。

阶段三:运行时环境验证 (人类主导, AI辅助)

当所有静态问题都被修复后,代码在“理论上”已经变得更加健壮。但理论必须接受实践的检验。现在,是时候“点火”了。

在这个阶段,控制权完全转移到我的手中,AI的角色变成了我的“远程技术支持”。

  1. 环境设置 (AI指导,我执行)

    • AI会提供清晰、分步的环境设置指令,就像一份部署手册。例如:“请首先创建一个Python 3.10的虚拟环境。然后,请执行pip install -r requirements.txt来安装所有依赖。”
    • 我,是那个在终端里按下回车键的人。我会严格按照它的指令执行。
  2. 错误处理与调试 (我报告,AI分析)

    • 这是最能体现人机协作价值的环节。在执行pip install时,我可能会遇到某个依赖包(比如bcrypt)因为缺少系统库而编译失败。或者在启动应用时,我看到一个数据库连接超时的报错。
    • 我的任务,是将终端中完整的、未经删改的错误日志,原封不动地反馈给AI
    • AI的任务,是分析这段通常很长、充满技术术语的错误日志,并定位问题的根源。它可能会告诉我:“这个gcc编译错误表明你的系统中缺少C语言编译器和Python的开发头文件。在Debian/Ubuntu系统上,请执行sudo apt-get install build-essential python3-dev来解决。”或者“这个数据库连接错误,请检查你的.env文件中的DB_HOSTDB_PORT是否正确配置,并确认你的数据库Docker容器正在运行中。”
    • AI提供具体的解决方案,甚至修复代码,我来执行和验证。这个过程极大地缩短了环境问题的排查时间。
  3. 服务初始化与健康检查 (AI指导,我验证)

    • 当环境配置完成,应用成功启动后,AI会继续指导我进行数据初始化等操作。例如:“请执行python -m db_models.manage init-db来初始化数据库表结构。”
    • 我会执行命令,并将结果反馈给它。最后,AI会让我调用应用的健康检查API(如/health),并让我将返回的JSON结果告诉它,以确认所有核心服务(数据库、缓存、AI模型服务等)都已正常连接。

当健康检查通过时,我们就可以满怀信心地说:这个由AI编写的项目,在真实的运行环境中,活了过来。

阶段四:最终化与文档更新 (AI主导)

在所有代码修复和环境验证都完成后,我们进入最后的收尾工作。

  1. 代码提交 (AI生成信息,我执行)

    • AI会基于本次质检的所有工作,生成一条清晰、规范、信息量丰富的Git提交信息。例如:fix(all): 完成交付前完整性检查与运行时验证,并在详细描述中列出修复的主要问题。
    • 我来执行git add .git commit,完成这最后一次、也是最重要的一次提交。
  2. 文档更新 (AI的最后一项任务)

    • AI负责更新项目的“外部记忆”,以反映项目的最终状态。它会自动修改README.md,更新其中的安装和运行指南;它会更新开发日志.md,记录本次质检的完成;它还会将项目开发计划.md中的所有任务状态都更新为“已交付”。
    • 我最后一次审查这些文档的准确性和完整性。

至此,整个项目处于一个经过了完整设计、规范编码、深度分析、运行时验证和文档同步的、可随时交付或部署的状态。我们的人机协同工作流,也画上了一个完美的句号。

结语:开发者的新篇章——从“编码者”到“总监”

回顾这三篇文章,我们走过了一条完整的、AI驱动的软件工程之路。

(上篇),我们是架构师,与AI共舞,将灵感塑造成设计蓝图。
(中篇),我们是项目经理,用文档和SOP作为熔炉,将AI锤炼成纪律严明的开发者。
(下篇),我们是质检总监,手握最终执行权,在AI的辅助下,为项目的质量保驾护航。

这套方法论的核心,不是要取代开发者,而是旨在解放开发者。它将我们从繁重、重复、易错的编码和调试工作中解放出来,让我们能将全部精力聚焦于真正具有创造性和战略价值的工作上:产品愿景的构思、技术架构的决策、业务逻辑的审查,以及对最终产品质量的把控。

我们不再是单纯的“编码者”(Coder),而是成为了一个项目的“总监”(Director)。我们设计流程,制定规则,管理和引导一个强大而高效的AI团队来完成绝大部分的执行工作。

这,或许就是AI时代赋予我们软件开发者的新角色,也是我们职业生涯的新篇章。未来已来,与其担忧被AI取代,不如拿起指挥棒,学会与AI共舞。

希望我这套从实践中摸索出的方法论,能为你带来一些启发。谢谢大家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/89353.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/89353.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【WRFDA实操第一期】服务器中安装 WRFPLUS 和 WRFDA

目录在服务器上下载并解压 WRF v4.6.1编译 WRFDA 及相关库安装和配置所需库安装 WRFPLUS 和 WRFDA 以运行 4DVAR 数据同化一、安装 WRFPLUS(适用于 WRF v4.0 及以上版本)二、安装 WRFDA(用于 4DVAR)WRFDA 和 WRFPLUS 的安装说明另…

【机器学习【6】】数据理解:数据导入、数据审查与数据可视化方法论

文章目录一、机器学习数据导入1、 Pandas:机器学习数据导入的最佳选择2、与其他方法的差异二、机器学习数据理解的系统化方法论1、数据审查方法论:六维数据画像技术维度1:数据结构审查维度2:数据质量检查维度3:目标变量…

AI炼丹日志-30-新发布【1T 万亿】参数量大模型!Kimi‑K2开源大模型解读与实践

点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) AI炼丹日志-29 - 字节跳动 DeerFlow 深度研究框斜体样式架 私…

如何关闭Elasticsearch的安全认证的解决方法

在Elasticsearch 中,启动之后,需要输入用户名和密码,才可以访问,在测试环境中,很不方便,本章教程,主要介绍如何关闭Elasticsearch 的安全认证。在 Elasticsearch 8.x / 9.x 中,默认是…

day051-ansible循环、判断与jinja2模板

文章目录0. 老男孩思想-男女性需求差异1. 手动指定客户机密码2. 批量更新主机名2.1 hostname模块2.2 添加主机清单变量2.3 编写批量修改主机名剧本2.4 修改hosts文件2.5 分发hosts文件剧本3. ansible的并行进程数4. 分组设置主机密码-主机清单分组变量5. 案例:ansib…

大模型安全建设:破误区、识风险、筑防线20250714

🔐 大模型安全建设:破误区、识风险、筑防线作者:Narutolxy|编辑时间:2025年7月在负责公司 AI 产品落地的过程中,一度以为只要选用主流开源大模型,前面加一层“敏感词提示词过滤”,就…

fastadmin中ajax弹窗修改文字为英文

需要把上图的中文改为 切换语言自动切换成英文找到这个文件public/assets/js/backend.js找到如下图部分 // //点击包含.btn-ajax的元素时发送Ajax请求 原页面// $(document).on(click, .btn-ajax,.ajaxit, function (e) {// var that this;// var options $.exte…

大型语言模型(LLM)的技术面试题

大型语言模型(LLM)的技术面试题 目录 大型语言模型(LLM)的技术面试题 一、提示校准:减轻提示学习中的偏见 二、矢量存储的适用场景 三、模型与人类价值观对齐的技术 四、RLHF中的Reward Hacking 五、微调效果的关键影响因素:预训练模型架构与大小 六、Transformer自注意力…

数字IC后端培训教程之数字IC后端项目典型问题解析

今天给大家分享下最近几个典型的数字后端项目案例,希望对大家的学习和工作有所帮助。 数字IC后端培训教程之数字后端项目典型项目案例解析 Q1:星主,有啥办法可以看到refinePlace或者ecoPlace都动到了那些inst吗,log里只会有mean和max move&…

网络(数据库1)

常用数据库: 1.关系型数据库: 将复杂的数据结构简化为二维表格形式 大型:0racle、DB2 中型:MySq1、sQLServer 小型:Sqlite 2.非关系型数据库以键值对存储,且结构不固定。//JSON Redis MongoDB数据存储:变量、数组、链表 内存 &…

6.删除-demo

在连接数据库的基础上deleteResult, err : db.Exec("DELETE FROM user0 WHERE id ?", 1)package main//删除-demoimport ("database/sql""fmt"_ "github.com/go-sql-driver/mysql""log" )func main() {db, err : sql.Open…

人机协作系列(四)AI编程的下一个范式革命——看Factory AI如何重构软件工程?

最近这段时间,我发现一个很有意思的现象:那些曾经对 AI 编程工具持怀疑态度的技术领袖们,态度正在集体转变。就像 Flask 的作者 Armin Ronacher,他之前还说 “不敢授权 AI”,现在却坦言 “愿意将工程主导权交给编程代理…

在javaScript里删除节点以及添加节点

1.在javaScript里删除节点在学习中我们只学到了一种删除DOM节点的方法那就是通过元素的父元素来删除该元素,但后面我查阅资料发现删除节点还有其他方法。1.使用 removeChild() 方法(最常用)我们需要获得元素的父元素,如果不知道可…

贪心算法题解——跳跃游戏【LeetCode】

55. 跳跃游戏 一、算法逻辑(逐步思路) 问题描述: 给定一个非负整数数组 nums,其中 nums[i] 表示从位置 i 最多可以跳跃的步数。 从起点 0 出发,判断是否能够到达最后一个位置。 解题思路: 设一个变量 mx…

复现永恒之蓝

一.打开msf找到永恒之蓝的漏洞直接运行这个漏洞二.查询这个漏洞模块需要配置的参数配置攻击主机的ip三.没有做免杀的话,记得关闭防火墙四.直接运行这里已经显示拿下目标主机五.测试给目标主机添加一个文档六.查看目标主机有没有刚才编写的文档

游戏行业中的恶梦:不断升级的DDoS攻击

近年来,游戏行业快速发展,成为全球娱乐市场的重要组成部分。然而,伴随着这一行业的繁荣,网络安全问题也随之而来。游戏公司面临着一种特殊的威胁:分布式拒绝服务(DDoS)攻击。这种攻击不仅对公司…

2025年自动化工程、物联网与计算机应用国际会议(AEITCA 2025)

2025年自动化工程、物联网与计算机应用国际会议(AEITCA 2025) 2025 International Conference on Automation Engineering, Internet of Things, and Computer Applications一、大会信息会议简称:AEITCA 2025 大会地点:中国西安 审…

Gartner《JavaScript: Top Use Cases, Frameworks and Architecture Constraints》学习心得

《JavaScript: Top Use Cases, Frameworks and Architecture Constraints》是一份面向企业技术决策者、软件架构师与高级工程师的系统性研究笔记。全文以“何时用 JavaScript、如何用好 JavaScript”为主线,从语言特性、运行时差异、适用场景、主流框架、架构约束、生态现状、…

比较vue和react框架

目录 一、基础语法 1.1、模板 vs JSX 1.2、指令 1.2.1、v-for vs Array.map 1.2.2、v-if vs 三元运算符或者&& 1.2.3、v-bind vs 直接在JSX里写{变量} 1.2.4、v-show vs style和className 1.2.5、v-html vs dangerouslySetInnerHTML 1.3、数据绑定 1.4、数据…

插板式系统的“生命线“:EtherCAT分布式供电该如何实现?

在ZIO系列插板式模组系统中,EtherCAT分布式供电如同设备的血液循环网络,其供电稳定性直接决定系统可靠性。本文将从电流计算到电源扩展,为您讲解EtherCAT分布式供电该如何实现。ZIO系列插板式模组的电源介绍ZIO系列插板式I/O模块 是ZLG开发的…