可用于软件测试教学、实训、考试与竞赛场景的智能化评价。结合规则引擎与大语言模型,实现测试用例、代码等自动化评分,支持结果统计、学情分析与作弊检测,平衡效率与智能化。【此简介由AI生成】
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 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。建议在贡献前先说明修改目标、影响范围和验证方式。
推荐流程:
- Fork 本仓库。
- 创建功能分支。
- 完成修改并补充必要说明。
- 本地运行前后端基础检查。
- 提交 Pull Request。
致谢
RUM 面向软件测试教学与测评场景构建,感谢软件测试课程、实训平台、竞赛评测和大模型应用实践中的相关经验与反馈。