国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

軟件集成測試平臺的研究與設(shè)計

2018-08-17 03:18:52
計算機工程與設(shè)計 2018年8期
關(guān)鍵詞:信息結(jié)構(gòu)測試用例部件

王 影

(中國航發(fā)商用航空發(fā)動機有限責任公司 設(shè)計研發(fā)中心控制系統(tǒng)部,上海 201108)

0 引 言

機載軟件適航標準DO-178C定義了基于需求的三級測試:低層測試、軟件集成測試和軟硬件集成測試。其中基于需求的軟件集成測試確保軟件部件之間正確交互,且同時滿足軟件需求和架構(gòu)。通過持續(xù)集成軟件部件,集成測試對象從單一部件、多部件集成到所有部件全集成,不斷擴展測試用例和覆蓋需求的范圍,實現(xiàn)軟件集成測試。在集成測試過程中,測試對象輸入、輸出接口動態(tài)變化,軟件集成測試平臺需要針對不同測試對象篩選適用的測試輸入,同時輸出有效測試結(jié)果進行記錄和判讀。

目前軟件集成測試技術(shù)研究熱點較多地集中在軟件集成測試序列選擇和優(yōu)化[1-7]、面向行為編程中的集成測試策略[2,8]、集成測試自動化[9]等專題。在軟件集成測試平臺方面,主要側(cè)重于構(gòu)建專用系統(tǒng)的測試平臺;對于建設(shè)通用的集成測試平臺面臨的測試對象外部接口動態(tài)匹配問題[10],關(guān)注相對較少。

1 軟件集成測試概述

軟件集成測試的對象是架構(gòu)設(shè)計的結(jié)果,即軟件部件;在軟件架構(gòu)中,每個部件的輸入、輸出接口相對部件自身而言均為外部接口。如果測試對象包含多個部件,其外部接口不能簡單地等同于各部件輸入、輸出接口的并集,而應將這些部件之間的接口當作內(nèi)部接口;即使測試用例包含對應內(nèi)部接口的輸入數(shù)據(jù),也不應接收并處理,否則會影響集成測試對象整體功能的正確性。

根據(jù)測試對象顆粒不同,軟件集成測試分為三級,其輸入、輸出接口分別定義如下:

(1)部件測試[11]的對象是單個部件,其外部輸入、輸出接口直接由軟件架構(gòu)設(shè)計產(chǎn)生。

(2)多部件局部集成測試的對象是兩個以上部件組合的軟件半成品,部件之間的接口作為其內(nèi)部接口,應互相采用關(guān)聯(lián)部件的輸出作為有效輸入;在識別并屏蔽測試對象內(nèi)部接口后,計算得到多部件局部集成測試對象的外部輸入、輸出接口。

(3)所有部件全集成的配置項測試的對象是完整的軟件產(chǎn)品,其外部接口的計算方法原理上等同于多部件局部集成測試,結(jié)果與軟件配置項的外部輸入、輸出接口等價,因此可將“所有部件全集成測試”作為選項提供給測試人員,以消除采用多部件局部集成測試方案時計算測試對象外部接口的時間,提高執(zhí)行效率。

由于軟件部件集成次序無法預測,因此軟件集成測試需要解決測試對象外部接口動態(tài)變化的問題。理想的軟件集成測試平臺應能采用穩(wěn)定不變的用例格式,利用架構(gòu)設(shè)計定義的單部件輸入輸出接口,自動計算多部件集成測試對象的內(nèi)、外部接口;然后屏蔽多部件集成測試對象的內(nèi)部輸入接口,斷開其與測試用例輸入的關(guān)聯(lián);選擇性接收測試用例中與測試對象外部輸入接口關(guān)聯(lián)的數(shù)據(jù)進行刷新;從測試結(jié)果過濾掉測試對象的內(nèi)部輸出接口,只記錄測試對象外部接口的實際輸出。本文嘗試提出一種滿足以上要求的通用軟件集成測試平臺解決方案。

2 軟件集成測試平臺設(shè)計流程

2.1 靜態(tài)登記所有全局變量和軟件部件的基本信息

