27.3 程式碼理解與分析進階
程式碼理解與分析概述
Claude Code 不僅能生成程式碼,還能深入理解和分析程式碼。透過高階的程式碼理解與分析能力,開發者可以更好地理解程式碼結構、識別潛在問題、最佳化程式碼效能。
代码结构分析
1. 依赖关系分析
示例:分析代码依赖关系
使用者請求: "分析這個專案的依賴關係"
Claude Code 會分析專案結構並生成依賴圖:
python
## 依赖关系分析
bash
├── __init__.py
├── models/
│ ├── __init__.py
│ ├── user.py # 依赖: db, bcrypt
│ ├── product.py # 依赖: db, Category
│ └── order.py # 依赖: db, User, Product
├── services/
│ ├── __init__.py
│ ├── auth_service.py # 依赖: User, jwt
│ ├── order_service.py # 依赖: Order, OrderItem, Product
│ └── payment_service.py # 依赖: Order, stripe
├── controllers/
│ ├── __init__.py
│ ├── user_controller.py # 依赖: UserService
│ ├── product_controller.py # 依赖: ProductService
│ └── order_controller.py # 依赖: OrderService
└── views/
├── __init__.py
├── user_views.py # 依赖: UserController
├── product_views.py # 依赖: ProductController
└── order_views.py # 依赖: OrderController
依赖层次:
Level 0: db, bcrypt, jwt, stripe
Level 1: User, Product, Category, Order, OrderItem
Level 2: UserService, ProductService, OrderService, PaymentService
Level 3: UserController, ProductController, OrderController
Level 4: UserViews, ProductViews, OrderViews
循环依赖检测:
✓ 无循环依赖
```
### 2. 模組關係圖
```python
```python
python
# 示例:生成模組關係圖
使用者請求:
"生成模組關係圖"
Claude Code 生成的模組關係圖:
## 模組關係圖
graph TD
A[app/__init__.py] --> B[models/]
A --> C[services/]
A --> D[controllers/]
A --> E[views/]
B --> B1[user.py]
B --> B2[product.py]
B --> B3[order.py]
C --> C1[auth_service.py]
C --> C2[order_service.py]
C --> C3[payment_service.py]
D --> D1[user_controller.py]
D --> D2[product_controller.py]
D --> D3[order_controller.py]
E --> E1[user_views.py]
E --> E2[product_views.py]
E --> E3[order_views.py]
B1 --> C1
B3 --> C2
B3 --> C3
C1 --> D1
C2 --> D3
C3 --> D3
D1 --> E1
D2 --> E2
D3 --> E3
B2 --> B3
## 依賴說明
- **models/**: 資料模型層,定義資料庫表結構
- **services/**: 業務邏輯層,處理核心業務邏輯
- **controllers/**: 控制器層,協調服務和模型
- **views/**: 檢視層,處理 HTTP 請求和響應
## 資料流向
```
## 代码质量分析
### 1. 代码复杂度分析
```python
python
# 示例:分析程式碼複雜度
使用者請求:
"分析這個函式的複雜度"
Claude Code 生成的分析報告:
## 程式碼複雜度分析
### 函式: process_order
def process_order(order_data):
"""處理訂單"""
result = {}
# 驗證訂單資料
if 'items' in order_data:
items = order_data['items']
if len(items) > 0:
total = 0
for item in items:
if 'price' in item and 'quantity' in item:
if item['price'] > 0 and item['quantity'] > 0:
total += item['price'] * item['quantity']
else:
raise ValueError('Invalid price or quantity')
else:
raise ValueError('Missing price or quantity')
result['total'] = total
if 'discount' in order_data:
discount = order_data['discount']
if discount > 0 and discount <= 1:
result['total'] *= (1 - discount)
else:
raise ValueError('Invalid discount')
if 'tax' in order_data:
tax = order_data['tax']
if tax >= 0:
result['total'] *= (1 + tax)
else:
raise ValueError('Invalid tax')
if 'shipping' in order_data:
shipping = order_data['shipping']
if shipping >= 0:
result['total'] += shipping
else:
raise ValueError('Invalid shipping')
else:
raise ValueError('No items in order')
else:
raise ValueError('Missing items')
if 'customer' in order_data:
result['customer'] = order_data['customer']
if 'address' in order_data:
result['address'] = order_data['address']
return result
### 複雜度指標
| 指標 | 值 | 等級 |
|------|-----|------|
| 圈複雜度 (Cyclomatic Complexity) | 12 | 高 |
| 認知複雜度 (Cognitive Complexity) | 15 | 高 |
| 巢狀深度 (Nesting Depth) | 5 | 高 |
| 函式長度 (Function Length) | 45 行 | 中 |
### 問題分析
1. **圈複雜度過高**: 12 個獨立路徑,建議降低到 10 以下
2. **認知複雜度過高**: 巢狀過深,難以理解和維護
3. **程式碼重複**: 多次驗證輸入,可以提取為獨立函式
### 最佳化建議
```
python
def validate_item(item):
"""验证商品项"""
if 'price' not in item or 'quantity' not in item:
raise ValueError('Missing price or quantity')
if item['price'] <= 0 or item['quantity'] <= 0:
raise ValueError('Invalid price or quantity')
def calculate_item_total(items):
"""计算商品总价"""
return sum(item['price'] * item['quantity'] for item in items)
def apply_discount(total, discount):
"""应用折扣"""
if discount <= 0 or discount > 1:
raise ValueError('Invalid discount')
return total * (1 - discount)
def apply_tax(total, tax):
"""应用税费"""
if tax < 0:
raise ValueError('Invalid tax')
return total * (1 + tax)
def apply_shipping(total, shipping):
"""应用运费"""
if shipping < 0:
raise ValueError('Invalid shipping')
return total + shipping
def process_order(order_data):
"""处理订单(优化后)"""
result = {}
# 验证并计算商品总价
if 'items' not in order_data or len(order_data['items']) == 0:
raise ValueError('No items in order')
for item in order_data['items']:
validate_item(item)
total = calculate_item_total(order_data['items'])
# 应用折扣
if 'discount' in order_data:
total = apply_discount(total, order_data['discount'])
# 应用税费
if 'tax' in order_data:
total = apply_tax(total, order_data['tax'])
# 应用运费
if 'shipping' in order_data:
total = apply_shipping(total, order_data['shipping'])
result['total'] = total
# 添加客户信息
if 'customer' in order_data:
result['customer'] = order_data['customer']
if 'address' in order_data:
result['address'] = order_data['address']
return result
### 优化后指标
| 指标 | 优化前 | 优化后 | 改善 |
|------|--------|--------|------|
| 圈复杂度 | 12 | 3 | 75% ↓ |
| 认知复杂度 | 15 | 2 | 87% ↓ |
| 嵌套深度 | 5 | 1 | 80% ↓ |
| 函数长度 | 45 行 | 30 行 | 33% ↓ |
### 2. 代码重复分析
```
``python
### 重复代码块 2
## 代码性能分析
### 1. 性能瓶颈识别
````python
def get_user_orders(user_id):
"""获取用户的所有订单(优化后)"""
# 使用 join 一次性加载所有数据
orders = db.session.query(Order).join(OrderItem).join(Product).filter(
Order.user_id == user_id
).all()
# 构建商品缓存
product_cache = {}
for order in orders:
for item in order.items:
if item.product_id not in product_cache:
product_cache[item.product_id] = item.product
# 构建结果
result = []
for order in orders:
order_data = {
'id': order.id,
'total_amount': order.total_amount,
'status': order.status,
'created_at': order.created_at,
'items': []
}
for item in order.items:
product = product_cache[item.product_id]
order_data['items'].append({
'product_id': item.product_id,
'product_name': product.name,
'quantity': item.quantity,
'price': item.price
})
result.append(order_data)
return result
```### 效能對比
| 指標 | 最佳化前 | 最佳化後 | 改善 |
|------|--------|--------|------|
| 查詢次數 | 1 + N + M × N | 1 | 99% ↓ |
| 執行時間 | 500ms | 50ms | 90% ↓ |
| 記憶體使用 | 10MB | 5MB | 50% ↓ |
```
### 2. 内存使用分析
# 示例:分析内存使用
用户请求:
"分析这个函数的内存使用"
Claude Code 生成的分析报告:
## 内存使用分析
### 函数: process_large_file
````python
`python
def process_large_file(file_path):
"""處理大檔案"""
with open(file_path, 'r') as f:
lines = f.readlines()
results = []
for line in lines:
data = json.loads(line)
processed_data = {
'id': data['id'],
'name': data['name'],
'value': data['value'] * 2
}
results.append(processed_data)
return results
```### 内存问题
- 文件大小: 1GB
- 内存占用: ~1GB
- 风险: 可能导致内存溢出
- 原始数据: lines
- 处理后数据: results
- 内存占用: ~2GB
### 优化建议
```
python
def process_large_file(file_path):
"""處理大檔案(最佳化後)"""
results = []
with open(file_path, 'r') as f:
for line in f:
data = json.loads(line)
processed_data = {
'id': data['id'],
'name': data['name'],
'value': data['value'] * 2
}
results.append(processed_data)
return results
### 進一步最佳化(流式處理)
````python
````python
def process_large_file_streaming(file_path, output_path):
"""流式处理大文件"""
with open(file_path, 'r') as input_file, \
open(output_path, 'w') as output_file:
for line in input_file:
data = json.loads(line)
processed_data = {
'id': data['id'],
'name': data['name'],
'value': data['value'] * 2
}
output_file.write(json.dumps(processed_data) + '\n')