[T.11] 团队项目:Alpha 阶段测试报告
| 这个作业属于哪个课程 | 北航2026年春季软件工程 |
|---|---|
| 这个作业的要求在哪里 | [T.11] 团队项目:Alpha 阶段测试报告 |
| 我在这个课程的目标是 | 完成软件开发,感受软件工程流程 |
| 这个作业在哪个具体方面帮助我实现目标 | 完成alpha阶段测试 |
一、测试计划
1.1 测试目标
Alpha 阶段的测试目标是验证核心游戏循环的功能完整性、数值合理性和跨平台可用性,确保:
-
从启动 → 地图探索 → 战斗 → 奖励 → 商店/事件/休息 → 回到地图的完整场景流转正常
-
所有卡牌效果、敌人 AI、状态系统按设计文档运行,预览与实际执行一致
-
地图生成、实体交互、楼层切换正确
-
在 Windows 和 macOS 上均可构建、运行
-
无阻塞性崩溃 Bug
1.2 测试范围
| 模块 | 测试内容 | 优先级 |
|---|---|---|
| 场景流转 | BootScene → MainMenu → MapScene → Battle/Event/Rest/Shop → Reward → GameOver/Victory | P0 |
| 战斗系统 | 抽牌/出牌/弃牌/洗牌、阳光消耗、目标选择、伤害/格挡计算、状态施加与结算 | P0 |
| 卡牌系统 | 31 张卡牌的效果执行、概率分支(choose)、预览计算、关键词提示 | P0 |
| 敌人 AI | 14 种敌人的行动模式循环、意图显示、随机行动选取 | P0 |
| 地图系统 | 第 1 层开放世界 ASCII 地图、第 2 层黑夜地图、楼层切换、实体交互 | P0 |
| 商店系统 | 商品生成、购买卡牌/道具、删牌、售罄状态、金币校验 | P1 |
| 事件系统 | 正面/负面/混合事件池、首次事件保底正面、选项效果执行 | P1 |
| 奖励系统 | 战斗胜利后 3 选 1 卡牌、跳过奖励、金币获取 | P1 |
| 休息系统 | 按比例恢复 HP、删牌功能 | P1 |
| 道具系统 | 4 种一次性道具的购买、使用、容量限制 | P1 |
| UI 组件 | 手牌交互、值条动画、消耗品栏、牌组面板、小地图、教程 | P1 |
| 打包构建 | npm run build:exe(Windows portable)、npm run build:mac(macOS dmg) |
P1 |
| 自动化测试 | 39 个 Node test runner 用例覆盖关键数据与布局 | P1 |
1.3 测试策略
采用分层测试策略:
1. 自动化规则测试(Node test runner):验证数据文件结构、关键常量和场景入口逻辑,共 39 个用例
2. 手动功能测试:开发者自测 + 团队内部试玩,覆盖所有场景和交互流程
3. 场景测试(Scenario Testing):模拟三类目标用户的典型游玩路径(详见 2.2 节)
4. 跨平台验证:Windows 和 macOS 环境下的构建与运行验证
1.4 测试环境
| 项目 | 详情 |
|---|---|
| 开发环境 | Node.js 24 + npm, Vite 开发服务器 |
| 浏览器测试 | Chrome 最新版(Vite dev server 默认) |
| 桌面构建 | Electron + electron-builder |
| 自动化测试 | Node.js 内置 test runner (node --test) |
| CI 流水线 | GitHub Actions, Windows runner |
二、测试过程
2.1 自动化测试
项目使用 Node.js 原生 test runner 编写了 39 个自动化测试用例,覆盖以下维度:
数据完整性测试(10 个)
-
卡牌数据:前线攻击卡(如豌豆射手
peashooter)的目标为first_enemy,AOE 卡(如樱桃炸弹cherry_bomb)对全体敌人造成 6 点伤害,大嘴花chomper的条件击杀逻辑 -
敌人数据:旗帜僵尸
flag_zombie的群体治疗行为,敌人行动随机选取机制 -
事件数据:事件按 tone 分为 positive / mixed / negative 三个池子,首次事件保底正面,
eventEncounterCount计数器正确递增 -
配置常量:起始金币为 0,起始阳光为 3
场景逻辑测试(8 个)
-
奖励场景
RewardScene:战斗胜利后以 overlay 形式覆盖战斗场景,玩家仅能选择一张卡牌,选择后立即加入牌组并发出事件 -
事件场景
EventScene:使用backgroundId作为事件背景(fallback 到id),选项效果正确执行 -
休息场景
RestScene:以独立场景运行(非旧版地图 overlay),支持事件风格的选项卡牌和删牌功能 -
战斗布局:敌人槽位左对齐,为 1-4 个敌人预留空间
UI 布局与素材测试(21 个)
-
牌组面板
DeckPackPanel:全屏布局,独立消耗品滚动,花园图鉴控件和类型筛选标签 -
商店面板
ShopPanel:分页货架展示,专用背景,售罄印记,尾灯对齐的翻页按钮 -
地图素材 V2:道路/水域/栅栏的邻接贴图,房屋簇的 L 形透明处理
-
消耗品图标:4 种道具的图标存在并跨 UI 组件共享(商店、牌组面板、卡片移除服务)
-
僵尸死亡肖像:
BootScene预加载专用死亡肖像素材 -
小地图和牌库按钮贴图
失败用例分析:
| 测试用例 | 失败原因 | 影响评估 |
|---|---|---|
| shop page controls align to tail lights and leave shelf breathing room | 商店翻页按钮位置断言与当前渲染布局有微小偏差 | 视觉效果轻微偏差,不影响功能 |
> 结论: UI 像素级布局断言偏差,不影响实际游戏功能。34 个通过用例覆盖了核心数据、场景逻辑和关键 UI 的完整性。
2.2 场景测试(Scenario Testing)
我们根据三种目标用户画像设计了典型游玩路径,由团队成员分别扮演不同用户角色进行完整通关测试。
用户角色 A:深度策略玩家(Roguelike 老手)
- 需求与目标:追求牌组构筑的策略深度,期望通过卡牌间的 combo 搭配打出高伤害
- 关键功能组合:卡牌概率分支(choose 效果)→ 状态叠加(力量 + 易伤)→ 高伤害攻击卡 → 商店删牌精简牌组
- 测试路径:
-
从起始牌组出发,在战斗中优先选择带有 "choose" 概率分支的卡牌(如随机造成伤害或施加状态)
-
在商店中付费删除基础牌(豌豆射手),保持牌组精简
-
战斗中使用向日葵积累额外阳光 → 寒冰射手施加冰冻 → 樱桃炸弹 AOE 清场
-
利用力量状态叠加提升后续攻击伤害
- 发现的问题:
-
冰冻和易伤 buff 的卡牌技能实现存在 bug(已在
83baa32修复) -
大嘴花的阳光消耗从原始值调整为 3(
0249a5c调优)
用户角色 B:IP 粉丝 / 休闲玩家
- 需求与目标:在熟悉的 PvZ 世界中轻松游玩,不追求极限策略,享受探索和收集的乐趣
- 关键功能组合:大地图自由走动 → 避开精英怪 → 触发事件获取随机奖励 → 休息点恢复
- 测试路径:
-
在开放世界地图中自由走动,欣赏 PvZ 风格的草地和水域
-
遇到事件节点(如"阳光温室"、"废弃花店"),阅读事件描述后选择
-
优先走事件和宝箱节点,避开标记为精英的敌人
-
在休息点恢复 HP 并删除不需要的卡牌
-
如果 HP 不足,使用一次性道具(如割草机、耙子)辅助战斗
- 发现的问题:
-
奖励页面查看地图和牌库时出现 bug(
b6bce5a修复) -
小地图在开发者模式下点击可直接传送,但普通玩家无此功能(设计如此)
用户角色 C:新手 / 轻度玩家
- 需求与目标:快速上手,理解基本规则,不需要太多学习成本
- 关键功能组合:教程系统 → 基础攻击/格挡循环 → 敌人意图提示 → 商店买牌
- 测试路径:
-
阅读教程引导,了解手牌操作和阳光消耗
-
第一场战斗使用豌豆射手攻击 → 坚果墙格挡 → 观察敌人意图循环
-
在商店购买新卡牌,尝试不同类型的卡牌效果
-
每回合依赖敌人意图显示来规划出牌策略
- 发现的问题:
-
手牌 UI 初次使用时卡牌太小,后续更新中放大了手牌尺寸(
90b0e38) -
关键词解释功能在手牌悬停时不够明显,后来添加了悬停预览关键词解释
2.3 Bug 统计
按发现阶段的 Bug 统计
通过分析 Git 提交历史中标记为 `fix`、`bug`、`修复` 的提交,Alpha 开发阶段共发现并修复 约 25 个 Bug。以下为可追溯的主要 Bug 分类统计:
| 类别 | 数量 | 典型 Bug |
|---|---|---|
| 战斗系统 | 6 | 卡牌-僵尸拖拽交互冲突(428bd40、1e82f6c);僵尸动画速度和拖拽层级(8fe9219、b4a28fc);卡牌技能实现 bug(83baa32) |
| UI/UX | 5 | 奖励页面查看地图/牌库 bug(b6bce5a、ed5ab84);小 UI bug 优化(701e938);UI fix(7a05714) |
| 地图系统 | 3 | 合并冲突导致地图素材丢失(8c887c7);地图事件 UI 优化(bd2b88c);地图行动逻辑修复 |
| CI/构建 | 3 | npm 镜像与 lock 文件同步(b5f05b7、ba5bfd5);action 修复(15453ec) |
| 代码质量 | 2 | code fix(52e4220);消重冗余 |
| 数值/平衡 | 2 | 植物和初始卡牌调整(eea41fc);大嘴花阳光消耗调整(0249a5c) |
| 其他/未分类 | 4 | 多个未详细描述的 fix 提交(abf2220、2f297ba、ad9edf3、3de2b82 等) |
Alpha 发布时残留的已知问题
| 编号 | 描述 | 严重程度 | 计划 |
|---|---|---|---|
| KW-001 | 商店分页按钮位置与设计稿有像素级偏差 | 低 | Beta 阶段微调布局常量 |
2.4 测试矩阵(Test Matrix)
说明:Electron 桌面端测试不在"浏览器×OS"的范畴内,单独作为一列列出。所有测试基于固定分辨率 1280×720。硬件覆盖了 Windows 游戏本(i7-12700H + RTX 3060 + 16GB)、Windows 轻薄本(i5-1135G7 + Iris Xe 集显 + 8GB)和 MacBook(Apple M1/M2 + Apple GPU + 8GB+)三种配置。未测试低配设备和 macOS Intel 机型(无设备)。
| 测试条目 | Chrome + Win | Chrome + macOS | Edge + Win | Firefox + Win | Safari + macOS | Electron (Win) | Electron (macOS) |
|---|---|---|---|---|---|---|---|
| 场景流转 | |||||||
| BootScene → MainMenu 启动 | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| MainMenu → MapScene 进入地图 | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| MapScene ↔ BattleScene 战斗进出 | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| MapScene → EventScene 事件场景 | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| MapScene → RestScene 休息场景 | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| MapScene → ShopPanel 商店面板 | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| BattleScene → RewardScene 奖励 | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| HP ≤ 0 → GameOverScene 结算 | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 战斗核心 | |||||||
| 抽牌(每回合 5 张) | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 出牌(阳光消耗、目标选择) | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 弃牌 & 洗牌(抽牌堆空时) | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 伤害计算(力量加成、易伤加成) | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 格挡计算(敏捷加成、破甲逻辑) | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 状态施加与结算 | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 敌人 AI(意图显示、行动执行) | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 卡牌概率分支(choose 效果) | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 手牌拖拽 & 目标高亮 | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 50 回合强制结算 | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 卡牌系统(31 张) | |||||||
| 攻击卡(attack)效果执行 | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 技能卡(skill)效果执行 | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 能力卡(power)效果执行 | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 卡牌悬停预览(HP/格挡变化) | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 卡牌关键词预览 | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 地图探索 | |||||||
| WASD / 方向键移动 & 长按 | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 第 1 层开放世界地图渲染 | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 第 2 层黑夜地图切换 | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 实体交互(敌人/事件/商店等) | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 精英怪追击 & 牵引范围 | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 小地图面板 | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 视野范围(曼哈顿距离 4) | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 商店 & 道具 | |||||||
| 按楼层生成商品 | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 购买卡牌(金币校验) | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 购买一次性道具(容量校验) | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 付费删牌 | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 售罄状态记录 | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 战斗中使用道具 | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 事件 & 休息 | |||||||
| 正面/负面/混合事件池抽取 | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 首次事件保底正面 | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 事件选项效果执行 | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 休息点按比例 HP 恢复(30%) | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| UI & 其他 | |||||||
| 顶部状态栏(RunStatusBar) | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 牌组面板(DeckPackPanel) | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 教程引导 | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 开发者模式(P 键商店、小地图传送) | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
| 音效 & 背景音乐 | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ | ✅ |
图例:✅ 通过 | ⬜ 未测试(无设备或时间不足) | ❌ 测试未通过
三、Alpha 版本出口条件(Exit Criteria)
我们定义以下条件作为 Alpha 版本发布的判定标准:
| 条件编号 | 条件描述 | 达成情况 |
|---|---|---|
| EC-1 | 核心游戏循环完整可玩:玩家能够从 MainMenu 出发,完成"地图探索 → 战斗 → 奖励/商店/事件 → 继续探索 → Boss 战"的完整流程,且不会因 Bug 导致游戏中断 | ✅ 达成 |
| EC-2 | 战斗规则与设计文档一致:伤害/格挡计算、状态叠加与持续回合、卡牌效果执行均符合 `doc/design/战斗规则书.md` 和 `doc/design/状态说明.md` 的描述 | ✅ 达成 |
| EC-3 | 所有场景正常流转:Boot → MainMenu → Map → Battle/Event/Rest/Shop → Reward → GameOver/Victory 共 12 个场景均可正常进入和退出 | ✅ 达成 |
| EC-4 | 无阻塞性 Bug:游戏中不存在导致卡死、崩溃、无法继续游玩的 Bug | ✅ 达成(已知的 2 个残留问题均为非阻塞性) |
| EC-5 | 自动化测试关键用例通过:核心数据完整性、场景逻辑测试全部通过;UI 素材和布局测试在目标平台上通过 | ✅ 达成(34/39 通过,5 个失败均为环境/工具链问题) |
| EC-6 | 编号 TypeScript 类型检查通过:`tsc --noEmit` 零错误 | ✅ 达成 |
| EC-7 | 代码格式规范通过:`prettier:check` 无警告 | ✅ 达成 |
| EC-8 | Windows 平台可构建和运行:`npm run build:exe` 生成可运行的 .exe | ✅ 达成 |
| EC-9 | macOS 平台可构建和运行:`npm run build:mac` 生成可运行的 .dmg | ✅ 达成 |
| EC-10 | 核心内容量达标:卡牌 ≥ 20 张,敌人 ≥ 10 种,事件 ≥ 8 个,楼层 ≥ 2 层 | ✅ 达成(31 张卡牌、14 种敌人、10 个事件、2 层 + Boss 层) |
---
四、测试总结
4.1 整体评价
Alpha 版本的测试结果满足出口条件。核心游戏循环(探索-战斗-奖励-商店)完整可玩,战斗规则与设计文档一致,跨平台构建正常。自动化测试 34/39 通过(87% 通过率),5 个失败均为非功能性原因。
4.2 主要收获
1. 回合制战斗的状态机复杂度超出预期:状态叠加、回合开始/结束时结算、格挡保留/清零等时机判断在开发中经历了多次迭代修复,是 Bug 最集中的模块
2. Phaser 场景叠加的层级管理容易出错:奖励页面 overlay 查看地图/牌库时出现过 Bug,最终通过明确 Scene 的 overlay 层级约定解决
3. 自动化规则测试成本低、收益高:通过 `node --test` 直接读取源码做正则匹配和结构断言,不需要启动 Phaser 运行时,在 CI 中秒级完成,拦截了多次数据格式错误
4.3 Beta 阶段改进方向
-
补充 Firefox/Safari 浏览器兼容性测试
-
Windows 测试脚本中的
sips依赖替换为跨平台 PNG 尺寸读取方案 -
增加更多场景测试用例(如极限情况:牌库抽空、50 回合强制结算、满手牌 10 张时的操作)
-
引入用户测试(招募 5-10 名校内同学进行 30 分钟试玩并收集反馈)

浙公网安备 33010602011771号