You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Software_Architecture/.promptx/resource/domain/project-explainer/knowledge/code-analysis-techniques.kn...

208 lines
6.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 代码分析技术知识体系
## 静态代码分析技术
### 代码结构分析
- **类图分析**:类的继承关系、组合关系、依赖关系
- **调用图分析**:函数调用关系、调用深度、循环调用检测
- **数据流分析**:变量的定义-使用链、数据依赖关系
- **控制流分析**:程序执行路径、分支覆盖、循环结构
### 代码质量度量
```
复杂度度量
├── 圈复杂度 (Cyclomatic Complexity)
├── 认知复杂度 (Cognitive Complexity)
├── 嵌套深度 (Nesting Depth)
└── 函数长度 (Function Length)
耦合度度量
├── 传入耦合 (Afferent Coupling)
├── 传出耦合 (Efferent Coupling)
├── 不稳定性 (Instability)
└── 抽象度 (Abstractness)
内聚度度量
├── 功能内聚 (Functional Cohesion)
├── 顺序内聚 (Sequential Cohesion)
├── 通信内聚 (Communicational Cohesion)
└── 过程内聚 (Procedural Cohesion)
```
### 设计模式识别
- **创建型模式**:单例、工厂、建造者模式的代码特征
- **结构型模式**:适配器、装饰器、外观模式的识别
- **行为型模式**:观察者、策略、命令模式的分析
- **反模式识别**:代码异味、反模式的检测和分析
## 动态代码分析技术
### 运行时行为分析
- **性能分析**CPU使用率、内存使用、I/O操作分析
- **内存分析**:内存泄漏检测、内存使用模式分析
- **并发分析**:线程安全性、死锁检测、竞态条件
- **异常分析**:异常抛出路径、异常处理覆盖率
### 测试覆盖率分析
```
覆盖率类型
├── 语句覆盖率 (Statement Coverage)
├── 分支覆盖率 (Branch Coverage)
├── 条件覆盖率 (Condition Coverage)
├── 路径覆盖率 (Path Coverage)
└── 函数覆盖率 (Function Coverage)
```
## 架构分析技术
### 分层架构分析
- **层次识别**:表示层、业务层、数据层的识别
- **层间依赖**:层间调用关系、依赖方向分析
- **架构违规**:跨层调用、循环依赖的检测
- **接口分析**:层间接口设计的合理性评估
### 模块化分析
- **模块边界**:模块职责划分、边界清晰度
- **模块依赖**:模块间依赖关系、依赖强度
- **模块内聚**:模块内部元素的相关性
- **模块耦合**:模块间的耦合类型和强度
### 组件架构分析
```
组件分析维度
├── 功能维度
│ ├── 单一职责原则
│ ├── 开闭原则
│ └── 接口隔离原则
├── 结构维度
│ ├── 组件大小
│ ├── 组件复杂度
│ └── 组件依赖
└── 质量维度
├── 可测试性
├── 可维护性
└── 可扩展性
```
## C++特定分析技术
### 内存管理分析
- **RAII模式**:资源获取即初始化的应用分析
- **智能指针使用**unique_ptr、shared_ptr、weak_ptr的使用模式
- **内存泄漏检测**:动态分配内存的生命周期分析
- **栈溢出检测**:递归深度、大对象栈分配分析
### 现代C++特性分析
- **移动语义**:移动构造函数、移动赋值操作符的使用
- **Lambda表达式**:闭包捕获、生命周期分析
- **模板元编程**模板特化、SFINAE技术的应用
- **并发编程**std::thread、std::mutex、std::atomic的使用
### Qt特定分析
- **信号槽连接**:连接类型、生命周期、性能影响
- **对象树管理**:父子关系、自动销毁机制
- **事件处理**:事件传播、事件过滤器使用
- **绘制性能**:重绘频率、绘制区域优化
## 代码审查技术
### 审查清单方法
```
功能正确性
├── 业务逻辑实现
├── 边界条件处理
├── 异常情况处理
└── 算法正确性
代码质量
├── 可读性
├── 可维护性
├── 性能考虑
└── 安全性
设计质量
├── 架构合理性
├── 设计模式应用
├── 接口设计
└── 扩展性考虑
```
### 同行评审技术
- **结构化评审**:按照预定义的检查点进行评审
- **场景化评审**:基于使用场景的代码评审
- **工具辅助评审**:使用静态分析工具辅助评审
- **增量评审**:针对代码变更的增量评审
## 重构分析技术
### 代码异味识别
- **长方法**:方法过长的识别和分解策略
- **大类**:类职责过多的识别和拆分
- **重复代码**:代码重复的检测和消除
- **数据泥团**:相关数据的组织和封装
### 重构安全性分析
- **依赖分析**:重构影响范围的分析
- **测试覆盖**:重构前的测试准备
- **渐进式重构**:小步骤重构的策略
- **回归测试**:重构后的验证方法
## 性能分析技术
### 性能瓶颈识别
- **CPU密集型分析**:算法复杂度、循环优化
- **I/O密集型分析**:文件操作、网络操作优化
- **内存密集型分析**:内存分配模式、缓存效率
- **并发性能分析**:线程竞争、锁争用分析
### 性能优化策略
```
优化层次
├── 算法层优化
│ ├── 时间复杂度优化
│ ├── 空间复杂度优化
│ └── 数据结构选择
├── 实现层优化
│ ├── 循环优化
│ ├── 内存访问优化
│ └── 编译器优化
└── 架构层优化
├── 缓存策略
├── 异步处理
└── 负载均衡
```
## 安全性分析技术
### 安全漏洞检测
- **缓冲区溢出**:边界检查、输入验证
- **注入攻击**SQL注入、命令注入的防护
- **权限提升**:权限检查、访问控制
- **信息泄露**:敏感信息的保护措施
### 安全编码实践
- **输入验证**:所有外部输入的验证策略
- **输出编码**防止XSS攻击的编码技术
- **错误处理**:安全的错误信息处理
- **加密应用**:密码学算法的正确使用
## 工具化分析技术
### 静态分析工具
- **Clang Static Analyzer**C++静态分析工具
- **Cppcheck**C++代码检查工具
- **SonarQube**:代码质量管理平台
- **PC-lint**C/C++静态分析工具
### 动态分析工具
- **Valgrind**:内存错误检测工具
- **AddressSanitizer**:地址错误检测工具
- **ThreadSanitizer**:线程错误检测工具
- **Perf**Linux性能分析工具
### Qt专用工具
- **Qt Creator Analyzer**Qt集成的分析工具
- **QML Profiler**QML性能分析工具
- **Qt Test Framework**Qt单元测试框架
- **Qt Designer**UI设计和分析工具