如何測試軟件的穩定性其實是很難的,按照常規思路,只有長期的用戶場景測試才能一定程度上保證軟件的穩定性是可靠的,但並不能百分之百確定軟件就是穩定的。軟件測試本身就是由局限和盡頭的,無窮的測試只能帶來高成本的投入和無限期的計划延長。
其實,可以從反面角度來看待軟件的穩定性,我們從一個簡單的數學定理入手:
原命題成立,則逆否命題也成立。
原命題:軟件沒有明顯缺陷,所以是足夠穩定的
逆否命題:軟件並不是很穩定,所以有明顯的缺陷
假設原命題是正確的,那么你否命題應該也是正確的。
我們從原命題出發,很難說服團隊去相信軟件是足夠穩定的,因為穩定的軟件是沒有明顯缺陷的,沒有數據的支撐和客觀的事實,簡單的例子就是,一我們不可能發現軟件中所有的缺陷;二我們不可能花2~3個月不定地運行軟件然后生成報告說經過長時間的實驗軟件十分穩定,時間不允許,就算時間允許我們也不敢保證3個月后程序是否還繼續穩定如初。
從逆否命題出發會簡單許多,我們可以短時間內投入足夠的精力去想辦法證明軟件很不穩定,比如讓軟件在高負荷下持續運行,給不同的壓力和並發請求,進行破壞操作等等,如果軟件沒有出現明顯的缺陷那么說明原命題也是成立的,從這個角度思考就可以從容地解決軟件穩定性驗證的問題。
搞破壞比搞建設容易的多,這也是為什么會有混沌工程這么學說。
