From 20deb739b239aab1df4002d4583f1734d43aacae Mon Sep 17 00:00:00 2001 From: WuRangyu Date: Wed, 5 Aug 2026 19:08:37 +0800 Subject: [PATCH] =?UTF-8?q?doc:=20ABAP=E7=BC=96=E7=A0=81=E8=A7=84=E5=88=99?= =?UTF-8?q?(=E7=94=B1Rangyu=E7=BB=B4=E6=8A=A4,=E8=B4=A8=E6=A3=80=E5=91=98?= =?UTF-8?q?=E5=AE=A1=E6=9F=A5=E6=A0=87=E5=87=86)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- references/abap-coding-rules.md | 118 ++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 references/abap-coding-rules.md diff --git a/references/abap-coding-rules.md b/references/abap-coding-rules.md new file mode 100644 index 0000000..1eb73e8 --- /dev/null +++ b/references/abap-coding-rules.md @@ -0,0 +1,118 @@ +# ABAP 编码规则(质检标准) + +> 维护者:Rangyu | 版本:v1.0 | 2026-08-05 +> +> 本规则文档由 **Rangyu(老板)维护**,质检员在代码审计时以此文档为唯一标准。 +> 质检结果分为:✅合规 / ❌违规(必须修复) / ⚠️建议(推荐修复) + +--- + +## 1. 安全规则(Security) + +| ID | 规则 | 判定 | 示例 | +|----|------|------|------| +| S01 | 生产代码中**禁止硬断点**(BREAK-POINT) | ❌违反 | `BREAK-POINT.` → 删除 | +| S02 | 关键数据访问前**必须 AUTHORITY-CHECK** | ❌违反 | 聊天记录读取、配置维护、表维护 | +| S03 | SQL 注入防护:**所有变量必须用 @ 转义** | ✅合规 | `WHERE field = @lv_var` | +| S04 | 敏感数据(聊天内容、用户信息)需脱敏或审计 | ⚠️建议 | `zidt_chatlog` message_body 字段 | +| S05 | | | | +| S06 | | | | +| S07 | | | | + +*(Rangyu 补充更多安全规则...)* + +--- + +## 2. 性能规则(Performance) + +| ID | 规则 | 判定 | 示例 | +|----|------|------|------| +| P01 | 禁止 `SELECT *`,仅查询所需字段 | ⚠️建议 | `SELECT field1, field2 FROM ...` | +| P02 | 禁止无 WHERE 条件的全表扫描(小配置表除外) | ⚠️建议 | `SELECT ... FROM ztable WHERE ...` | +| P03 | 大表查询必须有索引支撑 | ⚠️建议 | SE11 检查索引 | +| P04 | 循环内禁止 SQL 查询 | ❌违反 | LOOP 内 SELECT | +| P05 | 循环字符串拼接用 `CONCATENATE` 单次操作 | ⚠️建议 | 避免 LOOP 内 `&&` | +| P06 | | | | +| P07 | | | | + +*(Rangyu 补充更多性能规则...)* + +--- + +## 3. 可维护性规则(Maintainability) + +| ID | 规则 | 判定 | 示例 | +|----|------|------|------| +| M01 | 重复代码超过 80% 相似 → 提取公共方法/FORM | ❌违反 | 3处 AI 调用重复约 90% | +| M02 | 每个 FORM/方法不超过 200 行 | ⚠️建议 | | +| M03 | 禁止**裸硬编码字符串**(模型名、GUI状态、事务码) | ⚠️建议 | 用常量 `CONSTANTS c_model TYPE ... VALUE 'qwq-32b'` | +| M04 | 关键逻辑必须有注释 | ⚠️建议 | | +| M05 | 无用变量/死代码必须清理 | ⚠️建议 | `gs_tool-END` 赋值未消费 | +| M06 | | | | +| M07 | | | | + +*(Rangyu 补充更多可维护性规则...)* + +--- + +## 4. 错误处理规则(Error Handling) + +| ID | 规则 | 判定 | 示例 | +|----|------|------|------| +| E01 | `sy-subrc <> 0` 后**不能静默处理** | ❌违反 | `IF sy-subrc <> 0. " 错误处理 ENDIF.` → 必须 MESSAGE/EXIT | +| E02 | API 调用必须有异常保护(CATCH) | ⚠️建议 | HTTP 调用、RFC 调用 | +| E03 | 数据库操作必须有错误处理 | ⚠️建议 | COMMIT/ROLLBACK | +| E04 | | | | +| E05 | | | | + +*(Rangyu 补充更多错误处理规则...)* + +--- + +## 5. NW 7.40 兼容规则(7.40 Compatibility) + +| ID | 规则 | 判定 | 示例 | +|----|------|------|------| +| C01 | **禁止 `DATA(...)` inline 声明** | ❌违反 | `DATA(lv_x) = ...` → `DATA lv_x TYPE ...` | +| C02 | Open SQL `@` 转义**全局一致** | ❌违反 | 不能混用 `@lv` 和 `lv` | +| C03 | 禁止字符串模板 `\|...\|` | ❌违反 | 用 `CONCATENATE` 代替 | +| C04 | 禁止 `WITH EMPTY KEY` | ❌违反 | 用 `WITH DEFAULT KEY` | +| C05 | LOOP AT SCREEN 逻辑避免重复 | ⚠️建议 | 提取公共 FORM | +| C06 | | | | +| C07 | | | | + +*(Rangyu 补充更多 7.40 兼容规则...)* + +--- + +## 6. 代码风格规则(Style) + +| ID | 规则 | 判定 | 示例 | +|----|------|------|------| +| T01 | 命名遵循 SAP 规范(Z开头自定义) | ✅合规 | `ZIDTR_AI_ASSISTANT` | +| T02 | 变量命名语义化 | ⚠️建议 | `lv_date` 优于 `lv_d` | +| T03 | 注释语言统一(中/英) | ⚠️建议 | | +| T04 | | | | +| T05 | | | | + +*(Rangyu 补充更多风格规则...)* + +--- + +## 附录:今天质检发现的典型违规 + +| 程序 | 问题 | 规则ID | 行号 | +|------|------|--------|------| +| ZIDTR_AI_ASSISTANT | 生产代码 BREAK-POINT | S01 | L44 | +| ZIDTR_AI_ASSISTANT | 权限检查缺失 | S02 | 全文 | +| ZIDTR_AI_ASSISTANT | 3处代码重复~90% | M01 | L464-667 | +| ZIDTR_AI_ASSISTANT | 硬编码模型名 | M03 | L207 | +| ZIDTR_AI_ASSISTANT | F4错误静默处理 | E01 | L170-172 | +| ZIDTR_AI_ASSISTANT | DATA(...) inline | C01 | L152等6处 | +| ZIDTR_AI_ASSISTANT | @转义混用 | C02 | L154/259 | + +--- + +> **使用方式**:质检员读取本文件 → 逐条对照代码 → 输出 `✅/❌/⚠️` 审计报告。 +> +> **维护方式**:Rangyu 随时增删规则,更新后通知小迅同步到质检员的审查标准。