測(cè)試開發(fā)--程序設(shè)計(jì)之?dāng)嘌院腿蒎e(cuò)篇

總結(jié)測(cè)試開發(fā)中常見的程序設(shè)計(jì)問題喊暖,這篇的主要內(nèi)容是關(guān)于斷言的使用惫企。如果有任何有疑問,歡迎指出和討論哄啄,感謝雅任。

一、斷言和容錯(cuò)設(shè)計(jì)的使用

1咨跌、可以用static_assert執(zhí)行編譯時(shí)的斷言檢查

????如:static_assert(sizeof(char *) == 8, "不是64位模式")


2沪么、避免用斷言去檢查程序錯(cuò)誤:

????1)外部不可靠的數(shù)據(jù)應(yīng)該做嚴(yán)格檢查才能放到系統(tǒng)內(nèi)部锌半,這個(gè)時(shí)候它是守衛(wèi)禽车,提前檢驗(yàn)和過濾不合理的數(shù)據(jù)和參數(shù),應(yīng)該使用錯(cuò)誤檢查處理代碼(如KGLOG_COM_PROCESS_ERROR等)刊殉,

????而不是用斷言來做檢查

????*外部不可靠的數(shù)據(jù):是指如不合理的用戶輸入殉摔、或其他模塊傳入到該模塊的消息或數(shù)據(jù),

????有點(diǎn)像是對(duì)項(xiàng)目組外的員工记焊,要?jiǎng)佑庙?xiàng)目組的資源逸月,是需要經(jīng)過審核的

????2)系統(tǒng)內(nèi)部的交互數(shù)據(jù)(如程序內(nèi)部的調(diào)用),可以用斷言來檢查意想不到的錯(cuò)誤遍膜,或者程序內(nèi)部的假設(shè)碗硬。(即檢查它的潛規(guī)則、邏輯邊界瓢颅、隱形假定恩尾、輸出或內(nèi)部狀態(tài)是否如預(yù)期)

????*因?yàn)橄到y(tǒng)內(nèi)的調(diào)用者一般情況下是有義務(wù)負(fù)責(zé)傳遞給自己內(nèi)部的數(shù)據(jù)是合理正常的數(shù)據(jù)

????就像項(xiàng)目內(nèi)的員工,對(duì)于使用項(xiàng)目組的資源的門檻就會(huì)低很多

????*可理解為assert和出錯(cuò)處理是對(duì)所寫程序建立不同的信用級(jí)別挽懦,也方便在Release版可以性能更好的運(yùn)行程序

????3)推薦針對(duì)public的函數(shù)或接口的入口處對(duì)參數(shù)做嚴(yán)格的錯(cuò)誤檢查翰意;對(duì)于Private的函數(shù)或者只有這個(gè)模塊能看到的,可以用assert


3信柿、容錯(cuò)性程序設(shè)計(jì)常常要解決的是:現(xiàn)實(shí)中冀偶,防止用戶數(shù)據(jù)丟失或程序崩潰而采取的措施。只是除此之外渔嚷,也許可以適度考慮:

????*我們是否希望在進(jìn)行容錯(cuò)性程序設(shè)計(jì)時(shí)进鸠,錯(cuò)誤要不要被隱瞞?

????*實(shí)現(xiàn)程序時(shí)圃伶,如果有錯(cuò)誤(特別是意料之外的錯(cuò)誤)發(fā)生時(shí),

????1)我們有線索嗎?能得到什么窒朋?怎樣更好的定位和處理它搀罢?

????2)需要報(bào)警方案嗎?

????3)有預(yù)案嗎侥猩?

????4)可能的影響大嗎榔至?


4、避免斷言中使用改變環(huán)境的語句:

????如不正確的代碼:

????int Test(int i)

????{

????????assert(i++); ?//debug版和release版的i值就會(huì)不一樣

????????return i;

????}

????int main()

????{

????????int i = 1;

????????int nValue = Test(i);

????????printf("%d\n", ?nValue);

????????return 0;

????}

????合理的形式:

????int Test(inti)

????{

????????assert(i);

????????return++i;

????}

????注:與改變環(huán)境的語句類似的行為是宏定義欺劳。

????????????*請(qǐng)盡量不要在assert中調(diào)用宏唧取,以防止宏的副作用



以謙卑的心感受,以感恩的心生活

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末划提,一起剝皮案震驚了整個(gè)濱河市枫弟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鹏往,老刑警劉巖淡诗,帶你破解...
    沈念sama閱讀 222,378評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異伊履,居然都是意外死亡韩容,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門唐瀑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來群凶,“玉大人,你說我怎么就攤上這事哄辣∏肷遥” “怎么了?”我有些...
    開封第一講書人閱讀 168,983評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵柔滔,是天一觀的道長溢陪。 經(jīng)常有香客問我,道長睛廊,這世上最難降的妖魔是什么形真? 我笑而不...
    開封第一講書人閱讀 59,938評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮超全,結(jié)果婚禮上咆霜,老公的妹妹穿的比我還像新娘。我一直安慰自己嘶朱,他們只是感情好蛾坯,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著疏遏,像睡著了一般脉课。 火紅的嫁衣襯著肌膚如雪救军。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,549評(píng)論 1 312
  • 那天倘零,我揣著相機(jī)與錄音唱遭,去河邊找鬼。 笑死呈驶,一個(gè)胖子當(dāng)著我的面吹牛拷泽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播袖瞻,決...
    沈念sama閱讀 41,063評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼司致,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了聋迎?” 一聲冷哼從身側(cè)響起脂矫,我...
    開封第一講書人閱讀 39,991評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎砌庄,沒想到半個(gè)月后羹唠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,522評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡娄昆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評(píng)論 3 342
  • 正文 我和宋清朗相戀三年佩微,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片萌焰。...
    茶點(diǎn)故事閱讀 40,742評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡哺眯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出扒俯,到底是詐尸還是另有隱情奶卓,我是刑警寧澤,帶...
    沈念sama閱讀 36,413評(píng)論 5 351
  • 正文 年R本政府宣布撼玄,位于F島的核電站夺姑,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏掌猛。R本人自食惡果不足惜盏浙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望荔茬。 院中可真熱鬧废膘,春花似錦、人聲如沸慕蔚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽孔飒。三九已至灌闺,卻和暖如春艰争,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背桂对。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評(píng)論 1 274
  • 我被黑心中介騙來泰國打工园细, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人接校。 一個(gè)月前我還...
    沈念sama閱讀 49,159評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像狮崩,于是被迫代替她去往敵國和親蛛勉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理睦柴,服務(wù)發(fā)現(xiàn)诽凌,斷路器,智...
    卡卡羅2017閱讀 134,714評(píng)論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法坦敌,類相關(guān)的語法侣诵,內(nèi)部類的語法,繼承相關(guān)的語法狱窘,異常的語法杜顺,線程的語...
    子非魚_t_閱讀 31,664評(píng)論 18 399
  • 題目類型 a.C++與C差異(1-18) 1.C和C++中struct有什么區(qū)別? C沒有Protection行為...
    阿面a閱讀 7,675評(píng)論 0 10
  • 小編費(fèi)力收集:給你想要的面試集合 1.C++或Java中的異常處理機(jī)制的簡單原理和應(yīng)用蘸炸。 當(dāng)JAVA程序違反了JA...
    八爺君閱讀 4,596評(píng)論 1 114
  • 播放系統(tǒng)聲音SystemSoundID mysound;NSString *sndpath = [[NSBundl...
    winnisz閱讀 365評(píng)論 0 0