張銀奎談軟件測(cè)試和軟件調(diào)試參考模板_第1頁
張銀奎談軟件測(cè)試和軟件調(diào)試參考模板_第2頁
張銀奎談軟件測(cè)試和軟件調(diào)試參考模板_第3頁
張銀奎談軟件測(cè)試和軟件調(diào)試參考模板_第4頁
張銀奎談軟件測(cè)試和軟件調(diào)試參考模板_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、張銀奎談軟件測(cè)試和軟件調(diào)試好的,我更愿意把自己介紹成為一個(gè)老的程序員,其實(shí)我是96年大學(xué)畢業(yè),之后一直做軟件開發(fā)。十幾年下來,一下子從黑頭發(fā)做到現(xiàn)在已經(jīng)白頭發(fā)了。但是這么多年下來,我還是始終很喜歡技術(shù),只是在做不同的技術(shù)角色吧,做過編碼,也做過系統(tǒng)測(cè)試,現(xiàn)在也做架構(gòu)師,不管做那個(gè)具體的腳色,我都是還是很喜歡做技術(shù)的,就說軟件這個(gè)技術(shù)。那其實(shí)今天我在上午的時(shí)候曾經(jīng)提到,我好像是為軟件而生的,確實(shí)是這樣,比如說我感覺軟件對(duì)我太重要了,整個(gè)生活中,或者整個(gè)生命中,這個(gè)軟件都起到了很重要的角色,有的時(shí)候甚至想,離開了軟件,我是不是就還能做什么。那目前其實(shí)主要是做一些架構(gòu)設(shè)計(jì),這樣的工作,也關(guān)注一些軟件

2、新的技術(shù)方向。其實(shí)我的書可以認(rèn)為是我從事軟件第一線奮斗13年,差不多13年后的一個(gè)技術(shù)方面的總結(jié),就是軟件調(diào)試可以說把整個(gè)涉及到我對(duì)技術(shù)的最好的一些總結(jié),放在那本書里面,就是給同行看的,給程序員看的,主要是給開發(fā)者看的。那今天上午這門課呢,可以認(rèn)為是我十幾年的一種思想方法的總結(jié),就說軟件到了這么多年之后,除了技術(shù)之外的東西,其實(shí)還有很多是方法方面的,或者是軟件過程方面的。那今天上午講的可以認(rèn)為是,我對(duì)軟件工程或者軟件方法學(xué)方面的一些感悟,比如說怎么來提高軟件的可靠性,可測(cè)試性,可調(diào)試性。從比較根本的角度來說,提高軟件的質(zhì)量,保證軟件的質(zhì)量,是有關(guān)系的。2 / 15我覺得最欠缺的是我們的重視程度

3、,在國(guó)內(nèi)我們不缺少技術(shù),技術(shù)的天才,尤其我發(fā)現(xiàn)80后的一批新成長(zhǎng)起來的一些軟件工程師,技術(shù)方面非常好,他們甚至對(duì)底層的理解也非常好。但是這批程序員我感覺是兩極分化,一旦說對(duì)底層感興趣的話,他們底層就了解的很深。如果對(duì)底層不感興趣的,基本上只關(guān)心頂層。無論如何我覺得他們的技術(shù)方面都還是很不錯(cuò)的,但是我覺得最缺的是他們對(duì)一種思想上的認(rèn)識(shí),一種重視,對(duì)調(diào)試的重視。其實(shí)越是資深的工程師,或者做了很多年軟件之后,越感覺到調(diào)試的重要;越是比較年輕的一些程序員,可能還沒有來得及深刻的思考調(diào)試的重要性,所以說回答剛才的問題,國(guó)內(nèi)我覺得最缺少的是說一些年輕程序員在能夠在做了一定的技術(shù)之后,對(duì)技術(shù)有一定比較深刻理

4、解之后,回過頭來再思考,自己在軟件方面怎么能夠更上一層樓,怎么從一些方法學(xué)上,或者是從一些根本上來解決一些提高自己的水平,使自己更上一個(gè)臺(tái)階了。因?yàn)椴恢匾暎亲匀痪筒粫?huì)做得太好,所以就說我們國(guó)內(nèi)的軟件,其實(shí)我覺得目前在支持測(cè)試、支持調(diào)試,支持這種持續(xù)改進(jìn)方面,其實(shí)我覺得還是有比較大的差距的,當(dāng)然我不排除我們國(guó)內(nèi)的有些軟件也做得也是挺好的。這個(gè)觀點(diǎn)我想引用一句話,那就是我們?cè)趪?guó)內(nèi)的這個(gè)技術(shù)界,我覺得也有一些前輩。比如引用的這句話是毛德昌老師在寫Linux內(nèi)核源代碼情景分析那本書的,他說過一句話,在那本書里,他說對(duì)軟件的調(diào)試的重視是再重視也不過分的,如何重視也不過分的,我是很同意這一點(diǎn)。我也是覺得

