在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

淺談測試的充分性問題

上海控安 ? 來源:上海控安 ? 作者:上海控安 ? 2023-01-30 17:47 ? 次閱讀

作者 |孫海英華東師范大學軟件工程學院講師

蘇亭 華東師范大學軟件工程學院教授

版塊 |鑒源論壇 · 觀模

按語:由于無法窮舉被測軟件完整的輸入空間,各種軟件動態測試方法本質上都是圍繞”如何構造測試集合以使其展現的部分行為能夠高效有效地反映軟件的整體行為“而展開。判斷測試集合在軟件上的表現是否能夠充分反映該軟件的總體表現,在測試領域中叫充分性問題。雖然,目前還存在尚不能圓滿解決的難題和各種爭議,但是這并不妨礙充分性問題作為測試領域的奠基和科學基礎的地位,影響并指導著軟件測試從技術到管理的方方面面。

01充分性問題的提出和變遷

1975年,Goodenough和Gerhart在研究軟件測試是否能夠保證軟件的正確性(指軟件與規約的一致性)時,突破性地引入了測試充分性(Test Adequacy)這一概念,用以確定測試數據必須具備什么性質才是一個徹底的測試,即成功的測試意味著被測程序的正確性[1]。為此,Goodenough和Gerhart提出了測試充分性準則的可靠性和正確性需求[2]。換句話說,能夠滿足測試充分性準則的可靠性和正確性的測試集合就是一個徹底的測試,能夠說明被測軟件的正確性。

然而,不幸的是,很快Goodenough和Gerhart的測試充分性理論被指出存在錯誤。在1976年,Howden證明了Goodenough和Gerhart提出的充分性準則需求存在重大缺陷,通過測試的充分性保證軟件的正確性是不可行的[3]。盡管如此,由于軟件測試的充分性是軟件在有限多個測試數據上的行為判斷軟件在所有輸入數據上的邏輯基礎,因而充分性的叫法被保留了下來。雖然不能滿足提出時證明軟件正確性的初衷,但是,充分性準則為分析和度量軟件測試質量提供了一條客觀的途徑。除此以外,充分性準則還可用于確定測試過程中需要觀察的內容、作為測試停止標準之一以及當測試集合未能達到期望的充分性準則時,指導測試數據的補充。

對測試集合進行期望的覆蓋分析是當前判定測試充分性的主要方法。本文也從覆蓋角度說明測試的充分性。實踐表明,如果正確合理地運用覆蓋分析,其對保證軟件和軟件測試本身的質量能夠起到積極的作用。例如,結構覆蓋分析(Structural Coverage Analysis)是在安全關鍵系統領域被廣泛應用的覆蓋分析方法。當與“基于需求的測試”相結合(這個前提很重要,詳情可參考[4]),結構覆蓋分析不僅可以發現測試集合的漏測,更能發現代碼中的功能缺失(本該實現而沒有實現的功能)和功能多余(無中生有的功能)[4],更好地保證系統的安全性(Safety)。

02有哪些主流的覆蓋準則

傳統上,主流的覆蓋準則有控制流覆蓋(Control Flow Coverage)、數據流覆蓋(Data Flow Coverage)、變異覆蓋(Mutation Coverage)、分域覆蓋(Domain Partition Coverage)。由于面向代碼的結構,因此,常把前兩者合稱為結構覆蓋(Structural Coverage)。每種覆蓋根據需要滿足的不同要求又包含不同的準則。圖1展示了主流的覆蓋準則。本文主要說明控制流覆蓋和數據流覆蓋。

pYYBAGPXj2KARsGeAAL1LZGFsuw984.png

圖1 主流的覆蓋準則

2.1控制流覆蓋

控制流覆蓋以控制流圖為測試充分程度分析基礎。控制流圖(Control Flow Graph,CFG)是面向代碼控制結構的抽象模型,是由塊(Block)和連接塊的邊(Edge)構成的有向圖。其中,塊是圖的節點,對應滿足“原子規則”的語句序列集合,即塊內的任意一條語句執行其它語句必須執行。連接塊的邊是圖的有向邊,對應代碼的控制關系。后面我們用節點指代塊。對于圖2給出的代碼,圖3示例了塊的劃分和相應的CFG,其中,節點1為開始節點,6為終止節點。

pYYBAGPXj3qAUQriAAFQUYeEyUU379.png

圖 2

poYBAGPXj5KAfGOJAAHKzyuWwRQ784.png

圖 3

