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

一種基于C#的Cantata工具變更過程改進方法

2021-05-14 07:47:42王玉婷連紅森
測控技術 2021年4期
關鍵詞:二次開發

周 毅, 王玉婷, 方 霞, 連紅森

(中國航發控制系統研究所,江蘇 無錫 214063)

航空發動機控制軟件(簡稱控制軟件)是一種嵌入式軟件,根據DO-178《民航機載軟件適航標準》的規定,屬于安全關鍵軟件[1]。為滿足適航認證,控制軟件必須要達成DO-178C提出的各項指標要求。其中,針對低層需求與高層需求的符合性這一目標,執行單元測試并建立追溯關系是一種常見的實現手段。

針對嵌入式軟件開發環境和運行環境不一致的現象,單元測試具有可在宿主機環境下執行、能提早測試介入時機且最大程度降低測試活動對目標環境依賴性等優點;然而,單元測試也存在著的測試驅動難編寫、測試程序難管理、測試結果難界定等問題。對此,市場上出現了一批如CppUnit、JUnit等開源測試框架[2]和Cantata、TestBed、Qt、TBrun等單元測試軟件[3-5]。

其中QA Systems公司推出的Cantata單元測試工具,可提供基于DO-178B的覆蓋率分析,目前已在國內外航空航天軟件的單元測試活動中得到廣泛應用[6-10]。該工具針對C/C++語言,通過使用EGT分析器提取源碼信息,結合插樁器和自動封裝技術,實現測試腳本一鍵生成;通過提供測試用例管理器,實現測試用例便捷管理;通過運行結果自動比對、覆蓋結果樹形分析技術,縮短測試驗證時間,確保驗證結論的正確性和完整性。

然而,由于Cantata工具在執行單元測試活動時所有過程均需基于服務器執行,而且工具對被測單元的隔離插樁過程與被測單元所屬文件有直接關聯。這就導致軟件升級時,若被測單元所屬文件發生變化,即使被測單元未發生更改,原有的單元測試用例也需要重新隔離插樁才能通過。由于隔離插樁過程需要人工操作,另外受到服務器響應和處理時間長的制約,在實際執行Cantata單元測試回歸時,需要耗費大量時間和人力來更新未變更函數的隔離插樁。

目前,國內外的相關文獻主要集中在對Cantata單元測試方法和工具使用的介紹說明[6-10]。針對本文提出的這一問題,尚未有具體解決方案。筆者提出了一種基于C#的Cantata工具變更過程改進方法。通過分析Cantata工具的單元測試插樁結果,提煉出工具的插樁規則,進而結合C#和正則表達式,完成源代碼變更前后差異分析,并依照提煉的插樁規則,自動修改測試用例管理器中的測試腳本和被插樁后的代碼,實現未變更函數的自動隔離插樁。從而解決人工操作煩瑣和隔離插樁過程對Cantata服務器強依賴的問題。

1 基于C#的Cantata變更過程改進方法

1.1 整體方案分析

Cantata工具執行單元測試過程主要由源代碼隔離插樁、測試腳本生成、可執行文件構建和運行這4個活動組成,各活動均由服務器執行并將相應結果返回給用戶,具體如圖1所示。

圖1 Cantata單元測試原理圖

由于Cantata工具使用C文件作為自動封裝的最小單位(一個自動封裝可包含多個C文件),當被測單元所處自動封裝中的C文件出現全局變量、函數或外部函數調度變化時,即使被測函數沒有任何變更,也必須更新自動封裝,重新執行隔離插樁,才能確保單元測試用例執行通過。

Cantata測試用例管理器通過管理test_FuncX.c、test.mk和ipg.cop這3個文件來管控生成的測試腳本和被插樁代碼。

其中,test.mk是測試腳本的makefile信息,用于指導Build構建器編譯生成可執行文件;ipg.cop是測試級別配置文件,描述需要被隔離的全局變量和函數,指導Cantata工具自動生成被測函數FuncX()的隔離插樁信息;test_FuncX.c是被測函數FuncX()的測試腳本,用于存儲被測函數的環境定義、覆蓋率分析方式、測試用例和隔離插樁接口等信息。

據此,在進行工具二次開發時,通過執行代碼分析,識別出變更后代碼新增、刪除的全局變量、函數和函數調用信息,再將這些信息按照Cantata單元測試的格式要求,更新到test_FuncX.c、test.mk和ipg.cop中,實現對未變更單元的測試腳本和被插樁代碼的更新。二次開發后的Cantata單元測試原理如圖2所示。

圖2 二次開發后的Cantata單元測試原理圖

由圖2可以看出,基于C#的Cantata工具二次開發可以脫離對服務器的依賴,自動識別源碼的變更信息,完成測試腳本和被插樁代碼的修改。

1.2 Cantata插樁規則提煉

通過分析Cantata單元測試結果,對Cantata插樁規格進行了提煉。圖3展示了某待測試文件XX.c的文件結構,包括全局變量GLB_a、函數FuncX()和FuncY(),其中FuncY()調用了一個外部函數UT_a()。

