AI 生成的 Odoo 模块:先审业务规则,再谈上线

返回
Kevin Riedl

12 分钟 阅读 · 2026年11月5日
最近审核

下一篇
图片在你的设备上生成,不连接 Instagram。文章链接会复制到剪贴板,供链接贴纸使用。

折扣审批看起来很小:设置标记,再记录批准人。但下文故意写错的示例会批准已取消报价,相信调用者编造的批准身份,并在注入故障后留下部分修改。普通演示却仍能成功。

应依据获批业务规则和准确的已安装 Odoo 版本,审计 AI 生成的模块。 复现有业务后果的失败,检查最终记录,并独立验证修正。通过本地模型有助于定义检查;真正决定能否上线的,仍是原生安装、授权、事务和升级证据。

资料核查日期:2026年11月5日。 我们审阅 Odoo 20 官方资料,并执行了 13 个虚构审批用例。两份 Python 实现均为本文编写,不是客户代码样本,也不是 AI 工具基准。没有安装 Odoo 插件或执行原生升级,所有建议原生检查仍为 NOT_RUN。

模块审计应该作出什么决定?

审计应判断一项明确的定制是否有足够证据发布、需要有限修复,或应由获批的更简单实现替代。先确定业务命令允许改变什么。代码质量分数不能补上缺失的审批规则,也不能决定谁有权批准该规则。

扩大自定义代码前,让负责人在当前配置中演示需求。如果受支持的现有流程已经满足要求,应把它与持续维护覆盖逻辑的成本比较。这需要在已安装版本上验证,并不是预先认定所有定制审批都没有必要。

随后固定审查范围:模块提交、Odoo 版本与版本类型、依赖修订、受影响记录和执行身份。包括会改变行为的设置。只看 Git 分支、不看必要配置,可能漏掉业务实际使用的路径。

AI 生成代码 QA 指南负责更广泛的生产就绪检查。本文审查单元是一项确定性的 Odoo 定制。代理业务状态指南则覆盖代理的完整任务与工具选择。

审批示例应该实现什么规则?

示例只在执行者有权为该公司审批、折扣处于虚构授权上限内时,批准当前版本的报价草稿,并记录一次可信身份。过期或被禁止的决定必须被拒绝,不留下部分审批,即使失败发生在批次较后的记录上也一样。

虚构报价 Q-17 属于公司 A,版本为 3,初始折扣 5.00%。用户 7 可批准从 0% 到 10.00% 的折扣,含上限。10.01% 需要其他决定。这些是示例业务规则,不是 Odoo 默认值。字段 approval 和 approved_revision 属于 Python 示例。

虚构折扣命令的获批业务约定
规则允许结果要求的失败行为
权限与公司当前获授权身份在公司 A 范围内操作。缺少角色或公司未授权时,记录不变。
版本与生命周期已审核版本仍为当前版本,报价仍是草稿。拒绝旧版本或已取消报价。
授权上限示例允许 10.00%。10.01% 不能得到该项批准。
身份依据审批记录可信用户 7。调用者提供的标签不能替换为用户 99。
重复选择每个报价版本只有一次批准和一条审计记录。重放或重复选中不增加审批效果。
批次失败约定批次连同审计证据一并完成。某项被拒绝或注入审计故障时,不留下部分批次修改。

这里的审批只修改审核字段,不确认报价、不创建交付,也不产生会计过账。这条边界决定“成功”指什么。如果真实模块还执行后续业务动作,应增加该动作的授权及最终状态约定。

先解决规则分歧,再生成预期结果。业务规则冲突指南解释如何分配这项决定。审核人不能仅凭函数已经接受 10.00%,就判断业务应该允许它。

逐项代码审查暴露了哪些缺陷?

注释审查揭示缺少业务前提、批准身份不可信,以及未完成操作后仍保留修改等问题。重复调用还增加审计效果。每个发现都关联具体语句和失败用例,比把整个模块标为“AI 生成”再给出泛化风险分数,更能支持发布决定。

缺陷版本包含以下顺序,节选保留了执行次序:

quote["approval"] = "approved"
quote["approved_revision"] = expected_revisions[key]
quote["approved_by"] = claimed_approver or actor["uid"]
if key == fail_audit_for:
    raise InjectedAuditFailure(key)
store["audits"].append({
    "quote": key,
    "revision": expected_revisions[key],
    "actor": quote["approved_by"],
})

这段逻辑没有检查执行者是否有权批准当前记录。Odoo 的公共方法安全指南将传入记录与参数视为不可信,CRUD 访问检查不能证明所有业务前提成立。应审查接收调用的方法,而不只是可见按钮。

