项目 | 内容 |
---|---|
这个作业属于哪个课程 | 2023北航软件工程 |
这个作业的要求在哪里 | 团队项目-Alpha阶段测试报告 |
我在这个课程的目标是 | 学习软件工程技术,完成团队开发流程 |
这个作业在哪个具体方面帮助我实现目标 | Alpha阶段开发 |
Alpha阶段测试报告
测试过程中的bug
前端
bug描述 | 出现原因 | 修复方式 | 结果 |
---|---|---|---|
不同显示器比例下界面布局不同 | 组件布局采用的是绝对布局和绝对大小 | 修改绝对布局为相对布局,能够适应不同的显示器比例 | 成功 |
文字过长时,会溢出边框 | 没考虑到文字长度的自适应问题 | 文本展示框修改overflow属性为auto,当文本过长的时候会折叠 | 成功 |
图片或文件上传失败 | axios配置错误 | 设置正确的header | 上传成功 |
布局设置不生效 | 组件n-space和div虽然作用相同,但是属性不同 | 统一使用div来设置属性,即可生效 | 成功 |
创建词单后需要刷新页面才能看到刚创建的词单 | 父组件未获取新建的词单id | 增加对子组件的自定义监听事件 | 创建成功后立即出现新建的词单 |
用户可以创建空词单 | 未在提交创建时对词单非空进行约束 | 增加词单的非空约束 | 禁止用户创建空词单,并给出提示 |
关闭再打开创建词单页面时保留上一次的内容 | 离开页面时未清空变量 | 设置关闭时的回调函数 | 再次打开页面时不会显示之前的内容 |
用户更新每日学习单词量的请求过于频繁 | 用户拖动进度条过程中的值更新触发更新请求 | 更改监听事件 | 只有拖动完成鼠标松开后才会更新 |
从后端获取的文本有换行符 | 没有对\n进行处理 | 使用pre-wrap预处理换行符 | 可以正常显示换行 |
邮箱验证码错误仍然注册成功 | 注册函数调用了验证注册码是否正确的同步方法,但是没有用async修饰 | 对注册函数使用async修饰,先确认注册码正确再进行后续注册逻辑 | 邮箱验证码错误时阻拦注册 |
在Firefox等浏览器上UI不一致 | 浏览器内核不同,需要设置不同样式 | 更改css进行兼容 | 显示正常 |
后端
bug描述 | 出现原因 | 修复方式 | 结果 |
---|---|---|---|
前端收到的中文释义的换行符为\\n 导致前端无法处理 | 数据库中的中文释义使用\n 分隔,django将此字段传给前端时被转义为\\n | 使用replace函数将 \\n 换为 \n | 换行符输出格式与前端适配 |
一个邮箱可以注册多个账号 | 只判断了邮箱验证码是否正确,没有判断邮箱是否已经被用户注册 | 数据库表增加邮箱是否被注册的boolean字段 | 注册成功后该邮箱不能被发送注册码或者用于注册 |
调用gpt服务的接口部分超时 | axios发送请求时的默认时间限制过小 | 对axios延长时间限制到30000ms | gpt服务接口能在在一段时间加载后正常返回 |
聊天模式部分回答无法返回 | 数据表中对chat的最长限度为512,gpt返回的回答较长,无法存入数据库导致出错 | 限制gpt返回的回答长度,同时增加数据库字段长度 | 聊天模式能正常返回较长的回答 |
复习模式完形填空会出现 substring not find 未定义错误 | 给gpt约束的返回的数据格式存在随机性,导致查找单词字符串来判断填空位置时定位失败 | 将原来的字符串查找改为正则匹配 | 能适配gpt可能返回的多种数据格式 |
完形填空出现相同文章 | 原来的测试单词为按遗忘次数排序选取,多次测试时存在较强相似性 | 增加随机单词 | 保证生成文章不重复 |
故事模式模式无法在gpt返回的故事中定位传入单词 | 传入用户学习单词让gpt生成故事时存在词性改变 | 修改gpt返回的数据,返回使用单词的正确形式的列表 | 能正确定位单词 |
作文分析模式部分回传字段为空,导致结构解析出错 | 用户输入数据不是合法作文 | 对gpt增加input_prompt,不是文章时填入None字段占位 | 不出现json解码异常 |
字符串的输入或输出过长导致报错 | 后端的数据表字段长度限制没有体现在前端输入框的长度限制和对gpt返回长度的限制里 | 检查所有输入输出部分增加长度限制 | 保证长度合法性 |
场景测试
- 典型用户描述
用户信息 | 用户情况 |
---|---|
姓名 | 用户A |
用户身份 | 大二学生 |
用户情况 | 英语水平较差,但是可以有比较长的时间周期内坚持学习和练习的意愿,希望能提高自己的英语水平 |
用户需求 | 想要提高英语水平,扩大词汇量,高效练习英语并最终提高英语成绩 |
用户信息 | 用户情况 |
---|---|
姓名 | 用户B |
用户身份 | 英语专业学生,有未来继续从事相关领域学习研究的意愿 |
用户情况 | 专业四级 |
用户需求 | 可以用户自主创建词库,从而生成满足有语言学专业词汇等学科专业性较强的词库、CATTI热点词条等针对(受众相对较小的)应试需求的词库; |
用户信息 | 用户情况 |
---|---|
姓名 | 用户C |
用户身份 | 有美国留学意愿的学生 |
用户情况 | 大学四级/六级水平 |
用户需求 | 满足托福等应试要求,并培养英语会话水平 |
-
场景一:
用户A、C想要选择不同的词单进行学习。首先跳转到单词表页面,点击”新建单词本“按钮,选择相应的公开词单后生成词单。点击生成的词单卡片,点击右侧按钮设置为背诵词单。
用户B想要创建一份专属词单。在新建单词本页面中,在”文件“选项卡下上传包含单词的文件,获取可进一步手动编辑的预览词单,确认无误后生成词单进行学习。
选择好学习的词单后,用户跳转到单词背诵页面开始学习,根据英文原文选择”认识“或”不认识“后,看到单词的全部释义、同义词、反义词、例句。很熟悉的单词则点击”不再学习“永久跳过。
学完一本单词书后,用户再次回到单词表页面,把其他单词书设置为正在学习的词单后,点击”编辑单词本“删除学完的词单。 -
场景二:
用户学习完一组单词后,会出现弹窗提醒,可以选择继续学习,可以复习已经学习过的单词。
如果想要复习学完的单词,用户可以进入单词复习页面,页面内可选择故事模式、单词复习、阅读写作三种模式,进行多样化复习。
用户可以先选择进入故事模式,选择今天新学习的单词,点击“生成故事”可以利用所选择的单词智能生成一篇有趣的文章,通过阅读有趣的文章进行复习可以加深对新单词的印象。同时,用户可以选中句子,在右边边框会自动生成对该句子的智能分析,逐句的细致分析可以提高用户的阅读写作能力。
用户也可以选择进入阅读写作模式,通过输入文章或者导入文本输入自己所写得一篇作文,点击“开始分析”可以给作文进行智能打分。在阅读写作模式中,用户同样可以选中句子,在右边边框会自动生成对该句子的智能分析,从而可以提高用户的阅读写作能力。
如果用户选择进入单词复习模式,则会利用学过的单词智能生成一篇完型填空,用户需要根据对单词释义和用法的理解将单词填入相应的框中,如果对生成的文章不满意可以点击“换一篇文章吧”来练习另一套完形填空。当用户填完空后,可以点击“提交”,来查看结果和答案。通过完形填空的练习,用户可以加深对单词释义和用法的理解,从而达到更好的学习效果。 -
场景三:
用户C背诵了一些单词后,想要练习一下自己对于单词的掌握,同时与智能助手交流沟通一些有趣的问题娱乐一下,在智能对话页面与智能助手进行了一问一答的沟通,但是每天只能进行7次对话,重点还是要放在学习英语上哦。
测试矩阵
浏览器 | 硬件配置(屏幕分辨率) | 登录注册 | 单词背诵 | 单词复习模式 | 单词写作模式 | 故事模式 | 单词表编辑 | 单词表查看 | 智能对话 | 产品介绍 | 我的 |
---|---|---|---|---|---|---|---|---|---|---|---|
Chrome | 1920×1080 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 |
Chrome | 1680×1050 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 |
Chrome | 1440×900 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 |
Edge | 1920×1080 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 |
Edge | 1680×1050 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 |
Edge | 1440×900 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 |
Firefox | 1920×1080 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 |
Firefox | 1680×1050 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 |
Firefox | 1440×900 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 |
Safari | 1920×1080 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 |
Safari | 1680×1050 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 |
Safari | 1440×900 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 |
Opera | 1920×1080 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 |
Opera | 1680×1050 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 |
Opera | 1440×900 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 | 正常 |
压力测试
配置好 nginx+uwsgi 服务器后,我们运用 JMeter 对其进行压力测试,并遵循以下流程进行逐阶段测试。整个测试过程都采用高并发,充分利用服务器资源。测试的API及结果如下:
get_user_info
: 查询数据库获取用户信息
get_official_wordlists
: 查询数据库获取官方词单,较为高效的API之一
get_group_words_in_list
: 从词单中获得一组单词,运行效率受词单大小影响较大
user_send
: 用户向英语助手发送一条消息,为耗费时间较大的API,但是由于受每日请求次数的限制,超过上限后运行效率极高
get_blank_text
: 根据用户今日学习单词中获取5个进行文章挖空生成,为耗费时间最大的API,但是由于受每日请求次数的限制,超过上限后运行效率极高
单元测试
使用Django框架的测试模块编写单元测试,对所有输出稳定的api的正常功能与异常情况编写了对应的单元测试,(其中去除了登陆注册、gpt交互功能的不稳定输出、每日学习单词的随机生成三类API)并全部通过。以下为32个测试点的测试情况。
出口条件
-
正确性测试
我们对软件的各个基本功能进行了测试,保证用户在正确的操作流程中不会出现错误。同时,对用户的一些异常操作,如创建空词单等,增加了错误提示并拒绝提交更新。 -
兼容性测试
我们基于测试矩阵对不同浏览器和分辨率下的网页进行了测试。在测试矩阵中的不同浏览器下,网页的各个功能均能正常使用。在不同的屏幕大小下,ui显示正常,没有发生明显的扭曲或错位。在满足这两项条件时,我们认为通过了兼容性测试,可以在不同的平台和设备下使用。 -
安全性测试
我们在部分功能增加了一些限制与约束,并测试是否正常工作,防止用户私密信息泄露以及部分恶意攻击:- 对密码强度进行正则校验,防止密码过于简单被破译。
- 对登录注册增加数字验证码与邮箱验证码,防止频繁登录注册请求。
- 对密码进行md5加密,防止数据库泄露后密码被用于撞库。
- 对文字长度、文件大小等可编辑部分进行了限制,防止出现异常问题。
- 使用SSL证书与https协议