999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Kaputt在核安全級軟件單元測試上的應(yīng)用研究

2017-08-31 12:39:56北京廣利核系統(tǒng)工程有限公司董玲玲曹宗生李旗劉元
自動化博覽 2017年5期
關(guān)鍵詞:語言

★北京廣利核系統(tǒng)工程有限公司 董玲玲,曹宗生,李旗,劉元

Kaputt在核安全級軟件單元測試上的應(yīng)用研究

★北京廣利核系統(tǒng)工程有限公司 董玲玲,曹宗生,李旗,劉元

在核安全級軟件的測試中,單元測試是必不可少的測試手段之一。目前,部分核安全級軟件采用函數(shù)式編程語言O(shè)Caml開發(fā),但針對該語言開發(fā)的核安全級軟件進行單元測試,尚缺乏具體的執(zhí)行標準,通過確認測試來補充。本文提出采用第三方測試工具Kaputt對OCaml開發(fā)的核安全軟件進行單元測試的方法,介紹Kaputt的測試模式、測試執(zhí)行過程,及測試后分析關(guān)鍵字的覆蓋率,以判斷測試是否完備。該方法已在自主化核安全級軟件測試中進行實踐,取得良好的效果。

函數(shù)式編程;OCaml;Kaputt;單元測試

1 引言

近年來,隨著計算機軟件在尖端領(lǐng)域的應(yīng)用,如航空領(lǐng)域、軌道交通領(lǐng)域、核電領(lǐng)域,人們與軟件的接觸越來越多,軟件已成為人們生活中的必需品,如果軟件系統(tǒng)的任何一個環(huán)節(jié)工作失敗或遭受攻擊都會帶來難以預(yù)料的后果,給人們的生產(chǎn)和生活帶來巨大的災(zāi)難,甚至造成不可恢復(fù)的創(chuàng)傷,因此軟件安全的重要性與日劇增[1]。

單元測試在軟件開發(fā)過程中起到舉足輕重的作用,它能以較高的效率發(fā)現(xiàn)軟件中潛在的缺陷,在這個階段修改缺陷的成本較低[2]。單元測試是保證軟件質(zhì)量的重要手段。核安全級產(chǎn)品的可靠性一直是核電領(lǐng)域的關(guān)注點,函數(shù)式編程語言O(shè)Caml逐漸應(yīng)用在核安全級軟件的開發(fā),為防止軟件在使用中出現(xiàn)重大事故,需要對核安全級軟件進行完備的測試,因此對OCaml開發(fā)軟件的測試工作的需求顯得尤為迫切。眾所周知,對于C或C++編寫的代碼,可以采用C++TEST或是Testbed工具完成測試,Java編寫的程序可以用Junit作為單元測試工具。對于硬件編程語言Verilog編寫的程序同樣有對應(yīng)的仿真工具Qutasim或Modelsim完成代碼測試。而如何對函數(shù)式語言編寫的程序進行單元測試,尚未有公用的測試工具。

目前有針對函數(shù)式編程語言O(shè)Caml編寫的程序測試的工具Kaputt(A Popperian Unit Testing Tool),它能幫助我們進行有效的測試,能提供測試相關(guān)的指標并顯示,輔助我們完成單元測試工作。

2 函數(shù)式編程語言

目前常用的計算機語言,如C、Java被稱為命令式編程語言,是以諾伊曼式的計算機為設(shè)計背景,通過不斷修改存儲帶上的單元值,以一種命令的方式進行計算;此外還有一種編程語言為函數(shù)式編程語言,它具有較強的數(shù)據(jù)表達性,它將計算機計算視為函數(shù)的計算,由函數(shù)定義和調(diào)用構(gòu)成計算程序,其理論基礎(chǔ)是λ演算,該演算可以接受函數(shù)當作輸入(引數(shù))和輸出(傳出值)[3]。主要的函數(shù)式編程語言有20世紀80年代末發(fā)布的Haskell語言,它是在Miranda的基礎(chǔ)上得到的,是對Miranda進行了標準化,這種語言集合了其他相關(guān)函數(shù)式編程開發(fā)的原理,它無需花費太多的贅述就能完成一些數(shù)據(jù)結(jié)構(gòu),比如鏈表和矩陣。它的語言衍生物有很多,有擴充的Haskell、并行Haskell和面向?qū)ο蟮淖凅w如Mondrian等。與此同時,它還被用作為在新語言設(shè)計時的標準模板。另一種函數(shù)式編程語言是Clean,它和Haskell有很多一樣的地方,目前這門語言是用C寫成的,由尼茲梅根大學負責維護[4]。

