
# 使用模型集执行代码检查
#### 应用场景
在项目代码规模持续增长和开发框架多样化的情况下，静态分析模型的应用显得尤为重要，它主要为业务代码中的**特定逻辑或框架要求**（如自定义内存分配器my_malloc需配套my_free、如标记用户输入get_user_input()为不可信源）提供精准检查，弥补通用规则对定制化场景覆盖不足的问题。
#### 约束限制
模型集为受限功能，仅[购买代码检查安全增强包](https://support.huaweicloud.com/price-devcloud/codearts_29_0016.html#section0)后才可使用该功能，任务设置启用模型集时，执行检查任务会占用增强包并发资源。
 #### 提前准备
在本地准备好"Model1.json"文件，文件中内容如下：
```
{
  "RulePackage": {
    "Language": "C++"
  },
  "Rules": {
    "TaintSourceRule": [
      {
        "Function":{
          "Function":{
            "Value":"get_user_input"
          }
        },
        "Source":{
          "OutArgs":"return",
          "TaintFlags":"UntrustedSource"
        }
      }
    ],
    "TaintSinkRule": [
      {
        "Function":{
          "Function":{
            "Value":"executeCmd"
          }
        },
        "Sink":{
          "InArgs":"0",
          "TaintFlags":"UntrustedSink"
        }
      }
    ]
  }
}
```
#### 操作流程
表1操作流程 
| **序号** | **步骤**                                                             | **说明**                                                                                                             |
|:---|:---|:---|
| 1      | [创建代码检查任务所属项目]       | 创建代码检查任务所属的项目。                                                                                                     |
| 2      | [创建CodeArts Repo代码仓] | 创建代码检查任务使用的代码仓。                                                                                                    |
| 3      | [创建自定义规则集]           | 创建带有"不可信的输入可能引起命令注入、格式化注入、SQL注入等注入类问题"规则的规则集。                                                                      |
| 4      | [创建模型集和模型]           | 创建模型集以及模型集中使用的模型文件。                                                                                                |
| 5      | [创建代码检查任务]         | 创建使用模型集检查的代码检查任务。                                                                                                  |
| 6      | [使用规则集和模型集执行代码检查任务]  | 配置代码检查任务使用的规则集和模型集。                                                                                                |
| 7      | [查看检查结果]              | 配置代码检查任务使用带有自定义规则的自定义规则集。 查看检查结果，确认使用的模型是否生效。 |
   
 #### 创建代码检查任务所属项目
1. 使用华为云账号[登录华为云控制台页面](https://console.huaweicloud.com/console)。
2. 单击页面左上角![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002051102128.png)，在服务列表中选择"开发与运维 \> 华为云码道 CodeArts"。
3. 单击"立即使用"，进入CodeArts服务首页。
4. 在首页单击"新建 \> 新建项目"，选用"Scrum"项目模板。项目名称填写"Scrum01"，其他参数保持默认即可。
5. 单击"确定"后，进入到"Scrum01"项目下。
 
 #### 创建CodeArts Repo代码仓
1. 在页面导航栏中选择"代码 \> 代码托管"。
2. 进入代码托管页面，单击"新建仓库"。
3. 在新建仓库页面，选择"按模板新建"。
4. 单击"下一步"，搜索并选择"Cpp Demo"模板。
5. 单击"下一步"，仓库名称填写"Repo01"，"自动创建代码检查任务"参数需要去除勾选。其他参数保持默认即可。
6. 单击"确定"完成仓库创建。
7. 在根目录下单击"helloworld.cpp"文件名，单击代码框右上角![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002419481098.png)，修改后的代码信息如下，然后单击"确定"。
   
   ```
   #include <iostream>
   char *get_user_input();
   void executeCmd(const std::string &command);
   int test01()
   {
       char *input = get_user_input();
       std::string cmd(input);
       executeCmd(cmd);
       return 0;
   }
   ```
   
   
 
 #### 创建自定义规则集
1. 在页面导航栏中选择"代码 \> 代码检查"。
2. 在代码检查任务列表页，单击"规则集"页签，进入规则集列表页面。
3. 单击"新建规则集"，在弹出的窗口设置"规则集名称"为"RuleList"，"检查语言"为"C/C++"。
4. 单击"确定"，进入到"规则集配置"页面。
5. 勾选"不可信的输入可能引起命令注入、格式化注入、SQL注入等注入类问题"规则。
6. 单击右上角"保存"，完成自定义规则集创建。
 
 #### 创建模型集和模型
1. 在代码检查任务列表页，单击"模型集"页签，进入模型集列表页面。
2. 单击"新建模型集"，在弹出的窗口设置"模型集名称"为"ModelList"。
3. 单击"确定"，进入到模型集配置页面。
4. 单击"新建模型"。
5. 单击"请上传模型文件"，选择[提前准备]中创建好的文件，单击"确定"。
6. 在"使用状态"为"未启用"的模型中勾选创建的模型，单击"保存"，然后在弹出的窗口中单击"确定"。 
   图1选择模型   
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002701490635.png "点击放大")
   
   
 
 #### 创建代码检查任务
1. 在代码检查任务列表页，单击"新建任务"，按照如下表格配置参数。 
   表2代码检查任务参数说明 
   | **参数** | **说明**                                                                                   |
   |:---|:---|
   | 归属项目   | [创建代码检查任务所属项目]中创建的项目名称"Scrum01"。默认填写，无需配置。 |
   | 代码源    | 选择需要检查的代码来源。选择"Repo"。                                                                    |
   | 任务名称   | 代码检查任务名称，可自定义。例如：CheckTask01。                                                            |
   | 仓库     | 选择[创建CodeArts Repo代码仓]中创建的代码仓"Repo01"。     |
   | 分支     | 保持默认"master"即可。                                                                          |
   | 检查语言   | 选择"C/C++"。                                                                               |
      
   
   
2. 单击"确定"，完成代码检查任务的创建。
 
 #### 使用规则集和模型集执行代码检查任务
1. 在代码检查任务概览页，单击"设置"。
2. 单击"规则集"，在右侧区域单击![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002419327718.png)选择[创建自定义规则集]中创建的规则集"RuleList"。
3. 单击"编译配置"，将"编译工具选项"开关设置为![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002419487570.png)状态，"编译工具"选择"cmake"。其他参数保持默认即可，然后单击"确定"。
   
   图2编译配置   
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002701610701.png "点击放大")
   
   
4. 单击"模型集"，在右侧区域单击![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002419339696.png)选择[创建模型集和模型]中创建的模型集"ModelList"，并将开关设置为![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002419500208.png)状态。
5. 单击右上角"执行检查"。
 
 #### 查看检查结果
1. 在代码检查页面任务列表中，搜索[创建代码检查任务]创建的任务名称"CheckTask01"。
2. 单击任务名称，单击"检查日志"，在日志中搜索到如下的信息，表示本次执行的代码检查的任务使用了上传的模型文件中的规则。 
   图3检查结果   
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002671730900.png "点击放大")
   
   
3. 查看"代码问题"，可查看到该模型对应的代码问题。 
   图4代码问题   
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002671571044.png "点击放大")
   
   
 
