亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        輕量級(jí)嵌入式軟件自動(dòng)化測(cè)試框架設(shè)計(jì)

        2024-03-21 01:49:32沈亞峰
        關(guān)鍵詞:前置條件嵌入式軟件關(guān)鍵字

        陳 建,沈亞峰,張 誼

        (中國(guó)工程物理研究院 計(jì)算機(jī)應(yīng)用研究所,四川 綿陽(yáng) 621900)

        0 引 言

        隨著電子技術(shù)的發(fā)展,嵌入式軟件規(guī)模越來(lái)越大,復(fù)雜度也越來(lái)越高,軟件質(zhì)量要求也不斷提高,嵌入式軟件的自動(dòng)化測(cè)試[1,2]以其提高測(cè)試效率、保障測(cè)試質(zhì)量等優(yōu)點(diǎn)越來(lái)越受到關(guān)注。但隨著嵌入式軟件處理能力的增加,其接口類(lèi)型更多、結(jié)構(gòu)更復(fù)雜,主要體現(xiàn)在業(yè)務(wù)邏輯與接口數(shù)據(jù)方面,且不同類(lèi)型的嵌入式軟件接口存在較大差異性,造成測(cè)試數(shù)據(jù)難以統(tǒng)一,為確保測(cè)試充分性需構(gòu)造大量、復(fù)雜的測(cè)試數(shù)據(jù)進(jìn)行測(cè)試,為此針對(duì)嵌入式軟件測(cè)試能夠?qū)崿F(xiàn)測(cè)試數(shù)據(jù)快速生成與輸入的自動(dòng)化測(cè)試框架顯得更為重要。

        嵌入式軟件的輸入數(shù)據(jù)類(lèi)型眾多,包括數(shù)字信號(hào)、模擬信號(hào)以及CAN、UART、LAN等總線數(shù)據(jù),測(cè)試時(shí)需對(duì)多種激勵(lì)信號(hào)進(jìn)行輸入,另外在強(qiáng)流程嵌入式軟件中,其輸入信號(hào)之間具有嚴(yán)格的時(shí)序要求,通常為毫秒級(jí),測(cè)試數(shù)據(jù)的輸入時(shí)序控制也成為嵌入式軟件測(cè)試過(guò)程中的重點(diǎn)與難點(diǎn)。目前成熟的嵌入式軟件的自動(dòng)化測(cè)試框架如CRESTS、AUTOTEST、GESTE[3]等在使用過(guò)程中均需編寫(xiě)復(fù)雜的測(cè)試腳本以實(shí)現(xiàn)測(cè)試數(shù)據(jù)的輸入,使用門(mén)檻較高,測(cè)試環(huán)境搭建周期較長(zhǎng),不利于快速測(cè)試,為此本文主要對(duì)嵌入式軟件測(cè)試框架進(jìn)行研究,設(shè)計(jì)一款輕量級(jí)嵌入式軟件自動(dòng)化測(cè)試框架以實(shí)現(xiàn)測(cè)試數(shù)據(jù)的快速生成與輸入,提高測(cè)試效率。

        1 測(cè)試框架分析

        目前,針對(duì)嵌入式軟件的測(cè)試框架可分為手工測(cè)試框架和腳本驅(qū)動(dòng)測(cè)試框架。

        手工測(cè)試框架:手工測(cè)試框架主要采用手動(dòng)輸入的方式將測(cè)試數(shù)據(jù)填寫(xiě)到測(cè)試工具中,再利用工具輸入到被測(cè)軟件(如:NetAssist、UartAssist等),測(cè)試數(shù)據(jù)的輸入具有單一性與無(wú)序性,需要輸入不同數(shù)據(jù)時(shí)則需要重新填寫(xiě)數(shù)據(jù),在數(shù)據(jù)量比較大時(shí),需要花費(fèi)大量時(shí)間,另外輸入的時(shí)序無(wú)法保證,無(wú)法用于具有時(shí)序要求的嵌入式軟件測(cè)試。

        腳本驅(qū)動(dòng)測(cè)試框架:腳本驅(qū)動(dòng)測(cè)試框架可分為線性腳本、結(jié)構(gòu)化腳本、共享腳本、數(shù)據(jù)驅(qū)動(dòng)腳本、關(guān)鍵字驅(qū)動(dòng)腳本以及混合驅(qū)動(dòng)腳本[4,5]。

        (1)線性腳本:線性腳本是通過(guò)測(cè)試工具錄制測(cè)試人員操作被測(cè)對(duì)象的測(cè)試動(dòng)作、輸入數(shù)據(jù),并記錄在腳本文件中。該腳本一般采用特定的語(yǔ)言記錄測(cè)試動(dòng)作序列,腳本可進(jìn)行回放,線性腳本的優(yōu)點(diǎn)是簡(jiǎn)單,通過(guò)錄制即可實(shí)現(xiàn),無(wú)須編寫(xiě)代碼,缺點(diǎn)是僅適用于當(dāng)前被測(cè)軟件,不能共享與重用,可維護(hù)性差,僅適用于部分功能。

        (2)結(jié)構(gòu)化腳本:結(jié)構(gòu)化腳本是對(duì)線性腳本的優(yōu)化,支持通過(guò)編程指令控制腳本執(zhí)行,腳本具有邏輯判斷能力,根據(jù)指令判斷腳本執(zhí)行順序,相對(duì)線性腳本在一定程度上靈活性、健壯性得到改善,并可用于重復(fù)性的自動(dòng)化測(cè)試,如Python[6]、ATLAS[7]、TTCN[8]、RASL[9]等腳本語(yǔ)言,但結(jié)構(gòu)化腳本將邏輯指令與測(cè)試數(shù)據(jù)融合,當(dāng)測(cè)試數(shù)據(jù)需要更新時(shí)需重新編寫(xiě)測(cè)試腳本,測(cè)試腳本的開(kāi)發(fā)工作量大幅度增加,另外測(cè)試場(chǎng)景越復(fù)雜,腳本編寫(xiě)難點(diǎn)越高,維護(hù)代價(jià)越大,不利用測(cè)試工具的普及與應(yīng)用。

        (3)共享腳本:共享腳本在結(jié)構(gòu)化腳本的基礎(chǔ)上對(duì)腳本進(jìn)行完善,使腳本可復(fù)用,節(jié)省了軟件測(cè)試的時(shí)間,但測(cè)試數(shù)據(jù)仍未從腳本中進(jìn)行分離,當(dāng)多個(gè)測(cè)試用例需要復(fù)用同一測(cè)試腳本時(shí),腳本開(kāi)發(fā)、維護(hù)工作增加。

        (4)數(shù)據(jù)驅(qū)動(dòng)腳本:數(shù)據(jù)驅(qū)動(dòng)測(cè)試將測(cè)試輸入存儲(chǔ)在獨(dú)立的數(shù)據(jù)文件而不是與測(cè)試腳本緊耦合。腳本中只存放控制信息,執(zhí)行測(cè)試時(shí)從外部數(shù)據(jù)文件中讀取測(cè)試數(shù)據(jù),一個(gè)測(cè)試腳本可以運(yùn)行不同的測(cè)試,避免腳本驅(qū)動(dòng)測(cè)試頻繁修改測(cè)試腳本的不足。數(shù)據(jù)文件單獨(dú)存儲(chǔ)且可讀性、可維護(hù)性高,數(shù)據(jù)與腳本的分離減少測(cè)試腳本的維護(hù)成本,提升測(cè)試效率[5],但數(shù)據(jù)驅(qū)動(dòng)腳本測(cè)試框架最大限制是數(shù)據(jù)格式單一、固定,無(wú)法適應(yīng)數(shù)據(jù)動(dòng)態(tài)變化的情況。

        (5)關(guān)鍵字驅(qū)動(dòng)腳本:關(guān)鍵字驅(qū)動(dòng)腳本在采用數(shù)據(jù)文件描述測(cè)試用例的同時(shí),通過(guò)一系列關(guān)鍵字描述測(cè)試任務(wù),同樣實(shí)現(xiàn)了測(cè)試腳本與測(cè)試數(shù)據(jù)的分離,但僅通過(guò)關(guān)鍵字驅(qū)動(dòng)會(huì)隨著軟件復(fù)雜度增加而增加大量關(guān)鍵字,構(gòu)建成本較大。

        (6)混合驅(qū)動(dòng)腳本:采用多種腳本技術(shù)協(xié)同使用,可以有效避免單一腳本帶來(lái)的局限性,彌補(bǔ)單一腳本的不足。

        根據(jù)以上分析,數(shù)據(jù)驅(qū)動(dòng)與關(guān)鍵字驅(qū)動(dòng)腳本測(cè)試框架均實(shí)現(xiàn)了數(shù)據(jù)與腳本的分離,僅通過(guò)構(gòu)建測(cè)試數(shù)據(jù)即可實(shí)現(xiàn)不同測(cè)試數(shù)據(jù)的輸入,無(wú)需重復(fù)編寫(xiě)測(cè)試腳本,提升了腳本的復(fù)用性、維護(hù)性,國(guó)內(nèi)外基于該技術(shù)也做了很多研究[10-15]。

        文獻(xiàn)[11]采用基于模型思想,提出一種字符型驅(qū)動(dòng)形式化描述通用方法,建立基于時(shí)間的PWM驅(qū)動(dòng)模型實(shí)現(xiàn)嵌入式軟件接口驅(qū)動(dòng)的分析與驗(yàn)證,但該方法僅能用于單一的接口驗(yàn)證,無(wú)法用于軟件的業(yè)務(wù)流程的測(cè)試。文獻(xiàn)[12]將BDD的思想應(yīng)用于數(shù)據(jù)驅(qū)動(dòng)的測(cè)試中,使用通用的自然語(yǔ)言描述測(cè)試用例,該思想注重從用戶的角度進(jìn)行測(cè)試,針對(duì)復(fù)雜的測(cè)試場(chǎng)景,其測(cè)試場(chǎng)景與步驟的描述顯得比較繁瑣,需花費(fèi)大量時(shí)間。文獻(xiàn)[13]采用數(shù)據(jù)驅(qū)動(dòng)方式實(shí)現(xiàn)網(wǎng)口的自動(dòng)化測(cè)試,通過(guò)數(shù)據(jù)文件實(shí)現(xiàn)測(cè)試數(shù)據(jù)的注入,但當(dāng)被測(cè)對(duì)象輸入數(shù)據(jù)動(dòng)態(tài)變化時(shí)無(wú)法自適應(yīng)輸入且不支持其它接口。文獻(xiàn)[14]與文獻(xiàn)[15]采用數(shù)據(jù)驅(qū)動(dòng)思想實(shí)現(xiàn)了自動(dòng)化測(cè)試框架,可通過(guò)文件快速構(gòu)建測(cè)試數(shù)據(jù),實(shí)現(xiàn)測(cè)試數(shù)據(jù)的自動(dòng)化注入,提高測(cè)試效率,但該框架僅對(duì)Web軟件數(shù)據(jù)進(jìn)行分析,構(gòu)建數(shù)據(jù)模型實(shí)現(xiàn)Web軟件自動(dòng)化測(cè)試,無(wú)法用于嵌入式軟件的強(qiáng)時(shí)序復(fù)雜接口數(shù)據(jù)的注入。

        綜上分析,本文介紹了一種將數(shù)據(jù)驅(qū)動(dòng)與關(guān)鍵字驅(qū)動(dòng)相結(jié)合的混合腳本測(cè)試框架,在該框架下即可實(shí)現(xiàn)嵌入式軟件測(cè)試數(shù)據(jù)按照前置條件、時(shí)序快速主動(dòng)與被動(dòng)輸入,也可利用關(guān)鍵字實(shí)現(xiàn)測(cè)試數(shù)據(jù)的動(dòng)態(tài)自動(dòng)生成??蚣茉O(shè)計(jì)主要存在以下難點(diǎn):①測(cè)試數(shù)據(jù)復(fù)雜多樣性;②測(cè)試數(shù)據(jù)動(dòng)態(tài)自適應(yīng)。

        搭建嵌入式軟件自動(dòng)化測(cè)試框架的重點(diǎn)是要快速構(gòu)建該嵌入式軟件的數(shù)據(jù)流程以及行為參數(shù)[16]。隨著嵌入式處理器復(fù)雜與多樣化,嵌入式軟件需要的測(cè)試數(shù)據(jù)也越來(lái)越復(fù)雜,為滿足不同嵌入式軟件的測(cè)試,采用數(shù)據(jù)驅(qū)動(dòng)的思想構(gòu)建統(tǒng)一的數(shù)據(jù)模型表達(dá)測(cè)試數(shù)據(jù),以實(shí)現(xiàn)數(shù)據(jù)的快速輸入。

        另外,根據(jù)被測(cè)軟件業(yè)務(wù)要求存在動(dòng)態(tài)變化的測(cè)試數(shù)據(jù),如握手?jǐn)?shù)據(jù)、連續(xù)數(shù)據(jù)、離散數(shù)據(jù)等,為確保對(duì)測(cè)試數(shù)據(jù)的自適應(yīng),采用關(guān)鍵字驅(qū)動(dòng)的思想構(gòu)建關(guān)鍵字模型以表征動(dòng)態(tài)數(shù)據(jù),用于實(shí)現(xiàn)測(cè)試數(shù)據(jù)自動(dòng)生成。

        最后對(duì)測(cè)試框架進(jìn)行設(shè)計(jì)與實(shí)現(xiàn),并通過(guò)實(shí)例對(duì)框架的功能、性能進(jìn)行驗(yàn)證與分析。

        2 數(shù)據(jù)模型設(shè)計(jì)

        基于數(shù)據(jù)與關(guān)鍵字驅(qū)動(dòng)的測(cè)試框架是通過(guò)數(shù)據(jù)文件讀取輸入的測(cè)試數(shù)據(jù)與關(guān)鍵字,然后傳入測(cè)試腳本中,由測(cè)試平臺(tái)調(diào)用測(cè)試腳本解析測(cè)試數(shù)據(jù)并按照時(shí)序向被測(cè)對(duì)象輸入測(cè)試數(shù)據(jù)。為確保測(cè)試輸入的高效與統(tǒng)一需建立通用的數(shù)據(jù)模型對(duì)測(cè)試數(shù)據(jù)結(jié)構(gòu)進(jìn)行描述。測(cè)試數(shù)據(jù)模型是抽象出來(lái)獨(dú)立于測(cè)試平臺(tái)的測(cè)試數(shù)據(jù),存儲(chǔ)于結(jié)構(gòu)化的文件中,通過(guò)標(biāo)簽屬性,獲取這些文件中符合條件的指令和配置數(shù)據(jù)。本文介紹的數(shù)據(jù)與關(guān)鍵字驅(qū)動(dòng)測(cè)試框架的數(shù)據(jù)模型包含數(shù)據(jù)驅(qū)動(dòng)模型與關(guān)鍵字驅(qū)動(dòng)模型。

        2.1 數(shù)據(jù)驅(qū)動(dòng)模型

        通過(guò)對(duì)嵌入式軟件輸入數(shù)據(jù)的規(guī)則與要素進(jìn)行分析,構(gòu)建通用輸入數(shù)據(jù)模型。

        定義1 輸入數(shù)據(jù)模型 (SD):SD=,各元素定義如下。

        Port:表示數(shù)據(jù)輸入的端口類(lèi)型,包括:LAN、CAN、UART、1553B等;

        Ts:表示數(shù)據(jù)輸入的延時(shí)時(shí)間,用于控制數(shù)據(jù)輸入時(shí)序;

        R:表示數(shù)據(jù)輸入的次數(shù),用于表示單次數(shù)據(jù)、周期數(shù)據(jù);

        Tc:表示數(shù)據(jù)輸入間隔時(shí)間;

        Prot:表示數(shù)據(jù)協(xié)議要求,根據(jù)數(shù)據(jù)源的不同分別按照對(duì)應(yīng)的數(shù)據(jù)協(xié)議要求進(jìn)行設(shè)置,如LAN則表示數(shù)據(jù)輸入的IP地址與端口號(hào),CAN則表示數(shù)據(jù)類(lèi)型、幀ID等;

        Data:表示待輸入的數(shù)據(jù)信息,包含固定數(shù)據(jù)(FD)與關(guān)鍵字?jǐn)?shù)據(jù)(KD)。

        根據(jù)輸入數(shù)據(jù)是否存在前置條件可分為主動(dòng)輸入數(shù)據(jù)與被動(dòng)輸入數(shù)據(jù)。

        主動(dòng)輸入數(shù)據(jù):主動(dòng)輸入數(shù)據(jù)即測(cè)試平臺(tái)通過(guò)測(cè)試腳本解析數(shù)據(jù)文件后,可在任意時(shí)刻按照設(shè)定的時(shí)序要求向被測(cè)對(duì)象直接輸入的數(shù)據(jù),不考慮其前置條件。主動(dòng)輸入數(shù)據(jù)(ADChain)是由一系列SD按照時(shí)序關(guān)系組成的有序集合 {SD1,SD2,…,SDn},針對(duì)任意i(1≤i≤n),SDi與SDi+1之間均具有相繼發(fā)送的時(shí)序關(guān)系,通過(guò)若干個(gè)SD的有序發(fā)送即可表達(dá)被測(cè)對(duì)象的主動(dòng)輸入行為。

        被動(dòng)輸入數(shù)據(jù):被動(dòng)輸入數(shù)據(jù)即在滿足特定的前置條件后才向被測(cè)對(duì)象輸入的測(cè)試數(shù)據(jù),針對(duì)嵌入式軟件其前置條件一般為輸出條件。

        定義2 前置條件(PC):PC=,其中Port為輸出數(shù)據(jù)的端口,Data為輸出數(shù)據(jù),長(zhǎng)度1~n,Mask為屏蔽碼,用于屏蔽判定字段,若Maski=0(其中1≤i≤n)則屏蔽對(duì)Datai字段的判斷,一般用于對(duì)隨運(yùn)行狀態(tài)不斷變化的信息的屏蔽(如:時(shí)統(tǒng)、序號(hào)等)。對(duì)于PC的判斷結(jié)果PCRes∈{0,1},PCRes=1表示條件滿足,否則表示不滿足。

        定義3 響應(yīng)數(shù)據(jù)(RD):RD={SD1,SD2,…,SDn},一個(gè)響應(yīng)數(shù)據(jù)是由多個(gè)輸入數(shù)據(jù)構(gòu)成的集合,根據(jù)前置條件觸發(fā)的次數(shù)依次進(jìn)行輸入。

        單條被動(dòng)數(shù)據(jù)由一個(gè)前置條件與若干個(gè)響應(yīng)數(shù)據(jù)組成,若干條被動(dòng)數(shù)據(jù)的集合則構(gòu)成整個(gè)被動(dòng)輸入數(shù)據(jù)(PDChain),即PDChain={{PC1,RD11,RD12,…,RD1m},…,{PCn,RDn1,RDn2,…,RDnm}},其中n為被動(dòng)數(shù)據(jù)條數(shù),m為響應(yīng)個(gè)數(shù)。當(dāng)獲取到被測(cè)對(duì)象輸出數(shù)據(jù)后,對(duì)PC1~PCn進(jìn)行遍歷,若判斷結(jié)果PCResi=1(其中1≤i≤n)則將響應(yīng)數(shù)據(jù)RDi1~RDim按照設(shè)定的時(shí)序注入到指定的目標(biāo)端口即完成被動(dòng)數(shù)據(jù)的輸入。

        2.2 關(guān)鍵字驅(qū)動(dòng)模型

        在數(shù)據(jù)輸入過(guò)程中存在變化的動(dòng)態(tài)字段,針對(duì)動(dòng)態(tài)字段若僅依靠數(shù)據(jù)驅(qū)動(dòng)則需要構(gòu)建大量的數(shù)據(jù),花費(fèi)大量時(shí)間,另外在被動(dòng)輸入數(shù)據(jù)中存在隨目標(biāo)數(shù)據(jù)變化的字段(如握手信息、校驗(yàn)碼等),數(shù)據(jù)驅(qū)動(dòng)無(wú)法預(yù)知其具體值,無(wú)法注入滿足要求的數(shù)據(jù),為此在數(shù)據(jù)驅(qū)動(dòng)模型中加入關(guān)鍵字,通過(guò)數(shù)據(jù)與關(guān)鍵字驅(qū)動(dòng)相結(jié)合的方式實(shí)現(xiàn)測(cè)試數(shù)據(jù)的自動(dòng)生成與輸入。

        根據(jù)嵌入式軟件輸入數(shù)據(jù)的特點(diǎn)從數(shù)據(jù)位置、長(zhǎng)度、類(lèi)型、排列方式等角度進(jìn)行分析,構(gòu)建關(guān)鍵字模型。

        定義4 關(guān)鍵字模型(KD):KD=,各元素定義如下。

        Key:表示數(shù)據(jù)生成方式,包括握手?jǐn)?shù)據(jù)、時(shí)間數(shù)據(jù)、連續(xù)數(shù)據(jù)、離散數(shù)據(jù)、校驗(yàn)數(shù)據(jù)、特殊功能數(shù)據(jù)(如長(zhǎng)度)等;

        Type:表示數(shù)據(jù)類(lèi)型,包括有符號(hào)整形、無(wú)符號(hào)整形、浮點(diǎn)型等;

        BW:表示數(shù)據(jù)位寬,BW∈{8,16,24,32,…};

        Mode:表示數(shù)據(jù)排列方式,包括小端排列與大端排列;

        Pos:表示數(shù)據(jù)的范圍或數(shù)據(jù)的起始與終點(diǎn)位置;

        Exp:表示數(shù)據(jù)計(jì)算表達(dá)式f。

        測(cè)試數(shù)據(jù)生成規(guī)則如下:根據(jù)Key獲取生成數(shù)據(jù)的類(lèi)別,選擇相應(yīng)的生成方式;根據(jù)Pos表示的范圍或區(qū)間位置獲取初值,根據(jù)選擇的生成方式與f計(jì)算當(dāng)前數(shù)據(jù)值;根據(jù)Type、BW以及Mode將計(jì)算值填充至指定的字段域。

        3 框架設(shè)計(jì)與研制

        3.1 框架整體結(jié)構(gòu)

        以數(shù)據(jù)模型為基礎(chǔ)對(duì)該測(cè)試框架整體架構(gòu)進(jìn)行設(shè)計(jì),采用模塊化的思想對(duì)各個(gè)模塊進(jìn)行設(shè)計(jì),保證模塊的獨(dú)立性與可擴(kuò)展性??蚣苷w結(jié)構(gòu)主要包括數(shù)據(jù)解析模塊、被動(dòng)輸入模塊、主動(dòng)輸入模塊、接收數(shù)據(jù)模塊、發(fā)送數(shù)據(jù)模塊以及顯存模塊,具體組成如圖1所示。

        圖1 自動(dòng)化測(cè)試框架整體架構(gòu)

        基于上述設(shè)計(jì)方案,采用VC6.0研制了該測(cè)試框架,采用多線程與環(huán)形緩存原理保證各個(gè)模塊之間既能協(xié)同工作,又能實(shí)時(shí)數(shù)據(jù)傳遞,框架運(yùn)行界面如圖2所示。

        圖2 自動(dòng)化測(cè)試框架運(yùn)行界面

        3.2 關(guān)鍵模塊實(shí)現(xiàn)

        其中數(shù)據(jù)解析模塊與數(shù)據(jù)輸入模塊是該框架的關(guān)鍵模塊,是數(shù)據(jù)與關(guān)鍵字驅(qū)動(dòng)的測(cè)試數(shù)據(jù)輸入思想的具體實(shí)現(xiàn)。

        3.2.1 數(shù)據(jù)解析模塊

        該框架以文本文件作為測(cè)試數(shù)據(jù)的輸入,在文本文件中存儲(chǔ)待輸入的主動(dòng)數(shù)據(jù)與被動(dòng)數(shù)據(jù),軟件按照設(shè)定的規(guī)則對(duì)文件進(jìn)行解析,形成主動(dòng)輸入數(shù)據(jù)鏈(ADChain)與被動(dòng)輸入數(shù)據(jù)鏈(PDChain),其中ADChain解析實(shí)現(xiàn)過(guò)程如下。

        Algorithm:LoadADChain

        Input:(strPath) /*Active Test file Path*/

        Output:(count) /*The count ofADChain*/

        (1)p_file = OpenFile(strPath,"r");/*open file*/

        (2)whileget a line from p_file and line is not nulldo/*read a line*/

        (3) SplitStringToArray(strArray,line," ");/*split the line by space*/

        (4)ifstrArray.GetSize() <4then/*check the line*/

        (5)exitwhile;

        (6)end

        (7) pSD = ADChain.AddSDList();/*createSD*/

        (8) …/*read thePort、St、Rn、Pre…*/

        (9) AnalysisProtocol(strArray[4],pSD); /*analysis and update the protocol*/

        (10) SplitStringToArray(strArray,line.right(strArray[5])," ");/*split the data*/

        (11)fori ← 0 to strArray.GetSize()-1do/*analysis the keyword data and fix data*/

        (12)ifis theKDthen/*isKD*/

        (13) pKD = pSD.AddKDList();/*createKD*/

        (14) pKD.AnalysisKD(strArray[i]);/*analysis theKD*/

        (15) …/*update theKD*/

        (16) pSD.Data = 0;/*fill the 0*/

        (17)else/*is FData*/

        (18) pSD.Data = strArray[i];/*fill the fix data*/

        (19)end

        (20)end

        (21)end

        (22)returnADChain.count;

        PDChain解析實(shí)現(xiàn)過(guò)程如下。

        Algorithm:LoadPDChain

        Input:(strPath) /*Passive Test file Path */

        Output:(count) /*The count ofPDChain*/

        (1)p_file = OpenFile(strPath,"r");/*open file*/

        (2)PDNum = GetPDCount();/*get thePDCount from file*/

        (3)fori ← 0 to PDNum-1do

        (4) pPD = PDChain.AddPDList();/*createPD*/

        (5) pPD.PC = GetPC(p_file);/*read thePC*/

        (6)forj ← 0 to RDNum-1do/*read theRD*/

        (7) pRD = pPD.AddRDList();/*createRD*/

        (8)fork ← 0 to SDNum-1do

        (9) pSD = pRD.AddSDList();/*createSD*/

        (10) …/*read thePort、St、Rn、Pre…*/

        (11) AnalysisProtocol(p_file,pSD);/*analysis and update the protocol*/

        (12) …/*analysis the keyword data and fix data*/

        (13)end

        (14)end

        (15)end

        (16)returnPDChain.count;

        數(shù)據(jù)解析與顯示界面實(shí)現(xiàn)結(jié)果如圖3所示。

        圖3 數(shù)據(jù)解析與顯示界面

        3.2.2 數(shù)據(jù)輸入模塊

        數(shù)據(jù)輸入模塊按時(shí)間序列對(duì)各輸入數(shù)據(jù)獨(dú)立進(jìn)行管理,當(dāng)數(shù)據(jù)輸入時(shí)刻到達(dá)后根據(jù)關(guān)鍵字自動(dòng)生成測(cè)試數(shù)據(jù)并注入到指定的端口,包括數(shù)據(jù)輸入時(shí)刻計(jì)算與數(shù)據(jù)自動(dòng)生成。

        數(shù)據(jù)輸入時(shí)刻計(jì)算:針對(duì)任意輸入數(shù)據(jù),其數(shù)據(jù)輸入時(shí)刻Ti的計(jì)算如下

        Ti=T0i+Tsi+j×Tci

        (1)

        式中:i∈[1,n],j∈[0,Ri],n表示輸入數(shù)據(jù)的個(gè)數(shù),Ri表示第i個(gè)數(shù)據(jù)輸入次序,T0i表示相對(duì)零點(diǎn)時(shí)刻的間隔時(shí)間,Tsi表示數(shù)據(jù)輸入的延時(shí)時(shí)間,Tci表示數(shù)據(jù)輸入的間隔時(shí)間。針對(duì)T0i的計(jì)算,主動(dòng)數(shù)據(jù)與被動(dòng)數(shù)據(jù)計(jì)算方式不同。

        主動(dòng)數(shù)據(jù):主動(dòng)數(shù)據(jù)無(wú)前置條件,嚴(yán)格按照時(shí)序執(zhí)行,無(wú)須等待,故T0i=0;

        被動(dòng)數(shù)據(jù):被動(dòng)數(shù)據(jù)存在前置條件,需等待前置條件滿足,故當(dāng)?shù)趇個(gè)被動(dòng)數(shù)據(jù)的前置條件滿足后以當(dāng)前時(shí)刻t為T(mén)0i,即T0i=t,在T0i未取值前不進(jìn)行Ti的計(jì)算。

        當(dāng)Ti=t時(shí)將計(jì)算后的數(shù)據(jù)注入到指定端口進(jìn)行發(fā)送,隨后j=j+1,繼續(xù)計(jì)算Ti直到j(luò)>Ri則表示該數(shù)據(jù)輸入完成。

        數(shù)據(jù)自動(dòng)生成:數(shù)據(jù)的生成包括固定數(shù)據(jù)(FD)生成與關(guān)鍵字?jǐn)?shù)據(jù)(KD)生成,生成的數(shù)據(jù)為多個(gè)十六進(jìn)制數(shù)據(jù)組成的集合 {d1,d2,…,dn}。固定數(shù)據(jù)直接取值即可,即di=FDi,其中di表示第i個(gè)字段。

        根據(jù)關(guān)鍵字?jǐn)?shù)據(jù)生成規(guī)則,其生成過(guò)程如下:

        初值計(jì)算:根據(jù)關(guān)鍵字中的Key與Pos計(jì)算初值y0,具體如下:

        握手?jǐn)?shù)據(jù):直接從接收數(shù)據(jù)中取值,即y0=Rs~Re,其中R表示接收數(shù)據(jù)集合,s與e是Pos中表示的數(shù)據(jù)起始與終點(diǎn)位置。

        時(shí)間數(shù)據(jù):直接根據(jù)時(shí)間規(guī)則計(jì)算時(shí)間,即y0=t,其中t可表示當(dāng)前日期、時(shí)間等。

        連續(xù)數(shù)據(jù):從數(shù)據(jù)范圍的s→e逐次獲取數(shù)據(jù),并逐次加1,即

        (2)

        離散數(shù)據(jù):直接從Pos表示的序列中獲取數(shù)據(jù),即y0∈{Pos1,Pos2,…,Posn},根據(jù)發(fā)送次數(shù)逐次獲取。

        校驗(yàn)數(shù)據(jù):計(jì)算指定區(qū)間s→e字段的校驗(yàn)值,即y0=Fc{ds,ds+1,…,de},其中Fc表示校驗(yàn)運(yùn)算,包括和校驗(yàn)、CRC校驗(yàn)、異或校驗(yàn)等。

        特殊功能數(shù)據(jù):根據(jù)功能字段直接計(jì)算數(shù)據(jù),如長(zhǎng)度關(guān)鍵字(len)則表示取發(fā)送數(shù)據(jù)長(zhǎng)度,即y0=n,其中n表示發(fā)送數(shù)據(jù)長(zhǎng)度。

        表達(dá)式計(jì)算:將計(jì)算的初值y0與表達(dá)式f進(jìn)行加權(quán)計(jì)算y=f1×y0+f2,其中f1為縮放表達(dá)式,用于對(duì)初值進(jìn)行縮放,f2為偏移表達(dá)式,用于對(duì)初值進(jìn)行偏移修正,支持線性與非線性表達(dá)式。

        再根據(jù)Mode填充數(shù)據(jù),填充序列如下

        (3)

        (4)

        數(shù)據(jù)輸入模塊的實(shí)現(xiàn)過(guò)程如下。

        Algorithm:SendData

        Input:(rxd,t)/*The receive data rxd,The time t*/

        Output:(txd) /*The send data txd*/

        (1)txd= null;/*set the txd is null*/

        (2)/*check the the Passive data timing*/

        (3)fori ← 0 to PDChain.Countdo

        (4) PCRes[i]=CheckPC(PDChain[i],rxd);/*checkPC*/

        (5)ifPCRes[i]== 1then

        (6) T0[i]=t;/*update theT0*/

        (7) …/*add toSChain*/

        (8)end

        (9)end

        (10)/*check Ti and create txd*/

        (11)fork ← 0 to SChain.Countdo/*include theADChainandPDChainwhich the T0≠0*/

        (12)ifT[k]== tthen/*timing is coming*/

        (13)fori ← 0 to SD.Countdo/*calculate data*/

        (14)ifSDisFDatathen

        (15)txd[i]= FD[i];

        (16)else/*isKData*/

        (17) y0=Calcy0(KD[i]);/*calculate y0*/

        (18) y=Calcy(KD[i],y0);/*calculate y*/

        (19)txd=FillData(KD[i],y);/*Fill Data*/

        (20)end

        (21)end

        (22) SChain[k].inx++;/*send sequence*/

        (23)ifSChain[k].inx <= SChain[k].Rthen

        (24) T[k]=T0[k]+SChain[k].Ts+ SChain[k].inx × SChain[k].Tc;/*calculate the nextTi*/

        (25)else

        (26) …/*remove the SChain[k]fromSChain*/

        (27)end

        (28)end

        (29)end

        (30)returntxd;

        4 實(shí)例驗(yàn)證

        通過(guò)某監(jiān)控嵌入式軟件的狀態(tài)查詢(xún)與靜檢功能對(duì)該框架進(jìn)行驗(yàn)證,監(jiān)控軟件運(yùn)行后周期接收下位機(jī)發(fā)送的自檢結(jié)果“55 AA 01 …”與狀態(tài)信息“AA/BB 7E …”并進(jìn)行解析,另外可主動(dòng)發(fā)送靜檢命令“55 AA 03 …”、“55 81 02 00”,待下位機(jī)收到靜檢命令后被動(dòng)反饋應(yīng)答“55 AA/BB …”及靜檢結(jié)果“AA 7E …”。首先根據(jù)監(jiān)控軟件狀態(tài)查詢(xún)與靜檢功能的輸入輸出數(shù)據(jù)流構(gòu)建如圖4需要發(fā)送的輸入數(shù)據(jù)文件。

        圖4 輸入數(shù)據(jù)文件

        其中字段“l(fā)en[]”表示特殊功能數(shù)據(jù)的長(zhǎng)度數(shù)據(jù),取數(shù)據(jù)字段的總長(zhǎng)度;字段“time32[]”表示時(shí)間數(shù)據(jù),取系統(tǒng)當(dāng)前時(shí)間;字段“cnt16[0~10]*10”表示連續(xù)數(shù)據(jù),數(shù)據(jù)范圍為[0~100],間隔10;字段“sum8[0~len-2]”表示校驗(yàn)數(shù)據(jù),計(jì)算指定區(qū)間數(shù)據(jù)的和校驗(yàn);字段“rec[3~4]”表示握手?jǐn)?shù)據(jù),表示取接收數(shù)據(jù)的第3~4字節(jié)。

        運(yùn)行該測(cè)試框架,讀取數(shù)據(jù)文件,發(fā)送數(shù)據(jù),框架實(shí)例化各關(guān)鍵字生成相應(yīng)的測(cè)試數(shù)據(jù)并按照時(shí)序逐次向監(jiān)控軟件發(fā)送數(shù)據(jù),具體結(jié)果如圖5所示。

        圖5 主動(dòng)發(fā)送數(shù)據(jù)結(jié)果

        另外對(duì)監(jiān)控軟件發(fā)送的目標(biāo)數(shù)據(jù)進(jìn)行接收,當(dāng)接收到靜檢命令后進(jìn)行前置條件判斷,滿足要求后生成測(cè)試數(shù)據(jù)并按照時(shí)序要求向監(jiān)控軟件進(jìn)行被動(dòng)發(fā)送,具體結(jié)果如圖6所示。

        圖6 被動(dòng)發(fā)送數(shù)據(jù)結(jié)果

        對(duì)發(fā)送的數(shù)據(jù)的時(shí)間性能進(jìn)行分析,具體見(jiàn)表1。

        表1 數(shù)據(jù)發(fā)送時(shí)間測(cè)試結(jié)果/ms

        另外,再通過(guò)其它工具實(shí)現(xiàn)圖4中的數(shù)據(jù)發(fā)送行為,其操作結(jié)果對(duì)比見(jiàn)表2。

        表2 不同類(lèi)型工具操作結(jié)果對(duì)比分析

        根據(jù)測(cè)試結(jié)果可知,該自動(dòng)化測(cè)試框架能夠正確解析數(shù)據(jù)文件,實(shí)現(xiàn)測(cè)試數(shù)據(jù)的主動(dòng)與被動(dòng)輸入,自動(dòng)實(shí)例化關(guān)鍵字并生成測(cè)試數(shù)據(jù)進(jìn)行發(fā)送,發(fā)送數(shù)據(jù)內(nèi)容、時(shí)序正確,數(shù)據(jù)處理效率在毫秒級(jí),能夠滿足嵌入式軟件數(shù)據(jù)處理實(shí)時(shí)性要求。

        5 結(jié)束語(yǔ)

        本文將數(shù)據(jù)與關(guān)鍵字驅(qū)動(dòng)思想應(yīng)用到嵌入式軟件測(cè)試中,設(shè)計(jì)并研制了一款輕量級(jí)嵌入式軟件自動(dòng)化測(cè)試框架。相較于傳統(tǒng)嵌入式軟件測(cè)試框架,該框架能夠控制測(cè)試數(shù)據(jù)的輸入時(shí)序與條件,同時(shí)可實(shí)現(xiàn)測(cè)試數(shù)據(jù)的自適應(yīng)生成;相較于專(zhuān)業(yè)嵌入式軟件測(cè)試框架,該框架將測(cè)試數(shù)據(jù)與測(cè)試腳本完全分離,省略了測(cè)試過(guò)程中復(fù)雜的測(cè)試腳本編寫(xiě)過(guò)程,降低了測(cè)試環(huán)境搭建時(shí)間與難度,另外簡(jiǎn)明、格式化的數(shù)據(jù)結(jié)構(gòu)能夠使測(cè)試人員快速構(gòu)造測(cè)試數(shù)據(jù)進(jìn)行測(cè)試,提升了測(cè)試效率,工程實(shí)用性較強(qiáng)。

        根據(jù)實(shí)例驗(yàn)證可知,該框架可用于嵌入式軟件測(cè)試,并已在多個(gè)嵌入式軟件測(cè)試中進(jìn)行應(yīng)用。但該框架目前測(cè)試數(shù)據(jù)自動(dòng)生成策略尚未結(jié)合測(cè)試設(shè)計(jì)方法,后續(xù)將測(cè)試設(shè)計(jì)方法融合其中實(shí)現(xiàn)基于模型的測(cè)試數(shù)據(jù)自動(dòng)生成,以適應(yīng)復(fù)雜系統(tǒng)的測(cè)試。

        猜你喜歡
        前置條件嵌入式軟件關(guān)鍵字
        履職盡責(zé)求實(shí)效 真抓實(shí)干勇作為——十個(gè)關(guān)鍵字,盤(pán)點(diǎn)江蘇統(tǒng)戰(zhàn)的2021
        房屋建筑和市政基礎(chǔ)設(shè)施工程施工招標(biāo)投標(biāo)管理辦法研究
        成功避開(kāi)“關(guān)鍵字”
        人工智能技術(shù)構(gòu)筑智能政府的前置條件研究
        論“自動(dòng)投案”的司法適用
        實(shí)時(shí)嵌入式軟件的測(cè)試技術(shù)
        全景相機(jī)遙控器嵌入式軟件V1.0 相關(guān)操作分析
        電子制作(2017年17期)2017-12-18 06:40:56
        基于Eclipse的航天嵌入式軟件集成開(kāi)發(fā)環(huán)境設(shè)計(jì)與實(shí)現(xiàn)
        航天嵌入式軟件浮點(diǎn)運(yùn)算誤差分析與控制
        我國(guó)工程項(xiàng)目建設(shè)前期工作中一個(gè)亟待修正的程序——項(xiàng)目的“可行性研究報(bào)告”不應(yīng)設(shè)為“方案設(shè)計(jì)”的前置條件
        亚洲日本国产乱码va在线观看| 亚洲一区二区三区无码久久| 亚洲成av人片在线观看无码 | 亚洲黄色尤物视频| 久草视频在线视频手机在线观看| 日韩人妻中文字幕高清在线| 东京热人妻无码一区二区av | 亚洲九九九| 久久精品人妻一区二三区 | 少妇人妻大乳在线视频不卡| 五月天激情综合网| 色综合久久五月天久久久| 日本a级免费大片网站| 久久99国产精一区二区三区| 91在线精品老司机免费播放| 亚洲av粉色一区二区三区| 国产高清在线一区二区不卡| 亚洲精品无码久久久久av老牛| 911精品国产91久久久久| 亚洲av第一区综合激情久久久| 丁香婷婷在线成人播放视频| 国产精品51麻豆cm传媒| 国产一区二区精品尤物| 精品日本免费观看一区二区三区| 日韩在线 | 中文| 无码手机线免费观看| 伊在人亚洲香蕉精品区麻豆| 亚洲熟女乱一区二区三区| 久久久久久亚洲av成人无码国产 | 成人影院羞羞的视频免费观看| 国产大片内射1区2区| 亚洲综合一区无码精品| 亚洲午夜久久久精品国产| 麻豆69视频在线观看| 欧美aaaaaa级午夜福利视频| 亚洲日韩区在线电影| 伊人精品成人久久综合97| 欧美国产综合欧美视频| 国产人成午夜免电影观看| 99久久精品国产一区色| 国产精品久久久久久av|