Skill: Code Analysis
专业的代码分析技能,能够深入评估代码质量、识别潜在问题并提供改进建议。
技能描述
Code Analysis 技能提供全面的代码静态分析能力,包括代码质量评估、复杂度分析、代码重复检测和最佳实践检查。
核心功能
- 代码质量评估
-
可读性分析: 评估代码的清晰度和易理解性
-
命名规范: 检查变量、函数、类的命名是否合理
-
代码结构: 分析代码组织和模块化程度
-
注释质量: 评估注释的完整性和有效性
- 复杂度分析
-
圈复杂度: 计算代码的线性独立路径数量
-
认知复杂度: 评估代码理解的难易程度
-
嵌套深度: 检查代码的嵌套层级
-
函数长度: 分析函数的行数和职责
- 代码重复检测
-
重复代码: 识别相似的代码片段
-
复制粘贴: 检测可能的复制粘贴代码
-
重构机会: 建议将重复代码提取为函数
- 最佳实践检查
-
设计模式: 识别和评估设计模式的使用
-
SOLID原则: 检查是否违反SOLID原则
-
错误处理: 评估异常处理的完整性
-
资源管理: 检查资源的正确释放
支持的语言
-
JavaScript/TypeScript: ES6+、Node.js、React、Vue
-
Python: Python 3.x、Django、Flask
-
Java: Java 8+、Spring Boot
-
C#: .NET Core、ASP.NET
-
Go: 标准库和常用框架
-
Ruby: Ruby on Rails
-
PHP: Laravel、Symfony
使用方法
分析单个文件
/code-analysis src/components/UserProfile.jsx
分析整个目录
/code-analysis src/services/ --depth deep
生成分析报告
/code-analysis src/ --format report --output analysis-report.md
专注特定问题类型
/code-analysis src/utils/calculator.js --focus complexity
分析维度
功能性
-
逻辑正确性
-
边界条件处理
-
异常情况处理
-
业务逻辑实现
可维护性
-
代码模块化
-
耦合度评估
-
内聚性检查
-
扩展性分析
可测试性
-
单元测试友好度
-
依赖注入使用
-
Mock对象支持
-
测试覆盖建议
性能
-
算法效率
-
内存使用
-
I/O操作优化
-
并发安全性
质量评分系统
评分维度(每项10分)
可读性 (Readability)
-
9-10分: 代码如文档般清晰
-
7-8分: 整体清晰,少数地方需要注释
-
5-6分: 基本可读,需要改进命名和结构
-
3-4分: 难以理解,需要大量注释
-
1-2分: 几乎无法理解
复杂性 (Complexity)
-
9-10分: 结构简单,易于理解
-
7-8分: 适中复杂度,逻辑清晰
-
5-6分: 偏复杂,部分逻辑需要重构
-
3-4分: 过于复杂,难以维护
-
1-2分: 极度复杂,必须重构
可维护性 (Maintainability)
-
9-10分: 易于修改和扩展
-
7-8分: 较易维护,改动影响可控
-
5-6分: 维护有一定难度
-
3-4分: 难以维护,改动风险大
-
1-2分: 几乎无法维护
健壮性 (Robustness)
-
9-10分: 异常处理完善
-
7-8分: 主要异常有处理
-
5-6分: 基本异常处理
-
3-4分: 异常处理不足
-
1-2分: 几乎没有异常处理
分析报告模板
代码分析报告
基本信息
- 文件路径: src/components/UserProfile.jsx
- 语言: JavaScript/React
- 代码行数: 245行
- 函数数量: 8个
- 分析时间: 2024-01-15 14:30:00
质量评分
| 维度 | 评分 | 说明 |
|---|---|---|
| 可读性 | 7.5/10 | 整体清晰,部分变量名需要改进 |
| 复杂性 | 6.0/10 | 函数较长,嵌套较深 |
| 可维护性 | 6.5/10 | 耦合度适中,需要更好的模块化 |
| 健壮性 | 5.0/10 | 缺少边界条件处理 |
详细分析
🟢 优秀实践
- 使用了现代ES6+语法
- 组件结构清晰
- Props类型定义完整
🟡 需要改进
- 函数过长(第45-120行,75行)
- 嵌套层级过深(最深4层)
- 部分变量名不够描述性
🔴 严重问题
- 缺少错误边界处理
- 内存泄漏风险(事件监听器未清理)
改进建议
1. 重构长函数
将 handleUserUpdate 函数拆分为多个小函数:
// 当前代码(75行)
const handleUserUpdate = async (userData) => {
// 75行复杂逻辑...
};
// 建议重构为
const validateUserData = (data) => { /* 验证逻辑 */ };
const prepareUpdateData = (data) => { /* 数据准备 */ };
const updateUserProfile = async (data) => { /* 更新逻辑 */ };
const handleUpdateSuccess = (result) => { /* 成功处理 */ };
const handleUpdateError = (error) => { /* 错误处理 */ };
const handleUserUpdate = async (userData) => {
try {
validateUserData(userData);
const updateData = prepareUpdateData(userData);
const result = await updateUserProfile(updateData);
handleUpdateSuccess(result);
} catch (error) {
handleUpdateError(error);
}
};
2. 降低嵌套复杂度
使用早期返回减少嵌套:
// 改进前
const processUser = (user) => {
if (user) {
if (user.active) {
if (user.verified) {
// 处理逻辑
}
}
}
};
// 改进后
const processUser = (user) => {
if (!user) return;
if (!user.active) return;
if (!user.verified) return;
// 处理逻辑
};
学习资源
- Clean Code - Robert C. Martin
- Refactoring - Martin Fowler
- JavaScript最佳实践
## 配置选项
可以通过 `.code-analysis.json` 配置分析规则:
```json
{
"analysis": {
"maxFunctionLength": 30,
"maxNestingDepth": 3,
"maxComplexity": 10,
"excludePatterns": [
"*.test.js",
"*.spec.js",
"node_modules/**",
"dist/**"
],
"rules": {
"naming": {
"enabled": true,
"camelCase": true,
"snake_case": false
},
"complexity": {
"enabled": true,
"maxCognitiveComplexity": 15
},
"duplicates": {
"enabled": true,
"minLines": 5,
"similarity": 0.8
}
}
}
}
集成工具
IDE插件
- SonarLint: 实时代码质量检查
- ESLint: JavaScript代码质量工具
- Pylint: Python代码分析
- Checkstyle: Java代码风格检查
CI/CD集成
# GitHub Actions 示例
name: Code Analysis
on: [push, pull_request]
jobs:
analyze:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Run Code Analysis
run: |
npm install
npm run lint
npm run test:coverage
npx sonar-scanner
高级特性
1. 代码异味检测
- 长方法: 超过50行的方法
- 大类: 超过300行的类
- 长参数列表: 超过5个参数
- 重复代码: 相似度超过80%的代码片段
2. 架构分析
- 循环依赖: 检测模块间的循环引用
- 层级违反: 分析架构层次结构
- 耦合分析: 评估模块间耦合度
3. 演进分析
- 代码变更频率: 分析代码的稳定性
- 缺陷密度: 关联代码变更和bug报告
- 技术债务: 量化技术债务水平
最佳实践
开发阶段
- 编码前: 设计清晰的代码结构
- 编码中: 遵循编码规范和最佳实践
- 编码后: 进行自我代码审查
- 提交前: 运行自动化分析工具
团队协作
- 统一标准: 建立团队统一的编码规范
- 定期审查: 进行定期的代码审查会议
- 知识分享: 分享代码质量改进经验
- 持续改进: 根据分析结果改进开发流程
使用建议
- 渐进式改进: 不需要一次性修复所有问题
- 优先级排序: 优先修复严重和高优先级问题
- 自动化集成: 将分析工具集成到开发流程中
- 持续监控: 定期检查代码质量趋势
通过持续的代码分析和改进,可以显著提升代码质量,降低维护成本,提高开发效率。