Loading

【近取 Key】Alpha - v1.0 测试报告

Bug

前端

主页、登录、注册、导航

bug说明 修复方法 修复结果
导航栏有时不显示用户姓名 修改用户信息的获取逻辑与存储方式 成功
展示词图界面导航栏居右失败 在组件中增加自适应相关设置 成功
用户名不符合限制却能成功注册 修复表单有效性检查的错误逻辑 成功
表单输入不符合限制时,可以使用回车发送表单 在回车事件绑定的方法中增加有效性检查 成功
密码符合要求后重复输入为空即可注册 修复了表单检查规则,使其初值不再为 undefined 成功
页面刷新后词图名称丢失 监听页面 unload 事件,用 localstorage 存储词图名 成功
教程 gif 出现闪烁 调整 gif 在页面中的大小,使其不再需要放大 成功
主页导航栏明暗主题不能随滚动切换 修改获取页面滚动高度的方式 成功

用户中心

bug说明 修复方法 修复结果
“所有词图”文件夹不唯一 测试与后端链接情况并进行错误处理 成功
名称为空的词图预览与其他不一致 增加词图名称限制,不可为空 成功
页面刷新后侧边栏始终聚焦在第一行 修改导航栏 list 的书写方式,使用 to 属性绑定 成功
统计信息界面单词排序逻辑错误 修改表单计算方法进行正确排序 成功
我的词图界面全选删除后部分词图依然存在 修复全选操作的影响范围 成功
文件夹重名后建立正确文件夹依然报错 修改错误信息条传值逻辑 成功
修改密码后跳转到登录界面却仍然存在登陆状态 跳转前补充清空 localstorage 等 token 信息 成功
修改密码时新密码不符合要求也可以提交 设置表单监听各表单项的检查 成功
修改密码时没有重复输入新密码也可以提交 取消表单的懒检查特性,进行持续检查 成功

词图相关

bug说明 修复方法 修复结果
单词浮窗内容过长而超出卡片边界 将卡片 width 固定,height 自适应延申 成功
单词侧边栏单词长度超长后换行 设置断点,当单词长度达到阈值后缩小字号 成功
单词侧边栏显示释义无换行 通过替换换行符+使用插槽渲染 html 实现换行 成功
新建词图后出现 404 无法获取预览图 后端预存默认 svg 供新词图使用 成功
单词加入词图后不移动则无法加入 添加在用户加入词图后即发送单词位置请求 成功
下划线、删除线等设置失败 将设置逻辑由取反改为传值 成功
词图 zoom 后单词浮窗位置野蜂飞舞 通过获取当前 zoom 参数计算单词相对位置并设置浮窗位置 成功
show 界面无法显示词图名称 通过 API 通信获取当前路由 id 的词图名称并进行显示 成功
复习模式最后一个单词无法查看详解 设置复习到最后一个单词时仍然显示查看详解 成功
模式最后一个单词查看详解后浮窗无法消失 点击完成后自动收起当前单词浮窗 成功
同一单词重复加入词图 加入词图后设置加入按钮为 disabled 状态防止重复加入 成功
单词浮窗中翻译没有渲染出换行效果 添加替换换行符+使用插槽渲染 html 实现换行 成功

待解决问题:

bug说明 修复方法 修复结果
首页侧边栏首次进入不会讲右侧顶向右侧自适应,之后可以 暂无 待修复

后端

