(图片来源于网络)
2001年苹果公司发布第一代iPod,在当时引起了轰动,它拥有大容量存储空间和全新的操作方式,并且还非常漂亮(在当时满大街的笨重卡带机和CD机相比,iPod绝对是一股清流),在市场上大受欢迎,苹果公司也因此赚的盆满钵满。
微软公司看到了个人播放器的前景,也想从这个市场分一杯羹,因此微软公司在2006年推出了第一代类似iPod的产品Zune。
虽然在个人电脑操作系统方面,windows操作系统占据了绝大多数份额,但是Zune却远不如创新不断的iPod销量高。Zune 在销量最高的时候也只是拿下了美国便携播放器市场份额 9%,远远低于 iPod 的 63%。销量惨淡不说,Zune的软件BUG又为苹果公司送了助攻。
2008年的最后一天,微软的30G存储版本Zune却遇到大规模无法启动问题。在这一天内,无论出于什么原因,只要用户重启了Zune,Zune就会卡在开机LOGO界面中无法启动。
互联网戏剧性的加剧了这个BUG的传播,因为大批网友在网上描述了这个问题,寻求解决方案,其它网友纷纷用自家Zune测试,成功的测试出只有30G存储版本Zune会遇到无法启动问题,顺带着大批设备变砖。
微软也是紧急出动,为了使事态不扩大而努力的工作着:先是发布公告称自己正在卖力的解决这个问题中,大家不必恐慌,会尽快通过Zune官方网站公布解决方案;随后,微软给出了问题原因和临时解决方案。
30GB存储版本Zune无法启动的原因在于Zune播放器的内置时钟驱动软件有BUG,使其无法正确处理闰年的最后一天(2008 年是闰年)!临时解决方案就一个字:等!你没看错,就是等。等到Zune电量耗尽关机,然后再等到2009年1月1日上午7点后,充电开机就能自然解决。
闰年BUG是比较常见的,究其原因,是瑞年不常见并且定义容易迷惑人引起的。不要小看了闰年,我们看一下闰年的定义,满足以下两个条件中任意一个的,为闰年:

  • 年份能被4整除,且不能被100整除
  • 能被400直接整除

你能从这个定义中写出一个正确的闰年判断方法吗?可以私下试试,我们还是回过头来看微软Zune的时钟驱动BUG是怎么出现的。
微软30G存储版本Zune使用的时钟芯片是飞思卡尔的,有网友找到了该时钟驱动源代码,截取出错代码如下所示。 
该代码用于将日期(days)转换成年份。由于闰年有366天,而平年只有365天,所以要分别处理这两个年份逻辑。当循环处理到2008年时,程序在执行第3行if(DateTime.IsLeapYear(year))后,判断出2008年为闰年,然后执行第5行if(days > 366),软件BUG就出在这里!在2008年的最后这天,变量days中恰好是366,不能满足第5行的”days > 366”这个条件,然后程序转到第1行,然后执行第三行,再执行第5行,发现条件不成立再次执行第1行,如此死循环!

while(days > 365)
{if(DateTime.IsLeapYear(year)){if(days > 366){days -= 366;year += 1;}}else{days -= 365;year += 1;}
}

编程无小事,任一点疏忽都会带来难以估量的损失!另外,这个BUG对我们的测试也很有启发,我想飞思卡尔和微软的开发人员一定详细的测试过这个代码,但他们都忽视了“润年最后一天”这个边界条件!这告诉我们验证逻辑时,切勿盲目自信,应重点关注那些不常使用的点上,往往这些点才是问题频频爆发的原因。
Zune随后的发展如何呢?2011年10月4日微软宣布,停止生产Zune,2013年11月22 Zune商店关闭,至此微软在个人播放器领域的尝试告一段落。这或许并不是微软的错,因为随着智能手机的普及,单独的便携式播放器的份额被智能手机严重蚕食,即便是苹果的iPod也逐渐成为了边缘产品,被归结到了“其它设备”类,想来离全面停产也不远了。
微软停止生产Zune后,在其它硬件领域有了新的突破,那就是微软surface系列,包括平板和笔记本,成为了Windows系统设备的标杆!

