CTS开发修复技能
SkillDev toolsDevelopment assistant for fixing CTS test failures in the ArkTS frontend compiler (ets2panda). Covers the full workflow of root-cause analysis, code fixes, and test verification when CTS test cases fail. Use cases: (1) locating root causes and fixing failed CTS test cases (2) feature development and
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the CTS开发修复技能 skill
What this skill tells your AI
The instructions your AI receives, as published by openharmonyinsight/openharmony-skills in workflows/arkRuntime/.aceharness/skills/cts-dev/SKILL.md and read by ahel’s review.
本技能提供ArkTS前端编译器(ets2panda)CTS测试用例修复的完整开发流程,涵盖问题定位、代码修改、测试验证和上库标准。
前置技能:Spec分析
当处理CTS用例失败时,必须先使用 spec-test-analyzer 技能,对失败用例进行spec规则召回和差异分析,生成「CTS缺陷Spec分析报告」。
本技能的修复工作基于该报告进行:
- 报告中的「责任模块判定」→ 确定修改哪个模块
- 报告中的「Spec与编译器行为差异分析」→ 理解根因
- 报告中的「补充测试场景」→ 确保修复覆盖边界条件
- 报告中的「Spec原文」→ 修复依据(spec-first原则)
如果尚未生成Spec分析报告,请先触发 spec-test-analyzer 技能。
重要约定
- 项目根目录: 包含
runtime_core/和ets_frontend/的目录(脚本自动检测,也可通过ARK_ROOT_DIR环境变量指定) - 编译器代码路径:
ets_frontend/ets2panda(不是ets_frontend/es2panda) - 涉及仓库:
ets_frontend和runtime_core - 编译命令执行路径:
runtime_core/static_core/ - 构建目标:
es2panda - 构建目录: 自动检测(优先级:
ARK_BUILD_DIR环境变量 >build_release>out) - 脚本位置: 所有脚本使用绝对路径,通过
common.sh自动检测项目根目录,可在任意目录执行
环境变量
| 变量 | 说明 | 示例 |
|---|---|---|
ARK_ROOT_DIR | 项目根目录(含runtime_core/和ets_frontend/) | /home/user/arkcompile |
ARK_BUILD_DIR | 构建输出目录(绝对路径) | /home/user/arkcompile/runtime_core/static_core/out |
编译模式
所有编译命令在 runtime_core/static_core/ 目录下执行:
# Release模式
cmake -B out -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=./cmake/toolchain/host_clang_default.cmake -GNinja . && cmake --build out
# Debug模式
cmake -B out -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=./cmake/toolchain/host_clang_default.cmake -GNinja . && cmake --build out
# Debug-ASAN模式
cmake -B cmake-build-debug -DPANDA_ENABLE_ADDRESS_SANITIZER=true -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=./cmake/toolchain/host_clang_default.cmake -GNinja .
关键目录
| 路径 | 说明 |
|---|---|
ets_frontend/ets2panda | 编译器实现代码 |
ets_frontend/ets2panda/test/ | 编译器测试用例(ast/compiler/ets/) |
runtime_core/static_core/ | 测试命令执行根目录、编译根目录 |
runtime_core/static_core/plugins/ets/tests/ets-templates/ | CTS测试用例模板 |
runtime_core/static_core/plugins/ets/doc/spec/ | ArkTS语言规范文档 |
runtime_core/static_core/tests/tests-u-runner/ | 测试运行器 |
mktemp 生成的临时目录 | 当前运行渲染后的CTS用例代码目录(由 runtime.sh 自动创建和清理) |
开发流程
阶段零:准备基线(异步后台)
后台异步执行CTS全量测试保存基线结果,后续回归验证时对比:
SCRIPTS_DIR="...scripts目录绝对路径..."
$SCRIPTS_DIR/cts2.sh > baseline.txt 2>&1 &
阶段一:Spec分析(前置,由spec-test-analyzer执行)
本步骤由
spec-test-analyzer技能完成,不在此技能内执行。 如果用户直接提供了失败用例但未附带Spec分析报告,应先触发spec-test-analyzer生成报告。
输入:失败的CTS用例 + 错误信息 输出:CTS缺陷Spec分析报告(包含spec规则召回、行为差异分析、责任模块判定)
阶段二:问题定位与修复
- 阅读Spec分析报告: 获取
spec-test-analyzer输出的CTS缺陷Spec分析报告,重点关注:- 「责任模块判定」→ 确定是parser/checker/lowering中的哪个模块
- 「Spec与编译器行为差异分析」→ 理解期望行为vs实际行为的gap
- 「建议修复方向」→ 获取修复思路
- 复现问题: 使用对应测试脚本运行失败用例,确认问题可复现
SCRIPTS_DIR="...scripts目录绝对路径..." # CTS测试用例(支持 --test-file 或 --filter) $SCRIPTS_DIR/cts2.sh --test-file <用例路径> $SCRIPTS_DIR/cts2.sh --filter "*17.experimental_features/13.adding_functionality_to_existing_types*" # astchecker测试 $SCRIPTS_DIR/astcheck.sh --test-file <用例路径> # recheck测试 $SCRIPTS_DIR/recheck.sh --test-file <用例路径> # 单元测试 $SCRIPTS_DIR/ut.sh --test-file <用例路径> - 结合Spec报告定位根因: 将Spec报告中的差异点映射到具体代码位置
- Parser差异 → 查看
parser/ETSParser*.cpp - Checker差异 → 查看
checker/ETSAnalyzer*.cpp和checker/ets/*.cpp - Lowering差异 → 查看
compiler/lowering/ets/*Lowering.cpp
- Parser差异 → 查看
- 确定修改范围: 明确需要修改的文件和函数,参考
reference/architecture.md - 修改代码: 根据根因分析修改对应模块代码,严格遵循代码规范
- 增量编译:
$SCRIPTS_DIR/build_diff.sh - 确认目标用例通过: 反复修改+编译+测试,直到所有目标用例通过
阶段三:定向回归验证
确保修复的特定CTS子类用例全部通过(每步通过后才继续下一步):
SCRIPTS_DIR="...scripts目录绝对路径..."
# 1. 目标CTS子类测试(如:adding_functionality_to_existing_types)
$SCRIPTS_DIR/cts2.sh --filter "*17.experimental_features/13.adding_functionality_to_existing_types*"
# 2. ets-runtime测试(约8分钟)
$SCRIPTS_DIR/runtime.sh
# 3. astchecker测试(约10分钟)
$SCRIPTS_DIR/astcheck.sh
阶段四:全量回归验证
按顺序执行全量回归测试:
SCRIPTS_DIR="...scripts目录绝对路径..."
# 1. CTS全量测试(约136分钟)
$SCRIPTS_DIR/cts2.sh
# 2. ets-func-tests(约30分钟)
# 直接在 static_core 下执行
cd $ARK_ROOT_DIR/runtime_core/static_core
tests/tests-u-runner/runner.sh --ets-func-tests --show-progress --build-dir out --processes=all
# 3. parser测试(约8分钟)
$SCRIPTS_DIR/parser.sh
阶段五:代码格式检查
在项目根目录(runtime_core/和ets_frontend/同级目录)执行格式检查:
SCRIPTS_DIR="...scripts目录绝对路径..."
# 检查所有仓库的修改文件格式(默认检查ets_frontend和runtime_core)
$SCRIPTS_DIR/format.sh
# 只检查ets_frontend
$SCRIPTS_DIR/format.sh --repo ets_frontend
# 只检查runtime_core
$SCRIPTS_DIR/format.sh --repo runtime_core
# 检查最后一次提交的文件
$SCRIPTS_DIR/format.sh log
# 检查最后一次提交,仅ets_frontend
$SCRIPTS_DIR/format.sh --repo ets_frontend log
根据检查结果修改代码,反复执行直到格式检查通过。
阶段六:生成代码修改报告
所有测试通过后,生成代码修改报告(模板见下方)。
测试脚本速查
所有脚本位于 scripts/ 目录,使用绝对路径,可在任意目录执行。
所有脚本通过 common.sh 自动检测项目根目录(向上查找含runtime_core/和ets_frontend/的目录)。
| 脚本 | 用途 | 参数 |
|---|---|---|
build_diff.sh | 增量编译es2panda | 无 |
build.sh | 全量编译 | 无 |
install_build.sh | 首次安装构建 | 无 |
cts2.sh | CTS测试 | --test-file <路径> 或 --filter <模式> |
astcheck.sh | astchecker测试 | --test-file <路径> |
parser.sh | parser测试 | --test-file <路径> |
recheck.sh | recheck测试 | --test-file <路径> |
runtime.sh | ets-runtime测试 | 无 |
ut.sh | 单元测试 | --test-file <路径> |
declgen.sh | 声明生成测试 | --test-file <路径> |
runets.sh | 编译运行单个ets文件 | <文件路径> |
style.sh | ninja clang-force-format | 无 |
format.sh | 代码格式检查(clang-format+clang-tidy) | --repo <仓库> log |
all_with_build.sh | 构建后运行全部测试 | 无 |
test.sh | 旧版全套测试(含format) | 无 |
common.sh | 共享函数(自动检测路径) | (被其他脚本source) |
代码规范
命名规范
- 新增函数命名不能过长
- 函数首个单词首字母大写,首个单词为动词(如
GetTypeFor...、Check...、Resolve...) - 不能有魔术数字、魔术字符串,必须定义为命名常量
复杂度规范
- 函数圈复杂度不超过10
- 代码缩进层级不超过5
- 单个函数不能超过49行
- 函数参数个数不超过5个
- 新增代码存在重复代码时要提取为函数
模块约束
- Checker: 不改AST形状、不新建AST节点,仅修改语义元数据
- Parser: 仅做语法解析(token→AST),不报告语义错误
- Lowering: AST→AST变换,新建节点后必须re-bind/re-check
- 详细模块约束见
reference/architecture.md
类型系统规则
- 使用
TypeRelationAPI(IsSupertypeOf、IsIdenticalTo)进行类型逻辑判断 - 不硬编码类型名(如
"escompat.Record"),不用指针比较类型 - 不引入新的状态标志(
CheckerStatus、AstNodeFlags等) - 不依赖
ToString()稳定性做语义判断,应使用类型结构/TypeRelation
通用工程规范
- 不使用显式
new/delete管理内存 - 优先使用文件级
static/私有辅助函数,不膨胀公共接口 - 使用arena allocation管理编译器对象
- Linux和Windows文本文件编码格式可能不同,注意换行符差异导致的crash
验收标准
必须通过项
- 修复命令中指定的所有失败用例均通过
- parser测试套无新增失败
- astchecker测试套无新增失败
- recheck测试套无新增失败
- ets-runtime测试套无新增失败
- CTS全量测试无回归(与基线对比无新增失败)
- 编译构建无error无warning
- 代码格式检查通过(format.sh)
代码质量项
- 圈复杂度 ≤ 10
- 函数行数 ≤ 49行
- 缩进层级 ≤ 5
- 无魔术数字/字符串
- 无冗余/重复代码
- 符合命名规范
Spec一致性项
- 行为符合最新技术预览规范(spec-first)
- 不引入spec之外的行为
- 不移除现有assertion
上库标准
Commit Message格式
[CTS] 简短描述(首行不超过50字符)
Issue: https://gitcode.com/openharmony/arkcompiler_runtime_core/issues/<编号>
Co-Authored-By: Agent
Signed-off-by: <姓名> <邮箱>
- 首行和正文之间有空行
- 首行字符数不超过50
- 关联Issue链接
必须包含
- 修复行为的对应测试用例
- spec规范依据(如涉及)
- 代码修改报告
代码修改报告
每次修复完成后,必须生成代码修改报告。报告中"Spec依据"部分应引用 spec-test-analyzer 输出的CTS缺陷Spec分析报告中的具体spec章节和规则。
模板如下:
# 代码修改报告
## 一、问题根因分析
### 1.1 问题描述
<!-- 描述CTS测试失败的现象:哪个用例、什么错误信息 -->
### 1.2 根因定位
<!-- 定位到具体模块(parser/checker/lowering)和具体函数/文件 -->
- **涉及模块**:
- **根因文件**:
- **根因函数**:
- **根因类型**: (逻辑错误 / 缺失功能 / 边界条件未处理 / spec实现不一致)
### 1.3 根因详细分析
<!-- 解释为什么会产生这个问题,从spec或编译器架构角度分析 -->
## 二、架构设计
### 2.1 修改方案
<!-- 描述修复方案的设计思路 -->
### 2.2 修改文件列表
| 文件路径 | 修改类型 | 说明 |
|----------|----------|------|
| | 新增/修改/删除 | |
### 2.3 模块影响分析
- **Parser影响**:
- **Checker影响**:
- **Lowering影响**:
- **其他模块影响**:
### 2.4 新增函数说明
| 函数签名 | 所在文件 | 职责 |
|----------|----------|------|
| | | |
## 三、影响范围
### 3.1 功能影响
<!-- 本次修改影响哪些语言特性/语法规则 -->
### 3.2 测试影响
- **新增测试用例**:
- **修改测试用例**:
- **预期影响的CTS章节**:
### 3.3 兼容性影响
<!-- 是否影响已有代码的编译行为 -->
### 3.4 回归测试结果
| 测试套 | 修复前结果 | 修复后结果 | 是否有回归 |
|--------|-----------|-----------|-----------|
| parser | | | |
| astchecker | | | |
| recheck | | | |
| ets-runtime | | | |
| CTS全量 | | | |
## 四、Spec依据
<!-- 引用spec-test-analyzer输出的CTS缺陷Spec分析报告中的具体spec章节和规则 -->
<!-- 包括:Spec章节编号、规则描述、原文引用 -->
<!-- 来源报告路径:{spec-test-analyzer输出的报告路径} -->
参考资源
- 前置技能:
../spec-test-analyzer/SKILL.md— Spec规则召回和分析,CTS修复的必经前置步骤 - 模块架构:
reference/architecture.md— checker/parser/lowering三大模块的详细架构知识 - 测试脚本:
scripts/— 所有可执行的测试和构建脚本(绝对路径,自动检测项目根目录) - 共享函数:
scripts/common.sh— 路径自动检测逻辑(detect_root_dir、detect_build_dir) - Spec规范:
runtime_core/static_core/plugins/ets/doc/spec/— ArkTS语言规范
Signals
- GitHub stars
- 34
- Forks
- 7
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
cts-dev- Source
- github.com/openharmonyinsight/openharmony-skills