自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

消滅bug秘籍 如何處理大型軟件中的錯(cuò)誤和異常

譯文
網(wǎng)絡(luò) 網(wǎng)絡(luò)優(yōu)化 網(wǎng)絡(luò)運(yùn)維
不管你做了多少測(cè)試,都不可能達(dá)到零bug的程度。因?yàn)槟悴⒉荒艽y(cè)出用戶的所有使用方式,因此,了解到應(yīng)用程序中的錯(cuò)誤和異常之間的差異,是非常重要的。

【51CTO.com快譯】 "我在測(cè)試中沒(méi)有發(fā)現(xiàn)任何bug,這就意味著沒(méi)有bug……對(duì)嗎?"千萬(wàn)不要這樣認(rèn)為。由于大型軟件的復(fù)雜程度很高,不管你做了多少測(cè)試,都不可能達(dá)到零bug的程度。因?yàn)槟悴⒉荒艽y(cè)出用戶的所有使用方式,因此,了解應(yīng)用程序中錯(cuò)誤和異常之間的差異,是非常重要的。為此,你要選擇正確的方式來(lái)處理這些錯(cuò)誤和異常,以積極的態(tài)度來(lái)確保應(yīng)用的正常運(yùn)行,對(duì)你的開(kāi)發(fā)團(tuán)隊(duì)和最終用戶負(fù)責(zé)。

測(cè)試的本身亦是個(gè)問(wèn)題

即便你的測(cè)試是最徹底的,你依然只是在測(cè)試特定的情況,而且自己的偏好也在測(cè)試過(guò)程中發(fā)揮著作用,使得測(cè)試本身的客觀性有失偏頗。
想象一下,數(shù)以千記的用戶同時(shí)使用你的應(yīng)用程序,同時(shí)也是以數(shù)以千計(jì)的方式來(lái)進(jìn)行操作,這當(dāng)中一定會(huì)遇到你沒(méi)有測(cè)試過(guò)的狀況。

[[192326]]


如何正確處理應(yīng)用程序中的錯(cuò)誤

簡(jiǎn)單的說(shuō),bug會(huì)導(dǎo)致錯(cuò)誤和異常,這些錯(cuò)誤和異常在不同的條件下有不同的意義,這要看你更看中哪一方面的問(wèn)題。最主要的問(wèn)題當(dāng)然是如何更好的處理這些錯(cuò)誤和異常,這樣才不會(huì)帶來(lái)消極的后果。

首先,讓我們來(lái)看一些定義,以及為什么這些差異很重要。

錯(cuò)誤和例外有什么區(qū)別?

一些編程語(yǔ)言對(duì)錯(cuò)誤和異常有自己的定義,但我想定義這種差異。

先說(shuō)錯(cuò)誤。編程錯(cuò)誤,通常無(wú)法繼續(xù)和恢復(fù),需要程序員進(jìn)入程序并且修改代碼來(lái)修復(fù)。有時(shí)候錯(cuò)誤會(huì)轉(zhuǎn)化為異常,以便它們可以在代碼中被處理。錯(cuò)誤可以通過(guò)簡(jiǎn)單的檢查來(lái)避免,如果一些簡(jiǎn)單的檢查不夠,錯(cuò)誤也可以轉(zhuǎn)換為異常來(lái)處理,這樣一來(lái),應(yīng)用程序就可以解決問(wèn)題和保持起碼的運(yùn)行。

再說(shuō)異常。當(dāng)異常發(fā)生時(shí),要考慮到不同編程語(yǔ)言的特性。異常可以被忽略或者捕獲,所以代碼可以恢復(fù)和處理這些情況,而不會(huì)令應(yīng)用程序進(jìn)入"錯(cuò)誤"的狀態(tài)。由于異常可以被忽略,所以應(yīng)用程序在這種時(shí)候依然可以保持運(yùn)行,未處理異常(這是錯(cuò)誤的)也可以登錄,所以,是否處理這些潛在異常就要看開(kāi)發(fā)者了。來(lái)看看一些事例。

事例1:一個(gè)用戶錯(cuò)誤

當(dāng)用戶輸入了錯(cuò)誤的數(shù)據(jù),可能暫時(shí)不需要太去處理,但這仍然可能導(dǎo)致程序出現(xiàn)錯(cuò)誤和不可恢復(fù)的狀態(tài)。毫無(wú)疑問(wèn),這時(shí)代碼應(yīng)該進(jìn)行簡(jiǎn)單的檢查來(lái)阻止錯(cuò)誤狀態(tài)的發(fā)生,你應(yīng)該進(jìn)行前端和后端的驗(yàn)證,拋出一個(gè)異常作為"***的防御"。

事例2:文件打不開(kāi)/下載異常

這是一種特殊情況,不至于破壞你的整個(gè)應(yīng)用程序。你的應(yīng)用程序應(yīng)該能夠處理這個(gè)問(wèn)題。造成下載失敗的原因很多,所以在程序設(shè)定的過(guò)程中,要做充足的預(yù)料和準(zhǔn)備。Ok,以上就是我定義的錯(cuò)誤與異常的區(qū)別了,這是易于遵循的過(guò)程,幫助你更好的處理錯(cuò)誤。
 


重視每一個(gè)異常

"如果我捕獲了每個(gè)異常,我的代碼就是零差錯(cuò)了,對(duì)嗎?"

就像我在前文中提到的,不是所有的錯(cuò)誤都會(huì)導(dǎo)致異常。這個(gè)結(jié)論的主要問(wèn)題是,你不知道什么是錯(cuò)的。你的代碼可能有一些問(wèn)題,通過(guò)捕捉異常而不做任何事情,您將丟失這些信息。不要只是查找異常,然后就一切如常。查找異常的目的是處理它們,并創(chuàng)造更適合運(yùn)行的環(huán)境。

如何對(duì)應(yīng)用程序進(jìn)行代碼自行恢復(fù)

拋出和捕獲異常是讓?xiě)?yīng)用程序自行恢復(fù),并防止它運(yùn)行到錯(cuò)誤狀態(tài)的一個(gè)好方法。如果你知道哪種異??赡鼙粧伋?,***明確被捕獲的各種異常都會(huì)導(dǎo)致哪種應(yīng)用程序的停滯。(我們談了一點(diǎn)關(guān)于軟件構(gòu)架錯(cuò)誤報(bào)告的問(wèn)題)

說(shuō)到具體的異常類型,你可以向用戶搜集反饋信息,這樣你就知道具體導(dǎo)致程序出錯(cuò)的原因,就可以更好的處理這些情況了。

為什么說(shuō)指定捕獲的異常類型很重要

隨著程序的運(yùn)行,某些異常會(huì)損壞數(shù)據(jù)或以非正常的的方式運(yùn)行。這會(huì)導(dǎo)致應(yīng)用程序出錯(cuò)。如果你確切知道發(fā)生了哪些異常,您應(yīng)該知道要遵循哪些步驟來(lái)恢復(fù)?;蛘?,如果你無(wú)法恢復(fù),你應(yīng)該知道如何很好的處理這個(gè)情況。

那么,這能夠恢復(fù)嗎?很多時(shí)候,異常有足夠的信息來(lái)知道出錯(cuò)了,在被捕獲的異常中,有時(shí)可以從錯(cuò)誤狀態(tài)中恢復(fù)。你可以通過(guò)修復(fù)一些數(shù)據(jù),數(shù)據(jù)重新獲取,甚至要求用戶再試一次來(lái)實(shí)現(xiàn)這一點(diǎn)。

你可以捕捉異常,但有時(shí)程序仍然無(wú)法運(yùn)行,因?yàn)槟阋蕾嚨臄?shù)據(jù)已經(jīng)以一種不可恢復(fù)的形式損壞,或者這些異常需要以不同的方式來(lái)解決。

比如,一個(gè)超出范圍的數(shù)組異常,程序如何從中恢復(fù)?這是一個(gè)將錯(cuò)誤轉(zhuǎn)化為異常的示例。你的應(yīng)用程序希望數(shù)據(jù)以某種方式存在,但這并沒(méi)有發(fā)生。雖然恢復(fù)并不總是可能的,但現(xiàn)在有可能不進(jìn)入錯(cuò)誤狀態(tài)和流暢的處理情況。如果在登錄時(shí)出現(xiàn)異常,開(kāi)發(fā)人員可以通過(guò)添加一些簡(jiǎn)單的檢測(cè)來(lái)修復(fù)異常,在數(shù)組被訪問(wèn)或者改變它被訪問(wèn)之前。

如何處理未處理的異常

有些異常是你不希望出現(xiàn)的,比如代碼中的錯(cuò)誤。你可以登錄未被代碼捕獲的那些異常,許多語(yǔ)言都提供這種處理異常的方法。(例如.NET的application_error和javascripts全球的on_errorhandler)。任何未被處理的異常都會(huì)顯示為錯(cuò)誤,而錯(cuò)誤是無(wú)法依靠代碼自行修復(fù)的。所以,記錄下這些錯(cuò)誤,能便于你能找出其中的原因。這樣一來(lái),錯(cuò)誤就不會(huì)被當(dāng)做異常被忽略了。一旦這些異常出現(xiàn),你就可以很快的解決掉它們。

錯(cuò)誤日志

錯(cuò)誤日志可以幫助我們捕獲錯(cuò)誤。有了錯(cuò)誤日志,你可以查看這些記錄的錯(cuò)誤和異常,這也是調(diào)試的關(guān)鍵,同時(shí)你還可以優(yōu)先考慮什么時(shí)間修復(fù)哪些錯(cuò)誤。你不必太依賴用戶發(fā)來(lái)的截圖和描述,更何況不是所有用戶都會(huì)有興趣來(lái)報(bào)錯(cuò)。錯(cuò)誤日志可以讓你的團(tuán)隊(duì)保持積極的行動(dòng)力,一旦錯(cuò)誤被發(fā)現(xiàn),他們能夠及時(shí)聯(lián)系到用戶,使其免受侵害。用戶也會(huì)樂(lè)意接到你們的提醒,這還可以提升你的客戶關(guān)系。當(dāng)然,在用戶使用到之前解決這些問(wèn)題才是最關(guān)鍵的。