為每個全局變量和軟件部件分別構(gòu)造變量信息結(jié)構(gòu)體和部件信息結(jié)構(gòu)體:

(1)變量信息結(jié)構(gòu)體由4部分組成,包括①為變量分配的全局唯一的編號;②變量名稱;③變量類型;④與變量實體的關(guān)聯(lián)(指針、超鏈接)。

(2)部件信息結(jié)構(gòu)體由兩部分組成,包括①為部件分配的全局唯一的編號;②部件名稱。在以上兩種結(jié)構(gòu)體中:①編號是檢索變量/部件的關(guān)鍵字;②名稱僅為變量/部件的助記符,無實際意義;③變量類型是將變量綜合結(jié)構(gòu)體與變量實體建立關(guān)聯(lián)的重要輔助信息;④與變量實體的關(guān)聯(lián)是為了將被測軟件中定義的全局變量與測試平臺中定義的變量信息結(jié)構(gòu)體建立超鏈接關(guān)系,使得測試平臺能夠?qū)崟r監(jiān)控和間接獲取軟件執(zhí)行過程中相應全局變量的刷新。

2.2 為各全局變量自動構(gòu)造一個專用的變量綜合結(jié)構(gòu)體

變量綜合結(jié)構(gòu)體包括變量信息、是否各部件輸入、是否各部件輸出等內(nèi)容:

(1)變量信息:由變量信息結(jié)構(gòu)體構(gòu)成。

(2)是否各部件輸入:為所有部件逐個標記變量綜合結(jié)構(gòu)體所關(guān)聯(lián)變量是否為該部件輸入接口。

(3)是否各部件輸出:為所有部件逐個標記變量綜合結(jié)構(gòu)體所關(guān)聯(lián)變量是否為該部件輸出接口。

2.3 為每個軟件部件自動構(gòu)造一個專用的部件綜合結(jié)構(gòu)體

部件綜合結(jié)構(gòu)體包括部件信息、部件輸入集、部件輸出集等內(nèi)容:

(1)部件信息:由部件信息結(jié)構(gòu)體構(gòu)成。

(2)部件輸入集PARTiSET(IN):通過遍歷所有全局變量對應的變量綜合結(jié)構(gòu)體,為所有部件篩選出隸屬于該部件的原始輸入接口,以變量信息結(jié)構(gòu)體表示。

(3)部件輸出集PARTiSET(OUT):通過遍歷所有全局變量對應的變量綜合結(jié)構(gòu)體,為所有部件篩選出隸屬于該部件的原始輸出接口,以變量信息結(jié)構(gòu)體表示。

2.4 確定各部件輸入接口的刷新準則

將所有軟件部件劃分為測試對象和非測試對象兩類,然后以單個部件為調(diào)度單位,在部件被調(diào)度前根據(jù)該部件①是否屬于被測試對象;②是否單部件測試對象;③是否多部件集成測試對象等因素,確定是否刷新、如何刷新每個部件的輸入接口:

(1)對于非測試對象的部件,不以測試用例數(shù)據(jù)刷新其輸入接口,直接采用關(guān)聯(lián)部件運行的相關(guān)輸出作為其輸入。

(2)對于單部件測試對象,直接以測試用例數(shù)據(jù)使用軟件架構(gòu)設(shè)計的部件外部接口刷新控制測試用例輸入和測試結(jié)果輸出,刷新該部件的所有輸入接口。

(3)對于多部件集成測試對象,首先動態(tài)識別多部件集成時部件之間的內(nèi)部接口,內(nèi)部接口所對應的輸入不通過測試用例進行刷新,而通過與其直連的被測部件實時計算得到的相關(guān)輸出接口數(shù)據(jù)進行刷新,實現(xiàn)關(guān)聯(lián)多部件的集成效果;然后通過排除法計算得出每個被測部件相對于整個測試對象的外部輸入接口,通過測試用例的輸入數(shù)據(jù)進行刷新。

3 軟件集成測試平臺詳細設(shè)計

為便于說明問題且不失一般性,假設(shè)軟件架構(gòu)設(shè)計定義4個部件A、B、C、D,部件之間及其與外部輸入、輸出數(shù)據(jù)源的數(shù)據(jù)交互關(guān)系如圖1所示。