此外還有一種函數(shù)式編程語言是OCaml, 近幾年也得到了廣泛的發(fā)展。OCaml最早稱為Objective Caml,是Caml編程語言的主要實現(xiàn),開發(fā)工具包含交互式頂層解釋器,字節(jié)編譯器以及最優(yōu)本地代碼編譯器。其中由OCaml編寫的COQ定理證明器在形式化證明領(lǐng)域得到很好的應(yīng)用。OCaml目前由法國國家信息與自動化研究所(INRIA)管理和維護。

3 Kaputt單元測試方法

INRIA機構(gòu)提供了OCaml的單元測試工具Kaputt。有兩種測試模式,一種是基于斷言比較的模式,另一種是基于規(guī)范的模式。

斷言比較模式,是指通過斷言比較的方式,簡單判斷函數(shù)的輸出和期望是否相等,從而判斷用例是否執(zhí)行成功。基于說明的模式,是指可以按指定輸入類型隨機產(chǎn)生用例,并且比較輸入和輸出。這種模式,并不能支持復(fù)雜的類型,僅限于通用的類型,比如int、string這類比較簡單的。本質(zhì)上,基于說明的模式是斷言比較模式的改進。

3.1 斷言模式

斷言模式的測試流程如圖1所示。

圖1 斷言模式的測試流程

Kaputt軟件的斷言模式,需要對測試的代碼塊進行分析,識別單元測試用例,從用例中抽取斷言,將斷言通過runtest函數(shù)與被測試的代碼關(guān)聯(lián)在一起,運行runtest,可得出結(jié)果,通過會提示pass,不通過提示faild,并給出期望值。

OCaml函數(shù)的特點,分支多、參數(shù)層層嵌套、逐層展開,利用“矩陣輸入法”,構(gòu)造輸入,進一步判斷函數(shù)的運行流程和期望結(jié)果。

以一個tanslate_call_assign為例,該函數(shù)為遞歸函數(shù),參數(shù)有(lhs_list,lrv,cids,lids)函數(shù)內(nèi)部又調(diào)用了assign_check函數(shù),還有一些case條件(e,t,t0)。輸入的測試用例,應(yīng)該以lhs_list,lrv,cids,lids,e,t,t0為對象構(gòu)造,用矩陣的每行對應(yīng)這些輸入變量,末尾再加上Output,矩陣的每列則代表每個變量的取值,每一行,對應(yīng)了函數(shù)的一種分支,這樣用矩陣輸入法可以清晰地把用例表示出來,如表1所示:

表1 矩陣輸入法構(gòu)造測試用例

3.2 規(guī)范模式

Kaputt基于規(guī)范的測試是由函數(shù)Test.make_ random_test生成,由9部分構(gòu)成:(1)文件名;(2)整型的數(shù)字,用于規(guī)定生成多少個用例;(3)生成規(guī)范匹配的數(shù)值;(4)分類器,把生成的測試用例進行分類;(5)簡化器,用來生成最小的反例;(6)隨機激勵源;(7)生成器;(8)被測試的函數(shù);(9)規(guī)范;下面表格的代碼是采用基于規(guī)范的測試設(shè)計,測試生成的字符串是短型的還是長型的。

表2 規(guī)范模式的測試用例設(shè)計

4 Kaputt單元測試應(yīng)用

Kaputt斷言的測試方法與常見的測試方法相似,當輸入測試用例時,要預(yù)測出相應(yīng)的測試結(jié)果,用斷言assert將期望值與實際值進行比較,當數(shù)值不一致時報測試失敗。在測試代碼前,需要打開Kaputt. Abbreviations;通過Test.make_assert_test函數(shù)聲明使用的斷言的方式測試,具體步驟為:(1)聲明文件名;(2)建立一個函數(shù);(3)assert斷言聲明預(yù)期值;(4)測試用例執(zhí)行。

對冪函數(shù)進行測試:

用遞歸的方法定義一個冪函數(shù):

(fun() -〉A(chǔ)ssert.equal_float 81537.26976 power(5 9.6))

Let () = Test.run_tests[t1,t2,t3];

測試后,顯示的結(jié)果如下:

val power : int -〉 float -〉 float = 〈fun〉

val t1 : Kaputt.Test.t = 〈abstr〉

val t2 : Kaputt.Test.t = 〈abstr〉

val t3 : Kaputt.Test.t = 〈abstr〉

Test 'test case 1' ... passed

Test 'test case 2' ... passed

Test 'test case 3' ... passed

所有的測試用例均通過。

5 工程實踐應(yīng)用

編譯器是圖形化核安全級軟件集成開發(fā)環(huán)境中的一個重要工具,它能把圖形模型或者文本模型轉(zhuǎn)換成等價的C程序。目前,為保證翻譯的可信性,有些工具的開發(fā)內(nèi)部嵌入形式化驗證的方法,比如實時嵌入式系統(tǒng)SCADE,它通過直觀的圖形化的建模和模擬仿真,再經(jīng)過形式化驗證,自動生成可直接面向工程的標準C代碼[5~8],保證了軟件需求和代碼執(zhí)行的高度同步。

為實現(xiàn)數(shù)字化核儀控設(shè)備的自主化,我們開發(fā)了一套類似功能的可信翻譯器,將圖形化的語言Lustre與形式化驗證工具Coq結(jié)合,完成C代碼的翻譯工作。其中部分形式開發(fā)工作采用OCaml實現(xiàn),為驗證該部分程序的正確性,可應(yīng)用OCaml單元測試工具Kaputt完成,如圖2所示。

圖2 可信編譯器開發(fā)過程

采用Flex和Bison工具對被翻譯的Lustre語言進行詞法、語法的分析,抽象出其中的語法樹,對該語法樹進行靜態(tài)語義檢查,然后在COQ平臺上開發(fā)相應(yīng)的程序,將Lustre*AST轉(zhuǎn)換Lustre-AST,最終把Lustre-AST翻譯成可下裝的C語言,完成從Lustre語言到C的翻譯過程。最后一步采用了OCaml語言開發(fā),同時采用基于COQ定理證明的方式保證該步的正確性。針對OCaml開發(fā)的部分可采用單元測試的方式提高安全性。

5.1 測試環(huán)境搭建

首先將所有被測的后綴為.ml函數(shù)編譯成一個庫文件,庫文件的后綴為.cma格式。可針對每個文件或每個函數(shù)編寫一個測試文件,編譯時鏈接上庫文件和Kaputt、Bisect的庫文件,就能得到可執(zhí)行的測試程序。這種環(huán)境有效保證了每個測試人員的工作獨立性,并且容易統(tǒng)計測試結(jié)果。

測試的輸入直接為測試用例的文件,比如設(shè)定.ast為測試用例的文件,觀察覆蓋率。如輸入語句:run:

BISECT_FILE=coverage ./bytecode srs_ l2c_syn_001.ast

5.2 測試結(jié)果

測試結(jié)果如表3、表4所示,關(guān)鍵語句if/then、for、whlie均有覆蓋率顯示。驅(qū)動模塊Driver.ml覆蓋率為82%,打印語義分析模塊printCsyntax.ml覆蓋率為43%等。通過Kaputt軟件的測試,可以統(tǒng)計出關(guān)鍵字的覆蓋率,對未覆蓋到的部分,測試人員可進行分析,是由于測試用例不夠全面未覆蓋到,還是防御性編程的原因沒有覆蓋到,并給出分析結(jié)果,此外該軟件還顯示出每個文件的關(guān)鍵字覆蓋率,達到單元測試的目的。

If/then 434/794(54%) Class value 0/0(-%) try 4/4(100%) Top level expression 18/18(100%) while 0/0(-%) Lazy operator 97/198(48%) Match/function 876/2004(43%)

表4 每個文件覆蓋率

6 結(jié)語

單元測試在軟件開發(fā)的生命周期中是不可或缺的一步,它能以最低的成本保證軟件的可靠性。本文介紹的基于Kaputt的OCaml單元測試方法的研究解決了工作中遇到OCaml編寫的程序無法進行單元測試的難題,該方法在工程實踐中得到了進一步的應(yīng)用,可以觀察軟件中的關(guān)鍵字的代碼覆蓋率是否滿足要求,提高代碼測試的效率。

[1] 譙婷婷, 王樂, 王芳, 等. 基于Coq的軟件安全性驗證研究與實現(xiàn)[J]. 計算機工程與應(yīng)用, 2012, ( A02 ) : 96 - 100.

[2] 郭榮. 基于Testbed的C++單元測試(動態(tài)測試)方法[J]. 網(wǎng)絡(luò)安全技術(shù)與安全, 2014 (3): 56 - 59.

[3] 陳付龍. 函數(shù)式程序設(shè)計語言的教學研究與探討[J]. 福建電腦, 2010, ( 6 ) : 23.

[4] 王學瑞. 函數(shù)式編程語言發(fā)展及應(yīng)用[J]. 計算機光盤軟件與應(yīng)用,2012( 23 ): 181 - 182.

[5] 林楓. 基于SCADE的形式化驗證技術(shù)研究[J]. 測控技術(shù), 2011, 30( 12 ):71 - 74.

[6] 陳鋼, 宋曉宇, 顧明. COQ定理證明器輔助PLC程序驗證和分析[J]. 北京大學學報(自然科學版),2010, 46(1) :30 - 34.

[7] 董威. 單元測試及測試工具的研究與應(yīng)用[J]. 微型電腦應(yīng)用,2008, 24(5) :24 - 26.

[8] 顏雯清, 李秀娟. SCADE平臺下C代碼的自動生成[J]. 計算機仿真,2007, 24(10):264 - 268.

