Skill: samuelpang/qa-reviewer (version 1.0.0)

# QA Reviewer Skill ## 概述 `qa-reviewer` 技能提供完整的质量保证、代码审查和测试框架能力。基于 SRM 项目实战经验，帮助 Agent 高效完成代码质量保障工作。 ## 核心能力 ### 1. 代码审查 - ✅ 自动识别代码问题 - ✅ 生成详细审查报告 - ✅ 提供修复建议 - ✅ 支持 C++/Python/JavaScript ### 2. 测试框架 - ✅ 创建单元测试 - ✅ 运行测试套件 - ✅ 生成覆盖率报告 - ✅ 支持 Google Test/pytest/Jest ### 3. 问题追踪 - ✅ TODO 管理 - ✅ 优先级排序 - ✅ 状态跟踪 - ✅ 修复验证 ### 4. 质量评估 - ✅ P0 任务完成度检查 - ✅ 代码质量指标 - ✅ 文档完整性检查 - ✅ 生成质量报告 ## 使用场景 - **项目启动**: 进行需求评审，识别遗漏 - **开发过程**: 代码审查，发现问题 - **测试阶段**: 执行测试，验证质量 - **验收阶段**: 生成报告，确认完成 ## 快速开始 ```bash # 1. 加载技能 openclaw skill load qa-reviewer # 2. 运行代码审查 cd /path/to/project ~/.openclaw/extensions/qa-reviewer/scripts/code_review.sh # 3. 生成测试报告 ~/.openclaw/extensions/qa-reviewer/scripts/generate_report.sh # 4. 运行测试 ~/.openclaw/extensions/qa-reviewer/scripts/run_tests.sh ``` ## 核心工作流 ### 代码审查流程 ``` 1. 阅读代码 ↓ 2. 识别问题 ↓ 3. 生成报告 (使用模板) ↓ 4. 提交反馈 ↓ 5. 验证修复 ``` ### 测试执行流程 ``` 1. 创建测试用例 ↓ 2. 运行测试 ↓ 3. 分析结果 ↓ 4. 生成报告 ↓ 5. 跟踪问题 ``` ## 最佳实践 ### 1. 早期评审 - 项目启动时就进行需求评审 - 避免后期大规模返工 - 评审时间 < 开发时间 10% ### 2. 快速反馈 - 发现问题 → 报告 → 修复 → 验证 - 完整循环 < 1 小时 - 问题不累积 ### 3. 独立验收 - 测试角色独立于开发 - 验收标准明确 - 验证必须通过 ### 4. 文档同步 - 代码和注释同时完成 - 文档和代码同步更新 - 避免事后补充 ## 检查清单 ### 代码审查清单 - [ ] 功能实现正确 - [ ] 边界情况处理 - [ ] 错误处理完整 - [ ] 代码风格一致 - [ ] 注释完整清晰 - [ ] 测试用例覆盖 ### 测试执行清单 - [ ] 单元测试通过 - [ ] 集成测试通过 - [ ] 边界测试通过 - [ ] 性能测试通过 - [ ] 覆盖率达标 ## 版本历史 - **v1.0.0** (2026-03-04) - 初始版本 - 基于 SRM 项目经验 - 包含核心模板和脚本 ## 许可证 MIT License --- *维护者：sw-tester 🐛* *最后更新：2026-03-04*

path: PUBLISH_INSTRUCTIONS.md
content: # 发布到 ClawHub 指南

## 当前状态

✅ Skill 文件已创建完成
- SKILL.md
- README.md  
- templates/
- scripts/
- examples/
- docs/
- package.json

## 发布步骤

### 1. 登录 ClawHub

```bash
clawhub login
```

这会打开浏览器进行登录认证。

### 2. 发布 Skill

```bash
cd ~/.openclaw/extensions/qa-reviewer
clawhub publish . \
  --slug qa-reviewer \
  --name "QA Reviewer" \
  --version 1.0.0 \
  --tags "qa,testing,code-review,quality-assurance" \
  --changelog "Initial release based on SRM project experience"
```

### 3. 验证发布

```bash
# 检查发布状态
clawhub inspect qa-reviewer

# 搜索确认
clawhub search qa-reviewer
```

## 更新流程

