Appearance
脱敏案例:AI 从需求到交付完成一个 WPF 数据采集上位机
这个案例参考了一次真实的 AI 辅助 WPF 上位机开发过程,并做了脱敏处理。
案例不提供原项目源码,不暴露客户、设备、协议细节和业务数据。它重点说明一件事:不要把 AI 当成“一次性生成完整软件”的工具,而要把 AI 放进需求分析、界面设计、技术方案、Codex 实现、测试验收、交付复盘这一整条链路里。
本案例的前半段适合在 Web 端 ChatGPT 里完成,主要用于整理需求、设计界面和推导方案。后半段更适合在 Codex 里完成,因为 Codex 能读取项目文件、分析代码结构、做增量修改、运行验证并沉淀交付记录。
1. 案例背景
项目目标:做一个 WPF 数据采集与设备通信上位机。
脱敏后的典型需求:
- 支持串口通信。
- 支持 TCP 通信。
- 解析自定义设备协议帧。
- 处理 CRC 校验、粘包、半包、异常帧。
- 显示实时采集数据。
- 使用图表显示多通道曲线。
- 支持 CSV/BIN 数据保存。
- 记录运行日志、错误日志和通信日志。
- 提供系统配置窗口。
- 支持调试、回归验证、性能优化和阶段交付。
这个案例的重点不是“写出某几个类”,而是把项目拆成 AI 能稳定处理的阶段,并在每个阶段设置输入、输出、人工检查点和质量门。
2. 为什么不能一开始就让 AI 写完整项目
很多人第一次会这样问:
text
帮我做一个 WPF 上位机,可以接收设备数据,显示曲线,保存文件。这个问法太粗,AI 容易出现这些问题:
- 把 UI、通信、协议、保存、日志全部写进一个窗口。
- 没有区分真实需求和 AI 推测。
- 没有处理粘包、半包、CRC 错误、断线、保存失败。
- 图表点数无限增长,运行一段时间后卡顿。
- 没有验收标准,最后只能凭感觉判断“差不多完成”。
- 后期让 Codex 接手时,项目结构混乱,难以增量修改。
正确流程是先把问题、需求、界面、模块、验收拆清楚,再进入代码实现。
3. 标准全链路流程
推荐按下面顺序跑完整项目(以下为本案例的完整流程,权威定义见 00-先读我-阅读路线.md 第 1.1 节):
text
轻量背景确认
-> 需求分析
-> 界面与交互设计
-> 技术方案和模块边界
-> 开发任务拆解
-> Codex 读取项目结构
-> 增量实现和修正
-> Bug 调查与最小修复
-> 回归测试与验收
-> 发布交付
-> 复盘沉淀每一步都要明确:
- 输入材料是什么。
- AI 应该输出什么。
- 人工要检查什么。
- 通过什么标准才能进入下一步。
💡 关于本文中的 Prompt 模板
文中出现的 Prompt 是参考模板,展示的是"要告诉 AI 哪些信息"和"AI 应该输出什么"。 实际开发时不需要逐字复制——你只需说清目标、给够上下文、列好约束,AI 就能理解。 一条好的 Prompt 往往就是一句话加上必要的限制条件,而不是十几行的指令。
这里要注意:对接上位机项目的人,通常不是最终行业业务的负责人。他不一定需要完整理解客户行业、实验原理、工艺背景和最终业务价值。真正必须弄清楚的是“软件要做什么、显示什么、控制什么、保存什么、怎么验收”。所以问题定义只做轻量确认,不作为主要工作量。
4. 阶段 0:轻量背景确认
目标
只确认足够支撑需求拆解的背景信息。不要把这一步写成复杂的产品调研,也不要要求用户解释完整行业业务。
这一阶段的目标不是理解客户为什么做这个实验,而是避免 AI 完全不知道软件使用环境,从而在界面、通信、保存、验收上做错判断。
需要提供给 AI 的信息
| 信息 | 示例 |
|---|---|
| 软件类型 | 数据采集、设备控制、测试工装、调试工具 |
| 使用场景 | 实验室、产线、客户现场、设备调试现场 |
| 使用人员 | 操作员、调试工程师、测试人员、售后人员 |
| 连接设备 | FPGA、单片机、PLC、仪表、电源、传感器 |
| 第一阶段目标 | 能连接、能采集、能显示、能保存、能看日志 |
| 明确不做 | 不做复杂权限、不做报表、不做多设备并发 |
可写可不写的信息
下面这些信息有帮助,但不是第一轮必须项:
| 信息 | 什么时候需要 |
|---|---|
| 行业背景 | 需要做正式方案或给甲方讲价值时 |
| 实验原理 | 会影响测试流程、判定规则、单位和数据含义时 |
| 客户业务目标 | 需要拆验收标准、报表或追溯要求时 |
| 现场组织流程 | 多角色、多班次、权限或交接班场景才需要 |
如果用户只知道“我要做一个采集软件,3 个 ADC 曲线、4 个电源曲线、串口连接、日志、保存数据”,这已经足够进入需求分析。不要卡在行业问题定义上。
推荐 Prompt
text
请你作为 C# WPF/WinForms 上位机产品和需求分析助手。
我现在还不想写代码,也不想直接设计项目结构。
请先根据下面信息,帮我做轻量背景确认,并判断是否足够进入需求分析。
已知信息:
【粘贴软件类型、连接设备、使用场景、第一阶段目标】
请输出:
1. 这个软件大概属于什么类型。
2. 已经明确的软件目标。
3. 已经明确的设备和通信信息。
4. 第一阶段最小目标。
5. 暂不需要深挖的行业背景。
6. 进入需求分析前最少还缺什么。人工检查
| 检查项 | 通过标准 |
|---|---|
| 不过度追问行业背景 | 不要求用户解释完整实验原理或客户业务 |
| 软件目标可理解 | 知道大概要采集、显示、控制还是保存 |
| 设备和场景大概清楚 | 至少知道连接什么设备、在哪类现场用 |
| 能进入需求拆解 | 已经能继续问界面、通信、数据、验收 |
如果这一阶段信息不全,也不一定要停。只要需求本身足够清楚,可以继续需求分析,并把缺失背景列为“后续确认”。
5. 阶段 1:需求分析
目标
把零散想法、聊天记录、客户文档或技术要求,整理成可开发的第一版需求方案。
对目标用户来说,需求分析是主流程,不是可选项。需求决定界面怎么排、通信怎么做、按钮放哪里、数据怎么保存、后面 Codex 改代码要改哪些模块。
正确拆法
| 模块 | 要拆清楚什么 |
|---|---|
| 业务流程 | 用户先做什么、软件怎么响应、设备返回什么、何时结束 |
| UI 页面 | 主界面、配置页、日志页、历史数据页是否需要 |
| 通信 | 串口/TCP、连接参数、收发方向、协议文档、示例报文 |
| 协议 | 帧头、长度、类型、数据区、CRC、异常帧 |
| 图表 | 显示哪些通道、刷新频率、最大点数 |
| 存储 | 保存什么、保存格式、文件路径、文件大小、失败提示 |
| 日志 | 运行日志、错误日志、通信日志、是否保存原始报文 |
| 验收 | 每个功能如何验证,通过标准是什么 |
案例中的实际需求提炼
在真实开发过程中,前期讨论的重点不是复杂行业背景,而是不断把软件需求和界面需求说清楚:
| 需求类别 | 具体内容 |
|---|---|
| 主界面布局 | 曲线图和日志尽量显示在同一个 Dashboard,不要拆成多个 Tab |
| 图表数量 | 3 个 ADC 图表,4 个电源通道图表,底部实时日志 |
| 串口设置 | 主界面只保留连接/断开入口,详细连接设置进二级配置页 |
| 中文化 | 软件名称、按钮、标签、状态信息都要显示中文 |
| 协议 | FPGA 到上位机报文使用 CRC-16/MODBUS,多项式 0xA001,初值 0xFFFF,CRC 高字节在先 |
| UI 细节 | 深色主题下文字要清晰,状态颜色要统一,图表信息框不能像可编辑输入框 |
| 视觉回退 | 如果布局优化方向错了,要回退到 3 ADC + 4 电源 + 日志的 Dashboard 布局 |
| 功能补充 | 抽采参数配置、手动采样按钮、中文乱码修复 |
这些信息比“这个实验为什么做”更直接决定开发工作。用户可以不完全懂行业背景,但必须把这些软件需求说清楚。
推荐 Prompt
text
我正在做一个 C# WPF/WinForms 上位机项目。下面是我目前能说清楚的粗需求。
请先不要写代码,也不要直接设计项目结构。
请你先把这些零散需求整理成一份第一版需求方案。
要求:
1. 不要假设我已经知道所有技术细节。
2. 不要让我一开始就提供按钮、控件、绑定字段、粘包半包、重连策略这些细节。
3. 请先根据业务目标,反推可能需要的页面、流程、通信、数据、日志和验收点。
4. 对不确定的地方,请列成“需要确认的问题”,不要直接替我决定。
请输出:
1. 项目目标。
2. 使用人员和使用场景。
3. 核心业务流程草案。
4. 功能模块草案。
5. 页面规划草案。
6. 通信需求草案。
7. 数据保存草案。
8. 日志、报警、权限是否需要进一步确认。
9. 第一阶段最小可运行版本建议。
10. 已确认内容。
11. AI 推测内容。
12. 下一步最应该确认的 5-10 个问题。
粗需求如下:
【粘贴需求】人工检查
| 检查项 | 通过标准 |
|---|---|
| 已确认和 AI 推测分开 | 推测内容没有被当成客户要求 |
| 第一阶段范围合理 | 不把全部功能都塞进第一版 |
| 关键流程可执行 | 能说清用户从启动到结束怎么操作 |
| 通信风险已列出 | 粘包、半包、CRC、超时、断线没有被漏掉 |
| 验收标准可测 | 每个核心功能都有验证方法 |
6. 阶段 2:界面与交互设计
目标
让 AI 先设计用户能看懂、能操作、能验收的界面方案,而不是马上写 XAML。
这一阶段要服务于需求,不要为了"好看"反复重排布局。数据采集上位机的界面重点是同屏观察、状态清楚、操作路径短。
本案例的主界面规划
| 区域 | 内容 | 设计目的 |
|---|---|---|
| 顶部状态栏 | 连接状态、通信模式、运行状态、接收速率 | 操作员第一眼判断软件是否正常 |
| 左侧控制区 | 连接、断开、开始采集、停止采集、配置 | 高频操作集中放置 |
| 中间图表区 | 多通道实时曲线 | 观察数据变化趋势 |
| 右侧数据区 | 当前值、采样计数、错误计数、设备状态 | 显示关键实时指标 |
| 底部日志区 | 运行日志、错误日志、通信摘要 | 出问题时能追踪 |
| 配置窗口 | 串口、TCP、保存路径、采样参数 | 把低频配置从主界面移出 |
案例中的界面经验
一个很重要的经验:当 Dashboard 布局已经接近可用时,不要继续让 AI 大幅重新设计布局。正确做法是锁定布局,再修细节。
应保留的布局:
text
第一行:ADC芯片1 / ADC芯片2 / ADC芯片3
第二行:电源通道1 / 电源通道2
第三行:电源通道3 / 电源通道4
第四行:实时日志,高度约 180~220px不建议:
- 把曲线和日志拆到多个 Tab。
- 用 StackPanel 纵向堆叠导致窗口利用率低。
- 为了视觉优化减少图表数量。
- 删除实时日志区域。
- 让串口参数长期占据主界面。
建议:
- 主界面只放连接、采集、手动采样、抽采设置等高频操作。
- 串口参数、保存路径、配置查看放到菜单或二级配置窗口。
- 图表自动填满窗口,使用 Grid 行列布局。
- 深色主题下标题、坐标轴、状态文字必须有足够对比度。
- 图表无数据时不要显示
double.MaxValue这类异常数值。
推荐 Prompt
text
请帮我设计一个 WPF 工控上位机主界面方案。
请先不要写 WPF 代码,也不要直接生成 XAML。
界面需要支持:
1. 连接设备。
2. 开始和停止采集。
3. 显示多通道实时曲线。
4. 显示当前关键数据和错误计数。
5. 查看运行日志和通信日志。
6. 打开配置窗口设置串口、TCP、保存路径和采样参数。
请输出:
1. 页面区域布局。
2. 每个区域显示什么。
3. 每个区域有哪些操作。
4. 哪些信息必须在主界面,哪些可以放到配置窗口。
5. 按钮状态如何随连接/采集状态变化。
6. 异常状态如何提示。
7. 后续写 XAML 前还需要确认的问题。人工检查
| 检查项 | 通过标准 |
|---|---|
| 主界面不拥挤 | 高频信息在主界面,低频配置进二级窗口 |
| 按钮状态明确 | 未连接、已连接、采集中、异常、断线状态都能判断 |
| 异常可见 | 连接失败、CRC 错误、保存失败、断线不会被藏起来 |
| 适合现场使用 | 操作路径短,关键状态明显 |
7. 阶段 3:技术方案和模块边界
目标
把需求和界面方案转换成可维护的 WPF 项目结构。
推荐结构
text
Models/
AcquisitionData
DeviceStatus
AppConfig
LogEntry
ProtocolPacket
Views/
MainWindow
SettingsWindow
LogWindow
ViewModels/
MainViewModel
SettingsViewModel
ChartViewModel
Services/
AcquisitionService
ConfigService
LogService
FileStorageService
Communication/
IDeviceConnection
SerialConnection
TcpClientConnection
ReceiveQueue
Protocol/
ProtocolParser
Crc16
ProtocolConstants
PacketFactory
Storage/
CsvWriter
BinaryWriter
FileRotationPolicy
Tests/
ProtocolParserTests
StorageTests
ConfigTests关键边界
| 边界 | 正确做法 | 不建议做法 |
|---|---|---|
| UI 和通信 | ViewModel 调服务,服务负责通信 | 在按钮事件里直接收发和解析 |
| 接收和解析 | 接收线程只收字节,解析器独立组帧 | 接收事件里做 CRC、保存、刷新 UI |
| 解析和业务 | 解析器输出业务对象 | 解析器直接操作界面或写文件 |
| 显示和保存 | 显示限频,保存按数据流写入 | 每包数据都刷新 UI 并频繁打开文件 |
| 日志和主流程 | 日志异步或批量写入 | 高频日志阻塞通信或 UI |
推荐 Prompt
text
请根据已经确认的需求方案和界面方案,设计 WPF 上位机技术方案。
请先不要写代码。
请输出:
1. 推荐项目结构。
2. Models、Views、ViewModels、Services、Communication、Protocol、Storage 的职责。
3. 串口和 TCP 是否需要统一接口。
4. 接收、解析、显示、保存、日志的数据流。
5. 线程模型:哪些在后台线程,哪些回到 UI 线程。
6. 关键风险点。
7. 开发顺序。
8. 每个阶段的验收检查点。人工检查
| 检查项 | 通过标准 |
|---|---|
| 模块职责清楚 | 能说清每个目录负责什么 |
| 数据流清楚 | 原始字节到界面显示、文件保存、日志记录路径明确 |
| 高风险点已设计 | 协议、线程、文件保存、图表刷新都有策略 |
| 开发顺序可执行 | 先骨架,再通信,再协议,再显示,再保存,再优化 |
8. 阶段 4:开发任务拆解
目标
把“做一个上位机”拆成 Codex 可以逐步完成的小任务。
推荐任务顺序
| 顺序 | 任务 | 完成标准 |
|---|---|---|
| 1 | 建立 WPF 项目骨架 | 能编译启动,主窗口能打开 |
| 2 | 建立 MVVM 基础 | ViewModel、命令、绑定可用 |
| 3 | 做主界面布局 | 状态栏、控制区、图表区、数据区、日志区成型 |
| 4 | 做配置窗口 | 串口、TCP、保存路径、采样参数能保存加载 |
| 5 | 抽象通信接口 | 串口/TCP 有统一连接、断开、发送、接收事件 |
| 6 | 实现串口通信 | 能打开、关闭、发送、接收、异常提示 |
| 7 | 实现 TCP 通信 | 能连接、断开、收发、处理断线 |
| 8 | 实现协议解析器 | 支持完整帧、半包、粘包、CRC 错误 |
| 9 | 接入实时数据流 | 解析后的数据能刷新当前值 |
| 10 | 接入图表 | 控制最大点数和刷新频率 |
| 11 | 接入文件保存 | CSV/BIN 能创建、写入、关闭、异常提示 |
| 12 | 接入日志 | UI 日志和文件日志可追踪 |
| 13 | 性能优化 | UI 不明显卡顿,数据不会无限堆积 |
| 14 | 回归测试 | 正常路径、异常路径、长稳测试通过 |
| 15 | 交付整理 | 发布包、配置说明、已知风险、验收记录完整 |
已有初版项目时的实际任务顺序
如果已有初版界面和部分功能,可以按以下节奏推进:
| 顺序 | 任务 | 说明 |
|---|---|---|
| 1 | 锁定 Dashboard 布局 | 3 ADC + 4 电源 + 日志同屏显示 |
| 2 | 回退错误布局 | 如果优化后只剩少量图表或大片空白,先回退 |
| 3 | 修视觉细节 | 字体、颜色、标题、坐标轴、状态栏可读性 |
| 4 | 修图表异常显示 | 关闭数据点标签,避免显示异常数值 |
| 5 | 中文化和编码修复 | 界面统一中文,文件保存为 UTF-8 |
| 6 | 补抽采参数配置 | 输入抽采倍率,校验范围,发送配置命令 |
| 7 | 补手动采样 | 点击按钮发送请求指令,显示成功/失败 |
| 8 | 固化协议处理 | 按规则实现 CRC 校验和测试 |
| 9 | 做回归验收 | 布局、通信、协议、保存、日志、异常逐项验证 |
不建议的流程
- 一次让 AI 生成整个项目。
- 需求没确认就写代码。
- UI、通信、协议、保存同时改。
- 只验证能编译,不验证真实流程。
- 接近交付时还做大重构。
9. 阶段 5:进入 Codex 后先读项目
目标
如果项目已经在 Codex 里做到一部分,第一步不是继续写代码,而是让 Codex 建立项目地图。
Codex 应先检查
| 检查项 | 目的 |
|---|---|
| 项目能否编译 | 判断当前基线是否可用 |
| 入口文件和主窗口 | 找到启动路径 |
| Views/ViewModels | 理解界面和状态绑定 |
| Communication/Protocol | 理解收发和解析链路 |
| Storage/Logs/Config | 理解保存、日志、配置 |
| 最近修改和未完成项 | 判断继续开发还是先修问题 |
| 是否有测试 | 判断验证基础 |
推荐 Prompt
text
请先阅读当前 WPF 上位机项目结构,不要急着改代码。
目标:
【说明当前要完成的功能或交付目标】
请输出:
1. 项目入口和主要页面。
2. 当前模块划分。
3. UI、ViewModel、通信、协议、存储、日志、配置分别在哪些文件。
4. 当前看起来已经完成的功能。
5. 可能缺失或风险较高的功能。
6. 建议下一步先补什么。
7. 如果要继续开发,需要先看哪些文件。质量门
只有当 Codex 能说明“当前项目有什么、缺什么、风险在哪”时,才进入修改。
10. 阶段 6:项目已经完成 90% 时怎么接管
如果项目功能已经做到 90% 多,不要重新按新项目流程走一遍。应该走“接管审计 -> 补缺 -> 回归 -> 交付”的流程。
第一步:功能盘点
让 Codex 按模块生成状态表:
| 模块 | 状态 | 证据 | 缺口 | 风险 |
|---|---|---|---|---|
| 主界面 | 已完成 / 部分完成 / 未完成 | 对应文件、截图或运行结果 | ||
| 配置窗口 | 已完成 / 部分完成 / 未完成 | |||
| 串口通信 | 已完成 / 部分完成 / 未完成 | |||
| TCP 通信 | 已完成 / 部分完成 / 未完成 | |||
| 协议解析 | 已完成 / 部分完成 / 未完成 | |||
| 图表显示 | 已完成 / 部分完成 / 未完成 | |||
| 数据保存 | 已完成 / 部分完成 / 未完成 | |||
| 日志 | 已完成 / 部分完成 / 未完成 | |||
| 异常处理 | 已完成 / 部分完成 / 未完成 | |||
| 回归测试 | 已完成 / 部分完成 / 未完成 | |||
| 发布交付 | 已完成 / 部分完成 / 未完成 |
第二步:按风险补缺
90% 阶段最容易漏的不是“按钮还没放”,而是这些隐性问题:
- 断线后 UI 状态没有恢复。
- CRC 错误后缓存处理不正确。
- 粘包、半包、异常帧没有测试。
- 图表长期运行点数过多。
- 高频日志导致 UI 卡顿。
- 停止采集后文件句柄未释放。
- 保存路径无权限时程序崩溃。
- 配置保存后没有重新加载或没有应用到通信。
- 发布环境缺少 .NET 运行时、驱动或配置文件。
- 没有保留上一版和旧配置,现场无法回滚。
第三步:只做最小补齐
对 90% 项目,Codex 每次只处理一个缺口:
text
请基于当前项目做一次功能补缺,不要重构。
本次只处理:
【例如:停止采集后文件释放不完整】
要求:
1. 先说明可能涉及哪些文件。
2. 先给最小修改方案。
3. 不改无关 UI,不改无关通信逻辑。
4. 修改后给出验证步骤。
5. 如果发现影响范围变大,先停下来说明。第四步:补齐交付材料
90% 功能完成后,至少补这些材料:
| 材料 | 内容 |
|---|---|
| 功能清单 | 已完成、未完成、已知限制 |
| 配置说明 | 串口、TCP、保存路径、日志路径 |
| 验收清单 | 功能、通信、数据、UI、异常、性能 |
| 测试记录 | 编译、启动、模拟器、真实设备、长稳 |
| 发布说明 | 版本号、运行环境、依赖、回滚方式 |
| 已知风险 | 未测设备、协议待确认、性能边界 |
11. 阶段 7:通信和协议实现
正确数据流
text
串口/TCP 接收
-> 原始字节进入队列
-> 协议解析器组帧
-> CRC 校验
-> 输出业务数据对象
-> 分发到界面显示、图表、保存、日志协议解析必须覆盖
| 场景 | 处理要求 |
|---|---|
| 完整帧 | 能正常解析并输出业务数据 |
| 半包 | 缓存等待后续数据 |
| 粘包 | 连续解析多个完整帧 |
| CRC 错误 | 记录错误,尝试查找下一个有效帧头 |
| 噪声字节 | 丢弃无效前缀,不影响后续有效帧 |
| 长度异常 | 不越界,不死循环,不清空全部有效缓存 |
推荐 Prompt
text
请设计或检查当前协议解析器。
要求:
1. 接收和解析分开。
2. 支持半包、粘包、CRC 错误和噪声字节。
3. CRC 失败时不能直接清空全部缓存,要尽量找到下一个有效帧头。
4. 解析器只输出业务对象,不直接刷新 UI 或写文件。
请输出:
1. 当前或建议的缓存处理流程。
2. 完整帧判断规则。
3. CRC 校验流程。
4. 错误帧处理策略。
5. 需要补充的测试报文。
6. 对现有代码的最小修改建议。12. 阶段 8:图表、日志、保存的性能控制
图表
实时曲线不能无限追加数据。
最低要求:
- 每条曲线有最大点数。
- UI 刷新限频,例如按 100ms、200ms 或 500ms 批量刷新。
- 数据保存和界面显示分离。
- 不在 UI 线程做大量解析和文件写入。
日志
日志要能定位问题,但不能拖慢界面。
最低要求:
- UI 只保留最近 N 条日志。
- 文件日志异步或批量写入。
- 通信原始报文和普通运行日志可以分开。
- 错误日志包含时间、模块、异常、关键参数。
保存
数据采集软件要考虑长时间运行。
最低要求:
- 文件按时间、大小或测试批次轮转。
- 停止采集时 Flush 和 Dispose。
- 保存失败有提示和日志。
- 路径不存在或无权限时不崩溃。
- CSV 字段和 BIN 格式要有说明。
13. 阶段 9:Bug 调查和最小修复
不要直接让 AI 大改
Bug 阶段先分级:
| 等级 | 示例 | 处理方式 |
|---|---|---|
| L1 | 文案、按钮位置、简单样式 | 直接小改 + 当前页面验证 |
| L2 | 绑定错误、空值、路径错误 | 快速修复 + 相关功能验证 |
| L3 | 普通功能异常 | 轻量分析 + 最小修复 |
| L4 | 通信、协议、偶发、性能问题 | 先调查根因,再修复 |
| L5 | 真实设备、数据、发布版本 | 完整风险评估和回归 |
推荐 Prompt
text
请先帮我判断这个上位机问题属于哪个等级,不要一上来就改代码。
问题现象:
期望效果:
是否能复现:
截图/报错/日志:
是否涉及通信、数据保存、协议解析、线程、真实设备:
请输出:
1. 建议等级。
2. 为什么是这个等级。
3. 应该直接修、快速修、轻量分析,还是完整调查。
4. 需要我补充哪些材料。
5. 最小处理路径。典型问题
| 问题 | 常见根因 | 验证重点 |
|---|---|---|
| CRC 错误后一直解析失败 | 错误帧后清空缓存或没有重新找帧头 | 异常帧后继续发送正常帧 |
| 图表运行一段时间卡顿 | 点数无限增长或刷新过频 | 长时间运行和内存趋势 |
| 停止采集后文件被占用 | 没有 Flush/Dispose | 停止后重新开始采集 |
| 断线后按钮状态不对 | 状态机不完整 | 断线、重连、手动断开 |
| 保存失败程序崩溃 | 路径权限和异常未处理 | 无权限路径、磁盘满、路径不存在 |
14. 阶段 10:回归测试与验收
回归不是机械全测
先问三个问题:
- 这次改了什么?
- 可能影响什么?
- 哪些问题开发时不容易触发?
本案例最低回归范围
| 分类 | 验证项 |
|---|---|
| 编译启动 | Release/Debug 能编译,软件能启动 |
| UI | 页面能打开,按钮状态正确,数据刷新正常 |
| 通信 | 串口/TCP 能连接、断开、发送、接收 |
| 协议 | 完整帧、半包、粘包、CRC 错误、噪声字节 |
| 图表 | 曲线刷新,点数有限制,运行一段时间不卡顿 |
| 保存 | CSV/BIN 能创建、写入、关闭,失败有提示 |
| 日志 | UI 日志、文件日志、异常日志可追踪 |
| 配置 | 参数能加载、保存、应用,错误参数有提示 |
| 异常 | 断线、超时、路径无权限、错误帧不崩溃 |
| 长稳 | 连续运行 30 分钟、1 小时或按交付要求测试 |
验收表模板
| 需求编号 | 需求/技术要求 | 验收方法 | 通过标准 | 结果 | 备注 |
|---|---|---|---|---|---|
| R-001 | 软件能连接指定设备 | 连接真实设备或模拟器 | 状态显示在线,日志有连接记录 | 通过 / 不通过 | |
| R-002 | 能显示实时数据 | 发送测试报文 | 界面数值和报文一致 | 通过 / 不通过 | |
| R-003 | 能保存采集数据 | 完成一次采集 | 文件存在,字段完整,可打开 | 通过 / 不通过 | |
| R-004 | 能处理异常帧 | 发送 CRC 错误和半包报文 | 不崩溃,后续正常帧可解析 | 通过 / 不通过 | |
| P-001 | 连续运行稳定 | 连续运行指定时长 | 无崩溃、无明显卡顿、内存可接受 | 通过 / 不通过 |
推荐 Prompt
text
请根据当前上位机项目需求和最近修改内容,生成回归测试和验收清单。
要求:
1. 不要机械列全量清单,请先判断影响范围。
2. 验收项必须和需求功能项、技术要求、性能要求对应。
3. 每个验收项要包含验收方法和通过标准。
4. 标出必须人工确认的项目。
材料:
【粘贴需求方案、修改内容、已完成模块、已知风险】15. 阶段 11:发布交付
交付前必须确认
| 检查项 | 内容 |
|---|---|
| 版本号 | 发布包名称、程序版本、日期 |
| 运行环境 | Windows 版本、.NET 运行时、驱动、权限 |
| 配置文件 | 默认串口、IP、端口、保存路径、日志路径 |
| 数据目录 | 是否自动创建,是否可写 |
| 日志目录 | 是否可写,是否需要清理策略 |
| 回滚方式 | 保留上一版程序和旧配置 |
| 已知风险 | 哪些设备、场景、性能边界未完全验证 |
| 验收记录 | 功能、通信、数据、异常、性能结果 |
交付包建议结构
text
Release/
App/
上位机程序.exe
依赖文件
Config/
默认配置示例
Docs/
使用说明.md
配置说明.md
验收记录.md
已知风险.md
Logs/
空目录或说明发布前 Prompt
text
请作为上位机项目发布检查助手,帮我检查是否可以交付。
当前版本:
已完成功能:
测试记录:
运行环境:
配置文件:
已知风险:
请输出:
1. 是否建议交付:可以 / 有条件可以 / 不建议。
2. 缺失材料。
3. 发布包应包含哪些文件。
4. 现场部署步骤。
5. 回滚方案。
6. 必须人工确认的风险。16. 阶段 12:复盘沉淀
项目交付后不要只停在“完成”。至少记录:
- 哪些需求后来变了。
- 哪些问题是需求没问清导致的。
- 哪些问题是 AI 代码导致的。
- 哪些 Bug 是测试遗漏导致的。
- 哪些 Prompt 最有效。
- 哪些模板应该更新。
复盘 Prompt
text
请你作为 C# WPF/WinForms 上位机 AI 开发复盘助手。
下面是本阶段的需求、修改记录、Bug、测试结果和交付情况。
请帮我整理一次复盘,不要写代码。
材料:
【粘贴需求变化、修改内容、Bug、回归结果、验收结果、现场反馈】
请输出:
1. 本阶段目标和实际完成内容。
2. 需求变化统计。
3. 缺陷来源分类。
4. AI 输出质量问题。
5. 回归失败项。
6. 性能和稳定性指标。
7. 交付后问题。
8. 下次必须调整的流程。
9. 应该更新到哪些文档、Prompt 或 Skill。17. 对原流程的修正建议
结合这个案例,原流程里最需要修正的是:
- 不要把“问题定义”写得过重。目标用户主要关心接到项目后怎么把需求变成软件,不需要完整掌握最终客户的行业业务。
- 需求分析要作为主流程。用户必须说清软件要显示什么、控制什么、保存什么、通信协议是什么、怎么验收。
- 界面设计要跟着需求走。像数据采集软件,Dashboard 同屏显示比多 Tab 更合适。
- 当界面布局已经接近可用时,不要继续让 AI 大改布局。应该锁定布局,只修颜色、字体、状态、交互细节。
- 不要在 Web 端直接要求生成完整 WPF 项目;Web 端更适合做需求、界面、协议和 Codex 指令。
- 进入 Codex 后,第一步应该是读项目结构和建立项目地图,不是继续凭记忆写代码。
- 如果项目已完成 90%,不要重做架构,应该做功能盘点、风险补缺和回归验收。
- 通信、协议、线程、保存、发布这些高风险内容,不能只凭“能跑”判断完成。
- 每次修改必须有影响范围和回归清单。
- 最终交付必须包含配置说明、运行环境、验收记录和回滚方案。
18. 这个案例给用户的实际用法
如果用户是从 0 开始:
- 先做轻量背景确认:知道软件类型、连接设备、使用场景即可,不要卡在行业问题定义上。
- 重点填写
11-上位机项目需求拆解表.md:功能、界面、通信、数据、日志、验收必须说清楚。 - 如果背景确实很模糊,再补读
10-问题定义与用户场景.md,但它不是每个项目的硬门槛。 - 用 Web 端 ChatGPT 整理需求、界面方案、协议说明和 Codex 修改指令。
- 用
12-AI开发质量门.md判断能不能进入技术方案。 - 进入 Codex 后先读项目结构,再分阶段实现。
- 每个阶段结束后用
30-回归测试与验收清单.md做验证。 - 交付后用
31-度量复盘与经验沉淀.md复盘。
如果用户已有 90% 项目:
- 不要重写。
- 让 Codex 先生成项目地图。
- 按模块盘点已完成、未完成和风险项。
- 每次只补一个缺口。
- 优先补通信异常、协议边界、保存释放、图表性能、日志追踪和发布材料。
- 最后按验收清单和发布检查完成交付。
19. 案例边界
这个案例用于学习项目拆解和 AI 协作流程。
- 它展示方法论、流程、检查点和提示词。
- 它不包含原项目源码。
- 它不代表可以直接复制生成所有同类项目。
- 真实项目仍然要结合设备、协议、源码、测试环境和人工审核。
- 涉及真实设备动作、生产数据、客户现场交付时,必须人工确认安全风险。