錯(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
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)徫乙幌伦诱也坏匠鎏帲缓脩{記憶用我的語言描述一下了)。我們老祖宗給出的答案是這樣的:
- 首先,從魚塘中打撈出一些魚(假設(shè)數(shù)量為m);
- 將這些魚做上記號,然后將其放回魚塘;
- 等待一段時(shí)間,等到魚均勻分布在魚塘中了之后,再次打撈上來一些魚(假設(shè)數(shù)量為n);
- 統(tǒng)計(jì)第二次打撈上來的魚中的帶記號者(假設(shè)數(shù)量為p);
- 計(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)中的分布和魚在魚塘中的分布可是有異曲同工之妙的哦

關(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)的樂趣,以及分享的樂趣。