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

          錯誤植入法與老祖宗的智慧

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

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

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

              其實,如何估算一個系統(tǒng)中存在的缺陷數(shù),我們的老祖宗早就有現(xiàn)成的方法了。不信,請看我在我們老祖宗的數(shù)學專著中找到的一個實踐問題:“有一口魚塘,不知道其中有多少條魚,如何才能估算出池塘中魚的數(shù)量?”(當然,原文不是這樣,請原諒我一下子找不到出處,只好憑記憶用我的語言描述一下了)。我們老祖宗給出的答案是這樣的:

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

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

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

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

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

              這種方法顯然是可以得到一個估算結果,但這種方法在哪些情況下不合適,使用時有什么注意事項沒有呢?

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

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

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

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

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

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


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 洛阳市| 广昌县| 杭锦旗| 临湘市| 清流县| 鄂伦春自治旗| 永胜县| 缙云县| 昌乐县| 浙江省| 诸暨市| 新巴尔虎右旗| 林口县| 六安市| 奈曼旗| 卓尼县| 新龙县| 兴山县| 义乌市| 三原县| 河津市| 南川市| 鱼台县| 焉耆| 新绛县| 视频| 团风县| 天祝| 海丰县| 葫芦岛市| 岐山县| 四子王旗| 蒙城县| 衡东县| 应城市| 开封县| 灵石县| 应用必备| 札达县| 偃师市| 平乐县|