事情是这样子的,前不久接到一个需求,为一个游戏开发礼包码功能

通常一款游戏运营期间会搞各种各样的活动吸引玩家,其中最常见的就是发放礼包,  玩家可以通过礼包码兑换礼包。

用礼包码兑换礼包有个一限制,游戏运营商不会让玩家无限制兑换, 针对某一次发放礼包的活动,一个账号只能兑换一次, 即使玩家手上有多个礼包码也不能多次兑换。 打个比方,某一款游戏搞活动向玩家发放礼包,这个礼包内总共有10000个礼包码, 玩家可以通过这些码去游戏中兑换。 参加活动的玩家每人手上只有一个礼包码,而某一个玩家通过某种方法拿到多个这次活动的礼包码,那么当他登录账号去兑换这批码时,是不会成功的,他只能兑换一次,其余的码只能通过不同的账号去兑换。

这是面向玩的客户端逻辑。

在后端呢,有一套针对礼包的管理系统供游戏运营的同事使用, 当要发放一个礼包时, 他们可以在表单内填写礼包的名称、礼包码的数量、使用礼包码兑换礼包的道具之类的信息生成礼包, 然后把礼包码分给玩家。

这很和谐,一点问题也没有。然而这只是假象,我做的这个功能,在只发放一个礼包时是没问题的,但是要同时发放多个礼包, 就会触发一个bug。因为每次在系统中添加一个礼包后,在游戏中并不能直接生效,而是要使用系统提供的同步功能将礼包同步至游戏中。

人有一个特点, 做事情喜欢分类。比如说我们小时候做作业,肯定是先做完某一门功课的作业,再去做另一门功课的作业,我们不可能以做一道语文题,接着做一道数学题,然后再做一道语文题的方式来完成作业。人脑不是电脑,没有多线程, 事情只能一样一样做。

这下问题来了

运营的同事有时候会需要同时发放多个礼包,碰到这种情况,他们的操作步骤是

添加礼包,添加礼包,添加礼包,同步礼包到游戏,同步礼包到游戏,同步礼包到游戏

而我开发程序时根本没有想到会出现同时添加多个礼包的情况,所以发放礼包只能按照

添加礼包,同步礼包到游戏,添加礼包,同步礼包到游戏,添加礼包,同步礼包到游戏

这个步骤来

否则,  这些新添加的不同礼包都会被按照同一个礼包来看待, 就算玩家分别拿到不同礼包的礼包码,  也只能领取一次。

这显然是个bug, 虽然按照第二种方法的步骤操作能得到正确的结果, 但是这即不符合人的直觉,我也没有在说明文档里注明这一点, 甚至刚开始的时候连我自己都不知道要通过这么繁琐的操作才能得到正确的结果,那我又凭什么要求系统的用户去这么做呢。

当我发现这个问题时,脊背上感受到一阵凉意,因为这个功能已经发布到线上使用,假如运营的同事一次性同时发布多个礼包,那这个bug会波及到很多玩家,直接影响游戏的口碑。要是bug真被触发,那就是运营事故,而且这个锅肯定是我的, 甩也甩不掉。

我心怀揣揣的把这个问题和游戏运营的同事说明,然后表示要修复这个bug, 然而他们的回应却是:“原来是个bug啊! 我们还以为是你开发的功能呢,这个bug挺好用的,我们需要它”

震惊,我百思不得其解,在平常bug可是他们最痛恨的东西。

原来, 他们发放礼包的时候有一种需求,同时发放两个礼包, 两个礼包的道具虽然不同, 但是价值确实相似的, 他们只允许一个玩家只能领取两个礼包中的其中一个, 也就是说就算玩家分别拿到这两个礼包的礼包码,  兑换的话也只能兑换其中一个。

歪打正着, 这个bug不折不扣满足运营同事的特殊的需求。

把 bug开发成feature,我内心隐隐有种自豪感,然而这个feature 却是个定时炸弹,一旦有不知道底细的新同学使用这个功能, 那这个bug还是一个bug,而且杀伤力巨大。

所以, 问题来了, 这个bug到底要不要修呢, 纠结。

 

