AI编程02:Codex工作流

把Codex当成结对工程师使用,建立从需求分析到代码交付的完整工作流,而不是只让它生成一段代码。

字数 1355 阅读时长 ≈ 4 分钟 2026-7-17 2026-7-27
AI编程02:Codex工作流

把 Codex 当成结对工程师,意味着建立一套完整的协作流程:从需求理解开始,经过设计、实现、测试、审查,直到代码交付。这套流程不是一次性的代码生成,而是持续的人机协作。

需求分析阶段

需求澄清

步骤说明示例
理解目标明确需求的核心目标”实现用户注册功能”
定义边界明确功能范围和约束”只实现基本注册,不包含邮箱验证”
识别依赖识别需要的依赖和资源”需要 UserRepository、AuthService”
确认验收明确验收标准”注册成功返回用户ID和Token”

需求分析示例

原始需求:实现用户注册

分析过程:
1. 目标:创建新用户并返回认证信息
2. 边界:
   - 用户名唯一
   - 密码至少6位
   - 邮箱格式正确
3. 依赖:
   - User 实体类
   - UserRepository
   - BCryptPasswordEncoder
   - JwtUtil
4. 验收:
   - HTTP 201 Created
   - 返回 UserResponse DTO
   - 密码加密存储

与 Codex 协作

用户:帮我分析这个需求

Codex:好的,请提供需求描述

用户:实现用户注册功能

Codex:让我帮你分析这个需求:
- 核心目标:创建新用户账户
- 需要的功能:
  1. 用户信息验证(用户名、密码、邮箱)
  2. 密码加密存储
  3. 用户数据持久化
  4. 返回认证Token
- 技术依赖:
  - Spring Boot、JPA、BCrypt、JWT
- 验收标准:
  - 用户名重复返回错误
  - 密码强度验证
  - 邮箱格式验证
  - 注册成功返回Token

用户:补充一下,密码需要至少8位,包含大小写字母和数字

Codex:好的,已更新密码验证规则

设计阶段

技术方案设计

设计维度内容示例
数据模型实体类设计User 实体:id, username, password, email
API 设计接口定义POST /api/auth/register
业务流程核心流程验证 → 加密 → 保存 → 生成Token
异常处理错误场景用户名重复、密码不符合要求
安全设计安全措施密码加密、输入验证

设计文档示例

用户注册功能设计

1. 数据模型
   - User: id(Long), username(String), password(String), email(String), created_at(LocalDateTime)

2. API 设计
   - POST /api/auth/register
   - 请求体:{ "username": "string", "password": "string", "email": "string" }
   - 成功响应:{ "id": 1, "username": "user", "email": "user@example.com", "token": "..." }
   - 失败响应:{ "code": 400, "message": "用户名已存在" }

3. 业务流程
   1. 接收注册请求
   2. 验证用户名是否已存在
   3. 验证密码强度
   4. 验证邮箱格式
   5. 使用 BCrypt 加密密码
   6. 保存用户到数据库
   7. 生成 JWT Token
   8. 返回用户信息和Token

4. 异常处理
   - 用户名重复:HTTP 409 Conflict
   - 密码不符合要求:HTTP 400 Bad Request
   - 邮箱格式错误:HTTP 400 Bad Request

与 Codex 协作

用户:帮我设计用户注册功能

Codex:好的,请提供现有代码结构

用户:[粘贴现有实体类和配置]

Codex:这是设计方案...

用户:密码验证规则需要更严格,至少10位,包含特殊字符

