久久99国产亚洲高清-久久99国产亚洲高清观看首页-久久99国产亚洲精品观看-久久99国产一区二区-久久99国产一区二区三区-久久99国产综合精品

樹人論文網一個專業的學術咨詢網站!!!
樹人論文網

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

來源: 樹人論文網發表時間:2021-02-02
簡要:摘要: 航空發動機控制軟件在升級過程中使用 Cantata 工具開展單元測試活動時,存在著未變更函數的 Cantata 測試腳本需重新人工隔離插樁,致使時間和人力耗費的問題。通過研究 Cantat

  摘要: 航空發動機控制軟件在升級過程中使用 Cantata 工具開展單元測試活動時,存在著未變更函數的 Cantata 測試腳本需重新人工隔離插樁,致使時間和人力耗費的問題。通過研究 Cantata 自動生成測試腳本的過程及插樁特點,提出了一種基于 C#的 Cantata 工具變更過程改進方法。該方法通過 C#語言結合正則表達式進行代碼分析,識別出升級過程中的變更函數和全局變量,并按照 Cantata 插樁格式,自動完成測試腳本更新工作。詳細介紹了該方法的設計過程,并在某型航空發動機控制軟件升級過程中進行實踐應用。實踐結果表明,該方法可準確識別源碼信息并完成變更前后的差異比對,能正確快速實現未變更函數的自動隔離插樁工作,有效解決了人力和時間消耗的問題,對回歸測試效率有極大提升。