5、我們這些年輕的程序員或者是在技術(shù)角度,覺得自己已經(jīng)有一定技術(shù)的程序員,要開始用調(diào)試技術(shù)來進(jìn)一步的武裝自己,然后通過調(diào)試技術(shù)來持續(xù)地提高自己。這個(gè)話題很長(zhǎng),其實(shí)對(duì)調(diào)試,大家一直是持著一種爭(zhēng)議的態(tài)度,也不排除我們有很資深的,在算法方面,造詣很深的,在軟件領(lǐng)域造詣很深的一些,簡(jiǎn)單說一些牛人,他們?cè)谲浖矫娉删秃艽?,但是老?shí)說他們也有部分人,他們不是太重視調(diào)試,總覺得算法是最重要的,其他很多編碼對(duì)語言的理解是更重要的,對(duì)調(diào)試不是那么重視。但是我覺得這個(gè)是有歷史的背景的,或者是說有這個(gè)大的前提的。其實(shí)這些人,他們?cè)谄甙耸甏砷L(zhǎng)起來的這些程序員,或者七八十年代這些老的程序員,他們當(dāng)時(shí)面對(duì)的這個(gè)軟件環(huán)境和

6、我們今天還是差異非常大的。舉個(gè)不太恰當(dāng)?shù)睦樱蟛拜叜?dāng)初寫WPS的時(shí)候,大部分模塊都是用匯編語言寫的,整個(gè)WPS這個(gè)軟件,也很小,只有不到一張軟盤,就可以裝的下,這樣的范圍。那當(dāng)時(shí)來說,就說軟件很小的情況下,那么軟件的復(fù)雜度比今天來說是低很多的,那這種對(duì)于低復(fù)雜度的這樣的軟件來說,我同意不太重視軟件調(diào)試也可以把這樣的軟件做得比較好。但是今天已經(jīng)不一樣了,今天的我們的軟件動(dòng)輒幾十兆,上百兆,對(duì)于一個(gè)典型的系統(tǒng)都是什么,幾G的這樣的一個(gè)系統(tǒng)。那對(duì)于這樣一個(gè)復(fù)雜的系統(tǒng),我認(rèn)為是用傳統(tǒng)的這種文檔或者理解源代碼已經(jīng)很難理解透了,就是說今天軟件的復(fù)雜度,超出了文檔可以描述的能力。所以這個(gè)時(shí)候,我就覺得

7、軟件調(diào)試變得更加重要,軟件調(diào)試的好處就是說直擊要害,你想理解那里,那里是個(gè)斷點(diǎn),你想理解哪個(gè)模塊,哪個(gè)模塊單獨(dú)看一下它有哪些函數(shù);想深入到某個(gè)函數(shù)內(nèi)部可以做一些追蹤,所以就說你可以直接在一個(gè)真實(shí)的上下文里面直接定位到你關(guān)心的那一部分,這個(gè)是讀文檔和讀源代碼都沒辦法達(dá)到的。因?yàn)樽x源代碼我們可以看源代碼,但是源代碼尤其是今天的典型的源代碼,都是幾百兆的源代碼,那像Windows操作系統(tǒng)可能都是上G的源代碼,至于這樣的源代碼,你如果直接讀源代碼的話,是很難找到你比較關(guān)心的,或者找到一個(gè)函數(shù)。尤其是今天C+寫的代碼,其實(shí)在讀源代碼的難度會(huì)更大,因?yàn)楹軓?fù)雜的這種多態(tài)、繼承這種關(guān)系,你讀的方法和實(shí)際執(zhí)行的

8、這個(gè)方法其實(shí)是有很大的差異的,我的意思是說,只有你在實(shí)際調(diào)試的時(shí)候,你才能直接理解到是一個(gè)真實(shí)的上下文,很具體的上下文。這時(shí)候你可以看函數(shù)之間的調(diào)用關(guān)系,一些類之間的這種相互的協(xié)作的關(guān)系,當(dāng)時(shí)的這種具體的整個(gè)軟件的一個(gè)真實(shí)的運(yùn)行環(huán)境,使你可以理解到一個(gè)很真實(shí)的一個(gè)系統(tǒng),可以說很快速的理解一個(gè)真實(shí)的運(yùn)行情況。所以我就覺得今天的程序員我的建議是說,慢慢的要用調(diào)試來武裝自己,來適應(yīng)這種日益復(fù)雜的軟件環(huán)境。這句話我覺得要稍微糾正一下,如果這樣說出去可能很多人要拍磚。因?yàn)檐浖_發(fā)畢竟是,還是涉及到很多方法,要涉及算法,要實(shí)現(xiàn)算法,最后才是調(diào)試,這個(gè)我更同意國(guó)內(nèi)超級(jí)解霸的作者,梁肇新先生說的那句話,他說好

