郑州博为峰老师直接接听

400-029-09** 400-029-0997 转 172841
查看完整号码
扫码拨号
微信扫码拨号

一个惊天 bug,2.2 亿没了!

作者:博为峰 来源:博为峰 2022/7/21 9:35:08

其实,这样的想法,对企业自身的发展是很不利的。要知道,一个产...

其实,这样的想法,对企业自身的发展是很不利的。要知道,一个产品的质量取决于这个产品链上*薄弱的环节。如果把程序员比作铸造城墙的勇士,那测试员就是作为把关大门的检验师,设计开发和测试是对等的,设计强而测试弱,产品的质量一样上不去。
软件的质量在很大程度上依赖测试人员,取决于测试人员的素质和管理者对测试的理解。如果不注重这一块在产品上线时,就很容易发生问题。近日,就因为一个程序Bug,某项目方直接损失了 2.2 亿人民币。 前段时间在NFT圈子里发生了的一件事,某项目方因为自己的程序代码出错,导致锁定的 11539.5 个 ETH(以太坊代币)无法取出,按照目前的价格,这些 ETH 总价值 2.2 亿人民币。 什么是NFC呢,它是一种非同质化代币,属于区块链领域的一种应用,可以理解为一种虚拟的数字资产。比如你买了一张NFC的头像,那这张图片的所有权就是你的了。
而这次出事的是一个叫 Akutar的 NTF 项目方,他们发起了一个 NFT 产品售卖,为了激励用户早点下单,其采用的是由高到低出价的拍卖方式,也就是假设一件产品的定价是 10000 元,想买入的就直接按照这个价格下单。如果最终成交价是 8000 元,那项目方会退你 2000 元。 很快,这个项目就完成了预定销售额,之后就是项目方需要履行后续的环节,*和提现,也就是项目方需要先退回最终成交价和定价之间的差额给用户,然后才能自己提走项目售卖收益。 而为了让客户安心,项目方在智能合约里规定了需要先完成差价*才能提现。而就是这份智能合约中的代码中的判断条件,出现了问题。 在智能合约代码里就有这么一个判断条件。 懂点技术的读者知道,这是一段函数代码,这个函数的作用是项目方用来提现的。 按照定义,变量 refundProgress 表示已经完成的用户*数,而变量 totalBids 表示所有用户下单的 NFT 总数。 因为一个用户可以购买多个 NFT,所以 totalBids 的数值一定是大于或等于 refundProgress 的。 因此,当代码执行到这里的时候,这个判断条件始终不会成立,后面的合约代码就无法执行。 看懂的读者应该知道了,这个 Bug 的关键点就是这两个变量之间的判断符号写反了。 用户无法获得*,项目方也无法提现。
对用户来说,虽然不能获得*,但至少还是买到了 NFT。但对于项目方来说,这价值 2.2 亿人民币的收益就直接被锁定了,无法提走。 对于项目方而言,就像拿了一个永远无法打开的巨额钱包,一个符号,价值 2.2 亿,可以说是一个惊天Bug 了。 而这个失误,则和上线前没有精准测试有关,项目方认为能够跑通全流程就可以了,这也是没有进行极端情况测试所留下的弊端。 因Bug亏损30亿、致6人死亡 其实这件事不是个例,近几年因为程序 Bug 导致产品重大损失的案例并不在少数。 几个历史数据转储逻辑Bug或发货逻辑Bug,就能让几十万轻松蒸发:
还有因为写出Bug差点进去的,有码农表示自己参与开发的一款发薪软件曾出现Bug,会导致发放的薪资变成双倍,总共能多发 2000多万。 当时查出Bug的时候发薪单已经生成,就差批量任务向银行发起请求了。
而纵观全球性的Bug所带来的损伤更是难以估量。比如在1996年,欧洲运载火箭Ariane 5在发射37秒后当场爆炸。 一瞬间, 70亿美元的开发费用白费, 5亿美元的设备原地蒸发。 这一切都由一个整数溢出(Integer Overflow)的Bug引起。 有时,甚至会带来意外死亡。

1985年到1987年间,由加拿大AECL公司开发的Therac-25放射线疗法机器在软件互锁机制上出现了Bug,从而使辐射能量变成了正常剂量的 100倍: 最终,至少有6名来自美国和加拿大地区的患者由于遭受过量辐射而意外死亡。 种种案例,都无不告诉我们,在项目上线前,找一个靠谱的测试团队是多么重要,为了省钱而省去一些步骤,可能只会挖出更大的坑。 软件测试的重要性 有很多比较小的企业认为,测试的工作可以由开发一并兼容了,但其实很多时候从开发人员的角度会比较难发现产品出现了问题,这个道理很简单,因为开发人员是制造者,而不是使用者。很多软件人员除了编译自己的软件外,从来不使用自己写的软件。这样,他们根本不知道自己写出来的东西究竟好不好。 生产者很难客观地审查和评价自己辛苦创造的东西,所以他们对自己的产品不如使用者了解。 而测试人员在长时间的测试过程中,逐渐了解了软件和系统存在的各种问题,对可能出现的问题更加敏锐。那些架构师们也许只需要花上半天时间,找测试人员聊聊,就知道自己设计出来的东西有多么大的问题了。 因此对于很多企业而言,提高测试人员的责任感和素质,对于提升产品质量是很重要的。并且,测试人员是其中非常重要的一个组成,他们不仅仅是测试的执行者,更是理解需求,审查需求分析,讨论软件架构,寻找系统瓶颈的重要参与者,更是用户的代言人。 写在最后

点击下方 “阅读原文” ,挑 战 年薪20万 的机会 ~

添加微信咨询
小博老师 @郑州博为峰

课程解答、1v1能力评测、免费试听

微信号:185******97

立即咨询

“郑州博为峰”是上海博为峰软件技术股份有限公司在教育宝平台开设的店铺,若该店铺内信息涉嫌虚假或违法,请点击这里向教育宝反馈,我们将及时进行处理。

机构评分

环境:4.0师资:4.0服务:4.0效果:4.0

公示信息

店铺名称:郑州博为峰

单位名称:上海博为峰软件技术股份有限公司

账号名称:zzbwf(180******75)

所属城市:河南郑州

入驻时长:22年

在线客服:在线聊

微信咨询

返回顶部