《三十六計》是根據(jù)我國古代卓越的軍事思想和豐富的斗爭經(jīng)驗總結(jié)而成的兵書,古人用兵最講究謀略,在中國古代戰(zhàn)爭史上,精彩的謀略計策層出不窮,令人眼花繚亂,但萬變不離其宗,大抵都逃不過這三十六計的范圍。時至今日,“三十六計”在我們?nèi)粘5墓ぷ骱蜕钪校瑯涌梢杂泻軓V泛的應(yīng)用。我是一名軟件測試工程師,并熱愛軟件測試這一職業(yè),目前從事測試已有一段時間,我很愿意將自已在從事軟件測試工作中積累的一些經(jīng)驗,以及一些心得體會,借助三十六計中的若干計謀加以說明,與諸位同行分享。


總說
?? 【原文】   
  六六三十六,數(shù)中有術(shù),術(shù)中有數(shù)。陰陽燮理,機在其中。機不可設(shè),設(shè)則不中。
?? 【解析】
  “兵以詐立”,多謀者勝。用兵要講究謀略,“運籌帷幄,決勝千里之外”。同樣的道理,無論從事什么樣的工作,都需要講究方式、方法。有了正確的方式方法,或者適時的運用一些小技巧,往往可以收到事半功倍的奇效。

第一計 瞞天過海

  【原文】
??? 備周則意怠;常見則不疑。陰在陽之內(nèi),不在陽之對。太陽,太陰。
?? 【譯文】
??? 防備周全時,更容易麻痹大意;習(xí)以為常的事,也常會失去警戒。秘密潛藏在公開的事物里,并非存在于公開暴露的事物之外。公開暴露的事物發(fā)展到極端,就形成了最隱秘的潛藏狀態(tài)。
  【解析】
  long,long ago,there is a 很厲害的程序員,名叫關(guān)羽,他是計算機專業(yè)科班出身,又擁有二十幾年的編程開發(fā)經(jīng)驗,是當(dāng)之無愧的資深軟件工程師。雖然關(guān)羽的專業(yè)水平無庸置疑,但是他有一個缺點,就是自視過高,驕傲不可一世,他常常認為自己寫的代碼十分完美,幾乎已經(jīng)到了自戀的程度。他看不起測試人員,對他們提出的程序錯誤不僅不屑修改,甚至于不肯承認,并經(jīng)常與測試人員起爭執(zhí)。有一年他在湖北荊州負責(zé)一個十分重要的大型系統(tǒng)的開發(fā),而負責(zé)這個系統(tǒng)測試工作的正是關(guān)羽向來都瞧不起的呂蒙。這個呂蒙原本學(xué)歷不高,只有中專文化程度,并且還不大注重學(xué)習(xí),提高自己的能力。直到有一次被他的上司孫權(quán)教育了一頓,從此發(fā)奮圖強,進步神速,技術(shù)能力迅速提高,早已不是當(dāng)日的吳下阿蒙。起先呂蒙將發(fā)現(xiàn)的錯誤上報給關(guān)羽,關(guān)羽并不理會,還是如同以往一樣,找出許多理由來搪塞,一會兒說這是個技術(shù)難點,無法修改,一會兒又說這是當(dāng)初的需求沒有寫清楚。這呂蒙早就清楚關(guān)羽的為人,從此也不與關(guān)羽多加爭辯,只是兢兢業(yè)業(yè)的做著自己的工作,將自己在測試過程中發(fā)現(xiàn)的所有小錯誤一一如實記錄了下來。等到測試報告出來的時候,關(guān)羽傻了眼。由于他一時疏忽而犯下的一個小錯誤,并且錯誤擴散到整個系統(tǒng)的每個角落,已經(jīng)無法修改。客戶大為不滿,項目終于失敗!而老板一氣之下也把關(guān)羽炒了魷魚。關(guān)羽的一世英名就這樣毀在自己的大意上面。這就是在IT業(yè)界流傳很廣,十分有名的“關(guān)羽大意失荊州”的故事。
  從這個故事中我們可以得到以下幾個教訓(xùn):
  1、越是厲害的人物,越容易陰溝里翻船,水平很高的程序員,也很容易因為不注意細節(jié)而犯下一些低級的錯誤。所以身為一名測試者,不能迷信權(quán)威或?qū)<遥瑢褪菍Γe就是錯,要勇于懷疑一切。時刻牢記我們代表的是最終用戶,并建立這樣一個觀點:即使一個錯誤不是程序本身的原因,而是因為操作不便而使用戶造成,嚴格說來,那仍然是一個錯誤。
  2、測試者與開發(fā)者的地位是相對獨立,但絕不是勢同水火,雙方彼此同樣是項目組的成員,在保證軟件產(chǎn)品質(zhì)量這個大方向上是一致的,彼此都應(yīng)該互相尊重對方的勞動成果,虛心對待。關(guān)羽的直接領(lǐng)導(dǎo)諸葛亮早就告誡過他這一點,讓他一定要尊重測試組的勞動成果,不要雙方鬧翻。可關(guān)羽硬是不聽,于是造成項目失敗。
  3、在測試工作中,測試者與程序員的溝通是十分重要的。在雙方互相尊重的基礎(chǔ)上,彼此都要本著對事不對人的原則,保持嚴謹?shù)目茖W(xué)態(tài)度,共同完成軟件的開發(fā)。上面的故事中,呂蒙的做法其實也不是十分的正確,不僅遭到了大量關(guān)羽的fans的指責(zé),而且長久背負著做人不厚道的罵名,這些倒不重要,更為重要的是,最終整個系統(tǒng)、整個開發(fā)團隊失敗了,他同樣是個失敗者。更好的做法是在測試的工作中,就要注重溝通問題,當(dāng)一個錯誤一直不被修改的時候,與開發(fā)人員溝通失敗后,應(yīng)該及時上報給項目的管理者,盡早尋求解決的方法,而不是將錯誤一直留到測試結(jié)束后才暴露出來,此時的錯誤可能已經(jīng)造成十分嚴重的后果,測試報告寫得再漂亮也已經(jīng)沒有多大的意義。基于以上陳詞,本庭宣判:本案關(guān)羽負主要責(zé)任,呂蒙負次要責(zé)任。關(guān)羽斬首,呂蒙打五十大板!^_^
