前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >那些年我们de过的bug(1)

那些年我们de过的bug(1)

作者头像
Crossin先生
发布2018-04-17 10:02:54
5410
发布2018-04-17 10:02:54
举报

有人说,别把兴趣当做职业,因为职业会毁了兴趣。然而,对于众多对编程充满兴趣的 coder 来说,这恐怕没太多选择。从你成为一名程序员开始,你就不得不去面对需求、文档、用户、产品经理,以及永无止境的 bug。

在我的编程经历中,遭遇了无数的 bug。打算挑一些我还能想起来的且不那么低级的,跟大家分享一下。今天先抛个砖。也欢迎大家分享你遇到的奇葩 bug。

我目前所做的项目是手机游戏,后台是用 django。之前有这样一个需求:

假设已上线客户端 v1.0 配套服务器 server 1/2/3 都是 v1.0 一个游戏的新版本 v1.1 发布后,要提交给不同的渠道审核,审核通过后,他们会在平台上更新客户端至 v1.1。但在这审核的过程中,要保证审核人员连接到 v1.1 的新版测试服务器 server 0,而不影响真实玩家的老版本 v1.0 去连接老服务器 server 1/2/3。当审核通过后,则需要停服更新老版本服务器至 v1.1,之后新版本就连接到更新后的 server 1/2/3。 另外要注意的是,不同渠道的审核上线速度有可能不一致,所以需要能分开控制。

当时为了临时应对这样的需求,就在获取游戏可连接服务器列表的地方增加了这样一个配置:

TEST_CHANNEL = ('appstore', 'pp', 'ky', '91') TEST_VERSION = '1.1' TEST_SERVER_ID = 0

获取列表的请求里增加了一个判断:

if version == settings.TEST_VERSION and channel in settings.TEST_CHANNEL: server_ids = [settings.TEST_SERVER_ID] else: ...

解释一下,比如现在游戏在苹果appstore、PP助手、快用助手、91助手4个渠道等待审核。那么这几个渠道的 v1.1 版本在请求服务器列表的时候,就会拿到一个只有测试服 server 0 的列表。等到审核完毕,只要在配置里把对应渠道去掉即可获取正式的服务器列表。

为了防止对 TEST_CHANNEL 的改动,这里特意使用了 tuple。到这一步,其实并没有什么问题。

等到PP、快用、91都审核完毕决定上线的时候,配置被改成了:

TEST_CHANNEL = ('appstore') TEST_VERSION = '1.1' TEST_SERVER_ID = 0

然而,一会儿之后就接到反馈说,PP 的版本看到的仍然是测试服务器,请转到正式服。

我的第一反应是,难道服务器没有重启或者新的配置文件没有其效果?但是再次重启刷新之后,仍然没有效果。而同时被修改的快用和91则一切正常。

这真是奇了怪了。

各位先别急着往下翻。你们想一下会是什么问题?原因就在上面的这几行代码中。

...

...

...

...

...

...

...

...

TEST_CHANNEL = ('appstore')

bug就在这里。

(a, b) 是一个 tuple 类型,而当 tuple 类型只有一个元素的时候,需要写成 (a,)。否则,它就只是一个括号运算符。a 和 (a) 是等价的。

因此,条件

'pp' in ('appstore')

就相当于

'pp' in 'appstore'

它不再是判断一个字符串是否存在于一个序列中,而是一个字符串是否包含在另一个字符串中。'pp' in 'appstore' 的结果又恰好是 True……

所以,正确的写法应该是:

TEST_CHANNEL = ('appstore',)

建议今后养成好习惯,所有序列的元素后面都加上『,』,避免出错。

多余的话:只要你还在写代码,bug 将会一直存在。从某种角度来说,bug 也反映了你的编程水平。当你已经很少犯写错变量名、用错语法等初级错误,而更多出现诡异地、难以调试的 bug 时,说明你已经进步了。而解决 bug 的过程也是经验增长的重要过程。所以说,不要畏惧 bug,要拥抱 bug。

bug 是程序员的好朋友,但产品经理不是。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-09-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Crossin的编程教室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
测试服务
测试服务 WeTest 包括标准兼容测试、专家兼容测试、手游安全测试、远程调试等多款产品,服务于海量腾讯精品游戏,涵盖兼容测试、压力测试、性能测试、安全测试、远程调试等多个方向,立体化安全防护体系,保卫您的信息安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档