免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
可信計算V軟件測試
可信計算V軟件測試
2006年06月21日
 

 

前進中的可信計算(Ⅴ):

軟件測試

閔應(yīng)驊

 

軟件可靠性牽涉到軟件生產(chǎn)的全過程,但最終還是落實到軟件產(chǎn)品上。而保證軟件可靠性的關(guān)鍵步驟是軟件測試。

軟件測試是為了發(fā)現(xiàn)故障而執(zhí)行程序的過程。其目的是以盡可能少的時間和人力發(fā)現(xiàn)并改正軟件中潛在的各種故障及缺陷。因此,軟件測試與軟件可靠性緊密相關(guān)。軟件中隱藏的故障數(shù)目,直接決定軟件的可靠性。所以,在軟件投入運行之前必須進行軟件測試,以盡可能多地發(fā)現(xiàn)軟件中的故障,提高軟件可靠性。而在軟件運行過程中,則需要軟件維修測試。

隨著人們對軟件測試重要性認識的加深以及軟件系統(tǒng)的日益復(fù)雜,軟件測試在整個軟件開發(fā)周期中所占的比例日益增大。目前,許多軟件開發(fā)機構(gòu)已將研制力量的40%以上花費在軟件測試上。特殊情況下,對于要求高可靠性的軟件,例如飛行控制、核反應(yīng)堆監(jiān)控軟件等,其軟件測試費用甚至高達軟件開發(fā)其它階段所用費用總和的3-5倍。

1.   軟件測試工程

軟件測試的實質(zhì)是根據(jù)軟件開發(fā)各階段的規(guī)格說明和程序的內(nèi)部結(jié)構(gòu)精心選取一批測試數(shù)據(jù),形成測試用例,并用這些測試用例去驅(qū)動被測程序,觀察程序的執(zhí)行結(jié)果,驗證所得結(jié)果與預(yù)期結(jié)果是否一致,然后做相應(yīng)的調(diào)整。所以,軟件測試本身是一個工程。軟件測試的團隊必須不同于該軟件的設(shè)計團隊,它必須獨立地確定軟件測試規(guī)范、生成測試數(shù)據(jù)、進行測試結(jié)果分析、寫出測試報告。這一過程可能要反復(fù)進行多次,以達到預(yù)定的可靠性。在此過程中,測試數(shù)據(jù)生成是軟件測試的核心與關(guān)鍵。不同測試數(shù)據(jù)對發(fā)現(xiàn)軟件故障的能力差別很大。某些測試數(shù)據(jù)能夠有效地發(fā)現(xiàn)故障,而其他一些測試數(shù)據(jù)也可能完全是徒勞。為了節(jié)約時間和資源,提高測試效率,必須從大量的輸入數(shù)據(jù)中精心挑選出少數(shù)有代表性的測試數(shù)據(jù),使得采用這些測試數(shù)據(jù)能夠達到最佳的測試效果,高效地把隱藏的故障揭露出來。為此,探討如何生成高質(zhì)高效的測試數(shù)據(jù),至關(guān)重要。而軟件測試生成與被測軟件的性質(zhì)、功能和可靠性要求緊密相關(guān)。

2.基于程序結(jié)構(gòu)的測試生成

基于規(guī)范的功能測試又稱黑盒測試,是以檢查程序功能來檢測程序是否按照規(guī)格說明書的規(guī)定正確地運行,它以規(guī)范說明為依據(jù),選擇和設(shè)計測試用例。基于程序的結(jié)構(gòu)測試又稱白盒測試,則根據(jù)程序的內(nèi)部結(jié)構(gòu)設(shè)計測試用例,檢測程序在各種不同的情況下是否都按預(yù)定的要求正確地運行?;谝?guī)范的測試數(shù)據(jù)生成和基于程序的測試數(shù)據(jù)生成是兩類常用的軟件測試數(shù)據(jù)生成方法。

結(jié)構(gòu)測試要求對被測程序的結(jié)構(gòu)特性作到一定程度的覆蓋。覆蓋準則一般有以下幾種:

    語句覆蓋

