V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
manbudezhu
V2EX  ›  程序员

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

  •  
  •   manbudezhu · Apr 26 · 1382 views

    在 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 「项目结构」「核心模块设计」「国际化」
    
    sampeng
        1
    sampeng  
       Apr 26 via iPhone
    我现在的办法是 ac 一定是通过 grep ,查找看代码可以验证的。然后起一个干净的 agent 看 ac 是不是都完成了
    darklowly
        2
    darklowly  
       Apr 26
    @sampeng 详细说说看,没太懂
    sampeng
        3
    sampeng  
       Apr 27
    @darklowly 不要用模糊的语句描述功能,而是明确代码的行为。比如有哪些类,走了哪些分支。用 grep 等看代码的方式确认是否实现。如果只是描述一些模糊的行为,模型就会偷懒
    manbudezhu
        4
    manbudezhu  
    OP
       Apr 27
    @sampeng 可以给个样例吗,不是太明白,怎么用 grep 明确代码行为?
    sampeng
        5
    sampeng  
       Apr 27 via iPhone
    @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
        6
    manbudezhu  
    OP
       Apr 28
    @sampeng 厉害👍
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   909 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 21:06 · PVG 05:06 · LAX 14:06 · JFK 17:06
    ♥ Do have faith in what you're doing.