故意构造的缺陷版本审查结果
发现示例中的业务后果需要验证的修正
未检查当前权限和目标记录未经授权的执行者或公司得到批准。修改前验证可信身份及目标记录。
缺少版本、状态与上限前提过期、取消或超限请求被标为已批准。将获批规则与当前记录值比较。
调用者选择记录中的批准人审计归因于用户 99,而非 7。从可信执行身份取得归属。
每次选择都追加效果重复调用或重复项目产生两条审计记录。识别同一版本已完成的审批。
失败前先修改,却没有原子边界审计写入失败,仍留下批准记录或半完成批次。在真实实现证明约定的全成或全不成结果。

修正版 Python 先验证选择项,在暂存副本上修改,再替换模型状态。这只模拟所需结果,并没有实现 Odoo 事务。官方开发规范解释框架的事务所有权,以及为何需要审查无明确理由的手动提交。例外情况下自行明确管理的游标,需要另行论证。

下载带注释的发现记录,查看缺陷与复现用例的对应关系。Odoo 20 公司访问迁移测试负责版本相关的权限变化。旧的通用 ACL 清单不足以解释该迁移。

13 个业务规则测试修正前后有何变化?

缺陷版本违反 13 项固定预期中的 11 项;修正版满足全部 13 项。两者都能完成普通审批和恰好达到上限的审批,所以一次成功演示可能隐藏其他缺陷。这些数字仅描述刻意构造的示例,不是 AI 生成 Odoo 代码的缺陷率。

2026年11月5日执行的本地规则测试
用例缺陷版本修正版本
普通 5.00% 审批批准;一条审计记录批准;一条审计记录
恰好 10.00% 上限批准;一条审计记录批准;一条审计记录
10.01% 请求错误批准拒绝;不变
执行者缺少审批权限错误批准拒绝;不变
记录属于未授权公司 B错误批准拒绝;不变
审核引用版本 3,记录已为版本 4错误地按版本 3 批准拒绝;不变
报价已取消仍设置批准标记拒绝;不变
一次请求选中同一报价两次两条审计记录一条审计记录
同一审批调用两次两条审计记录一条审计记录
调用者提供批准人 99归因于用户 99归因于可信用户 7
批准赋值后审计失败批准标记保留;无审计记录无修改
批次第二条记录属于未授权 B两条都批准两条都未修改
批次第二次审计写入失败两条都批准;只有一条审计记录两条都未修改

下载可运行审批审查示例及完整预期与观察状态。保存 Python 文件后运行:

python3 approval-review-model.py

脚本使用 Python 标准库,并用十进制比较检查虚构百分比规则。它不导入 Odoo,也不访问网络。预期状态由业务约定独立定义,不依赖任一审批函数。输出包括错误和最终审批字段,仅抛出异常,不能让部分写入看起来正确。

模型没有测试原生并发请求。两个调用者并行批准同一版本时,真实方法可能还需其他保护。n8n 恢复文章讨论外部订单创建的独立边界;本示例的重复审计效果,不能证明连接器具备幂等性。

真实 Odoo 模块还必须验证什么?

将模型结论应用于 Odoo 前,应在实际构建中验证真实入口和受影响记录。审查覆盖逻辑及依赖,再通过接收方法执行获批业务用例。确认每次修改的身份。孤立函数即使满足约定,也可能与应用集成错误。

Python 示例之外的原生审查问题
领域审查问题所需证据
入口按钮、API 调用和自动化是否到达同一行为?每条相关路径的获批身份及最终状态检查。
依赖清单是否声明定制使用的模块?从声明依赖集可复现安装。
覆盖逻辑为什么替换或扩展每项基础行为?证明必要标准流程仍正常的回归用例。
公司与字段命令是否使用预期记录、公司和值?原生角色/上下文证据及代表性字段检查。
失败与并发中断或并行审批后留下什么?受控故障时序下的记录及审计效果。
既有数据此模块版本之前创建的报价如何处理?获批升级预期及演练后观察记录。

建议的原生验收包包含这些关卡及业务规则用例,初始状态为 NOT_RUN,政策批准仍待完成。将示例预期替换为获批规则,记录准确身份与版本,并附上实际证据后才能认定通过。

审查每项覆盖逻辑时,应把标准行为放在旁边比较。没有解释的替换意味着还要查明移除了什么。如果只需要增加一个决策检查,应考虑是否能采用更窄的扩展,而非替换完整流程,再用受影响标准用例验证该判断。

安装和升级证据应该怎样检查?

将安装、升级和运行行为视为独立关卡。空库安装可发现依赖缺失;既有数据演练覆盖变化前的记录与配置。两者都不能证明正确业务测试已运行。报告必须绑定准确模块提交、目标环境和所选用例。

Odoo 的测试文档要求导入测试模块,并说明启用和选择如何决定执行。应索取标明预期测试的运行输出。命令显示绿色,但相关用例未执行,其行为仍未验证。

定制数据库升级指南区分空库安装、升级数据上的安装及运行演练。本文 Python 执行没有提供其中任何原生结果。