Research of Kaputt Application in the Unit Testing of Nuclear Safety Grade Software

In nuclear software testing, the unit testing is one of the essential testing methods. At present, a part of nuclear safety grade software adopted the functional programming language OCaml for development, but the unit test of nuclear safety grade software developed by OCaml lacks specific execution standard, and supplement by validation tests. This article presents a method of unit testing for nuclear safety software developed by OCaml using third party test tool Kaputt, and introduces the testing mode, test execution process and the coverage of keyword after testing to judge whether the test is complete. This method was applied in autonomous nuclear safety software testing, obtaining good results.

Functional programming;OCaml; Kaputt; Unit testing

董玲玲(1986-),女,山東德州人,助理工程師,碩士,現(xiàn)就職于北京廣利核系統(tǒng)工程有限公司,主要從事單元測試、可編程邏輯驗證工作。

曹宗生(1976-),男,遼寧沈陽人,高級工程師,學士,現(xiàn)就職于北京廣利核系統(tǒng)工程有限公司,主要從事核電站數(shù)字儀控系統(tǒng)產(chǎn)品質(zhì)量控制及測試工作。

李 旗(1977-),男,黑龍江哈爾濱人,工程師,現(xiàn)就職于北京廣利核系統(tǒng)工程有限公司,主要從事系統(tǒng)測試工作。

劉 元(1973-),女,遼寧凌海人,高級工程師,碩士,現(xiàn)任北京廣利核系統(tǒng)工程有限公司公司副總工,主要從事核電項目的技術(shù)決策工作。

猜你喜歡
語言
詩之新,以語言創(chuàng)造為基
中華詩詞(2023年8期)2023-02-06 08:51:28
語言是刀
文苑(2020年4期)2020-05-30 12:35:30
讓語言描寫搖曳多姿
多向度交往對語言磨蝕的補正之道
累積動態(tài)分析下的同聲傳譯語言壓縮
日常語言與播音語言
新聞傳播(2016年10期)2016-09-26 12:15:04
語言技能退化與語言瀕危
我有我語言
論語言的“得體”
語文知識(2014年10期)2014-02-28 22:00:56
Only Words慎用你的語言
主站蜘蛛池模板: 美女啪啪无遮挡| 国产亚洲精品在天天在线麻豆 | 99视频全部免费| 国产在线拍偷自揄观看视频网站| av大片在线无码免费| 国产成人无码久久久久毛片| 青青草久久伊人| 亚洲欧美日韩成人高清在线一区| 精品视频一区在线观看| 国产成人夜色91| 91亚瑟视频| 国产免费羞羞视频| 综合亚洲网| 国产女人综合久久精品视| 99r在线精品视频在线播放| 久久精品一品道久久精品| 亚洲精品天堂在线观看| 日韩大乳视频中文字幕| 久久精品亚洲专区| 99久久精品国产精品亚洲| 国产乱码精品一区二区三区中文 | 午夜国产在线观看| 国产高清在线精品一区二区三区| 99九九成人免费视频精品| 免费无码AV片在线观看中文| 亚洲国产理论片在线播放| 尤物在线观看乱码| 国产精品自在在线午夜| 精品乱码久久久久久久| 最新无码专区超级碰碰碰| 久草青青在线视频| 美女高潮全身流白浆福利区| 久久精品无码一区二区日韩免费| 国产精品黄色片| 国产一级α片| 亚洲免费播放| 久久性视频| 亚洲人成网站色7777| 国产一级一级毛片永久| 99精品影院| 91www在线观看| 亚洲a级在线观看| 日韩人妻少妇一区二区| 亚洲天堂视频在线观看| 日韩欧美网址| 国产性猛交XXXX免费看| 亚洲性日韩精品一区二区| 亚洲美女一区| 国产自产视频一区二区三区| 自拍偷拍欧美日韩| a欧美在线| 久久综合亚洲鲁鲁九月天| 亚洲国产精品日韩av专区| 高清无码一本到东京热| 精品一区国产精品| 香蕉在线视频网站| 99无码熟妇丰满人妻啪啪| 性网站在线观看| 国产成人综合日韩精品无码不卡| 久久特级毛片| 亚洲性影院| 国内精品视频| 午夜成人在线视频| 无码内射中文字幕岛国片 | 一级毛片免费观看久| 高清码无在线看| 国产人人乐人人爱| 国产亚洲视频中文字幕视频| 久久精品中文字幕免费| 91探花国产综合在线精品| 成人中文字幕在线| 国产成人啪视频一区二区三区| 91精品久久久无码中文字幕vr| 精品超清无码视频在线观看| 国产美女在线观看| 精品欧美视频| 欧美精品H在线播放| 97在线视频免费观看| 国产第一色| 欧美一级爱操视频| 日韩二区三区| 亚洲欧洲日韩国产综合在线二区|