### 更新内容后

```bash
# 更新版本
# 修改 package.json version

# 发布更新
clawhub publish . --version 1.0.1 --changelog "Updated templates and scripts"
```

## 安装验证

其他用户安装后：

```bash
# 安装
clawhub install qa-reviewer

# 使用
~/.openclaw/extensions/qa-reviewer/scripts/code_review.sh
```

---

*创建时间：2026-03-04*


path: README.md
content: # QA Reviewer - 质量保证技能

## 简介

基于 SRM 项目 24 小时实战经验，提供完整的质量保证能力。

## 核心经验

1. **清晰的角色分工** - 开发不测试，测试不开发
2. **快速反馈循环** - 发现问题→报告→修复→验证 < 1 小时

## 目录结构

```
qa-reviewer/
├── SKILL.md              # 技能说明
├── README.md             # 本文件
├── templates/            # 报告模板
│   ├── test_report.md
│   ├── code_review.md
│   └── todo_tracker.md
├── scripts/              # 自动化脚本
│   ├── run_tests.sh
│   ├── code_review.sh
│   └── generate_report.sh
├── examples/             # 使用示例
│   └── test_case_example.cpp
└── docs/                 # 详细文档
    ├── workflow.md
    ├── checklist.md
    └── best_practices.md
```

## 快速开始

```bash
# 克隆项目
cd /path/to/project

# 运行代码审查
~/.openclaw/extensions/qa-reviewer/scripts/code_review.sh

# 生成测试报告
cp ~/.openclaw/extensions/qa-reviewer/templates/test_report.md ./
vim ./TEST_REPORT.md
```

## 使用示例

详见 `examples/` 目录

## 更多文档

- [技能说明](SKILL.md)
- [工作流程](docs/workflow.md)
- [检查清单](docs/checklist.md)
- [最佳实践](docs/best_practices.md)

---

*创建时间：2026-03-04*  
*版本：1.0.0*


path: docs/best_practices.md
content: # QA 最佳实践

## 核心原则

### 1. 清晰的角色分工
- 开发不测试，测试不开发
- 独立验收权
- 互相制衡

### 2. 快速反馈循环
- 发现问题 → 报告 → 修复 → 验证
- 完整循环 < 1 小时
- 问题不累积

## 实践建议

### 早期评审
- 项目启动时就评审需求
- 评审时间 < 开发时间 10%
- 避免后期大规模返工

### 代码审查
- 每提交必审查
- 审查时间 < 30 分钟
- 发现问题立即报告

### 测试执行
- 测试与开发同步
- 自动化测试优先
- 覆盖率 > 80%

### 文档同步
- 代码和注释同时完成
- 文档和代码同步更新
- 避免事后补充

## 常见问题

### Q: 如何平衡速度和质量？
A: 早期投入评审时间，后期节省返工时间

### Q: 如何处理紧急需求？
A: 快速评审，明确范围，优先 P0

### Q: 如何确保测试覆盖？
A: 自动化测试 + 定期检查

---

*最后更新：2026-03-04*


path: docs/checklist.md
content: # QA 检查清单

## 代码审查清单

### 功能正确性
- [ ] 需求理解正确
- [ ] 功能实现完整
- [ ] 边界情况处理
- [ ] 错误处理完整

### 代码质量
- [ ] 代码风格一致
- [ ] 命名规范清晰
- [ ] 函数职责单一
- [ ] 无冗余代码

### 测试覆盖
- [ ] 单元测试存在
- [ ] 测试用例充分
- [ ] 边界测试覆盖
- [ ] 错误测试覆盖

### 文档完整性
- [ ] 头文件注释
- [ ] 函数注释
- [ ] 使用示例
- [ ] 变更说明

## 测试执行清单

### 单元测试
- [ ] 编译通过
- [ ] 测试通过
- [ ] 覆盖率达标

### 集成测试
- [ ] 接口测试
- [ ] 数据流测试
- [ ] 错误处理测试

### 性能测试
- [ ] 响应时间
- [ ] 资源使用
- [ ] 并发测试

## 验收清单

### P0 任务
- [ ] 所有 P0 任务完成
- [ ] 功能验证通过
- [ ] 性能达标

