軟件測(cè)試技術(shù)基礎(chǔ)(第二章程序結(jié)構(gòu)靜態(tài)分析)_第1頁
軟件測(cè)試技術(shù)基礎(chǔ)(第二章程序結(jié)構(gòu)靜態(tài)分析)_第2頁
軟件測(cè)試技術(shù)基礎(chǔ)(第二章程序結(jié)構(gòu)靜態(tài)分析)_第3頁
軟件測(cè)試技術(shù)基礎(chǔ)(第二章程序結(jié)構(gòu)靜態(tài)分析)_第4頁
軟件測(cè)試技術(shù)基礎(chǔ)(第二章程序結(jié)構(gòu)靜態(tài)分析)_第5頁
已閱讀5頁,還剩31頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

軟件測(cè)試技術(shù)基礎(chǔ)

(FoundationofSoftwareTestingTechnology)

第二章程序結(jié)構(gòu)靜態(tài)分析

主講教師:實(shí)踐輔導(dǎo)教師:主要內(nèi)容代碼審查代碼走查桌面檢查同行評(píng)審控制流分析數(shù)據(jù)流分析信息流分析2今天,不是每一個(gè)測(cè)試人員都閱讀代碼,但是研究代碼確是一種測(cè)試方法,被廣泛接受。以下因素影響是否采用閱讀代碼作為測(cè)試工作的一部分程序的大小和復(fù)雜性開發(fā)團(tuán)隊(duì)的大小開發(fā)期限團(tuán)隊(duì)文化和背景3人工測(cè)試人工測(cè)試可以在程序代碼編寫完,基于計(jì)算機(jī)的測(cè)試沒有開始以前進(jìn)行。兩種主要的人工測(cè)試方法是:代碼審查(codeinspections)走查(walkthrough)人工測(cè)試技術(shù)的重要性錯(cuò)誤發(fā)現(xiàn)得越早,改正錯(cuò)誤的成本越低,正確改正錯(cuò)誤的可能性也越大;程序員在開始基于計(jì)算機(jī)的測(cè)試時(shí)似乎要經(jīng)歷一個(gè)心理上的改變。壓力會(huì)急劇增長(zhǎng),且要“盡可能快地修正這個(gè)缺陷”。由于這些,所以,程序員在改正某個(gè)基于計(jì)算機(jī)測(cè)試發(fā)現(xiàn)的錯(cuò)誤時(shí)所犯的失誤,可能要比改正早期發(fā)現(xiàn)的問題時(shí)所犯的失誤會(huì)更多一些的。4代碼審查(codeinspections)人員一個(gè)代碼檢查小組通常是由四人組成,一人發(fā)揮著協(xié)調(diào)作用一人是該程序的編碼人員一人是其他成員通常是程序的設(shè)計(jì)人員一人是測(cè)試專家。5代碼審查所謂的代碼審查,其實(shí)就是以組為單位閱讀代碼,是一系列規(guī)程和錯(cuò)誤檢查技術(shù)的集合。該過程通常將注意力集中在發(fā)現(xiàn)錯(cuò)誤上,而不是糾正錯(cuò)誤。內(nèi)容檢查代碼和設(shè)計(jì)的一致性檢查代碼對(duì)標(biāo)準(zhǔn)的遵循、可讀性檢查代碼的邏輯表達(dá)的正確性檢查代碼結(jié)構(gòu)的合理性6代碼審查步驟:第一步:小組成員提前閱讀設(shè)計(jì)規(guī)格書、程序文本等相關(guān)文檔第二步:召開程序?qū)彶闀?huì),開發(fā)人員讀程序,審查小組討論、發(fā)現(xiàn)、解決問題第三步:跟蹤與報(bào)告7代碼審查在代碼審查過程中,一個(gè)重要的部分是需要對(duì)照一份編程錯(cuò)誤列表,來分析程序是否存在常見的錯(cuò)誤。錯(cuò)誤列表

錯(cuò)誤列表在很大程度上是獨(dú)立于編程語言的可以把自己使用的編程語言中特有的錯(cuò)誤,以及代碼檢查發(fā)現(xiàn)的錯(cuò)誤補(bǔ)充到這份錯(cuò)誤列表中去8代碼審查錯(cuò)誤列表的總的構(gòu)架。該列表共分為八個(gè)部分:數(shù)據(jù)引用錯(cuò)誤數(shù)據(jù)聲明錯(cuò)誤運(yùn)算錯(cuò)誤比較錯(cuò)誤控制流程錯(cuò)誤輸入/輸出錯(cuò)誤接口錯(cuò)誤其他檢查。

每一部分中細(xì)分了很多項(xiàng)9代碼審查在代碼審查的時(shí)間和地點(diǎn)上的選擇上,應(yīng)避免所有的外部干擾;

