datai/docs/archive/retros/2026-01-28-013-1-retro.md

222 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Apex 编译器接口与错误处理 - 复盘文档
## 元数据
- 需求编号013-1
- 创建时间2026-01-28
- 创建人AI Assistant
- 状态:已完成
## 复盘概述
本次复盘对 Apex 编译器接口与错误处理功能的开发过程进行了全面回顾,从需求定义到变更记录的每个阶段都进行了分析,总结了成功经验、改进点、问题分析和行动计划,旨在提高后续开发过程的效率和质量。
## 目标与实际产出对比
### 目标
1. 实现统一错误模型,创建 ApexCompileIssue 类映射 Salesforce SOAP API 的 CompileIssue
2. 实现编译器结果封装,创建 CompileResult 类封装编译结果
3. 实现 WSDL 转 Apex 结果封装,创建 WsdlToApexResult 类封装 WSDL 转换结果
4. 实现异常体系,创建 ApexException 及其子类
5. 实现服务接口,创建 ApexCompilerService 和 WsdlConverterService 接口
6. 遵循 SSOT 流程,确保所有开发活动都有文档依据
7. 生成符合项目规范的代码,包含单元测试
### 实际产出
1. 成功实现了统一错误模型,创建了 ApexCompileIssue 类
2. 成功实现了编译器结果封装,创建了 CompileResult 类
3. 成功实现了 WSDL 转 Apex 结果封装,创建了 WsdlToApexResult 类
4. 成功实现了异常体系,创建了 ApexException 及其子类ApexCompilationException、ApexRuntimeException、ApexConnectionException
5. 成功实现了服务接口,创建了 ApexCompilerService 和 WsdlConverterService 接口
6. 成功实现了服务实现,创建了 ApexCompilerServiceImpl 和 WsdlConverterServiceImpl
7. 成功实现了单元测试,创建了 ApexCompilerServiceTest 和 WsdlConverterServiceTest
8. 严格按照 SSOT 流程执行,每个阶段都有相应的文档
9. 生成的代码符合项目规范,包含单元测试
10. 完整记录了会话过程,包括对话记录、生成的文档和代码、关键决策等
## 成功经验
### 1. SSOT 流程的严格执行
从需求定义到变更记录的每个阶段都严格按照项目规则执行,确保了所有开发活动都有文档依据,提高了代码的可追溯性和可维护性。每个阶段完成后都会向用户确认,确保用户对进度和方向的理解一致。
### 2. 详细的提示词设计
阶段 5 生成的提示词包含了详细的输出格式要求、代码规范要求和测试要求,确保了生成的代码符合项目规范和需求。提示词引用了真源(需求文档、设计文档、决策记录),确保了代码生成的准确性。
### 3. 完整的会话记录
阶段 7 记录了完整的会话过程,包括对话记录、生成的文档和代码、关键决策等,确保了会话的可追溯性和完整性。会话记录包含了每个阶段的执行状态、关键决策和生成的文档链接,便于后续查阅。
### 4. 基于真实源代码的需求优化
在阶段 1通过读取 Salesforce SOAP API 的真实源代码CompileClassResult.java、CompileTriggerResult.java 等),优化了需求文档,确保了需求的准确性和可行性。这种基于真实源代码的需求优化方法,避免了需求与实际 API 不匹配的问题。
### 5. 灵活的阶段跳过机制
在阶段 4通过分析需求确认不涉及数据库变更灵活地跳过了数据库结构生成阶段直接进入提示词生成阶段。这种灵活的阶段跳过机制提高了开发效率避免了不必要的文档创建。
## 改进点
### 1. 阶段间的过渡可以更流畅
在阶段转换时,可以更主动地向用户解释下一阶段的目的和流程,提高用户的理解和参与度。例如,在进入阶段 6代码生成可以更详细地说明将要生成的代码文件、代码结构、测试策略等。
### 2. 代码生成前的验证可以更严格
在生成代码前,可以增加对设计文档和决策记录的再次验证,确保代码生成的准确性。例如,可以检查设计文档中的接口定义是否与需求文档中的功能需求一致,决策记录中的技术选型是否与实际代码实现一致。
### 3. API 文档的自动生成可以考虑
可以探索使用 Swagger 等工具自动生成 API 文档,提高文档的准确性和维护性。目前 API 文档是手动编写的,容易出现遗漏或不准确的情况。
### 4. 单元测试的覆盖率验证
在代码生成完成后,可以增加单元测试覆盖率的验证步骤,确保测试用例的完整性。目前虽然生成了单元测试,但没有验证测试覆盖率是否达到要求。
### 5. 代码生成的批量验证
在代码生成完成后,可以增加批量验证步骤,检查所有生成的代码文件是否符合项目规范,包括命名规范、注释规范、导入规范等。目前虽然提示词中包含了代码规范要求,但没有批量验证步骤。
## 问题分析
本次需求执行过程中未发现重大问题,整体执行顺利。所有阶段都按时完成,生成的代码符合项目规范和需求,文档完整准确。
### 无重大问题
- 需求定义清晰准确,基于真实源代码优化
- 设计方案合理,技术选型正确
- 代码生成符合规范,包含单元测试
- 文档完整准确,索引更新及时
- 会话记录完整,可追溯性强
## 行动计划
### 针对改进点 1阶段间的过渡可以更流畅
- **行动**:在阶段转换时,增加对下一阶段的目的和流程的详细解释
- **责任人**AI Assistant
- **时间**:立即执行
- **具体措施**
- 在进入阶段 6代码生成详细说明将要生成的代码文件、代码结构、测试策略等
- 在进入阶段 7会话记录详细说明会话记录的内容和作用
- 在进入阶段 8变更记录与归档详细说明变更记录的内容和作用
- 在进入阶段 9闭环复盘和接口文档详细说明复盘文档和 API 文档的内容和作用
### 针对改进点 2代码生成前的验证可以更严格
- **行动**:在生成代码前,增加对设计文档和决策记录的再次验证
- **责任人**AI Assistant
- **时间**:立即执行
- **具体措施**
- 检查设计文档中的接口定义是否与需求文档中的功能需求一致
- 检查决策记录中的技术选型是否与实际代码实现一致
- 检查设计文档中的数据模型是否与需求文档中的数据模型一致
- 检查设计文档中的异常处理是否与需求文档中的异常处理一致
### 针对改进点 3API 文档的自动生成可以考虑
- **行动**:探索使用 Swagger 等工具自动生成 API 文档
- **责任人**:项目团队
- **时间**:下一个迭代
- **具体措施**
- 调研 Swagger 等工具的集成方案
- 评估自动生成 API 文档的可行性和成本
- 制定 API 文档自动生成的实施方案
- 在下一个需求中试点 API 文档自动生成
### 针对改进点 4单元测试的覆盖率验证
- **行动**:在代码生成完成后,增加单元测试覆盖率的验证步骤
- **责任人**AI Assistant
- **时间**:立即执行
- **具体措施**
- 在代码生成完成后,运行单元测试
- 使用 JaCoCo 等工具生成测试覆盖率报告
- 验证测试覆盖率是否达到 80% 的要求
- 如果测试覆盖率不达标,补充测试用例
### 针对改进点 5代码生成的批量验证
- **行动**:在代码生成完成后,增加批量验证步骤
- **责任人**AI Assistant
- **时间**:立即执行
- **具体措施**
- 检查所有生成的代码文件是否符合命名规范
- 检查所有生成的代码文件是否包含必要的注释
- 检查所有生成的代码文件的导入语句是否规范
- 检查所有生成的代码文件的异常处理是否符合规范
## 提取模式
### 有效的 Prompt 技巧
#### 1. 具体的输出格式要求
在提示词中明确指定需要生成的文件、路径、格式等,可以提高生成代码的准确性和规范性。例如:
```
## 输出格式要求
### 模型层
- 文件路径:`datai-salesforce-apex/src/main/java/com/datai/apex/model/`
- 文件格式Java 类文件
- 必须使用 Lombok 注解(@Data、@NoArgsConstructor、@AllArgsConstructor
- 必须实现 Serializable 接口
```
#### 2. 引用真源
在提示词开头引用需求文档和设计文档的链接,可以确保生成的代码符合需求和设计要求。例如:
```
## 引用真源
- 需求文档:[REQ-013-1.md](../requirements/REQ-013-1.md)
- 设计文档:[2026-01-28-013-1-Apex编译器接口设计.md](../design/2026-01-28-013-1-Apex编译器接口设计.md)
- 决策记录:[2026-01-28-013-1-ADR-Apex编译器接口技术选型.md](../decisions/2026-01-28-013-1-ADR-Apex编译器接口技术选型.md)
```
#### 3. 详细的代码规范要求
在提示词中明确指定代码规范、命名规范、注释规范等,可以提高生成代码的质量和可读性。例如:
```
## 代码规范要求
### 命名规范
- 类名使用大驼峰命名法PascalCase
- 方法名使用小驼峰命名法camelCase
- 变量名使用小驼峰命名法camelCase
- 常量名使用全大写字母和下划线UPPER_SNAKE_CASE
### 注释规范
- 类注释:使用 Javadoc 格式,包含类的功能描述、作者、版本等信息
- 方法注释:使用 Javadoc 格式,包含方法的功能描述、参数说明、返回值说明、异常说明等
- 字段注释:使用 Javadoc 格式,包含字段的说明
```
### 避免的坑
#### 1. 不要使用模糊的描述
在提示词中使用模糊的描述(如"请生成高质量的代码"),会导致生成的代码不符合预期。应该使用具体的描述,如"请生成符合 Spring Boot 规范的代码,使用 @Service 注解,包含单元测试"。
#### 2. 不要忽略测试要求
在提示词中忽略测试要求,会导致生成的代码缺少单元测试,降低代码的质量和可靠性。应该在提示词中明确指定测试要求,如"每个服务实现类都需要包含单元测试,测试覆盖率不低于 80%"。
#### 3. 不要违反项目规则
在代码生成过程中违反项目规则(如不遵循若依框架规范),会导致生成的代码不符合项目要求,需要重新生成。应该在提示词中明确指定项目规则,如"遵循若依框架规范,使用 @RestController、@RequestMapping、@GetMapping 等注解"。
## 模板迭代
经过本次复盘,发现当前的提示词模板(`docs/Prompt/0000-template.md`)在以下方面可以改进:
### 需要改进的方面
1. **代码规范要求可以更具体**:特别是针对 Spring Boot 框架和 Lombok 框架的规范要求
2. **测试要求可以更详细**:特别是测试覆盖率、测试场景、测试框架等方面的要求
3. **验证步骤可以更明确**:特别是代码生成后的验证步骤,如批量验证、覆盖率验证等
### 模板更新计划
在下一个迭代中更新提示词模板,增加以下内容:
1. **Spring Boot 框架规范要求**
- 包结构规范
- 注解使用规范
- 配置文件规范
- 依赖注入规范
2. **Lombok 框架规范要求**
- 注解使用规范(@Data、@Getter、@Setter、@NoArgsConstructor、@AllArgsConstructor 等)
- 序列化规范(@Builder、@ToString、@EqualsAndHashCode 等)
3. **测试要求详细化**
- 测试覆盖率要求(不低于 80%
- 测试场景要求(正常场景、异常场景、边界场景)
- 测试框架要求JUnit 5、Mockito、AssertJ
- 测试用例命名规范should_ExpectedBehavior_When_StateUnderTest
4. **验证步骤明确化**
- 批量验证步骤(命名规范、注释规范、导入规范、异常处理规范)
- 覆盖率验证步骤(使用 JaCoCo 生成测试覆盖率报告)
- 集成测试步骤(验证服务间的协作)
## 相关文档
- [需求文档](../requirements/REQ-013-1.md)
- [设计文档](../design/2026-01-28-013-1-Apex编译器接口设计.md)
- [决策记录](../decisions/2026-01-28-013-1-ADR-Apex编译器接口技术选型.md)
- [提示词文档](../prompts/2026-01-28-013-1-prompt-Apex编译器接口与错误处理.md)
- [变更日志](../changelog/2026-01-28-013-1-changelog.md)
- [会话记录](../sessions/2026-01-28-013-1-session.md)