隨筆-94  評論-56  文章-3  trackbacks-0

          錯(cuò)誤植入法與老祖宗的智慧

          兩個(gè)小組獨(dú)立地測試同一個(gè)程序,第一組發(fā)現(xiàn)25個(gè)錯(cuò)誤,第二組發(fā)現(xiàn)30個(gè)錯(cuò)誤,在兩個(gè)小組發(fā)現(xiàn)的錯(cuò)誤中有15個(gè)是共同的,那么可以估計(jì)程序中的錯(cuò)誤總數(shù)是 ___個(gè)。

          A.25 B.30 C.50 D.60

              當(dāng)然,任何一個(gè)了解估算方法的朋友都可以根據(jù)公式計(jì)算出最終的結(jié)果是50個(gè),這沒有什么問題。——但是,我在這里引用這個(gè)題目,是希望我們可以把學(xué)習(xí)這件事情通過類比變得更加有趣一點(diǎn)。

              其實(shí),如何估算一個(gè)系統(tǒng)中存在的缺陷數(shù),我們的老祖宗早就有現(xiàn)成的方法了。不信,請看我在我們老祖宗的數(shù)學(xué)專著中找到的一個(gè)實(shí)踐問題:“有一口魚塘,不知道其中有多少條魚,如何才能估算出池塘中魚的數(shù)量?”(當(dāng)然,原文不是這樣,請?jiān)徫乙幌伦诱也坏匠鎏帲缓脩{記憶用我的語言描述一下了)。我們老祖宗給出的答案是這樣的:

          1. 首先,從魚塘中打撈出一些魚(假設(shè)數(shù)量為m);
          2. 將這些魚做上記號,然后將其放回魚塘;
          3. 等待一段時(shí)間,等到魚均勻分布在魚塘中了之后,再次打撈上來一些魚(假設(shè)數(shù)量為n);
          4. 統(tǒng)計(jì)第二次打撈上來的魚中的帶記號者(假設(shè)數(shù)量為p);
          5. 計(jì)算得出魚塘中魚的數(shù)量為 S = m / (p/n)

              對這個(gè)答案最簡單的理解是:假設(shè)第一次做了記號的魚在魚塘中是均勻分布的,第二次打撈上來的n條魚中有p條是有記號的,則說明有記號的魚的分布密度是p/n,魚塘中一共有m條有記號的魚,當(dāng)然總的魚數(shù)量就是 S = m / (p/n)了

              再回到我們的原始問題,很容易做一個(gè)類比,第一個(gè)小組發(fā)現(xiàn)了25個(gè)缺陷(相當(dāng)于第一次打撈的魚m),第二個(gè)小組發(fā)現(xiàn)了30個(gè)缺陷(相當(dāng)于第二次打撈上來的魚n),兩者相同的是15個(gè)(相當(dāng)于是p),所以答案是 50。

              所以,從現(xiàn)在開始,不要再認(rèn)為這個(gè)方法是什么深?yuàn)W的方法——看看,我們的老祖宗都能熟練運(yùn)用呢

              本來,到這里就可以告一段落了,可是我們能不能再深入點(diǎn)思考這個(gè)問題呢?

              這種方法顯然是可以得到一個(gè)估算結(jié)果,但這種方法在哪些情況下不合適,使用時(shí)有什么注意事項(xiàng)沒有呢?

              還是回過頭看我們養(yǎng)魚的例子,很顯然,我們討論的前提是“做記號的魚在池塘中分布均勻”,如果這個(gè)條件不滿足,我們的估算結(jié)果顯然是有很大的偏差的。就魚塘來說,不同類型的魚由于喜歡的食物種類不同,喜歡分布在不同的層次,這樣一來的話,在打撈的時(shí)候就要注意,如果只側(cè)重在某一個(gè)水層,顯然結(jié)果是有很大的偏差的,另外,由于魚塘邊上的溫度相對較低,夏天魚更加喜歡在魚塘邊休息……,可見,要達(dá)到“平均”這樣的條件還是有難度的…… —— 等等,我們討論了這么久的魚,和我們的缺陷有什么關(guān)系呢?

              別忘了,缺陷在系統(tǒng)中的分布和魚在魚塘中的分布可是有異曲同工之妙的哦。缺陷有不同的類型(功能缺陷,性能缺陷,安全性缺陷……),分布在不同的模塊,由于模塊設(shè)計(jì)和實(shí)現(xiàn)人員的水平的差異,模塊自身復(fù)雜度的差異等,不同模塊中的缺陷分布顯然是不同的,一個(gè)系統(tǒng)中,由于測試的測試不同,不同類型缺陷的發(fā)現(xiàn)效率也是不同的……——再看看,這和我們的魚塘是不是一回事?

              關(guān)于魚塘和缺陷的故事,如果我們要深究下去,還會發(fā)現(xiàn)他們的很多共同點(diǎn),當(dāng)然,你也可以提出各種方法來修正我們這個(gè)簡單的模型——但這不是我們的重點(diǎn)。我要說的重點(diǎn)是:無論如何,在這條路上的思考是不是會比簡單的背公式更有趣一些呢?

               經(jīng)常有測試工程師問到,應(yīng)該怎樣才有最高的學(xué)習(xí)效率呢?

              我的回答是:學(xué)習(xí)、思考是樂趣,不是負(fù)擔(dān)。我們學(xué)習(xí)是為了追求它自身的樂趣——獲得知識的樂趣,在自己頭腦中天馬行空的樂趣,發(fā)現(xiàn)的樂趣,以及分享的樂趣。
          posted on 2008-08-19 09:55 小言身寸 閱讀(856) 評論(0)  編輯  收藏 所屬分類: 軟件測試

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 扶沟县| 泌阳县| 屏东县| 靖州| 若羌县| 河池市| 称多县| 贺州市| 渭源县| 颍上县| 泰来县| 高安市| 湟源县| 通榆县| 苍南县| 宿迁市| 五寨县| 安新县| 达尔| 葵青区| 喜德县| 平江县| 翁源县| 鹰潭市| 涿州市| 南澳县| 河西区| 巩留县| 禹城市| 盖州市| 罗甸县| 漠河县| 楚雄市| 陵川县| 曲阜市| 尼勒克县| 清水县| 通辽市| 株洲市| 噶尔县| 长顺县|