针对该审批定制,应纳入尚未填写新审批字段的旧报价、业务内容已变的已批准报价,以及升级开始时仍待审的记录。演练前先决定目标状态。默认值让旧记录看起来已批准,是业务决定,不应只是消除报错的捷径。

为演练保留受控恢复方案。仅回退代码,不能证明数据修改也已撤销。迁移对账指南覆盖更广范围的预期与观察比较。

审计交付应包含哪些内容?

每项发布决定都应能追溯到获批规则和可复现证据。对每个阻断项,记录受影响版本、复现步骤和业务后果,再附上修正及独立复测。未执行检查必须保持可见。文字风格建议清单,无法回答报价是否可能被越权批准。

示例发现记录将已确认的本地规则失败,与仍需执行的原生问题分开。真实审计也应保持这一区别。“模型拒绝旧审批”和“部署的 Odoo 方法在这些身份下拒绝旧审批”,是不同证据陈述。

修复实现与批准政策也应分开。审核人可以证明函数执行了 10.00% 上限;业务负责人决定这是否是预期授权。若审查期间规则改变,应修订预期结果,并按新约定重跑受影响用例。

发布前 QA 清单提供整体上线背景。AI 构建软件的通用审计指南介绍更大范围的审计;本模块审查应保持较窄、可测试的边界。

什么时候应发布、修复或移除定制?

只发布获批原生证据支持的范围。修复已证明的规则违例,并复测受影响流程。如果获批的受支持替代方案满足需求,可考虑移除不必要定制,但必须安排既有数据。漂亮演示不能决定这三种选择。

建议从一个有实际后果的命令、它的真实入口,以及一对允许/拒绝用例开始,再加入可能留下错误业务记录的失败情形。这样,审计在扩展到仓库所有文件前,就有一项具体决定可作。

讨论 Wavect 的软件质量保障服务时,请准备模块提交、安装版本信息,以及负责人能批准的一条业务规则。有效交付应包含可复现发现、明确原生发布关卡,以及商定修正确实奏效的证据。

AI 生成 Odoo 模块审计常见问题

下载示例是 Odoo 插件吗?
不是。它是使用标准库的 Python 模型,包含故意写错及修正的审批函数,并有固定预期状态,无法安装到 Odoo。可用它检查审查逻辑和失败用例,再针对真实模块、依赖和业务政策实现并执行独立原生检查。
13 个用例通过,就证明 AI 代码可靠吗?
只能证明这个修正版满足这 13 项预期。两份实现都是为本文编写,没有测量 AI 输出样本。这个数量既不是模型比较,也不是生产缺陷估计。真实模块仍需自己的获批范围和原生证据。
10.00% 是 Odoo 默认审批上限吗?
不是。这是为显示边界测试而虚构的授权规则。普通示例是 5.00%,允许上限为 10.00%,10.01% 需要其他决定。业务负责人必须先批准真实规则及其适用数值和版本,再由审核人定义预期结果。
能让同一个 AI 生成预期结果吗?
它可以建议用例,但获批预期行为必须独立依据业务规则。如果实现和预期输出共享同一个错误假设,两者可以一致却都错误。先由负责人确定规则,再据此审查测试数据和最终记录断言。
折扣获批是否意味着报价已经确认?
本示例不是。批准只更新自定义审核字段,报价仍是草稿。确认及其他后续动作需要自己的明确约定与授权。应写清真实命令允许产生的准确状态并检查它,不能从一次成功审批回复推断报价已确认。
所有 sudo 或显式提交都应自动删除吗?
先审查用途与边界。高权限操作需要合理授权模型和拒绝路径证据;自行管理的事务需要故障与恢复论证。官方指南解释为何应重点检查这些选择。不了解调用者就删一行,可能引入另一缺陷,应验证替代行为。
空库安装成功能替代既有数据测试吗?
不能。新数据库没有模块升级后将遇到的历史记录或配置。应批准这些记录的预期处理,并在受保护副本上演练。安装证据与业务状态证据要分开,包括尚待处理及以前已批准的工作将如何变化。

从原型到生产

如果你的 vibe-coded 或 AI 生成产品需要经受真实用户、尽调或投资人审查,Wavect 会审计、加固并重建真正关键的部分。

最合适的下一步:

只收重要内容

关注与你相关的内容

每当我们发布新文章,你会收到一封简短邮件。你可以关注整个博客,也可以只选感兴趣的主题。

你希望接收哪些内容?
选择主题

免费、双重确认、不使用跟踪像素。

返回
Kevin Riedl

12 分钟 阅读 · 2026年11月5日
最近审核

下一篇

获取下一篇关于交付与 QA的一线笔记

有新文章时发送一封简短邮件,不使用跟踪像素,也不发送填充内容。

免费、双重确认、不使用跟踪像素。