9、的軟件都是調(diào)試出來的,也就是說這句話和剛才那句話是有相近的意思,但是還是不太一樣。我更同意這個(gè)梁肇新博士說的這句話,就好的軟件都是調(diào)試出來的,意思是說,一個(gè)程序員寫完代碼,你不經(jīng)過調(diào)試,最后代碼就丟出去了,或者以后就發(fā)布到產(chǎn)品里面去了,這事情可能是很冒險(xiǎn)的一件事情。尤其就像我前面講到的,今天的軟件和以前的軟件不一樣了,今天的軟件實(shí)際的運(yùn)行環(huán)境太復(fù)雜,也就是說我們典型的一個(gè)這樣的一個(gè)進(jìn)程,那進(jìn)程內(nèi)其實(shí)在實(shí)際運(yùn)行的時(shí)候和開發(fā)者的這個(gè)環(huán)境是有很大差異的,里面可能有很多第三方的模塊會(huì)插入到這個(gè)進(jìn)程里面。那其實(shí)說會(huì)有很多預(yù)料不到的情況,所以就說,一定要最好是在一個(gè)比較真實(shí)的環(huán)境下,做一些調(diào)試,做一些跟蹤

10、,這時(shí)候你才知道自己的代碼實(shí)際的運(yùn)行是怎么運(yùn)行的,在一個(gè)實(shí)際的情況下指令運(yùn)行。來進(jìn)一步精化自己的設(shè)計(jì),精化自己的這個(gè)算法的實(shí)現(xiàn),然后增強(qiáng)自己算法,加入更多的這種容錯(cuò)的機(jī)制,靈活性。所以說確實(shí)我很同意梁肇新博士說的話,好的軟件是調(diào)試出來的,每個(gè)程序員應(yīng)該認(rèn)真調(diào)試自己的代碼,應(yīng)該成為軟件開發(fā)的一個(gè)重要部分。這個(gè)問題很好。坦率說,測(cè)試和調(diào)試肯定是不一樣的,測(cè)試主要的目標(biāo)還是為了發(fā)現(xiàn)瑕疵,調(diào)試的目標(biāo)是為了定位瑕疵的根源,簡(jiǎn)單來說,二者分別是這樣的。但是他們總的來說目標(biāo)又是一樣的,都是為了提高軟件的質(zhì)量,通常都和軟件瑕疵有關(guān)。當(dāng)然軟件調(diào)試除了對(duì)付瑕疵之外,還有更多的應(yīng)用,那我們暫時(shí)不談。從對(duì)抗瑕疵的角度

11、來說,調(diào)試和測(cè)試是很密切的兩個(gè)過程。調(diào)試呢,主要針對(duì)是從發(fā)現(xiàn)一個(gè)失敗或者發(fā)現(xiàn)一個(gè)癥狀,不正常的癥狀,簡(jiǎn)單的說,凡是跟軟件的規(guī)約、產(chǎn)品規(guī)約不一致的行為都可以認(rèn)為是認(rèn)為是不當(dāng)?shù)?,認(rèn)為是瑕疵,這是測(cè)試工程師把這些不當(dāng)找出來,這些和軟件規(guī)約的差異找出來。調(diào)試的主要目標(biāo)是什么?把找出來的這些問題進(jìn)一步定位,定位到到底是代碼里面哪里有Fault,就是根源哪里有不當(dāng)。所以測(cè)試可能更注重的外在的一個(gè)特征,而調(diào)試是什么?從這個(gè)不當(dāng)?shù)奶卣髡宜母?。那么你的后半部的問題是說測(cè)試工程師是不是要了解調(diào)試,這也是我很想談的一個(gè)話題。比如說一個(gè)測(cè)試的工程師,做到一定程度,那我們應(yīng)該繼續(xù)干什么,繼續(xù)增強(qiáng)什么,其實(shí)測(cè)試我覺得