### 质量指标
- [ ] 无严重问题
- [ ] 测试覆盖率 > 80%
- [ ] 文档完整

### 交付物
- [ ] 源代码
- [ ] 测试代码
- [ ] 文档
- [ ] 部署脚本

---

*最后更新：2026-03-04*


path: docs/workflow.md
content: # QA Reviewer 工作流程

## 1. 项目启动阶段

### 1.1 需求评审
```bash
# 复制评审模板
cp ~/.openclaw/extensions/qa-reviewer/templates/code_review.md ./REVIEW.md

# 进行需求评审
vim ./REVIEW.md

# 提交评审报告
git add REVIEW.md
git commit -m "review: 需求评审报告"
```

### 1.2 任务清单检查
- [ ] P0 任务完整
- [ ] 验收标准明确
- [ ] 时间估算合理

## 2. 开发阶段

### 2.1 代码审查
```bash
# 运行代码审查
~/.openclaw/extensions/qa-reviewer/scripts/code_review.sh

# 查看报告
cat CODE_REVIEW_*.md
```

### 2.2 问题跟踪
```bash
# 更新 TODO.md
vim TODO.md

# 提交更新
git add TODO.md
git commit -m "docs: 更新 TODO 清单"
```

## 3. 测试阶段

### 3.1 单元测试
```bash
# 运行测试
~/.openclaw/extensions/qa-reviewer/scripts/run_tests.sh

# 查看结果
cat TEST_RESULT_*.md
```

### 3.2 生成报告
```bash
# 复制测试报告模板
cp ~/.openclaw/extensions/qa-reviewer/templates/test_report.md ./

# 填写报告
vim TEST_REPORT.md

# 提交报告
git add TEST_REPORT.md
git commit -m "test: 测试报告"
```

## 4. 验收阶段

### 4.1 验收检查
- [ ] 所有 P0 任务完成
- [ ] 测试全部通过
- [ ] 问题全部修复
- [ ] 文档齐全

### 4.2 验收报告
```markdown
# 验收报告

**验收时间**: YYYY-MM-DD  
**验收人**: [名字]

## 结果
- P0 完成度：100%
- 测试通过：✅
- 问题修复：✅

## 结论
✅ 验收通过
```

---

*最后更新：2026-03-04*


path: examples/test_case_example.cpp
content: /**
 * @file test_case_example.cpp
 * @brief 测试用例示例
 * 
 * 基于 Google Test 框架，展示如何编写单元测试
 */

#include <gtest/gtest.h>
#include <fstream>
#include <sys/stat.h>

// 测试辅助函数
static bool fileExists(const std::string& path) {
    struct stat buffer;
    return (stat(path.c_str(), &buffer) == 0);
}

// 测试夹具
class FileTest : public testing::Test {
protected:
    void SetUp() override {
        // 测试前准备
        testDir_ = "/tmp/test_" + std::to_string(getpid());
        mkdir(testDir_.c_str(), 0755);
    }
    
    void TearDown() override {
        // 测试后清理
        std::string cmd = "rm -rf " + testDir_;
        system(cmd.c_str());
    }
    
    std::string testDir_;
};

// 测试用例 1: 基本功能测试
TEST_F(FileTest, DirectoryCreation) {
    // 验证目录创建
    EXPECT_TRUE(fileExists(testDir_));
}

// 测试用例 2: 边界情况测试
TEST_F(FileTest, EmptyDirectory) {
    // 创建空目录
    std::string emptyDir = testDir_ + "/empty";
    mkdir(emptyDir.c_str(), 0755);
    
    // 验证
    EXPECT_TRUE(fileExists(emptyDir));
}

// 测试用例 3: 错误处理测试
TEST_F(FileTest, NonExistentPath) {
    // 测试不存在的路径
    EXPECT_FALSE(fileExists("/nonexistent/path"));
}

// 运行所有测试
int main(int argc, char** argv) {
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}


