| 【test】: 重构att测试目录结构
Co-authored-by: zhang_shengjie<804425610@qq.com>
# message auto-generated for no-merge-commit merge:
!1730 merge develop into develop
【test】: 重构att测试目录结构
Created-by: zhang_shengjie
Commit-by: zhang_shengjie
Merged-by: cann-robot
Description:
# Pull Request
## 描述
### 一、主要解决的问题
#### 1.1 测试目录结构重构
原测试目录结构不符合镜像源码规范,UT和ST测试文件平铺在 testcase/ 下,难以维护。需要重构为严格镜像 compiler/graph/optimize/autofuse/att/ 源码模块的目录结构。
#### 1.2 静态检查告警
MR静态检查发现大量告警,包括:
- **超大函数** (>50行):测试代码中大量超长TEST_F函数、构建图函数
- **超大头文件** (>500行):general_solver.h 含1488行纯字符串数据
- **冗余/重复文件**:gelu/gelu_v2重复、create_struct重复、sample目录废弃
- **using namespace 违规**:多处使用 using namespace att 而非具体using声明
- **extern声明违规** (G.EXP.05-CPP):直接在cpp中extern声明外部变量
- **命名风格违规** (G.NAM.01):Python代码使用PascalCase而非snake_case
- **空行/格式违规** (G.FMT.03):函数间缺少空行
- **超大深度函数**:Python代码函数嵌套深度过大
### 二、修改方案
#### 2.1 目录结构重构
```
tests/autofuse/ut/att/testcase/ # UT镜像att源码结构
├── base/
├── concat/
├── gen_model_info/
│ ├── core/ # test_fa_ascir_graph, test_concat等
│ └── reuse_group_utils/
├── generator/
│ ├── core/
│ ├── preprocess/
│ └── solver_pass*/
└── util/
tests/autofuse/st/att/testcase/
├── source_mirror/ # ST镜像att源码(编译侧)
│ ├── generator/
│ ├── gen_model_info_content/
│ └── util/
└── scenario/ # ST场景测试(运行侧)
├── concat/
├── add_layer_norm/
├── matmul/
└── tiling_data/
```
#### 2.2 超大函数修复策略
- **提取辅助函数**:将重复的节点初始化、调度配置、内存分配代码提取为helper函数
- **长字符串提取为static const成员**:TEST_F中的超长表达式字符串改为类static成员
- **超大函数拆分为子函数**:如 GetExpectedSolverImplCodes 拆为8个 AppendSolverImplPart* 子函数
- **公共stub提取到common目录**:stub_model_info、stub_matmul_modelinfo等提取到 tests/autofuse/common/stub/
#### 2.3 其他告警修复
- **general_solver.h → general_solver_data.cpp**:超大头文件改为.cpp编译单元
- **extern声明 → include头文件**:新建 general_solver_data.h,通过include引用
- **删除sample目录**:已废弃的示例目录整体删除
- **删除solver_pass/src目录**:编译从ATT_DIR源码目录进行
### 三、代码修改流程图
#### 3.1 文件调用关系图
```mermaid
graph TD
subgraph ST_tests["ST测试"]
CMake["CMakeLists.txt"]
SM["source_mirror/"]
SC["scenario/"]
STUB["stub/"]
end
subgraph UT_tests["UT测试"]
UCMake["ut/att/CMakeLists.txt"]
UM["testcase/模块镜像/"]
end
subgraph Common["公共stub"]
CS["common/stub/"]
end
subgraph Source["ATT源码"]
ATT["compiler/.../autofuse/att/"]
end
CMake -->|编译| SM
CMake -->|编译| SC
CMake -->|编译| STUB
UCMake -->|编译| UM
SM -->|include| ATT
UM -->|include| ATT
SM -->|编译| CS
UM -->|编译| CS
style SM fill:#90EE90,stroke:#006400
style SC fill:#90EE90,stroke:#006400
style CS fill:#FFD700,stroke:#B8860B
style ATT fill:#e1f5ff,stroke:#4682B4
```
#### 3.2 超大函数修复流程
```mermaid
flowchart TD
Start([检测超大函数告警]) --> Type{告警类型}
Type -->|超大TEST_F| Extract["提取长字符串为static const成员"]
Type -->|超大构建函数| Split["拆分为子函数,通过引用参数传递"]
Type -->|超大头文件| Rename["重命名为.cpp编译单元"]
Type -->|extern声明| Header["新建.h头文件,改用include"]
Extract --> Verify1["语法检查"]
Split --> Verify2["语法检查"]
Rename --> Verify3["更新CMakeLists"]
Header --> Verify4["更新include路径"]
Verify1 --> Build["编译验证"]
Verify2 --> Build
Verify3 --> Build
Verify4 --> Build
Build --> Test["运行ST/UT测试"]
Test --> Pass([全部通过])
style Start fill:#90EE90
style Pass fill:#90EE90
style Type fill:#FFD700
```
## 变更类型
- [ ] Bug 修复
- [x] 代码风格更新(格式化,局部变量)
- [x] 重构(既不修复错误也不增加功能的代码变动)
- [ ] 新功能
- [x] 构建过程或辅助工具的变动
## 关联的Issue
<!-- 待关联 -->
## 如何测试
### 一 测试用例说明
#### 1.1 单元测试 (UT)
- att_ut 全量测试:855个测试用例,100%通过
- 涉及模块:gen_model_info、generator、preprocess、solver_pass等
#### 1.2 系统测试 (ST)
- att_st 全量测试:20个测试用例,100%通过
- 涉及场景:concat、matmul、add_layer_norm、ffn、reduce_split_penalty等
### 验证方法
```bash
# UT编译和运行
cd build/tests/autofuse/ut/att && make att_ut -j$(nproc) && ./att_ut
# ST编译和运行
cd build && make att_st -j$(nproc) && ./tests/autofuse/st/att/att_st
```
## 核对清单
- [x] 我的代码遵循了项目的代码风格
- [x] 我已对代码进行了自测
- [x] 我已更新了相关的文档
- [x] 我在标题中使用了合适的类型标签
- [x] 我已经详细阅读了贡献指南
## 其他信息
### 注意事项
1. 删除了整个 sample/ 目录(已废弃),相关ST不再编译
2. general_solver.h 重命名为 general_solver_data.cpp,需确认下游无直接include
3. 公共stub迁移到 tests/autofuse/common/stub/,UT和ST共享
4. CMakeLists.txt include 路径新增 general_solver 子目录
See merge request: cann/ge!1730 | 1 个月前 |