12、是一個(gè)很有研究或者很有發(fā)展空間的一個(gè)職業(yè)。我們不要覺得說,測(cè)試都是一些誰都可以做,然后做也沒有太大的發(fā)展空間,我不這么認(rèn)為。我覺得測(cè)試是可以做得很資深,很資深。那坦率說呢,我也曾經(jīng)做過這個(gè)系統(tǒng)測(cè)試的工程師,那也做了大約有一年多時(shí)間,這一年多時(shí)間里,其實(shí)我是做了很多調(diào)試的工作。那其實(shí)測(cè)試我前面說了,測(cè)試主要是發(fā)現(xiàn)問題,但發(fā)現(xiàn)問題對(duì)一個(gè)復(fù)雜的系統(tǒng),這個(gè)問題屬于哪個(gè)模塊的,或者屬于哪一方的,這個(gè)最好是做一個(gè)初步的定位的。你比如說,對(duì)一個(gè)系統(tǒng)出來一個(gè)問題,這個(gè)問題可能是某一個(gè)軟件的,也可能是和硬件相關(guān)的,也可能是操作系統(tǒng)本身的,那這個(gè)時(shí)候最好是有個(gè)初步定位。所以說測(cè)試工程師如果能夠懂一點(diǎn)調(diào)試技巧的話,

13、做一個(gè)初步定位,那這就會(huì)大大的加快這個(gè)問題的解決速度。一下子就可以定位到,這是某個(gè)模塊,這是某個(gè)ISV的,這是某個(gè)硬件廠商的,那一下子就可以,大大的縮短這個(gè)問題的解決速度。進(jìn)一步說其實(shí)整個(gè)測(cè)試,你要想今天的測(cè)試也變得越來越復(fù)雜,你如果不了解軟件的底層,很難測(cè)出一些深層的Bug,那調(diào)試恰恰可以幫助我們了解這個(gè)軟件的內(nèi)部機(jī)制,如果你會(huì)一些調(diào)試的技巧,了解一下軟件內(nèi)部機(jī)制,然后再有針對(duì)性的做測(cè)試,那這個(gè)時(shí)候的測(cè)試效率就不一樣了,可以測(cè)試出來一些很深層問題。所以說我始終覺得測(cè)試總是只有開始沒有結(jié)束,沒有說一個(gè)測(cè)試說我測(cè)試好了,我這個(gè)產(chǎn)品就可以說百分之百?zèng)]有瑕疵了,沒有這種情況,所以測(cè)試無止境。測(cè)試工程

14、師達(dá)到一定水平,我覺得要通過調(diào)試來什么來了解軟件的深層,然后使這個(gè)測(cè)試更有針對(duì)性,提高測(cè)試的效率。這是一個(gè)很長(zhǎng)久的問題,我覺得這也不光是國(guó)內(nèi)的一個(gè)問題,我覺得整個(gè)軟件教育都是存在這樣一個(gè)問題。據(jù)我調(diào)查下來,世界范圍內(nèi)還沒有哪所大學(xué)開一門課叫軟件調(diào)試,但是我覺得是很有必要的。因?yàn)檎麄€(gè)教育是滯后于實(shí)踐的,這是一定的。那因?yàn)檎俏仪懊嬲劦揭粋€(gè)大背景,我們以前總的來說,軟件相對(duì)于來說簡(jiǎn)單,整個(gè)大家更注重算法,更注重一些設(shè)計(jì),沒有考慮到軟件復(fù)雜之后調(diào)試的這種方法學(xué)和這些系統(tǒng)的問題。對(duì)于我們整個(gè)大學(xué)教育基本上對(duì)這個(gè)沒有關(guān)注這一塊,所以就導(dǎo)致一個(gè)其實(shí)是國(guó)際范圍內(nèi)的所有軟件工程師調(diào)試一塊都相對(duì)薄弱,包括我的很

15、多外國(guó)同事,其實(shí)他們也很薄弱。其實(shí)很多時(shí)候他們對(duì)于這些程序員來說,他們也是遇到一個(gè)問題無從下手,很多時(shí)候也是用一些很原始的方法,反復(fù)的重現(xiàn),反復(fù)的寫一些Log,這樣來找,效率是比較低的。我覺得要解決這個(gè)問題,一定是一個(gè)逐步放大的過程,那么首先是我們一些比較資深的工程師,他們意識(shí)到這一點(diǎn),來帶動(dòng)身邊的人來逐漸的重視軟件調(diào)試的技術(shù),然后慢慢的我們做更多的培訓(xùn)來提醒大家來逐步的重視這一方面,來逐漸地改變他們。如果分享一些具體的經(jīng)驗(yàn),我覺得就是說,對(duì)于這些年輕的程序員,年輕的工程師,一定要養(yǎng)成調(diào)試的習(xí)慣,就像我們前面說的,好的軟件都是調(diào)試出來的,大家一定要是隨時(shí)調(diào)試,每天只要是寫代碼,就調(diào)試,調(diào)試器不