路徑是CFG中由若干相鄰邊連接形成的通路,采用節點序列表示。路徑中含有的邊的數目是路徑的長度。表1列舉了圖3所示CFG的部分路徑。因為該CFG中有回路,所以存在無數條路徑。如果路徑的開始節點是CFG的初始節點,終止節點是CFG的終止節點,則該路徑被稱為完整路徑。例如,圖3中給出的路徑只有(1,2,6)是完整路徑,其它都不是。一個測試用例的執行對應一條完整路徑。

pYYBAGPXkXqAC3WFAAIVwjVKgvo451.png

表 1

(1)語句覆蓋

語句覆蓋(Statement Coverage)要求代碼的所有語句至少被執行一次。由于CFG塊與語句的對應關系,因此,語句覆蓋的正式定義為:測試集合T稱為語句覆蓋充分的,當且僅當執行T產生的完整路徑集合L覆蓋了控制流圖中的所有節點。如果使用符號Node(G)表示控制流圖的節點集合,Node(L)表示L包含的節點集合,則測試集合T的語句覆蓋率為:

poYBAGPXj8eAEyfvAAASI7bNVsc397.png

語句覆蓋是級別最低的覆蓋準則,但需要注意到并不是每條語句都可執行。

(2)分支覆蓋

分支覆蓋(Branch Coverage)要求代碼中的所有控制轉移至少被執行一次。控制轉移表現為CFG的邊,控制轉移得到測試意味著相應的邊在測試集合對應的完整路徑中出現。因此,分支覆蓋準則的定義如下:測試集合T稱為分支覆蓋充分的,當且僅當執行T產生的完整路徑集合L覆蓋了控制流圖中的所有邊。如果使用符號Edge(G)表示控制流圖的邊集合,Edge(L)表示L包含的控制流圖中的邊集合,則測試集合T的分支覆蓋率為:

poYBAGPXkaGAJYjOAAAQiy7D6Bs593.png

分支覆蓋是比語句覆蓋嚴格的準則,同時,也需要注意分支也不一定是可執性的。

(3)路徑覆蓋

路徑覆蓋(Path Coverage)要求代碼中每條完整路徑至少被執行一次,其定義如下:測試集合T稱為路徑覆蓋充分的,當且僅當執行T產生的完整路徑集合L覆蓋了控制流圖中的所有完整路徑。如果使用符號Path(G)表示控制流圖的所有完整路徑集合,則測試集合T的路徑覆蓋率為:

poYBAGPXj-aAUPHEAAANL9iKVvk304.png

路徑覆蓋進一步強化了分支覆蓋,是比分支覆蓋更加嚴格的準則。實際上,由于CFG中可能存在無窮多條完整路徑和不可行路徑,路徑覆蓋的要求過于嚴格,以致于無法付諸實踐。因此,一般情況下,會選擇一個有限的完整路徑子集進行測試。

(4)基路徑覆蓋

基路徑覆蓋(Prime Path Coverage)是比路徑覆蓋弱的一種面向路徑的覆蓋準則,由Jeff Offut等人提出[5]。該覆蓋要求構成完整路徑的每一條公共子路徑,即基路徑,至少被執行一次。基路徑是滿足路徑獨特性規則的簡單路徑。所謂簡單路徑(Simple Path) 是指CFG中不含回路的路徑,即除了開始節點和終止節點外,路徑中每個節點出現的次數有且僅有一次。例如,表1中所列的路徑,長度超過3的路徑都不是簡單路徑。除了必須是簡單路徑,為了滿足路徑獨特性規則,基路徑不能是其它簡單路徑的子路徑。例如,表1的(3,4,2)是簡單路徑但不是基路徑,因為它是(3,4,2,3)的子路徑,(3,4,2,3)是一條基路徑。給定一個控制流圖 G,可以通過先計算G的簡單路徑集合,再按照基路徑定義從中篩選基路徑集合的方法求解G的基路徑集合。圖4給出了求解過程的示例。

poYBAGPXkFeAb_xwAAJ7PfRzvMw594.png

圖 4

基路徑覆蓋要求每條基路徑至少被執行一次,其定義如下:測試集合T稱為基路徑覆蓋充分的,當且僅當執行T產生的完整路徑集合L訪問了控制流圖中的所有基路徑。如果使用符號PP(G)表示控制流圖的所有基路徑集合,PP(L)表示L訪問的基路徑集合,則測試集合T的基路徑覆蓋率為:

poYBAGPXkISAf1sFAAAM8j2uGwU991.png

