美文网首页
[质量系列]我们可以发布了吗?

[质量系列]我们可以发布了吗?

作者: shane51 | 来源:发表于2017-11-19 23:26 被阅读11次

    每当发布前,测试会被一个团队难题,“你测过之后,觉得我们可以发布了吗?”

    再回答这个问题之前我们先看自己曾经被问到的另一个问题。

    某日一位DevOps咨询师问我,为什么丰田发动机一下线,只要通过检测,装上汽车,就可以跑上至少500W公里而不坏,但是软件却不能上线500W小时而不出故障?

    其实500W公里是有些夸张了,通常汽车发动机设计寿命为20~30W公里,确实不排除发动机可以跑上数百万公里而不出问题,但这毕竟是少数。

    之所以他问这个问题,是想问如何验证质量的问题,其实也是问我软件为什么不能像发动机那样检测一下确定是否达到相应的质量标准。

    丰田发动机只需要简单的测试而无需下线后真实的跑上20W公里就可以证明其可靠性。而软件却需要复杂的软件测试才能验证其暂时的可靠性,为什么说是暂时的可靠性呢?是因为,最终到底能够可靠的运行多久,我们谁有没法保证。

    为了更好的分析个中差别产生的原因,我们需要首先了解汽车发动机,从设计之初到生产,下线过程与软件的设计,开发与发布过程的异同。

    汽车发动机的下线与软件的发布

    首先,汽车发动机再上生产线生产之前有一个设计验证的阶段。在这个阶段都干了什么呢?

    • 设计开发
    • 试制原型
    • 测试验证
    • 小批量试制

    在测试验证阶段,发动机需要在被安装在一个专门测试发动机的台架上,进行几千小时的可靠性测试,过程中模拟各种工况下的发动机负荷,并精密监测发动机各项指标的变化。不仅如此,在小批量试制阶段,会让测试用户开着载有该发动机的汽车跑上长达一年的时间进行测试。测试公里数可能超过500W公里,不仅里程数够长,而且路况条件也要尽可能的模拟真实情况:如城市里走走停停;高速公路上高速行驶;上山区道路,爬山涉水等等,甚至还需要在高寒湿热等极端条件下的工作。

    从这个角度而言,上述测试验证过程像极了软件的测试过程。因为软件测试中有两种重要的测试,一种是用户场景测试,另一种是边界测试,如果这样说来,它们是完全相通的。常见的路况模拟可以视为用户场景测试,极端工况测试则可以视为边界测试。

    其次,发动机在设计验证阶段已经证明了其设计寿命,即设计寿命20W公里的发动机至少可以在很高的概率下可以跑上20W公里而毫无故障,甚至100W公里都没有故障。那么,此时,发动机就可以进入批量生产过程,批量生产时,发动机的制造工艺,制造工序,制造流程有着非常严格的规定,为了保证质量,发动机设计之初的各项指标都会被监控,只有达到相应标准的发动机才能做最终的热试,成功之后,我们就可以非常有信心的说,这台通过测试的发动机可以下线了(注:更先进的方式是冷试)

    从这个角度而言,上述过程在软件开发过程中,其实是交付阶段,因为此时发动机已经定型了,各项参数指标都以确定,需要的就是批量化生产。但是软件中不太容易找到对应的批量生产过程,尤其是在现在的互联网时代。不过,回想20世纪80年代的单机时代,那便是单机Copy了,例如盒装Windows的CD光盘。当然,在那时,软件在生产光盘的过程出错的概率远小于发动机的批量生产过程。

    如果还是要映射到互联网时代,那么对于Web 应用就是增加服务器,或者扩容之前的服务器,或者部署迁移到更新的服务器,而对于Mobile App来说就是推送到相应的应用市场,例如iOS App推送到AppStore,Android App是Google Play 。这样而言,Mobile App的“生产过程”都不需要自己管。

    再次,这是发动机下线与软件发布可能最大的区别:汽车发动机的使用方法和使用条件是严格受到限制的。汽车的车主必须自己保证发动机机油量正常,机油寿命正常,在正确的温度范围内,在正确的地方使用发动机,除此之外自己还需要主动定时去保养发动机。例如在机油量不足是,在泡水时,在极高/极低温度时,确保自己加了合适温度的防冻液才可以发动发动机,并且还要用户自己保证用的燃油达到相应的标准,假如用户给要求95#汽油的发动机加了0#柴油,或者80#汽油,就非常有可能导致发动机1公里都跑不了就已损坏。其实在真实情况下,也许都不需要这么极端的例子,就可以看到汽车厂商为了让自己的发动机能够达到宣称的性能与可靠性,对燃油有着极高的要求,我的一位亲友就遭遇了类似的时,购买了某德国著名豪华品牌轿车,从4S开出后,根据要求就近在某著名品牌加油站加了一符合汽车燃油标准的95#汽油,结果第二天早上,一点活,汽车便开始出现发动机故障告警。。。买了号称高品质的德国轿车,加着号称高标准的燃油,然而,汽车发动机依然不能正常工作。

    反观软件,它要待遇与发动机相比,简直是公主与灰姑娘的待遇。其运行的环境与发动机最大的区别是用户可以随心所欲,用户可以选择在任何时刻运行你的软件,完全不管此时是否CPU占用率已高达95%,Disk几乎已满,当然用户还会随意的切换,终止,重启应用,而且要求适用各种不同的运行平台,否者用户便各种吐槽,怎么IE6都兼容不了啊,怎们小米一开就死机了。想想发动机这位公主可以要求天天吃95#细粮,还动不动发脾气,而我们软件这位灰姑娘却要被给什么吃什么,还不能使小性子呢?也许就是这样的原因,软件的可靠性相对于发动机而言要更难于保证。

    我们可以发布了吗?

    回到之前的问题,为什么丰田发动机生产完成,只需要点火测试成功,就可以下线了,并可以跑上20W公里不坏呢?那是因为能跑20W公里的发动机在设计验证阶段就已经经过复杂的测试,保证其寿命几倍于20W公里。如果软件也同样经过复杂的测试,在各种场景下都能无误的运行500W小时。那么,只要我部署完软件,再做一个Somke Test,我可以自信的回答你,我们的软件可以正式发布了!并且跑上500W小时。否则,我确实没有信心一定可以发布。

    总之,汽车发动机的生产与软件开发是不同的,软件的开发其实应该对应于汽车的设计验证过程,如果一定要找一个类比,软件部署可能是一个更形象的比喻。

    那有其他方法可以让更放心的发布软件吗?请大家继续关注下篇。

    感谢博世中央研究院朱涛博士对文章发动机部分的校对。

    相关文章

      网友评论

          本文标题:[质量系列]我们可以发布了吗?

          本文链接:https://www.haomeiwen.com/subject/xfytittx.html