软件工程课程第一次开发迭代记录以及心得
一、迭代记录
第1轮迭代:Tkinter原始实现(起点)
我给的修改要求:
一份严格完整的Persona需求文档,指定Python 3.10+/Tkinter + ttk/SQLite3/unittest,要求模块化、UI 与核心逻辑分离,且明确写出“不得用...省略代码,不得用TODO、pass占位核心功能”,要求交付8个以上单元测试。
AI实际改了什么:
AI从零创建了整个项目:
- 文件树:main.py/database.py/models.py/reminder.py/ui/(4个视图 +init.py)/tests/test_core.py/requirements.txt/README.md
- 一次性输出约2000+行完整可运行代码,零省略、零TODO
- 完整实现SQLite三张表(courses、assignments、settings),字段名/类型与需求完全一致
- 实现了课程CRUD、作业CRUD、课表视图、设置持久化、after调度的提醒服务
- 提供10个unittest用例
结果:一次通过,我确认“基本功能已经实现”,代码可直接运行。
第2轮迭代:PyQt5迁移需求(第一版提示)
我给的修改要求:
“基本功能已经实现,我们能不能用外部的 pyqt5 库让整体的 ui 界面更加美观?请你给出需要增加/删除/修改哪些代码文件、具体需要进行什么修改/删除/增加”
AI实际改了什么:
AI输出了迁移方案,而不是完整代码,包含:
- Tkinter/ttk → PyQt5的控件映射对照表
- 逐文件的变更清单(哪些文件修改、哪些新增、哪些不动)
- 部分骨架代码(main.py、reminder.py、ui/style.py等,但用了多处省略)
- 迁移步骤、注意事项、已知坑
- 结尾问:“若你希望我直接输出迁移后的完整PyQt5 代码……请回复‘输出 PyQt5完整代码’”
结果:方案清晰,但没有得到可直接运行的完整代码,这一轮是“方案交付”,不是“代码交付”。
第3轮迭代:PyQt5完整代码
我给的修改要求:
“请你直接输出迁移后的完整PyQt5代码(每个文件的完整实现,不留 ...)”
AI实际改了什么:
AI输出了完整的PyQt5实现:
- 完整文件树
- main.py:QApplication + QMainWindow + QTabWidget,closeEvent关闭 DB
- database.py 和 models.py:原封不动(保留核心逻辑与 UI 解耦的设计)
- reminder.py:QTimer + QMessageBox替代after + tkinter.messagebox
- ui/style.py:新增,约150行全局QSS主题
- ui/course_view.py、assignment_view.py、timetable_view.py、settings_view.py:全部重写为PyQt5控件
- tests/test_core.py:原封不动(只测核心逻辑,不依赖PyQt5)
- requirements.txt:PyQt5>=5.15,<6
- README.md:完整更新
结果:无省略,代码完整可运行。
二、验证说明
我是用以下方式确认 AI 生成的结果是正确的:
- 端到端跑通验收样例
- 新增课程“软件工程/曹健/东中院/周三 3-4 节/1-16 周”,切到课表第1周,确认周三3-4节显示“软件工程”“东中院”“曹健”
- 新增作业“PSP实验报告”,关联“软件工程”,截止2026-10-08T23:59:00,优先级medium,状态pending;确认列表按截止时间升序、剩余时间正确
- 标记该作业为done,确认状态列变“已完成”、字体变灰、后续不再触发提醒
- 边界与异常场景手测
- 课程名为空→弹出“课程名不能为空”,不保存
- 星期填8/节次1-13/起始周>结束周→各自报具体错误
- 作业标题为空、未选课程、截止时间写成2026/10/08 23:59→全部被拦下,报具体错误
- 删除有作业的课程→弹“该课程下有N个作业,确认级联删除?”,点否不删、点是课程和作业一起消失
- 空数据库启动→各列表为空,程序不崩溃
- 逾期作业显示红色+“已逾期X天X小时”,启动时弹一次汇总提醒
- 单元测试作为交叉验证
- python -m unittest discover -s tests -v 全部通过(10个用例,覆盖课程校验、级联删除、提醒逻辑、提醒标记不重复、修改截止时间重置标记等)
- 测试使用tempfile.mkstemp生成临时数据库,不污染真实coursework.db
- 数据库字段与schema核对
- 直接打开coursework.db,对照需求文档核对字段名、类型、默认值、外键约束
- 确认PRAGMA foreign_keys = ON生效,删除课程后assignments表相关行确实被清除
- 持久化验证
- 在设置页保存提醒开关和检查间隔,关闭程序,重启后确认设置仍生效
- 手动修改作业截止时间,确认reminded_24h/reminded_2h被重置为0,可以再次触发提醒
三、心得
最大意外:
第二轮提示词没写清楚,AI只给了迁移方案,没给完整代码,多迭代了一轮才拿到完整可运行代码。回头看,如果第一版PyQt5提示词直接写“请输出完整可运行代码,不留...”,可以少一轮往返。
惊喜:
- 第1轮Persona提示里特意写了“不得用...省略代码”,AI严格照做,一次性输出2000+行零省略的完整实现,跑通即用。
- 迁移到PyQt5时database.py/models.py完全不用改——这说明AI一开始的UI与业务逻辑分离设计是认真的,不是口号,架构解耦真的降低了迁移成本。
失望: - 面对模糊提示“给出修改哪些文件、进行什么修改”时,AI选择了“给方案”而不是“给完整代码”,并且用...省掉了关键实现。虽然AI在结尾主动问了“是否要完整代码”,但用户如果不想再打字就会觉得被卡住。更理想的做法是:既然第1轮已经明确过“不要省略”,第二版提示词里保留这个上下文,要么先交付一版全量代码,要么在方案里明确指出哪些文件是“完整给出”而不是骨架,让用户一眼能看出差距。
浙公网安备 33010602011771号