希望用測試數(shù)據(jù)運行被測程序時,被測程序的每一個語句都能被執(zhí)行。至少說明每一個語句都是可達的,在該測試條件下,程序是正確的。當然我們并不能保證在其他條件下,程序執(zhí)行該語句時是否也能正確。

    分支覆蓋

If … then … else …語句中,條件語句測試執(zhí)行一次是不夠的。因為必須讓條件為真和為假,至少執(zhí)行兩次。而在Case語句中必須運行所有的情況,而且,還要運行不屬于所列情況的default情況。所以,對這些分支語句,必須覆蓋所有可能的分支。分支覆蓋率就是考察測試數(shù)據(jù)覆蓋了百分之多少的分支。

③路徑覆蓋

由于程序中有分支、循環(huán)、遞歸、調(diào)用、跳變等語句,一個程序可以用一個控制流或數(shù)據(jù)流圖來表示。程序的每一次運行都是沿著某一條路徑走的。程序在運行這些測試數(shù)據(jù)時,沿著許多路徑都運行過。如果能沿著所有路徑都運行一遍,當然很好。如果能做到完全的路徑覆蓋,就必然達到100%的分支覆蓋和語句覆蓋。但是,對于較大的程序,基本上不可能沿著所有路徑都運行一遍,因為路徑數(shù)太多了。運行過的路徑數(shù)對所有路徑數(shù)的百分比就是路徑覆蓋率。

測試數(shù)據(jù)生成的過程就是在輸入域中,尋找滿足測試準則(如語句覆蓋、分支覆蓋或路徑覆蓋)的輸入數(shù)據(jù)的過程。

關(guān)于結(jié)構(gòu)測試,有三種測試數(shù)據(jù)生成方法:隨機測試數(shù)據(jù)生成方法、面向目標的測試數(shù)據(jù)生成方法以及面向路徑的測試數(shù)據(jù)生成方法。

n        對于給定的語句(分支或路徑),隨機測試數(shù)據(jù)生成方法是在輸入域內(nèi)隨機選取測試數(shù)據(jù),使得給定語句被執(zhí)行。

n        面向目標的測試數(shù)據(jù)生成方法,依據(jù)程序控制流信息,將程序中所有的分支分成兩類:一類是影響目標結(jié)點的分支,另一類是不影響目標結(jié)點的分支。測試數(shù)據(jù)生成時,根據(jù)影響目標結(jié)點的那些分支,生成相應(yīng)的測試數(shù)據(jù),使得給定語句被執(zhí)行。為了能按照預(yù)定的分支,走向給定語句,數(shù)據(jù)依賴分析是必要的。分析數(shù)據(jù)依賴關(guān)系,識別影響給定語句執(zhí)行的那些語句,即先于給定結(jié)點執(zhí)行的結(jié)點序列,再考慮影響目標結(jié)點的那些分支,可以提高測試數(shù)據(jù)生成效率。面向目標的測試數(shù)據(jù)生成方法,與路徑選擇無關(guān),雖然可以達到語句覆蓋、分支覆蓋,但在結(jié)構(gòu)測試覆蓋準則中,路徑覆蓋率是較低的,只有當程序中每一條路徑都被測試了,才能說程序得到了全面的檢驗。

