用 AI 迭代开发一个校园消费记账桌面程序
需求与实现
这次选择了“个人校园消费记账 GUI”:记录生活消费、查看月份和分类统计,并根据预算给出提醒。程序使用 Python + PyQt6,SQLite 保存本地数据。金额按整数分存储,避免把 0.1+0.2 这类浮点误差带入账本。
最终支持消费记录新增/编辑/确认删除、月份查询、分类统计、按月预算、额度提醒、分类筛选及 CSV 导出。提醒显示在应用内;它没有后台通知、云同步或多账户功能。
实际迭代过程
| 轮次 | 主控提出的具体要求 | AI 实际修改 | 实际验证 |
|---|---|---|---|
| 第1轮:初版 | 先完成中文流水 CRUD、月统计与 SQLite 持久化,金额严格校验 | 分离模型、服务、存储与界面,实现可运行初版 | 初版定向回归 4 失败,真实暴露两个界面状态问题 |
| 第2轮:修复 | 取消选择须清空旧表单;写入完成但刷新失败须保留组合结果 | 重置表单并避免信号递归;refresh 返回成功状态,避免误报 | 4 条回归全通过;完整 96/96 通过 |
| 第3轮:预算 | 各月独立预算,精确区分 80%、100%、超支,清除预算不删流水 | 独立预算表、阈值计算、设置/清除及即时提醒 | 144/144 通过;另如实纠正一处测试预期算错 |
| 第4轮:筛选与导出 | 导出当前月份/分类,预算仍按全月计算,防公式与误覆盖 | 筛选小计、中文 CSV、格式转义、数据库目标保护和失败处理 | 最终 177/177 通过,无失败、错误或跳过 |
检查与验证说明
验证并非只看“窗口能打开”。测试使用临时 SQLite 文件检查写入、修改、删除及重新连接后的数据;用 12.30+2.00+0.10+0.20=14.60 元核对月统计,同时检查 0.10+0.20 精确等于 0.30 元。无效金额、闰日、跨年月、空月份和不存在的记录都有对应边界用例。
预算按整数分比较,核对 80% 前后、刚好用完和超支。筛选后仍检查全月预算不会变化。CSV 用中文和包含逗号、引号、换行及公式前缀的备注验证,并检查数据库及已有导出文件不会被错误路径或失败写入损坏。
界面自动化实际创建 Qt 窗口并操作控件,包括删除取消、编辑与切月、数据库错误后的状态恢复。初版的失败日志和后续通过日志均保留。

这张图由临时合成账目渲染。首次 offscreen 渲染因字体未正确加载出现文字方框,图像检查发现后,预览脚本显式加载微软雅黑字体,重做并复核可读性。这也说明功能测试通过后仍应查看实际输出。
心得:AI 生成的测试也需要验证
这次作业中,让我最意外的是 AI 连测试的预期结果也会写错。第三轮预算测试曾把 79.99 元支出、99.99 元预算判断为达到 80%,但核对计算后,这个比例实际仍低于 80%。看到这段记录,我意识到,测试失败时也需要检查测试用例本身。如果只盯着“全部通过”,就可能为了满足一个错误的断言,把原本正确的业务逻辑改错。
让我比较惊喜的是,AI 能把一个简单的记账需求逐步扩展成包含数据存储、预算提醒和导出功能的程序,还能通过审查和回归测试定位问题。不过,初版取消选择后仍保留旧表单、写入后的刷新错误被成功提示覆盖,也让我看到它对操作细节考虑得不够周全。这些问题单看正常流程很容易被忽略,实际使用时却可能造成重复记账。
经过这次协作,我更重视需求描述和验证依据。后续使用 AI 开发时,我会把修改要求写得更具体,说明什么操作触发了问题、当前结果是什么、期望结果是什么,并要求保留修改前后的验证记录。我也会检查最终界面和输出文件,确认程序的表现符合需求。对我来说,AI 提高了实现效率,而判断结果是否可靠,仍需要清楚的标准和持续核对。
浙公网安备 33010602011771号