path: package.json
content: {
  "name": "qa-reviewer",
  "version": "1.0.0",
  "description": "质量保证、代码审查和测试框架技能。基于 SRM 项目实战经验。",
  "displayName": "QA Reviewer",
  "author": "sw-tester",
  "license": "MIT",
  "keywords": [
    "qa",
    "testing",
    "code-review",
    "quality-assurance",
    "best-practices"
  ],
  "repository": {
    "type": "git",
    "url": "https://github.com/openclaw/qa-reviewer-skill"
  },
  "files": [
    "SKILL.md",
    "README.md",
    "templates/",
    "scripts/",
    "examples/",
    "docs/"
  ],
  "scripts": {
    "review": "./scripts/code_review.sh",
    "test": "./scripts/run_tests.sh"
  }
}


path: scripts/code_review.sh
content: #!/bin/bash
# code_review.sh - 代码审查脚本
# Usage: ./code_review.sh [project_path]

PROJECT_PATH="${1:-.}"
TIMESTAMP=$(date '+%Y-%m-%d %H:%M')

echo "========================================"
echo "代码审查"
echo "项目：$PROJECT_PATH"
echo "时间：$TIMESTAMP"
echo "========================================"

# 检查 TODO
echo ""
echo "[1/4] 检查 TODO 注释..."
TODO_COUNT=$(grep -r "TODO\|FIXME\|XXX" --include="*.cpp" --include="*.h" --include="*.py" "$PROJECT_PATH" 2>/dev/null | wc -l)
echo "   发现 $TODO_COUNT 处 TODO/FIXME"

# 检查模拟代码
echo ""
echo "[2/4] 检查模拟代码..."
STUB_COUNT=$(grep -r "stub\|mock\|fake\|dummy" --include="*.cpp" --include="*.h" "$PROJECT_PATH" 2>/dev/null | wc -l)
echo "   发现 $STUB_COUNT 处模拟代码"

# 检查注释覆盖率
echo ""
echo "[3/4] 检查注释..."
HEADER_COUNT=$(find "$PROJECT_PATH" -name "*.h" | wc -l)
COMMENTED_HEADERS=$(grep -l "/\*\*" "$PROJECT_PATH"/**/*.h 2>/dev/null | wc -l)
echo "   头文件：$HEADER_COUNT 个"
echo "   有注释：$COMMENTED_HEADERS 个"

# 生成报告
echo ""
echo "[4/4] 生成报告..."
cat > "$PROJECT_PATH/CODE_REVIEW_$TIMESTAMP.md" << REPORT
# 代码审查报告

**审查时间**: $TIMESTAMP  
**项目**: $PROJECT_PATH

## 统计

| 项目 | 数量 |
|------|------|
| TODO 注释 | $TODO_COUNT |
| 模拟代码 | $STUB_COUNT |
| 头文件 | $HEADER_COUNT |
| 有注释头文件 | $COMMENTED_HEADERS |

## 建议

1. 处理 TODO 注释
2. 替换模拟代码
3. 补充缺失注释

---

*自动生成：code_review.sh*
REPORT

echo "   报告已生成：CODE_REVIEW_$TIMESTAMP.md"
echo ""
echo "========================================"
echo "✅ 代码审查完成"
echo "========================================"


path: scripts/run_tests.sh
content: #!/bin/bash
# run_tests.sh - 运行测试脚本
# Usage: ./run_tests.sh [project_path]

PROJECT_PATH="${1:-.}"
TIMESTAMP=$(date '+%Y-%m-%d %H:%M')

echo "========================================"
echo "运行测试"
echo "项目：$PROJECT_PATH"
echo "时间：$TIMESTAMP"
echo "========================================"

# 检查测试文件
echo ""
echo "[1/3] 检查测试文件..."
TEST_FILES=$(find "$PROJECT_PATH" -name "*_test.cpp" -o -name "test_*.cpp" -o -name "*_test.py" 2>/dev/null | wc -l)
echo "   发现 $TEST_FILES 个测试文件"

if [ "$TEST_FILES" -eq 0 ]; then
    echo "   ⚠️  未找到测试文件"
    echo ""
    echo "建议创建测试文件:"
    echo "  - C++: tests/test_feature.cpp"
    echo "  - Python: tests/test_feature.py"
    exit 0
fi

# 运行测试
echo ""
echo "[2/3] 运行测试..."

