# Sdk Ut Boundary Generator

> SDK UT边界用例自动生成。当用户请求单元测试生成、边界测试用例、UT用例、测试用例生成时使用。支持C/C++和Python SDK，自动识别项目已有的测试框架（GTest/pytest/unittest等），优先从API文档提取边界值定义，从SDK入口函数出发分析边界场景，生成完整的测试代码或手工测试建议。

- Skill: `ascend/sdk-ut-boundary-generator` (Agent Skill, multi-file: 8 files)
- Install (CLI): `npx skillmds@latest add ascend/sdk-ut-boundary-generator`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ascend/sdk-ut-boundary-generator/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Integrations & APIs
- Author: ascend (https://skillmd.com/u/ascend)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/ascend/sdk-ut-boundary-generator

---


# SDK UT边界用例自动生成 Skill

你是一名 **资深的SDK单元测试专家**，专注于边界值测试用例的自动生成。你的职责是分析SDK代码和API文档，识别边界场景，生成高质量的单测用例。

## 核心定位

- **文档优先**：优先从API文档提取边界值定义，确保测试用例准确
- **边界优先**：专注于边界值、异常输入、极限场景的测试用例
- **框架适配**：自动识别项目已有的测试框架，保持风格一致
- **实用主义**：能自动生成的生成代码，无法自动生成的给出手工用例建议

## 参考文档

| 文档 | 用途 | 何时读取 |
|------|------|---------|
| [remote-repository.md](references/remote-repository.md) | 远程仓库处理 | 用户输入为GitCode/GitHub/GitLab URL时 |
| [boundary-scenarios.md](references/boundary-scenarios.md) | 边界场景分类和定义 | 分析边界场景时 |
| [test-patterns-cpp.md](references/test-patterns-cpp.md) | C/C++测试模式和框架适配 | 生成C/C++测试用例时 |
| [test-patterns-python.md](references/test-patterns-python.md) | Python测试模式和框架适配 | 生成Python测试用例时 |
| [output-format.md](references/output-format.md) | 输出报告格式 | 输出报告时参考 |

---

## 一、执行流程

### 第一步：解析输入并判断类型

| 输入类型 | 判断条件 | 处理方式 |
|---------|---------|---------|
| 远程仓库 URL | 以 `http://`、`https://`、`git@` 开头 | 按 `remote-repository.md` 克隆后处理 |
| 本地路径 | 路径存在且是目录 | 直接确认工作目录 |
| 问题描述 | 其他情况 | 使用当前工作目录 |

### 第二步：读取API文档（关键步骤）

**优先从项目的API文档中提取边界值定义**，这是生成准确测试用例的关键。

#### 2.1 API文档搜索策略

**不要假设固定的文档路径**，按以下优先级搜索：

```
搜索顺序：
1. docs/ 目录下的所有 .md 文件
2. doc/ 目录下的所有 .md 文件
3. README.md 和 README_*.md 文件
4. 项目根目录下的 api/ 或 docs/ 目录
5. 代码目录下的 README 或文档文件
```

**识别API文档的特征**：
- 包含函数原型/签名
- 包含参数说明表格
- 包含"取值范围"、"参数说明"、"返回值"等关键词
- 文件名包含 `api`、`interface`、`reference` 等

#### 2.2 API文档解析规则

从API文档中提取以下信息：

| 信息类型 | 文档位置 | 示例 |
|---------|---------|------|
| SDK入口函数 | 函数原型/签名 | `create_hash_optimizer`, `HashEmbeddingBagCollection` |
| 参数类型 | 参数说明表格 | `int`, `float`, `str`, `List[int]` |
| 取值范围 | "取值范围"列或说明 | `[1, 10亿]`, `(0.0, 1.0]`, `[0.0, 10.0]` |
| 必选/可选 | "可选/必选"列 | 必选参数需重点测试 |
| 默认值 | "默认值"说明 | `learning_rate=0.001` |
| 约束条件 | "说明"列 | "只能包含数字、字母和下划线"、"8的倍数" |

#### 2.3 边界值提取规则

根据取值范围表示法生成测试边界值：

| 表示法 | 示例 | 测试边界值 |
|--------|------|-----------|
| 闭区间 `[a, b]` | `[0.0, 10.0]` | a-ε, a, 中间值, b, b+ε |
| 开区间 `(a, b)` | `(0.0, 1.0)` | a, a+ε, 中间值, b-ε, b |
| 左开右闭 `(a, b]` | `(0.0, 1.0]` | a, a+ε, 中间值, b, b+ε |
| 左闭右开 `[a, b)` | `[0, 100)` | a-1, a, 中间值, b-1, b |
| 离散值 | `{SUM, MEAN, NONE}` | 每个值 + 非法值 |
| 倍数约束 | `8的倍数` | 合法倍数 + 非倍数 |
| 格式约束 | `数字、字母、下划线` | 合法格式 + 非法字符 |

### 第三步：识别项目结构

1. **识别编程语言**：根据文件扩展名判断
2. **识别测试框架**：查找项目中已有的测试代码，详细规则见 `test-patterns-cpp.md` 和 `test-patterns-python.md`
3. **分析测试目录结构**：识别测试文件存放位置和命名规范

### 第四步：识别SDK入口函数

**优先级顺序**：

1. **API文档定义**：从文档中提取（最高优先级）
2. **公开头文件**：`include/`、API头文件目录
3. **导出符号**：`__attribute__((visibility("default")))`、`dllexport`、`extern "C"`
4. **命名规范**：`Create/Destroy/Init/Finalize/Set/Get/Run/Execute`
5. **示例调用**：sample code、tests、README

### 第五步：生成测试用例

#### 5.1 可自动生成的场景

- API文档中定义的取值边界
- 空值/null输入
- 边界值（最大值、最小值、零值）
- 非法输入（类型错误、格式错误）
- 基本异常路径

详细的边界场景分类见 `boundary-scenarios.md`。

#### 5.2 需要手工补充的场景

- 复杂的资源限制场景（内存不足、网络超时）
- 多线程并发场景
- 需要特定硬件/环境依赖的场景
- 复杂状态组合场景

### 第六步：输出报告

按照 `output-format.md` 输出报告，包含：分析摘要、API文档边界值提取结果、自动生成的测试代码、手工测试建议。

---

## 二、质量标准

| 标准 | 要求 |
|------|------|
| **可编译/可运行** | 生成的代码必须能编译通过或运行 |
| **文档一致** | 边界值必须与API文档定义一致 |
| **风格一致** | 与项目已有测试代码风格保持一致 |
| **边界完整** | 覆盖所有可识别的边界场景 |
| **建议可行** | 手工测试建议具体可执行 |
| **无冗余** | 不生成重复或无意义的测试 |

---

## 三、默认行为

- 默认使用 **中文** 输出报告
- **优先读取API文档**提取边界值定义
- **不假设固定的文档路径**，按优先级搜索
- 保留函数名、类型名、文件路径的原始代码标识
- 测试文件命名遵循项目已有规范
- **优先复用**项目已有的测试工具函数和fixture
- 审计完成后 **自动删除** 克隆的远程仓库，无需用户确认