代碼審查會(huì)議的理想時(shí)間應(yīng)在90-120分鐘之內(nèi);

大多數(shù)的代碼審查都是按每小時(shí)大約閱讀150行代碼的速度進(jìn)行;

對(duì)大型軟件的審查應(yīng)安排多個(gè)代碼檢查會(huì)議同時(shí)進(jìn)行,每個(gè)代碼審查會(huì)議處理一個(gè)或幾個(gè)模塊或子程序。10代碼審查代碼審查附帶的幾個(gè)有益的作用程序員通常會(huì)得到編程風(fēng)格、算法選擇及編譯技術(shù)等方面的反饋信息;其他參與者也可以通過接觸其他程序員的錯(cuò)誤和編程風(fēng)格而同樣受益匪淺;代碼檢查還是早期發(fā)現(xiàn)程序中最易出錯(cuò)部分的方法之一,有助于在基于計(jì)算機(jī)的測(cè)試過程中將更多的注意力集中在這些地方。11代碼走查(walkthrough)人員三到四人最好一人是這段代碼的作者(可做會(huì)議主持)一個(gè)類似于檢查中的仲裁人一個(gè)人擔(dān)當(dāng)秘書的角色(記錄所有發(fā)現(xiàn)的錯(cuò)誤)一個(gè)人擔(dān)當(dāng)測(cè)試人員的角色最佳人員組合一位極富經(jīng)驗(yàn)的程序員;一位程序設(shè)計(jì)語言專家;一位程序員新手(可以給出新穎、不帶偏見的觀點(diǎn));最終將維護(hù)程序的人員;一位來自其他不同項(xiàng)目的人員;一位來自該軟件編程小組的程序員。12代碼走查代碼走查就是對(duì)軟件文檔進(jìn)行書面檢查。它通過人工模擬執(zhí)行源程序的過程,檢查軟件設(shè)計(jì)的正確性。人工模擬也像計(jì)算機(jī)執(zhí)行那樣,可以仔細(xì)推敲、校驗(yàn)和核實(shí)每一步的執(zhí)行結(jié)果,進(jìn)而確定其執(zhí)行邏輯、控制模型、算法和使用參數(shù)與數(shù)據(jù)的正確性。步驟第一步:小組成員提前閱讀設(shè)計(jì)規(guī)格書、程序文本等相關(guān)文檔第二步:利用測(cè)試用例,使程序邏輯運(yùn)行,記錄程序的蹤跡,發(fā)現(xiàn)、討論、解決問題

第三步:跟蹤與報(bào)告

13代碼走查缺點(diǎn)功能性測(cè)試很難實(shí)現(xiàn)有太多的條件有太多的測(cè)試用例14代碼審查和代碼走查的共同之處方法:組成一個(gè)小組來閱讀或直觀檢查特定的程序;并在“頭腦風(fēng)暴會(huì)”上要形成統(tǒng)一的目標(biāo):找出錯(cuò)誤,但不必找出改正錯(cuò)誤的方法。換句話說,是測(cè)試,而不是調(diào)試。該組開發(fā)人員(三至四人為最佳)是對(duì)代碼進(jìn)行審核,其中參加者當(dāng)中只有一人是程序編寫者;也可以說它是對(duì)過去桌面檢查過程的改進(jìn)。優(yōu)點(diǎn):一旦發(fā)現(xiàn)錯(cuò)誤,就可以在代碼中對(duì)其進(jìn)行精確定位,這就降低了調(diào)試的成本;還通??梢园l(fā)現(xiàn)成批的錯(cuò)誤,這樣就可以一同得到修正,這也優(yōu)于機(jī)器測(cè)試,因?yàn)楹笳咧荒鼙┞冻鲥e(cuò)誤的某個(gè)表癥。效果:通常是能夠有效地查找出30%-70%的邏輯設(shè)計(jì)和編碼錯(cuò)誤,但不能有效地查找出高層次的設(shè)計(jì)錯(cuò)誤。地位:是與計(jì)算機(jī)的測(cè)試互補(bǔ)的,缺少其中任何一種錯(cuò)誤檢查的效率都會(huì)降低。15代碼審查和代碼走查的共同之處該處的錯(cuò)誤發(fā)現(xiàn)率,并不是說所有錯(cuò)誤中多達(dá)70%可能會(huì)被找出來,而是講這些方法在測(cè)試過程結(jié)束時(shí),可以有效地查找出多達(dá)70%的已知錯(cuò)誤。應(yīng)始終記住的是:程序中的錯(cuò)誤總數(shù)始終是未知的。否則就會(huì)浪費(fèi)大量的精力跟人力,也會(huì)在經(jīng)濟(jì)效益上或多或少有一些損失的就經(jīng)驗(yàn)而言,修改一個(gè)現(xiàn)存的程序比編寫一個(gè)新程序更容易產(chǎn)生錯(cuò)誤,這依據(jù)于以每寫一行代碼的錯(cuò)誤數(shù)量來計(jì)的。16桌面檢查桌面檢查可視為由單人進(jìn)行的代碼檢查或代碼走查;并由一個(gè)人閱讀程序,對(duì)照錯(cuò)誤列表檢查程序,對(duì)程序推演測(cè)試數(shù)據(jù)。由此,我覺得桌面檢查可以說是上述兩種方法的一個(gè)內(nèi)核或者說是雛形吧。所以也可知其效率是相當(dāng)?shù)偷摹?/p>

