標籤:debug 調試 單元測試 程式員
毫無疑問,程式員是善于思考問題的一族。一個程式的編寫都是通過:思考、設計、編寫、調試、測試以及運行這些基本的階段。
但大部分程式員都有一個問題就是不太願意測試自己的代碼。他們草草的調式完成以後就認為工作結束,測試那是測試人員的工作。
按照理論上,如果代碼存在問題,那麼測試人員和最終的使用者肯定可以發現這些 BUG ,而等待哪個時候再返回來尋找問題到底錯在什麼地方確實代價不小,其代價有:
1. 影響了程式員自己的聲譽
2. 影響了產品的品質
3. 影響了客戶的信任度
4. 這個時候再 DEBUG 難度增大了許多。
大的不說,就說多自己聲譽的影響吧。如果你的程式總會有這樣那樣的 BUG ,你得到收益會減少,即使你寫了很多代碼。
其實最後一點也很重要;在我們面對一塊代碼的時候,什麼方法都好辦,但如果將這塊代碼防到龐大的系統中之後,簡單的問題也難以被立即找出來。為了自己考慮,節省自己 DEBUG 的時候,我們應該讓我們的程式盡量沒有 BUG 。
那麼怎麼樣才能保證自己的代碼沒有 BUG 來?
程式員必須克服一些自身的致命缺點才能夠從根本上解決這個問題。那麼這個問題是什麼?前面我們已經提到,程式員對自己的代碼都非常寬容,認為那是正確的沒有問題。實際上這種想法比較正常,程式是通過程式員思考和設計之後才寫出來,程式員不會將自己認為不正確的東西寫到代碼裡,而到這個時候都一直假設程式是正確的;但人非聖賢,怎麼可能不犯錯誤來。實際上程式員在對待其他程式員時候的態度就很好,帶著一種挑剔和學習的態度;但一旦對待自己的代碼就很難這麼做;這就是最致命的。程式員也必須對自己的代碼帶著挑剔和學習的態度;這個基礎是假設自己的代碼是錯誤的,然後需要做的是怎麼樣證明自己的代碼是正確的。程式員自身可以在程式產生的每個階段做這些工作:
仔細的設計、編寫代碼時、單元測試(重要)、功能測試。
1.仔細的設計:這個的仔細是說在程式員編寫代碼之前,其必須對代碼的整個結構以及邏輯結構有明確的清晰的瞭解,只有這個時候才可以去寫代碼。這裡沒有談到文檔,但我說到了一定要清晰的思路,但清晰的思路不是每個人都可以在腦袋中直接形成的,很多人都是普通人,沒有辦法在腦袋瓜中把所有問題都想清楚,那麼就記下來,特別對於複雜的邏輯(這個時候畫點時間是值得的,必須保證我們對自己的程式有清晰的輪廓後才能開始動手寫)。
2.編寫代碼:對於沒有把握的代碼,例如:新設計的演算法,最好保證其正確性。可以單獨將這部分測試,這可以讓代碼模組化的同時又保證了代碼的正確性。一句話:少量的代碼保證品質還是比較簡單的。
3.單元測試:單元測試的重要性不在贅敘了,現在也有許多工具可以協助程式員並減少工作量。
4.功能測試:程式員保證自己代碼品質的最後一關;為了做這樣的工作我們可能必須寫一些代碼來測試,甚至是測試工作。使用大量的 CASE 來測試,以及錯誤的 CASE 。這裡和測試人員的測試不同之處在於:仍然讓程式員的注意力放在其自己的代碼範圍內,減小了排錯的難度。
*.如果你通過了以上的步驟都找不出你程式中有任何問題的話,那麼我想你的程式可能需要的不只是REVIEW了,你可能需要拋棄它,按照之前的思路或者換個思路重新來一遍,這個過程想想或許很麻煩,其實當你真的靜下心來去做時,你會發現你得到的不僅是一個沒有bug的程式,更多的是你根本意想不到的收穫。而且這次的代碼寫的遠比第一遍更順利,更快,更健壯。it‘s unbelievable.
前面說道了程式員對待別人代碼的態度是挑剔和學習的態度,所以讓其他程式員來 REVIEW 你的代碼也是檢查程式有沒有邏輯錯誤的很好的辦法。團隊中應該交叉 REVIEW 代碼,這是實踐的經驗。
作為一個好的程式員必須有以上的習慣,以及對待自己代碼象孩子一樣,我們要愛惜我們的代碼,同時也要讓代碼走正確的路。