天天看點

《Effective Debugging:軟體和系統調試的66個有效方法》一第8條:把工作焦點放在最為重要的問題上

本節書摘來自華章出版社《effective debugging:軟體和系統調試的66個有效方法》一書中的第1章,第1.8節,作[希]迪歐米迪斯·斯賓奈裡斯(diomidis spinellis),更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視

許多大型軟體系統都含有數量極其衆多的bug(有一些是已知的bug,還有一些則尚未發現)。要想高效地進行調試,就必須把應該受到關注的bug與可以忽略的bug明智地區分開。這樣做不是為了單純地縮減事務清單中的未決事務,而是為了幫助我們開發出穩定、易用、可維護而且效率較高的軟體,畢竟這才是公司給我們支付薪水的原因。為此,我們要通過事務追蹤系統來設定各項事務的優先級(參見第1條),進而使自己能夠把工作重心彙聚在優先級較高的那些事務上,并把優先級較低的事務忽略掉。下面給出一些與排定事務優先級有關的建議。

下列幾類問題應該賦予較高的優先級。

資料丢失:資料之是以會丢失,可能是因為本身受到了損壞,也可能因為程式在可用性方面遇到了問題。使用者把他們的資料托付給你的軟體,你就應該維系這份信任感。如果資料丢失,那你就違背了他們的信任,要想再重新獲得其信任,是很困難的。

資料安全:這種問題可能會影響軟體資料的保密性與完整性,也可能會影響軟體所在系統的完整性,或軟體所提供服務的可用性。此類問題通常是由于惡意人士對軟體進行攻擊而引發的,它會給公司帶來巨大的資金和名譽損失,此外,還會引來監管機構的注意,或招緻勒索。是以,安全問題必須盡快解決。

服務的可用性降低:如果軟體是用來提供某種服務的,那麼當這項服務無法使用時,公司就會遭受資金損失(有時甚至是以百萬元為機關的損失),此外,還會令公司失去信譽、迫使經理在半夜憤怒地打電話給你,而且也會使服務人員忙得不可開交。這些都是應該盡量避免的事情。

使用安全:此類問題可能導緻使用者傷亡,使财産丢失或受損,或令環境遭到破壞。前面那幾類問題所造成的後果,同樣有可能出現在這一類問題上面。如果軟體可能會在這一方面發生故障,那就應該用一種比這份清單更加嚴謹的流程來指導你的行動。

程式崩潰或當機:這可能導緻資料丢失或服務下線,而且此類問題可能與底層的安全問題有關。在程式崩潰或失去響應之後,我們通常可以通過事後分析技術(參見第35條)來對其進行調試。這種問題自然不應該賦予較低的優先級。

代碼品質(code hygiene):我們要把編譯器所給出的警告資訊和斷言失敗資訊,以及未處理的異常與記憶體洩漏等問題清理幹淨。總之,由于各種低品質的代碼會滋生并掩藏一些嚴重的bug,是以,我們不能允許這類問題繼續存在并積累下去(參見第20條)。

下面幾類問題的優先級可以設定得低一些。這并不是說它們本身不重要或不值得關注,而是說為了解決更為緊迫的問題,我們可以把這些問題先放在一邊。

對遺留事物的支援:能夠支援過時的硬體、api或檔案格式,這固然是好的,然而從商業角度來看,這樣做不會有太大意義,因為使用這些東西的人已經越來越少了。

向後相容:這一類問題的優先級沒有較為明确的結論。如果你在軟體的發展過程中,總是把原來的使用者抛開不管,那就會失去顧客對你的信賴。有些公司,如nikon,通過對向後相容性的維護而獲得了良好的口碑,他們的新産品能夠與很多代之前的舊産品相相容,例如,目前的高端nikon相機,依然那可以使用20世紀70年代的nikkor(尼克爾)鏡頭。與之相對,某些成功的軟體公司以其決絕的做法而知名,他們毫不猶豫地放棄對舊軟體與舊服務的支援。有時我們确實應該停止對舊特性的支援,以便把精力更好地放在未來的發展上面。

美觀問題:這些問題很難處理得十分恰當,而且經常容易遭人忽視。例如,就算彈出式幫助資訊沒有完整地顯示出來,客戶也不太可能因為這個而抛棄你的産品,可是當你要修複這個小問題的時候,卻會發現它處理起來相當麻煩,因為你得根據螢幕的分辨率設定來動态地調整幫助面闆的尺寸。

已經有了臨時解決方案的問題:有些bug調試起來比較複雜,為了避免在這些問題上面消耗時間,我們可以先給使用者提供一種臨時的解決方案,以便暫時繞過這些問題。例如,筆者在打開自己家的電視之後,想試着用電視的遙控器去操作媒體播放機,然而卻看到了一條提示資訊:“請再試一次”。我懷疑這個小問題修複起來相當麻煩,于是廠商就先給出了這個權宜的辦法。

很少有人會用到的特性:當軟體中的某一個較為奇怪,而且很少有人用到的特性出了問題時,我們與其花時間去解決這個問題,還不如直接把該特性删掉(并把由此引發的一些小狀況處理好)。通過收集軟體的使用資料,我們可以更為容易地确定出這些罕用的特性,并據此做出決策。

請注意,如果你決定忽略某個優先級比較低的問題,那就應該把這個态度明确地表達出來。你可以在事務追蹤系統裡面表明自己“不打算解決”該問題,并将其關閉。這樣做可以把自己的決策記錄下來,使得其他人以後不會再提出類似的問題,進而減輕管理方面的工作量。

要點

并不是所有的問題都值得解決。

修複優先級較低的問題可能會耽誤你的時間,使你無法拿出更多時間去處理那些更為緊迫的事務。

繼續閱讀