16、離手。我本人是這樣,今天還是這樣,基本上調(diào)試器不離開我的每臺(tái)電腦,我用過的每臺(tái)電腦,基本上它們上面都有調(diào)試器,我隨時(shí)會(huì)遇到問題、分析問題、了解問題。關(guān)鍵是很多東西都是一個(gè)熟練的過程,你如果每天用,那自然就會(huì)很好。所以說,如果在看這個(gè)錄像的軟件同行,如果還沒有重視調(diào)試器,還沒有把調(diào)試器作為一個(gè)這種拳不離手,曲不離口的這樣的一個(gè)工具,那我希望從今天開始做起。那可以這樣自己去做了,就不怕學(xué)不會(huì),就不怕那總歸是一點(diǎn)一點(diǎn)的,總是在進(jìn)步。調(diào)試的技術(shù),確實(shí)是需要一定時(shí)間才能上手的,因?yàn)樗切枰斫夂芏嗟讓拥臇|西,理解到全方位的東西。對(duì),這確實(shí)是一個(gè)很現(xiàn)實(shí)的問題,因?yàn)槲覀儾灰欢ㄊ敲總€(gè)程序員都面臨著現(xiàn)實(shí)的生活中

17、的種種壓力和種種困難,尤其是剛畢業(yè)的年輕程序員,要學(xué)習(xí)的東西太多,各方面社會(huì)的壓力也很多,時(shí)間很緊張,基本上手頭急需要用的技術(shù)學(xué)起來很還吃力。但是我覺得這是一個(gè)學(xué)習(xí)的方法學(xué)的問題,我是一直在主張,一種從上到下的學(xué)習(xí)方法,我們大多數(shù)工程師,年輕工程師學(xué)習(xí)方法是從上到下,先學(xué)習(xí)頂層,學(xué)這個(gè)語言,那個(gè)語言,學(xué)這個(gè)編程技術(shù),那個(gè)編程技術(shù),但是很難有時(shí)間顧及底層,那我覺得不妨逐漸的換一下思路,換一下角度,我覺得底層的東西相對(duì)來說還是少,或者說底層的東西有更好的穩(wěn)定性。舉個(gè)例子來說,其實(shí)調(diào)試的這些技術(shù)難是難,但是它基本上是很穩(wěn)定,很多基礎(chǔ)基本上是三四年沒有改變過,而且就是那么一點(diǎn)點(diǎn)。但是如果你把這一點(diǎn)點(diǎn)學(xué)

18、了,那其實(shí)你一下子,就是懂得了很多東西,所以從下到上的這種學(xué)習(xí)方法的好處就是說,你學(xué)的東西會(huì)少,學(xué)的東西有更好的生命期。底層的東西,其實(shí)包括操作系統(tǒng),內(nèi)核一層的東西,也基本上是十幾年不變。像這些東西,你是學(xué)的時(shí)候,剛開始是要花點(diǎn)力氣,但是一旦學(xué)會(huì)了,那你的受益就是十幾年,不像頂層的技術(shù),我們頂層的技術(shù)可能它的生命力相對(duì)來說就短一些,一個(gè)技術(shù),比如這個(gè)技術(shù)這幾年很熱,但是過幾年之后可能就是說,它的變化就很大,所以要重新學(xué)的東西比較多。所以我的建議就是說,大家還是要先把頂層的,手頭急需的還是要學(xué),否則會(huì)影響具體的工作,那你一旦有空,那你就是說最好是再從底層學(xué)一學(xué),那從下而上,一旦把整個(gè)打通,就像你前面提到的,軟件調(diào)試涉及到CPU、操作系統(tǒng)、編譯器,最后到軟件本身,一旦整個(gè)這個(gè)環(huán)節(jié),整個(gè)這個(gè)Stack打通了,以后就會(huì)變得得心應(yīng)手??烧{(diào)試性這個(gè)是從芯片設(shè)計(jì)領(lǐng)域引用過來的一個(gè)概念,或者一種思想方法,其實(shí)它都是針對(duì)這種高復(fù)雜度,但是低可見度的這樣的一些過程,像芯片,它很典型的,它高復(fù)雜度、低可見度。正是因?yàn)樗懈邚?fù)雜度,低可見度,所以我們必須內(nèi)置一些機(jī)制來支持測(cè)試,支

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論