array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 软件测试作业 - 爱码网
zwn-blog

一、总览和相关链接

这个作业属于哪个课程 2020春|W班
这个作业要求在哪里 软件测试作业要求
这个作业的目标 对腾讯即时通讯Demo进行测试、分析和建议
作业正文 软件评测作业
其他参考文献 《构建之法》第三版 邹欣著

二、评测与采访

评测(Demo方式)

Web评测截图

小程序评测截图

Android评测截图

已发现的BUG

1. 敏感词检测功能不完善

BUG演示
声明:以下发送的敏感词仅用于测试,并无其它意图
演示1 Android发送敏感词

演示2 Web端发送敏感词

BUG描述

  含有敏感词的会话消息在第一次发送时均会被检测并导致发送失败。但是若多次尝试重新发送该消息,则能够将该条消息成功发送,信息接收方也可接收到该条消息。经测试,所有Demo平台都能够通过此方式将带有敏感词的消息发送出去。

BUG详细信息
  • 平台:全平台
  • 严重程度:极其严重!有可能导致不利于国家和社会的消息被广泛传播,也会破坏网络言论环境。
  • 触发频率:每次
为什么开发人员没发现这个问题?

  开发人员虽考虑到了敏感词检测,但未覆盖消息发送请求的所有类型。含有敏感词第一次发送会被拦截,但是后续消息发送是在原发送失败消息的基础上重发,必然消息请求内容不同,对于这方面的消息合法性检测和处理,开发人员考虑的不够周到。即没有满足《构建之法》非功能测试中服务质量需求,实现基本功能固然重要,但是也要考虑功能的使用需求再进行进一步的完善和特性化定制,目前开发人员缺乏此方面的考虑。

2. Android端未读消息状态未更新

BUG演示

BUG描述

  Android端发送消息后,若消息接收者通过非Android端查看消息,则会导致消息发送方始终显示发出的消息为未读状态。

BUG消息信息
  • 平台:安卓系统 MIUI-11.0.8
  • 严重程度:比较严重。若发出的消息始终显示为未读状态,会引起许多不必要的误会,导致不良的后果。
  • 触发频率:每次
为什么开发人员没发现这个问题

  Demo只有Android APK和IOS应用支持消息未读已读功能。说明开发团队在不同设备上的功能划分有所不同,但是负责不同设备的开发团队的消息接收反馈没有进行同步处理,导致只有同系统的手机终端才能正常使用消息未读已读功能。可能的原因之一是负责Android和IOS的开发团队没有向其它开发团队要求消息接收反馈,还有可能是其它开发团队并未提供该接口或该接口未实现消息接收反馈到移动端的功能。

3. 小程序群聊未读消息气泡

BUG演示

BUG描述

  当群组有新成员加入或群组信息被修改时,该群组将显示未读消息气泡。进入该群组查看聊天消息、查看成员消息、查看群组信息之后未读消息气泡仍旧存在,在主界面手动刷新之后气泡才消失。

BUG详细信息
  • 平台:安卓系统 微信小程序 微信版本7.0.11
  • 严重程度:一般。错误提示群组有未读消息且无法消除是部分用户无法忍受的。
  • 触发频率:经常,当群组新增成员和群组信息修改时大概率会出现。
为什么开发人员没发现这个问题

  微信端的未读消息气泡的消除处理仅考虑了会话消息的查看,并未考虑到群组信息变化带来的影响,而在其它平台却没有这个问题。《构建之法》中提到,用户体验要贯穿到多种设备,保证同一产品在不同设备上有同一体验,很显然负责不同设备的开发团队之间的统一标准还不够明确和细致,导致了不同设备执行着同样的功能,体验却不尽相同,甚至出现了BUG。

采访

SDK构思

项目概述

  使用腾讯即时通讯SDK给某手机游戏新增内置一个聊天模块,消息类型仅限文字、表情和音频。

主要功能

  1. 玩家可以在公共频道文字聊天
  2. 玩家可以相互添加好友,进行私聊
  3. 黑名单功能能屏蔽某个玩家的会话消息
  4. 工会(或称战队)相当于一个群组,队长能对其进行管理,其它玩家也可以进入,玩家可在工会内讨论
  5. 每个玩家都可以收到服务器的通知信息

面向用户

  该游戏的所有玩家