義,要在軟件集成測試中間接計算其輸入、輸出接口。如果手工計算,可能需要對軟件集成測試平臺修改10次以上,才能動態(tài)適應測試對象輸入、輸出接口的變化。

以圖1部件A、C集成測試為例,測試對象輸入為a,輸出為c、f。d雖是部件A的輸出、C的輸入,但部件A、C同屬測試對象,d為內(nèi)部接口,應將部件A的計算結(jié)果通過變量d傳給部件C,而不應通過測試用例給部件C注入數(shù)據(jù)d;在軟件集成測試過程中如未正確屏蔽該變量的外部輸入,會影響部件A、C集成測試結(jié)果的正確性。

針對軟件集成測試對象動態(tài)變化導致測試輸入、輸出接口伴隨性變化的問題,本文提出一種根據(jù)測試對象的部件組成自動篩選有效外部接口的解決方案。

3.1 建立各部件輸入輸出接口與軟件變量之間的關(guān)聯(lián)

首先,依據(jù)軟件架構(gòu)的定義,對變量統(tǒng)一編號,作為變量檢索的關(guān)鍵字。本文將部件間接口統(tǒng)一以全局變量來簡化描述,建立全局變量與各部件輸入輸出接口之間的從屬關(guān)系見表1。

然后,對部件統(tǒng)一編號,作為部件檢索的關(guān)鍵字。以部件為中心,通過檢索“變量與部件接口的從屬關(guān)系表”,得到各部件包含的原始輸入集PARTiSET(IN)和原始輸出集PARTiSET(OUT),其中i代表部件編號,自動建立各部件輸入輸出接口與全局變量之間的關(guān)系見表2。

表1 變量與部件接口的從屬關(guān)系

表2 部件接口與全局變量的關(guān)系

3.2 計算測試對象中所有部件輸入、輸出變量集的并集

計算測試對象中所有軟件部件輸入集PARTiSET(IN)的并集PARTSUNION(IN)和輸出變量集PARTiSET(OUT)的并集PARTSUNION(OUT)。PARTSUNION(IN)和PARTSUNION(OUT)中不允許存在重復變量,二者的計算方法相同,以PARTSUNION(IN)為例進行說明,如圖2所示。

圖2 計算測試對象輸入集并集的算法

3.3 計算測試對象各部件輸入集與其它部件輸出集的交集

為簡化描述,假設(shè)各部件自身的輸入集變量與輸出集變量完全無交集。計算測試對象內(nèi)部各部件輸入集與其它部件輸出集交集PARTINTERSEC(IN-OUT)的方法為:循環(huán)判斷測試對象中一個部件輸入集中的變量是否同時存在于其它部件的輸出集中,即從測試對象中輪流取出一個部件X,如果部件X輸入集中某變量w同時存在于測試對象中其它任意部件的輸出集中,則將w加入結(jié)果集PARTINTERSEC(IN-OUT)。計算過程如圖3所示。

圖3 計算測試對象所有部件輸入輸出變量集交集的算法

以上算法消除了PARTINTERSEC(IN-OUT)中可能存在的重復變量,提高了后續(xù)步驟的算法的效率。

3.4 計算測試對象整體輸入、輸出變量集

將測試對象作為整體,其外部輸入變量集SET(IN)和外部輸出變量集SET(OUT)的計算方法為:從測試對象輸入集并集PARTSUNION(IN)和測試對象輸出集并集PARTSUNION(OUT)中,分別減去被測部件之間輸入輸出變量集的交集PARTSINTERSEC(IN-OUT),即可得到測試對象整體的輸入變量集SET(IN)和輸出變量集SET(OUT)。測試對象外部輸入接口對應為SET(IN)=PARTSUNION(IN)-PARTSINTERSEC(IN-OUT),外部輸出接口對應為SET(OUT)=PARTSUNION(OUT)-PARTSINTERSEC(IN-OUT)。SET(IN)和SET(OUT)的計算方法相同,以SET(IN)為例進行說明,如圖4所示。