n        面向路徑的測試數(shù)據(jù)生成方法,首先確定一條經(jīng)過給定語句的程序路徑,這條路徑可以自動生成,也可以人為指定。然后在輸入域中尋找輸入數(shù)據(jù),使得在此輸入之下,程序沿該路徑運行,從而使得給定語句被執(zhí)行。面向路徑的測試數(shù)據(jù)生成又分為符號執(zhí)行和實際程序執(zhí)行兩類。符號執(zhí)行允許程序輸入常量、符號值、符號表達式等,以符號計算代替實際執(zhí)行的數(shù)值計算,產(chǎn)生一個符號輸入值的代數(shù)表達式,即路徑約束,它是選定路徑的謂詞系統(tǒng)。實際上是對輸入數(shù)據(jù)的限制要求,由多個不等式(等式)組成。通過求解不等式,求取滿足路徑上各限制謂詞的測試數(shù)據(jù)。若系統(tǒng)無解,則相應(yīng)的路徑為不可行路徑。與邏輯電路測試類似,軟件測試也可以基于故障來產(chǎn)生。用代數(shù)約束來描述檢測特定類型故障的測試數(shù)據(jù)。符號執(zhí)行能夠判定路徑的可行性,一次符號測試的結(jié)果代表了一類普通測試的運行結(jié)果,因此測試成本較低。但在遇到循環(huán)、過程調(diào)用、動態(tài)數(shù)據(jù)結(jié)構(gòu)、數(shù)組和指針處理時,符號執(zhí)行實現(xiàn)困難?;诔绦?qū)嶋H執(zhí)行的測試數(shù)據(jù)生成方法可以對選定路徑上的分支謂詞,寫出一個邏輯表達式,再進行布爾函數(shù)極小化,以確定輸入數(shù)據(jù),使程序執(zhí)行沿選定路徑進行。也可以利用迭代逼近法,求取滿足選定路徑上所有謂詞的輸入值。每次迭代中,執(zhí)行與選定路徑謂詞有關(guān)的語句,得到一個線性約束集,求解該線性約束集,獲得一個輸入增量,進而得到下次迭代的輸入值,最終產(chǎn)生選定路徑的測試數(shù)據(jù)。也可以用約束求解的方法生成測試數(shù)據(jù),將被測程序轉(zhuǎn)化成一個約束系統(tǒng),然后尋找經(jīng)過給定語句的路徑,生成相應(yīng)的測試數(shù)據(jù)。基于程序?qū)嶋H執(zhí)行的測試數(shù)據(jù)生成方法,在程序執(zhí)行的每一步,數(shù)組下標、指針值都是確定的。因此,對數(shù)組和指針的處理方便,但其測試數(shù)據(jù)生成與路徑選擇有關(guān),而判定所選路徑是否為可行路徑是一件非常困難的事情。

隨機測試數(shù)據(jù)生成、面向目標的測試數(shù)據(jù)生成和面向路徑的測試數(shù)據(jù)生成方法大多只利用控制流信息生成測試數(shù)據(jù)。而利用數(shù)據(jù)流信息生成測試則是另一類測試生成方法。該方法將數(shù)據(jù)流信息應(yīng)用到路徑選擇中,并定義了相應(yīng)的測試覆蓋準則。例如,所有定義引用路徑覆蓋準則是指在一個變量被定義之后,所有引用該變量的語句都必須被覆蓋。而所有定義覆蓋準則則要求所有定義變量的語句都必須被覆蓋。所有計算引用覆蓋準則要求所有計算出來的變量被引用的通路都必須被覆蓋。數(shù)據(jù)流測試已經(jīng)開發(fā)了一些軟件測試工具,例如ATAC,能夠評估測試集的覆蓋率,識別未被覆蓋的程序范圍等,有利于指導選擇測試用例,提高測試覆蓋率。但是,無論哪一種結(jié)構(gòu)測試,即使其覆蓋率達到百分之百,也不能保證把所有隱藏的程序缺陷都揭露出來。

3.面向?qū)ο筌浖臏y試

面向?qū)ο蟮姆椒?span lang="EN-US">(Object-oriented method, OO)是軟件工程方法的一次飛躍。對象是一個具有一組狀態(tài)的實體,并封裝了附加于這些狀態(tài)的操作。狀態(tài)描述了對象的屬性或特征,操作描述了對象改變其狀態(tài)的方法以及該對象為其他對象所提供的服務(wù)。面向?qū)ο蠓椒ㄕJ為,人類生活在一個由對象組成的世界中。對象可以被歸類、描述、組織、組合、創(chuàng)建和操縱。面向?qū)ο蠓椒ㄊ且环N模型化世界的抽象方法,結(jié)構(gòu)上具有良好的高內(nèi)聚低耦合特性。采用面向?qū)ο蠹夹g(shù)設(shè)計和開發(fā)的軟件系統(tǒng)更易于維護,在對系統(tǒng)進行修改時,能夠產(chǎn)生較少的副作用。同時,面向?qū)ο蠹夹g(shù)提出了類、繼承、接口等概念,從而為對象的復(fù)用提供了良好的支持機制。因而采用面向?qū)ο蠹夹g(shù)對軟件產(chǎn)品進行設(shè)計與開發(fā),能夠有效地提高軟件組織的開發(fā)效率。

