故障強(qiáng)奸了我 我還要謝謝她

痛并快樂(lè)著

進(jìn)入新公司后,接手小程序3周,接連被”故障”強(qiáng)奸兩次。

?說(shuō)實(shí)話(huà),我到現(xiàn)在內(nèi)心是崩潰的,甚至有點(diǎn)”恐懼”,一聽(tīng)到”故障”我現(xiàn)在都會(huì)手腳出汗。

不過(guò)遇到”故障”,必須要直面面對(duì),這也是開(kāi)發(fā)和成長(zhǎng)的一部分,所以我必須選擇一種直面應(yīng)對(duì)”故障”的方案,因?yàn)橹灰页掷m(xù)開(kāi)發(fā)下去,肯定會(huì)有”故障”出現(xiàn),但是我可以規(guī)避一些”故障”和快速發(fā)現(xiàn)一些”故障”。

(如果目前你也沒(méi)有建立起”故障”的概念,我希望用過(guò)這篇文章能讓你對(duì)”故障”產(chǎn)生一定的意識(shí),因?yàn)檫@對(duì)于你以后可能會(huì)有所幫助。)”故障”,

在每個(gè)公司可能名稱(chēng)不一樣。
我理解的”故障”是bug的升級(jí)版,一般在生產(chǎn)環(huán)境下發(fā)生的問(wèn)題我認(rèn)為叫做”故障”,而在開(kāi)發(fā)環(huán)境下一般叫做bug。

以前所在的公司,因?yàn)橛脩?hù)消費(fèi)行為比較少,對(duì)于”故障”的概念,并沒(méi)有完整意義的理解,也不會(huì)引起代碼本能的意識(shí)。

但是目前的公司,因?yàn)橛脩?hù)量和用戶(hù)行為與消費(fèi)直接掛鉤,一旦發(fā)生故障,就會(huì)對(duì)業(yè)務(wù)產(chǎn)生影響。

故障一般都是從bug隱藏開(kāi)始的,因?yàn)閷?shí)際的生產(chǎn)環(huán)境和開(kāi)發(fā)環(huán)境有著很大的不同,在開(kāi)發(fā)環(huán)境下,不管是程序員本身還是測(cè)試人員,都不能夠覆蓋到所有的bug。

而在生產(chǎn)環(huán)境下,用戶(hù)基數(shù)變大、場(chǎng)景變化以及設(shè)備多樣性還有很多不定項(xiàng)的因素,這些因素都是在測(cè)試環(huán)境下很難模擬的。一經(jīng)生產(chǎn)環(huán)境下一定用戶(hù)的使用,就會(huì)觸發(fā)bug,進(jìn)而影響業(yè)務(wù)進(jìn)行,升級(jí)為”故障”。

這也是為什么產(chǎn)品小步快跑,這樣不僅可以驗(yàn)證產(chǎn)品本身的正確性,也可以在可控范圍內(nèi)查看產(chǎn)品本身是否就具有bug。

有必要說(shuō)一下,在經(jīng)歷了這段恐怖的日子以后,我總結(jié)了幾點(diǎn)規(guī)避”故障”和定位”故障”的經(jīng)驗(yàn)

一 做好足夠的經(jīng)驗(yàn)儲(chǔ)備

(是的 雖然你被強(qiáng)奸了,但是還是要寫(xiě)出你的經(jīng)驗(yàn)!)

這一點(diǎn)我認(rèn)為是最重要的,發(fā)生”故障”雖然恐怖但是可以容忍,
但是再次發(fā)生同樣的”故障”這就是極大的錯(cuò)誤和失敗。

所以,每次發(fā)生”故障”,解決以后,你必須要做好文檔和解決方案的編寫(xiě),避免再次發(fā)生。

具體就是維護(hù)一個(gè)常見(jiàn)的”故障”庫(kù),每次進(jìn)行”故障”review,都要寫(xiě)明”故障”的原因、發(fā)現(xiàn)、解決、規(guī)避的過(guò)程,形成文檔這樣也可以讓這份文檔,成為代碼review、測(cè)試參考、編寫(xiě)規(guī)范的一部分,有效的規(guī)避出現(xiàn)同樣的錯(cuò)誤什么叫做專(zhuān)家? 每行每業(yè)經(jīng)驗(yàn)多了,踩坑填坑填多了就變成了專(zhuān)家。所以經(jīng)驗(yàn)是很重要的,切記切記。

二 收集環(huán)境變量,所謂環(huán)境即用戶(hù)使用的環(huán)境,確定這些環(huán)境是否發(fā)生變化。

(注意查看強(qiáng)奸現(xiàn)場(chǎng), 保存證物)

比如,對(duì)于小程序而言,影響因素有很多,手機(jī)型號(hào)(iOS/Android)、手機(jī)版本(iOS10.0.x or iOS9.x)、微信版本(6.5.4/6.5.6)、小程序的SDK版本等。

我遇到的”故障”中,如果是在全量下發(fā)生的”故障”,基本上可以肯定是代碼錯(cuò)誤或者是邏輯錯(cuò)誤,但是比較難發(fā)現(xiàn)和定位的基本上就是在特定機(jī)型或者特定版本上發(fā)生了”故障”,這點(diǎn)是很痛苦的。

Screen Shot 2017-04-07 at 10.00.24 PM.png
Screen Shot 2017-04-07 at 10.00.38 PM.png

比如在這個(gè)”故障”中,當(dāng)你在輸出超過(guò)4位時(shí),只在Android 微信版本為6.5.6的下才會(huì)被觸發(fā),實(shí)際上很簡(jiǎn)單,只要修改value不再綁定test值即可,這個(gè)在MVVM中很容易出現(xiàn)的”循環(huán)綁定”,但是這個(gè)問(wèn)題卻在其他機(jī)型和系統(tǒng)上不會(huì)出現(xiàn)。

