軟件測試淺悟妄語[2] 軟件測試
從“測試”二字說起
一個民族的文化能夠得以保存,是因為有了語言和文字。其中尤以文字最為厲害,因為語言難以記錄(錄音機、MP3和DV那是近幾年的事兒),在千萬年的口耳相傳中難免產生訛變和失傳,而文字是相當穩定的東西,即使發生訛變和誤用,機率也比語言要小得多。
特別是中國的方塊字,那就是一座寶藏。古人在造字之初的含義就蘊含在這方寸之間,雖歷經甲骨鐘鼎、篆圓楷正,卻幾乎一點不變地穿越時空,把祖先想表達的意思直接帶到我們面前。拉丁文等拼音文字就差一些了,它沒有“形狀”,只能依靠字母的排列組合來作為遺傳的DNA了。
中國人把Test翻譯成測試,妙哉!
先看“測”字。從“水”、從“則”?!皠t”為何物?我們常說的“規則”,規是用來畫圓的、矩是用來畫直角的,則最早是用“刀”把章法刻在“鼎”上讓人們遵守的——后引申為“尺度”。這下,圓規、直尺、三角板都齊了,呵呵。拿尺子伸到水里,不就是測量水的深度嗎?這就是“測”的本意——亙古未變。再進一步,其實測量不光能測水深吧,凡是與被測對象的屬性打交道、進行量化的行為,都應該算作“測”。秦始皇下大力氣統一“度”(長度)“量”(體積)“衡”(貨幣),不都是為了方便測試行業在全國的統一發展嗎。請大家注意,“測”字為我們傳遞了一個非常重要的信息,那就是“靜態”?;旧峡梢哉f,如果被測對象不是相對靜態的,那么就無法測量了。量子物理中的“測不準原理”中的測,也正是說明這一點。
再看“試”字。從“言”從“式”。 試,用也——《說文》。毋庸多言,“試”字為我們傳遞的重要理念是“動態”——使用,當然是動態的。而且,軟件測試在國際范圍內的公共定義就是“為了找到軟件缺陷而進行的使用”。引申一步,“試”字從“言”,又有“考試”一個含義??磥?,這個考試是口試了,呵呵。既然是考試,那么問答就是必要的了,所以會有一個言字,其實這一“問”和一“答”就是軟件的“輸入”與“輸出”。
軟件的Build從拿到我們手里開始,就是處在“動”與“靜”的交替狀態。既然是動靜交替,我們非要先把靜的挑出來寫成Case、再把固定某一種“動”挑出來寫成Case(而不管它在什么時候出現),當然是件很麻煩的事情。那么我們應該怎么辦呢?
對軟件的“測”
上文提到,靜者為測。讓我們想想軟件都在什么時候是“靜”的。
我們看一個自然的流程:Build下載à下載完成à安裝à安裝完成à開啟à使用à關閉à卸載。哪些是靜?哪些是動?讓我們一一剖析。
1. 下載 : 全部屬性處在動態而不可測中。
2. 完成: 靜態。此時可測量軟件的大小、Hash驗證碼等。
3. 安裝: 全部屬性處在動態而不可測中。
4. 完成: 靜態。此時可測量軟件各文件大小,目錄,COM注冊情況,注冊表情況等屬性。
5. 開啟: 動態。全部屬性處在動態而不可測中。
6. 使用: 半動態。哈!怎么是半動態呢?因為這時候軟件已經從硬盤Load進內存了,在內存中是相對靜態的。你可以觀察內存占用是否穩定、有否泄漏。這就叫“靜中有動,動中有靜”,這才是咱們中國人的哲學。
7. 關閉: 靜態。檢查運行后的生成物(如聊天記錄、Log文件、temp文檔)是應該存在還是被刪除。
8. 卸載: 靜態。檢查有沒有遺留物,硬盤、注冊表,都找找看。
看,這樣理順下來,是不是寫Case就輕松多了?如果要是按照Test Plan的架構來寫Case,這些Case應該分布在至少是“內存檢驗”“注冊表檢驗”“安裝測試”“文件完整性測試”……等等分支里??傊?,在軟件處在相對靜態的時候,你能深入想出軟件的多少屬性,那么就能寫多少Case。進而,你能想出多少直接和間接影響軟件這些屬性的環境因素,就又有多少Case出現……然而,我們的思考能力是有限的,我們幾乎不可能把軟件的所有屬性都想到,我們也不可能把所有可能影響軟件靜態屬性的環境因素都找出來——即使是使用各種靜態測試工具,比如內存跟蹤工具等——也不可以完全做到。因此,有了我開篇的妄語。
原文轉自:http://www.anti-gravitydesign.com