隨著面向?qū)ο蠓治龊兔嫦驅(qū)ο笤O(shè)計技術(shù)的日漸成熟,面向?qū)ο蟮能浖_發(fā)技術(shù)得到了軟件界的普遍認可。但是,由于面向?qū)ο蟮某绦蛟O(shè)計語言提供了數(shù)據(jù)抽象、繼承、多態(tài)和動態(tài)綁定等機制,傳統(tǒng)的軟件測試方法以及測試工具已不能為面向?qū)ο蟮能浖峁┝己玫闹С帧?span lang="EN-US">

面向?qū)ο蟮某绦蛑?,對象是封裝了描述其屬性的數(shù)據(jù)及可以施加在這些數(shù)據(jù)上的操作的封裝體。屬性表示對象的狀態(tài),操作表示對象的行為,消息描述了對象執(zhí)行操作的規(guī)格說明。對象之間通過發(fā)送消息啟動相應(yīng)的操作,通過修改對象的狀態(tài),實現(xiàn)系統(tǒng)狀態(tài)間的相互轉(zhuǎn)換。類是對具有相同屬性和行為的一組相似對象的描述,它描述了該類對象所具有的共同特征。面向?qū)ο筌浖臏y試與傳統(tǒng)的軟件測試有所不同。從面向?qū)ο髥卧獪y試開始,要考慮類間的繼承測試??梢愿鶕?jù)類間繼承關(guān)系的層次特性對類進行增量測試,即通過復(fù)用和增量更新父類的測試信息去指導子類的測試。有人根據(jù)類是抽象數(shù)據(jù)類型的實現(xiàn)這一原理,引入了一種和面向?qū)ο笳Z言語法相似的代數(shù)規(guī)范描述語言LOBAS,作為類的測試模型。通過分析軟件的需求和功能規(guī)范來選擇和產(chǎn)生測試數(shù)據(jù),重點測試一個作用于被測類對象的消息序列能否使該對象處于正確的狀態(tài)。也可以采用黑盒測試和白盒測試相結(jié)合的方法,用黑盒測試法選取測試用例,用白盒測試來檢測程序執(zhí)行一個測試用例產(chǎn)生的兩個對象是否觀測等價(即處于相同的抽象狀態(tài)),并補充一些測試用例,對類進行測試。

對傳統(tǒng)軟件,測試人員普遍認為可以分為四個級別的測試:單元測試、集成測試、確認測試和系統(tǒng)測試。面向?qū)ο蟮某绦驕y試應(yīng)當分為幾個級別,目前尚未達成共識。一種意見認為,從面向?qū)ο蟪绦虻慕Y(jié)構(gòu)出發(fā),面向?qū)ο蟮某绦驕y試應(yīng)當分為四個級別:

1). 行為級:測試類中定義的每個操作;

2). 類級:測試封裝在一個類中的操作和數(shù)據(jù)之間的相互作用;

3). 簇級:測試一組協(xié)同工作的類之間的相互作用;

4). 系統(tǒng)級:考察由所有類和主程序構(gòu)成的整個系統(tǒng)。

而另一種意見則認為面向?qū)ο蟮某绦驁?zhí)行實際上是執(zhí)行一個由外部事件驅(qū)動的操作序列。根據(jù)這一特征,應(yīng)將面向?qū)ο蟮臏y試分為五個層次:

1). 行為測試;

2). 消息路徑測試;

3). 系統(tǒng)基本功能測試;

4). 線程測試;

5). 線程間相互作用測試。

