從CT技術想到的軟件測試


年前的時候被體內一顆短徑4.8mm的小石頭折磨,還提前休了幾天病假,並第一次被要求去做了個CT。第二天拿到了報告,完全看不懂,諮詢了當外科醫生的高中好友,他打了一個簡單又有點噁心的比方,就像在自助餐廳裏服務員拿一大塊牛肉用機器切成幾毫米的薄片,每一張圖就是一片。嗯,話糙理不糙,大概懂了。
因爲好奇,後來在網上查了下CT相關的技術,覺得很有意思,有興趣的可以看看。

CT涉及到很多計算機圖形學的東西,或者可以說沒有計算機技術的發展,CT技術也很難實用。CT現在已經變成了一種標準的醫學檢測手段,不過做一次價格還是不菲,要好幾百。

聯想到自己一直從事的軟件測試工作,覺得有很多的啓發。

姑且我們把檢測作爲測試的一個部分,簡單來說其目的大致有兩類。
- 檢查有沒有問題,比如體檢
- 試圖確定問題在哪兒,比如不舒服之後去做某些項目的檢查

其實我們的測試工作很多時候也是做這樣的事情。拿到一個新的版本或者改動,去檢查有沒有問題,覺得有些地方不太對勁的時候,試圖去獲得更多信息來幫助判斷問題可能出在哪裏。

和軟件測試一樣, CT並沒有直接的改變被測對象,問題還是在哪裏;另一方面,它也沒有直接給出如何修復或者說是治療的方法。但是它們有一個共同點,那就是能發現問題,並且提供有價值的信息!
當然,做到這些還有一些重要的前提,比如:
1. 結果的準確性。
這一點毋庸置疑,錯誤的結果會誤導,甚至延誤重要的時機。這個也是一項新技術出現的根本。

2. 侵入性
一項測試手段對被測的對象的影響。這也是CT技術超越動脈造影、氣腦造影、開顱探查等傳統檢測手段的一個重要原因,它對人體的傷害和影響要小很多,當然X光本身也是有傷害的,只不過不常做的話影響不是很大。
對於軟件測試也是一樣,如果一項測試技術會干擾到產品本身的運行,就會影響到測試的效果或者適用範圍。例如coverage test是一個很好的幫助測試人員判斷測試的範圍和程度的手段,但是因爲它比較具有侵入性,不僅是影響性能,有時甚至會影響到功能,所以使用受到限制,一般也不會放入production的代碼中。

3. 檢測的速度和效率
在前面關於CT的文章中也可以看到,從第一代的機器到後面的改進,很重要的一個指標就是掃描的速度,這其實也是檢測的效率的問題。能及時的判斷有沒有問題或者發現問題是很重要的,對於軟件測試也是一樣,特別是對於互聯網產品,發佈的週期非常短,很多產品平均每週都有好幾次發佈,如果一項測試需要花到幾天的事情,基本就很難廣泛使用。而速度和效率很多時候需要依靠新的更先進的技術。比如CT的掃描速度的依賴於更多的探測器和更強的計算機處理能力。

4. 成本
成本也是一個很重要的因素,因爲太昂貴的東西難以普及。可以參見上面第三個link中CT早期因爲成本也是一個政治話題。成本包括很多方面,初次購買設備、運營維護(耗材,電力等)、工作人員的成本。對於一個新的測試手段也是,需要的工具和平臺(軟硬件)、初次開發的成本、日常維護的成本等。


