论做好测试的重要性 苹果三星都遇恶性Bug

昨天,两家国际知名的手机厂商都先后在软件上吃了个大亏,一家是苹果,一家是三星,两家的产品搭载的操作系统都出现了非常严重的恶性 Bug,Bug已经严重影响到了用户的使用,甚至在今天,有不少三星用户因为恶性 Bug 引起手机彻底崩溃而被迫跑售后维修。

iOS 上出现 Bug 已经不是什么稀奇的事情,毕竟 iOS 本身就有一个外号叫 bugOS。苹果虽然在软件的用户体验和应用生态方面都做了非常好的把控,但是对于他们自己生产的软件,他们并没有很好地把控软件的质量。

就像 iOS 13 刚刚发布的时候一样,虽然 iOS 13 经历了非常多个 Beta 版本,且有几个 Beta 版本的稳定性还算可以,但 Beta 版本的功能并不完全,对比苹果此前发布的内容,当时 iOS 13 还有不少功能是缺失的。
为了赶发布日期,苹果是在很短的时间里赶工了不少东西,草草打包了一个 iOS 13.0 出来,在没有经过充分测试的情况下就推送给用户,以至于很多更新到 iOS 13 正式版的用户还是在使用过程中遇到了很多问题。
iOS 13 也是历史上少见的、苹果在短时间内推送多个补丁版本来修复错误的版本,系统不够稳定、存在恶性 Bug 的情况持续了多个版本,直到 iOS 13.2 的补丁版本之后,情况才开始稳定下来。
经历了一波大翻车后,苹果对待 iOS 13.4 是非常谨慎、小心,他们拉长了这一版本的测试周期,尽可能对系统做充分的测试,避免新版本发布之后引起各种问题。事实证明,iOS 13.4 确实是比较稳定的一个版本,它不但在之前系统的基础上修复了一些错误,还很稳定地给国内用户引入了新的公交卡。

如果你有体验开发者测试版的话,苹果在 iOS 13.4.5 的测试版中也在尝试修复 iOS 个人热点断连、连接质量不佳的问题,经历了 iOS 13 的这几波翻车之后,苹果也是不得不开始重视系统的各种错误。

实际上热点断连是 iOS 13 的老问题的,只是之前苹果一直都没有承认,可能是因为接连翻车之后苹果调整了内部对软件质量的管理,以至于他们后面承认并开始着手改善这个问题。

然而,好景不长,原本以为 iOS 13 已经走上了稳定的道路,然而 iOS 13.5 又出现了新问题。很显然,这一次的问题又是因为苹果没有做充分的测试,为了赶时间草草发版导致的。
iOS 13.5 更新的主要内容是和新冠肺炎相关的一些功能,其中和国内用户关系最大、也是最重要的一个更新,是苹果提升了在用户佩戴口罩的情况下使用 Face ID 解锁手机的解锁率。

毕竟取消了 Touch ID 的 iPhone 都只给用户提供了 Face ID 这一个生物验证方式,苹果并没有像国内厂商一样给 iPhone 加入屏幕指纹,在佩戴口罩的情况下,Face ID 的解锁确实是一个大问题。
考虑到这也是当前世界各地用户的一个非常紧急的需求,苹果是尽可能在赶时间把这个功能做出来,给用户推送更新,然而,这种紧急也直接导致苹果没有能够对 iOS 13.5 做足够充分的测试。
这使得有不少 iOS 13.5 用户在使用过程中遇到了文章开头笔者提到的一个恶性 Bug —— 用户在打开 App 的时候可能会被提示「此应用不再与您共享」,遇到这个问题时,用户只能够卸载 App 重新安装才能解决问题,否则应用将不能正常使用。
根据外媒的报道,这个 Bug 影响到了很多国外用户经常使用的 App,包括 Youtube、Twitter、Facebook、Tiktok 等等,有的应用在卸载之后需要重新进行登录,而且用户的一些历史数据可能会出现丢失,这会给用户的使用带来不少的麻烦。