最后,才發(fā)現(xiàn)是因?yàn)榍皫滋煳⑿虐姹旧?jí)后,不再”包容”這個(gè)錯(cuò)誤,然后點(diǎn)燃了這顆”炸彈”。

所以及時(shí)的關(guān)注這些環(huán)境變量,一旦發(fā)生環(huán)境變量變化,自己主動(dòng)去驗(yàn)證在這種環(huán)境變量發(fā)生變化后,程序會(huì)不會(huì)發(fā)生”故障”,及時(shí)發(fā)現(xiàn)及時(shí)修正

三 做好版本管理,發(fā)生故障,切回上一個(gè)版本,看是否是在以往代碼就已經(jīng)存在,縮小”故障”點(diǎn)排查范圍

(及時(shí)的擺正心態(tài),應(yīng)對(duì)強(qiáng)奸)

這一點(diǎn),比較容易理解,不再展開(kāi)。

四 做一個(gè)代碼保守派

(大半夜,別出門(mén)。老老實(shí)實(shí)在家了,減少遇到壞人的幾率)

盡可能使用流行方案編寫(xiě)你的程序,除非你想要嘗試新東西,并且自己有足夠的實(shí)力來(lái)進(jìn)行維護(hù)新庫(kù)。

新的代碼庫(kù),可能引發(fā)一些未知的錯(cuò)誤,所以如果業(yè)務(wù)面向的是用戶(hù),那么選擇一種比較流行的代碼庫(kù)是一個(gè)明智的選擇??梢詤⒖糶ithub的star數(shù),因?yàn)樵绞橇餍械拇a庫(kù),遇到的問(wèn)題、修復(fù)的問(wèn)題、存在的問(wèn)題都會(huì)被及時(shí)有效的控制,你也可以在相關(guān)issue或者社區(qū)中找到解決方案的答案,即使沒(méi)有,你也可以提出問(wèn)題,獲取其他人的幫助。

反觀(guān)新庫(kù),由于種種原因,可能不適合你在生產(chǎn)環(huán)境下使用,風(fēng)險(xiǎn)太大。

但是,對(duì)于你來(lái)說(shuō),如果發(fā)現(xiàn)一個(gè)新代碼庫(kù)比較好,可以嘗試在平時(shí)關(guān)注和提出你的想法,維護(hù)和壯大這個(gè)庫(kù),來(lái)讓大家更放心的使用。

比如小程序中使用”es6-promise”\在OC中使用AFNetworking\在PHP中使用TP\在Node中使用Express等

五 盡可能的自己測(cè)試

(多學(xué)一點(diǎn)防狼術(shù), 遇到壞人,一招斃命)

這一點(diǎn)基本上公司是會(huì)提供支持,不管是QA,還是你需要的設(shè)備已經(jīng)環(huán)境,可以和相關(guān)的人進(jìn)行申請(qǐng),不要認(rèn)為這是在增加你的工作量,相信我,你越是測(cè)試的多,越是能保證你自己的工作進(jìn)度和心情。

為什么不讓QA進(jìn)行測(cè)試?我告訴你,”故障”的直接責(zé)任人是你,但是你可以盡可能的陪同QA進(jìn)行測(cè)試。

關(guān)于修復(fù)”故障”方面

不同技術(shù)有不同的方案
對(duì)于后端來(lái)說(shuō),代碼可以及時(shí)的在服務(wù)器上修正或者回滾
對(duì)于前端來(lái)說(shuō),代碼可以及時(shí)的在服務(wù)器上修正或者回滾對(duì)于
iOS/Andorid, 也有類(lèi)jsPatch(不知道蘋(píng)果爸爸還讓不讓用)的熱修復(fù)方案

我舉的幾個(gè)例子,可能太多以小程序?yàn)槔?,畢竟小程序是一個(gè)特例,發(fā)生故障后,時(shí)間修復(fù)問(wèn)題的時(shí)間是不可控的,因?yàn)楸旧硇〕绦虿恢С譄嵝迯?fù)和回滾版本。

但是對(duì)于小程序,我目前沒(méi)有很好的方案來(lái)做一個(gè)bak方案,如果你有更好的方案,可以留言或者找我,非常感謝。如果代碼強(qiáng)奸了你,別反抗別掙扎,嘗試去享受.

201704061140:翻過(guò)珠穆朗瑪峰,你還害怕阿爾卑斯山嗎?

Di 訂閱號(hào)“小碼消息” - 或許,只有小碼消息才可以拯救中國(guó)程序員

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,983評(píng)論 25 709
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,545評(píng)論 19 139
  • 文章來(lái)自:http://blog.csdn.net/mj813/article/details/52451355 ...
    好大一只鵬閱讀 9,356評(píng)論 2 126
  • 1.問(wèn):你在測(cè)試中發(fā)現(xiàn)了一個(gè) bug ,但是開(kāi)發(fā)經(jīng)理認(rèn)為這不是一個(gè) bug ,你應(yīng)該怎樣解決。 首先,將問(wèn)題提...
    qianyewhy閱讀 9,386評(píng)論 4 123
  • 看過(guò)文物鑒定的人大概都知道,考古專(zhuān)家時(shí)常會(huì)說(shuō)這樣一句話(huà),“這件東西不對(duì)”,這算是著實(shí)讓人驚訝的一句話(huà),其實(shí)仔...
    神威上將軍閱讀 1,259評(píng)論 0 2

友情鏈接更多精彩內(nèi)容