ai 编码业务功能验收的正确流程

4 月 26 日
 manbudezhu

在 AI 实现自动化编程时,任务编写完成后,工程质量检查( lint 、类型检查、单元测试)都正常通过。但是在业务功能验收时,存在业务功能验收通过了,但是实际功能并没有实现的问题,例如:数据根本就没有正确显示。请教各位大神,如何更好的做 AI 自动化的业务功能验收。

需求文档模版:

# 需求文档
## 介绍
需求描述
## 需求
### 需求 REQ-001 - 用户登录  
用户故事:用户故事内容 
#### 验收标准  
- id: REQ-001-AC-001  
ears: 采用 EARS 描述的子句 While <可选前置条件>, when <可选触发器>, the <系统名称> shall <系统响应>,
- id: REQ-001-AC-002  
ears: 采用 EARS 描述的子句 While <可选前置条件>, when <可选触发器>, the <系统名称> shall <系统响应>,

任务 task 模版:

# 实施计划
执行时需严格遵循 `docs/spec/requirements.md` 中对应需求和验收标准。每项任务通过引用相关需求编号。
## TASK-001 用户登录功能  - [ ]
- 关联需求:  
- REQ-001  
- 关联验收:  
- REQ-001-AC-001  
- REQ-001-AC-002  
- REQ-001-AC-003  
### 实施内容  
1. 创建登录表单  
2. 实现登录 API 调用  
3. 处理 loading 状态  
4. 处理错误提示  
5. 登录成功后跳转 dashboard  
### 测试要求  
- 单元测试:  
- 表单校验  
- 登录成功  
- 登录失败  
- E2E 测试:  
- 用户可完成登录流程  
- 错误密码显示提示  
- loading 状态防止重复提交
### 规范对齐:constitution.md 「 UI/UX 一致性」「工程化规范」; design.md 「项目结构」「核心模块设计」「国际化」
2058 次点击
所在节点    程序员
6 条回复
sampeng
4 月 26 日
我现在的办法是 ac 一定是通过 grep ,查找看代码可以验证的。然后起一个干净的 agent 看 ac 是不是都完成了
darklowly
4 月 26 日
@sampeng 详细说说看,没太懂
sampeng
4 月 27 日
@darklowly 不要用模糊的语句描述功能,而是明确代码的行为。比如有哪些类,走了哪些分支。用 grep 等看代码的方式确认是否实现。如果只是描述一些模糊的行为,模型就会偷懒
manbudezhu
4 月 27 日
@sampeng 可以给个样例吗,不是太明白,怎么用 grep 明确代码行为?
sampeng
4 月 27 日
@manbudezhu

搭骨架的时候一个例子

[ ] `settings.gradle.kts` include `:app`, `:core`, `:feature:auth`
- [ ] `gradle/libs.versions.toml` 包含 kotlin, coroutines, hilt, retrofit, okhttp, kotlinx-serialization, timber, coil, voyager, detekt, mockk, turbine, junit5
- [ ] 根 `build.gradle.kts` 声明 kotlin-serialization 插件 `apply false`
- [ ] 根 `subprojects {}` 统一 apply detekt + 配置 Android Lint
- [ ] `config/detekt/detekt.yml` 存在
- [ ] `:core` 的 `AppConfig` 是 `@Singleton`,`NetworkModule` 注入 `AppConfig` 而非硬编码配置值
- [ ] `:core` 的 `AppLogger` object 封装 Timber
- [ ] `:core` 的 `NetworkModule` 是 `@Module @InstallIn(SingletonComponent::class)`
- [ ] `:core` 的 `AppTab` interface 存在
- [ ] `:core` 的 `AppTheme` composable 使用 `MaterialTheme`
- [ ] `StreamingApp.kt` 标注 `@HiltAndroidApp`
- [ ] `MainActivity.kt` 标注 `@AndroidEntryPoint`,含 Voyager `Navigator`
- [ ] `AndroidManifest.xml` 含 `INTERNET` 权限、`android:exported="true"` + MAIN/LAUNCHER
- [ ] `:feature:auth` 的 `LoginScreen` 含邮箱+密码输入框+登录按钮
- [ ] `:feature:auth` 的 `build.gradle.kts` 不依赖任何 `:feature:*`
- [ ] `LoginViewModelTest.kt` 使用 JUnit 5 + Turbine
- [ ] `./gradlew assembleDebug` 通过
- [ ] `./gradlew detekt` 通过
manbudezhu
4 月 28 日
@sampeng 厉害👍

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1208595

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX