qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問(wèn) http://qaseven.github.io/

          你為什么沒(méi)找到那個(gè)bug?

           作為一名測(cè)試人員我知道我不可能找到每一個(gè)錯(cuò)誤。但即便如此,當(dāng)一個(gè)問(wèn)題從你眼前溜過(guò),跑向生產(chǎn)這一本壘時(shí),我經(jīng)常會(huì)問(wèn)自己,我怎么就漏過(guò)了這個(gè)問(wèn)題呢?有什么是我可以做得更好的?我能做些什么來(lái)防止未來(lái)這種情況的再次發(fā)生?
            這些都是很好的問(wèn)題,但更實(shí)際的來(lái)說(shuō),我們需要認(rèn)識(shí)到一點(diǎn),錯(cuò)誤往往會(huì)偷偷溜過(guò)而未被我們發(fā)現(xiàn)。有一些方法可以幫助我們減少這些未被發(fā)現(xiàn)的bug數(shù)量,但我明白沒(méi)有任何辦法能夠保證產(chǎn)品完全無(wú)缺陷。
            當(dāng)我剛開(kāi)始做測(cè)試時(shí)我總是對(duì)別人在我測(cè)試過(guò)的產(chǎn)品的部分發(fā)現(xiàn)bug非常敏感。我常聽(tīng)到辦公室回響著可怕的句子——“誰(shuí)測(cè)試過(guò)這個(gè)?為什么沒(méi)有發(fā)現(xiàn)這個(gè)錯(cuò)誤?”那時(shí)我還沒(méi)有足夠的經(jīng)驗(yàn)可以通過(guò)合理的方式來(lái)爭(zhēng)論,為什么不是任何產(chǎn)品在任意給定時(shí)間段中都可以找到所有的bug。
            雖然在某些方面,這些經(jīng)歷幫助我使我的測(cè)試方法更完備。
            所以,我列出了一些你可以嘗試一下的事情,以限制未被檢測(cè)到的bug的數(shù)量,我有幾個(gè)故事分享給大家,關(guān)于那些像夜晚的忍者那樣悄悄溜過(guò)而未被我發(fā)現(xiàn)的錯(cuò)誤。這些故事表明,即使最明顯的錯(cuò)誤(一旦知道就覺(jué)得很明顯),可能發(fā)生也將發(fā)生。
            我們?cè)趺磿?huì)錯(cuò)過(guò)呢?
            在一個(gè)項(xiàng)目中,一個(gè)網(wǎng)站,正在一些關(guān)鍵部分,如注冊(cè)和產(chǎn)品選擇進(jìn)行了重新設(shè)計(jì)并添加了一些額外的功能,我花了大約兩個(gè)月進(jìn)行各種測(cè)試活動(dòng)。在這段時(shí)間內(nèi)熟悉設(shè)置的各種變化和改進(jìn),我們都知道危險(xiǎn),并試圖減少它們,我們找了一些人來(lái)進(jìn)行用戶支持測(cè)試以幫助測(cè)試。不幸的是,這些主要覆蓋在驗(yàn)證bug修復(fù)或者專門(mén)針對(duì)測(cè)試網(wǎng)站的某些部分。
            在產(chǎn)品環(huán)境中啟動(dòng)網(wǎng)站的第一分鐘,一個(gè)問(wèn)題被確定。這是非常明顯的bug,也產(chǎn)生了一些相當(dāng)大的混亂,它是怎么能夠被錯(cuò)過(guò)的。這個(gè)問(wèn)題并不是說(shuō)需要任何除了會(huì)拼寫(xiě)之外的特殊的技能才能找到的。在該網(wǎng)站的首頁(yè)(它通常被稱為商店櫥窗),客戶登陸后看到的你的網(wǎng)站的第一頁(yè),在屏幕中間非常大的字體,寫(xiě)著“BRAODBAND“而不是“BROADBAND”。 “這是一個(gè)非常明顯的錯(cuò)誤拼寫(xiě),但不知何故,每個(gè)人都錯(cuò)過(guò)了發(fā)現(xiàn)它,直到這個(gè)網(wǎng)站開(kāi)始使用,然后由于某種原因,這個(gè)錯(cuò)誤立即被所有人發(fā)現(xiàn)了。
            它是活的!
            我現(xiàn)在受到了“它還活著”,在1931年的老電影科學(xué)怪人中那句臺(tái)詞的啟發(fā)。當(dāng)產(chǎn)品處于成熟狀態(tài),我用這句話來(lái)慢慢的推進(jìn)我的想法,為了能夠看到那些可能被我錯(cuò)過(guò)的東西。在這種情況下,問(wèn)題是那么明顯它造成了混亂的奇怪的氛圍,而且可能因?yàn)樾扪a(bǔ)程序過(guò)于簡(jiǎn)單而無(wú)從指責(zé)。然而,這很清楚地表明了,即使是最公然明顯的錯(cuò)誤也很容易被很多人錯(cuò)過(guò)。
            本應(yīng)該,早該,早可以。
            這些錯(cuò)誤不一定在測(cè)試過(guò)程中由于沒(méi)有找到他們而被錯(cuò)過(guò),而是因?yàn)闇y(cè)試者沒(méi)有考慮如果X事件發(fā)生了,在整個(gè)開(kāi)發(fā)周期中將會(huì)或者可能會(huì)發(fā)生什么錯(cuò)誤。當(dāng)在當(dāng)天晚些時(shí)候發(fā)現(xiàn)或者當(dāng)產(chǎn)品在生產(chǎn)過(guò)程中發(fā)現(xiàn)這些bug時(shí),常常招來(lái)了一句“是啊,我就覺(jué)得這可能會(huì)發(fā)生”或“我就知道會(huì)發(fā)生這個(gè)問(wèn)題。”
            這些方案有時(shí)被稱為邊緣情況(極限測(cè)試情況下)或邊角情況(非常具體的,很少發(fā)生的情況下)。后者常常使我感到驚訝,因?yàn)樗鼈兛赡芎茉缇驮陧?xiàng)目中被定義為邊角情況,可是后來(lái)發(fā)現(xiàn)實(shí)際上是一些經(jīng)常發(fā)生的情況。這主要是由于不理解系統(tǒng)以及其相互作用夠好才能夠使得最初做出這樣的判斷。
            我曾有過(guò)此類的經(jīng)歷,測(cè)試一個(gè)新的需要處理成千上萬(wàn)的客戶記錄的應(yīng)用程序。在測(cè)試過(guò)程中,我問(wèn)了一個(gè)問(wèn)題:“是否進(jìn)行過(guò)負(fù)載測(cè)試?”對(duì)此的答復(fù)是“哦,這不是問(wèn)題,它可以輕松地處理高達(dá)一百萬(wàn)條記錄的負(fù)載。”然而,當(dāng)推出了這個(gè)改變后,在前幾分鐘有顯著的負(fù)載,經(jīng)過(guò)觀察其證明之后會(huì)導(dǎo)致嚴(yán)重的問(wèn)題并且對(duì)應(yīng)的代碼會(huì)被還原。在那段時(shí)間,我并沒(méi)有完全理解所涉及的技術(shù),并假定了開(kāi)發(fā)人員比我知道得更清楚,可能已經(jīng)考慮過(guò)這個(gè)潛在的問(wèn)題。從那天起我才知道,當(dāng)我有直覺(jué)某處可能有問(wèn)題,我不應(yīng)該認(rèn)為別人快速而簡(jiǎn)單的答案就是真理。我應(yīng)該從別處尋求可以支持的資料以證實(shí)或反駁我的假設(shè)。
            我的第六感正在提醒!
            我把這稱為我的“第六感”啟發(fā),當(dāng)我對(duì)某些東西有一種感覺(jué),比如我不能完全的理解或我所得到的信息看來(lái)可疑的情況下,我不愿意就此忽略它并繼續(xù)下一步除非我對(duì)其有一個(gè)合理的認(rèn)識(shí)。在這種情況下,我會(huì)讓參與該項(xiàng)目的每個(gè)人都知道,我對(duì)這部分有所顧慮。這通常會(huì)有所幫助因?yàn)槠渌藭?huì)開(kāi)始質(zhì)疑為什么我會(huì)有顧慮;無(wú)論是由于我缺乏相關(guān)知識(shí)使得我的假設(shè)是錯(cuò)誤的,或我的假設(shè)是正確的,對(duì)我而言都沒(méi)關(guān)系。重要的是,我明白如果我忽視自己的直覺(jué)進(jìn)行測(cè)試,我不認(rèn)為自己能有效地做好工作
            容易復(fù)制。不容易找到。
            通常如果測(cè)試需要涵蓋產(chǎn)品或系統(tǒng)的各個(gè)方面,其場(chǎng)景數(shù)量會(huì)高得難以負(fù)擔(dān)。即使對(duì)于看來(lái)可以相對(duì)簡(jiǎn)單的進(jìn)行測(cè)試的系統(tǒng)也可以有數(shù)以百萬(wàn)計(jì)的排列。有些辦法可以處理這樣的問(wèn)題,其中之一被稱為成對(duì)(或組合)的測(cè)試,我不會(huì)在這里來(lái)詳述這個(gè)方法,但如果你想了解更多,可以看看Michael Bolton所著的對(duì)于這個(gè)方法的優(yōu)秀的處理方式。
            我對(duì)于這一類的問(wèn)題的經(jīng)歷是個(gè)標(biāo)準(zhǔn)的負(fù)面答案,當(dāng)發(fā)現(xiàn)一個(gè)問(wèn)題時(shí),這是100%可復(fù)制的。由于只要通過(guò)5個(gè)簡(jiǎn)單的步驟,就次次都可復(fù)制,并最終導(dǎo)致“怎么又沒(méi)發(fā)現(xiàn)這個(gè)bug?”的指責(zé)。
            問(wèn)題是這樣,基于一個(gè)復(fù)制系統(tǒng),該系統(tǒng)有多個(gè)文件夾,每一個(gè)文件都具有三個(gè)不同的使用權(quán)限,僅讀取,讀或?qū)懸约熬芙^。在每個(gè)文件夾中,每個(gè)文件都可以有相同的三個(gè)文件權(quán)限。 我現(xiàn)在更有經(jīng)驗(yàn)并愿意挑戰(zhàn)回復(fù)其他人提出的意見(jiàn),如“你為什么沒(méi)有發(fā)現(xiàn)錯(cuò)誤?”因此,我設(shè)計(jì)了一個(gè)簡(jiǎn)單的場(chǎng)景,說(shuō)明給定變量的數(shù)量有限的測(cè)試,測(cè)試所有排列所需的時(shí)間是巨大的。該方案是這樣的:
            三個(gè)文件夾的層次結(jié)構(gòu)
            每個(gè)文件夾包含四個(gè)文件
            文件夾和文件都可以有不同的權(quán)限
            覆蓋這個(gè)相對(duì)簡(jiǎn)單情況下所有排列的測(cè)試次數(shù)為14348907。這是3^15(15個(gè)實(shí)體與3種狀態(tài))。很明顯,這么大的數(shù)字顯示了你是無(wú)法在可行的時(shí)間內(nèi)測(cè)試完所有排列的。當(dāng)然,你可以創(chuàng)建一個(gè)自動(dòng)化的測(cè)試,以更迅速地完成,但這里的問(wèn)題是,這種情況甚至不是一個(gè)現(xiàn)實(shí)世界中真正存在的情況。我僅僅是創(chuàng)建了一個(gè)簡(jiǎn)單的練習(xí),以顯示要測(cè)試這個(gè)看似簡(jiǎn)單的可復(fù)制問(wèn)題是有多么困難。要知道在現(xiàn)實(shí)世界中的客戶會(huì)有幾百個(gè)文件夾,包含數(shù)百或上千個(gè)文件的大層次結(jié)構(gòu)。通過(guò)交流關(guān)于這個(gè)簡(jiǎn)單的場(chǎng)景很快使我能夠說(shuō)明為何測(cè)試無(wú)法發(fā)現(xiàn)每一個(gè)漏洞,無(wú)論在事后它是多么的明顯。
            還有什么?
            正如已經(jīng)敘述的這三個(gè)真實(shí)世界的故事,即使你認(rèn)為你已經(jīng)完成了測(cè)試而實(shí)際你還沒(méi)有。有許多原因可以停止測(cè)試,但其中并沒(méi)有你已完成了所有測(cè)試這一理由。我覺(jué)得思考我是否錯(cuò)過(guò)了什么是非常寶貴的。有什么是我沒(méi)有想到的?有什么是我覺(jué)得太明顯了,就對(duì)其忽視或認(rèn)為是不值得考慮?我一般盡量記錄這些問(wèn)題。有些會(huì)得到答案,有些則沒(méi)有;但是這并不會(huì)阻止我思考具有啟發(fā)性的“還有什么?”。
            避免令人尷尬的錯(cuò)誤!
            命名您的啟發(fā)式方法,讓你可以在未來(lái)輕松地回憶起來(lái)。
            如果你要問(wèn)如何做,你才可以進(jìn)行測(cè)試,當(dāng)心——無(wú)論是與你的理解還是所給的答案都可能有問(wèn)題。
            創(chuàng)建許多測(cè)試的想法。你真的不應(yīng)該有沒(méi)有想法的時(shí)候。
            想想“假設(shè)?”
            請(qǐng)注意你的情緒。他們會(huì)告訴你一些事情
            有新的眼光來(lái)看待變化,而不要指示它們要測(cè)試的內(nèi)容。
            意識(shí)到“沒(méi)有人會(huì)這么做”的聲明。
            與其他測(cè)試人員,開(kāi)發(fā)人員,產(chǎn)品經(jīng)理,市場(chǎng)營(yíng)銷——所有可用的并有意愿的人合作測(cè)試!
            在測(cè)試中,我們需要大量的實(shí)用主義。不管我們使用什么樣的方法來(lái)幫助防止檢測(cè)失誤,bug總會(huì)被漏過(guò)。使用啟發(fā)方式可以幫助減少總數(shù)。
            給啟發(fā)方式命名或助記符可以幫助您同時(shí)記住并利用它們來(lái)幫助你早期識(shí)別錯(cuò)誤和防止明顯的錯(cuò)誤。命名您的啟發(fā)方式可以根據(jù)自己的個(gè)人喜好來(lái)完成,因此,如果以上任何一個(gè)方法對(duì)你有用,請(qǐng)隨意命名并利用它們來(lái)幫助你找到那些所謂明顯的錯(cuò)誤。
            作者簡(jiǎn)介
            Stephen Blower 已經(jīng)作為測(cè)試員在不同的機(jī)構(gòu)工作了18年。目前,身為Ffrees家庭財(cái)務(wù)的測(cè)試經(jīng)理,他有令人羨慕的位置,能夠從頭開(kāi)始創(chuàng)建一個(gè)測(cè)試團(tuán)隊(duì)。他職位的重要部分是激發(fā)測(cè)試者,而不僅僅是創(chuàng)建流程。Stephen大力鼓勵(lì)互動(dòng)和反饋,并讓測(cè)試者獲得控制權(quán),使他們成為發(fā)展具有價(jià)值的發(fā)展團(tuán)隊(duì)的成員。
            譯者簡(jiǎn)介:大頭,在讀日本九州大學(xué)修士,計(jì)算機(jī)專業(yè),主研究方向?yàn)槲谋就诰颍白匀徽Z(yǔ)言處理。

          posted on 2014-10-30 10:47 順其自然EVO 閱讀(201) 評(píng)論(0)  編輯  收藏 所屬分類: 測(cè)試學(xué)習(xí)專欄

          <2014年10月>
          2829301234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 博爱县| 古丈县| 洛隆县| 安丘市| 鱼台县| 宁波市| 苍梧县| 临城县| 龙川县| 肇东市| 江口县| 南宫市| 五华县| 师宗县| 庆城县| 乌鲁木齐县| 楚雄市| 堆龙德庆县| 惠安县| 鄂州市| 涪陵区| 电白县| 卢湾区| 久治县| 仁布县| 当阳市| 平湖市| 咸阳市| 莲花县| 陕西省| 平江县| 黄山市| 乌兰县| 怀宁县| 和静县| 同江市| 奉新县| 阳江市| 马尔康县| 海城市| 道孚县|