第1章 朝陽中的軟件測試
歡迎閱讀本書的第1章,本章將以對軟測行業(yè)有特別影響的專業(yè)書籍及網(wǎng)絡(luò)資源的變化為背景,介紹十多年來測試行業(yè)的快速發(fā)展及軟測工作是做什么的,其核心又是什么。隨著信息產(chǎn)業(yè)的蓬勃發(fā)展,如今軟件已滲透到我們工作、生活的方方面面,軟件到處都是,它不可能完美無缺,Bug無處不有。由于軟件漏洞或缺陷而引發(fā)的事故經(jīng)常發(fā)生,軟件測試這個把握軟件質(zhì)量最后一個關(guān)卡的工作日益受到業(yè)界的重視,測試行業(yè)由此也風(fēng)生水起,已展現(xiàn)出朝陽行業(yè)的端倪。如何把握測試工作,在測試行業(yè)中贏得一席之地,本章后兩節(jié)分享了如何把握各階段測試工作的一些見解,同時也濃縮地介紹了測試基礎(chǔ)知識的精華,以期對初學(xué)者能指點迷津。
1.1 關(guān)于軟件測試

朝陽冉冉升起,萬物生光輝,好一幅燦爛的朝陽圖景,令人神往。你可知,國內(nèi)的軟測行業(yè)正如圖中的朝陽,正朝著美好前景蓬勃發(fā)展……
1.1.1 書中一角到書山一角的跨越
1997年的早春,筆者加入了X公司的軟件研發(fā)部,當(dāng)時,軟件測試是做什么的都還搞不懂,卻被老板安排到測試員的崗位。雖然在大學(xué)里修過張海藩的《軟件工程》,但記得軟件測試只是其中的一個章節(jié),如圖1-1(左)所示,對其中的細節(jié)也不是特別有印象。為了把工作做好,第一天工作結(jié)束后就到書店找關(guān)于這方面的書。找遍了書店,結(jié)果根本沒有這方面的書。問問其他同學(xué)、朋友也基本上沒人知道軟件測試到底是做什么的。

圖1-1 軟測知識體系的跨越
十多年過去了,如今到任意一個相對有一定規(guī)模的科技書店,帶著“軟件測試”這個關(guān)鍵詞,一定能找到一系列的軟件測試類圖書。軟件測試只是軟件工程書中一角的現(xiàn)象再也不會回來了,軟測知識體系的形成已有了質(zhì)的跨越,如圖1-1所示。
但是,我們國內(nèi)的軟件測試行業(yè),還處于初步發(fā)展階段。由美國Glenford J.Myers等著的在業(yè)界鼎鼎有名的《軟件測試的藝術(shù)》一書,其第一版早在1979年就出版了,而那時我們國家的計算機發(fā)展還處于實驗室的研究階段。換句話說,早在30年前,國外一些專家的認識就已經(jīng)很深刻了,積累了豐富的實戰(zhàn)經(jīng)驗,各方面技術(shù)配套應(yīng)用齊全,走在專業(yè)技術(shù)發(fā)展的前沿。從另一個角度看,我們國內(nèi)的軟測行業(yè)要走的路還很長,目前我們已從十多年前的萌芽階段過渡到了初步發(fā)展階段,特別是近年來隨著軟件產(chǎn)業(yè)的發(fā)展,已到了軟件測試不往前發(fā)展都難的境況。
1.1.2 捉蟲子與挖金礦
有一種職業(yè),它以捉蟲子為主要目的,但并不是捉什么動物身上的寄生蟲,也不是捉什么植物身上的虱蟲,而是專捉隱藏于軟件中的臭蟲,這便是軟件測試。對于軟件測試的工作,著名軟件測試專家、清華大學(xué)教授鄭人杰說:“軟件測試工作是對質(zhì)量的把關(guān),其中包含技術(shù)及管理等方面的工作,工作相對穩(wěn)定,對年齡沒有限制。而且隨著項目經(jīng)驗的不斷增長和對行業(yè)背景的深入了解,會越老越吃香。”
如今在互聯(lián)網(wǎng)上,輸入“軟件測試工程師職業(yè)發(fā)展”關(guān)鍵詞,用百度或谷歌搜索一下,會看到“國家緊缺IT人才”、“軟件測試人才缺口30萬”、“軟件測試黃金職業(yè)”,等等,盡是吸引人眼球的強有力的詞匯。受國際金融海嘯的影響,2008年國內(nèi)外很多大公司利潤大幅度下滑,華爾街不斷傳來讓人難以置信的消息,雷曼兄弟投資銀行宣布破產(chǎn),花旗、通用、IBM、微軟這些跨國巨頭公司紛紛裁員,以縮減開支,類似的負面網(wǎng)絡(luò)新聞就像雪片般漫天飛舞。然而就在這金融海嘯席卷全球每一角落的環(huán)境下,國內(nèi)的軟測行業(yè)卻獨樹一幟,招聘需求依然燦爛有加。
一方面是人才的緊缺,另一方面是企業(yè)用人的急需。市場上的資源供不應(yīng)求,且存在較大的缺口,一個合格的軟件測試工程師難求,更何況一個資深的將領(lǐng)級人才。軟件測試人才儼然成了職場的香餑餑。很多公司亮出年薪10萬、20萬元仍招不到合適的人,正可謂求賢若渴,這是網(wǎng)上活躍的新聞。這也說明了軟測行業(yè)不往前發(fā)展都難,軟測職業(yè),已成為職場的新寵。
有道是“風(fēng)景這邊獨好!”近年來,網(wǎng)上進行的懸賞捉蟲活動越來越多。常常一上網(wǎng),就跳出某某企業(yè)邀請你參加有獎捉蟲活動的消息,如圖1-2所示的內(nèi)容就是其中之一。

圖1-2 公開懸賞尋找Bug海報圖
捉一條蟲子獎幾百元、幾千元不等,多勞多得,軟測工作猶如挖金子的行當(dāng)。金子真有那么容易挖嗎?這使筆者想起了大家都熟悉的黃金礦工網(wǎng)絡(luò)游戲,如圖1-3所示。

圖1-3 挖金礦游戲
礦中的金子,有大金子、小金子,它們的含金量是不同的,還有鉆石,級別就更高了。要挖到不同含金量的金子,掙到更多的錢,順利闖關(guān),是需要考慮不同的攻關(guān)策略的。例如,挖到石頭盡快炸掉,以贏得時間。一輪完畢,可用少量的金幣購買幸運草、大力水、石頭收藏夾等工具,使它們在接下來的一場攻關(guān)中能助你一臂之力。黃金礦工雙人版,是雙人游戲,猶如團隊的工作,相互之間密切配合很重要。比如鉆石的含金量是比較多的,但它通常藏于亂石之中,在有限的時間內(nèi),僅靠一個人的力量來完成挖鉆石的工作是不太可能的,這時兩人可以先合力把石頭挖掉,再由一人挖鉆石。這是一種更快地獲得鉆石的方法或策略設(shè)計,也叫計謀。同樣的道理,以捉蟲為核心目的的軟件測試工作,如果設(shè)計得好,可使你捉到大蟲(嚴重以上Bug)、罕蟲(極端條件下發(fā)生的Bug),讓你在軟件測試中大顯身手,成為捉蟲高手。
如圖1-4所示,軟件中存在不同類別的Bug,隱藏得越深越難以發(fā)現(xiàn)。

圖1-4 Bug的分布深度與發(fā)現(xiàn)的難易程度關(guān)系示意圖
1.2 Bug就在我們身邊
在1.1節(jié)中,我們了解到國內(nèi)軟測行業(yè)在近些年來的發(fā)展變化。這個職業(yè)是做什么的,它的發(fā)展前景如何,也可從中找到答案。那么,為什么說它是朝陽中的行業(yè),它的背景又是什么,通過本節(jié)的介紹,不僅可以回答這些問題,而且可理解這個行業(yè)存在的必然性及重要意義。
隨著信息技術(shù)的日益發(fā)展,特別是在最近十幾年,通信與互聯(lián)網(wǎng)的迅速崛起,人們的生活已發(fā)生了翻天覆地的變化。多年前很流行的一句話“不懂電腦的人是文盲”,如今在很大程度上已成為事實。網(wǎng)購、網(wǎng)游、網(wǎng)上交友、網(wǎng)上開店、網(wǎng)上銀行等,每一個主題都異常活躍,現(xiàn)代人的生活已離開不網(wǎng)絡(luò)。我們在享受著信息化高速公路帶來的高品質(zhì)生活的同時,卻也不時會遭遇“黑客”的攻擊。如今,沒被“病毒”黑過的電腦已是物以稀為貴了。電腦被黑,是因為操作系統(tǒng)或運行其上的應(yīng)用軟件存在漏洞,此漏洞就是設(shè)計的缺陷,其中有一部分是軟件中存在Bug。網(wǎng)絡(luò)軟件最常見的是存在安全性的問題,但就問題而言,其他類型的軟件,如通信設(shè)備、醫(yī)療儀器、航空飛機等其中內(nèi)置的嵌入式軟件系統(tǒng),同樣存在軟件漏洞。
信息交流如此發(fā)達的今天,軟件可以說無處不在,軟件是由人設(shè)計的,沒有100%完美的軟件,所以說“只要有軟件在,Bug就會存在”。本節(jié)接下來與大家一起分享幾個著名的軟件質(zhì)量事故,它們實實在在地發(fā)生在我們生活的周圍,小到影響我們的日常生活,大到影響國家安全。
小貼士:
軟件的Bug和漏洞區(qū)別:
Bug是錯誤,程序設(shè)計中的錯誤;漏洞是設(shè)計的系統(tǒng)中可以被黑客利用的部分,這其中有一部分是程序錯誤Bug造成的,一部分是設(shè)計的缺陷。漏洞是外圓,Bug是內(nèi)圓,外圓包括內(nèi)圓,兩者之間重疊于內(nèi)圓。
1.2.1 惠普100款筆記本軟件曝嚴重漏洞
2007年12月19日,據(jù)媒體報道,惠普日前發(fā)布了一款補丁程序,修復(fù)了100款筆記本電腦所預(yù)裝的“惠普信息中心”軟件存在的一個重大漏洞。該漏洞是由賽門鐵克安全人員發(fā)現(xiàn)的。據(jù)安全人員稱,該漏洞存在于惠普筆記本(包括康柏品牌)所預(yù)裝的“惠普信息中心(HP Info Center)”軟件的ActiveX控件中。利用HPInfoDLL.dll這個ActiveX控件存在的設(shè)計漏洞,黑客可以在惠普筆記本上遠程執(zhí)行代碼或遠程修改注冊表進行惡意攻擊,這些惡意攻擊包括安裝惡意軟件、修改注冊表信息,以便對受害電腦進行更加復(fù)雜的攻擊,并從受害電腦中盜取敏感數(shù)據(jù)。
為了以最快速度控制這個漏洞的爆發(fā),惠普公司先發(fā)布了一個補丁程序進行救急,但此補丁程序禁用了“信息中心”一鍵啟動的快捷功能。因此只能說是一種臨時的解決方案,是犧牲用戶的一個功能來控制黑客的攻擊,方案本身會給用戶的日常使用帶來不便。接下來要完成完整的解決方案即補丁程序的升級,惠普公司本身將消耗大筆的開支,最重要的是給用戶帶來的損失及聲譽影響,是不可估量的。并且在漏洞被發(fā)現(xiàn)之前,許多用戶已經(jīng)遭受的損失及其后續(xù)影響也是惠普公司需要面對的。
1.2.2 奧運門票銷售系統(tǒng)被迫關(guān)閉
備受國人關(guān)注的奧運門票第二階段銷售工作,雖然于2007年10月30日上午9時正式啟動,但是整個過程卻并沒有外界預(yù)期的那樣順利。系統(tǒng)啟動工作大概一小時之后,由于訪問流量大大超出售票系統(tǒng)的正常負荷,3個門票銷售渠道開始無法正常處理票務(wù)信息。經(jīng)過搶修,系統(tǒng)在當(dāng)日下午5時恢復(fù)正常運行,但仍舊出現(xiàn)不穩(wěn)定的情況。北京奧組委票務(wù)中心只好臨時召開緊急會議,決定于當(dāng)日下午6時關(guān)閉售票系統(tǒng)。
究竟是什么原因使得奧運門票銷售系統(tǒng)癱瘓被迫停止使用?由于第二階段的售票采用先到先得的原則,在10月30日上午9時剛過,也就是系統(tǒng)剛正式啟動時,便有數(shù)以萬計的搶票大軍通過不同的渠道涌入奧運票務(wù)系統(tǒng),搶購門票。據(jù)統(tǒng)計,在9時至10時之間,官方票務(wù)網(wǎng)站的訪問量高達800萬次,是系統(tǒng)預(yù)設(shè)每小時100萬次訪問量的8倍。這一時段,從3個渠道提交到票務(wù)系統(tǒng)的門票訂單高達20萬張,遠遠超出了系統(tǒng)預(yù)設(shè)的票務(wù)處理能力,從而造成了網(wǎng)絡(luò)擁堵、售票速度慢和無法登錄票務(wù)系統(tǒng)的情況。在眾人的購票熱情面前,僅有每小時15萬張?zhí)幚砟芰Φ钠眲?wù)系統(tǒng)正常運作了不到一小時,就徹底宣告癱瘓。據(jù)票務(wù)中心相關(guān)負責(zé)人介紹,從技術(shù)角度分析,整個奧運票務(wù)網(wǎng)絡(luò)的帶寬并沒有出現(xiàn)問題,造成系統(tǒng)故障的主要原因是系統(tǒng)后臺的數(shù)據(jù)庫處理能力不足,無法承受大流量的訪問。
為了解決此軟件設(shè)計上的缺陷,奧運票務(wù)系統(tǒng)進行了大規(guī)模的擴容升級,并承諾系統(tǒng)于12月10日重新開放。與此同時,第二階段的門票銷售政策也只好進行調(diào)整,將“先到先得”的售票政策調(diào)整為“抽簽得票制”。
1.2.3 美F-22機群系統(tǒng)癱瘓,軟件質(zhì)量威脅國家安全
2008年4月14日,有媒體報道,近日,美國空軍聲稱,12架“猛禽”在執(zhí)行從夏威夷飛往日本的任務(wù)中,當(dāng)途經(jīng)國際日期變更線時,飛機上的全球定位系統(tǒng)紛紛失靈,多個電腦系統(tǒng)發(fā)生崩潰,多次重啟均失敗。飛行員們再也無法正確辨識戰(zhàn)機的位置、飛行高度和速度,隨時面臨著“折戟沉沙”的厄運。他們不得不掉頭返航,幸運的是,當(dāng)天天氣非常好,能見度很高,給“猛禽”加油的KC-135型加油機也可以引導(dǎo)它們安全降落,最終順利返回了夏威夷的希卡姆空軍基地。
事情究竟是怎么回事呢?“猛禽”到達希卡姆機場幾小時后,問題就真相大白了,有人在電腦系統(tǒng)編碼中犯了一個錯誤,從而引發(fā)了一系列問題。美國空軍退役少將史皮爾德稱,對于那些“猛禽”戰(zhàn)斗機飛行員來說,他們很幸運,因為如果在實戰(zhàn)中發(fā)生這一問題,他們可能會被擊落。并且這個小小的軟件錯誤,將可能成為扭轉(zhuǎn)整個戰(zhàn)局的關(guān)鍵點,使美國陷入短時不利的戰(zhàn)爭局面。不到48小時,顏面大失的“猛禽”的承建商——洛·馬公司就寄來了新的系統(tǒng)軟件,使之后的飛行任務(wù)得以順利完成,但此次事件還是給各國敲響了軟件質(zhì)量控制的“警鐘”。
以上3個軟件質(zhì)量事故,從軟件測試的角度分析,是軟件測試工作的疏漏。無論它們是屬于安全性問題,還是壓力負載,或者系統(tǒng)功能等不同類型的軟件缺陷,由于測試人員沒有及時發(fā)現(xiàn)它們,所以未能避免事故的發(fā)生。
1.3 把握測試崗位
讀者朋友,通過前面的介紹,如果你是一個業(yè)外人士,是不是已經(jīng)躍躍欲試了,很想知道進入測試領(lǐng)域有哪些要求,自己是否合適從事軟件測試工作,那么請讀“1.3.1測試入門”。它將為你揭開“軟件測試”大軍基本裝備的神秘面紗,告訴你合格的測試工程師是什么樣的。如果你已經(jīng)是一名軟件測試工程師,首先,恭喜你!但是我們要對自己有更高的要求,才能取得更大的進步。成為一名優(yōu)秀的測試工程師,是一個不錯的選擇,在測試的職業(yè)生涯中,無論日后是從事測試管理還是測試技術(shù)的工作,它絕對是一個含金量極高的砝碼。優(yōu)秀測試有哪些要求,如何才能成為一名優(yōu)秀測試工程師,請看“1.3.2優(yōu)秀測試”,它將為你支招。如果你已是一名能獨當(dāng)一面的業(yè)務(wù)測試骨干,抑或是某一方面測試技術(shù)的大師,再或是在測試項目管理上的佼佼者,如何超越自己,往更高處發(fā)展,成為某一測試領(lǐng)域的專家或帶頭人,建議看“1.3.3卓越測試”,相信會對你有所啟發(fā)。
如果把對測試崗位能力的把握程度分為3個階梯,根據(jù)其難易程度,其發(fā)展趨勢可看成如圖1-5所示的“金三角”。

圖1-5 測試崗位能力把握程度“金三角”
圖中,每一個臺階都是一個跨越,每一個跨越都需付出代價,特別是要做到卓越測試,更需付出艱苦的努力,才能成就卓有成效的跨越。圖中的人員比例是一個經(jīng)驗值,并不絕對。
事在人為,愿每一個測試朋友都心有目標(biāo),不斷攀登高峰,成就測試的未來。
1.3.1 測試入門
首先,軟件測試是一項技術(shù)性工作,在跨入測試這個大門之前,需對軟測的基本知識有所掌握,1.4節(jié)是單獨為這方面知識進行的簡要介紹,已熟悉這方面知識的朋友可跳過。當(dāng)然,如果你足夠幸運,不知道軟件測試是做什么的,卻有機會在軟件測試崗位工作,在軟測人才如此缺乏的今天,也不是不可能的。比如加入測試執(zhí)行行列,做一個測試執(zhí)行人員(運行軟件,按他人已設(shè)計好的測試用例一條條執(zhí)行,給出測試結(jié)果),但是你很快會發(fā)現(xiàn),由于自己基礎(chǔ)知識的缺乏,工作起來很困難,更不用說往下發(fā)展。正如古人所說“強扭的瓜不甜”,如何把苦瓜變成甜瓜,關(guān)鍵要看你自己(這個瓜就是你自己)。
在步入測試崗位后,對于任何新人都一樣,首先需考慮的是如何做一個合格的測試工程師,這是最基本的,也是最重要的。俗話說“萬事起頭難”,初來乍到剛做測試時,有這種感受是正常的。下面就從測試技術(shù)和測試素質(zhì)兩方面進行總結(jié)分享,希望對迷茫中的你有所指引。
1.技術(shù)方面
● 測試設(shè)計能力:能夠?qū)椖康男枨筮M行分析,提取測試需求、設(shè)計測試方案與用例。在不少公司里,測試執(zhí)行與測試設(shè)計是分開的,做測試執(zhí)行工作的人員只能算是測試員。測試工程師是一個通稱,但戴上了“工程師”的帽子更顯得專業(yè),對于測試工程師的要求當(dāng)然也更高。根據(jù)從事測試業(yè)務(wù)的領(lǐng)域不同,測試工程師也有不同的叫法,如性能測試工程師、自動化測試工程師、安全性測試工程師等。無論是哪方面的測試,對于工程師來說,“設(shè)計”兩個字至關(guān)重要,測試工作的展開必須圍繞這兩個字打開思路,發(fā)揮潛能,向優(yōu)秀測試邁進。測試設(shè)計能力,需要軟件測試專業(yè)知識、行業(yè)產(chǎn)品業(yè)務(wù)知識及其他關(guān)聯(lián)的系統(tǒng)知識做支撐。
小貼士:
“工程師”定義:工程師是把數(shù)學(xué)與自然科學(xué)知識用于實際目的,如設(shè)計、建造結(jié)構(gòu)并加以操作的人(Someone who applies a knowledge of math and natural science to practical ends, such as the design, construction and operation of structures)。
● 代碼分析:能理解設(shè)計文檔,包括概要設(shè)計、詳細設(shè)計,并讀懂代碼,適當(dāng)?shù)臅r候從設(shè)計原理出發(fā),補充系統(tǒng)測試用例設(shè)計,或?qū)y試程序設(shè)計進行必要的專項測試,如進行壓力測試、負載測試、內(nèi)存泄漏分析等。曾經(jīng)有從事測試工作的朋友說:“目前測試界,采用黑盒功能測試方法的居多,兩眼一摸黑,什么都不知道,有時被開發(fā)人員忽悠了還挺感激的。我們不能太黑了,要突破黑箱操作,就是要看代碼”。
● 文檔編寫:當(dāng)今是電子信息化時代,我們工作的輸出最后都以電子文檔的形式體現(xiàn),常見的包括測試計劃、測試方案、測試用例、測試代碼、測試報告、測試總結(jié)。一次,有一位軟件研發(fā)總監(jiān)說:“很多軟件開發(fā)人員都怕寫設(shè)計文檔,這是一個不爭的事實,但現(xiàn)在一些剛畢業(yè)不久的學(xué)生寫的文檔,簡直讓你大跌眼鏡,連語句都不通順,更不知如何斷句,句子沒有標(biāo)點符號、錯別字多,有些同音字出現(xiàn)在邏輯性及嚴謹性都要求很高的技術(shù)設(shè)計類文檔中,真讓人哭笑不得,卻又苦不堪言”。無論是開發(fā)還是測試,文檔的編寫是必修的基本功之一,現(xiàn)在網(wǎng)上的學(xué)習(xí)資料很多,此處推薦一本可以系統(tǒng)學(xué)習(xí)的書籍《軟件文檔編寫》(高等教育出版社出版)。
2.素質(zhì)方面
關(guān)于軟件測試工程師素質(zhì)特點的文章,在測試專業(yè)網(wǎng)站,以及很多書籍上大家可能經(jīng)常看到。作為一名合格的測試工程師,有哪些基本的關(guān)鍵要求,結(jié)合工作中常遇到的問題做如下總結(jié)。
● 熱愛測試:俗話說“做一行愛一行,三百六十行,行行出狀元”,這些道理大家都懂,可是在實際工作中,常聽到的是“人在江湖,身不由已”,“身在曹營,心在漢”。如果是這樣認為的話,即使你的能力再好,也發(fā)揮不出來,更談不上主動去想,去做測試方法的創(chuàng)新、改進,最終只好南轅北轍,悻悻離開。
● 誠實:這是所有素質(zhì)中最基本、最重要、最需堅持的原則。用例的執(zhí)行是測試工作的必做任務(wù),測試的最終結(jié)果也需通過用例的執(zhí)行來體現(xiàn)。用例的執(zhí)行,就是按照用例的描述在軟件上執(zhí)行操作,判斷實際輸出與用例中的預(yù)期輸出是否一致;測試通過寫PASS,測試失敗寫FAIL,沒有執(zhí)行的用例記錄為NT(No Test),好像簡單得就像1+1=2。但事與愿違,工作中常會出現(xiàn)一些投機取巧的“不測分子”,想當(dāng)然地認為程序的輸出如預(yù)期,不去實際操作軟件,就置該條用例的執(zhí)行結(jié)果為PASS。后來有一天,其他測試人員發(fā)現(xiàn)這個用例其實是FAIL,“不測分子”卻還狡辯在自己當(dāng)時測試的版本上是通過的,這種劣習(xí)是絕對要不得的。
● 耐心與毅力:也可理解為不懈的努力、堅持,在對一輪又一輪成百上千條的測試用例進行版本回歸測試時,測試人尤其需要具備這一素質(zhì)。在版本不穩(wěn)定時,都是人工手動執(zhí)行,決定了測試工作是一個重復(fù)性很高的工作。沒有足夠的耐心與毅力,就會出現(xiàn)偷工減料,未執(zhí)行的測試用例置為PASS等情況,敷衍了事,應(yīng)付工作,當(dāng)然這也與一個人的責(zé)任心密切相關(guān)。
● 細心:不單指細心地發(fā)現(xiàn)軟件的一些細節(jié)上的問題,如界面排版沒對齊、字符串顯示不全。這里更多是指在做測試計劃的決策、測試設(shè)計等測試的核心設(shè)計工作時,需特別考慮周密,細致、深入地理解需求與設(shè)計,考慮測試的充分性。很多從測試人員手中逃出去的Bug,是因為沒有設(shè)計這樣的用例。
● 善溝通:這是講溝通能力,主要指專職測試人員與開發(fā)人員、需求人員之間的交流。測試人員發(fā)現(xiàn)的問題提交到Bug庫后,常會出現(xiàn)開發(fā)人員不能重現(xiàn)或看不太明白,這個看似描述不清的Bug,也是一種交流的方式。溝通是雙方的,當(dāng)出現(xiàn)測試人員認為是問題,但開發(fā)人員認為不是時,測試人員需善于表達自己的觀點,且立場堅定,最好說服開發(fā)人員修改,或啟動需求人員參與進行三方討論等。
● 學(xué)習(xí)能力:知其然,也要知其所以然,測試執(zhí)行人員與測試設(shè)計人員的一個重要區(qū)別就在這里,測試執(zhí)行人員只按用例執(zhí)行,通常不清楚為什么要這樣設(shè)計用例;而測試設(shè)計人員,如果做不到這一點,會只停留在軟件表面上的應(yīng)用,造成測試遺漏。
● 懷疑精神:指對軟件中存在問題的敏感性,對于能否發(fā)現(xiàn)Bug顯得很重要,這個敏感性說的就是對軟件的一種懷疑精神。往往,軟件測試人員看到一個界面或一個數(shù)據(jù)輸出不正確,但由于不能馬上重現(xiàn),被開發(fā)人員說一通不可能后,很多人就相信了開發(fā)人員,認為自己看錯了,最后選擇了放棄跟蹤。很明顯對自己沒信心,沒有足夠的懷疑精神,一些Bug就這樣在自己的眼皮底下悄悄地溜走了。
前面這些特點是對合格的測試工程師提出的要求,那么在做好一名合格的測試工程師后,很多人自然會想到如何做一名優(yōu)秀的測試工程師,在技術(shù)或管理上要有哪些突破。下節(jié)就為大家介紹優(yōu)秀測試的要求及特點。
1.3.2 優(yōu)秀測試
上學(xué)時,對學(xué)習(xí)優(yōu)秀的認識,就是每學(xué)期結(jié)束時評上“三好學(xué)生”。參加工作后,公司每年年終總結(jié)時都會進行評優(yōu)評先進的表彰大會。三好學(xué)生也好,優(yōu)秀員工也罷,站在耀眼光環(huán)籠罩下的頒獎臺上領(lǐng)獎的確是件讓他人羨慕,也讓自己備感自豪的事。那么,優(yōu)秀測試是指什么呢?評優(yōu)時每個公司的衡量標(biāo)準會不同,但有一點可以肯定,他或她一定在某些方面取得了突出的成績。下面是在優(yōu)秀測試人員身上常見到的閃光點。
● 精通業(yè)務(wù):不僅能駕馭好測試流程中各環(huán)節(jié)的工作,還能超出崗位要求,發(fā)現(xiàn)隱含需求問題,并給需求提出有建設(shè)性的改進意見。在某個行業(yè)領(lǐng)域從事測試幾年后,熟悉需求、精通業(yè)務(wù),這樣的測試人員常是需求設(shè)計部門求之不得的人才。
● 精通測試技術(shù):測試技術(shù)上的高手,發(fā)現(xiàn)內(nèi)存泄漏、軟件性能方面的嚴重Bug,讓開發(fā)人員折服。版本發(fā)布后指定必須由你來測試,只有經(jīng)過你的確認,版本才能發(fā)布。
● 創(chuàng)造性:有自己的思想,并能在工作中發(fā)揮出來;熱衷于改進測試流程,主動在工作中不斷嘗試新方法,研究新技術(shù)。
● 富有探索精神:有強烈的求知欲,不恥下問,愛較真,常會抓住軟件的不良跡象,發(fā)現(xiàn)一堆Bug給開發(fā)人員。
● 分析定位問題:發(fā)現(xiàn)問題后,還能分析問題,甚至告訴開發(fā)人員問題出在哪里,如何更改,有哪些影響。
優(yōu)秀測試人員的這些素質(zhì),有些是可以在后天通過一段時間的自身努力達到的,如業(yè)務(wù)知識、測試技術(shù)、分析定位問題的能力。而探索精神,并不是一個人通過一天兩天,甚至通過一年兩年的學(xué)習(xí)就可養(yǎng)成的,它是一個人對各方面知識、認知、習(xí)慣培養(yǎng)等多方面綜合素質(zhì)的表現(xiàn)。這類測試人員常常喜歡對問題刨根問底,愛質(zhì)疑(甚至有時被某些開發(fā)人員鄙視為異類、變態(tài)),而正是由于這個被視為“毛病”的品質(zhì),使得很多設(shè)計上的缺陷都逃不掉他們的火眼金睛。探索,敢于探索,使他們更有自己的想法。對問題的日積月累,慢慢地形成了自己的一套想法、看法。量變帶來質(zhì)變,自然而然就會帶來創(chuàng)造性的思維,創(chuàng)造性的成果也就體現(xiàn)在工作中了。探索精神是創(chuàng)造性思維的前身,下面的小故事,正好說明了這個道理。
【牛頓與蘋果的故事】
傳說1665年秋季的一個下午,牛頓坐在自家院中的蘋果樹下正冥思苦想行星繞日運動的原因,這時,一個蘋果落下,正巧落在牛頓的腳邊。這是一個發(fā)現(xiàn)的瞬間,其實這次蘋果下落與以往無數(shù)次蘋果下落并沒有什么不同。幾千年來誰都覺得是理所當(dāng)然的事,但卻引發(fā)了牛頓的一些疑問,為什么這個蘋果要垂直向下落到地面上?為什么它不斜著下落或飛到天上,而是始終朝著地心的方向?為了釋疑,他進行了深入地研究,后來提出了令世人驚嘆的“萬有引力”定律。正是刨根問底、熱愛思考、敢于探索的精神成就了牛頓的偉大!
1.3.3 卓越測試
卓越,從字面理解就是杰出、非常優(yōu)秀,比優(yōu)秀做得更好,就像學(xué)校里跳級的學(xué)生一樣出類拔萃。如何從優(yōu)秀到卓越,借用美國知名作家勒納夫婦合著的《從優(yōu)秀到卓越》一書中的一段話:對優(yōu)秀的跳高運動員來說,盡管他們的成績已經(jīng)非常出色,但他們還是需要不斷“提高自己面前的橫桿”,以求每次都能跳得更高一點。這就是實現(xiàn)了“從優(yōu)秀到卓越”。
那么,對于測試,如何從優(yōu)秀測試到卓越測試呢?其實道理一樣,就是“不斷提高自己面前的橫桿”。這樣說好像很空,在實際操作時,這個橫桿有時可能并不是有形的東西,比如當(dāng)一個優(yōu)秀的測試工程師,無論測試技術(shù)或業(yè)務(wù)知識都很突出,是不是已達到卓越,已沒有發(fā)展的空間了?卓越測試確實那么難還有其他原因,為什么能達到卓越測試的人鳳毛麟角?卓越測試人才,他們都有哪些特點?下面進行介紹。
● 測試事業(yè):把測試當(dāng)成自己的事業(yè),對測試工作特別熱情,富有激情,這種激情常能感染團隊中的其他成員,一直朝著積極向上的方向前進。很多優(yōu)秀的測試人才,在做了幾年后,發(fā)覺前路已亮起了紅燈,出現(xiàn)了發(fā)展的瓶頸。無論是從技術(shù)上還是管理上都難于進階,于是很多人選擇了退出,轉(zhuǎn)行做開發(fā)、做需求、做銷售、做生意等。甚至還有不少測試人員,可能從來都沒有想過把測試工作當(dāng)成自己的事業(yè)來做,也沒想過其實自己有潛力可以做得比現(xiàn)在更好。
● 測試指揮官:培養(yǎng)及帶領(lǐng)一批測試精兵強將,上刀山,下火海,在軟件問題的救火場景中常見到他們的身影,高質(zhì)量突出地完成一個個項目的測試。
● 分享與傳遞:卓越測試人員是可遇而不可求的,好像他們有測試DNA,除了他們自身有很好的問題敏感度,能找到真正的問題外,他們還樂于把資源、知識、經(jīng)驗分享并傳遞給團隊中的其他成員,推動團隊的共同成長。
● 專業(yè)技術(shù)的帶頭人:某一技術(shù)方面的專家、帶頭人,敢于嘗試新方法、新技術(shù),進行變革創(chuàng)新,突破瓶頸,取得認可。
● 引領(lǐng)未來:身處一角,眼觀世界,把握市場,洞察未來,結(jié)合當(dāng)下,前瞻思考,構(gòu)建測試的未來,是測試團隊中的指路明燈。
下面,我們來分享微軟這個世界頂級軟件開發(fā)公司的卓越測試團隊的工作模式。
【微軟卓越測試團隊】
微軟在2003年創(chuàng)造了卓越工程(EE)團隊,團隊的宗旨除了技術(shù)培訓(xùn)外,還有發(fā)現(xiàn)和分享整個公司的工程最佳做法。團隊作為一個整體包含了所有的工程領(lǐng)域,卓越測試團隊便是代表測試領(lǐng)域的其中一個團隊。卓越測試團隊認為微軟的每一個測試人員(包括從新員工到副總裁)都是他們的客戶,團隊的主要任務(wù)可以概括為共享、幫助、交流。共享包括共享做法、工具和經(jīng)驗,他們每年舉行20 多場測試講座,交流有效的測試方法。幫助是指幫助測試相關(guān)人員解決問題,或許有些問題他們本身不能解決,但他們可以通過與其他團隊的聯(lián)系來解決問題,卓越測試團隊擔(dān)任著促進者和專家的角色。交流指向所有測試成員,溝通交流他們所知道的和所發(fā)現(xiàn)的信息。他們還預(yù)測微軟測試工程師未來的需求,并積極主動地確定關(guān)于未來軟件測試的長遠規(guī)劃,給測試領(lǐng)域指引方向和指導(dǎo)需要做的工作。更詳細的介紹見《微軟的軟件測試之道》一書。
1.4 測試基礎(chǔ)簡要
如果你打算介入測試領(lǐng)域或者你是測試新手,那么本節(jié)的的內(nèi)容會很適合你,包括常接觸到的基本概念、常用方法的介紹。
1.4.1 軟件測試基本概念
通常對軟件測試的定義有以下兩種描述。
定義一:軟件測試是為了發(fā)現(xiàn)程序中的錯誤而執(zhí)行程序的過程。
定義二:軟件測試是根據(jù)軟件開發(fā)各階段的規(guī)格說明和程序的內(nèi)部結(jié)構(gòu)而精心設(shè)計的一批測試用例(即輸入數(shù)據(jù)及其預(yù)期輸出結(jié)果),并利用這些測試用例運行程序,以及發(fā)現(xiàn)錯誤的過程,即執(zhí)行測試步驟。
測試方案:闡述對于某一特定的測試點如何去測試的思路,也就是闡述用什么方法、如何去測試問題。
測試用例:所謂測試用例是為特定目的而設(shè)計的一組測試輸入、執(zhí)行條件和預(yù)期輸出,測試用例是執(zhí)行測試的最小實體。另外,設(shè)計的測試用例應(yīng)具有步驟清晰、操作性強的特點。一個好的測試用例是發(fā)現(xiàn)了迄今為止尚未發(fā)現(xiàn)的錯誤的用例。
測試執(zhí)行:根據(jù)事先設(shè)計好的測試用例而執(zhí)行程序的過程。這個過程需要根據(jù)用例執(zhí)行的輸入數(shù)據(jù),判斷執(zhí)行程序后的輸出結(jié)果是否正確。
缺陷:我們常說到的Bug(嚴格意義上來說,缺陷不等于Bug,詳見第9章小知識“Bug與Defect的區(qū)別”),對軟件缺陷的定義有以下5條描述:
● 軟件未達到產(chǎn)品說明書中已經(jīng)標(biāo)明的功能。
● 軟件出現(xiàn)產(chǎn)品說明書中指明了不會出現(xiàn)的錯誤。
● 軟件未達到產(chǎn)品說明書中雖未指出但應(yīng)當(dāng)達到的目標(biāo)。
● 軟件功能超出了產(chǎn)品說明書中指明的范圍。
● 軟件測試人員認為軟件難以理解、不易使用,或者最終用戶認為該軟件使用效果不佳。
1.4.2 軟件測試目的
表面上看,軟件測試的目的是要證明程序有故障存在,并且要盡可能多、盡可能早地發(fā)現(xiàn)程序中的錯誤。實際上,暴露問題不是軟件測試的最終目的,發(fā)現(xiàn)問題是為了解決問題,只有解決了問題,軟件的質(zhì)量才有提高,才達到了測試的最終目標(biāo)。
正如前面所說的“軟件測試是為了發(fā)現(xiàn)程序中的錯誤而執(zhí)行程序的過程”,正確認識這一點很重要。因為不同的測試目標(biāo),會設(shè)計不同的測試用例。如果目標(biāo)是發(fā)現(xiàn)程序中的錯誤,則設(shè)計測試用例時就會考慮用各種方法設(shè)計出最能暴露錯誤的測試用例。反之,就會設(shè)計一些證明程序是正確的用例去執(zhí)行。
1.4.3 軟件測試策略
對一個項目進行測試,在做測試計劃時,必須考慮清楚對本項目要采取哪些測試的策略,也就是說你將采用什么手段或方法進行測試。
在軟件開發(fā)的生命周期中,可劃分不同的開發(fā)階段,如常用的軟件開發(fā)V模型,如圖1-6所示。對應(yīng)開發(fā)的不同階段,軟件測試也分為不同的單元測試、集成測試、系統(tǒng)測試及驗收測試。

圖1-6 軟件開發(fā)V模型
但是,通常需根據(jù)項目的進展及要求的具體情況,可采用迭代式的開發(fā)模式、敏捷開發(fā)模式等,各階段也可并肩地進行。
單元測試:又叫模塊測試,是軟件開發(fā)各階段中最低一級的測試活動。通常由程序編寫人員自己完成,目的是檢驗程序的最小單位(模塊)有無錯誤。針對編寫的源代碼,采用各種白盒測試技術(shù)進行,如語句覆蓋、判定覆蓋、條件覆蓋、條件組合覆蓋等方法。在面向過程的結(jié)構(gòu)化程序中,如C程序,其測試的對象一般是函數(shù)。在面向?qū)ο蟮某绦蛑校鏑++,單元測試的對象可以是類,也可以是類的成員函數(shù)。
單元測試主要針對以下5個方面進行測試:
● 模塊接口。
● 模塊局部數(shù)據(jù)結(jié)構(gòu)。
● 重要的執(zhí)行通路。
● 出錯處理檢測。
● 邊界條件測試。
由于一個模塊僅完成某一方面的功能,因此在軟件系統(tǒng)中,一個模塊不可能獨立存在,模塊與模塊之間必然存在相互的聯(lián)系。在進行單元測試時,需要根據(jù)具體情況來設(shè)計驅(qū)動模塊和樁模塊,與被測試模塊一起構(gòu)成測試環(huán)境。
集成測試:在單元測試之后,把通過單元測試的模塊,按照設(shè)計的要求組裝起來進行測試,主要目標(biāo)是發(fā)現(xiàn)與接口有關(guān)的問題。
集成測試模塊組裝的方法分為非增量式和增量式兩種。非增量式是指先分別測試每個模塊,然后把所有模塊按設(shè)計要求放在一起組裝成所要測試的程序。增量式是把下一個要測試的模塊同已經(jīng)測試好的模塊結(jié)合起來進行測試,測試完成后,再把下一個待測試模塊結(jié)合進來測試,這樣每次增加一個模塊,直到把所有模塊都測試完成為止。
系統(tǒng)測試:把軟件、硬件及系統(tǒng)其他組成部分集成在一起,模擬最終用戶的使用環(huán)境,站在用戶的立場進行的綜合性測試。目的是保證系統(tǒng)各組成部分能夠協(xié)調(diào)工作,系統(tǒng)的性能達到產(chǎn)品規(guī)格的要求。
驗收測試:根據(jù)軟件需求說明書的規(guī)定,對軟件產(chǎn)品進行評估,以確定其是否滿足軟件需求的過程。經(jīng)過確認測試后,應(yīng)對軟件給出結(jié)論性評價,即合格或者不合格。如果軟件的功能、性能及其他方面的要求都滿足軟件需求規(guī)格說明的規(guī)定,則視為合格的軟件,反之則視為不合格,給出缺陷清單并提交到開發(fā)部門。
1.4.4 軟件測試方法
1.靜態(tài)測試和動態(tài)測試
按照軟件測試是否執(zhí)行程序而言,軟件測試通常可分為靜態(tài)測試和動態(tài)測試兩大類。
1)靜態(tài)測試
靜態(tài)測試的主要特征是不實際運行被測試軟件,主要目的是對軟件的編程風(fēng)格、結(jié)構(gòu)等方面進行評估。
靜態(tài)測試包括代碼檢查、靜態(tài)結(jié)構(gòu)分析、代碼質(zhì)量度量等。它可以由人工根據(jù)編碼規(guī)范進行檢查,通過分析代碼結(jié)構(gòu)來檢測程序的正確性,也可借助軟件工具自動進行,如PC-Lint便是一款不錯的代碼靜態(tài)檢查工具。進行靜態(tài)測試的人員必須熟悉程序的結(jié)構(gòu)、參數(shù)定義等,還需要測試人員對產(chǎn)品知識有一定程度的認識。這樣不僅能發(fā)現(xiàn)程序正確性方面的問題,還能站在用戶的角度分析發(fā)現(xiàn)程序的實現(xiàn)是否合理。
靜態(tài)測試能發(fā)現(xiàn)邏輯設(shè)計和編碼錯誤方面的大部分問題,但代碼中仍會有隱藏的故障無法通過靜態(tài)測試來發(fā)現(xiàn)。靜態(tài)測試的結(jié)果不能作為最終結(jié)果,還必須通過動態(tài)測試進行詳細地分析及驗證。
2)動態(tài)測試
動態(tài)測試與靜態(tài)測試正好相反,必須真正地運行被測試程序,通過輸入測試用例,對運行過程中的輸入、輸出數(shù)據(jù)進行分析,從而得出測試結(jié)論。
動態(tài)測試包括功能測試、覆蓋率分析、性能分析、內(nèi)存分析等。功能測試可采用手工測試,視具體情況也可采用自動化測試的方法。覆蓋率、性能、內(nèi)存的分析上常要借助其他軟件測試工具,或者自行編碼以實現(xiàn)測試的目的。
靜態(tài)測試和動態(tài)測試是相輔相成的,通過靜態(tài)測試可以比較細致地對代碼進行檢查,通過動態(tài)測試則可以對軟件運行的結(jié)果得出明確的結(jié)論,具有較強的確定性。
2.黑盒測試和白盒測試
如果按照測試時是否考慮程序的內(nèi)部結(jié)構(gòu)實現(xiàn)來分,軟件測試可分為白盒測試和黑盒測試。
黑盒測試(Black-box Testing),又叫功能測試,是根據(jù)軟件規(guī)格說明書的要求,運行并驗證程序是否滿足用戶的需求,是一種從用戶立場出發(fā)的測試。這種方法把被測試程序當(dāng)做一個黑盒子,不考慮程序內(nèi)部的邏輯結(jié)構(gòu)和特性,通過輸入測試數(shù)據(jù),根據(jù)需求來判斷輸出是否正確。黑盒測試一般被用來確認軟件功能的正確性和可操作性。
白盒測試(White-box Testing),又稱為結(jié)構(gòu)測試,是通過分析程序內(nèi)部的邏輯結(jié)構(gòu),針對特定條件和循環(huán)設(shè)計測試用例,對程序的邏輯路徑進行測試。要求測試者對軟件的結(jié)構(gòu)和代碼相當(dāng)熟悉,測試的目的是盡量覆蓋程序的每一個分支,在程序的不同點檢測“程序的狀態(tài)”以判定其實際情況是否和預(yù)期一致。
這兩種測試方法的出發(fā)點是完全不同的,反映了測試思路的兩個方面。兩種方法各有側(cè)重,不能替代。黑盒測試的優(yōu)點是效率高和實用性強,缺點在于測試往往是不完全和不充分的;白盒測試的優(yōu)點在于能夠?qū)Τ绦騼?nèi)部的特定部位進行覆蓋測試,缺點是無法測出程序未實現(xiàn)的功能。
總之,黑盒測試和白盒測試各有自己的優(yōu)、缺點,測試的效果是相輔相成的。工作人員在規(guī)劃測試方案時,需要將黑盒測試與白盒測試結(jié)合起來,才能把軟件測試得更充分、更有可靠性。
1.4.5 軟件測試流程
軟件測試貫穿于軟件開發(fā)的整個生命周期中,在不同的階段可采用不同的測試方法。但不管是單元測試、集成測試、系統(tǒng)測試都可以按下面的流程進行:
(1)編寫測試計劃。
(2)設(shè)計測試方案。
(3)設(shè)計測試用例。
(4)執(zhí)行測試。
(5)故障跟蹤。
(6)輸出測試報告。
(7)測試總結(jié)(分析)。
如圖1-7所示,是一個沒有考慮其他分支、迭代情況的軟件測試環(huán)節(jié)流程圖。

