妄語:
軟件是不可測試的,因為我們的眼界不是無限的、手段不是無限的;
軟件是可以測試的,因為軟件的用戶是有限的,用戶的操是有限的。
小序:
近日有朋友抱怨說自己因為寫不出測試Case、報不出Bug而壓力很大,以致經常夢到豬籠草及殺蟲劑,或者在廚房中遭遇不長眼的小強并將其拍死后竟條件反射地打開電腦想報個Bug給Lead。朋友問我怎么辦,其實我也是一臉苦笑——抓Bug有時是要看運氣的——如果Version是在寅時Build出來,興許Bug會多一些,如果是在申時Build出來,興許Bug會少很多(如果開發團隊在國外,別忘記倒時差)。
這些當然是說笑。我想說的是,目前市面上大多數軟件測試類書籍都是國外作者寫成,雖然也有不少著作是我們中國測試專家寫成,但里面引經據典了很多國外作品,使測試思想沿習了歐美的思路。
一個民族最偉大的東西是什么?是文化和思想。那么我們能不能用中國的文化和思想去重新審視軟件測試的方法,創新出自己的思路來呢?本文就是一次斗膽嘗試。
正文:
測試中的文化
西方人善于推理,因此他們的測試流程是——
1. Test Plan
2. Test Case
3. Find Bug
4. Review fixed bug
以上這4個環節是用推理的辦法逐步細化,并隨著軟件版本的更新而迭代前行的。
中國人善于歸納,按照上面的這個流程做測試時,最大的困難是第一步到第二步的跨越——依Test Plan去正推Test Case是件很痛苦的事情,很容易陷入兩個誤區:一個誤區是寫了一大堆不疼不癢的Case,把測試變成了跑龍套;另一個誤區是過分追求要抓到Bug,結果產生很多疏漏。
為什么會出現這種情況呢?原因在于文化。Test Plan本身是按“邏輯”將軟件的功能分組,然后進行測試,老外的邏輯思維能力是比較強的,基本上能夠比較輕松地把符合Test Plan中某個分枝的操作都挑出來、Fill進Test Plan里,而這在我們中國人看來,這是對軟件操作的一種“割裂”,因此心里會感覺很亂、無從下手——于是測試就成了一個怎么也走不出去的迷宮。
我的辦法是:先寫Test Plan,但不以Test Plan為指導方針;按照軟件的Functions寫Test Case,然后把Test Case分門別類填充到Test Plan的框架中去——這一步就是歸納——有時候對于特殊的軟件,甚至可以歸納出不同尋常的測試分支來。
你可能會問:不按Test Plan怎么寫Case??那不成了胡寫八寫了?
下面我就來說說我是怎么分析功能、寫Case的。
從“測試”二字說起
一個民族的文化能夠得以保存,是因為有了語言和文字。其中尤以文字最為厲害,因為語言難以記錄(錄音機、MP3和DV那是近幾年的事兒),在千萬年的口耳相傳中難免產生訛變和失傳,而文字是相當穩定的東西,即使發生訛變和誤用,機率也比語言要小得多。
特別是中國的方塊字,那就是一座寶藏。古人在造字之初的含義就蘊含在這方寸之間,雖歷經甲骨鐘鼎、篆圓楷正,卻幾乎一點不變地穿越時空,把祖先想表達的意思直接帶到我們面前。拉丁文等拼音文字就差一些了,它沒有“形狀”,只能依靠字母的排列組合來作為遺傳的DNA了。
中國人把Test翻譯成測試,妙哉!
先看“測”字。從“水”、從“則”!皠t”為何物?我們常說的“規則”,規是用來畫圓的、矩是用來畫直角的,則最早是用“刀”把章法刻在“鼎”上讓人們遵守的——后引申為“尺度”。這下,圓規、直尺、三角板都齊了,呵呵。拿尺子伸到水里,不就是測量水的深度嗎?這就是“測”的本意——亙古未變。再進一步,其實測量不光能測水深吧,凡是與被測對象的屬性打交道、進行量化的行為,都應該算作“測”。秦始皇下大力氣統一“度”(長度)“量”(體積)“衡”(貨幣),不都是為了方便測試行業在全國的統一發展嗎。請大家注意,“測”字為我們傳遞了一個非常重要的信息,那就是“靜態”;旧峡梢哉f,如果被測對象不是相對靜態的,那么就無法測量了。量子物理中的“測不準原理”中的測,也正是說明這一點。
再看“試”字。從“言”從“式”。 試,用也——《說文》。毋庸多言,“試”字為我們傳遞的重要理念是“動態”——使用,當然是動態的。而且,軟件測試在國際范圍內的公共定義就是“為了找到軟件缺陷而進行的使用”。引申一步,“試”字從“言”,又有“考試”一個含義?磥,這個考試是口試了,呵呵。既然是考試,那么問答就是必要的了,所以會有一個言字,其實這一“問”和一“答”就是軟件的“輸入”與“輸出”。
軟件的Build從拿到我們手里開始,就是處在“動”與“靜”的交替狀態。既然是動靜交替,我們非要先把靜的挑出來寫成Case、再把固定某一種“動”挑出來寫成Case(而不管它在什么時候出現),當然是件很麻煩的事情。那么我們應該怎么辦呢?
對軟件的“測”
文章來源于領測軟件測試網 http://www.k11sc111.com/