圖4 計算測試對象外部輸入集的算法

在明確測試范圍中包含的部件之后,測試平臺將測試對象的外部輸入接口SET(IN)和外部輸出接口SET(OUT)計算結(jié)果通過控制臺(屏幕)反饋給測試人員,以提醒其按照測試對象的外部輸入接口正確地注入測試用例,高效地判讀測試結(jié)果。

3.5 計算被測部件的外部輸入變量集

測試對象中各被測部件的有效外部輸入變量集REALSET(IN)的計算方法為:從被測部件輸入集PARTiSET(IN)中,減去所有被測部件之間輸入輸出變量集的交集PARTSINTERSEC(IN-OUT),即可得到被測部件的有效外部輸入變量集REALSET(IN)=PARTiSET(IN)-PARTSINTERSEC(IN-OUT)。計算方法如圖5所示。

圖5 計算被測部件同步測試的輸入集REALSET(IN)算法

測試對象中每個軟件部件被調(diào)度執(zhí)行前,通過測試用例中的輸入數(shù)據(jù)保持或刷新部件有效外部輸入接口REAL-SET(IN)中的所有變量;測試對象內(nèi)部接口對應的變量不處理,直接使用關(guān)聯(lián)部件的輸出值進行刷新。

4 集成測試應用說明

參照本文的軟件集成測試平臺通用設(shè)計方案,在完成軟件架構(gòu)設(shè)計后即可搭建軟件集成測試平臺:

(1)在軟件部件未完成設(shè)計前,以軟件架構(gòu)定義的部件原型構(gòu)建占位的樁函數(shù),形成被測軟件初始框架,構(gòu)建完整的軟件集成測試平臺(含測試對象內(nèi)部、外部接口識別算法);

(2)當啟動軟件集成測試時,以真實的軟件部件陸續(xù)取代占位的樁函數(shù),重新編譯測試平臺,即可執(zhí)行軟件集成測試。隨著軟件集成的深入,軟件集成測試顆粒度、測試對象不斷變化;但對集成測試環(huán)境而言,除了直接以軟件部件替換樁函數(shù)外,絲毫不必做其它改動。

如果軟件配置項的所有部件已集成為一體,則可基于軟件配置項直接構(gòu)建軟件集成測試環(huán)境。此環(huán)境不做任何修改,即可支持從單部件、多部件局部集成到軟件產(chǎn)品全集成的測試活動,測試人員只須選擇測試對象、注入測試用例,不須關(guān)注測試對象外部接口的任何變化,即可得到測試對象的準確執(zhí)行結(jié)果。

5 實例分析

某型號航空發(fā)動機健康監(jiān)視裝置(EMU)軟件包含“模式選擇”和“指示”等功能部件,其中模式選擇部件根據(jù)輸入條件(模式選擇開關(guān)組合 “S4 S3 S2 S1”)來判斷并輸出EMU設(shè)備的工作模式,其輸入、輸出接口的映射關(guān)系見表3。

表3 模式選擇部件輸入輸出映射

上表中S1~S4為組合中的位,其中每位取值為“1”或“0”,X代表“1”或“0”。

指示功能工作在模式3下,軟件在EMU工作的全部時間內(nèi)向試車臺發(fā)送“振動速度等級”數(shù)據(jù)用于指示,其取值范圍見表4。

表4 指示信息取值范圍

指示部件輸入、輸出接口的映射關(guān)系見表5。

如果只考慮“模式選擇”和“指示”這兩個功能部件,測試用例為兩個部件輸入接口的并集,見表6。

5.1 模式選擇部件測試

針對模式選擇部件進行單部件測試,設(shè)計并執(zhí)行測試用例見表7。

表5 指示部件輸入輸出映射

表6 測試用例輸入接口

表7 模式選擇部件測試輸入與實測輸出對照

以上測試用例輸入的“EMU工作模式”值3并未影響到實測按照模式選擇開關(guān)組合“S4 S3 S2 S1”計算輸出的“EMU工作模式”數(shù)值0,結(jié)果正確。

5.2 指示部件測試

