Install
openclaw skills install p3c-code-quality执行代码质量检查测试,基于阿里巴巴 P3C 规范对代码进行全面检查,包括命名规范、异常处理、并发安全、数据库规范、OOP 规范、安全规约和单元测试规范。Invoke when user needs to verify code quality against P3C standards.
openclaw skills install p3c-code-quality本技能基于阿里巴巴Java开发手册P3C规范,对代码进行全面的质量检查测试。
本测试技能涵盖以下P3C规范领域:
本技能使用 Trae IDE 内置工具进行代码质量检查,无需额外脚本:
Glob 工具查找所有 .java 文件Read 工具读取文件内容SearchCodebase 进行代码结构分析GetDiagnostics 获取编译错误和警告Grep 工具配合正则表达式匹配 P3C 规范违规Write 工具生成 Markdown 格式报告文件查找工具
Glob - 查找所有 .java 文件LS - 列出目录结构代码读取工具
Read - 读取文件内容SearchCodebase - 搜索代码库中的特定模式和结构代码分析工具
Grep - 使用正则表达式搜索代码,匹配 P3C 规则GetDiagnostics - 获取 Trae IDE 的语言诊断信息(编译错误、警告等)报告生成工具
Write - 生成 Markdown 格式的测试报告本技能是聚合技能,会调用以下子技能进行详细检查:
| 子技能 | 描述 | 检查内容 |
|---|---|---|
| p3c-coding-style | 代码风格规范 | 命名风格、代码格式、常量定义、注释规约 |
| p3c-exception-logging | 异常与日志规范 | 异常处理、日志规约、NPE防护 |
| p3c-advanced-coding | 高级编程规范 | 集合处理、并发处理、控制语句 |
| p3c-mysql-database | MySQL数据库规范 | 建表规约、SQL语句、索引规约、ORM映射 |
| p3c-oop-standards | OOP编程规范 | 方法覆写、equals/hashCode、包装类、序列化 |
| p3c-security-rules | 安全规约 | 权限控制、SQL注入防护、XSS/CSRF防护、参数验证 |
| p3c-unit-testing | 单元测试规范 | AIR原则、测试粒度、测试覆盖率、BCDE原则 |
使用 Trae IDE 内置工具扫描指定的Java源代码文件或目录:
Glob 查找所有 .java 文件Read 读取文件内容SearchCodebase 进行代码结构分析GetDiagnostics 获取编译诊断信息根据P3C规范对代码进行逐项检查。本技能是聚合技能,会调用以下子技能进行详细检查:
p3c-coding-style - 代码风格规范
p3c-exception-logging - 异常与日志规范
p3c-advanced-coding - 高级编程规范
p3c-mysql-database - MySQL数据库规范
p3c-oop-standards - OOP编程规范
p3c-security-rules - 安全规约
p3c-unit-testing - 单元测试规范
使用 Grep 工具配合正则表达式匹配代码中的P3C规范违规:
将检查到的问题按严重程度分类:
使用 Write 工具生成详细的测试报告,包含:
执行测试时需要提供以下参数:
测试报告将生成到以下路径:
doc/{业务名称}/测试报告/{测试内容}/{测试接口名称}_{时间戳}.md
报告包含以下内容:
按P3C规范类别统计问题分布
每个问题包含:
输入:
- 代码路径:src/main/java/com/example/UserService.java
- 业务名称:用户管理
- 测试内容:代码质量检查
- 测试接口名称:UserService
输出:
- 报告路径:doc/用户管理/测试报告/代码质量检查/UserService_20250103143025.md
输入:
- 代码路径:src/main/java/com/example/order/
- 业务名称:订单系统
- 测试内容:代码质量检查
- 测试接口名称:OrderModule
输出:
- 报告路径:doc/订单系统/测试报告/代码质量检查/OrderModule_20250103143025.md
# P3C 代码质量检查报告
## 基本信息
- 测试时间:2026-03-11 14:30:25
- 测试人员:AI Assistant
- 测试范围:src/main/java/com/bgyfw/parking/
- P3C 版本:《阿里巴巴 Java 开发手册》2022 版
## 问题统计
- 问题总数:15
- 致命问题:2
- 严重问题:5
- 一般问题:6
- 轻微问题:2
## 问题详情
### 致命问题
【问题编号】P3C-001
【严重程度】致命
【规范类别】p3c-security-rules
【规则描述】SQL 注入防护 - 禁止使用字符串拼接 SQL
【代码位置】RefundOrderController.java:45
【问题说明】发现使用字符串拼接 SQL 语句,存在 SQL 注入风险
【修改建议】使用参数化查询或 MyBatis 的#{param} 方式
### 严重问题
【问题编号】P3C-002
【严重程度】严重
【规范类别】p3c-exception-logging
【规则描述】异常处理 - 禁止捕获 Exception 后不做任何处理
【代码位置】RefundOrderServiceImpl.java:78
【问题说明】catch 块中仅打印日志,未进行异常传播或返回错误状态
【修改建议】抛出运行时异常或返回明确的错误响应
### 一般问题
【问题编号】P3C-003
【严重程度】一般
【规范类别】p3c-coding-style
【规则描述】命名风格 - 方法名应使用动词 + 名词形式
【代码位置】RefundOrder.java:23
【问题说明】方法名"status"不够清晰,无法表达是获取状态还是设置状态
【修改建议】修改为 getStatus() 或 setStatus()
### 轻微问题
【问题编号】P3C-004
【严重程度】轻微
【规范类别】p3c-coding-style
【规则描述】注释规约 - 公共方法应有 Javadoc 注释
【代码位置】RefundOrderMapper.java:15
【问题说明】selectById 方法缺少 Javadoc 注释
【修改建议】添加/** */格式的 Javadoc 注释
// ❌ 错误示例
if (status == 1) {
// ...
}
// ✅ 正确示例
public static final int STATUS_ACTIVE = 1;
if (status == STATUS_ACTIVE) {
// ...
}
// ❌ 错误示例
String name = user.getName();
if (name.equals("admin")) {
// ...
}
// ✅ 正确示例
if ("admin".equals(user.getName())) {
// ...
}
// ❌ 错误示例
ExecutorService executor = Executors.newCachedThreadPool();
// ✅ 正确示例
ExecutorService executor = new ThreadPoolExecutor(
corePoolSize,
maximumPoolSize,
keepAliveTime,
TimeUnit.SECONDS,
new LinkedBlockingQueue<>(capacity),
new ThreadFactoryBuilder().setNameFormat("custom-%d").build(),
new ThreadPoolExecutor.CallerRunsPolicy()
);
以下规范违反将导致致命或严重问题:
以下规范违反将导致一般问题:
以下规范违反将导致轻微问题:
以下情况可以申请豁免检查:
// 方式 1:使用@SuppressNullWarning 注解(针对 NPE 检查)
@SuppressNullWarning
public String getUserInfo() { ... }
// 方式 2:使用注释标注(针对特定规则)
// CHECKSTYLE:OFF - 遗留代码,待后续重构
public void legacyMethod() { ... }
// CHECKSTYLE:ON
// 方式 3:TODO 标记(针对临时豁免)
// TODO [P3C-EXC-001] 待改进:需要完善异常处理
public void needImprove() { ... }
对于存量代码,建议采用以下策略:
target/、build/等构建输出目录.git/、.svn/等版本控制目录vendor/、lib/等第三方库目录generated/等代码生成目录# GitLab CI 示例
p3c_check:
stage: test
script:
- mvn checkstyle:check
- mvn spotbugs:check
现在,请提供以下信息开始测试: