久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

程序員調(diào)試能力和相關書籍

 塢絲別垎 2005-10-24
 

在軟件行業(yè)中,,個人覺得每個CoderLeader(那些當了Leader以后就不需要Code的除外)都應該除了具有良好的編碼能力以外,,最為主要的就是Debug的能力要堅實,。千萬不要告訴我Debug工作是TesterQA的事情,首先你要認識到Debug的能力是一個并不簡單的能力,,能幫助你提高你的開發(fā)能力,加快開發(fā)速度,,節(jié)約開發(fā)成本,;其次你更應該知道,你所掌握的Debug的能力和技術并不可能搶去Tester或者QA的飯碗,,他們做的工作更仔細,、全面,更富有創(chuàng)造力,。由于本人數(shù)年來一直使用VC6,,所以下面使用的觀點和相關的描述都是從VC出發(fā)的,肯定有所偏頗,、錯誤之處,,還望各位看官不吝嗇地指出,本人定虛心接受,,共同討論,,共同學習,共同進步,。個人覺得Debug能力包括以下三個個方面:

 

 

1,、良好的編碼習慣,良好的邏輯結(jié)構(gòu)能力,,對Bug的預見能力,。一個成熟的程序員,應該有一個良好的編程習慣,,不僅需要有良好的編碼格式規(guī)范,,更為需要的是對于程序中的邏輯實現(xiàn)時候有一種良好的結(jié)構(gòu)。編程其實就是數(shù)據(jù)和邏輯的集合,,數(shù)據(jù)的處理較為簡單,,或者說是需要的邏輯思維能力比較少,當算法邏輯要在數(shù)據(jù)上實現(xiàn)的時候,,同一種邏輯,,讓不同的程序員來實現(xiàn)可能有各種各樣的不同實現(xiàn)結(jié)構(gòu),從這個角度來說,,這里所說的“良好的編碼習慣”就應該指的是對于邏輯實現(xiàn)時候使用的良好的編程結(jié)構(gòu),,一個好的編程結(jié)構(gòu)應該是能預防錯誤的發(fā)生,,對錯誤的預見和錯誤出現(xiàn)以后的錯誤處理與異常處理的良好安排。也許有人說這不好辦嗎,?每個邏輯判斷的地方添加條件判斷或者異常處理不就行了,?個人覺得不是那么回事,過多的if,、assert,、ASSERT等語句或者是宏,尤其是并列的if語句需要耗費很多判斷,、執(zhí)行的時間,,對于一個子程序(函數(shù)),尤其是調(diào)用頻率比較頻繁的子程序(函數(shù)),,一次浪費了一點點時間,,多次、頻繁地調(diào)用浪費的時候就顯得可觀了,,所以并不是if語句使用的多,,程序出錯的可能性就小,過猶不及,!如果確實需要使用多個if語句進行條件判斷,,最好能使用嵌套的if語句,逐步的縮小判斷范圍,,這樣消耗的時間要比并列的if語句要小,,還要注意的是if語句的條件判斷也不是萬能的;assert,、ASSERT等判斷宏也不是萬能的,,它會造成DebugRelease版本在響應速度和最終的編譯結(jié)果的不同,對于一些關注于性能,、響應速度的程序,,所造成的影響是不可忽視的。不過開發(fā)過程中的調(diào)試階段倒是提倡使用這些宏來發(fā)現(xiàn)算法錯誤和不足,。另外對于異常處理段的使用,,個人覺得能不用異常處理的地方盡量不要使用異常處理,除非當某個錯誤發(fā)生以后導致程序不能繼續(xù)執(zhí)行或者是崩潰的時候才使用異常,,有時候你能使用異常處理,,將發(fā)生錯誤的程序繼續(xù)執(zhí)行下去,但是可能產(chǎn)生的最后結(jié)果并不是客戶所需要或者是期望的,,這樣就容易讓客戶產(chǎn)生質(zhì)疑:你是不是在程序中做了什么手腳,?這也讓你失去了獲得Bug發(fā)生的前提狀況信息,從而失去了一次修改Bug的機會,,所以說有時候當程序發(fā)生錯誤時,,僅僅彈出一個MessageBox提示一些信息,,然后關閉程序,也不失為一個好的辦法,。

 

 

2,、編碼過程中的調(diào)試跟蹤和錯誤定位能力。這個能力主要就是在開發(fā)過程中,,當自己在Build程序,,Run起來以后,竟然發(fā)生了Bug或者是Memory Leak,,這時候就需要你使用各種工具進行調(diào)試跟蹤了,。首先你要相信VC不僅是一個很好的IDE,也是一個很好的Debug工具,,其提供的調(diào)用棧、條件斷點,、數(shù)據(jù)斷點,、反匯編等工具足夠強大,足夠應付平常的Bug,,但是現(xiàn)在很多的程序員,,包括一些自稱為老程序員的也未必能很好的使用這些工具,尤其是條件斷點和數(shù)據(jù)斷點(在下面介紹的第二本書中有詳細的使用說明),。當VC不能滿足你的要求的時候你就需要使用其他的工具了,,例如:SmartCheckerBoundChecker,,Purify,,SoftICE等等了。從這個角度來說,,這里的“調(diào)試跟蹤能力”不僅是程序員對Bug的定位能力,,更為主要的還是對于調(diào)試工具的掌握、使用的能力,。“磨刀不誤砍柴工”,,在開發(fā)之前或者開發(fā)閑暇時,好好的研究一下一些開發(fā),、調(diào)試工具不愧為一種好的提升這種能力的好辦法,。能靜下心來思考一下這些工具的工作原理就更好了,這樣不僅能幫助你在編程的時候預見Bug,,并且對你提高你的編程技巧也會有所幫助,。例如VC中的程序在Debug模式下為什么能發(fā)現(xiàn)數(shù)組訪問越界?這是因為在Debug模式下,,在分配數(shù)組所占用的內(nèi)存時候,,編譯器在數(shù)組內(nèi)存的兩端分別加入了一個字節(jié)的越界判斷內(nèi)存,。這也就是為什么很多的MFC程序在使用自定義消息的時候在Debug模式下沒有錯誤而在Release模式下發(fā)生錯誤的原因了。這里我還想說一說我最喜歡做的兩種調(diào)試方法:當Bug出現(xiàn)的時候,,首先確定Bug的位置,,然后:A、注釋掉可能導致Bug的段落,,在需要取得數(shù)據(jù)值的地方直接提供一個合理的值,,然后看看程序是否能正確運行,如此循環(huán)往復,,逐步縮小范圍,,最終找出Bug所在;B,、如果Bug被定位在一個小的功能,、子程序或者函數(shù)中,可以使用新建一個Test工程,,在一個完全“干凈”的環(huán)境下,,對此功能、子程序或者函數(shù)進行測試,,找出Bug所在,。此節(jié)最后我想說的就是利用你的網(wǎng)絡。當一個Bug出現(xiàn)時,,你也許感到茫然,,也許感到無從下手,這時候你就可以利用的你網(wǎng)絡資源,,使用強大的搜索引擎(比如Google,、Baidu等等),輸入相關的錯誤提示信息,,也許搜索到類似問題的網(wǎng)頁,,也許別人也遇到過同樣或者同類的問題,其他人所提供的答案就是你所需要的,,或者能給你以提示,、啟發(fā)的!

 

 

3,、對事后發(fā)生的Bug能有良好的感知能力,。當一個Bug出現(xiàn)的時候,優(yōu)秀的程序員能根據(jù)Bug發(fā)生的前提和Bug發(fā)生的時間點,、程序中的位置,,很好的感知到Bug可能發(fā)生在哪一個函數(shù)或者哪幾個函數(shù)中,是什么情況導致Bug的出現(xiàn)的,,并且能夠很快的定位錯誤并Fix這個錯誤,。這種能力使用的地方往往是程序已經(jīng)Release了,,已經(jīng)被客戶使用了,在使用的過程中發(fā)生了Bug,,客戶向你“傾訴”時,。那么怎么才能有這樣的能力呢?也許很多的這種能力都是在你不斷的摔倒,,被經(jīng)理PN次以后,,所積累起來的經(jīng)驗,所以說這也是一種痛苦以后所獲得的快樂的能力,,它需要你對自己所做的軟件產(chǎn)品的結(jié)構(gòu),、運行條件、運行原理和相關的涉及部分有很好的理解,、掌握,。有的時候多在網(wǎng)站上看看別人的經(jīng)歷也能有所收獲。

 

 

在以上的三種能力中,,第一種能力主要在于態(tài)度和思維能力,,后兩種則偏向于學習能力和經(jīng)驗的積累;個人覺得第一種最為重要,,所謂的“態(tài)度決定一切”嘛,,呵呵,。

 

 

最后向你推薦幾本關于調(diào)試的書籍:

 

 