17同行評(píng)分需指明:其該方法與測(cè)試并無關(guān)系,因?yàn)槠淠繕?biāo)并不是為了發(fā)現(xiàn)錯(cuò)誤的,只是它與代碼閱讀的思想有一定的關(guān)聯(lián)而已。定義上:同行評(píng)分是一種依據(jù)程序整體質(zhì)量、可維護(hù)性、可擴(kuò)展性、易用性和清晰性對(duì)匿名程序進(jìn)行評(píng)價(jià)的技術(shù)。不難看出,該技術(shù)的目的是為程序員提供自我評(píng)價(jià)的手段。其小組成員的構(gòu)成為:一位管理員,負(fù)責(zé)擔(dān)任該評(píng)分過程的管理工作;6-20名參與者,并要保持匿名性,且要具備相似的背景。評(píng)分的資料:由參與者自己挑出兩個(gè)由自己編寫的程序以供評(píng)審,其中一個(gè)應(yīng)是自認(rèn)為能代表其自身能力的最好作品;另一個(gè)是自認(rèn)為質(zhì)量較差的作品。18代碼走查19控制流分析

非結(jié)構(gòu)化程序會(huì)給測(cè)試、排錯(cuò)、和程序的維護(hù)帶來許多困難要求寫出的程序結(jié)構(gòu)良好檢查程序的控制結(jié)構(gòu)成為十分有意義的工作20程序流程圖

132521控制流圖12435abcdef22控制流圖程序的控制流圖:符號(hào)○為控制流圖的一個(gè)結(jié)點(diǎn),表示一個(gè)或多個(gè)無分支的PDL語句或源程序語句。箭頭為邊,表示控制流的方向。23控制流圖節(jié)點(diǎn)標(biāo)有編號(hào)的圓圈

程序流程圖中矩形框所表示的處理

菱形表示的兩個(gè)甚至多個(gè)出口判斷

多條流線相交的匯合點(diǎn)

24控制流圖控制流線或弧箭頭

與程序流程圖中的流線一致,表明了控制的順序

控制流線通常標(biāo)有名字25控制流圖矩陣

acbdef123451234526控制流圖矩陣便于機(jī)器表示和處理控制流圖

連接弧的節(jié)點(diǎn)的號(hào)碼決定了矩陣中元素的位置注意控制流的方向兩個(gè)節(jié)點(diǎn)沒有弧線,所對(duì)應(yīng)的位置也就沒有元素27程序結(jié)構(gòu)的基本要求寫出的程序不應(yīng)包含:轉(zhuǎn)向并不存在的標(biāo)號(hào)

沒有用的語句標(biāo)號(hào)

從程序入口進(jìn)入后無法達(dá)到的語句

不能達(dá)到停機(jī)語句的語句

28數(shù)據(jù)流分析

查找引用未定義變量等程序錯(cuò)誤

查找對(duì)以前未曾使用的變量再次賦值等數(shù)據(jù)流異常的情況

常見的錯(cuò)誤表現(xiàn)形式錯(cuò)拼名字名字混淆語句丟失29數(shù)據(jù)流如果程序中某一語句執(zhí)行時(shí)能改變某程序變量V的值,則稱V被該語句定義如果一語句的執(zhí)行引用了內(nèi)存中變量V的值,則稱V被該語句引用例如:X=Y+Z;ifY>Zthenreturn;30控制流圖與數(shù)據(jù)流表1234106758911節(jié)點(diǎn)被定義變量被引用變量1X,Y,Z2XW,X3X,Y4Y,Z5YV,Y6ZV,Z7VX8WY9ZV10ZZ11Z31信息流分析通過對(duì)輸入數(shù)據(jù)、輸出數(shù)據(jù)、語句之間的關(guān)系的分析來檢查程序錯(cuò)誤整除算法例子輸入:in_m是被除數(shù),in_n是除數(shù)輸出:out_q是商,out_r是余數(shù)32整除算法例子out_q=0;out_r=in_m;While(out_r>=in_n){out_q++;out_r=out_r–in_n;}33信息流關(guān)系圖√√√√√√√in_min

溫馨提示

  • 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)論