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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

16、離手。我本人是這樣,今天還是這樣,基本上調(diào)試器不離開我的每臺電腦,我用過的每臺電腦,基本上它們上面都有調(diào)試器,我隨時會遇到問題、分析問題、了解問題。關(guān)鍵是很多東西都是一個熟練的過程,你如果每天用,那自然就會很好。所以說,如果在看這個錄像的軟件同行,如果還沒有重視調(diào)試器,還沒有把調(diào)試器作為一個這種拳不離手,曲不離口的這樣的一個工具,那我希望從今天開始做起。那可以這樣自己去做了,就不怕學(xué)不會,就不怕那總歸是一點一點的,總是在進步。調(diào)試的技術(shù),確實是需要一定時間才能上手的,因為他是需要理解很多底層的東西,理解到全方位的東西。對,這確實是一個很現(xiàn)實的問題,因為我們不一定是每個程序員都面臨著現(xiàn)實的生活中

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

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

溫馨提示

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

評論

0/150

提交評論