文档首页/ 代码检查 CodeArts Check/ 最佳实践/ 使用模型集执行代码检查
更新时间:2026-01-08 GMT+08:00
分享

使用模型集执行代码检查

应用场景

在项目代码规模持续增长和开发框架多样化的情况下,静态分析模型的应用显得尤为重要,它主要为业务代码中的特定逻辑或框架要求(如自定义内存分配器my_malloc需配套my_free、如标记用户输入get_user_input()为不可信源)提供精准检查,弥补通用规则对定制化场景覆盖不足的问题。

提前准备

在本地准备好“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. 使用华为云账号登录华为云控制台页面
  2. 单击页面左上角,在服务列表中选择开发与运维 > 软件开发生产线 CodeArts
  3. 单击“立即使用”,进入CodeArts服务首页。
  4. 在首页单击新建 > 新建项目,选用“Scrum”项目模板。项目名称填写“Scrum01”,其他参数保持默认即可。
  5. 单击“确定”后,进入到“Scrum01”项目下。

创建CodeArts Repo代码仓

  1. 在页面导航栏中选择代码 > 代码托管
  2. 进入代码托管页面,单击“新建仓库”
  3. 在新建仓库页面,选择“按模板新建”
  4. 单击“下一步”,搜索并选择“Cpp Demo”模板。
  5. 单击“下一步”,仓库名称填写“Repo01”“自动创建代码检查任务”参数需要去除勾选。其他参数保持默认即可。
  6. 单击“确定”完成仓库创建。
  7. 在根目录下单击“helloworld.cpp”文件名,单击代码框右上角,修改后的代码信息如下,然后单击“确定”

    #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 选择模型

创建代码检查任务

  1. 在代码检查任务列表页,单击“新建任务”,按照如下表格配置参数。

    表2 代码检查任务参数说明

    参数

    说明

    归属项目

    创建代码检查任务所属项目中创建的项目名称“Scrum01”。默认填写,无需配置。

    代码源

    选择需要检查的代码来源。选择“Repo”

    任务名称

    代码检查任务名称,可自定义。例如:CheckTask01。

    仓库

    选择创建CodeArts Repo代码仓中创建的代码仓“Repo01”

    分支

    保持默认“master”即可。

    检查语言

    选择“C/C++”

  2. 单击“确定”,完成代码检查任务的创建。

使用规则集和模型集执行代码检查任务

  1. 在代码检查任务概览页,单击“设置”
  2. 单击“规则集”,在右侧区域单击选择创建自定义规则集中创建的规则集“RuleList”
  3. 单击“编译配置”,将“编译工具选项”开关设置为状态,“编译工具”选择“cmake”。其他参数保持默认即可,然后单击“确定”

    图2 编译配置

  4. 单击“模型集”,在右侧区域单击选择创建模型集和模型中创建的模型集“ModelList”,并将开关设置为状态。
  5. 单击右上角“开始检查”

查看检查结果

  1. 在代码检查页面任务列表中,搜索创建代码检查任务创建的任务名称“CheckTask01”
  2. 单击任务名称,单击“检查日志”,在日志中搜索到如下的信息,表示本次执行的代码检查的任务使用了上传的模型文件中的规则。

    图3 检查结果

  3. 查看“代码问题”,可查看到该模型对应的代码问题。

    图4 代码问题

相关文档