基路徑是比分支覆蓋強,但比路徑覆蓋弱的準則,可以有效地降低必須測試的路徑數,但同樣存在不可行的基路徑的問題。

2.2邏輯謂詞覆蓋

邏輯謂詞即可以是規約中的邏輯條件,也可以指代碼中的邏輯表達式。邏輯謂詞決定控制轉移方向,對代碼功能的正確實現具有重要意義。邏輯謂詞涉及條件和判定兩個概念。條件指不含布爾算子的邏輯謂詞,可以是布爾變量、關系表達式及其非。判定通常由條件通過布爾算子“與”、“或”、“非”連接起來的邏輯謂詞。例如,(in_dis >= 0) && (in_dis <= 500)是一個判定,(in_dis >= 0)和(in_dis <= 500)則是條件。

(1)判定覆蓋

判定覆蓋(Decision Coverage)用于衡量判定得到執行的程度。如果測試集合能夠使得每個判定的真假情況至少各被執行一次, 則說該測試集合滿足了判定覆蓋。例如,測試集合{in_dis = 0, in_dis=501}滿足(in_dis >= 0) && (in_dis <= 500)的判定覆蓋,因為,(in_dis >= 0) && (in_dis <= 500)的真和假均被執行了。

(2)條件覆蓋

條件覆蓋(Condition Coverage)用于衡量構成判定的各個條件得到執行的程度。如果測試集合能夠使每個條件的真假至少各被執行一次, 則說測試集合滿足了條件覆蓋。例如,測試集合 {in_dis = 0, in_dis = 501}不滿足 (in_dis >= 0) && (in_dis <= 500)的條件覆蓋,因為,條件in_dis >= 0的假沒有被執行。可見,判定覆蓋不能保證構成判定的條件得到充分測試。同樣,條件覆蓋也不能保證判定覆蓋。

(3)判定-條件覆蓋

判定-條件覆蓋(Decision-Condition Coverage)用于衡量判定及構成判定的每個條件得到執行的程度。如果測試集合能夠使每個判定的真假至少各被執行一次并且構成判定的每個條件的真假至少各被執行一次, 則說該測試集合滿足了判定-條件覆蓋。例如測試集合{in_dis = 0, in_dis = -1, in_dis = 501},滿足(in_dis >= 0) && (in_dis <= 500)的判定-條件覆蓋。

(4)修正的判定-條件覆蓋

由于在控制邏輯功能規約中,常存在一個條件值的變化引起整個判定結果改變的情況,而判定-條件覆蓋不能充分地測試這種場景。因此,修正的判定-條件覆蓋(Modified Decision-Condition Coverage,MC/DC)除了要求測試集合滿足外判定-條件覆蓋中所有的標準外,還期望構成每個判定的每個條件能獨立地影響整個判定的結果。獨立地影響整個判定的結果是指在其它條件取值不變的情況下,只改變當前條件的取值就能使得整個判定的結果發生變化。對于(in_dis >= 0) && (in_dis <= 500)而言,表2的測試集合滿足MC/DC。因tc1和tc3展現了條件in_dis >= 0獨立地對判定結果的影響(in_dis<=500始終取T,只有in_dis >= 0的取值從T變為F),tc1和tc2展現了條件in_dis <= 500獨立地對判定結果的影響,且每個條件的真假值,判定的真假值也都被執行了。

pYYBAGPXj6eAIwPCAABCUoWsXIo455.png

表 2

對于每個條件,可以采用異或算法計算能夠使其獨立影響整個判定結果時,其它條件的測試輸入值,具體過程可參考[5]。MC/DC是高覆蓋級別的標準,測試成本和難度較大,一般情況下,只有高安全等級軟件的測試才會被要求滿足MC/DC覆蓋。

(5)多條件覆蓋

多條件覆蓋(Multiple Conditions Coverage)用于衡量條件值的組合得到執行的程度。如果測試集合能夠使得每個條件值的組合被至少執行一次,那么則說該測試集合滿足了多條件覆蓋。對于(in_dis >= 0) && (in_dis <= 500)而言,為了滿足多條件覆蓋,測試集合要測試下面4種值組合:

·in_dis >= 0為真且in_dis <= 500為真

·in_dis >= 0為真且in_dis <= 500為假

·in_dis >= 0為假且in_dis <= 500為真

·in_dis >= 0為假且in_dis <= 500為假

2.3 數據流覆蓋