1,、《Writing Clean Code——Microsoft Techniques for Developing Bug-free C Programs》(中文版譯作《編程精粹——Microsoft編寫優(yōu)質(zhì)無錯C程序秘訣》或者叫做《零錯誤程序》)——這是一本出版很早的書,現(xiàn)在也許在書店中都看不到了,,但是你要相信此書的作者Steve Maguire(曾是Microsoft資深的程序員,參加了Excel在多個平臺下的開發(fā)和移植工作)所提供的許多防錯,、排錯、測試的準則還是能讓人從中獲益非淺的,。作者將每章的要點都和自己實際工作經(jīng)歷相結(jié)合,,提供了翔實的例子和相關代碼,使用的語言更是幽默風趣,,讓人讀起來不會感覺晦澀難懂,,尤其是每章結(jié)束部分提供的練習和思考題更是貼合實際,發(fā)人深省,。也就是這些原因才使得這本書經(jīng)久不衰,,一直為廣大程序所喜愛,,所廣泛地討論。至今尚未能見到能與之相媲美的書籍,。網(wǎng)上所流傳的林銳博士所著的《高質(zhì)量C++編程指南》和《軟件工程思想》在深度和廣度上與之相比也顯得遜色不少!

 

 

2,、《Debugging Windows Programs》(中文版譯作《Windows程序調(diào)試》,,中國電力出版社出版)——這是一本現(xiàn)在在書店很為流行的一本書。此書使用的語言比較樸實,、易懂,,也許是譯者精心處理的結(jié)果,,敘述習慣比較符合國人口味,。這本書主要包含調(diào)試策略,、調(diào)試工具,、調(diào)試技術三部分,,本書主要介紹的是在VC這個IDE、編譯器下開發(fā)程序所應有的一些技術,??赐甏藭憧隙〞鼮樯钊氲牧私?/SPAN>MFC,了解結(jié)構(gòu)化異常和C++異常的區(qū)別和聯(lián)系,,了解怎么調(diào)試多線程程序,,怎么調(diào)試COM程序,,怎么調(diào)試內(nèi)存,怎么調(diào)試繪圖程序等等,。不管你是自認為有多年的開發(fā)經(jīng)驗的開發(fā)高手,,還是剛剛?cè)腴T的初學者,相信只要你耐心的看完此書,,你一定會和我一樣深深的感嘆一句:原來VC的調(diào)試功能這么強大,!如果早點看到這本書就好了,!

 

 

3、《Debugging Applications》(本人尚未見到中文版)——這本書主要介紹的是VCVB的調(diào)試,其中VC的調(diào)試占到70%-80%左右,。本書也分為三部分:Debug的形式,,強有力的Debug,,Debug的工具和技術。其中有部分內(nèi)容和上一本書所說的相同,。但是這本書還是提供了很多新的東西:介紹了遠程調(diào)試,,提供了一些新的工具使用例子的說明,,介紹了更多的底層的東西,,甚至涉及匯編的相關信息的閱讀和理解,。在閱讀了上一本書以后,,如果你還想提高,,這本書是你不錯的選擇,。

 

 

第一本書主要就是培養(yǎng)大家第一種Debug能力的,,后兩本書是培養(yǎng)大家第二種Debug能力的,對于第三種能力主要還是要靠經(jīng)驗的積累,。

 

 

我現(xiàn)在就看到這三本書是比較好的書,,如果你覺得有其他的比較好的相關書籍或者相關信息請告知我,。在肯定這幾本書對你的開發(fā)過程會有所幫助的前提下,另外我想說的就是即使你看了這幾本書你也不會編寫出完全沒有Bug的程序,,畢竟Bug的種類和發(fā)生的情況實在是有很多的客觀和主觀因素,,不可能完全杜絕。程序設計是一門實踐性很強的工作,,唯有在工作,、實踐過程中總結(jié)教訓,總結(jié)經(jīng)驗才能不斷提高,。祝大家在獲得知識,,積累經(jīng)驗的過程中少走彎路,大踏步的前進?。,。?/SPAN>

 

 

(本文版權(quán)歸作者所有,,如需轉(zhuǎn)載請注明作者和出處,,否則也可以轉(zhuǎn)載,但千萬不要標注為你個人的作品,,否則產(chǎn)生的一切后果請自負,,尤其是被BS、被扔臭雞蛋的時候,,千萬不要怨恨我,,同時作者我還保留BS你的權(quán)利,^_^


    本站是提供個人知識管理的網(wǎng)絡存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多