圖3 XX.c文件結構示意圖

當FuncX()作為被測函數時,Cantata工具對test_FuncX.c、test.mk和ipg.cop文件的插樁規則如下。

① test_FuncX.c中,待隔離函數FuncY()的插樁規則如下:

/* Iaolate for function FuncY */

void ISOLATE_FuncY(void){

REGISTER_CALL(“FuncY”);

IF_INSTANCE(“default”){return;}

LOG_SCRIPIT_ERROR(“Call instance not defined.”);

Return;}

② test_FuncX.c中,全局變量GLB_a量的隔離規則如下:

/* Global data */

int GLB_a;

/* Expected variables for global data */

int expected_GLB_a;

static void initialse_global_data(){

TEST_SCRIPT_WARNING(“Verify initialse_global_data() ”);

INITIALISE(GLB_a);

}static void initialse_expected_global_data(){

TEST_SCRIPT_WARNING(“Verify initialse_expected_global_data() ”);

COPY_TO_EXPECTED(GLB_a, expected_GLB_a);}

static void check_global_data(){

TEST_SCRIPT_WARNING(“Verify check_global_data() ”);

CHECK_MEMORY(“GLB_a”, &GLB_a, &expected_GLB_a, sizeof(expected_GLB_a));}

③ ipg.cop中,待隔離函數funcY()和UT_a()的插樁規則如下:

“--sm:--isolate:FunY()”

“--sm:--isolate:UT_a()#FunY()”

④ ipg.cop中,全局變量GLB_a的隔離規則:

“--sm:--access_variable:”XX.c”:GLB_a”

1.3 二次開發方法設計

基于C#進行Cantata工具二次開發時,主要難點在于源代碼分析和變更差異比對。對此,以文件為單位,設計了文件信息的數據結構,具體的文件信息類圖如圖4所示。數據結構通過對頭文件引用、宏、數據結構、全局變量、函數聲明、函數等信息進行分類存儲,實現變更差異的快速識別和比對。

圖4 FileInformation類圖

文件信息提取流程如圖5所示。為便于使用正則表達式提取源碼中的有效信息,首先需對源碼進行規格化處理,具體為剔除源碼中條件編譯忽略的代碼、注釋代碼、不規范和冗余的空格信息。由于條件編譯的判斷條件多使用宏信息,故需要先對源碼進行一次宏定義分析,再按照定制的形式進行規格化處理,導出規格化后的源碼。

圖5 文件信息提取流程圖

源碼規格化后,按照各數據結構類型特點設計相應的正則表達式,依次提取頭文件引用、宏定義、基本數據類型、特殊數據類型、函數聲明、全局變量、函數信息,完成源碼的文件數據結構提取。其中,特殊數據類型特指枚舉、位域結構體和結構體類型,另外考慮到同義宏的存在,設計了遞歸方法執行同義宏的分類和存儲。

完成變更前后源碼的文件信息提取后,以文件為單位采用循環遍歷的方式,判斷并記錄對應文件中所有全局變量、函數及函數調用的變更狀態(共設計3種狀態:增加、刪除、無變化)。依據記錄的變更狀態,按照Cantata隔離插樁格式要求,更新用例管理器中未變化函數的單元測試用例腳本,實現未變更部分的自動隔離插樁。

2 項目應用實踐與結果分析

在某項目升級過程中,應用基于C#的Cantata工具二次開發方法。通過選中變更前后源碼和Cantata測試用例管理器的位置,一鍵運行后,完成受升級影響的非變更測試用例隔離插樁的自動修改。具體運行界面如圖6所示。

圖6 運行界面

更改結果顯示,此次變更前后源碼共涉及17個文件、9個全局變量、81個函數的變更。使用Beyond Compare工具比對變更前后源碼并人工分析,結果顯示與C#的Cantata工具二次開發方法提取的結果一致,信息提取功能和變更比對功能正常。

此次變更前共計有436個單元測試腳本,變更前后共影響到123個測試腳本的關聯修改,修改量占28.2%。以其中一個關聯修改的測試腳本為例,進行分析:task.c文件共有5個函數,比對變更前后的源碼,其中僅task_bigLoop()函數里新增了函數調度ISM_Excute25ms(),會同步影響該C文件中其他4個未變更函數測試腳本的隔離插樁。觀察分析對應未變更函數自動修改后的測試腳本可知,測試腳本中均按照格式要求完成了腳本修改,具體結果如圖7所示。

圖7 測試用例腳本修改結果

完成81個變更函數對應的測試腳本修改后,在Score環境下批跑所有的444個測試腳本,導出結果如圖8所示。結果顯示,所有自動隔離插樁的函數均通過,其中11個未通過的函數均為特殊實現原因導致覆蓋率無法滿足的函數,與自動隔離插樁過程無關。

圖8 Cantata單元測試用例批跑結果