程序本質上是對各種變量按照邏輯不斷進行讀寫運算的過程。數據流覆蓋從測試集合對變量讀寫邏輯的覆蓋程度分析測試的充分性。在數據流覆蓋中,寫叫做定義,讀叫做使用,讀寫邏輯通過定義-使用路徑刻畫。對某一變量v而言,如果程序語句將一個值存入與v相關的存儲單元,則稱該語句定義了變量v;如果程序語句訪問了與v相關存儲單元中的值,則稱該語句使用了變量v。連接變量定義和使用的定義清除的簡單路徑,叫變量的定義-使用路徑。所謂定義清除是指除了路徑的開始節點外,該路徑不存在變量的其它定義節點。變量的定義、使用和定義-使用路徑等信息可以通過數據流圖獲得。圖5是一個數據流圖示例,通過在CFG上增加節點和邊的定義和使用信息就可以得到數據流圖。圖中,def(n)和use(n)分別表示節點n的定義信息和使用信息。def(ni,nj)和use(ni,nj) 分別表示邊(ni,nj)的定義信息和使用信息。對于變量out_dis在節點1的定義而言,(1,2,6)是一條定義-使用路徑,而(1,2,3,4)則不是,因為在這條路徑中,除了節點1外,還有節點4也是out_dis的定義節點。

pYYBAGPXkC-Ab9DiAAI_WYJILRo773.png

圖 5

(1)全定義覆蓋

全定義覆蓋(All Defs Coverage)要求每個變量的每個定義至少被有效使用一次。測試集合T滿足全定義覆蓋,當且僅當存在一個執行T產生的完整路徑集合L的子路徑集合包含每個變量的每個定義和某個該定義的使用構成的定義-使用路徑集合。

(2)全使用覆蓋

全使用覆蓋(All Uses Coverage)要求每個變量的每個使用至少被執行一次。測試集合T滿足全使用覆蓋,當且僅當存在一個執行T產生的完整路徑集合L的子路徑集合包含每個變量的每個定義和所有該定義的使用構成的定義-使用路徑集合。

(3)全定義-使用路徑覆蓋

全定義-使用路徑覆蓋(All DU-paths Coverage)要求所有定義-使用路徑至少被執行一次。測試集合T滿足全定義-使用路徑覆蓋,當且僅當執行T產生的完整路徑集合L訪問了所有數據流圖中的定義-使用路徑。圖6給出了上述3個覆蓋準則之間的差異說明。

pYYBAGPXkPOAYjdPAAFRJIcAoeA583.png

圖 6

03覆蓋準則的揭錯能力

揭錯能力(Defect Detecting Ability)是指測試集合發現缺陷的能力。不同的覆蓋準則,揭錯能力不同。研究表明,如果運用的方式合理,高級別的覆蓋準則發現缺陷的能力比低級別的覆蓋準則發現缺陷的能力強。覆蓋準則級別的高低用“包含關系”定義:如果說A準則的覆蓋級別比B準則高,即A包含B,則意味著滿足A的測試集合也滿足B。圖7給出了邏輯謂詞覆蓋準則的包含情況。由圖可得,多條件覆蓋級別最高揭錯能力最強,判定覆蓋和條件覆蓋之間沒有關系,意味著滿足判定覆蓋并不一定滿足條件覆蓋,反之亦然。語句覆蓋級別最低揭錯能力最弱。

poYBAGPXkRKAb32tAAEulHSNVw4616.png

圖 7

參考資料:

[1] 朱鴻, 金陵紫著. 軟件質量保障與測試. 科學出版社, 1997.

[2] J. B. Goodenough, S. L. Gerhart, Toward a theory of test data selection, IEEE Transaction on Software Engineering, SE-3 (June), 1975.

[3] W. E. Howden, Reliability of the path analysis testing strategy, IEEE Transaction on Software Engineering, SE-2, (Sept.), 208–215, 1976.

[4] Kelly J. Hayhurst,Dan S. Veerhusen,John J. Chilenski,Leanna K. Rierson,A Practical Tutorial on Modified Condition/Decision Coverage,Technical Report. NASA Langley Technical Report Server. 2001.

[5] Paul Ammann, Jeff Offutt, Introduction to software testing(2nd Edition), Cambridge University Press, 2017.

