RUM:基于规则与大模型的测试技能评价系统

可用于软件测试教学、实训、考试与竞赛场景的智能化评价。结合规则引擎与大语言模型,实现测试用例、代码等自动化评分,支持结果统计、学情分析与作弊检测,平衡效率与智能化。【此简介由AI生成】

分支2Tags1
文件最后提交记录最后更新时间
2 个月前
2 个月前
4 个月前
2 个月前
4 个月前
4 个月前

RUM: 基于规则 + 大模型的测试技能评价系统

RUM 是一个面向软件测试教学、实训、考试与竞赛场景的智能化测试技能评价系统。系统结合规则引擎与大语言模型(Large Language Model, LLM),能够对学生或参评者提交的测试用例、测试代码、截图材料和执行结果进行自动化评分、结果统计与学习分析。

传统测试能力评价往往依赖人工阅卷,存在评分成本高、标准不一致、反馈周期长和班级分析困难等问题。RUM 将可明确判定的规范项交由规则引擎处理,将需求理解、测试用例合理性、语义覆盖等开放性评价交由大模型辅助判断,从而在效率、稳定性和智能化之间取得平衡。

核心能力

  • 测试用例自动评分:读取需求文档与学生提交的测试用例文件,对用例编号、模块名称、执行步骤、输入数据、需求覆盖和完整性进行评价。
  • 测试代码自动评分:支持对 Python、Java 等提交代码进行结构解析、关键点识别和覆盖情况评分。
  • 规则与大模型协同评价:规则引擎处理格式、数量、命名、提交时间等确定性指标,大模型处理需求语义、测试充分性和评价说明。
  • 评分结果管理:支持按考试、案例、学生和需求维度保存、查询和汇总评分结果。
  • 学生个人分析报告:基于测试用例评分、代码评分和需求完成情况生成个人分析报告。
  • 班级统计与学情分析:汇总全班得分、需求完成情况和共性薄弱点,辅助教学复盘。
  • 作弊与相似性检测:支持对代码和测试用例内容进行相似性分析,辅助发现异常提交。
  • 远程算分服务:提供任务提交、进度查询、结果获取、报告上传等接口,便于接入教学平台、竞赛平台或实验平台。
  • 模型与服务配置:支持配置算分模型、报告生成模型、学情分析模型、OCR 服务、OSS 存储和 API Token 鉴权。

应用场景

RUM 可应用于高校软件测试课程、职业院校实训、企业测试培训、在线考试、测试技能竞赛和自动化评测平台建设。

在教学场景中,教师可将需求文档和学生提交材料导入系统,由 RUM 自动完成初步评分与反馈生成,降低人工批改成本。在考试和竞赛场景中,外部平台可通过远程算分接口提交任务,系统在后台批量完成评分并返回结果。在企业培训场景中,RUM 可用于评估测试人员对需求理解、测试设计、测试代码实现和提交规范的综合能力。

技术栈

后端:

  • Python 3
  • FastAPI
  • SQLite
  • pandas / openpyxl
  • javalang / ast
  • ReportLab
  • OpenAI-compatible Chat Completions API
  • 可选:阿里云 OSS、OCR 服务

前端:

  • Vue 3
  • Vite
  • Element Plus
  • Axios
  • ECharts
  • highlight.js
  • xlsx

部署相关:

  • Nginx
  • Docker / Docker Compose(当前仓库提供前端容器构建配置)

项目结构

.
├── backend/
│   ├── app/
│   │   ├── config/
│   │   │   └── config.yaml              # 服务配置,默认不包含私有凭证
│   │   ├── database/
│   │   │   ├── init.sql                 # 初始化 SQL 片段
│   │   │   └── scores.db                # 运行时 SQLite 数据库
│   │   ├── data/                        # 运行数据与提交材料目录
│   │   ├── main.py                      # FastAPI 应用入口
│   │   ├── models/                      # Pydantic 数据模型
│   │   └── services/                    # 自动评分、报告、鉴权、数据处理等服务
│   └── requirements.txt                 # 后端依赖
├── frontend/
│   ├── src/
│   │   ├── components/                  # 通用组件
│   │   ├── router/                      # 前端路由
│   │   ├── services/                    # API 与鉴权封装
│   │   └── views/                       # 页面视图
│   ├── Dockerfile                       # 前端构建与 Nginx 镜像
│   ├── nginx.conf                       # 前端静态资源与 API 代理配置
│   ├── package.json
│   └── vite.config.js
├── docs/                                # 接口说明文档
├── docker-compose.yml                   # 前端容器编排示例
└── README.md

快速开始

1. 克隆项目

git clone https://gitcode.com/AI4SE/RUM.git
cd RUM

2. 启动后端

进入后端目录并安装依赖:

cd backend
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

如果运行时报缺少可选依赖,可根据使用功能补充安装:

pip install openai reportlab requests PyYAML opencv-python oss2