历史上的重大软件BUG启示录第9篇---微软的硬件尝试相关推荐

  1. 历史上的重大软件BUG启示录 第5篇---ATT长途电话网瘫痪事件

    (图片来源于网络) 时间:1990年1月15日,星期一,下午2点25分: 地点:新泽西州,贝德明斯特,AT&T电话网络运营中心. 和往常一样,长途电话运行监控室的职员们悠闲的做着手头上的工作. ...

  2. 历史上的重大软件BUG启示录 第1篇---瞳的陨落

    (图片来源于网络) 2016年2月17日,日本成功发射了一颗卫星,他们给这颗卫星起了个好听的名字:"瞳"."瞳"卫星的造价为2.86亿美元,约合人民币18.6亿 ...

  3. 【历史上的今天】1 月 18 日:微软的“技术布道者”出生;反盗版法案抗议行动;哈佛 Mark I 灵感起源

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2022 年 1 月 18 日,在 1896 年的今天,亨利·路易斯·史密斯(Henry Louis Smith) ...

  4. 【历史上的今天】1 月 18 日:微软的“技术布道者”;反盗版法案抗议行动;哈佛 Mark I 灵感起源

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2023 年 1 月 18 日,在 1896 年的今天,亨利·路易斯·史密斯(Henry Louis Smith) ...

  5. 【历史上的今天】6 月 4 日:微软收购 Github;MacOS Mojave 推出;英特尔发布第四代架构 Haswell

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2022 年 6 月 4 日,在 1998 年的今天,我国互联网用户突破一百万.自从中国科学技术网在国内首次实现了 ...

  6. 【历史上的今天】12 月 9 日:微软推出 Windows 2.0;五十年前的极客科技展;第一个获得专利的人

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2022 年 12 月 9 日,在 1968 年的今天,Douglas Engelbart 在一场重要会议上(正文 ...

  7. 【历史上的今天】1 月 21 日:微软创始人诞生;微信 11 周年;传奇黑客出生

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2022 年 1 月 21 日,在 1970 年的今天,美国波音 747 喷气客机首次飞行.波音 747 喷气客机 ...

  8. 【历史上的今天】11 月 20 日:微软发布 Windows 1.0;Lotus Notes 发明者出生;奔腾4 诞生

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2022 年 11 月 20 日,在 27 年前的今天,世界上首例人造心脏移植手术成功:一名退休的电影制片人成为世 ...

  9. 【历史上的今天】10 月 20 日:微软黑屏事件;Ubuntu Linux 操作系统发布;Apple Pay 正式上线

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2022 年 10 月 20 日,在 1909 年的今天,Antoni Kilinski 诞生,他是计算机科学课程 ...

最新文章

  1. amd黑苹果万能显卡驱动_黑苹果系统安装之声卡驱动
  2. pythoneasyinstall安装第三方库,Python安装第三方库的3种方法
  3. python print error 空_python笔记37:10分钟掌握异常处理,再也不担心程序挂了
  4. [转载]SQL SERVER 2008 阻止保存要求重新创建表的更改
  5. Spring Cloud微服务之业务物理删除(十)
  6. Android默认记住登录用户名,【教程】Android 记住密码和自动登录界面的实现
  7. qwtqplot用法
  8. Python:Python程序设计思维、计算生态、用户体验、程序设计模式
  9. Just a Hook(线段树区间更新)
  10. java中 IndexOf()、lastIndexOf()、substring()的用法
  11. Tomcat的安装、配置常见问题
  12. hadoop 2.6.4 java_Windows下使用Hadoop2.6.0
  13. RabbitMQ消息队列,看这篇文章就够了
  14. 为什么计算机网络使用数字信号,什么是数字信号
  15. java程序员表白代码_程序员表白代码,用过的人都找到了对象...
  16. 2.words平均长度
  17. 计算机课程老师讲什么初中,初中计算机老师的教学工作总结
  18. matlab水下机器人,水下机器人路径控制与仿真
  19. 中望CAD的lisp编辑器_巧用中望CAD2017自定义工具选项板
  20. 美团java一面面经

热门文章

  1. 小程序影藏溢出的gif_迅捷GIF制作工具-简单的GIF制作软件,支持视频转成GIF
  2. android wear ios 连接,开发者成功配对Android Wear与iPhone
  3. 小程序逆向加密步骤小结
  4. 成长的日记教案计算机,种子成长日记教案
  5. 第04篇:Guava-retry重试组件
  6. Xperia Z1参数及白皮书
  7. Java第一学期 北大青鸟 第三章 我行我素购物管理系统:模拟幸运抽奖
  8. 荣誉系统排名是整个服务器,[翻译分享]荣誉军衔晋升系统初步解析(2006.4.27更新)...
  9. 2021-07-16 python与HFSS联合仿真思路讲解(内附代码文件)
  10. 让我们看了泪流满面的经典台词