笔者已经更新到了 iOS 13.5,在使用过程中目前笔者还没有遇到这个恶性 Bug,说明这个 Bug 影响到的国内应用并不是很多,根据微博上一些 iOS 用户的反馈,有部分使用钉钉等 App 用户有遇到这个恶性 Bug,说明这个 Bug 还是切实存在的。

好在对于国内用户来说,它的影响不是很大,这个原本也应该上热搜的内容是直接被三星的一波骚操作给压了下去,苹果这一次的 Bug 问题能够逃过舆论的口水也全靠同行帮衬了。
值得一提的是,iOS 13.5 主要更新的还是和疫情有关的功能,Bug 修复方面苹果并没有在这个版本修复旧版本已有的一些问题,所以如果你现在受到了 iOS 13.4 一些问题的困扰,升级到 iOS 13.5 很可能还是解决不了你的问题,为了避免这个新的 Bug,笔者暂时是不推荐升级的,特别是 iPhone SE 2、iPhone 8/7/6s 等没有使用 Face ID 的产品。

相较于苹果的这个问题,三星机器遇到的 Bug 更加恶性,大量国内三星手机用户都遇到了这个恶性 Bug,且它并不只是个别应用不能用这么简单,而是整个系统直接崩溃,导致手机根本没有办法正常使用。

而且很诡异的是,这个 Bug 只有国内用户遇到了,国外用户没有反馈任何的系统崩溃现象,而在国内,则有非常多的用户遇到了系统崩溃,这说明 Bug 是出现在系统中属于本地化的那一部分。
由于问题出现在一个通用的组件上,以至于这一次崩溃不单单只是某个机型崩溃,而是大量机型一起崩溃,包括 A 系列、S 系列的多个机型,不论是之前的 S9、S10,还是三星今年新发布的 S20,都逃不过这一次系统崩溃。

据悉,这一次崩溃出现在国行手机系统的锁屏组件上,在三星的 ROM 里,「锁定屏幕」是一个单独的 App,它可以独立于系统单独进行更新。一般来说,国内贩售的手机,在锁屏上除了公历显示外,还会多一行农历日期显示。
农历恰好是国内特有的东西,这一次 Bug 恰好出现在了农历上,以至于国内用户普遍出问题,而国外用户并没有遇到类似问题。

2020 年 5 月 23 日恰好是一个比较特别的日子,如果你拿起手机,或者点击 Windows 右下角的时间,看一眼农历的日期,你会发现现在的时间恰好是「闰四月」,而 5 月 23 日恰好是「闰四月初一」,是农历闰月的第一天。
闰月是农历的一个特别的规则,这个规则对于程序来说必然也是要在逻辑上做特别处理的,否则一旦出现问题,那么这就会演变成一个近似于「千年虫」的问题,引起程序的崩溃。
一般来说,农历基本上是不会参与到什么核心程序逻辑里的,毕竟计算机用的都是公历,处理程序逻辑用日期一般也都是用公历,而农历基本上只是一个被显示出来的东西而已。换言之,即使程序出现了问题,通常来说它也基本上只影响到农历这一行字的显示,除非是计算方法存在致命的错误,才会引起程序主体逻辑的卡壳,如果相关的问题又没有做好异常处理,那么程序就很可能因为这么一个崩溃而整体崩溃。

三星这个恶性 Bug 其实是一件非常巧合的事情,在笔者的推测中,这个 Bug 引起系统崩溃可能是因为下面这一连串的错误:
农历闰月的计算错误恰好引起了锁屏 App 的崩溃,而锁屏 App 作为系统的一个核心组件,它必须要能够正常工作,于是锁屏 App 的崩溃又引起了整个系统的崩溃,触发了系统尝试通过自动重启以修复错误的情况。
而很显然的是,这个错误是不能够通过重启回归到正常的,于是用户的机器进入到了一个崩溃的循环中,最终系统自动跳到 Recovery,用户的手机不能正常使用。
对于这个 Bug,笔者个人认为它很可能只是一个代码上的低级错误,因为各种巧合的疏忽给整个系统埋下了一个定时炸弹,进而造成了整个程序的崩溃。笔者很好奇这背后到底是一个什么样的代码,造成了这样一连串直到系统大面积崩溃的错误。

