• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            無(wú)我

            讓內(nèi)心永遠(yuǎn)燃燒著偉大的光明的精神之火!
            靈活的思考,嚴(yán)謹(jǐn)?shù)膶?shí)現(xiàn)
            豪邁的氣魄、頑強(qiáng)的意志和周全的思考

            【轉(zhuǎn)】教你如何閱讀別人的代碼

            閱讀別人的代碼作為開發(fā)人員是一件經(jīng)常要做的事情。一個(gè)是學(xué)習(xí)新的編程語(yǔ)言的時(shí)候通過(guò)閱讀別人的代碼是一個(gè)最好的學(xué)習(xí)方法,另外是積累編程經(jīng)驗(yàn)。如果你有機(jī)會(huì)閱讀一些操作系統(tǒng)的代碼會(huì)幫助你理解一些基本的原理。還有就是在你作為一個(gè)質(zhì)量保證人員或一個(gè)小領(lǐng)導(dǎo)的時(shí)候如果你要做白盒測(cè)試的時(shí)候沒(méi)有閱讀代碼的能力是不能完成相應(yīng)的任務(wù)。最后一個(gè)就是如果你中途接手一個(gè)項(xiàng)目的時(shí)候或給一個(gè)項(xiàng)目做售后服務(wù)的時(shí)候是要有閱讀代碼的能力的。
            收集所有可能收集的材料
            閱讀代碼要做的第一件事情是收集所有和項(xiàng)目相關(guān)的資料。比如你要做一個(gè)項(xiàng)目的售后服務(wù),那么你首先要搞明白項(xiàng)目做什么用的,那么調(diào)研文檔、概要設(shè)計(jì)文檔、詳細(xì)設(shè)計(jì)文檔、測(cè)試文檔、使用手冊(cè)都是你要最先搞到手的。如果你是為了學(xué)習(xí)那么盡量收集和你的學(xué)習(xí)有關(guān)的資料,比如你想學(xué)習(xí)linux的文件系統(tǒng)的代碼,那最好要找到linux的使用手冊(cè)、以及文件系統(tǒng)設(shè)計(jì)的方法、數(shù)據(jù)結(jié)構(gòu)的說(shuō)明。(這些資料在書店里都可以找到)。
            材料的種類分為幾種類型
            1.基礎(chǔ)資料。
            比如你閱讀turbo c2的源代碼你要有turbo c2的函數(shù)手冊(cè),使用手冊(cè)等專業(yè)書籍,msc 6.0或者java 的話不但要有函數(shù)手冊(cè),還要有類庫(kù)函數(shù)手冊(cè)。這些資料都是你的基礎(chǔ)資料。另外你要有一些關(guān)于uml的資料可以作為查詢手冊(cè)也是一個(gè)不錯(cuò)的選擇
            2.和程序相關(guān)的專業(yè)資料。
            每一個(gè)程序都是和相關(guān)行業(yè)相關(guān)的。比如我閱讀過(guò)一個(gè)關(guān)于氣象分析方面的代碼,因?yàn)槔镞呌玫搅艘粋€(gè)復(fù)雜的數(shù)據(jù)轉(zhuǎn)換公式,所以不得不把自己的大學(xué)時(shí)候課本找出來(lái)來(lái)復(fù)習(xí)一下高等數(shù)學(xué)的內(nèi)容。如果你想閱讀linux的文件管理的代碼,那么找一本講解linux文件系統(tǒng)的書對(duì)你的幫助會(huì)很大。

            3.相關(guān)項(xiàng)目的文檔資料
            這一部分的資料分為兩種,一個(gè)相關(guān)行業(yè)的資料,比如你要閱讀一個(gè)稅務(wù)系統(tǒng)的代碼那么有一些財(cái)務(wù)/稅務(wù)系統(tǒng)的專業(yè)資料和國(guó)家的相關(guān)的法律、法規(guī)的資料是必不可少的。此外就是關(guān)于這個(gè)項(xiàng)目的需求分析報(bào)告、概要設(shè)計(jì)報(bào)告、詳細(xì)設(shè)計(jì)報(bào)告,使用手冊(cè)、測(cè)試報(bào)告等,盡量多收集對(duì)你以后的代碼閱讀是很重要的知識(shí)準(zhǔn)備了解基礎(chǔ)知識(shí),不要上來(lái)就閱讀代碼,打好基礎(chǔ)可以做到事半功倍的效果留備份,構(gòu)造可運(yùn)行的環(huán)境代碼拿到手之后的第一件事情是先做備份,最好是刻在一個(gè)光盤上,在代碼閱讀的時(shí)候一點(diǎn)不動(dòng)代碼是很困難的一件事情,特別是你要做一些修改性或增強(qiáng)性維護(hù)的時(shí)候。而一旦做修改就可能發(fā)生問(wèn)題,到時(shí)候要恢復(fù)是經(jīng)常發(fā)生的事情,如果你不能很好的使用版本控制軟件那么先留一個(gè)備份是一個(gè)最起碼的要求了。
            在做完備份之后最好給自己構(gòu)造一個(gè)可運(yùn)行的環(huán)境,當(dāng)然可能會(huì)很麻煩,但可運(yùn)行代碼和不可運(yùn)行的代碼閱讀起來(lái)難度會(huì)差很多的。所以多用一點(diǎn)時(shí)間搭建一個(gè)環(huán)境是很值得的,而且我們閱讀代碼主要是為了修改其中的問(wèn)題或做移植操作。不能運(yùn)行的代碼除了可以學(xué)到一些技術(shù)以外,用處有限。找開始的地方做什么事情都要知道從那里開始,讀程序也不例外。在c語(yǔ)言里,首先要找到main()函數(shù),然后逐層去閱讀,其他的程序無(wú)論是vb、delphi都要首先找到程序頭,否則你是很難分析清楚程序的層次關(guān)系。
            分層次閱讀
            在閱讀代碼的時(shí)候不要一頭就扎下去,這樣往往容易只見樹木不見森林,閱讀代碼比較好的方法有一點(diǎn)象二叉樹的廣度優(yōu)先的遍歷。在程序主體一般會(huì)比較簡(jiǎn)單,調(diào)用的函數(shù)會(huì)比較少,根據(jù)函數(shù)的名字以及層次關(guān)系一般可以確定每一個(gè)函數(shù)的大致用途,將你的理解作為注解寫在這些函數(shù)的邊上。當(dāng)然很難一次就將全部注解都寫正確,有時(shí)候甚至可能是你猜測(cè)的結(jié)果,不過(guò)沒(méi)有關(guān)系這些注解在閱讀過(guò)程是不斷修正的,直到你全部理解了代碼為止。一般來(lái)說(shuō)采用逐層閱讀的方法可以是你系統(tǒng)的理解保持在一個(gè)正確的方向上。避免一下子扎入到細(xì)節(jié)的問(wèn)題上。在分層次閱讀的時(shí)候要注意一個(gè)問(wèn)題,就是將系統(tǒng)的函數(shù)和開發(fā)人員編寫代碼區(qū)分開。在c, c++,java ,delphi中都有自己的系統(tǒng)函數(shù),不要去閱讀這些系統(tǒng)函數(shù),除非你要學(xué)習(xí)他們的編程方法,否則只會(huì)浪費(fèi)你的時(shí)間。將系統(tǒng)函數(shù)表示出來(lái),注明它們的作用即可,區(qū)分系統(tǒng)函數(shù)和自編函數(shù)有幾個(gè)方法,一個(gè)是系統(tǒng)函數(shù)的編程風(fēng)格一般會(huì)比較好,而自編的函數(shù)的編程風(fēng)格一般比較會(huì)比較差。從變量名、行之間的縮進(jìn)、注解等方面一般可以分辨出來(lái),另外一個(gè)是象ms c6++會(huì)在你編程的時(shí)候給你生成一大堆文件出來(lái),其中有很多文件是你用不到了,可以根據(jù)文件名來(lái)區(qū)分一下時(shí)候是系統(tǒng)函數(shù),最后如果你實(shí)在確定不了,那就用開發(fā)系統(tǒng)的幫助系統(tǒng)去查一下函數(shù)名,對(duì)一下參數(shù)等來(lái)確定即可。

            寫注解
            寫注解是在閱讀代碼中最重要的一個(gè)步驟,在我們閱讀的源代碼一般來(lái)說(shuō)是我們不熟悉的系統(tǒng),閱讀別人的代碼一般會(huì)有幾個(gè)問(wèn)題,1搞明白別人的編程思想不是一件很容易的事情,即使你知道這段程序的思路的時(shí)候也是一樣。2閱讀代碼的時(shí)候代碼量一般會(huì)比較大,如果不及時(shí)寫注解往往會(huì)造成讀明白了后邊忘了前邊的現(xiàn)象。3閱讀代碼的時(shí)候難免會(huì)出現(xiàn)理解錯(cuò)誤,如果沒(méi)有及時(shí)的寫注解很難及時(shí)的發(fā)現(xiàn)這些錯(cuò)誤。4不寫注解有時(shí)候你發(fā)生你很難確定一個(gè)函數(shù)你時(shí)候閱讀過(guò),它的功能是什么,經(jīng)常會(huì)發(fā)生重復(fù)閱讀、理解的現(xiàn)象。
            好了,說(shuō)一些寫注解的基本方法:1猜測(cè)的去寫,剛開始閱讀一個(gè)代碼的時(shí)候,你很難一下子就確定所有的函數(shù)的功能,不妨采用采用猜測(cè)的方法去寫注解,根據(jù)函數(shù)的名字、位置寫一個(gè)大致的注解,當(dāng)然一般會(huì)有錯(cuò)誤,但你的注解實(shí)際是不但調(diào)整的,直到最后你理解了全部代碼。2按功能去寫,別把注解寫成語(yǔ)法說(shuō)明書,千萬(wàn)別看到fopen就寫打開文件,看到fread就寫讀數(shù)據(jù),這樣的注解一點(diǎn)用處都沒(méi)有,而應(yīng)該寫在此處開發(fā)參數(shù)配置文件(****。dat)讀出系統(tǒng)初始化參數(shù)。。。。。,這樣才是有用的注解。3在寫注解的使用另外要注意的一個(gè)問(wèn)題是分清楚系統(tǒng)自動(dòng)生成的代碼和用戶自己開發(fā)的代碼,一般來(lái)說(shuō)沒(méi)有必要寫系統(tǒng)自動(dòng)生成的代碼。象delphi的代碼,我們往往要自己編寫一些自己的代碼段,還要對(duì)一些系統(tǒng)自動(dòng)生成的代碼段進(jìn)行修改,這些代碼在閱讀過(guò)程是要寫注解的,但有一些沒(méi)有修改過(guò)的自動(dòng)生成的代碼就沒(méi)有必要寫注解了。4在主要代碼段要寫較為詳細(xì)的注解。有一些函數(shù)或類在程序中起關(guān)鍵的作用,那么要寫比較詳細(xì)的注解。這樣對(duì)你理解代碼有很大的幫助。5對(duì)你理解起來(lái)比較困難的地方要寫詳細(xì)的注解,在這些地方往往會(huì)有一些編程的技巧。不理解這些編程技巧對(duì)你以后的理解或移植會(huì)有問(wèn)題。6寫中文注解。如果你的英文足夠的好,不用看這條了,但很多的人英文實(shí)在不怎么樣,那就寫中文注解吧,我們寫注解是為了加快自己的理解速度。中文在大多數(shù)的時(shí)候比英文更適應(yīng)中國(guó)人。與其寫一些誰(shuí)也看不懂的英文注解還不如不寫。
            重復(fù)閱讀
            一次就可以將所有的代碼都閱讀明白的人是沒(méi)有的。至少我還沒(méi)有遇到過(guò)。反復(fù)的去閱讀同一段代碼有助于得代碼的理解。一般來(lái)說(shuō),在第一次閱讀代碼的時(shí)候你可以跳過(guò)很多一時(shí)不明白的代碼段,只寫一些簡(jiǎn)單的注解,在以后的重復(fù)閱讀過(guò)程用,你對(duì)代碼的理解會(huì)比上一次理解的更深刻,這樣你可以修改那些注解錯(cuò)誤的地方和上一次沒(méi)有理解的對(duì)方。一般來(lái)說(shuō),對(duì)代碼閱讀3,4次基本可以理解代碼的含義和作用。
            運(yùn)行并修改代碼
            如果你的代碼是可運(yùn)行的,那么先讓它運(yùn)行起來(lái),用單步跟蹤的方法來(lái)閱讀代碼,會(huì)提高你的代碼速度。代碼通過(guò)看中間變量了解代碼的含義,而且對(duì) 以后的修改會(huì)提供很大的幫助用自己的代碼代替原有代碼,看效果,但在之前要保留源代碼600行的一個(gè)函數(shù),閱讀起來(lái)很困難,編程的人不是一個(gè)好的習(xí)慣。在閱讀這個(gè)代碼的時(shí)候?qū)⒋a進(jìn)行修改,變成了14個(gè)函數(shù)。每一個(gè)大約是40-50 行左右。
            本文來(lái)自:http://hi.baidu.com/925522066/blog/item/2170477b1beb75e52e73b3b6.html

            posted on 2012-05-22 16:16 Tim 閱讀(570) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 資源共享

            <2012年6月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            1234567

            導(dǎo)航

            統(tǒng)計(jì)

            公告

            本博客原創(chuàng)文章,歡迎轉(zhuǎn)載和交流。不過(guò)請(qǐng)注明以下信息:
            作者:TimWu
            郵箱:timfly@yeah.net
            來(lái)源:m.shnenglu.com/Tim
            感謝您對(duì)我的支持!

            留言簿(9)

            隨筆分類(173)

            IT

            Life

            搜索

            積分與排名

            最新隨筆

            最新評(píng)論

            閱讀排行榜

            久久精品成人免费看| 欧美va久久久噜噜噜久久| 99久久精品免费看国产| 91精品国产高清久久久久久io| 99久久99这里只有免费的精品| 天天爽天天爽天天片a久久网| 女同久久| 久久精品国产99久久无毒不卡| 精品人妻伦九区久久AAA片69| 一本综合久久国产二区| 久久久久女人精品毛片| 国产巨作麻豆欧美亚洲综合久久| 久久久久99这里有精品10| 国产精品久久久亚洲| 亚洲精品成人网久久久久久| 久久棈精品久久久久久噜噜| 天堂无码久久综合东京热| 精品人妻久久久久久888| 久久久久久久久久久免费精品 | 麻豆久久久9性大片| 亚洲中文久久精品无码| 久久久久18| 日韩欧美亚洲综合久久影院d3| 一日本道伊人久久综合影| 久久无码av三级| 精品久久久久久亚洲精品| 久久这里只有精品首页| 欧美日韩精品久久久久| 99久久精品免费| 91久久精品国产91性色也| 日日躁夜夜躁狠狠久久AV| 久久中文字幕精品| 亚洲国产成人精品91久久久 | 久久精品国产亚洲精品2020| 久久久国产99久久国产一| 久久久免费观成人影院| 99久久99久久精品国产| 亚洲国产精品热久久| 国产精品成人久久久久久久| 久久精品国产精品亚洲精品| 狠狠色婷婷综合天天久久丁香 |