這裏順帶有一些關於自動化的思考,還是來自於醫學檢查的啓發。
醫學的檢查有很多的方面,包含最簡單的身高、體重和血壓。這些通常是用手工的方法,後來有了簡單的自動化的工具,用來提高效率,如果條件不夠的地方,還是可以退回到人工的方式來做。但是很多檢測的手段,手工是沒有辦法做的,必須藉助於先進的技術和工具,比如我們這裏提到的CT,除了弄一臺CT機通常也沒什麼辦法。
這就好像如果計算機只是用來算數字,比如傳統的計算器,那麼它起到的作用就只是加快速度,提高效率。理論上來講在這種情況下還是可以手動來做的,只是時間可能長得無法接受。但是如果它用來做視頻的解碼和播放,那就有質的變化了,這個時候已經完全無法用手工來做了。
我想對於我們的測試手段也是一樣,有些模擬用戶操作的手工測試可以被自動化,但是有時也可以退回來手工,但是有些測試,比如性能測試,壓力測試以及fuzzing test等則很難不借助必要的工具來完成。更進一步,前面的手工測試一旦可以自動化以後,也會帶來質的變化,因爲我們可以在每次稍大的改動之後就把所有的自動化用例完整的跑一遍,但是如果是手工的,這樣做起來就不太現實。


對比醫學檢查,目前的軟件測試顯然還沒有達到這樣的程度,粗淺的想了一下,可能有下面的一些原因:
1. 人類身體各器官的構造,即便考慮年齡、種族等因素,其差別也是很小的。
  但是軟件的差別則很大。不過我在想,對於同一類的軟件是不是有一些共性,比如Windows桌面版的應用,一個用來處理大量客戶端請求的Linux daemon,一個Android App?

2. 比較容易判斷有沒有問題
  其實和第一條也有一些關係,因爲已經有大量的經驗值,比如大家看到的體檢報告上常會給出某個檢測指標的參考值,比如白細胞計數,血壓和血糖的正常範圍。有了這些數據之後就比較容易判斷正常和異常。而對於軟件而言,這些相對比較困難,或者說目前目前只能做到一些相對外圍的比較粗略的,比如crash,比如mem leak,或者CPU使用過高等。但是對於內部邏輯是否正確,當前狀態是否正常就比較難以判斷了。
就目前的狀況來看,還需要一些針對性的定製來解決這個問題。

3. 標準的檢測手段
   CT藉助了X光來進行成像。X光是一個很核心的檢測方法。
   那麼對於軟件,我們有沒有什麼比較標準的檢測方法?性能測試中有一些標準的指標,對於CPU,內存,網絡,文件系統或者進/線程本身,但是這些還不夠。


對於很多公司的軟件測試部門或者團隊,大家常會提到一個問題,就是如何推動開發自測,很多情況下這都是一個比較難的問題。
這是一個提了很久的話題,除了協作和配合以及人的觀念的問題,我覺得另外兩個方面也值得考慮:
1. 沒有標準改進就無法進行。
  如果有一套比較針對性的標準的檢測方法,其實也是一個改進的指導。

2.如果能有一套簡潔高效的測試方法,比如一套穩定高效的自動化測試集,那麼推動開發自測就不是一個問題。
- 能高效快速的知道有沒有問題,並在失敗時給出必要的信息
- 上面這一條做到了,而且自動化程度很高,這個時候就可以把這個作爲一個內部的標準,開發人員做出來的東西如果不能pass這些測試,就不需要提交給測試人員做進一步的測試。這樣這些驗收測試慢慢就不需要測試人員來做了,相當於也提高了提測的門檻。


如果能達到類似的程度,我相信就不會有人質疑測試這項工作本身的價值和技術含量,因爲“1979年10月,由於Hounsfield和Cormack在該領域的開拓作用,獲得了當年的諾貝爾醫學獎”。就好比會有病人或者醫生質疑CT和MRI等檢測手段的價值和技術含量嗎?

手工的測試是有價值的,但是個人的觀點,我覺得測試作爲一個專業領域,方向還是應該逐漸的把一些通用的技術和方法通過工具和系統的方式固化下來,依靠先進的技術,變成可以更便利和更大範圍收益的東西,而更有經驗的人,去改進現有的東西,或者再去探索新的技術和方法。


嗯,最後想提醒自己和大家要多喝水,多注意身體!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章