Skip to content

Commit e30a761

Browse files
authored
update api_accpetance_criteria_cn.md (#4917)
1 parent 68b80fa commit e30a761

File tree

4 files changed

+284
-282
lines changed

4 files changed

+284
-282
lines changed

docs/dev_guides/api_contributing_guides/api_accpetance_criteria_cn.md

Lines changed: 43 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,49 @@
1-
# 新增API 测试及验收规范
2-
3-
## CI通过性
4-
5-
进入PaddlePaddle主库的代码,涉及到的相关检测CI必须全部Pass。用来验证对之前功能点的兼容和影响,用来保障新合入代码对历史代码不产生影响。
6-
7-
新增代码必须要有相应的单测保障测试覆盖率达到准入要求(测试覆盖率(行覆盖率)90%)。
8-
9-
## PR内容描述要求
10-
11-
单元测试内容需要和开发代码放在同一个PR提交,后续修改也需要基于此PR。
12-
13-
PR内容描述测试部分需要明确指出测试相关的文件列表,并写明测试Case的运行方法和自测结果。
14-
15-
## API测试内容及单元测试要求
16-
17-
API命名,参数命名,暴露方式,代码目录层级需按照设计文档要求保持一致或参考API通用设计文档的要求。
18-
19-
新增API测试代码必须覆盖动态图和静态图的测试场景。(原则上需要支持动态图和静态图两种方式调用,如果仅支持其中一种,需要在设计文档RFC和API文档中体现)
20-
21-
新增API测试代码必须覆盖CPU和GPU的测试场景。(原则上需要支持CPU和GPU两种硬件平台调用,如果仅支持其中一种,需要在设计文档RFC和API文档中体现)
22-
23-
新增API涉及tensor的dtype需要有相关Case进行测试覆盖。
24-
25-
新增API的入参,需要对全部入参进行参数有效性和边界值测试。确定每个入参都可以正确生效。
26-
27-
新增API的前向计算,需要对数值的绝对正确性进行验证,需要有通过numpy或其他数学方法实现的函数的对比结果。
28-
29-
新增API的反向计算,需要复用现有单测框架反向计算验证方式保障反向正确性。
30-
31-
- 使用Python组合方式新增的API,由于反向计算已经在各组合API单测中分别验证了,因此,该API的反向计算不要求验证。
32-
- 如现有单测框架无法满足要求,需要通过numpy推导或函数直接实现反向等方式验证反向计算结果正确性。
33-
34-
异常测试,对于参数异常值输入,应该有友好的报错信息及异常反馈,需要有相关测试Case验证。
35-
36-
## 文档测试
37-
38-
中文文档、英文文档齐全,内容一一对应。
39-
40-
文档清晰可读,易于用户使用
41-
42-
给出易于理解的api介绍,文字描述,公式描述。
43-
44-
参数命名通俗易懂无歧义,明确给出传参类型,对参数含义以及使用方法进行详细说明,对返回值进行详细说明。
45-
46-
异常类型和含义进行详细说明。
47-
48-
示例代码需要做到复制粘贴即可运行,并且需要明确给出预期运行结果(如果可以)。
49-
50-
阅读无障碍:无错别字、上下文连贯、内容清晰易懂、链接可正常跳转、图片公式显示正常。
1+
# API单测开发及验收规范
2+
3+
## API单测开发规范
4+
5+
API单测的测试点需覆盖以下场景:
6+
7+
- **编程范式场景**:常规覆盖动态图和静态图的测试场景,如果仅支持其中一种,需要在设计文档RFC和API文档中体现。
8+
- **硬件场景**:常规需覆盖CPU、GPU两种测试场景,如果仅支持其中一种,需要在设计文档RFC和API文档中体现。部分需覆盖XPU、ARM等硬件场景。
9+
- **Tensor精度场景**:常规需要支持FP32、FP64,部分需支持FP16、INT8、INT16、INT32、INT64等。
10+
- **参数组合场景**:常规覆盖API的全部入参,需要对全部入参进行参数有效性和边界值测试,同时可选参数也需有相应的测试覆盖。
11+
- **计算精度**:需要保证前向计算、反向计算的精度正确性。
12+
- 前向计算:需要有通过numpy或其他数学方法实现的函数的对比结果。
13+
- 反向计算:需要复用现有单测框架反向计算验证方式保障反向正确性。注意:1)使用Python组合方式新增的API,由于反向计算已经在各组合API单测中分别验证了,因此,该API的反向计算不要求验证。2)如现有单测框架无法满足要求,需要通过numpy推导或函数直接实现反向等方式验证反向计算结果正确性。
14+
- **异常测试**:需对于参数异常值输入,应该有友好的报错信息及异常反馈。
15+
- 除了以上,还需注意:
16+
- [OP单测必须使用大尺寸输入](https://github.com/PaddlePaddle/Paddle/wiki/OP-test-input-shape-requirements)
17+
- [反向Op必须调用check_grad](https://github.com/PaddlePaddle/Paddle/wiki/Gradient-Check-Is-Required-for-Op-Test)
18+
- [单测精度中atol, rtol, eps, max_relative_error, 不允许自行放大阈值](https://github.com/PaddlePaddle/Paddle/wiki/OP-test-accuracy-requirements)
19+
- [OP单测精度必须覆盖float64](https://github.com/PaddlePaddle/Paddle/wiki/Upgrade-OP-Precision-to-Float64)
20+
- [Op单测必须通过“编译时/运行时一致性检查”](https://github.com/PaddlePaddle/Paddle/wiki/Compile_vs_Runtime-Check-Specification)
21+
- [Sequence相关Op单测中必须包含batch size为1的LoDTensor输入](https://github.com/PaddlePaddle/Paddle/wiki/It-is-required-to-include-LoDTensor-input-with-batch_size=1-in-sequence-OP-test)
22+
- [Sequence相关Op单测中必须包含instance size为0的LoDTensor输入](https://github.com/PaddlePaddle/Paddle/wiki/It-is-required-to-include-LoDTensor-input-with-instance_size=0-in-sequence-OP-test)
23+
24+
## API单测验收规范
25+
26+
API单测的验收包含两方面,一方面是要验收是否符合上述的开发规范,另一方面要验收是否符合以下的通用规范:
27+
28+
- **命名规范**
29+
- 单测中需要有充分的断言检查,单测case禁止使用test1/test2等无实际含义的命名方式。
30+
- API单测命名、参数命名、暴露方式、代码目录层级需要与设计文档保持一致,可参考[API通用设计文档](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/dev_guides/api_contributing_guides/api_design_guidelines_standard_cn.html)要求。
31+
- **提交规范**
32+
- 单元测试内容需要和开发代码放在同一个PR提交,后续修改也需要基于此PR。
33+
- 对于API单测增强任务,需在PR描述中(可参考 [PR41191](https://github.com/PaddlePaddle/Paddle/pull/41191))写明每个算子缺失的单测、问题定位及修复思路的简单描述
34+
- **覆盖率规范**:PR需要通过所有的CI验证,且`PR-CI-Coverage`需要满足新增代码行覆盖率达到90%以上,覆盖率信息可通过CI详情页面查看,如下:
35+
![coverage_not_pass.png](./images/coverage_not_pass.png)
36+
- **耗时规范**
37+
- 新增单测的执行不允许超过15s,`PR-CI-Coverage`有相应的检查,检查逻辑可见 `tools/check_added_ut.sh`。如果你新增的单测无法在15s内执行完成,可以尝试减少数据维度(可见[链接](https://github.com/PaddlePaddle/Paddle/pull/42267/commits/17344408d69f10e9fe5cf3200be1e381bc454694#diff-02f1ef59dfd03557054d7b20c9128ac9828735fc1f8be9e44d0587a96a06f685L236))或通过在[CMakeLists.txt](https://github.com/PaddlePaddle/Paddle/blob/a1d87776ac500b1a3c3250dd9897f103515909c6/python/paddle/fluid/tests/unittests/CMakeLists.txt#L617-L618)指定该单测的Timeout时间。如果你通过修改Timeout时间,你需要在PR描述中说明原因,同时会有相关同学review后进行approve后才能合入。原则上Timeout设定时间不能超过120s。
38+
![add_ut.png](./images/add_ut.png)
39+
- 现有单测的修改原则上不允许超过120s,`PR-CI-Coverage`有相应的检查,若有特殊情况可修改[CMakeLists.txt](https://github.com/PaddlePaddle/Paddle/blob/a1d87776ac500b1a3c3250dd9897f103515909c6/python/paddle/fluid/tests/unittests/CMakeLists.txt#L617-L618)文件中该单测的Timeout时间,处理逻辑同上诉新增单测超过15s一致。
40+
- **单测retry机制**:为提高单测执行效率,所有的单测均以一定的并发度执行,而这样的策略可能会引起单测随机挂。因此对失败的单测设定了retry机制,一共retry四次,如果成功率未达到50%,就认为该单测可能存在问题,CI失败。
5141

5242
## 交流与改进
5343

54-
提测代码的单测部分必须paddlepaddle测试人员review,确保完整覆盖了待测功能点后,会给予approved。如果review过程中发现测试缺失和遗漏的测试点,会通过github代码行comment的和request changes的方式交流改进,待PR修改完毕后给予approved。
44+
PR内容会有Paddle同学及Paddle QA同学进行review,确保完整覆盖了待测功能点后,会给予approved。
45+
46+
若review过程中发现测试缺失和遗漏的测试点,会通过github代码行comment的和request changes的方式交流改进,待PR修改完毕后给予approved。
5547

5648
## 后续维护
5749

0 commit comments

Comments
 (0)