写了一个bug,最后却变成了feature,要不要修呢?的更多相关文章

  1. NDK中使用pthread多线程中自己写的一个BUG

    在使用pthread进行NDK中的多线程开发时,自己写了一个BUG, void *darkGrayThread(void *args) { ThreadParam *param = (ThreadPa ...

  2. 终于,帮开发写了一个bug

    写在文章的开头 最近项目比较紧,尤其前端的的需求比较多,作为一名测试,也会些vue,本着加快项目进度的美好想法,就自告奋勇的向组长承接了一部分开发的任务,其中有个需求需要在我们的广告管理后台新增一个上 ...

  3. 如何写出一个让人很难发现的bug?

    程序员的日常三件事:写bug.改bug.背锅.连程序员都自我调侃道,为什么每天都在加班?因为我的眼里常含bug. 那么如何写出一个让(坑)人(王)很(之)难(王)发现的bug呢? - 1 -新手开发+ ...

  4. 写了一个Windows服务,通过C#模拟网站用户登录并爬取BUG列表查询有没有新的BUG,并提醒我

    写了一个Windows服务,通过C#模拟网站用户登录并爬取BUG列表查询有没有新的BUG,并提醒我 1.HttpUtil工具类,用于模拟用户登录以及爬取网页: using System; using ...

  5. 浅谈如何写出一个让(坑)人(王)很(之)难(王)发现的bug

    该文章内容来自脚本之家,原文链接:https://www.jb51.net/news/598404.html 程序员的日常三件事:写bug.改bug.背锅.连程序员都自我调侃道,为什么每天都在加班?因 ...

  6. 实现一个最简单的VIM文本编辑器(可能有bug,随便写了一个)

    简单的写了一个文本编辑器,功能很简单,但足以把文件IO相关的操作熟悉了,可能功能或者分配的大小还不够完善.请参考参考: #include <stdio.h> #include <co ...

  7. Tomcat一个BUG造成CLOSE_WAIT

    之前应该提过,我们线上架构整体重新架设了,应用层面使用的是Spring Boot,前段日子因为一些第三方的原因,略有些匆忙的提前开始线上的内测了.然后运维发现了个问题,服务器的HTTPS端口有大量的C ...

  8. 搞了我一下午竟然是web.config少写了一个点

    Safari手机版居然有个这么愚蠢的bug,浪费了我整个下午,使尽浑身解数,国内国外网站搜索解决方案,每一行代码读了又想想了又读如此不知道多少遍,想破脑袋也想不通到底哪里出了问题,结果竟然是web.c ...

  9. MySQL关于exists的一个bug

    今天碰到一个很奇怪的问题,关于exists的, 第一个语句如下: SELECT ) FROM APPLY t WHERE EXISTS ( SELECT r.APPLY_ID FROM RECORD ...

随机推荐

  1. Struts2配置文件复用代码【web.xml、struts.xml、常量配置】

    web.xml的分发器代码: <!-- 引入struts核心过滤器 --> <filter> <filter-name>struts2</filter-nam ...

  2. Python学习笔记011_模块_标准库_第三方库的安装

    容器 -> 数据的封装 函数 -> 语句的封装 类 -> 方法和属性的封装 模块 -> 模块就是程序 , 保存每个.py文件 # 创建了一个hello.py的文件,它的内容如下 ...

  3. 鸟哥Linux学习笔记03

    1, 在Linux中,默认情况下所有的系统上的账号都记录在/etc/passwd这个文件内,密码记录在/etc/shadow这个文件下,所有的组名都记录在/etc/group内,这三个文件可以说是Li ...

  4. 关于sql语句引发的404错误

    今天分享个小问题,也是今天在项目中遇到的,希望对遇到相关问题的朋友有所帮助. 使用工具:(相关的) mybatis,spring-mvc,mysql 问题原因: 我在mybatis的mapper文件中 ...

  5. Java 使用Axis实现WebService实例

    在上一篇WebService实例中,基于jdk1.6以上的javax.jws 发布webservice接口.这篇博文则主要用eclipse/myeclipse 使用axis插件进行发布和调用WebSe ...

  6. android studio集成ijkplayer

    介绍 ijkplayer是一款非常火的开源视频播放器,android和IOS通用.关于怎么编译怎么导入android Studio中自己的项目,其中坑很多,本篇记录下自己的操作记录.ijkplayer ...

  7. sleep,yield,wait,notify,notifyAll

    1.wait,notify,notifyAll是Object的方法.他们必须在同步块中使用,并且当前线程必须已经获取了锁.wait方法,用来释放同步块对象上的锁,并且等待其他的线程唤醒(notify) ...

  8. 使用http -server 搭建本地简易文件服务器

    安装 npm install http-server -g 使用 1. cd project . 2. hs [pwd] -o, 默认是当前路径 ./ 3. 其他选项 -p Port to use ( ...

  9. 风趣的JavaScript面向对象入门课程一

    在我们程序猿界一直流传这这么一个joke,没女票我们可以new一个.没房子没票子没车子我们同样new一个!当然这听着更像是一种自嘲,毕竟我们程序猿都爱自嘲,哈哈,废话不多说,今天就由我带着你们来入Ja ...

  10. poj3264 最大值与最小值的差

    For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the same order. One d ...