??? 4、想要做好測試工作,學(xué)歷和技術(shù)并不是最重要的,重要的是要有責(zé)任心和細心,中專畢業(yè)證書是中專學(xué)校發(fā)的,大學(xué)畢業(yè)證書是大學(xué)發(fā)的,而有了責(zé)任心和細心的測試員,就不再是普通的測試工程師,而是優(yōu)秀的測試工程師了。
  在開發(fā)一個軟件產(chǎn)品的過程中,每一個程序員都需要跟成千上萬行的代碼打交道,他們自己寫的代碼就像大寶SOD蜜一樣的天天見,看多了難免叫人頭昏眼花胸悶心煩……再加上每天都看見的東西,很容易就會產(chǎn)生思維定式。一個人偶爾犯錯并不可怕,可怕的是他對錯誤熟視無睹,錯啊錯啊的就習(xí)慣了,于是很自然的把錯的當(dāng)成對的。俗話說“老虎也有打盹的時候”,水平再高的程序員也會有犯錯誤的時候,因此必然會有一些錯誤和缺陷是很難被自身發(fā)現(xiàn)的,其原因可能是他在閱讀需求規(guī)格的時候惦記著那天和女朋友吵架的事情開了小差,從而沒有好好地理解需求;也可能是他那天正好失戀心情不好而犯迷糊,更可氣的是他居然說女朋友都跟別人跑了我的程序?qū)懙媚敲春糜惺裁从茫移@么寫……所以說沒有BUG的軟件是不存在的(否則廣大和我一樣的軟件測試工作者靠什么混飯吃?^_^)。
  “陰在陽之內(nèi),不在陽之對”,我們那些無比智慧而英明的祖先在這里清楚的告訴我們,一個軟件產(chǎn)品中最大、最致命的BUG,往往不是如你想象的那么隱蔽、那么難找,而經(jīng)常是潛伏在你最沒有防備、以為最不可能出錯的那些地方。這便再一次的證明了這樣一個道理:在軟件的世界里,不是缺少BUG,而是缺少發(fā)現(xiàn)BUG的眼睛!