Codex:已更新密码验证规则:
- 至少10位
- 包含大小写字母
- 包含数字
- 包含特殊字符(@#$%^&*)

用户:请生成完整的设计文档

Codex:好的,这是完整的设计文档...

实现阶段

代码实现流程

步骤说明示例
实体类实现数据模型User.java
Repository实现数据访问UserRepository.java
Service实现业务逻辑AuthService.java
Controller实现 API 接口AuthController.java
DTO实现数据传输对象RegisterRequest.java, UserResponse.java
配置添加必要配置SecurityConfig.java

实现示例

用户:帮我实现用户注册功能的 Service 层

Codex:好的,请提供相关代码

用户:[粘贴 User.java, UserRepository.java]

Codex:这是 AuthService.java 的实现:

@Service
public class AuthService {
    private final UserRepository userRepository;
    private final BCryptPasswordEncoder passwordEncoder;
    private final JwtUtil jwtUtil;

    public AuthService(UserRepository userRepository, 
                       BCryptPasswordEncoder passwordEncoder,
                       JwtUtil jwtUtil) {
        this.userRepository = userRepository;
        this.passwordEncoder = passwordEncoder;
        this.jwtUtil = jwtUtil;
    }

    public UserResponse register(RegisterRequest request) {
        // 验证用户名是否已存在
        if (userRepository.existsByUsername(request.getUsername())) {
            throw new UsernameAlreadyExistsException();
        }
        
        // 创建用户
        User user = new User();
        user.setUsername(request.getUsername());
        user.setPassword(passwordEncoder.encode(request.getPassword()));
        user.setEmail(request.getEmail());
        
        // 保存用户
        User savedUser = userRepository.save(user);
        
        // 生成 Token
        String token = jwtUtil.generateToken(savedUser.getId(), savedUser.getUsername());
        
        return UserResponse.fromEntity(savedUser, token);
    }
}

用户:帮我实现 Controller 层

Codex:好的,这是 AuthController.java...

代码审查

审查维度检查内容示例
代码质量可读性、可维护性变量命名、方法拆分
逻辑正确性业务逻辑是否正确验证逻辑、异常处理
安全性是否存在安全隐患SQL 注入、密码明文存储
性能是否存在性能问题N+1 查询、重复计算
规范是否符合编码规范代码格式、注释

测试阶段

测试用例设计

测试类型测试场景示例
单元测试单个方法的测试AuthService.register()
集成测试多个模块的交互Controller + Service + Repository
边界测试边界条件测试空用户名、最小密码长度
异常测试异常场景测试用户名重复、密码不符合要求

测试代码示例

用户:帮我为用户注册功能生成单元测试

Codex:好的,请提供相关代码

用户:[粘贴 AuthService.java]

Codex:这是 AuthServiceTest.java:

@SpringBootTest
class AuthServiceTest {
    @Autowired
    private AuthService authService;
    
    @Autowired
    private UserRepository userRepository;
    
    @AfterEach
    void tearDown() {
        userRepository.deleteAll();
    }
    
    @Test
    void register_Success() {
        RegisterRequest request = new RegisterRequest();
        request.setUsername("testuser");
        request.setPassword("Password123!");
        request.setEmail("test@example.com");
        
        UserResponse response = authService.register(request);
        
        assertNotNull(response.getId());
        assertEquals("testuser", response.getUsername());
        assertNotNull(response.getToken());
        
        User savedUser = userRepository.findByUsername("testuser").orElse(null);
        assertNotNull(savedUser);
        assertTrue(passwordEncoder.matches("Password123!", savedUser.getPassword()));
    }
    
    @Test
    void register_UsernameExists() {
        // 先创建一个用户
        User existingUser = new User();
        existingUser.setUsername("testuser");
        existingUser.setPassword("encodedPassword");
        userRepository.save(existingUser);
        
        RegisterRequest request = new RegisterRequest();
        request.setUsername("testuser");
        request.setPassword("Password123!");
        request.setEmail("test@example.com");
        
        assertThrows(UsernameAlreadyExistsException.class, 
            () -> authService.register(request));
    }
}

测试执行流程

1. 编写测试用例
2. 运行单元测试
3. 检查测试结果
4. 修复失败的测试
5. 运行集成测试
6. 检查集成测试结果
7. 修复集成测试问题
8. 运行完整测试套件

交付阶段

代码提交

步骤说明示例
代码审查人工审查代码Code Review
测试验证运行完整测试套件mvn test
代码格式化格式化代码mvn formatter:format
提交代码提交到版本控制git commit
代码推送推送到远程仓库git push

提交信息规范

类型说明示例
feat新功能feat: 实现用户注册功能
fix修复 bugfix: 修复密码验证逻辑
refactor代码重构refactor: 重构 AuthService
test添加测试test: 添加用户注册单元测试
docs更新文档docs: 更新API文档

Codex 工作流最佳实践

完整工作流示例

1. 需求分析
   - 与产品经理确认需求
   - 使用 Codex 辅助分析需求边界
   - 明确验收标准

2. 设计阶段
   - 设计数据模型和 API
   - 使用 Codex 生成设计文档
   - 与团队评审设计方案

3. 实现阶段
   - 使用 Codex 生成代码框架
   - 逐步实现各个模块
   - 使用 Codex 辅助代码审查

4. 测试阶段
   - 使用 Codex 生成测试用例
   - 运行测试并修复问题
   - 使用 Codex 辅助调试

5. 交付阶段
   - 代码审查和测试验证
   - 提交并推送代码
   - 更新文档

高效协作技巧

技巧说明示例
保持上下文在整个工作流中保持对话使用聊天模式持续协作
逐步推进每个阶段完成后再进入下一个阶段设计确认后再实现
及时反馈发现问题及时反馈给 Codex”这里逻辑有问题,请修改”
人工审查关键逻辑需要人工确认安全相关代码必须人工审查
文档驱动先写文档再写代码先设计 API 文档

团队协作

角色职责Codex 辅助
产品经理定义需求需求分析、验收标准
架构师技术方案设计生成设计文档、技术选型
开发工程师代码实现生成代码、测试、重构
测试工程师测试用例设计生成测试代码、边界测试
运维工程师部署和运维生成部署脚本、配置文件

常见问题与解决方案

问题1:需求理解偏差

表现:实现的功能与需求不符

解决方案

  • 需求分析阶段充分沟通
  • 使用 Codex 辅助需求澄清
  • 先写设计文档再实现
  • 定期与产品经理确认

问题2:技术方案不合理

表现:设计的方案存在性能或安全问题

解决方案

  • 设计阶段进行技术评审
  • 使用 Codex 评估不同方案
  • 参考最佳实践
  • 考虑扩展性和可维护性

问题3:代码质量不高

表现:生成的代码难以维护

解决方案

  • 指定编码规范
  • 使用静态分析工具
  • 人工审查代码
  • 使用 Codex 辅助重构

问题4:测试覆盖不全

表现:存在未测试的代码路径

解决方案

  • 使用 Codex 生成测试用例
  • 设计边界测试和异常测试
  • 运行代码覆盖率工具
  • 补充缺失的测试

问题5:交付延迟

表现:项目进度落后

解决方案

  • 合理拆分任务
  • 优先实现核心功能
  • 使用 Codex 提高效率
  • 及时沟通进度问题

项目判断清单

  • 需要快速迭代 → 使用 Codex 辅助实现
  • 需求不明确 → 先用 Codex 辅助需求分析
  • 技术方案不确定 → 使用 Codex 评估多种方案
  • 代码质量需要提升 → 使用 Codex 辅助重构
  • 测试覆盖不足 → 使用 Codex 生成测试用例
  • 需要编写文档 → 使用 Codex 辅助文档编写
  • 团队协作困难 → 使用 Codex 作为沟通桥梁
  • 交付压力大 → 使用 Codex 提高开发效率