軟件測(cè)試中的黑天鵝(二):黑天鵝發(fā)生的前后
1、歷史與三重迷霧
在“認(rèn)識(shí)軟件測(cè)試中黑天鵝”一文中,我描述了什么是軟件測(cè)試中的黑天鵝及其特點(diǎn),本文將探討測(cè)試中的黑天鵝發(fā)生之前、之后、以及正在發(fā)生之中的故事。
《黑天鵝》一書的作者Nassim指出“歷史是模糊的。你看到了結(jié)果,但看不到導(dǎo)致歷史事件發(fā)生的幕后原因。”其實(shí),測(cè)試何嘗不是這樣,假如把測(cè)試看成一個(gè)盒子,這個(gè)盒子也是模糊的,你看不到盒子里面是什么,整個(gè)機(jī)制是如何運(yùn)行的。
書中描述:“對(duì)待歷史問(wèn)題,人類思維會(huì)犯三個(gè)毛病,我稱之為三重迷霧。他們是:
1)假想的理解,也就是人們都以為自己知道在一個(gè)超出他們認(rèn)知的更為復(fù)雜(或更具隨機(jī)性)的世界中正在發(fā)生什么。
2)反省的偏差,也就是我們只能在事后評(píng)價(jià)事務(wù),就像只能從后視鏡里看東西(歷史在歷史書中比在經(jīng)驗(yàn)現(xiàn)實(shí)中顯得更加清晰和有調(diào)理)。
3)高估事實(shí)性信息的價(jià)值,同時(shí)權(quán)威和飽學(xué)之士本身有缺陷,尤其是在他們進(jìn)行分類的時(shí)候,也就是進(jìn)行‘柏拉圖化’的時(shí)候。”
我很容易聯(lián)想到,這三重迷霧分別對(duì)應(yīng)測(cè)試中的黑天鵝發(fā)生之前、之后、以及黑天鵝形成之中的故事,即:發(fā)生之前的“盲目預(yù)測(cè)”、發(fā)生之后的“假想解釋”、以及黑天鵝形成之中的“柏拉圖化”。
2、黑天鵝發(fā)生之前的“盲目預(yù)測(cè)”
“第一重迷霧就是我們以為我們生活的這個(gè)世界比它實(shí)際上更加可理解、可解釋、可預(yù)測(cè)”。打開收音機(jī)或電視機(jī),你就會(huì)聽到或看到,每天都有無(wú)數(shù)的人在信心滿滿地預(yù)測(cè)著各種各樣的事情:股市的走勢(shì)、房?jī)r(jià)的走勢(shì)、戰(zhàn)爭(zhēng)是否會(huì)爆發(fā)、疾病是否會(huì)流行。。。
正向Nassim指出的那樣,“幾乎所有關(guān)心事態(tài)發(fā)展的人似乎都確信自己明白正在發(fā)生什么。每一天都發(fā)生著完全出乎他們預(yù)料的事情,但他們就是認(rèn)識(shí)不到 自己沒(méi)有預(yù)測(cè)到這些事。很多發(fā)生過(guò)的事情本來(lái)應(yīng)該被認(rèn)為是完全瘋狂的,但在事情發(fā)生之后,看上去就沒(méi)有那么瘋狂。這種事后合理性在表面上降低了事件的稀有 性,并使事件看上去具有可理解性。”就拿我所生活的這座城市-上海來(lái)說(shuō),近來(lái)的許多事件都在證實(shí)著這點(diǎn):黃浦江上打撈出數(shù)千頭病死豬、H7N9的流行,昨 天突然看到一條“上海自來(lái)水中添加了XX”的微博更是令人觸目驚心,我們內(nèi)心都預(yù)測(cè)這些事情不應(yīng)該發(fā)生,可是實(shí)際上卻發(fā)生了。
這種黑天鵝發(fā)生之前的“盲目預(yù)測(cè)”讓我想到軟件測(cè)試中版本發(fā)布之前的“測(cè)試評(píng)估(test evaluation)”。一個(gè)產(chǎn)品經(jīng)過(guò)測(cè)試團(tuán)隊(duì)的集中測(cè)試后,發(fā)布到用戶那里,誰(shuí)能準(zhǔn)確預(yù)測(cè)是否會(huì)出現(xiàn)“黑天鵝”呢?在你的團(tuán)隊(duì),在版本對(duì)外發(fā)布之前,是否需要測(cè)試團(tuán)隊(duì)填寫一個(gè)關(guān)于產(chǎn)品質(zhì)量的測(cè)試評(píng)估表?下圖是測(cè)試評(píng)估表的一個(gè)樣例。
這里的特性指的是“測(cè)試特性(test feature)”。根據(jù)各團(tuán)隊(duì)上下文的不同,這個(gè)測(cè)試特性可能與開發(fā)特性直接對(duì)應(yīng),也可能不與開發(fā)特性一一對(duì)應(yīng),每個(gè)測(cè)試特性對(duì)應(yīng)一條到多條需求(用戶 需求或系統(tǒng)設(shè)計(jì)需求)。我最??匆?jiàn)的質(zhì)量評(píng)估說(shuō)明是“XX特性基本功能正常。”有些人會(huì)在后面附上所發(fā)現(xiàn)的比較嚴(yán)重的bug。這樣的描述顯然并不令人滿 意。
問(wèn)題是:
每個(gè)特性質(zhì)量的A/B/C/D的結(jié)論是否準(zhǔn)確? 所有特性的A/B/C/D的結(jié)論加一起又如何判別整個(gè)系統(tǒng)的質(zhì)量?是否所有特性的質(zhì)量都是A或B,版本就可以對(duì)外發(fā)布,并且發(fā)布以后不會(huì)出現(xiàn)令人意想不到 的“黑天鵝”現(xiàn)象?測(cè)試人員給出的A/B/C/D有多大成分是基于一種feeling給出的?
對(duì)于任何一條 需求,開發(fā)人員的任務(wù)就是實(shí)現(xiàn)它,無(wú)論是由一個(gè)項(xiàng)目組實(shí)現(xiàn),還是多個(gè)項(xiàng)目組配合實(shí)現(xiàn)。但是,對(duì)于測(cè)試人員,考慮的事情就復(fù)雜一些。我們除了要驗(yàn)證這條需求 本身的功能實(shí)現(xiàn)是否正確,還要驗(yàn)證該需求和其它功能之間的交互,還要考慮客戶可能使用的各種場(chǎng)景(Scenario),包括各種組網(wǎng)場(chǎng)景、各種參數(shù)的配置 等。如果把測(cè)試場(chǎng)景和測(cè)試特性交互起來(lái),測(cè)試就無(wú)窮無(wú)盡了,并且也沒(méi)有必要在每一種測(cè)試場(chǎng)景下,都驗(yàn)證被測(cè)特性的基本功能、異常功能、與其它功能的交互、 非功能屬性等各方面。如何設(shè)計(jì)更有效的、有限數(shù)目的用例盡量做到最大的測(cè)試覆蓋,這屬于另外一個(gè)話題,本文不做探討。
毫無(wú)疑問(wèn),盡管測(cè)試設(shè)計(jì)人員和測(cè)試執(zhí)行人員精疲力盡的試圖覆蓋該特性的所有可能的場(chǎng)景,測(cè)試人員仍然只覆蓋了一小部分的場(chǎng)景下的該特性的部分測(cè)試用例,如果沒(méi)有Fatal的遺留問(wèn)題,是否該特性的質(zhì)量就可以評(píng)價(jià)為A或B,并且認(rèn)為可以對(duì)外發(fā)布了呢?這種測(cè)試評(píng)估工作, 與其說(shuō)是讓測(cè)試人員對(duì)被測(cè)對(duì)象的質(zhì)量進(jìn)行測(cè)試評(píng)價(jià),不如說(shuō)是讓測(cè)試人員對(duì)被測(cè)對(duì)象進(jìn)行質(zhì)量預(yù)測(cè),因?yàn)闇y(cè)試人員所了解的只是部分信息,而不是全部。 Nassim說(shuō)“在這些錯(cuò)誤的預(yù)測(cè)和盲目的希望中,有一些愿望的成分,但也有知識(shí)的問(wèn)題。”我更愿意相信,測(cè)試人員對(duì)產(chǎn)品質(zhì)量的預(yù)測(cè)主要是“知識(shí)的問(wèn) 題”,畢竟完整測(cè)試是不可能的。
既然測(cè)試無(wú)法做到完整覆蓋,不如在有限的時(shí)間和資源內(nèi),盡可能覆蓋典型的場(chǎng) 景,測(cè)試評(píng)估中針對(duì)已經(jīng)覆蓋到的典型場(chǎng)景進(jìn)行評(píng)估,具體地,James Bach和Michael Bolton在RST(Rapid Software Testing)課程里提出的三步法可以供參考:
● 測(cè)試中發(fā)現(xiàn)了哪些問(wèn)題;
● 做了哪些測(cè)試活動(dòng)發(fā)現(xiàn)了這些問(wèn)題;
● 測(cè)試活動(dòng)本身的有效性如何,哪些地方可以改善。
那么對(duì)于典型場(chǎng)景之外的其他場(chǎng)景又如何評(píng)估呢,這與測(cè)試評(píng)價(jià)之前的那些測(cè)試活動(dòng)息息相關(guān),也就是與黑天鵝正在形成之中的那些故事有關(guān),我們?cè)诤竺娴谒牟糠衷偬接憽?/p>
不管怎樣,那些你認(rèn)為不應(yīng)該發(fā)生的“黑天鵝”經(jīng)常如期而至。很多組織要求缺陷發(fā)生后開展缺陷根因分析(RCA)(我總是在盡力避免使用“缺陷回 溯”這個(gè)詞)。尤其對(duì)黑天鵝這樣的重要的bug,更要仔細(xì)開展缺陷根因分析了。對(duì)黑天鵝開展RCA的目的是利用這個(gè)黑天鵝,挖掘它帶給我們的信息,從而盡 可能在以后的測(cè)試中發(fā)現(xiàn)更多類似的缺陷,對(duì)開發(fā)而言則是在以后盡可能避免引入此類的bug。
RCA的目的是做到基于缺陷的過(guò)程改進(jìn),而不是解釋黑天鵝的發(fā)生這個(gè)動(dòng)作本身。不要試圖去解釋所有的黑天鵝,尤其是那些在實(shí)驗(yàn)室很難重現(xiàn)的黑天 鵝。我看到有些測(cè)試團(tuán)隊(duì),當(dāng)黑天鵝發(fā)生了很緊張,又是一個(gè)嚴(yán)重的bug漏測(cè)了,趕緊組織人力調(diào)查分析,盡快寫出一個(gè)看起來(lái)像樣的缺陷分析報(bào)告。而閱讀這個(gè) RCA報(bào)告,很難從中找出真正有力的措施可以有效避免今后這類bug不再漏測(cè)。舉幾個(gè)現(xiàn)實(shí)中的“RCA現(xiàn)象”:RCA報(bào)告中,錯(cuò)誤的原因有“人為錯(cuò)誤”、 “溝通不暢”、“缺乏相應(yīng)的測(cè)試用例”等;避免漏測(cè)的措施有“加強(qiáng)代碼走讀”、“加強(qiáng)白盒測(cè)試”、“提高測(cè)試設(shè)計(jì)能力”、“加強(qiáng)與開發(fā)人員的溝通”等。 Nassim發(fā)現(xiàn),“我們的頭腦是非常了不起的解釋機(jī)器,能夠從幾乎所有事物中分析出道理,能夠?qū)Ω鞣N各樣的現(xiàn)象羅列出各種解釋,并且通常不能接受某件事 是不可預(yù)測(cè)的想法。”
我曾對(duì)多個(gè)團(tuán)隊(duì)進(jìn)行T-RCA(我提出的一個(gè)缺陷根因分析的方法)引導(dǎo),發(fā)現(xiàn)一個(gè)有趣的現(xiàn)象,盡管各個(gè)團(tuán)隊(duì)所測(cè)試的產(chǎn)品是不同的,但是他們 RCA分析的結(jié)論卻是驚人的相似,很多團(tuán)隊(duì)都存在我上述所列的“RCA現(xiàn)象”。我分析原因大致有二,一是沒(méi)有找到有效開展RCA的方法,沒(méi)有找到缺陷發(fā)生 的根本原因;二是很多團(tuán)隊(duì)使用了比較“細(xì)致”的RCA模板,模板里對(duì)每一項(xiàng)可能的情況進(jìn)行了細(xì)致的分類,比如該缺陷所處的測(cè)試級(jí)別、涉及的測(cè)試活動(dòng)、所屬 的測(cè)試類型、可能的原因分類等等。缺陷根因分析工作仿佛變成了測(cè)試人員只要對(duì)照模板逐一打鉤去篩選就可以了,但實(shí)際上RCA是個(gè)高度探索性的過(guò)程,需要與 缺陷相關(guān)的各干系人去溝通,需要從紛繁復(fù)雜的種種因素中創(chuàng)造性地找到改進(jìn)的措施。面對(duì)著電腦,填寫那些RCA模板中的空白項(xiàng)不是最主要的工作。實(shí)際上,某 種程度上講,過(guò)細(xì)的RCA模板簡(jiǎn)化了缺陷分析過(guò)程,掩蓋了缺陷根因分析過(guò)程的復(fù)雜性,也比較容易導(dǎo)致分析結(jié)果的雷同?!逗谔禊Z》里的這句話也許可以給我們 更多啟示:“我們對(duì)周圍世界的任何簡(jiǎn)化都可能產(chǎn)生爆炸性后果,因?yàn)樗豢紤]不確定性的來(lái)源,它使我們錯(cuò)誤地理解世界的構(gòu)成。”
4、黑天鵝形成之中的“柏拉圖化”
既然,測(cè)試中的黑天鵝的發(fā)生是個(gè)經(jīng)常性的事件,那么測(cè)試的過(guò)程不也正處于黑天鵝形成的過(guò)程嗎?想象一下,當(dāng)前我們正在測(cè)試一個(gè)產(chǎn)品,我們了解黑天鵝理論,我們知道這個(gè)產(chǎn)品發(fā)布給用戶后極有可能會(huì)冒出“黑天鵝”來(lái),那么我們當(dāng)前可以采取什么措施呢?
我在“認(rèn)識(shí)軟件測(cè)試中黑天鵝”一文中解釋了什么是“測(cè)試的柏拉圖化”:只注重外在的形式、尤其是針對(duì)具體明確的事情進(jìn)行簡(jiǎn)單分類的時(shí)候,犯“柏 拉圖化”錯(cuò)誤的人容易高估他們已經(jīng)掌握的事實(shí)性信息的價(jià)值,而對(duì)大量的他們還不知曉的并且非常重要的信息視而不見(jiàn)。我是在2006年發(fā)現(xiàn)這個(gè)“我所不知道 的大量信息的”,也同時(shí)發(fā)現(xiàn)了之前我所犯的“測(cè)試的柏拉圖化”的錯(cuò)誤,即特別重視諸如“測(cè)試用例設(shè)計(jì)個(gè)數(shù)、測(cè)試用例執(zhí)行個(gè)數(shù)、發(fā)現(xiàn)的bug數(shù)”等這些數(shù) 據(jù),也許在這些明確的、外在的形式之外,有更多值得我們思考的東西。
那一年,我負(fù)責(zé)一個(gè)特性(大體就是在手機(jī)上通過(guò)蜂窩小區(qū)廣播的形式收看電視)的測(cè)試,這個(gè)特性是個(gè)全新開發(fā)的特性,我是第一個(gè)、也是當(dāng)時(shí)唯一一 個(gè)測(cè)試人員,測(cè)試任務(wù)很緊張,因?yàn)檫@個(gè)特性已經(jīng)定于一、兩個(gè)月以后在香港某個(gè)運(yùn)營(yíng)商網(wǎng)絡(luò)里首次商用。像大多數(shù)測(cè)試人員一樣,我很辛勤地、按照既定方法和策 略測(cè)試這個(gè)特性,在有限的測(cè)試時(shí)間里:我熟悉了這個(gè)特性、設(shè)計(jì)了很多測(cè)試用例、執(zhí)行了大量的測(cè)試用例、發(fā)現(xiàn)了很多bug、對(duì)這個(gè)特性相關(guān)的每一個(gè)bug都 了如指掌、通過(guò)和開發(fā)人員不斷地交涉和定位bug還對(duì)該特性當(dāng)前存在的缺陷非常清楚、熟悉這個(gè)特性的代碼和問(wèn)題定位手段。當(dāng)我奔赴香港作為測(cè)試人員輔助開 通這個(gè)特性的商用之前,研發(fā)團(tuán)隊(duì)解決了所有嚴(yán)重的缺陷,我很有信心應(yīng)對(duì)各種可能的狀況,我?guī)缀跽J(rèn)為我對(duì)這個(gè)特性的了解已經(jīng)很完整了。
可是,當(dāng)我抵達(dá)用戶那里,看到我們的產(chǎn)品在真實(shí)網(wǎng)絡(luò)中的運(yùn)行環(huán)境、配置、使用方式,與用戶和當(dāng)?shù)丶夹g(shù)支持人員的各種交流,坐在地鐵里看到身邊的 人員拿著手機(jī)正在開啟使用我剛剛參與開通商用的特性,從真實(shí)網(wǎng)絡(luò)環(huán)境中獲取的大量錯(cuò)誤報(bào)告和跟蹤消息和后臺(tái)日志。。。短短幾天內(nèi),有關(guān)這個(gè)特性的、以前我 所不知道的、大量的信息沖進(jìn)了我的大腦,我像突然撿到寶藏一樣地忙著分析日志、記錄bug,生怕遺漏了哪個(gè)bug沒(méi)有記錄,然后回到實(shí)驗(yàn)室都不知道如何觸 發(fā)。
我發(fā)現(xiàn)了一個(gè)重要的事實(shí):這一回,我只用了幾天時(shí)間,沒(méi)有設(shè)計(jì)任何測(cè)試用例,沒(méi)有執(zhí)行任何測(cè)試用例,卻在一個(gè)我?guī)缀跽J(rèn)為沒(méi)有什么嚴(yán)重缺陷的特性 上,“不費(fèi)吹灰之力”似的又發(fā)現(xiàn)了很多嚴(yán)重的缺陷。而且這些缺陷不是實(shí)驗(yàn)室觸發(fā)的,而是就發(fā)生在用戶的身上,有些遭到用戶的投訴,有些用戶還不知曉,換句 話說(shuō),這些缺陷都是優(yōu)先級(jí)很高的非常重要的缺陷。
從香港回來(lái),我一直在思考,測(cè)試團(tuán)隊(duì)如何發(fā)現(xiàn)這些重要的缺陷?甚至如何讓平常我們?cè)趯?shí)驗(yàn)室中的測(cè)試也能這么高效、這么有效?您可能已經(jīng)猜到了, 這就是后來(lái)備受重視的UBT(Usage Based Testing),或者有的行業(yè)叫做TiP(Test in Production),也有人稱為Testing-in-the-wild。
再回到前面曾提到的一個(gè)關(guān)于測(cè)試評(píng)估的問(wèn)題上:假如平常的測(cè)試更關(guān)注典型場(chǎng)景的測(cè)試,那么對(duì)于非典型場(chǎng)景如何測(cè)試以及如何評(píng)估呢?我想U(xiǎn)BT是 個(gè)不錯(cuò)的選擇。既然無(wú)法做到全覆蓋的測(cè)試,就不去做,不要試圖在現(xiàn)有的測(cè)試模式下,測(cè)試設(shè)計(jì)和測(cè)試執(zhí)行都投入很大精力去覆蓋各種場(chǎng)景和交互,因?yàn)檫@樣做收 效甚微,依然達(dá)不到目的。平常的功能測(cè)試只做最普通、最典型、最重要場(chǎng)景下的功能驗(yàn)證,保證每個(gè)測(cè)試特性的基本功能OK。此外,還要開展UBT或TiP, 主要考慮各種配置和場(chǎng)景,用模擬器模擬真實(shí)商用組網(wǎng)環(huán)境和業(yè)務(wù)模型,或者直接在用戶使用產(chǎn)品的真實(shí)環(huán)境中開展測(cè)試。
假如被測(cè)系統(tǒng)如下圖的方框,灰色的小塊就是我們平常的功能測(cè)試覆蓋,可能很多測(cè)試團(tuán)隊(duì)的做法是試圖盡最大能力增加這些灰色小塊的覆蓋,但依然會(huì) 有很多覆蓋不到的地方。而UBT就相當(dāng)于紅色的范圍,雖然沒(méi)有針對(duì)性的設(shè)計(jì)測(cè)試用例,但由于模擬了可能使用的商用場(chǎng)景和業(yè)務(wù),業(yè)務(wù)之間交互的測(cè)試在這種測(cè) 試環(huán)境下自動(dòng)進(jìn)行,潛在的一般的bug都被自動(dòng)發(fā)現(xiàn)(比較難觸發(fā)的異常bug依然發(fā)現(xiàn)不了),如果這樣的UBT測(cè)試連續(xù)執(zhí)行幾天或數(shù)周都沒(méi)有問(wèn)題,此時(shí)測(cè) 試的評(píng)估中就可以很有信心地寫到:在XXX UBT環(huán)境下連續(xù)運(yùn)行XX天,沒(méi)有發(fā)現(xiàn)嚴(yán)重問(wèn)題。 這樣,也大大減少了版本發(fā)布后“黑天鵝”出現(xiàn)的幾率。
5、結(jié)論
如果你認(rèn)同“測(cè)試的黑天鵝”就在我們身邊,那么:
● 在“測(cè)試的黑天鵝”發(fā)生之前,不要在信息不完整的情況下對(duì)全局做“盲目預(yù)測(cè)”,因?yàn)槟阒徽莆樟瞬糠中畔ⅲ阋龅氖歉鼫?zhǔn)確地陳述這些“部分信息”;
● 在“測(cè)試的黑天鵝”發(fā)生之后,不要試圖對(duì)所有黑天鵝都做“假想解釋”,更重要的是從已經(jīng)發(fā)生的黑天鵝身上挖掘更有價(jià)值的信息,以減少更多類似黑天鵝事件的發(fā)生;
● 在“測(cè)試的黑天鵝”形成過(guò)程之中,不要犯“測(cè)試的柏拉圖化”錯(cuò)誤,重視你知道的信息,更重視那些你所不知道的大量的更有價(jià)值的信息。
本文轉(zhuǎn)載自:http://www.taixiaomei.com/archives/223
相關(guān)鏈接:
posted on 2013-05-22 10:29 順其自然EVO 閱讀(158) 評(píng)論(0) 編輯 收藏