在 Manus 中运行任何 Skill
一键导入
一键导入
一键在 Manus 中运行任何 Skill
开始使用code-review
星标71
分支21
更新时间2026年1月30日 04:08
代码审查方法论。用于系统化审查代码质量、安全性和最佳实践。
安装
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
SKILL.md
readonly菜单
代码审查方法论。用于系统化审查代码质量、安全性和最佳实践。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | code-review |
| description | 代码审查方法论。用于系统化审查代码质量、安全性和最佳实践。 |
本技能提供系统化的代码审查方法论和检查清单。
先获得整体印象:
# 查看文件结构
ls -la
# 统计代码行数
wc -l *.cs
# 查看最近修改
git log --oneline -10
按以下顺序检查:
SQL 注入: 是否使用参数化查询?
// ❌ 危险
$"SELECT * FROM Users WHERE Id = {userId}"
// ✅ 安全
"SELECT * FROM Users WHERE Id = @Id", new { Id = userId }
密码处理: 是否安全存储和比较?
// ❌ 危险
if (inputPassword == storedPassword)
// ✅ 安全(常量时间比较)
if (CryptographicOperations.FixedTimeEquals(hash1, hash2))
敏感数据: 日志中是否暴露密码/token?
// ❌ 危险
_logger.LogInfo($"User {user} logged in with password {password}");
// ✅ 安全
_logger.LogInfo($"User {user} logged in");
# 检查 NuGet 包漏洞
dotnet list package --vulnerable
边界条件: 空值、零、最大值是否处理?
异常处理: catch 块是否吞掉错误?
// ❌ 吞掉错误
catch (Exception) { }
// ✅ 至少记录
catch (Exception ex) { _logger.LogError(ex, "Operation failed"); throw; }
资源释放: IDisposable 是否正确处理?
// ❌ 可能泄露
var client = new HttpClient();
// ✅ 正确
using var client = new HttpClient();
.Result 或 .Wait()?
// ❌ 可能死锁
var result = GetDataAsync().Result;
// ✅ 安全
var result = await GetDataAsync();
N+1 查询: 循环中是否有数据库调用?
// ❌ N+1
foreach (var order in orders)
order.Customer = await db.GetCustomer(order.CustomerId);
// ✅ 批量加载
var customerIds = orders.Select(o => o.CustomerId).Distinct();
var customers = await db.GetCustomers(customerIds);
内存分配: 是否在热路径上频繁分配?
字符串拼接: 是否使用 StringBuilder?
LINQ 滥用: 是否多次枚举 IEnumerable?
# 使用 BenchmarkDotNet
dotnet add package BenchmarkDotNet
# 内存分析
dotnet-counters monitor --process-id <PID>
有意义: 名字是否描述意图?
// ❌ 含糊
var d = GetData();
// ✅ 清晰
var activeUsers = GetActiveUsers();
一致性: 是否遵循项目约定?
## 代码审查报告
**文件**: src/Services/AuthService.cs
**审查者**: [你的名字]
**日期**: [日期]
### 🔴 严重问题
1. **第 45 行 - SQL 注入风险**
```csharp
// 当前
var query = $"SELECT * FROM Users WHERE Email = '{email}'";
// 建议
var query = "SELECT * FROM Users WHERE Email = @Email";
email 未经验证直接使用。ProcessOrder 方法有 150 行,建议拆分为:
ValidateOrder()CalculateTotal()SaveOrder()
## 自动化工具
### 静态分析
```bash
# 使用 .NET Analyzers(内置)
# 在 .csproj 中启用
<PropertyGroup>
<EnableNETAnalyzers>true</EnableNETAnalyzers>
<AnalysisLevel>latest-recommended</AnalysisLevel>
</PropertyGroup>
# 使用 SonarQube
dotnet sonarscanner begin /k:"project-key"
dotnet build
dotnet sonarscanner end
# 使用 dotnet format
dotnet format
# 检查但不修改
dotnet format --verify-no-changes
一个类做太多事情。拆分为多个单一职责的类。
// ❌
if (status == 3) { ... }
// ✅
if (status == OrderStatus.Completed) { ... }
删除它。用版本控制恢复。
先让它正确工作,再考虑优化。