NABCD分析

  • Need(需求)
    • 许多移动端玩家渴望游戏内的聊天功能
    • 游戏需要聊天模块来吸引用户,增加活跃度
  • Approach(方法)
    • 使用腾讯即时通讯Android和IOS的SDK进行通讯功能的开发
    • 界面设计使用Vux基于WeUI和Vue(2.x)开发的移动端UI组件库设计
    • 和游戏开发团队协作完成界面设计和聊天游戏事件处理
  • Benefit(好处)
    • 拥有聊天功能可以增加玩家的互动感、归属感,吸引更多的玩家,增加游戏人气
    • 服务器的通知信息能更加方便地通知到玩家,使玩家更清晰地获取讯息
    • 延长游戏寿命,增加游戏收入
  • Competitors(竞争)
    • 移动端许多游戏并没有内置聊天模块,相比他们我们很有优势
    • 大部分移动端游戏的聊天模块仅仅提供聊天功能,并不支持加好友、黑名单、工会等此类操作,我们的聊天模块还整合了部分游戏事件
  • Delivery(推广)
    • 游戏厂商在各大媒体的广告投放
    • 游戏厂商在各大应用市场的部署

用户采访

调查对象背景:男,21岁,在校大学生,软件工程大三在读

体验方式:Web端、IOS

需求:大型论坛即时通讯聊天室。聊天室账号即为论坛用户ID,聊天室不开放音视频通话,仅限文字交流。聊天室内可添加好友,效果和论坛加关注相同;也可将用户拉黑名单,即聊天室内的操作和网页论坛的操作达到一样的效果。

使用体验

  受访对象先体验了Web端的Demo,注册了两个账号,并加入了群组进行使用。依次体验了新建对话,好友间互动、加入群组、群组聊天、群组管理、黑名单功能。之后又安装了IOS客户端进行了和上述流程一致的体验,随后进行了Web端和IOS端的通话,具体体验感受如下:

  • 数据量
    1. 最好能保证一千人在线聊天无障碍,该Demo可以满足要求
    2. 服务器存储能力有限,消息漫游时间不长,能否将聊天记录数据保存在本地?需要在Demo基础上进行二次开发。
  • 功能
    1. 消息类型(表情、图片、视频、文件)比较丰富,这一点比较满意
    2. 群管理功能比较鸡肋,论坛是公共场合,需要更强大的群管理功能来保证聊天室和论坛的环境
    3. 添加好友验证形同虚设,输入ID号直接就能加好友不合理
  • 界面
    1. 界面比较美观,简洁,信息醒目,排版整齐
    2. 敏感词报错界面不够明显,提示信息比较奇怪
  • 准确度
    • 消息传输及时迅速,提示消息明显准确

  总体来说,受访对象对该Demo比较满意,部分功能不尽人意但也能保证基本使用,并无太大体验的问题。

对腾讯IM改进意见

  受访对象认为:添加好友功能要进一步完善,要达到QQ那样的要求;群组管理的功能也要进行大幅度的加强;新增消息声音提醒,反馈要更加明显。

对我开发产品的意见

  游戏内置聊天模块触发的游戏事件要细化和谨慎设计,要积极和游戏开发团队沟通,否则会导致项目失败,必须要保证功能的健壮性。

结论

  我对腾讯即时通讯的评价:推荐

采访截图


三、分析

时间分析

  对于本科毕业的6人团队,实现成品大概要6个月时间。本科毕业的学生非比已就业的开发人员,大部分都没有进行框架的深入学习,开发时可能会出现不熟练或不理解框架技术的情况,这会拖慢项目的完成时间,因此保守估计需要半年时间完成到SDK的程度。但是对于有项目开发经验、技术框架运用熟练的团队,完成时间可缩短到4个月。

优劣比较

优点

  • 具有敏感词屏蔽功能
  • 消息能够撤回
  • 群成员上限更多
  • 资费更低

缺点

  • 消息漫游时间很短,仅一周
  • 关于SDK的相关服务(客服,运维等)较少,服务范围不够全面

团队提高建议

  要充分了解实现目标功能所需的技术。只有对所需技术进行充分了解,可行性分析才能更加精确和合适,项目风险管理也能获得很大的进展,从而准确的制定项目完成所需时间、人员分配等。


四、建议和规划