測控技術

  本文源自測控技術2021-02-01《測控技術》雜志,月刊,于1982年經國家新聞出版總署批準正式創刊,由中國航空工業集團有限公司主管,中國航空工業集團北京長城航空測控技術研究所主辦的學術性刊物,本刊在國內外有廣泛的覆蓋面,題材新穎,信息量大、時效性強的特點,其中主要欄目有:綜述、航空裝備保障與維修技術專題、數據采集與處理等。

  關鍵詞: DO-178C; 嵌入式系統; 單元測試; C#

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

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

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

  1. 2 cantata 插樁規則提煉

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

  當 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 ( ) \ n”) ; INITIALISE( GLB_a) ; } static void initialse_expected_global_data( ) { TEST _ SCRIPT _ WARNING( “Verify initialse _ expected _ global_data( ) \ n”) ; COPY_TO_EXPECTED( GLB_a,expected_GLB_a) ; } static void check_global_data( ) {TEST_SCRIPT_WARNING( “Verify check_global_data( ) \ n”) ; 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 所示。數據結構通過對頭文件引用、宏、數據結構、全局變量、函數聲明、函數等信息進行分類存儲,實現變更差異的快速識別和比對。

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

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

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

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

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

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

  此次變更前共計有 436 個單元測試腳本,變更前后共影響到 123 個測試腳本的關聯修改,修改量占比 28. 2% 。以其中一個關聯修改的測試腳本為例,進行分析:

  task. c 文件共有 5 個函數,比對變更前后的源碼,其中僅 task_bigLoop( ) 函數里新增了函數調度 ISM _ Excute25ms( ) ,同步會影響該 c 文件中其他 4 個未變更函數測試腳本的隔離插樁。觀察分析對應未變更函數自動修改后的測試腳本可見,測試腳本中均按照格式要求完成了腳本修改,具體結果如圖 7 所示。

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

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

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

  3 結束語

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

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

无码成人H动漫在线网站| 在线视频夫妻内射| 国产激情一区二区三区| 人妻人人做人碰人人添青青| 99RIAV国产精品视频| 美女扒开腿让男人桶爽免费| 亚洲午夜性猛春交XXXX| 久久久久国产精品嫩草影院| 亚洲中国最大AV网站| 久久久久精品电影一区二区三区 | 日韩乱码人妻无码中文字幕视频| Www内射熟妇COm| 侵犯美人妻中出中文字幕| SM调教贱屁股眼哭叫求饶H| 欧美性受XXXX白人性爽| GAYFUCKⅩⅩⅩⅩHD警察| 欧美最猛黑人XXXⅩ猛男视频| 99精品久久久久精品双飞| 欧美黑人粗大猛烈18P| Chinese国产HD精品实拍| 强行暴力肉体进入HDⅩXXX| W永久939W乳液| 日本XXXX色视频在线观看免费, | 蜜桃Av噜噜一区二区三区网址 | 成熟闷骚女邻居引诱2| 上面一个摸下面一个手念什么 | 日本熟妇人妻XXXXX人电影| 刺激交换经历过程小说| 天天躁夜夜躁很很躁| 国产麻豆成人传媒免费观看| 亚洲AV中文无码乱人伦在线视色| 精品无码AV人在线观看| 又硬又粗又大一区二区三区视频| 妺妺窝人体色77777777| 巴西大肥熟女毛茸茸| 上面一个奶下面一个顶是什么字| 国产精品视频免费播放| 亚洲高清成人AV电影网站| 久久久久无码国产精品不卡| 69成人免费视频无码专区| 人与禽zozzo性伦| 国产成人精品午夜二三区波多野| 香蕉久久久久久AV综合网成人| 激情综合一区二区迷情校园| 伊人久久大香线蕉无码不卡| 欧美精品99久久久啪啪| 大鷄巴久久久久久久久久| 无码国内精品久久人妻| 精品国产三级A∨在线观看| 在糖心VLOG唐伯虎女主角是谁| 欧美啪啪抽搐一进一出免费| 顶级欧美RAPPER| 性偷窥TUBE凸凹视频| 久久久久久久精品2| AV未满十八禁免费网站| 熟妇人妻AV中文字幕老熟妇 | 国产免费无遮挡吃奶视频| 亚洲另类无码专区首页| 免费无遮挡又黄又爽网站 | 爱情岛论坛线路一官方网站| 少妇又紧又深又湿又爽视频 | 少妇又爽又刺激视频| 国精产品一区二区三区| 一区二区三区国产精华液区别| 欧美日韩在线视频一区| 国产AV电影区二区三区曰曰骚网| 亚洲AV日韩精品久久久久| 军人全身脱精光自慰| 锕锕锕锕锕锕锕好疼视频真人| 婷婷5月女内射AV| 久久超碰97人人做人人爱| A级毛片100部免费观看| 亭亭玉立国色天香四月天| 久久AⅤ天堂AV无码AV| Chinese丰满熟妇高潮| 无码国产精品久久一区免费| 久久精品99国产精品蜜桃| CAOPORN国产精品免费| 天干天干啦夜天干天天爽| 精品无码三级在线观看视频| japanese日本护士18| 午夜麻豆国产精品无码| 浪潮AV色综合久久天堂| 波多野结衣乳喷高潮视频| 午夜三级手机在线电影| 猫咪WWW免费人成人入口| 成熟人妻AV无码专区| 亚洲国产成人BT天堂| 欧美成人免费观看在线看| 国产国拍亚洲精品MV在线观看| 亚洲色偷偷偷综合网| 人妻在厨房被侮辱高清版| 国内精品自线在拍大学生| 18禁超污无遮挡无码免费动态图| 少妇兽交PWWW综合网| 久久成人成狠狠爱综合网| 班级每人C了我半小时班长| 亚洲 成人 无码 在线观看 | A在线视频播放观看免费观看| 无码人妻AⅤ一区二区三区玉蒲团 无码人妻AⅤ一区二区三区用会员 | 成人永久免费福利视频免费| 亚洲VA无码手机在线电影| 女人被躁到高潮嗷嗷叫游戏| 国产精品久久久久久影视不卡| 伊人久久大香线蕉AV影院| 色欲色香天天天综合无码| 久久99精品国产99久久6| 被揉到高潮揉出水视频| 亚洲AV午夜成人片精品网站| 欧美视频二区欧美影视| 国内精品人妻无码久久久影院 | 91精品人妻一区二区三区蜜桃| 无码人妻av一区二区三区毛片 | 国产无遮挡又黄又爽动态图| 99久久国产自偷自偷免费一区| 香蕉视频一直看一直爽| 欧美粗大强交18P直喷水| 国产我和子的与子乱视频| 91人妻超碰亚洲| 亚洲AV日韩AV无码A一区| 强行破瓜稚嫩粗暴顶弄哭喊 | 国产自国产自愉自愉免费24区 | 色婷婷综合久久久久中文一区二区 | 国产成人A在线观看视频免费| 约附近的寂寞妇女| 无码人妻一区二区中文| 欧美V亚洲V综合Ⅴ国产V| 好爽好紧好大的免费视频国产| ZOOFILIA杂交JAPAN| 亚洲欧美色国产综合| 少妇呻吟翘臀后进爆白浆| 免费看成人A级毛片| 国内大量揄拍人妻精品視頻| 暗交小拗女一区二区三区电影| 亚洲日韩亚洲另类激情文学| 特级欧美ZOOXX| 女人被爽到高潮视频免费国产| 好大好深好猛好爽视频| 成人免费A级毛片无码片2022| 一米八五插一米六可以吗| 五十路六十路七十路熟婆| 人妻 日韩 欧美 综合 制服| 久久久G0G0午夜无码精品| 国产精品你懂的在线播放| CHINA末成年VIDEO学生| 亚洲色偷拍一区二区三区| 大乳丰满人妻中文字幕日本| 亚洲AV无码一区二区密桃精品 | 绯色AV一区二区三区蜜臀| 国产精品免费看久久久| 国产一区二区三区导航| 黑人GAY大长雕TUBE| 久久亚洲中文字幕无码| 饥渴的少妇2中文字幕| 久久久久久精品免费免费R| 麻豆传播媒体免费版官网| 色噜噜影院狠狠狠噜| 亚洲中文字幕AⅤ天堂| 亚洲自国产拍揄拍| 99RE6热这里只精品首页| 91人妻人人澡人人爽| CHINESE熟女老女人HD| 大胆顶级欧美艺术图片| 国产AV激情久久无码天堂| 国产主播AV福利精品一区| 久久久久国色AV免费看| 妺妺窝人体色www人体| 色综合久久成人综合网五月| 亚洲成国产人片在线观看| 亚洲AV无码久久寂寞少妇多毛| 中国丰满熟妇XXXX性| 国产人成无码视频在线| 男人扒开添女人下部免费视频| 亚洲AV不卡无码国产| 亚洲精品无码成人片在线观看| 607080岁奶奶| 国产乱人伦精品一区二区在线观看| 久久精品国产一区二区三区肥胖 | 午夜成人亚洲理伦片在线观看| 亚洲AV中文无码乱人伦在线视色| 中国VODAFONE粗暴| 国产高清在线观看AV片麻豆| 国精产品 自偷自偷| 欧美激情一区二区三区在线| 亚洲AV六月丁香七月婷婷| 成熟交BGMBGMBGM在线| 免费观看A级毛片视频| 亚洲AV少妇熟女猛男| 懂色av一区二区三区蜜臀| 久久不见久久见免费影院国语 | 成人区人妻精品一区二区不卡视频| 国产精品成人久久电影| 久久精品国产导航| 人妻被按摩到潮喷中文字幕| 亚洲А∨天堂男人色无码| 陈冠希实干阿娇13分钟| 免费A级毛片在线播放| 午夜福利视频合集1000| 亚洲中文字幕AⅤ天堂| 国产成人无码A区在线观看视频|