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

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

用礼包码兑换礼包有个一限制,游戏运营商不会让玩家无限制兑换, 针对某一次发放礼包的活动,一个账号只能兑换一次, 即使玩家手上有多个礼包码也不能多次兑换。 打个比方,某一款游戏搞活动向玩家发放礼包,这个礼包内总共有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. Spring第五篇【cglib、手动实现AOP编程】

    前言 到目前为止,已经简单学习了Spring的Core模块.也会怎么与Struts2框架进行整合了-.于是我们就开启了Spring的AOP模块了-在讲解AOP模块之前,首先我们来讲解一下cglib代理 ...

  2. Eclipse中删除tomcat server 导致不能重新创建该版本的tomcat server

    在Eclipse中创建了一个Web工程后,需要将该工程部署到Tomcat中进行发布.有时就会遇到在New Server对话框中选择了Tomcat 6/7后却无法单击“Next”按钮的问题,如下图所示: ...

  3. 翻译一篇关于jedis的文章

    翻译 自 http://www.baeldung.com/jedis-java-redis-client-libraryIntro to Jedis – the Java Redis Client L ...

  4. linux 命令随笔 ls cd pwd mkdir rm mv cp cat nl

    Linux 命令练习 ls命令 ls就是list的简写,目的是打印当前目录下的清单 格式 ls[选项][目录名] 常用参数 -a –all 列出目录下的所有文件,包括以 . 开头的隐含文件 -l 除了 ...

  5. 进入css3动画世界(一)

    其实我做css3动画也没有多久,这篇文章目标人群是css3动画的新手,不喜勿喷. 分类 目前我接触到的css3动画有2类:一种是transition的,另一种是@keyframes的. 两者的区别就是 ...

  6. Qt全局宏和变量

    1.  Qt 全局宏定义 Qt版本号: QT_VERSION :  (major << 16) + (minor << 8) + patch 检测版本号: QT_VERSION ...

  7. Nim or not Nim? hdu3032 SG值打表找规律

    Nim or not Nim? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  8. ajax url参数中文乱码解决方法

    较好的处理办法,对js的url中的中文参数值使用两次encodeURI(),即encodeURI(encodeURI("url的中文参数值")) JS代码: var name=&q ...

  9. Android 中更新UI的方法

    1)使用Activity.runOnUiThread(Runable action)方法 情景一: 在主线程中,定义方法,在方法中启动线程. public class MainActivity ext ...

  10. Google Authenticator 如何集成(U盾的实现原理相同)

    Google Authenticator是一个类似U盾的二次验证工具,Google提供了它的开源客户端(https://github.com/google/google-authenticator)里 ...