# 检查是否有 CMakeLists.txt
if [ -f "$PROJECT_PATH/tests/CMakeLists.txt" ]; then
    echo "   检测到 CMake 测试配置"
    cd "$PROJECT_PATH/tests"
    if [ ! -d "build" ]; then
        mkdir build
    fi
    cd build
    cmake .. > /dev/null 2>&1
    make > /dev/null 2>&1
    if [ -f "srm_tests" ]; then
        ./srm_tests
        TEST_RESULT=$?
    else
        echo "   ⚠️  编译失败"
        TEST_RESULT=1
    fi
    cd ../..
elif [ -f "$PROJECT_PATH/tests/pytest.ini" ]; then
    echo "   检测到 pytest 配置"
    cd "$PROJECT_PATH"
    pytest tests/ -v
    TEST_RESULT=$?
    cd ..
else
    echo "   ⚠️  未找到测试配置"
    TEST_RESULT=1
fi

# 生成报告
echo ""
echo "[3/3] 生成报告..."
cat > "$PROJECT_PATH/TEST_RESULT_$TIMESTAMP.md" << REPORT
# 测试结果

**运行时间**: $TIMESTAMP  
**项目**: $PROJECT_PATH  
**状态**: $([ $TEST_RESULT -eq 0 ] && echo "✅ 通过" || echo "❌ 失败")

## 统计

| 项目 | 数量 |
|------|------|
| 测试文件 | $TEST_FILES |
| 测试结果 | $([ $TEST_RESULT -eq 0 ] && echo "通过" || echo "失败") |

---

*自动生成：run_tests.sh*
REPORT

echo "   报告已生成：TEST_RESULT_$TIMESTAMP.md"
echo ""
echo "========================================"
if [ $TEST_RESULT -eq 0 ]; then
    echo "✅ 测试通过"
else
    echo "❌ 测试失败"
fi
echo "========================================"

exit $TEST_RESULT


path: templates/code_review.md
content: # 代码审查报告

**审查时间**: YYYY-MM-DD HH:MM  
**审查人**: [你的名字]  
**项目**: [项目名称]  
**模块**: [模块名称]

---

## 📊 总体评价

| 维度 | 评分 | 说明 |
|------|------|------|
| 架构设计 | ⭐⭐⭐⭐⭐ | 优秀 |
| 代码质量 | ⭐⭐⭐⭐ | 良好 |
| 测试覆盖 | ⭐⭐⭐ | 需改进 |
| 文档完整性 | ⭐⭐⭐⭐ | 良好 |

---

## ✅ 优点

1. [优点 1]
2. [优点 2]

---

## ⚠️ 改进建议

### 高优先级
- [ ] [建议 1]
- [ ] [建议 2]

### 中优先级
- [ ] [建议 3]

### 低优先级
- [ ] [建议 4]

---

## 📝 详细问题

### 问题 1: [标题]
**位置**: `file.cpp:line`  
**问题**: 描述  
**建议**: 修复方案

---

## 🎯 验收标准

- [ ] 所有高优先级问题已修复
- [ ] 测试用例补充完成
- [ ] 文档更新完成

---

*审查人：[你的名字] | YYYY-MM-DD HH:MM*


path: templates/test_report.md
content: # 测试报告 #XXX

**检查时间**: YYYY-MM-DD HH:MM  
**检查人**: [你的名字]  
**项目**: [项目名称]  
**分支**: [分支名称]

---

## 📊 总体评价

| 指标 | 状态 | 说明 |
|------|------|------|
| 功能完成度 | ⏳ | X/Y 完成 |
| 代码质量 | ⏳ | 待评估 |
| 测试覆盖 | ⏳ | 待执行 |

---

## 🔍 发现问题

| 编号 | 问题描述 | 严重程度 | 状态 | 位置 |
|------|---------|---------|------|------|
| 1 | [问题描述] | 高/中/低 | 待修复 | file.cpp:line |

### 问题详情

#### 问题 1: [标题]
**严重程度**: 高/中/低  
**位置**: `file.cpp:line`  
**描述**: 详细说明问题  
**建议**: 修复建议

---

## ✅ 已验证

- [ ] 功能 1
- [ ] 功能 2
- [ ] 功能 3

---

## 📋 建议

1. [建议 1]
2. [建议 2]

---

*报告生成：[你的名字] | YYYY-MM-DD HH:MM*


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)