启动 FastAPI 服务:

uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload

后端默认监听 http://127.0.0.1:8000。启动时系统会初始化 SQLite 数据库,并创建默认管理员账号。

默认管理员用户名为 admin。密码建议通过环境变量显式配置:

export AUTH_DEFAULT_USERNAME=admin
export AUTH_DEFAULT_PASSWORD=your-strong-password

如果未配置 AUTH_DEFAULT_PASSWORD,系统会在首次创建管理员时生成临时密码,并打印在后端启动日志中。

3. 启动前端

打开新的终端:

cd frontend
npm install
npm run dev

前端开发服务默认通过 Vite 启动,vite.config.js 已将 /api 代理到 http://127.0.0.1:8000。

访问:

http://127.0.0.1:5173

4. 构建前端

cd frontend
npm run build

构建产物会输出到 frontend/dist/。

5. 使用 Docker 启动前端

仓库当前提供的是前端容器构建配置:

docker compose up -d --build

默认访问地址:

http://127.0.0.1:8099

注意:当前 docker-compose.yml 只包含前端服务;后端需要单独启动,或根据实际部署环境自行补充后端 Dockerfile 与服务编排。

配置说明

主要配置文件位于:

backend/app/config/config.yaml

默认配置中的凭证字段为空。部署前请根据实际环境填写,或在系统配置页中维护。

API Token 鉴权

用于远程服务调用:

api_auth:
  enabled: true
  header_name: X-Api-Token
  token: ''

建议在生产环境中设置足够复杂的 Token,并通过 HTTPS 访问服务。

大模型配置

系统支持 OpenAI-compatible Chat Completions API。可配置全局默认连接,也可为不同用途指定不同模型:

  • 算分模型:用于测试用例自动评分和代码自动评分。
  • 报告模型:用于生成学生个人分析报告。
  • 学情模型:用于生成班级学情分析。

配置示例:

remote_score:
  models:
    api_defaults:
      api_key: ''
      base_url: https://api.moonshot.cn/v1
    selection:
      scoring_profile_id: moonshot-v1-8k
      report_profile_id: kimi-k2_5
      class_analysis_profile_id: kimi-k2_5

也可以通过环境变量提供大模型 API Key:

export LLM_API_KEY=your-api-key

系统还兼容以下环境变量:

export MOONSHOT_API_KEY=your-api-key
export OPENAI_API_KEY=your-api-key

OSS 配置

用于远程算分场景下下载提交材料、上传评分结果和报告:

oss:
  endpoint: ''
  bucket_name: ''
  access_key_id: ''
  access_key_secret: ''
  download_path: app/oss_downloads

也可通过环境变量设置:

export OSS_ACCESS_KEY_ID=your-access-key-id
export OSS_ACCESS_KEY_SECRET=your-access-key-secret

OCR 配置

OCR 默认关闭。若评分规则依赖截图文字识别,可在配置页或配置文件中启用:

remote_score:
  ocr:
    enabled: false
    endpoint: http://cn-hangzhou.api.ydocr.com/ocr
    user_id: ''
    user_key: ''

数据目录约定

系统默认从 backend/app/data/ 读取考试、案例和学生提交材料。典型目录结构如下:

backend/app/data/
└── {exam_id}/
    └── {case_id}/
        ├── 需求文档.xlsx
        └── {student_id}/
            ├── web_testcase/
            │   └── testcase_*.xlsx
            ├── web_code/
            │   └── code_*.py 或 code_*.java
            └── web_screenshot/
                └── screenshot_*.png / .jpg / .zip

需求文档通常包含以下字段:

  • 需求编号
  • 需求内容
  • 数量
  • 模块名称
  • keywordslist 或 keywordslists(用于代码覆盖与关键点评分)
  • 可选:software_name
  • 可选:standard_score

测试用例文件通常包含以下字段:

  • 测试用例编号
  • 模块名称
  • 需求编号
  • 用例说明
  • 前置条件
  • 执行步骤
  • 输入数据
  • 预期结果
  • 实际结果
  • 截图文件名

主要页面

  • 评分页面:查看学生提交内容,执行测试用例自动评分、代码自动评分和人工修订。
  • 分数统计:按考试和案例汇总学生评分结果,生成统计报告。
  • 数据管理:管理需求文档、学生信息和提交材料。
  • 远程算分配置:配置模型、OSS、OCR、API Token、路径模板和远程算分任务。
  • 登录页面:提供基础登录鉴权能力。

主要接口

