同乙個 bug 不要修復兩次

2021-06-21 13:31:30 字數 1105 閱讀 1297

**:

noah sussman 曾經寫過一篇文章 《你應該測試的東西:軟體系統測試清單》這份清單裡面大部分東西都是有幫助的。然而我覺得它所鼓勵的理念,本質上來說有誤。

它的理念基本上是這樣:找出開發者常犯的錯誤,然後確保你寫了測試樣例來檢查你沒有犯了這樣的錯誤。

然而這個做法的問題是它本質上是一種「打地鼠」式的除錯方式,並沒有終結掉那些該死的 bug。

乙個更有效的做法是《easy programming》裡提倡的「永遠不要重複解決同乙個 bug」(在這篇文章大約三分之一處)。

如果你遇到了乙個或者一類經常出現的 bug,你不應該首先想到的就是「最好把它們加到我需要測試的這類 bug 的列表裡面」,你應該想的是「我應該如何修改我的系統,使得這類 bug 再也不會出現?」

所以,對下面列出的一些東西進行測試:

文字——處理 unicode 的輸入和 ascii 輸入有不同嗎?同樣的,你應該使用正確的內部資料型別—— 在任何地方都用 unicode ——為了消除潛在的 bug。 python 2.x 在字串上聲名狼藉——縱容位元組串和 unicode 之間的轉換在生產而不是開發環境中產生了無窮無盡的 bug。

正確的解決方法是寫測試樣例——可能你現在就得做了——而不是解決底層的問題,它已經在 python3 中被解決了。

同樣的東西可以應用到 noah 的列表裡其他幾乎所有的事情上,如果我不能看出怎麼應用的話,我就會想一定是我的想象力不夠 :-)。如果我不能想出乙個完全解決一類 bug 的辦法的話,我應該更加努力的想,而不是假設它是不可能發生的。

注意這是乙個老程式設計師的觀點,這個列表裡遺漏了一些有名的東西——比如緩衝區溢位。想必是作者使用的語言或框架不可能產生這樣的 bug。之所以這樣不是因為前一代的程式設計師寫了大量的測試,而是因為他們寫的語言和系統不可能或者幾乎不可能產生這類 bug。

所以,我在這裡要說的是你甚至不必為這些 bug 寫測試。你每次找到一類這樣的 bug 時,測試總是顯得多麼蒼白無力。你應該確保你絕不會解決同乙個 bug 兩次,所以也絕不會寫兩次同樣的測試。如果你正在寫本質上同樣的測試超過了一次,那證明你還並沒有解決真正的問題。

如果乙個 bug 值得新增到常見的 bug 列表中,於是你就發現了乙個你的平台上的系統問題,它值得完全消除。我們應該追求那些這樣做的庫/程式語言/系統。

為什麼請求同乙個介面,會請求兩次?

仔細看這個請求方式是 request method options 原來在 cors 跨域資源共享 中,可以使用 options 方法發起乙個預檢請求,以檢測實際請求是否可以被伺服器所接受。預檢請求報文中的 access control request method 首部字段告知伺服器實際請求所使用...

同乙個正規表示式兩次匹配結果不通

let reg1 rr us he g console.log reg1.test rush true console.log reg1.test rush false console.log reg1.test ruse true console.log reg1.test ruse falsew...

男子半年兩次癲癇病發 救他的居然是同乙個民警

男子半年兩次癲癇病發,救他的居然是同乙個民警 劉小林 攝 廣州1月31日電 郭軍 劉小林 黃小夏 2018年6月,一男子在廣東中山北站癲癇發作,所幸得到車站民警及時相救。時隔半年,這名男子又在中山北站病發,巧合的是這次救助他的民警居然是同乙個人。據廣州鐵路 31日通報,1月27日16時48分左右,一...