測試與改錯

發表于:2014-12-29來源:uml.org.cn作者:不詳點擊數: 標簽:缺陷管理
編程大師說:“任何一個程序,無論它多么小,總存在著錯誤?!?初學者不相信大師的話,他問:“如果一個程序小得只執行一個簡單的功能,那會怎樣?” “這樣的一個

  編程大師說:“任何一個程序,無論它多么小,總存在著錯誤。”

  初學者不相信大師的話,他問:“如果一個程序小得只執行一個簡單的功能,那會怎樣?”

  “這樣的一個程序沒有意義,”大師說,“但如果這樣的程序存在的話,操作系統最后將失效,產生一個錯誤。”

  但初學者不滿足,他問:“如果操作系統不失效,那么會怎樣?”

  “沒有不失效的操作系統,”大師說,“但如果這樣的操作系統存在的話,硬件最后將失效,產生一個錯誤。”

  初學者仍不滿足,再問:“如果硬件不失效,那么會怎樣?”

  大師長嘆一聲道:“沒有不失效的硬件。但如果這樣的硬件存在的話,用戶就會想讓那個程序做一件不同的事,這件事也是一個錯誤。”

  沒有錯誤的程序世間難求。[James 1999]

  錯誤是一種嚴重的程序缺陷。測試的目的是為了發現盡可能多的缺陷,并期望通過改錯來把缺陷統統消滅,以期提高軟件的質量。但關于測試與改錯實在沒有什么高明的方法值得大書特書,也不能表現出程序員的聰明才智。相反地,它們帶來了更多的牢騷與痛苦。因此在教學和開發實踐中,測試與改錯總是被當作萬般無奈的工作踢到角落里。

  醫生可以把他的錯誤埋葬在地下了事,但程序員不能。我們必須要學會測試與改錯,并且把測試與改錯工作做好。

  7.1 對測試的理解

  測試的道理并不深奧,計算機專業人員都應該明白。但就是這么簡單的事,計算機專業的博士們也未必都已經理解。

  有一天,一位比我聰明,編程比我快,學習能力比我強的計算機專業博士生恭恭敬敬地請我坐好,并且史無前例地削了蘋果請我吃,為的是向我請教“軟件工程”問題。你必定以為這位仁兄好學之極。非也,我和他同事三年來從未探討過“軟件工程”問題。只因為他明天要去應聘,參加面試,生怕被人問倒,就央我當晚為他惡補一把“軟件工程”。他還特地問我“什么是白盒測試和黑盒測試?應該由誰來執行?”(有公司曾經這樣面試應聘者)當我解釋完測試的道理時,他嘆了一口氣說:“這些玩意兒我讀大學十年來都沒搞過,怎么能講得出道理來。唉,就去碰碰運氣吧。”我有“兔死狐悲”的感覺。我們這一群博士生三年來盡干些自欺欺人的事,到畢業時學問既不深也不博。個個意志消沉,老氣橫秋。長此以往,總有一天招聘會的大門前將貼出標語“博士與狗不得入內”。

  以下是關于測試的幾個重要觀念。

  7.1.1 測試的目的

  測試的目的是為了發現盡可能多的缺陷。

  這里缺陷是一種泛稱,它可以指功能的錯誤,也可以指性能低下,易用性差等等。測試總是先假設程序中存在缺陷,再通過執行程序來發現并最終改正缺陷。理解測試的目的是個很重要的意識問題。如果說測試的目的是為了說明程序中沒有缺陷,那么測試人員就會向這個目標靠攏,因而下意識地選用一些不易暴露錯誤的測試示例。這樣的測試是虛假的。

  目前高校的科技成果鑒定會普遍存在類似的虛假現象。我在讀碩士時就親身經歷過這樣的事。我們的項目是研究集成電路制造過程中的成品率問題。當時國內大多數工廠的集成電路成品率只有百分之幾,我編寫的示例程序可以將集成電路的成品率優化到98%。示例效果是如此的好,以致一位評委(某廠的總工程師)不無諷刺地說:“采用你們的成果,我們可要發大財了。”這個項目就輕易地通過了鑒定,并且不久后獲得了電子工業部科技進步二等獎。這就象在考試時通過作弊取得了好成績而被表揚。我那時尚且純真,羞愧之余,不禁對高??蒲谐晒乃胶驼鎸嵭源笫?現在我已不再失望,因為很少抱希望)。

  一個成功的測試示例在于發現了至今尚未發現的缺陷。

  測試并不僅是個技術問題,更是個職業道德問題。

  7.1.2 測試的心理要求

  測試主要是由人而不是由機器執行,這就不免與心理因素相關。為了測試的真實性,對測試的心理要求是“無情”。這似乎太殘酷了。開發人員不能很好地測試自己的程序是因為做不到無情。而測試人員如果做到了無情卻會引起開發人員的憤怒,遭人白眼。

原文轉自:http://www.uml.org.cn/Test/200608303.htm

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97