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

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

用礼包码兑换礼包有个一限制,游戏运营商不会让玩家无限制兑换, 针对某一次发放礼包的活动,一个账号只能兑换一次, 即使玩家手上有多个礼包码也不能多次兑换。 打个比方,某一款游戏搞活动向玩家发放礼包,这个礼包内总共有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. Qt Creator编译运行成功,但是显示系统找不到指定的文件(比如urlmon.dll动态链接库)

    问题: 以前自己写的一个QT界面程序,在win 7 的32位系统上运行没有出现任何问题,但是重装系统之后,同样的程序放到win10 的64位系统下运行会出现警告:onecoreuap\inetcore ...

  2. 每天学点SpringMVC-拦截器

    1. 先写个Hello World 1.1 写一个Interceptor class并实现HandlerInterceptor接口 public class FirstInterceptor impl ...

  3. touch.js——常见应用操作

    touch.js--常见应用操作 基本事件: touchstart   //手指刚接触屏幕时触发 touchmove    //手指在屏幕上移动时触发 touchend     //手指从屏幕上移开时 ...

  4. js时间戳和日期字符串相互转换

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="C ...

  5. JVM读书笔记PART3

    一.早期(编译器)优化 语法糖 c#和java的泛型截然不同看似相同,c#是真实的泛型 编译运行一直存在 List<string> 和List<int> 就完全是两个类 而Ja ...

  6. 化繁为简 经典的汉诺塔递归问题 in Java

    问题描述   在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔.不论白天黑 ...

  7. bzoj4236 JOIOJI hash 模拟

    JOIOJI桑是JOI君的叔叔."JOIOJI"这个名字是由"J.O.I"三个字母各两个构成的. 最近,JOIOJI桑有了一个孩子.JOIOJI桑想让自己孩子的 ...

  8. bzoj4557【JLOI2016】侦查守卫

    这道题对于我来说并不是特别简单,还可以. 更新一下blog 树形DP f[i][j]表示i的子树中,最高覆盖到i向下第j层的最小花费. g[i][j]表示i的子树全部覆盖,还能向上覆盖j层的最小花费. ...

  9. js自执行函数写法

    (1)写法1 (function(){ //函数内容 })() (2)写法2 (function(){ //函数内容 }())

  10. 如何修改select标签的默认下拉箭头样式?

    对于一般的项目而言,select标签在浏览器中表现出来的默认样式也不算丑,但是一次项目中,项目经理却要求对select标签本身进行样式修改,美化其下拉小箭头的样式.我思考和尝试了许多方法,最终得到一种 ...