以下为常用接口概览,完整细节可参考 docs/ 目录。

  • POST /api/login:登录并获取会话 Token。
  • GET /api/exams:获取考试列表。
  • GET /api/cases/{exam_id}:获取考试下的案例列表。
  • GET /api/students/{exam_id}/{case_id}:获取案例下的学生列表。
  • GET /api/submission/{exam_id}/{case_id}/{student_id}:获取学生提交内容。
  • GET /api/auto-score/{exam_id}/{case_id}/{student_id}/{requirement_number}:自动评分测试用例。
  • GET /api/auto-score-code/{exam_id}/{case_id}/{student_id}/{requirement_number}:自动评分代码。
  • POST /api/scores/{exam_id}/{case_id}/{student_id}/{requirement_number}:保存单个需求评分。
  • GET /api/scores/{exam_id}/{case_id}:获取案例评分汇总。
  • GET /api/scores-report/{exam_id}/{case_id}/pdf:生成班级分数统计 PDF。
  • POST /api/remote-score/start:启动远程算分任务。
  • GET /api/remote-score/status/{jobId}:查询远程算分任务状态。
  • GET /api/remote-score/result/{jobId}:获取远程算分任务结果。

评分维度

RUM 当前主要从测试用例和代码两个层面进行评价。

测试用例评分:

  • 规范性:用例编号、模块名称、执行步骤等是否符合要求。
  • 充分性:输入数据是否覆盖需求要求的场景。
  • 完整性:测试用例内容是否完整、可读、可执行。

代码评分:

  • 基础项:代码结构、文件提交、函数或方法匹配等。
  • 时间项:提交文件命名或时间戳是否符合规则。
  • 覆盖项:代码是否覆盖需求文档中的关键功能点。

不同任务可通过需求文档、评分规则和大模型提示词进行调整。

安全配置

RUM 默认不内置任何可用的第三方服务密钥。大模型、OSS、OCR、远程调用 Token 等凭证需要由部署方自行配置。

生产环境部署时推荐遵循以下实践:

  • 使用环境变量或安全配置中心管理 API Key、AccessKey、Token 等私有凭证。
  • 为远程算分接口配置足够复杂的 X-Api-Token。
  • 启用 HTTPS,避免会话、Token 和评分数据明文传输。
  • 定期轮换外部服务密钥,并限制密钥权限范围。
  • 按需备份 SQLite 数据库和提交材料目录。

仓库默认 .gitignore 已排除运行数据、依赖安装目录、数据库旁路文件和常见本地缓存:

backend/venv/
backend/.venv/
frontend/node_modules/
backend/app/data/
backend/app/oss_downloads/
*.db-wal
*.db-shm
.DS_Store

运行数据

系统运行过程中会在本地生成评分数据、提交材料缓存、远程下载文件和报告文件。默认相关目录包括:

  • backend/app/database/
  • backend/app/data/
  • backend/app/oss_downloads/

这些目录用于保存业务运行状态。部署方可根据实际场景配置备份、清理和持久化策略。

常见问题

后端启动时报缺少模块

请先安装 backend/requirements.txt。如果使用报告、OCR、OSS 或大模型能力,还可能需要安装可选依赖:

pip install openai reportlab requests PyYAML opencv-python oss2

大模型调用失败

请检查以下配置:

  • 是否配置了 LLM_API_KEY 或 remote_score.models.api_defaults.api_key。
  • base_url 是否为 OpenAI-compatible API 地址。
  • 模型名称是否与供应商账号可用模型一致。
  • 网络是否可访问模型服务。

前端无法访问后端

开发环境中,Vite 会将 /api 代理到 http://127.0.0.1:8000。请确认后端已启动,并检查 frontend/vite.config.js 中的代理地址。

生产环境中,Nginx 会代理 /api 请求。请根据实际后端地址修改 frontend/nginx.conf 中的 proxy_pass。

登录密码是什么

默认用户名为 admin。建议通过环境变量设置密码:

export AUTH_DEFAULT_PASSWORD=your-strong-password

如果没有设置,后端首次启动创建管理员时会生成临时密码,并打印在启动日志中。

开发建议

  • 保持评分规则、模型提示词和需求文档字段的一致性。
  • 对外部平台集成时优先使用 X-Api-Token 进行服务间鉴权。
  • 对生产部署启用 HTTPS,避免 Token、会话和评分数据明文传输。
  • 将密钥放在环境变量或安全配置中心,不要提交到代码仓库。
  • 对远程算分任务做好超时、重试和日志留存策略。

贡献指南

欢迎提交 Issue 和 Pull Request。建议在贡献前先说明修改目标、影响范围和验证方式。

推荐流程:

  1. Fork 本仓库。
  2. 创建功能分支。
  3. 完成修改并补充必要说明。
  4. 本地运行前后端基础检查。
  5. 提交 Pull Request。

致谢

RUM 面向软件测试教学与测评场景构建,感谢软件测试课程、实训平台、竞赛评测和大模型应用实践中的相关经验与反馈。

项目介绍

可用于软件测试教学、实训、考试与竞赛场景的智能化评价。结合规则引擎与大语言模型,实现测试用例、代码等自动化评分,支持结果统计、学情分析与作弊检测,平衡效率与智能化。【此简介由AI生成】

定制我的领域