繼承是指子類自動共享父類中定義的數(shù)據(jù)和操作的機制,多態(tài)是指當同一個消息被不同的對象接受時,可以導致完全不同的行為。繼承與多態(tài)機制,是面向?qū)ο蟪绦驅(qū)崿F(xiàn)重用的主要手段,同時也給面向?qū)ο筌浖臏y試提出了一些新的問題。目前關(guān)于面向?qū)ο筌浖y試的研究,大多集中在類和對象狀態(tài)的測試方面。雖有文獻提及繼承及動態(tài)綁定對軟件測試的影響,但現(xiàn)有的面向?qū)ο筌浖y試方法大都忽略了動態(tài)綁定的作用和影響,而且尚無普遍接受的面向?qū)ο筌浖y試的充分性準則。對這些問題的深入研究將會對軟件測試的理論與實踐起到積極的指導作用。

4.軟件測試工具

為了提高軟件測試效率,加快軟件開發(fā)過程,許多公司和大學、科研機構(gòu)開發(fā)了軟件測試工具。我國在軟件測試工具研發(fā)方面也做了大量工作。它們大致可分為靜態(tài)分析工具、測試數(shù)據(jù)生成工具、測試評估工具以及將多種測試工具融為一體的集成化測試系統(tǒng)等。

· 靜態(tài)分析工具

靜態(tài)分析工具是在不執(zhí)行程序的情況下,分析軟件的特性。靜態(tài)分析主要集中在需求文檔、設(shè)計文檔以及程序結(jié)構(gòu)上,可以進行類型分析、接口分析、輸入輸出規(guī)格說明分析等。

· 測試數(shù)據(jù)生成工具

測試數(shù)據(jù)生成工具可以為被測程序自動生成測試數(shù)據(jù),減輕人們在生成大量測試數(shù)據(jù)時付出的勞動,同時還可避免測試人員對一部分測試數(shù)據(jù)的偏見。

· 測試評估工具

測試評估工具用來評估程序結(jié)構(gòu)元素被覆蓋的程度,從而確定測試運行的充分性。這是使用測試數(shù)據(jù)生成工具生成測試數(shù)據(jù)之后必須使用的工具。

· 集成化測試系統(tǒng)

集成化測試系統(tǒng)將多種測試工具融為一體,是一種功能較強的測試工具。

一般地說,針對一類特定軟件的測試工具,可以是相當有效的。而要想開發(fā)對所有軟件系統(tǒng)都有效的軟件測試工具,幾乎是不可能的。并且,經(jīng)驗表明,走查,即由測試工程師認真閱讀源程序以發(fā)現(xiàn)錯誤,仍不失為一種靠得住的測試方法,雖然這不屬于自動測試方法。

5.程序切片技術(shù)

對于大型的復(fù)雜軟件系統(tǒng)的測試,應(yīng)該提到程序切片技術(shù)。它是一種分析和理解程序的技術(shù),廣泛應(yīng)用于程序調(diào)試、測試、逆向工程及軟件維護中。它以切片標準為準則,從被測程序中抽取滿足切片標準要求的有關(guān)語句,忽略許多與此無關(guān)的語句,有利于故障原因的定位分析。

程序切片是一個可執(zhí)行的程序部分,由可能影響程序某個興趣點處變量值的所有語句和謂詞組成。

程序切片分為靜態(tài)切片和動態(tài)切片。

靜態(tài)切片考慮了程序所有可能的執(zhí)行路徑。通過分析源程序代碼,獲得有關(guān)信息,可以計算程序的靜態(tài)切片。對于程序的某個變量而言,靜態(tài)切片計算出的該變量值與源程序計算出的該變量值在任何輸入下都是相同的。

動態(tài)切片只考慮某個具體輸入下程序的執(zhí)行路徑,由路徑上影響或間接影響程序某個興趣點處變量值的所有語句和謂詞組成。根據(jù)實際輸入執(zhí)行產(chǎn)生的精確數(shù)據(jù)流信息,即在特定執(zhí)行過程中產(chǎn)生的數(shù)據(jù)依賴,計算程序的動態(tài)切片。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
提高軟件測試的效率的方法——程序切片
軟件測試流程及方法詳解
軟件測試理論和實踐
軟件測試不得不知的基礎(chǔ)知識
軟件測試的流程及策略
軟件測試的方法
更多類似文章 >>
生活服務(wù)
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服