如果你是项目经理,如何提高从而在竞争中胜出?

  • 与游戏开发团队进行充分的交流,确保开发出满足需求的产品
  • 对广大的玩家需求调研,总结并仔细分析用户需求
  • 对服务功能需求模块(即聊天和游戏事件联系)进行缜密的规划和细致的设计,并在该功能模块增加分工,以保证这个“人无我有、人有我强”的功能模块的易用性、健壮性、高效性

目前市场上有什么样的产品了?

  移动端存在于腾讯网易等部分高人气游戏中,如王者荣耀、和平精英等

你要设计什么样的功能?

  1. 玩家可以在公共频道文字聊天
  2. 玩家可以相互添加好友,进行私聊
  3. 黑名单功能能屏蔽某个玩家的会话消息
  4. 工会(或称战队)相当于一个群组,队长能对其进行管理,其它玩家也可以进入,玩家可在工会内讨论
  5. 每个玩家都可以收到服务器的通知信息

为何要做这个功能,而不是其他功能?

  正如第二部分SDK构思中提到,聊天模块的导入能增加玩家的互动感,从而提升体验玩家、给游戏运营商增加收入。

为什么用户会用你的产品/功能?

  与人交流是人的本能,许多玩家也乐于在游戏内进行聊天互动。将游戏事件整合入其中,更加能吸引玩家,激起用户使用兴趣。

你的创新在哪里?

  • Need(需求)
    • 许多移动端玩家渴望游戏内的聊天功能
    • 游戏需要聊天模块来吸引用户,增加活跃度
  • Approach(方法)
    • 使用腾讯即时通讯Android和IOS的SDK进行通讯功能的开发
    • 界面设计使用Vux基于WeUI和Vue(2.x)开发的移动端UI组件库设计
    • 和游戏开发团队协作完成界面设计和聊天游戏事件处理
  • Benefit(好处)
    • 拥有聊天功能可以增加玩家的互动感、归属感,吸引更多的玩家,增加游戏人气
    • 服务器的通知信息能更加方便地通知到玩家,使玩家更清晰地获取讯息
    • 延长游戏寿命,增加游戏收入
  • Competitors(竞争)
    • 移动端许多游戏并没有内置聊天模块,相比他们我们很有优势
    • 大部分移动端游戏的聊天模块仅仅提供聊天功能,并不支持加好友、黑名单、工会等此类操作,我们的聊天模块还整合了部分游戏事件
  • Delivery(推广)
    • 游戏厂商在各大媒体的广告投放
    • 游戏厂商在各大应用市场的部署

如果你来领导这个团队,会有什么不一样?

  我会不断和游戏开发人员以视频会议等交流联系,总结清楚开发任务和需求。定期召开项目会议,总结问题、协调任务、做出调整,

如果你的团队有5个人, 4个月的时间,你作为项目经理,应该如何配置分工?

  • 界面设计 1人
  • 聊天模块设计 4人
    • 基础聊天功能导入 2人
    • 游戏事件整合 2人

描述你的团队在周期为16周,每周都要做什么,才能保证在第16周如期发布软件。

时间 任务
第1周 需求分析、分工、SDK学习
第2周 撰写需求文档
游戏事件处理学习
第3周 原型设计
聊天模块初步设计
第4周 原型交付甲方,根据反馈进行相关修改
召开开发前会议,明确任务分工
第5~8周 完成界面的初步设计
聊天模块的初步功能
进行游戏事件的初步整合
第09周 交付甲方测试版本,根据反馈修改相关功能
第10~14周 完成页面的整体设计
聊天模块功能实现
游戏事件完全整合
第15周 进行测试,修改漏洞和不完善的功能
开发收尾总结会议
第16周 交付项目

项目发布后,项目该怎么部署才能满足需求?

游戏内置聊天模块比较特殊,部署需要考虑以下内容
  • 用户数较多:日访问10万左右,带宽大,并发能力强
  • 存储容量要求不高:只负责转发、不负责存储消息,但要存储玩家的工会信息
  • 数据库:MySQL
  • 消息的及时性:高传输速率

综合考虑上述因素选择以下部署方案

产品类别 机架式
CPU类型 Intel i7
CPU型号 i7-9700
内存类型 DDR4
内存容量 64GB
硬盘容量 4TB
关系型数据库 MySQLx3(读写分离x2、备份x1)
缓存数据库 Redisx2(主备)
网络控制器 NC382i 双端口千兆网卡x2

分类:

技术点:

相关文章: