论测试用例的重要性
? ? ? ? 網(wǎng)上查找了很多關(guān)于測試用例重要性的文章,答案都不盡人意要么太理論化了,讓人看了顯得生硬,看完一頭霧水;要么太過時了(不知道停留在那個年代的認(rèn)識)。筆者很想系統(tǒng)的認(rèn)識一下測試用例,所以寫了這篇文章:
軟件測試的工作,都少不了寫用例的時候,我想大部分的用例都是在產(chǎn)品需求出來一部份之后就已經(jīng)開始了,因?yàn)檫@個時候,已經(jīng)有了寫測試用例的依據(jù)。有了大致需求之后對編寫用例來說一般只是一個開始,我們還需要更多的信息,比如UE(用戶交互設(shè)計(jì)稿)、UI(用戶界面設(shè)計(jì)圖)、需求的描述、產(chǎn)品大綱,功能模塊圖來提供更多的信息來完善用例。往往產(chǎn)品在開始設(shè)計(jì)的時候,正是用例生命周期的開始。為什么這么說呢,在以下的文章當(dāng)中,我們讓他慢慢的浮現(xiàn)出來:
? ? ? ? 我們有時候很困惑,為什么要寫測試用例,測試用例對后來的測試到底起到了什么作用?有時我們甚至懷疑,項(xiàng)目測試中是否需要測試用例。好,我先舉個測試用例的運(yùn)用場景。
? ? ? ? 假設(shè),這里新成立了一家新公司叫“豆比科技”,他們自己設(shè)計(jì)了一款軟件產(chǎn)品“逗你妹”。產(chǎn)品的需求,用戶交互,設(shè)計(jì)圖,各個功能模塊的詳細(xì)描述都有了,產(chǎn)品開始投入到開發(fā)當(dāng)中。而開發(fā)好的產(chǎn)品肯定是有很多問題的,必須要又人來保障產(chǎn)品的質(zhì)量。
? ? ? ? 那么誰來保障產(chǎn)品的質(zhì)量呢,首先,產(chǎn)品可以做這事,因?yàn)楫a(chǎn)品是他們設(shè)計(jì)的,他們需要對產(chǎn)品負(fù)責(zé),但是產(chǎn)品們都很忙,因?yàn)樗麄冃枰贫óa(chǎn)品的戰(zhàn)略規(guī)劃,功能的設(shè)計(jì)等;設(shè)計(jì)可以做這事,因?yàn)閁I是他們設(shè)計(jì)的,他們對UI最了解,但是設(shè)計(jì)們也很忙,因?yàn)樗麄冃枰嗟臅r間來調(diào)整UI;開發(fā)們也可以做測試,因?yàn)楫a(chǎn)品是他們開發(fā)的,有什么bug他們第一時間知道,但是開發(fā)們也很忙,他們在忙著實(shí)現(xiàn)各種復(fù)雜的功能模塊,忙得焦頭爛額;他們都騰不出時間做這事兒,于是就需要交給專門的測試來進(jìn)行了。而測試既不是產(chǎn)品的規(guī)劃者,也不是產(chǎn)品的設(shè)計(jì)者,更不是產(chǎn)品的開發(fā)者,可以說測試對產(chǎn)品完全就是局外人(恰恰相反,測試是對產(chǎn)品最了解的人,產(chǎn)品有哪些功能,哪些bug,如何高效的操作,如何解決某些問題這些都是測試最了解的,甚至測試可以扮演一個超級客服的角色,這些我都到“測試人員的自我修養(yǎng)”中來解釋);那么測初步要測試該產(chǎn)品就只能建立在對需求,設(shè)計(jì),交互等方面入手了。于是測試需要向產(chǎn)品,設(shè)計(jì)要相關(guān)的文檔 ,熟悉產(chǎn)品的各個模塊。
? ? ? ? 但是即使測試熟悉了,一旦產(chǎn)品開發(fā)出來,測試拿到參評就開始使用找bug嗎,我想即使測試熟悉了產(chǎn)品,在測試的過程中肯定對產(chǎn)品的功能有所遺忘,即使是熟悉過文檔,由于一款產(chǎn)品的功能模塊實(shí)在太多;如果測試只是憑著對需求文檔的熟悉度,就開始亂點(diǎn),沒有計(jì)劃沒有目標(biāo)開始測試,到頭來自己做過哪些操作都忘記了,更別談測試效率,能把測試工作做好了。所以在產(chǎn)品的規(guī)劃設(shè)計(jì)階段,測試就 已經(jīng)開始參與到產(chǎn)品中來,開始熟悉產(chǎn)品,收集各種文檔整理成一些操作步驟,這樣就形成了測試用例,于是用例的生命周期就開始了。所以用例的第一個作用就是,把產(chǎn)品需求轉(zhuǎn)換為一種可操作的步驟,方便以后有步驟有計(jì)劃的進(jìn)行測試。而在這樣的轉(zhuǎn)換過程中,由于這種很強(qiáng)操作的邏輯在進(jìn)行,往往測試能發(fā)現(xiàn)產(chǎn)品中設(shè)計(jì)的bug,因?yàn)樵谠O(shè)計(jì)用例的過程中,實(shí)際上是在腦海中模擬使用產(chǎn)品;所以,在寫用例的過程實(shí)際上就是對產(chǎn)需求進(jìn)行測試的一個過程。所以寫用例的第二個作用就是驗(yàn)證產(chǎn)品的需求是否合理。如果發(fā)現(xiàn)產(chǎn)品需求不合理,或需求有矛盾的地方,甚至不明確的地方,這時候我們的用例進(jìn)行不下去了;因?yàn)槲覀儗懙那耙粋€步驟可能有多個結(jié)果,那么產(chǎn)品要的是那個結(jié)果呢,或者那幾個結(jié)果呢。于是我們需要找產(chǎn)品確認(rèn);產(chǎn)品一看,這確實(shí)需要優(yōu)化,或需要考慮或者需要想出更好的方案。所以這里又體現(xiàn)了測試用例的第三個作用:監(jiān)督產(chǎn)品對需求做出更加詳細(xì)的設(shè)計(jì)。而當(dāng)產(chǎn)品想出好的方案之后,給了測試回復(fù),于是測試把他寫進(jìn)測試文檔。這有體現(xiàn)了測試用例的第四個作用:記錄產(chǎn)品的設(shè)計(jì)細(xì)節(jié),保障以后的查閱。而測試有了這樣一個與產(chǎn)品溝通的過程,對該模塊有了更深的印象,這里體香了測試用例的第五個作用:加深測試人員對產(chǎn)品的認(rèn)識和印象。當(dāng)產(chǎn)品開發(fā)出來了,測試這邊的準(zhǔn)備也差不多了,于是測試人員開始按照測試用例的描述測試,每過完一個用例標(biāo)記完成;這樣測試也知道自己做過哪些操作,避免沒有目的隨機(jī)測試,并且通過測試用例的執(zhí)行條數(shù),大致了解該模塊的測試進(jìn)度,這又體現(xiàn)了測試用例的第六個作用:反應(yīng)測試進(jìn)度。而測試人員在執(zhí)行用例的過程中往往會突然發(fā)現(xiàn)當(dāng)初設(shè)計(jì)的用例步驟中,還可以做這樣一個操作,于是發(fā)現(xiàn)了bug,這又體現(xiàn)了測試用例的第七個作用:幫助發(fā)現(xiàn)拓展測試范圍,擴(kuò)大測試覆蓋面,發(fā)現(xiàn)軟件中潛藏的缺陷。
? ? ? ? 好了到這個時候,測試用例已經(jīng)成長為一個青壯年啦。軟件測試的過程中,我們按照測試用例描述的執(zhí)行,大致能確定測試的進(jìn)度。在測試的過程中,我們會發(fā)現(xiàn)bug,而這個bug也許沒有在測試用例里面有步驟描述,但考慮到他也許會在以后的版本中復(fù)現(xiàn),于是我們把它的步驟整理出來,形成一個新的用例,以放便測試他是否會在以后的版本中出現(xiàn),這里又體現(xiàn)了測試用例的另外一個作用:方便回歸測試,復(fù)查bug是否還會出現(xiàn)。
? ? ? ? 軟件版本上線后,由于用戶的各種使用習(xí)慣,以及各式各樣的使用場景,以及各式各樣的終端環(huán)境,會出現(xiàn)一些測試過程中沒有發(fā)現(xiàn)的bug,大致這樣的bug對產(chǎn)品的影響比較小,但也是產(chǎn)品的優(yōu)化點(diǎn)。在第一個版本發(fā)布之后,由于用戶的使用反饋,以及產(chǎn)品對用戶操作行為的統(tǒng)計(jì),產(chǎn)品有了更好的方案,或是產(chǎn)品要嘗試新的東西,于是需求開始變動。需求的變動導(dǎo)致測試用例部分失效,于是測試需要更新測試用例,刪除無效用例。這體現(xiàn)了測試用例的一個缺陷:增加了測試的維護(hù)成本。有時候由于產(chǎn)品上線的時間比較緊,寫用例會花掉很多時間,而相對的給測試的時間就少了,這有體現(xiàn)了測試用例的另外一個缺陷:消耗了時間成本。往往在這樣的情況下,為了避免測試時間不夠用,我們會花很短的時間列出重要的測試點(diǎn)開始測試。為了避免漏測,我們會參考以前相關(guān)模塊的測試用例進(jìn)行。這體現(xiàn)了測試用例的又一個優(yōu)點(diǎn):為緊急情況下的測試提供參考信息。
? ? ? ? 好了說道這里,繼續(xù)。產(chǎn)品測試的過程中總會少不了人員的變動問題。而新人進(jìn)來大多不熟悉產(chǎn)品,而讓他們根據(jù)以前的需求測試,肯定會漏測。因?yàn)楫a(chǎn)品在上線過程中已經(jīng)經(jīng)歷了需求變化,而且也發(fā)現(xiàn)了很多潛在的問題,新人肯定是不能從產(chǎn)品需求以及產(chǎn)品中看到這些。所以他們需要測試用例來輔助測試,了解以前出現(xiàn)的潛在的問題,更加熟悉的了解產(chǎn)品以及他的測試;這里再增加一條測試用例的作用:培訓(xùn)新人,節(jié)省對新人的指導(dǎo)時間。為什么說這節(jié)省了對新人的指導(dǎo)時間呢,因?yàn)樾氯丝吹疆a(chǎn)品往往會有很多不理解的地方,所以他們回經(jīng)常去問“前輩們”,而如果前輩們安排她們執(zhí)行維護(hù)好的測試用例,那么很多問題就在執(zhí)行測試用例過程中就解決了,所以問的問題就會減少,就節(jié)約了對他們的指導(dǎo)時間。
? ? ? ? 而我們看看現(xiàn)在的手機(jī)外包測試。
? ? ? ? 我們知道手機(jī)的有些功能在好多年以內(nèi)一般不會變化,特別是同一系列的手機(jī)。比如短信、通話、藍(lán)牙、手機(jī)記事本、收音機(jī)、錄音機(jī)等等。而測試這些手機(jī)功能的人也不是固定不變的,因?yàn)槿藛T的流動性,一旦人員流走,那么就很少有人熟悉這些功能的測試;他會出哪些問題,哪些行為是多余的功能,哪些功能不正確這些都需要熟悉的人才能執(zhí)行測試。公司很聰明,在長期的經(jīng)營當(dāng)中他知道會發(fā)生這樣的事情,于是他們把手機(jī)容易出現(xiàn)問題的地方,或以前就有問題的地方,或是剛開始設(shè)計(jì)的一些信息都整理成一個個可以操作的文檔,記錄下來,這就形成了我們看到的測試用例。那么新來的員工就有了測試的依據(jù),他們往往會被分到一些測試用例去執(zhí)行,一方面的原因是測試產(chǎn)品是都符合文檔的描述,另一方面讓新來的員工熟悉產(chǎn)品,以及產(chǎn)品測試的大致步驟。
? ? ? ? 因此測試用例的目的對新人來說,提高了新人的測試效率,并且起到培訓(xùn)新人的作用。
? ? ? ? 假如一款產(chǎn)品停止維護(hù)了,那么所有的測試用例隨之失效,到此測試用例的生命周期結(jié)束。而新起一款產(chǎn)品,新的生命周期又開始了。所以,測試用例伴隨著整個產(chǎn)品的生命周期。
? ? ? ? 文章寫道這里,我們來總結(jié)一下測試用例的優(yōu)點(diǎn)與缺點(diǎn):
優(yōu)點(diǎn):
1、???????????????把產(chǎn)品需求轉(zhuǎn)換為一種可操作的步驟,方便以后有步驟有計(jì)劃的進(jìn)行測試。
2、???????????????驗(yàn)證產(chǎn)品的需求是否合理
3、???????????????監(jiān)督產(chǎn)品對需求做出更加詳細(xì)的設(shè)計(jì)
4、???????????????記錄產(chǎn)品的設(shè)計(jì)細(xì)節(jié),保障以后的查閱
5、???????????????加深測試人員對產(chǎn)品的認(rèn)識和印象
6、???????????????反應(yīng)測試進(jìn)度
7、???????????????幫助發(fā)現(xiàn)拓展測試范圍,擴(kuò)大測試覆蓋面,發(fā)現(xiàn)軟件中潛藏的缺陷
8、???????????????方便回歸測試,復(fù)查bug是否還會出現(xiàn)
9、???????????????為緊急情況下的測試提供參考信息
10、???????????培訓(xùn)新人,提高新人測試效率,節(jié)省對新人的指導(dǎo)時間
缺點(diǎn):
1、 增加了測試的維護(hù)成本
2、 消耗了時間成本
?
文末,如果大家有更好的觀點(diǎn),多多交流。
總結(jié)
- 上一篇: 链路层的封装方式与IP选路 (二)
- 下一篇: 解决安装svn后出现Unable to