針對指示部件進行單部件測試,設(shè)計并執(zhí)行測試用例見表8。

表8 指示部件測試輸入與實測輸出對照

以上測試用例輸入的“EMU工作模式”值3直接影響到實測“振動速度等級”的輸出,模式選擇開關(guān)組合“S4 S3 S2 S1”并未影響“EMU工作模式”數(shù)值,結(jié)果正確。

5.3 模式選擇與指示部件集成測試

針對模式選擇和指示部件進行多部件集成測試,設(shè)計并執(zhí)行測試用例(該用例執(zhí)行的前提條件是振動速度等級輸出值=5)見表9。

表9 指示部件測試輸入與實測輸出對照

在模式選擇和指示部件集成后,“EMU工作模式”成為部件集成后的被測對象的內(nèi)部接口,測試用例輸入的“EMU工作模式”值3被軟件集成測試平臺屏蔽,通過計算模式選擇開關(guān)組合“S4 S3 S2 S1”得到的“EMU工作模式”值0,作為指示部件的輸入來控制其執(zhí)行,結(jié)果實測“振動速度等級”的輸出保持前值5,未按照當前用例輸入值7誤刷新,結(jié)果正確。

6 結(jié)束語

為了解決軟件測試對象持續(xù)集成誘發(fā)外部接口變化而對測試環(huán)境提出的動態(tài)匹配問題,本文提出了一種軟件集成測試平臺通用設(shè)計方案?;谲浖軜?gòu)對各部件接口的定義,統(tǒng)一采用所有部件輸入接口的并集作為測試用例輸入接口。在軟件部件集成測試過程中,根據(jù)測試對象的動態(tài)變化,輪流計算測試對象中每個部件輸入接口與其它被測部件輸出接口的交集,匯總得到測試對象的內(nèi)部接口;然后計算測試對象中所有部件輸入接口和輸出接口的并集,分別從中去除測試對象的內(nèi)部接口,得到測試對象的外部輸入、輸出接口。測試對象內(nèi)部接口視同非被測部件的外部接口,從測試的視角進行屏蔽;測試對象外部接口作為軟件集成測試的控制主體,其輸入接口實時接收測試用例中的關(guān)聯(lián)數(shù)據(jù)進行刷新,其輸出接口作為判讀測試結(jié)果正確性的數(shù)據(jù)源進行記錄和分析。該方案支持測試對象從單部件、多部件集成到整個軟件產(chǎn)品配置項的動態(tài)持續(xù)集成。軟件集成測試過程中測試環(huán)境維護成本可基本消除,提高了集成測試的整體效率。

猜你喜歡
信息結(jié)構(gòu)測試用例部件
基于SmartUnit的安全通信系統(tǒng)單元測試用例自動生成
基于Siemens NX和Sinumerik的銑頭部件再制造
基于混合遺傳算法的回歸測試用例集最小化研究
部件拆分與對外漢字部件教學
對外漢語教材編寫中信息結(jié)構(gòu)知識的應用
基于調(diào)節(jié)聚焦理論的生物農(nóng)藥推廣有效性研究
水輪機過流部件改造與節(jié)能增效
事件結(jié)構(gòu)、信息結(jié)構(gòu)與句法表征*——領(lǐng)主屬賓句的認知語法分析
外語學刊(2016年4期)2016-01-23 02:34:09
基于依賴結(jié)構(gòu)的測試用例優(yōu)先級技術(shù)
信息結(jié)構(gòu)與句法異位
當代修辭學(2014年3期)2014-01-21 02:30:46
屯留县| 怀集县| 于都县| 南昌市| 清流县| 乌鲁木齐市| 孟村| 富宁县| 梧州市| 河北省| 张家港市| 海丰县| 天全县| 遂宁市| 慈利县| 樟树市| 额济纳旗| 建湖县| 广饶县| 名山县| 贵溪市| 松原市| 聂拉木县| 兴业县| 苍南县| 航空| 德保县| 镇宁| 岳阳市| 杂多县| 石首市| 白朗县| 晋城| 闸北区| 象山县| 平潭县| 新宁县| 德江县| 增城市| 昌图县| 武川县|