孔子說「人無遠慮,必有近憂」,用在軟體測試上,是什麼意思呢?可以這樣理解,如果我們不從發生問題的根源上解決問題,認為測試僅僅是找
bug,千方百計找
bug,覺得
bug總是找不完,意識中就會陷入「永無天日」的狀態。然而,有小部分測試人員還真希望軟體存在多一些問題(唯恐天下不亂),這樣可以多提交
bug,認為業績比沒有提交多少
bug肯定要好。無獨有偶,有小部分開發人員也把自己犯下的程式錯誤視為理所當然,甚至還有個別人會戲虐地說「軟體如果沒有
bug的話,測試人員不就失業了」。這好像在唱一出雙簧戲。軟體開發的整個過程中,
bug是理所當然要存在的,是這樣嗎?軟體工程中軟體危機的根源問題只能通過找到
bug的手段來控制嗎?
實際上,我們都很清楚,任何乙個
bug的產生都是有**的,**包括需求的設計、軟體的設計(含**的編寫)等。相對於前端的設計,測試是事後的驗證,是一種「堵」漏洞的措施。然而,在實際工作中,時間與成本並不允許我們去堵住所有的
bug。日本質量大師田口玄一說得好「質量是設計出來的,而不是測試出來的」。如果我們能變被動為主動,在設計之前,就做好設計的防患措施,為設計高質量的軟體打下堅實的基礎,這便是本節打算向讀者介紹的測試的第三重境界:挑戰零缺陷。
幾乎在每次面試測試工程師時,筆者都會問乙個這樣的問題:「你所負責測試過的模組,是否存在漏測的情況」,幾乎每個應聘者都回答說「有」。面對複雜的軟體,紛繁複雜的執行環境,在有限時間內進行的測試活動,做到真正的零
bug是 不可能的,也是不現實的。但這些都不是理由,所有的測試活動是有目的的商業活動,每個公司有自己測試通過的一套標準或原則。雖然漏測不可避免,但並不是說 漏測是一種正常現象或應該的現象,出現的漏測問題如果超出公司所能接受的原則,就屬於不正常的現象,很有必要進行漏測分析。進行漏測分析活動(需要特別注 意的是它絕不是對漏測人員的批鬥會),它的主要目的是通過分析過去的教訓,找出問題的根源,分析測試中哪個環節工作存在缺失,以拿出規避的可操作的措施出 來。
測試人員進行漏測分析時,免不了對問題進行追本溯源。軟體是由開發人員設計出來的,所以漏測分析活動少不了開發人員在場,甚至有時還會涉及需求設計人員。關於漏測分析的追本溯源,這裡有乙個關於開發與測試之間的工作關係像修築堤壩一樣的有趣比喻,如圖
2?11
所示。開發人員設計軟體就像修築一道堤壩,如果堤壩在結構上存在問題,當洪水衝擊時,可能不只是區域性的洩漏,而是直接的決堤,猶如軟體的崩潰。高高的堤壩,難免會存在漏水的小洞,或滲水的小孔,就好像軟體中存在的小
bug。越是在堤壩基部的漏水或滲水問題越難發現,解決的代價也越大。
在設計時要把結構建牢,不存在漏洞當然更好,這是一種防範。如果超越防範界線,把設計帶出的大洞小孔遺留到測試環節,它只好拿著各種放大鏡(使用各種方法)來檢測,以網羅各種深深淺淺、大大小小的問題,最後通過「打補丁」的方式,堵住堤壩上的「百孔千瘡」。
在對缺陷的防與堵方面,測試是發現問題的中間角色,告訴開發人員**漏水或滲水了。防與堵的工作是由建堤者來做的。當然,防是主動的,堵是被動的,主動變為被動後,中間經歷了資源與時間的投入,誠然即使是同乙個
bug,它們的代價也是完全不一樣的。這種堵越在後面,影響越大,代價也就越大,如表
2-6所示(摘自《**大全》)是乙個根據缺陷出現的階段來增加測試成本的例子。
表2?6
根據缺陷的引入和檢測時間,修正同一缺陷所需的平均成本
引 入 時 間需求
體 系 結 構建設
系 統 測 試
發 布 之 後需求1
35~10
1010
~100
體系結構--1
101525~
100建設
----11
10~25如表
2-6所示為在需求階段引入的乙個缺陷。如果立即發現了此問題,修改成本只需要
1美元,但如果在系統測試階段發現它,修改成本就增加了
10倍。更為嚴重的是,如果在版本發布後使用者端發現了此問題,則需付出
10倍以上甚至是
100倍的代價。缺陷在系統中的時間越長,解決它的代價就越大,因為時間越長,開發與測試人員修改的成本就越高,還將影響大面積的使用者端公升級。
2版)》一書
肖利瓊著
電子工業出版社出版
第三重關 多重揹包
問題描述 已知如下條件 n個物品 容量為v的揹包 vi 第i個物品所占用的容量空間 wi 第i個物品所獲得的價值數值 ni 第i個物品最多選取的個數 求解 該揹包可以裝下的最大價值是多少?解題思路 該問題可以轉化為01揹包,乙個物品可以被最多選擇ni次,那麼就相當於有ni個該物體,那麼每乙個物品都可...
BaseAdaPter的三重境界
逗比式 文藝式 普通式 1 逗比式 view view minflayer.inflate r.layout.item,null 存在缺點 重複創造view findviewbyid依然會浪費大量時間 逗比式 view view minflayer.inflate r.layout.item,nul...
實現迴圈的三重境界
王國維歪解宋詞,用它表達事業的三重境界。老譚要談談c 中編寫迴圈的三種方式,也來個東施效颦,不過是用唐詩來表達。王國維選擇宋詞,非常貼切,也給宋詞增色不少。老譚沒這水平,只是亂選一氣。我們的例子是報表查詢 根據給定的關鍵字,查詢符合條件的報表,即報表名字是否和關鍵字相匹配。關鍵字的結構類似於goog...