bug 概述 修复过程 修复结果
API post 使用 body 传参,而后端使用的是 request.POST.get('xxx') 改为先解析 body 再进行取值 前后端正常通信
解析用户名调用函数时,错把 username 误认为是 user_id,导致参数传错 对于 username user 进行明确区分和定义 能够正常的解析 user
前端暂没有实现词图描述功能,导致系统错误 允许描述为空,更新数据库和 API 调用方法 前后端正常通信
获取推荐词表时出现错误 明确定义生成模式、数据类型返回的是 id 还是 name;明确产生集合计算集合 能够正常生成合理的推荐词表
给用户的 token 可能超时 添加 refresh_token 正常刷新
get post 在同一个 url 上,但解析时没有区分开 合并为 wrapped_api,分别处理 能够正常处理 API
get 不存在 body,而是使用参数传递 将 body 转为参数处理 能够正常处理 get
owner、user 命名不统一导致各处不一致 严格按照数据库定义进行处理 能够正常区分
filter().first()、get() 对于报错、update 行为不同 需要不存在报错或确定存在时,可使用 get;其他时候使用 filter.first 并进行判断 2;update 视情况改为修改参数后 save() 行为正确
在获得列属性时,直接 values_list() 返回的是元组而不是单个值 添加处理 values_list(xx, flat=True);在获得多列时不能通过属性而要通过下标获得 能够正确返回单个值
删除词图时,需要先移动到回收站,如果词图在回收站里才彻底删除 加入特判 选中词图如果部分在回收站,则只删除该部分,其余进入回收站
django 自动存储的时间和前端显示时间不同 进行 .strftime 处理 前端显示为 %Y-%m-%d %H:%M
时间为 UTC,和北京时间不同 返回给前端时进行 +8h 操作 2 前端显示正确值
错误处理时对于信息的传值类型定义有误 进行统一 正确进行错误处理
集合使用 remove 报错导致无法继续执行 使用 discard 除去可能不存在的实体 能够正确执行删除操作
生成的推荐词汇可能不在用户正在背的词书中 加入判断条件 2 生成的推荐词汇均在用户所想背的词书中
用户登录时可能输入用户名或者邮箱 分别进行查询,有一个即可登陆成功 输入用户名或邮箱均可登陆成功
当选择有序模式时,在某些情况可能生成的词表为无序 对于可能为无序的列表进行预排序 有序模式下所有情况返回的词表均为有序
词图对应单词状态的个数错误 添加遗忘的用户 id 限制 正确获取词图对应每种状态的单词数目
当用户复习单词数为 0 时,直接相除计算遗忘率会导致除 0 溢出 对分母为 0 的情况进行特判 行为正确
Django models 中存储时间为相对时间,datetime 默认时间为绝对时间,二者无法直接计算 先将相对时间转换为绝对时间后再进行计算 正确执行
用户创建一张新词图后直接退出,则新词图的缩略图为黑色 在用户发送词图创建请求时,即在后端构造一张默认词图 svg 可正常显示词图预览

场景测试

用户信息 用户情况
姓名 田旭尧
身份 可怜高中生,高考近在眼前
使用动机 高考英语单词必须得全部背过呀
典型场景 每周末在家抽出 3~4h 专门背单词
用户偏好 使用整块的时间系统化背单词,且对每个单词的掌握程度要求高
用户痛点 碎片化的背单词法不适用于一直坐着学习的高考党;纸质书籍笨重,没有交互;天天看书看得好累,要是有更 fashion 的学习方式换换脑子就好了
预期使用场景 每天有固定的时间使用该软件来背单词,通过设置词图中单词的个数激励自己每天的背词数量,并且根据统计信息界面的艾宾浩斯曲线来进行复习。
实现该用户需求的功能 1. 可以设置每个词图的单词数量上限,帮助用户达到每天的学习目标(痛点 1) 2. 统计信息界面对遗忘程度进行展示,时刻关注还未掌握的单词(痛点 2) 3. 复习模式帮助用户针对词图单位进行复习
用户信息 用户情况
姓名 田昶禹
身份 某校考研党,英语单词量不高,需要大量提升
使用动机 想要在半年里把考研单词记熟,每天抽出一定时间专门背单词
典型场景1 复习数一数二腻了,背背单词学学英语换换脑子
典型场景2 突然被某篇鸡汤激励到,立誓背完考研单词,然后背了五分钟
用户偏好 偶尔会专门背记单词,主要时间不会用太多,但会用系统化的时间专门记忆单词
用户痛点 单词量较大,碎片化背单词过于低效;且容易注意力不集中、记忆不长久
预期使用场景 由于大学时间比较自由,因此需要依靠激励机制来鼓励自己每天进行背单词。获得激励之后,每天确定背词小目标并完成。
实现该用户需求的功能 1. 日历图展示打卡情况,激励用户每天进行单词学习(典型场景 2) 2. 我的词图界面可以预览每个词图的背诵进度条,激励用户消除红色、橙色的部分,让整个词图进度条都呈现美丽的绿色
用户信息 用户情况
姓名 田永晓
身份 某校英语专业或出锅留学生
使用动机 有大量背单词的需求,常啃红宝书等词书,普通的碎片化记忆模式 APP 不适合了
典型场景1 某一天要背好多单词,不想背着一大摞书去图书馆,硬啃,普通的背单词软件过于碎片化,满足不了需求
典型场景2 看了个英文电影,想把电影里整理出来的单词加入候选背单词列表中
用户偏好 系统化背单词,即专门抽出时间阅读书籍、影视并记忆有关单词
用户痛点 纸质书籍重且较不方便、没有交互;大量学习中产生的零散单词除了手写记录难以集中背诵,且无法自定义位置;希望能提供基于词根词缀、近反义词的推荐背诵词
预期使用场景 对单词的专业性和难度有独特的要求,且由于背单词的重要性,需要使用特殊技巧来增强单词记忆。每天需要背单词的时间很长,觉得枯燥乏味难以集中精力。但是词图的多样化编辑功能可以让用户设计属于自己的词图,在背单词的过程中加入设计环节,帮助用户记忆的同时增加趣味性,让用户可以长时间背单词并减少疲劳感。
实现该用户需求的功能 1. 提供随机生成、顺序生成、词根词缀、近反义词等多种生成推荐词表方式,供用户建立词根词缀的概念及联想记忆(痛点 3) 2. 画布的 zoom 功能、可拖拽功能提供极大的操作空间(痛点 1、2) 3. 支持 9 种词书的选择(痛点 1) 4. 工具栏可以设置每个单词的样式

