官术网_书友最值得收藏!

1.4.2 放棄追求完美

有些軟件的功能非常簡單,比如簡單的數學運算,或者統計用戶輸入字符的數量;有些軟件的功能非常復雜,比如操作系統,或者汽車的自動駕駛算法等。

對于復雜的軟件,因為它們有很高的復雜度,所以我們很容易理解它們為什么很難完美。

那么,對于特別簡單的軟件,我們是不是可以進行徹底的測試,保證它們是完美的呢?

這是不可能的!即使擁有無限的預算,我們也無法做到這一點。

我們來分析一個簡單的程序:接受用戶輸入的字符串,統計其中的字符數量。比如,對于輸入字符串Python,統計結果為6;對于test,統計結果為4……

要確保這個程序是完美的,我們就需要驗證所有可能的輸入。用戶可能輸入一個簡單的字符,也可能輸入整部《三國演義》,我們無法預知用戶的輸入是什么。用戶輸入字符的數量在理論上可以是任意一個自然數,而自然數的數量是無窮大的,我們無法把所有的情況都覆蓋到。

如果把問題簡化,限定用戶最多只能輸入10個字符,超過10個字符就告知用戶無法處理,這種情況下,我們能否進行徹底的測試?

這也是不可能的!在用戶輸入超過10個字符的情況下,程序真的會告知用戶無法處理嗎?為了確認這一點,我們需要把所有超過10個字符的輸入都覆蓋到,確保程序會告知無法處理,而不是意外地返回一個錯誤的統計值。大于10的自然數仍然是無窮多的,我們還是無法把所有的情況都覆蓋到。

如果我們把問題再度簡化,只測試字符數量在10個以內的有效輸入呢?

世界上有許多語言和文字,unicode編碼可以涵蓋世界上所有語言的字符,包含字符的數量級大概是一百萬。粗略地估算下來,用戶輸入字符數量為1個的情況,我們有100萬個測試要驗證;用戶輸入字符數量為10個的情況,我們有100萬的10次方個測試要驗證。只要有一個測試沒有被覆蓋到,我們就不能說在這種情況下程序可以正常工作,也就不敢說程序沒有bug。

在現實世界中,大部分軟件程序比這個字符統計的程序要復雜得多,它們一定有bug沒有被發現,或者有bug被發現了卻沒有被修復,它們肯定稱不上完美,卻仍然達到了較高的軟件質量,這當然不是因為它們把測試做得非常徹底,而是因為放棄追求不切實際的完美,在預算范圍內采用了合適的測試策略,得到較高的投資回報率。

主站蜘蛛池模板: 阜新市| 高尔夫| 多伦县| 新巴尔虎左旗| 灌阳县| 华阴市| 乳源| 克什克腾旗| 万源市| 阜新| 手机| 石台县| 海丰县| 隆德县| 巴林右旗| 紫金县| 瑞昌市| 嘉荫县| 黎城县| 镇康县| 漳浦县| 宾阳县| 乌兰县| 瑞安市| 定襄县| 伊通| 临清市| 十堰市| 西吉县| 远安县| 甘肃省| 清镇市| 贵阳市| 芮城县| 山阴县| 田东县| 兰考县| 永泰县| 中宁县| 两当县| 肇源县|