審核編輯黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 軟件測試
    +關注

    關注

    2

    文章

    238

    瀏覽量

    19052
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    淺談Web應用程序的壓力測試

    淺談Web應用程序的壓力測試摘要:壓力測試是Web應用程序測試必不可少的一項工作。現以一個用ASP.NET開發的信息管理系統為例,詳細論述如何使用ACT對W eb應用程序進行壓力
    發表于 10-10 15:23

    PCB經驗淺談

    PCB經驗淺談
    發表于 08-04 09:33

    手機硬件知識淺談

    手機硬件知識淺談
    發表于 05-15 11:04

    手機機構設計淺談

    手機機構設計淺談
    發表于 11-13 11:21

    淺談射頻PCB設計

    淺談射頻PCB設計
    發表于 03-20 15:07

    淺談移動端相關概念

    淺談移動端適配
    發表于 04-16 11:52

    淺談FPGA在安全產品中有哪些應用?

    淺談FPGA在安全產品中有哪些應用?
    發表于 05-08 06:36

    什么是數碼功放?淺談數碼功放

    什么是數碼功放?淺談數碼功放
    發表于 06-07 06:06

    淺談三層架構原理

    淺談三層架構原理
    發表于 01-16 09:14

    淺談TD-SCDMA智能天線基本原理和測試方法

    淺談TD-SCDMA智能天線基本原理和測試方法 1  引言 作為第三代移動通信系統標準之一的TD-SCDMA,采用了兩項最為關鍵的技術,即智能天線技術和聯合檢測技術。
    發表于 02-02 11:22 ?1814次閱讀
    <b class='flag-5'>淺談</b>TD-SCDMA智能天線基本原理和<b class='flag-5'>測試</b>方法

    淺談動力電池安全性問題

    ?本次漫談會王子冬先生主要分享三個內容:動力電池產業的發展趨勢;什么是動力電池安全性;動力電池安全性問題
    的頭像 發表于 12-24 14:43 ?4943次閱讀

    淺談易用性測試及GUI常見的測試要求

    淺談易用性測試及GUI常見的測試要求
    的頭像 發表于 06-29 10:15 ?3025次閱讀

    線路測試解決方案淺談資料下載

    電子發燒友網為你提供線路測試解決方案淺談資料下載的電子資料下載,更有其他相關的電路圖、源代碼、課件教程、中文資料、英文資料、參考設計、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發表于 04-27 08:44 ?8次下載
    線路<b class='flag-5'>測試</b>解決方案<b class='flag-5'>淺談</b>資料下載

    淺談ADC按鍵的應用設計

    淺談ADC按鍵的應用設計(現代電源技術pdf王建輝)-淺談ADC按鍵的應用設計? ? ? ? ??
    發表于 09-17 13:37 ?25次下載
    <b class='flag-5'>淺談</b>ADC按鍵的應用設計

    從OTA測試淺談汽車電子測試發展趨勢

    汽車電子新技術應用“規模”的擴大,進化迭代的加快,一方面促進了行業發展,提升了技術門檻,另一方面也使得行業內分工進一步細化。在此基礎上,筆者以OTA為切入點,來淺談筆者對汽車電子測試的發展趨勢的一些看法。
    的頭像 發表于 08-04 17:56 ?1085次閱讀
    從OTA<b class='flag-5'>測試</b><b class='flag-5'>淺談</b>汽車電子<b class='flag-5'>測試</b>發展趨勢
    主站蜘蛛池模板: 最新久久免费视频 | 午夜影视啪啪免费体验区深夜 | 成人精品一区二区不卡视频 | 久久国产美女免费观看精品 | 在线 你懂 | 91综合在线 | 日韩一级片在线 | 午夜国产精品理论片久久影院 | 无夜精品久久久久久 | 三级国产在线观看 | 欧美午夜视频一区二区 | 天天操天天操天天操 | 狠狠燥 | 天天舔天天射天天操 | 最新日本免费一区二区三区中文 | 国产黄色片网站 | 亚洲成a人在线播放www | 丰满寡妇一级毛片 | 国产精品久久久久久久久久免费 | аbt天堂资源在线官网 | 亚洲成年网 | 国产精品天天在线 | 女人午夜啪啪性刺激免费看 | 亚洲第一页国产 | 我想看一级黄色片 | 爱我免费视频观看在线www | 精品久久久久久中文字幕欧美 | 91国内视频 | 免费黄视频在线观看 | 黄色网一级片 | 色香蕉色香蕉在线视频 | 欧美午夜精品一区二区三区 | 亚洲图片综合区另类图片 | 色婷婷色99国产综合精品 | 1024免费看片 | 日日爱网址 | 日本视频黄色 | 岛国最新资源网站 | 手机看片日本 | 激五月| 2021最新国产成人精品视频 |