圖1-7 軟件測試流程簡圖
一般情況下,軟件測試在工程實踐中經(jīng)常實施的有單元測試、集成測試、系統(tǒng)測試。系統(tǒng)測試,人們又常把它稱為功能測試,這其實是不全面的,但也有一定的道理。因為系統(tǒng)測試主要的工作是功能測試,就是根據(jù)軟件的規(guī)格說明書驗證軟件是否滿足用戶的需求。但除了測試功能之外,系統(tǒng)測試還必須驗證系統(tǒng)的性能是否滿足用戶的需求,所以系統(tǒng)測試是不完全等同于功能測試的。
- Hands-On Intelligent Agents with OpenAI Gym
- 亮劍.NET:.NET深入體驗與實戰(zhàn)精要
- 數(shù)據(jù)展現(xiàn)的藝術(shù)
- Mastering Mesos
- Hands-On Internet of Things with MQTT
- JavaScript實例自學(xué)手冊
- 控制與決策系統(tǒng)仿真
- 手把手教你學(xué)AutoCAD 2010
- 網(wǎng)絡(luò)綜合布線技術(shù)
- MicroPython Projects
- 智能工業(yè)報警系統(tǒng)
- 21天學(xué)通Java Web開發(fā)
- 具比例時滯遞歸神經(jīng)網(wǎng)絡(luò)的穩(wěn)定性及其仿真與應(yīng)用
- 邊緣智能:關(guān)鍵技術(shù)與落地實踐
- Working with Linux:Quick Hacks for the Command Line