datai/docs/archive/skill/0011-verification-commit.md

584 lines
13 KiB
Markdown
Raw Normal View History

---
name: 0011-verification-commit
description: 测试与版本提交,运行测试并执行 Git 提交
---
# 技能:测试与版本提交 (Verification & Git Commit)
## 元数据 (Metadata)
- **name**: verification-commit
- **description**: 测试与版本提交,运行测试并执行 Git 提交
- **version**: 1.0.0
- **author**: SSOT Architect
- **lastUpdated**: 2026-01-15
## 触发与定位 (Triggers & Scope)
### 触发条件 (Triggers)
当以下情况发生时AI 应当"觉醒"本技能:
1. **代码变更完成**: 完成代码编写和变更记录后,需要测试和提交
2. **功能开发完成**: 功能开发完成,需要测试和提交
3. **Bug 修复完成**: Bug 修复完成,需要测试和提交
4. **代码重构完成**: 代码重构完成,需要测试和提交
5. **工作流阶段 8**: 用户进入工作流的"测试与版本提交"阶段
### 定位范围 (Scope)
- **适用模块**: 所有 Datai 项目模块
- **影响操作**: 测试运行、Git 提交
- **相关技能**: skill-retrospective, skill-define-requirements
## 核心指令集 (Instructions)
### 架构约束 (Architecture Constraints)
1. **测试要求**:
- 确保代码通过所有单元测试
- 满足阶段 1 定义的验收标准AC
- 确保代码质量符合项目规范
2. **提交原子性**:
- 确保本次提交仅包含当前任务的变更
- 不包含无关的代码变更
- 不包含调试代码或临时文件
3. **文档同源**:
- 提交必须包含代码变更
- 提交必须包含上述步骤产生的所有文档变更Requirements, ADR, Prompts, Session Logs, Retros
4. **Commit Message 规范**:
```
<type>(<scope>): <subject>
- Implements: [需求链接/ID]
- Decision: [ADR 链接/ID]
- Context: Based on session [Session Log ID]
```
### 业务逻辑 SOP (Business Logic SOP)
#### 步骤 1: 运行测试
```markdown
## 运行测试
### 单元测试
```bash
# 运行所有单元测试
mvn test
# 运行特定测试类
mvn test -Dtest=ClassName
# 运行特定测试方法
mvn test -Dtest=ClassName#methodName
```
### 集成测试
```bash
# 运行集成测试
mvn verify
# 运行特定集成测试
mvn verify -Dit.test=ClassName
```
### 测试覆盖率
```bash
# 生成测试覆盖率报告
mvn jacoco:report
# 查看覆盖率报告
open target/site/jacoco/index.html
```
### 验收标准验证
| 验收标准 | 测试方法 | 结果 | 状态 |
|----------|----------|------|------|
| [AC1] | [测试方法] | [测试结果] | [通过/失败] |
| [AC2] | [测试方法] | [测试结果] | [通过/失败] |
| [AC3] | [测试方法] | [测试结果] | [通过/失败] |
```
#### 步骤 2: 代码质量检查
```markdown
## 代码质量检查
### 静态代码分析
```bash
# 运行 Checkstyle
mvn checkstyle:check
# 运行 SpotBugs
mvn spotbugs:check
# 运行 PMD
mvn pmd:check
```
### 代码格式检查
```bash
# 检查代码格式
mvn spotless:check
# 自动格式化代码
mvn spotless:apply
```
### 代码规范检查
- [ ] 命名规范
- [ ] 注释规范
- [ ] 异常处理规范
- [ ] 日志记录规范
- [ ] 安全规范
### 代码审查清单
- [ ] 代码逻辑正确
- [ ] 没有硬编码
- [ ] 没有重复代码
- [ ] 没有未使用的代码
- [ ] 没有安全隐患
- [ ] 性能合理
- [ ] 可维护性好
```
#### 步骤 3: 检查变更文件
```markdown
## 检查变更文件
### 查看变更
```bash
# 查看工作区变更
git status
# 查看暂存区变更
git diff --cached
# 查看未暂存变更
git diff
```
### 变更文件清单
| 文件 | 变更类型 | 说明 |
|------|----------|------|
| [文件1] | [新增/修改/删除] | [说明] |
| [文件2] | [新增/修改/删除] | [说明] |
### 代码变更
- [ ] 仅包含当前任务的代码变更
- [ ] 不包含无关的代码变更
- [ ] 不包含调试代码
- [ ] 不包含临时文件
### 文档变更
- [ ] 需求文档已更新
- [ ] ADR 文档已更新
- [ ] Prompt 文档已更新
- [ ] Session Log 已更新
- [ ] Retro 文档已更新
- [ ] CHANGELOG 已更新
- [ ] docs/index.md 已更新
```
#### 步骤 4: 暂存变更文件
```markdown
## 暂存变更文件
### 暂存代码变更
```bash
# 暂存所有变更
git add .
# 暂存特定文件
git add path/to/file1.java
git add path/to/file2.java
# 暂存特定目录
git add path/to/directory/
```
### 暂存文档变更
```bash
# 暂存需求文档
git add docs/requirements/REQ-XXX.md
# 暂存 ADR 文档
git add docs/decisions/adr/ADR-XXX.md
# 暂存 Prompt 文档
git add docs/prompts/PROMPT-XXX.md
# 暂存 Session Log
git add docs/sessions/YYYYMMDD-TaskName.md
# 暂存 Retro 文档
git add docs/retros/YYYYMMDD-Review.md
# 暂存 CHANGELOG
git add CHANGELOG.md
# 暂存 docs/index.md
git add docs/index.md
```
### 验证暂存
```bash
# 查看暂存区变更
git diff --cached
# 确认暂存内容正确
```
```
#### 步骤 5: 编写 Commit Message
```markdown
## 编写 Commit Message
### Commit Message 格式
```
<type>(<scope>): <subject>
<body>
<footer>
```
### Type 说明
- **feat**: 新功能
- **fix**: 修复 Bug
- **docs**: 文档更新
- **style**: 代码格式(不影响代码运行的变动)
- **refactor**: 重构(既不是新增功能,也不是修改 Bug 的代码变动)
- **perf**: 性能优化
- **test**: 测试相关
- **chore**: 构建/工具相关
- **revert**: 回滚
### Subject 说明
- 使用祈使句,现在时态
- 首字母小写
- 结尾不加句号
- 限制在 50 个字符以内
### Body 说明
- 使用祈使句,现在时态
- 应该包括修改的动机和与之前行为的对比
- 每行限制在 72 个字符以内
### Footer 说明
- 关联 Issue
- 关联需求
- 关联 ADR
- 关联 Session Log
### Commit Message 示例
```
feat(integration): 新增用户批量导入功能
- Implements: REQ-001
- Decision: ADR-001
- Context: Based on session 20260115-TaskName
新增用户批量导入功能,支持 CSV 格式导入,
单次最多导入 1000 条记录,提供详细的错误信息。
主要变更:
- 新增 UserImportService 接口和实现类
- 新增 UserImportController 控制器
- 新增 CSV 文件解析工具类
- 新增导入错误日志记录
- 更新相关文档REQ-001, ADR-001, Session Log
Closes #123
```
```
#### 步骤 6: 执行 Git 提交
```markdown
## 执行 Git 提交
### 提交变更
```bash
# 使用 -m 参数提交
git commit -m "feat(integration): 新增用户批量导入功能
- Implements: REQ-001
- Decision: ADR-001
- Context: Based on session 20260115-TaskName
新增用户批量导入功能,支持 CSV 格式导入,
单次最多导入 1000 条记录,提供详细的错误信息。"
# 使用编辑器提交
git commit
```
### 验证提交
```bash
# 查看提交历史
git log --oneline -n 5
# 查看提交详情
git show HEAD
# 确认提交内容正确
```
### 推送到远程仓库
```bash
# 推送到当前分支
git push
# 推送到指定分支
git push origin feature/branch-name
# 推送到所有分支
git push --all
```
```
#### 步骤 7: 创建测试与提交记录
```markdown
---
name: VERIFICATION-20260115
description: 测试与提交记录
---
# 测试与提交记录: [任务名称]
## 元数据 (Metadata)
- **Date**: 2026-01-15
- **Task**: [任务名称]
- **Related Requirements**: [REQ-XXX](../requirements/REQ-XXX.md)
- **Related Session**: [20260115-TaskName](../sessions/20260115-TaskName.md)
- **Commit Hash**: [Commit Hash]
## 测试结果
### 单元测试
```bash
# 测试命令
mvn test
# 测试结果
Tests run: 100, Failures: 0, Errors: 0, Skipped: 0
```
### 集成测试
```bash
# 测试命令
mvn verify
# 测试结果
Tests run: 50, Failures: 0, Errors: 0, Skipped: 0
```
### 测试覆盖率
```bash
# 覆盖率命令
mvn jacoco:report
# 覆盖率结果
- 指令覆盖率: 85%
- 分支覆盖率: 80%
- 行覆盖率: 85%
- 方法覆盖率: 90%
- 类覆盖率: 95%
```
### 验收标准验证
| 验收标准 | 测试方法 | 结果 | 状态 |
|----------|----------|------|------|
| [AC1] | [测试方法] | [测试结果] | [通过/失败] |
| [AC2] | [测试方法] | [测试结果] | [通过/失败] |
| [AC3] | [测试方法] | [测试结果] | [通过/失败] |
## 代码质量检查
### 静态代码分析
```bash
# Checkstyle
mvn checkstyle:check
结果: 通过
# SpotBugs
mvn spotbugs:check
结果: 通过
# PMD
mvn pmd:check
结果: 通过
```
### 代码格式检查
```bash
# Spotless
mvn spotless:check
结果: 通过
```
### 代码规范检查
- [x] 命名规范
- [x] 注释规范
- [x] 异常处理规范
- [x] 日志记录规范
- [x] 安全规范
## 变更文件清单
### 代码变更
| 文件 | 变更类型 | 说明 |
|------|----------|------|
| [文件1](../../path/to/file1.java) | [新增/修改/删除] | [说明] |
| [文件2](../../path/to/file2.java) | [新增/修改/删除] | [说明] |
### 文档变更
| 文件 | 变更类型 | 说明 |
|------|----------|------|
| [REQ-XXX](../requirements/REQ-XXX.md) | [新增/修改/删除] | [说明] |
| [ADR-XXX](../decisions/adr/ADR-XXX.md) | [新增/修改/删除] | [说明] |
| [PROMPT-XXX](../prompts/PROMPT-XXX.md) | [新增/修改/删除] | [说明] |
| [Session Log](../sessions/YYYYMMDD-TaskName.md) | [新增/修改/删除] | [说明] |
| [Retro](../retros/YYYYMMDD-Review.md) | [新增/修改/删除] | [说明] |
| [CHANGELOG](../../CHANGELOG.md) | [修改] | [说明] |
| [docs/index.md](../index.md) | [修改] | [说明] |
## Git 提交
### Commit Message
```
[Commit Message]
```
### Commit Hash
[Commit Hash: abc123def456]
### 提交验证
- [x] 仅包含当前任务的变更
- [x] 包含所有文档变更
- [x] Commit Message 符合规范
- [x] 已推送到远程仓库
## 相关文档 (Related Documents)
- [需求文档](../requirements/REQ-XXX.md)
- [ADR 文档](../decisions/adr/ADR-XXX.md)
- [会话记录](../sessions/YYYYMMDD-TaskName.md)
- [复盘文档](../retros/YYYYMMDD-Review.md)
```
### 工具调用 (Tool Usage)
1. **测试运行工具**:
- 使用 `RunCommand` 运行单元测试
- 使用 `RunCommand` 运行集成测试
- 使用 `RunCommand` 生成测试覆盖率报告
2. **代码质量检查工具**:
- 使用 `RunCommand` 运行 Checkstyle
- 使用 `RunCommand` 运行 SpotBugs
- 使用 `RunCommand` 运行 PMD
- 使用 `RunCommand` 运行 Spotless
3. **Git 操作工具**:
- 使用 `RunCommand` 执行 git status
- 使用 `RunCommand` 执行 git add
- 使用 `RunCommand` 执行 git commit
- 使用 `RunCommand` 执行 git push
4. **诊断工具**:
- 使用 `GetDiagnostics` 获取代码诊断信息
## 错误陷阱与验证 (Anti-Patterns & Checklist)
### 常见错误 (Anti-Patterns)
1. **错误**: 测试失败但仍然提交
- **后果**: 代码质量低,可能引入 Bug
- **修正**: 必须确保所有测试通过后才能提交
2. **错误**: 提交包含无关的代码变更
- **后果**: 提交不原子,难以追踪
- **修正**: 确保提交仅包含当前任务的变更
3. **错误**: 提交不包含文档变更
- **后果**: 违反文档同源原则
- **修正**: 必须包含所有文档变更Requirements, ADR, Prompts, Session Logs, Retros
4. **错误**: Commit Message 不符合规范
- **后果**: 难以理解提交内容
- **修正**: 必须遵循 Commit Message 规范
5. **错误**: 提交包含调试代码或临时文件
- **后果**: 代码质量低,可能影响运行
- **修正**: 必须清理调试代码和临时文件
### 验收清单 (Acceptance Checklist)
- [ ] 所有单元测试通过
- [ ] 所有集成测试通过
- [ ] 测试覆盖率符合要求
- [ ] 所有验收标准验证通过
- [ ] 静态代码分析通过
- [ ] 代码格式检查通过
- [ ] 代码规范检查通过
- [ ] 变更文件清单已确认
- [ ] 仅包含当前任务的变更
- [ ] 包含所有文档变更
- [ ] Commit Message 符合规范
- [ ] 已暂存所有变更文件
- [ ] 已执行 Git 提交
- [ ] 已推送到远程仓库
- [ ] 测试与提交记录已创建
### Correct vs Incorrect 对比
#### Correct 示例
```bash
# 运行测试
mvn test
# 结果: Tests run: 100, Failures: 0, Errors: 0, Skipped: 0
# 检查变更
git status
# 结果: 仅包含当前任务的变更
# 暂存变更
git add .
# 提交
git commit -m "feat(integration): 新增用户批量导入功能
- Implements: REQ-001
- Decision: ADR-001
- Context: Based on session 20260115-TaskName
新增用户批量导入功能,支持 CSV 格式导入,
单次最多导入 1000 条记录,提供详细的错误信息。"
# 推送
git push
```
#### Incorrect 示例
```bash
# 运行测试
mvn test
# 结果: Tests run: 100, Failures: 2, Errors: 0, Skipped: 0
# 忽略测试失败,直接提交
git add .
git commit -m "新增批量导入功能"
git push
```
**问题**: 测试失败但仍然提交Commit Message 不符合规范,缺少文档链接。
## 相关文档 (Related Documents)
- [工作流提示词](../prompts/03-创建工作流提示词.md#阶段-8-测试与版本提交-verification--git-commit)
- [闭环复盘技能](./0010-retrospective.md)
- [需求定义技能](./0004-define-requirements.md)
- [Commit Message 规范](../../CONTRIBUTING.md#commit-message-规范)