本文主要為討論2020/3/17下午oo課討論的第三個思考題設立
有乙個經典的經驗性原則,叫帕累託原則,也稱為二八定律。這個原則在經濟、社會和科技等多個領域都有精彩的應用和解釋。在**質量方面也有這樣的觀察:80%的bug集中在20%的模組中,針對這個現象,請思考:
二八定律又名80/20定律、帕累託法則(pareto『s principle)也叫巴萊特定律、朱倫法則(juran's principle)、關鍵少數法則(vital few rule)、不重要多數法則(trivial many rule)、最省力的法則、不平衡原則等,被廣泛應用於社會學及企業管理學等。
二八定律是19世紀末20世紀初義大利經濟學家帕累託發現的。他認為,在任何一組東西中,最重要的只佔其中一小部分,約20%,其餘80%儘管是多數,卻是次要的,因此又稱二八定律。
其實從二八定律這麼多別稱,我們就能看出不少端倪:
二八定律告訴我們,重要的部分往往只是少數,如果我們能抓住這個重要的部分——抓住主要矛盾,那麼我們的精力、經濟、時間投入的收益將會大大提高。重要部分到底是不是整整的20%,其實倒不是關鍵。
在**質量方面,人們有這樣的觀察:80%的bug集中在20%的模組中。
自己辛辛苦苦寫了好幾千行**,十好幾個檔案,一跑測試,bug滿天飛,然後自己對著這麼一坨自己都不知道誰寫的**一頓騷操作,又一頓騷操作,然後甚至還重寫了某個檔案,終於修好了這些讓人欲罷不能的bug,結果windows資源管理器一看,
好嘛,合著大部分檔案最後一次修改都是好幾天之前了。那麼問題來了:
私以為,主要可能有這麼幾個原因:
從聚集效應的原因,我們可以反向找出容易出bug的模組具有怎樣的特徵:
bug的二八定律可以給我們在測試的時候提供很大的幫助:
* 分模組測試,給不同模組以不同的測試強度,給難的模組比較仔細的測試,給簡單的模組簡單測試,甚至大部分簡單模組只需要在整體測試中進行測試即可。
* 整體測試的時候針對易錯模組設定測試資料。比如寫了很複雜的sin()**2+cos(x)**2化簡模組,就新增sin(x)**2+cos(x)**來誘發不正確的化簡;寫了複雜的提取公因式化簡,就新增x*+3*x**2+3*x+1測試一下能否把3*(x+1)**2這種不合法輸出給剔除掉(題目要求表示式因子不能有指數)。
開發過程時時刻刻便隨著與bug的對抗,研究bug的出現規律,可以幫助我們寫出魯棒性更好的程式。
本人才疏學淺,多多少少有所欠缺。謹以此文拋磚引玉,歡迎dalao們補充!
OO的bug,C 的bug,還是編譯器的bug
oo的 bug,c 的bug,還是編譯器的 bug?按照物件導向的理論派生類可以直接繼承基類的公有方法.例如 class base class derive public base 現在類derive就自然而然的有了乙個void fun const int arg 的方法.這個方法就是從類base繼...
OO的bug,C 的bug,還是編譯器的bug
oo的 bug,c 的bug,還是編譯器的 bug?按照物件導向的理論派生類可以直接繼承基類的公有方法.例如 class base class derive public base 現在類derive就自然而然的有了乙個void fun const int arg 的方法.這個方法就是從類base繼...
OO的bug,C 的bug,還是編譯器的bug
oo的 bug,c 的bug,還是編譯器的 bug?按照物件導向的理論派生類可以直接繼承基類的公有方法.例如 class base class derive public base 現在類derive就自然而然的有了乙個void fun const int arg 的方法.這個方法就是從類base繼...