压力测试

对于所有 API 进行行为分析(具体分析表格请助教老师移步 gitlab 察看):

API 最大长度(数量级) 查询数据库次数
词图中单词状态改变 301 5
SVG 上传 913 2
用户登入 74 1
查看所有词图 334 4
查看统计信息 2110 2
查看单词释义 537 1

在此,取较有代表性的 API,取一个较新的账户进行压力测试,测试结果如下:

API 用户数 时间 业务数 成功率 传输效率 总数据传输 响应时间 实际最高并发连接数 最长传输时间 最短传输时间
查看单词释义 255 60s 11055 100% 186.46trans/s 5.64M 0.08s 14.87 5.06s 0.00s
查看统计信息 255 60s 1038 100% 17.50trans/s 12.08M 0.85s 14.88 3.95s 0.09s

可以看到,对于新用户,查询的效率和并发的支持较好。

但是对于一个数据量较大的老用户(背单词数在 500 数量级),进行压力测试:

API 用户数 时间 业务数 成功率 传输效率 总数据传输 响应时间 实际最高并发连接数 最长传输时间 最短传输时间
查看统计信息 100 10s 37 100% 4.03trans/s 1.56M 5.04s 20.32 8.9s 0.00s
查看统计信息 100 60s 293 100% 4.94trans/s 12.38M 16.77s 82.92 22.61s 1.31s
查看统计信息 200 10s 37 100% 4.03trans/s 1.56M 5.63s 22.71 9.04s 0.00s
查看统计信息 200 60s 278 73.54% 4.67trans/s 11.75M 23.06s 107.78 30.50s 1.69s
查看统计信息 255 60s 219 16.82% 3.66trans/s 9.42M 23.51s 85.94 49.08s 4.29s
查看所有词图 100 60s 1562 100% 26.07trans/s 8.08M 3.70s 96.48 5.51s 0.20s
查看所有词图 200 60s 1593 84.82% 26.68trans/s 8.29M 6.27s 167.18 29.70s 0.21s
查看所有词图 255 60s 1659 22.40% 20.37trans/s 9.61M 5.98s 166.15 29.84s 0.00s

对于某一个 API,单位时间内能够完成的业务数是有限的。对于查看统计信息、查看所有词图两个与数据库交互较多,或计算过程较复杂的 API,我们无法支持过高的并发数:200 用户并发尚不会存在问题,但更多的用户则会造成大量请求因等待处理的 socket 队列满而被丢弃;同时,过多 Client 与 nginx 之间建立了连接。这一方面是后端处理数据时速度较慢,存在优化空间;另一方面是硬件设备条件限制;以及没有计算 nginx Client、并发队列和请求之间的数值关系。

在修改并发队列长度后进行测试,虽然总业务数增加了,但成功业务数没什么变化,因此成功率反而下降了:

API 用户数 时间 业务数 成功率 传输效率 总数据传输 响应时间 实际最高并发连接数 最长传输时间 最短传输时间
查看所有词图 255 60s 1666 16.28% 27.84trans/s 10.15M 8.41s 233.99 23.31s 0.00s

在此基础上,修改 Nginx 的最大连接数(768$\rightarrow$1024),成功率大幅增加:

API 用户数 时间 业务数 成功率 传输效率 总数据传输 响应时间 实际最高并发连接数 最长传输时间 最短传输时间
查看统计信息(原) 255 60s 219 16.82% 3.66trans/s 9.42M 23.51s 85.94 49.08s 4.29s
查看所有词图(原) 255 60s 1659 22.40% 20.37trans/s 9.61M 5.98s 166.15 29.84s 0.00s
查看统计信息 255 60s 155 38.27% 2.59trans/s 6.55M 15.99s 41.38 30.58s 0.00s
查看所有词图 255 60s 1733 99.20% 29.27trans/s 8.97M 8.04s 235.42 10.47s 0.00s

其中,查看统计信息的压测报错 SIGPIPE: writing to a closed pipe/socket/fd (probably the client disconnected) 以及 [alert] socket: xxx select timed out: Connection timed out,暂未解决。

单元测试

由于本项目比较特殊,数据库为规模较大的预处理数据库,故仅进行了部分不依赖于词书、单词信息、近反义词、词根词缀等数据库的单元测试。

测试矩阵

功能性测试

浏览器 版本 登录注册 首页显示 分类处理 词图创建 词图复习 曲线计算 用户反馈
Google Chrome 90.0.4430.93 正常 正常 正常 正常 正常 正常 正常
Microsoft Edge 90.0.818.56 正常 正常 正常 正常 正常 正常 正常
360浏览器 13.0.2220.0 正常 正常 正常 正常 正常 要开 js 功能 正常
Firefox 88.0.1 正常 正常 正常 正常 正常 正常 正常
Safari(平板) 604.1 正常 正常 正常 无法拖拽、更改大小 无法拖拽、更改大小 正常 正常
QQ浏览器(平板) 11.4.8.4762 正常 正常 正常 无法拖拽、更改大小 无法拖拽、更改大小 正常 正常

UI和操作测试

浏览器 屏幕分辨率 基本功能 页面布局 操作流畅度
Chrome 90.0.4430.93 1920*1080 正常 画布在100%显示时超出屏幕 比较流畅
Edge 90.0.818.56 1920*1080 正常 画布在100%显示时超出屏幕 流畅
Edge 90.0.818.56 2560*1440 正常 正常 流畅
Chrome 90.0.4430.93 2560*1440 正常 正常 流畅
Firefox 88.0.1 2560*1440 正常 正常 流畅
Firefox 83.0 1920*1080 正常 侧边栏弹出时右侧不会自适应;画布在100%显示时超出屏幕 比较不流畅
360安全浏览器 13.1.1302.0 1920*1080 正常 画布在100%显示时超出屏幕 较流畅

出口条件

前端

要求 完成情况 下一步
整体 UI 美观 基本实现统一的 UI 风格,基本保证美观 进一步美化 UI 界面细节
教程清晰 在教程页面使用 gif 进行动态展示功能,相对完善 考虑新增用户首次进入编辑的指南
跳转逻辑合理 跳转按钮清晰,返回按钮逻辑明确 了解用户体验感受,适当修正逻辑
用户操作友好 多数操作按钮有提示或本身带有文字信息 收集用户反馈,对模糊的地方进行补充说明
进行部分要求审查 添加了对用户名、密码、词图单词数量、词图名称等基本限制的前端审查 收集用户反馈,对限制进行调整
各屏幕分遍率、放大缩小、分屏的兼容 对部分侧边栏和词图的大小进行了屏幕自适应,对导航栏进行了分屏位置切换 完善对屏幕的适应性,争取让适应更加流畅

后端

要求 完成情况 下一步
数据库设计完备 能够支持前端询问,同时支持推荐算法的数据库设计 进一步根据 beta 要求设计数据库
进行权限处理 用户登录获得密钥,进而才可使用各种功能,保证数据安全性 完善权限处理系统
进行邮箱验证 用户需要通过邮箱验证才可使用软件,减少恶意用户 完善邮箱验证内容、跳转方法
单词数据 770570 个单词,覆盖面较广;其中 20651 个单词具有中英文例句 进一步完善释义的存储方式、例句的合理性检查
词书数据 导入了四级、六级、专业四八级、考研、雅思、托福、GRE、MBA、红宝书等词书 进一步根据用户需求寻找并导入更多的词书
近反义词等推荐算法 共有 5060 个单词可进行近反义词推荐;共有 9326 个单词可进行同词根词缀推荐;推荐算法自由选择 加入更多推荐算法;增加近反义词、词根词缀列表;显式列出对比或关联

综上,基本完成 Alpha 阶段的出口要求。

posted @ 2021-05-12 12:43  美滋滋甜兮兮队  阅读(167)  评论(2编辑  收藏  举报