![]()
1986年4月26日凌晨1點(diǎn)23分,切爾諾貝利4號反應(yīng)堆的功率在4秒內(nèi)從200兆瓦飆升到33000兆瓦。這是設(shè)計(jì)功率的10倍。3分鐘后,兩次爆炸掀飛了反應(yīng)堆頂蓋,放射性塵埃飄向整個(gè)歐洲。
33年后,HBO把這拍成了劇。一個(gè)巴西QA工程師看完,把核電站的值班日志和自己團(tuán)隊(duì)的測試報(bào)告疊在一起對比——發(fā)現(xiàn)恐懼的形狀一模一樣。
測試被當(dāng)成表演
事故當(dāng)晚的"安全測試",本質(zhì)是一場政治秀。蘇聯(lián)電力公司要在勞動節(jié)假期前交差,證明備用電源方案可行。測試被推遲了10小時(shí),換了一批疲憊的夜班操作員。更致命的是,為了完成測試,他們手動關(guān)掉了自動停堆系統(tǒng)——就像為了跑通一個(gè)用例,把生產(chǎn)環(huán)境的熔斷器拔了。
操作員反復(fù)警告過領(lǐng)導(dǎo):反應(yīng)堆功率不穩(wěn),石墨尖端設(shè)計(jì)有隱患,建議取消。這些警告被記在了值班日志里,也被扔進(jìn)了廢紙簍。
反應(yīng)堆類型叫RBMK,有個(gè)反直覺的特性:水蒸氣越多,反應(yīng)越劇烈。正常設(shè)計(jì)應(yīng)該是自我抑制的,但這個(gè)型號在特定條件下會"正反饋"——像一段沒做邊界值測試的代碼,輸入越界時(shí)不是報(bào)錯(cuò),而是直接溢出。
緊急停堆按鈕(AZ-5)被按下時(shí),控制棒插入的瞬間反而先推高了反應(yīng)速率。設(shè)計(jì)缺陷+執(zhí)行變形+壓力傳導(dǎo),三層防護(hù)全部失效。這不是單一bug,是整個(gè)系統(tǒng)的級聯(lián)崩潰。
QA的"石墨尖端"
劇里有個(gè)細(xì)節(jié):科學(xué)家列加索夫在聽證會上揭露,控制棒的石墨尖端是為了省錢。全蘇聯(lián)的RBMK反應(yīng)堆都有這個(gè)問題,只是沒人愿意承認(rèn)。直到爆炸發(fā)生,才被迫面對。
軟件行業(yè)的等價(jià)物是什么?
可能是那個(gè)"暫時(shí)"關(guān)閉的監(jiān)控告警,是"下次再補(bǔ)"的集成測試,是"這個(gè)場景用戶不會這么用"的僥幸心理。每個(gè)決策單獨(dú)看都有理由: deadline、資源、優(yōu)先級。但串成時(shí)間線,就是一條通往生產(chǎn)事故的滑梯。
QA的責(zé)任不是找bug,是在別人想忽略bug的時(shí)候,把日志攤在桌上。
切爾諾貝利的操作員并非無能。他們按規(guī)程操作,規(guī)程本身有毒。這和很多團(tuán)隊(duì)的困境一樣:測試覆蓋率達(dá)標(biāo),但覆蓋的是錯(cuò)誤的東西;用例全部通過,但通過的用例不反映真實(shí)風(fēng)險(xiǎn)。
列加索夫在劇終的錄音里說:「謊言的代價(jià)是什么?不是我們會把謊言誤認(rèn)為真相。真正的危險(xiǎn)是,如果我們聽了太多謊言,就再也認(rèn)不出真相。」
當(dāng)"安全"成為動詞
核電站和軟件系統(tǒng)的相似性,在于兩者都是復(fù)雜系統(tǒng)。復(fù)雜系統(tǒng)的故障從不來自單一節(jié)點(diǎn),而來自節(jié)點(diǎn)之間的意外耦合。RBMK的設(shè)計(jì)者沒料到蒸汽空泡會和控制棒動作產(chǎn)生共振;你的架構(gòu)師可能也沒料到那個(gè)"臨時(shí)"的降級開關(guān)會在大促時(shí)連鎖觸發(fā)。
但差異也很明顯:軟件可以回滾,核輻射不能。
這種不對稱性讓軟件QA更容易被低估。沒有即時(shí)的蘑菇云,只有3周后的客訴、6個(gè)月后的監(jiān)管罰款、2年后的品牌崩塌。延遲反饋削弱了緊迫感,直到某個(gè)凌晨的報(bào)警把所有人叫醒。
切爾諾貝利的教訓(xùn)不是"要更小心",而是"要設(shè)計(jì)讓小心變得容易的系統(tǒng)"。
操作員在爆炸前有過窗口期。如果他們有權(quán)叫停測試,如果告警系統(tǒng)沒被禁用,如果控制棒設(shè)計(jì)經(jīng)過充分驗(yàn)證——但"如果"堆疊起來,就是組織文化的形狀。蘇聯(lián)的層級制讓一線人員只能執(zhí)行,不能質(zhì)疑;讓技術(shù)判斷服從于行政節(jié)奏。
很多公司的QA部門也在類似的位置:報(bào)告風(fēng)險(xiǎn),但不決定風(fēng)險(xiǎn)是否被接受;記錄缺陷,但不決定修復(fù)優(yōu)先級。這種結(jié)構(gòu)性無力,比任何技術(shù)債務(wù)都危險(xiǎn)。
4月26日的遺產(chǎn)
2019年劇集播出后,國際原子能機(jī)構(gòu)重新審查了RBMK的改進(jìn)記錄。發(fā)現(xiàn)即使在切爾諾貝利之后,某些型號的控制棒問題直到1991年才完全修復(fù)。5年,足夠一個(gè)嬰兒學(xué)會說話,足夠一個(gè)行業(yè)"忘記"為什么要改。
軟件行業(yè)的記憶更短。去年出事故的組件,今年還在新項(xiàng)目里被引入;前季度的復(fù)盤結(jié)論,下季度就沒人記得。我們擅長 sprint,不擅長馬拉松。
列加索夫在劇里有個(gè)動作反復(fù)出現(xiàn):他不斷要求看原始數(shù)據(jù),而不是經(jīng)過層層匯總后的"情況正常"。這是QA的本能——穿透報(bào)告鏈,觸摸原始日志。當(dāng)他說「我要看石墨的溫度讀數(shù)」,他說的是每個(gè)測試工程師在評審會上想說的話。
劇集最后一集,列加索夫在自殺前錄下真相。現(xiàn)實(shí)中,他的錄音直到蘇聯(lián)解體后才被公開。技術(shù)人員的責(zé)任感,有時(shí)候需要以職業(yè)生涯甚至生命為代價(jià),才能穿透組織的隔音層。
大多數(shù)QA不會面對這種極端選擇。但每天的小選擇堆疊起來:這個(gè)bug要不要追根溯源?這個(gè)風(fēng)險(xiǎn)要不要升級?這個(gè)"臨時(shí)"方案要不要留下書面反對記錄?
切爾諾貝利的操作員在爆炸前幾分鐘,還在試圖理解儀表盤上矛盾的讀數(shù)。他們的系統(tǒng)沒有給他們"暫停測試"的按鈕,只有"繼續(xù)"或"緊急停堆"——而緊急停堆本身,就是觸發(fā)災(zāi)難的最后一步。
你的測試框架,給一線人員留了"暫停"的權(quán)限嗎?
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.