舉例來(lái)說(shuō),一個(gè)導(dǎo)致計(jì)費(fèi)有誤的代碼錯(cuò)誤比不能顯示特定詳細(xì)頁(yè)面這樣的錯(cuò)誤嚴(yán)重得多,即使不能顯示詳細(xì)頁(yè)面這樣的錯(cuò)誤更容易出現(xiàn)。當(dāng)你的應(yīng)用程序出現(xiàn)異常時(shí),你想要想辦法去修復(fù)它,但是僅有1%的用戶會(huì)主動(dòng)報(bào)錯(cuò),還有好多你不知道的錯(cuò)誤存在潛在的隱患。

一些解決方案

寫(xiě)些代碼來(lái)保存異常和堆疊追蹤,把它們存在文件里或者通過(guò)電子郵件發(fā)送,可以提示你這些錯(cuò)誤的發(fā)生,這是一種可行的辦法。舉例來(lái)說(shuō),一個(gè)用戶在運(yùn)行中遇到許多異常,一百個(gè)用戶可能遇到一些不太頻繁出現(xiàn)的錯(cuò)誤,哪一個(gè)比較重要呢?在不知道具體錯(cuò)誤情況的條件下,影響更多用戶的錯(cuò)誤更為重要。

使用異常中的堆疊追蹤可以幫助你找出錯(cuò)誤所在的位置,并且你應(yīng)該能夠復(fù)制或讀取代碼以了解出錯(cuò)的原因。有時(shí)候這還不夠,問(wèn)題還需要進(jìn)一步的追蹤。如果發(fā)生這種情況,在登錄之前向異常添加更多信息,包括上下文特定的詳細(xì)信息(如帳戶ID或特定對(duì)象狀態(tài)),這些信息將允許你在本地復(fù)制錯(cuò)誤?,F(xiàn)在你應(yīng)該能發(fā)現(xiàn)所有的錯(cuò)誤和異常,并且記錄未處理的了吧。

根據(jù)你應(yīng)用程序的大小,錯(cuò)誤提示的噪音也是個(gè)問(wèn)題。你可以通過(guò)郵件過(guò)濾做些聰明的事情,比如幫助你把錯(cuò)誤分組,這也只是部分的解決辦法。幾年前我這樣做過(guò),但很快意識(shí)到出現(xiàn)的問(wèn)題太多,而這只是部分的解決辦法。

問(wèn)題在于,我依然不知道哪些錯(cuò)誤對(duì)用戶的影響***。我專注于拋出最多的錯(cuò)誤而不是用戶體驗(yàn)中最麻煩的錯(cuò)誤。正因如此,我從來(lái)沒(méi)有真正摸清過(guò)哪些錯(cuò)誤更為嚴(yán)重。我沒(méi)有可視化的表示正在發(fā)生什么,但必須運(yùn)行手動(dòng)查詢來(lái)計(jì)算出來(lái),這是相當(dāng)耗時(shí)的。

大型軟件中的錯(cuò)誤和異常非常常見(jiàn),正確的處理錯(cuò)誤將作為評(píng)判一個(gè)團(tuán)隊(duì)的依據(jù),也是一個(gè)突破錯(cuò)誤和異常,創(chuàng)造美好運(yùn)行環(huán)境的過(guò)程。好的應(yīng)用程序包含在可能時(shí)從異常中恢復(fù)的代碼。處理和記錄異常對(duì)您的軟件的健康非常重要!

劉妮娜譯
原文鏈接:https://dzone.com/articles/how-to-handle-errors-and-exceptions-in-large-scale

【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】

責(zé)任編輯:劉妮娜 來(lái)源: 51CTO
相關(guān)推薦

2023-03-09 12:21:38

2012-12-12 09:49:41

2022-01-28 08:47:25

軟件系統(tǒng)重構(gòu)

2024-02-21 09:32:18

開(kāi)發(fā)架構(gòu)

2011-02-22 13:38:45

VSFTPD

2024-04-16 12:18:05

編程異常處理錯(cuò)誤返回

2018-11-21 12:27:21

JavaScript 貨幣值區(qū)域

2024-06-28 10:29:18

異常處理Python

2021-02-02 07:52:02

CSS短內(nèi)容長(zhǎng)內(nèi)容

2010-06-22 15:06:23

2019-09-20 08:38:51

Python編程語(yǔ)言Java

2011-04-11 17:10:16

Oracle

2023-02-02 08:56:25

線程池線程submit

2024-08-29 08:54:35

2024-03-26 09:40:53

Linux優(yōu)化

2025-02-10 09:49:00

2017-10-21 16:12:01

Facebook

2022-12-28 08:17:19

異常處理code

2012-11-14 14:07:23

Mysql

2021-03-02 09:12:25

Java異常機(jī)制
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)