建立小型測試程式排除軟體故障的藝術
又來了!無論你如何細心地測試了所用語言、函式庫和架構的每一項效能,無論你如何審慎地為每個元件建立了單元測試,當你最終把它納入應用程式時,得到的是不可理解的故障。
嘗試所知的每一種除錯技術;改寫並簡化了最可疑的**段;掐掉或剔除整個元件。這可能會幫助你把故障縮小到特定區域,但你對出錯的東西或原因仍然沒有頭緒。如果你知道語言或函式庫的**,你可能會得到更進一步的資訊,但你也許仍然會因為缺乏知識或文件,對故障的理解不足以解決問題。
「哇!等一下!當我們在嘗試進行除錯時已經刪除一切多餘的東西!」我聽見你泣道。
你說的可能是實情,但是我們的目標卻是要排除其他原因。把目標轉為縮小測試程式牽涉的範圍,這樣你幾乎總是有更多事情可以做。這兩個目標聽上去幾乎是一樣的,而且它們有很多重疊之處,但它們的覆蓋範圍並不完全一樣。在第一種情況下,我們試圖盡一切可能來自力更生解決問題。在第二種情況下,我們要盡自己所能幫助開發人員解決問題。這意味著我們需要採取以下步驟:
▲去掉對特定配置的依賴。豪無疑問,你已經定製了自己的開發環境,通過各種捷徑和慣例來節省時間;但對不熟悉這些的人來說,它們中任何一項都耗費時間。你要麼去掉這些依賴,創造乙個更普通的環境,要麼為他們提供了乙個不會被入侵的快速安裝程式。例如,如果您需要使用者設定某些環境變數,那麼可以提供乙個指令碼來完成這些設定,然後啟動應用程式。最好是完全消除對環境變數依賴——如果在乙個以上的地方設定,或沒能正確匯出,那麼這種依賴關係會增加不確定性。
▲ 盡自己所能地去掉所有自定義或第三方元件。你應該已經做了這件事情,但在提交故障時,這變得更加重要。外部元件總是引來指責——確實如此,因為它們經常會造成不可預見的問題。把它們排除出來。此外,如果外部元件需要安裝和設定,這會延遲開發者看問題的時間。開發人員在讓這些元件在其系統上工作時通常會遇到麻煩,如果他們在開始時並不真正需要這些元件,這就純粹是浪費時間。
▲減少需要使用者操作的步驟。如果你認為通過執行測試程式一次或兩次就會發現問題,那麼你就是乙個盲目樂觀的人(pollyanna)。如果他們要將測試程式執行一千次,執行時間裡的每一分鐘的費用為兩個工作日。實際上比這更多,這是因為開發人員也是人——每一次開發人員都必須重新啟動乙個冗長、艱難的設定步驟,他們需要時不時地暫停下來嘆息並納悶他們的命怎麼這麼苦。
▲清晰記錄操作步驟。我不知道有多少次收到一些自稱是重現問題的步驟的東西,內容為「執行應用程式。」除非應用程式非常簡單,不需要安裝或互動,而且故障明顯到連[典型無能之人]也不會錯過,否則該指令將無法重現。不管它看起來多麼明顯,都要包括每乙個步驟——每條一安裝命令,啟動應用程式的命令,以及所需輸入的一切。如果您遵循上述步驟,這應該不會太多。
▲盡可能減少執行**行數。整個程式可能在兩秒鐘內執行,但如果它執行了30000行**,那麼開發人員可能要排除至少30000個可能的原因。此外,這還會讓除錯變得複雜。如果你能將整個程式壓縮至「一,二,搞定!」那你就學乖了。
▲包含明確的故障標示。不要想當然地認為開發人員將立即辨別出來,你那是10個畫素的玩意太小了——請在步驟說明中告訴他們。理想的情況是,應用程式在執行時應該大叫:「這就是我出故障的地方!」。使用斷言,或者至少用printf或訊息框來輸出。
▲包含明確的成功標示。有很多次,我已經解決了測試程式表現出來的乙個問題,隨即又碰到另乙個故障。難道我之前解決了乙個他們沒有報告的問題,現在才看到他們提出的故障嗎?通常他們知道第二個故障,但他們根本不費心去阻止它出現,因為他們已經重現了第乙個故障。這很失禮。在理想情況下,你希望測試程式是為某個問題量身定製的,這樣同樣的問題就不會在另乙個測試程式中出現。為了實現這一目標,它要有乙個成功的標誌。這會讓我們對故障是否已成功排除不存有任何疑問。
▲變換角色來測試程式。把自己設想為負責該工作的開發人員再執行測試程式,這樣可確保你沒有什麼遺漏。不要在你自己的開發系統上執行它,因為你的環境設定方式可能與開發人員不同。在虛擬機器中使用普通配置來執行測試程式,並確保它按你打算的那樣精確地把故障表現出來。這可以為你減少幾趟電子郵件上的交涉,避免給別人造成「你這人做事糊里糊塗」的印象。
你為什麼需要建立小型測試程式
你為什麼要投入額外的努力建立乙個小型測試程式?畢竟這是他們的錯誤,讓他們去找到它,解決它。
我的客戶大多是軟體開發人員,所以我從兩個角度來看這個問題。作為一名在過去20年裡數百(也許是數千)個待解決故障的受理者,我不得不把它們提交給許多軟體**商。純粹從我的個人經驗來說,我可以告訴你一點:決定開發人員解決問題快速程度的惟一乙個最具影響力的因素——既不是你是否向提供產品支援的**商付費,或者付了多少費,亦不是你歇斯底里的大怒大喊,也不是你的恭維奉承,更不是他們可以按時響應的信譽——而是:如何清楚扼簡要地演示故障。
所以,下次你需要提交問題報告時,應記得史蒂夫·馬丁(steve martin)的不朽名言:「讓我們做得小些」。(完)
建立小型測試程式排除軟體故障的藝術
建立小型測試程式排除軟體故障的藝術 又來了!無論你如何細心地測試了所用語言 函式庫和架構的每一項效能,無論你如何審慎地為每個元件建立了單元測試,當你最終把它納入應用程式時,得到的是不可理解的故障。嘗試所知的每一種除錯技術 改寫並簡化了最可疑的 段 掐掉或剔除整個元件。這可能會幫助你把故障縮小到特定區...
網路故障排除的4款軟體
網路故障排除的4款軟體,快速解決網路故障問題 一 nmap工具 nmap埠掃瞄神器。它基本上是使用超級功能ping,廣播資料報來識別主機,包括主機的開放埠和作業系統版本。這些資訊被整合到網路地圖和清單中,從而使分析人員能夠確定連線問題,漏洞和流量。埠掃瞄軟體用來掃瞄網上電腦開放的網路連線端。確定哪服...
鍊錶的建立,刪除,插入小型程式。
include include struct list typedef struct list node typedef struct list link link head,p,q 建立鍊錶 void create int n q next null 在x元素前插入資料元素y void inser...