基于Cantata服務器進行人工手動隔離插樁時,平均每個測試腳本需花費大約10 min。使用二次開發方法后,平均只需要不到3 min即可完成所有未變更函數測試腳本隔離插樁工作。以本次123個測試腳本的關聯修改為例,二次開發方法可有效節省約20.45人時,測試工作效率有極大提升。

上述結果證明,基于C#的Cantata工具二次開發方法可準確識別變更前后的源碼信息并完成差異比對,能正確并快速實現未變更函數的自動隔離插樁工作。

3 結束語

通過分析航空發動機控制軟件升級過程,發現在依賴Cantata工具進行單元測試回歸時,存在未變更函數的測試腳本需重新人工手動隔離插樁,導致時間和人力耗費的問題,提出了一種基于C#的Cantata工具二次開發方法。項目實踐與分析結果表明,該方法能準確識別變更信息,正確并快速實現未變更函數的自動隔離插樁,極大提升了基于Cantata進行升級過程的單元測試效率,為達成DO-178C中低層需求與高層需求的符合性這一目標提供了有力支撐。

目前基于C#的Cantata工具二次開發方法已在3個項目的5次升級過程中得到應用,結果均正確可靠。但相較于市面上常見的源碼分析工具(如Eclipse CDT提供的API),本方法尚不支持函數內部語法分析,也未與同類型代碼分析工具進行優劣比對分析,這些可作為后續研究的一個方向。

猜你喜歡
二次開發
淺談基于Revit平臺的二次開發
甘肅科技(2020年20期)2020-04-13 00:30:02
西門子Operate高級編程的旋轉坐標系二次開發
淺談Mastercam后處理器的二次開發
模具制造(2019年3期)2019-06-06 02:11:02
基于C#的AutoCAD建筑構件庫二次開發
江西建材(2018年2期)2018-04-14 08:01:14
西門子Easy Screen對倒棱機床界面二次開發
基于全站儀二次開發的覆冰厚度測量與實現
電測與儀表(2016年9期)2016-04-12 00:29:52
Micaps3.2 版本二次開發入門淺析
西藏科技(2015年12期)2015-09-26 12:13:51
基于VB的ANSYS二次開發在變壓器抗短路性能分析中的應用
基于CATIA的橡皮囊成形毛料展開的二次開發
機械工程師(2015年9期)2015-02-26 08:38:10
ANSYS Workbench二次開發在汽車穩定桿CAE分析中的應用
汽車零部件(2014年5期)2014-11-11 12:24:32
主站蜘蛛池模板: 狠狠干欧美| 9啪在线视频| 精品人妻AV区| 国产亚洲精品无码专| 精品久久人人爽人人玩人人妻| 亚洲欧美自拍视频| 精品国产Ⅴ无码大片在线观看81| 性色生活片在线观看| 亚洲AV无码一区二区三区牲色| 天天摸天天操免费播放小视频| 国产91色| 午夜视频日本| 婷婷五月在线| 国产男女免费完整版视频| 国产又大又粗又猛又爽的视频| 午夜国产在线观看| 一本大道在线一本久道| 国产00高中生在线播放| 日韩无码一二三区| 亚洲国产高清精品线久久| 成人伊人色一区二区三区| 色久综合在线| 国产视频只有无码精品| 国产精品网址在线观看你懂的| 波多野结衣第一页| 国产高清不卡| 丁香婷婷久久| 亚洲自偷自拍另类小说| 91精品情国产情侣高潮对白蜜| 欧美成人影院亚洲综合图| 99精品国产自在现线观看| 综1合AV在线播放| 国产SUV精品一区二区6| 91小视频在线观看免费版高清| 欧美日韩第二页| 潮喷在线无码白浆| 91美女视频在线观看| 久久频这里精品99香蕉久网址| 国产婬乱a一级毛片多女| 四虎永久免费地址在线网站| 毛片免费视频| 国内精品视频在线| 找国产毛片看| 亚洲成人网在线观看| 成人免费一级片| 久久精品电影| 草逼视频国产| 在线国产你懂的| 国模在线视频一区二区三区| 中文字幕首页系列人妻| 国产成人精品一区二区不卡| 国产精品一区二区无码免费看片| 成AV人片一区二区三区久久| 国产精品污视频| 亚洲欧洲自拍拍偷午夜色| 亚洲成人精品久久| 亚洲视频一区| 国产精品短篇二区| 日韩一级毛一欧美一国产| 亚洲一级毛片| 国产精品毛片在线直播完整版| 人妻精品全国免费视频| 国产欧美日韩资源在线观看| 六月婷婷精品视频在线观看| 亚洲精品在线观看91| 成人国产免费| 国产精品尤物在线| 国产又爽又黄无遮挡免费观看| 色婷婷在线影院| 毛片网站在线播放| 亚洲人人视频| 国模粉嫩小泬视频在线观看| 婷婷色一二三区波多野衣| 91福利国产成人精品导航| 国产成人一区| 中国毛片网| 亚洲国产亚综合在线区| 午夜影院a级片| 四虎永久免费地址在线网站| 亚洲无码在线午夜电影| www.亚洲色图.com| 在线99视频|