在这一个恶性 Bug 背后,很显然的是,三星中国做系统本土化的团队非常不专业,代码质量的管控、软件的测试,甚至到本土化在定需求、定开发规划的时候,都可能存在严重的问题。
很有可能这个 Bug 会是三星中国负责本土化的团队想当然地做了一个农历的算法,但是没有考虑到闰月的问题。而当他们发现这个问题,向用户推送新版本更新的时候,由于三星系统的更新机制,有很多用户可能还没接收到相关的更新。
最终使得 5 月 23 日一到,埋下的定时炸弹被精准引爆,大量仍然在使用旧版「锁定屏幕」程序的三星用户还是遇到了这个崩溃问题。不知道三星对于这一次的事件会给出什么样的解释,后续会给用户一个什么样的补偿,目前三星只表示他们还在调查中,并没有给出一个具体的说法。

从 Windows 更新的大翻车问题,再到 iOS 13 一连串的 Bug,再到这一次三星的大面积恶性 Bug。这一系列的事情都说明,现在哪怕是这些行业内知名的企业,他们都还是会疏于对代码质量的管控,有的时候可能会因为赶工等原因不对软件做充分的测试,就草草更新新版本。
也有的情况是,产品和程序员本身都对要做的东西没有做好充分的理解,考虑得不够全面,以给软件未来的稳定性埋下重大隐患。这一次三星的恶性 Bug 已经基本上可以确认是闰月导致的,一般来说,大企业在做产品的过程中,涉及到农历这种和时间、日期相关的东西,他们必然会通盘考虑其中可能会出现的特殊规则,并且针对这个特殊规则做特别测试。
其实别说企业级的开发者了,哪怕是个人开发者要做一个农历相关的东西,他也必须要考虑到这方面的问题,而三星却似乎像是根本没有想到农历会有闰月一样,以至于时间一到 5 月 23 日,大家的系统集体崩溃。至于最终这个崩溃是怎么引起的,要看三星后面对此事给出的官方调查结果,就目前而言,笔者还是倾向于它是一个低级错误。

这一系列的问题真的很能说明软件测试的重要性,这样的问题越多,消费者对于各种软件更新、系统更新的态度也会越发的扭曲,因为现实生活中确实有很多人害怕新版本会出问题而不愿意更新到新版本,可三星这一次的例子又表明,不及时更新软件、系统到新版本也会遇到崩溃,对于用户来说,这其实是一件很让人绝望的事情,左也不是、右也不是。
目前来说,对于更新这件事情,笔者的态度还是积极的,其实对于任何的系统,哪怕是 iOS,遇到了问题其实都还有回退的余地,或者会有一个临时的解决方法规避问题,而软件、系统更新不及时带来的安全风险和潜在问题相较于更新可能带来的问题其实是更加致命的,特别是对于本身就有习惯用云或者本地其他存储设备备份数据的朋友来说。

至于说国外目前对于软件质量的把控不如国内这一说法,笔者个人还是不太认同,国产的这些 Android ROM 其实也不是没有 Bug,恶性的 Bug 也是有的,只是它们不会被媒体广泛报道而已。
至于为什么问题都出现在国外厂商上,只是因为国外厂商做的往往是系统这种规模庞大、更新起来比较复杂的东西,而国内互联网企业做的基本上都是 App,而 App 出现问题其实可以非常快速地定位并且通过热更新修补,对于问题的修复,很多情况下用户是根本没有感知的,一个恶性 Bug 带来的影响要远低于一次服务器宕机,所以我们会感觉国内的这些软件问题,实际上只要是软件,它不可避免可能会出现问题,出现错误。
不过客观地说,近两年国外这些公司的软件质量确实有一个下滑,经过这么多次事件,软件质量的问题一定会被这些巨头们重新重视起来,而国内的相关公司可能也会受到影响,增强对软件质量的把控,而且增加很多措施来尽可能避免恶性 Bug 等带来的严重后果,就像微软给 Windows 加入的各种用于规避更新问题的功能和选项一样。