一種保證目標(biāo)碼和源代碼一致性的編譯鏈接方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于計(jì)算機(jī)編譯系統(tǒng)領(lǐng)域,具體涉及一種保證目標(biāo)碼和源代碼一致性的編 譯鏈接方法。
【背景技術(shù)】
[0002] 傳統(tǒng)的軟件開發(fā)過程只著重于源代碼的開發(fā)和覆蓋率測(cè)試,但適航軟件遵循的 D 〇178B的A級(jí)標(biāo)準(zhǔn)不但要求進(jìn)行源代碼的覆蓋率測(cè)試或分析,也要求進(jìn)行目標(biāo)碼的覆蓋率 測(cè)試或分析,這是因?yàn)槟繕?biāo)碼的內(nèi)容不但與源代碼有關(guān),也與編譯系統(tǒng)及其配置參數(shù)有關(guān), 編譯系統(tǒng)可以引入源代碼并沒有編寫的內(nèi)容到目標(biāo)碼,比如堆棧檢查、數(shù)組越界檢查等,這 些額外內(nèi)容是否覆蓋從源代碼的覆蓋測(cè)試中是看不出來(lái)的,而且往往是沒有構(gòu)建合適的測(cè) 試用例來(lái)測(cè)試這部分目標(biāo)碼是否有效,為了航空軟件的安全可靠性考慮,A級(jí)適航認(rèn)證要求 能區(qū)分出這部分額外的目標(biāo)碼,并且通過測(cè)試或者分析的方法來(lái)證明其有效性。
[0003] 另外,能形成分支的C語(yǔ)言結(jié)構(gòu)從源代碼角度和目標(biāo)碼角度的分支數(shù)也會(huì)有不 同,從而造成源代碼角度的分支全覆蓋,在目標(biāo)碼角度卻沒有全覆蓋。
[0004] 為了達(dá)到目標(biāo)碼的全覆蓋,可以考慮單獨(dú)再做目標(biāo)碼的覆蓋率測(cè)試,但這樣的方 法沒有充分利用源代碼覆蓋率測(cè)試的結(jié)果,會(huì)造成巨大的額外工作量,而且由于目標(biāo)碼的 非易讀性,單獨(dú)的分析未覆蓋部分、研究增加測(cè)試用例來(lái)增加覆蓋率等工作的難度也比較 商。
【發(fā)明內(nèi)容】
[0005] 本發(fā)明的目的:針對(duì)傳統(tǒng)的軟件測(cè)試方法不能保證目標(biāo)碼和源代碼最終是一致的 這個(gè)問題,提供一種保證目標(biāo)碼和源代碼一致性的編譯鏈接方法。
[0006] 本發(fā)明的技術(shù)方案:
[0007] -種保證目標(biāo)碼和源代碼一致性的編譯鏈接方法,其特殊之處在于:包括以下步 驟:
[0008] 1】定制編譯參數(shù):
[0009] 1. 1】在源代碼編譯前打開GNU編譯器的參數(shù)說明文件;
[0010] 1. 2】分析可能會(huì)產(chǎn)生額外代碼的編譯參數(shù),集中關(guān)閉該類編譯參數(shù);
[0011] 1. 3】關(guān)閉編譯系統(tǒng)對(duì)代碼的優(yōu)化操作選項(xiàng);
[0012] 2】驗(yàn)證編譯參數(shù):
[0013] 通過分析常用C語(yǔ)言基本結(jié)構(gòu)及其編譯所形成的目標(biāo)碼,驗(yàn)證步驟1】所定制的編 譯參數(shù)是否引入額外代碼;如果引入,則關(guān)閉或修改相應(yīng)的編譯參數(shù),如果沒有引入,則無(wú) 需關(guān)閉或修改,確定最終的編譯參數(shù);
[0014] 3】定制鏈接參數(shù);
[0015] 4】驗(yàn)證鏈接參數(shù):
[0016] 關(guān)閉代碼優(yōu)化功能,驗(yàn)證所定制的鏈接參數(shù)沒有引入額外的庫(kù)文件;如果引入,則 關(guān)閉或修改相應(yīng)的鏈接參數(shù),如果沒有引入,則無(wú)需關(guān)閉或修改,確定最終的鏈接參數(shù);
[0017] 5】生成目標(biāo)碼:
[0018]根據(jù)步驟2】確定的最終的編譯參數(shù)以及4】確定的最終的鏈接參數(shù),對(duì)源代碼進(jìn) 行編譯鏈接,生成目標(biāo)碼;
[0019] 6】對(duì)源代碼進(jìn)行模式匹配:
[0020] 對(duì)于匹配成功的源代碼,不再進(jìn)行一致性分析;對(duì)于匹配不成功的源代碼,通過目 標(biāo)碼覆蓋率測(cè)試,分析證明目標(biāo)碼和源代碼的一致性。
[0021] 上述步驟2還包括以下步驟:將確定的最終的編譯參數(shù)寫進(jìn)Makefile文件。
[0022] 將生成匯編文件的命令、生成.1st列表文件的命令寫進(jìn)Makefile文件。
[0023] 上述述步驟4還包括以下步驟:將鏈接參數(shù)寫入Makefile文件。
[0024] 本發(fā)明具有的優(yōu)點(diǎn)效果:
[0025] 該發(fā)明通過對(duì)編譯系統(tǒng)參數(shù)進(jìn)行定制,可以使編譯系統(tǒng)對(duì)源碼進(jìn)行編譯時(shí)不產(chǎn)生 任何的額外代碼,做到目標(biāo)碼的可知性和確定性,通過軟件覆蓋率測(cè)試或者分析可以將所 有的目標(biāo)碼都得到驗(yàn)證,充分利用源代碼覆蓋率測(cè)試的結(jié)果,達(dá)到目標(biāo)碼的全覆蓋,以保障 保證航空軟件的安全性和可靠性,最大限度的保證航空軟件的安全性和可靠性。
【附圖說明】
[0026] 圖1是Tornado環(huán)境下的GNU編譯過程。
【具體實(shí)施方式】
[0027] 目標(biāo)碼覆蓋率測(cè)試主要是因?yàn)槟繕?biāo)碼存在額外功能代碼和分支,如果能盡量減少 或預(yù)知額外代碼和分支出現(xiàn)的位置,則能大大減少目標(biāo)碼覆蓋率測(cè)試或分析的工作。
[0028] 通過編譯系統(tǒng)的參數(shù)定制及操作過程,盡量減少編譯系統(tǒng)額外引入的額外代碼。 分析常用C語(yǔ)言結(jié)構(gòu)所形成的目標(biāo)碼,分析其功能或分支與源代碼的一致性,對(duì)額外代碼 和額外分支進(jìn)行區(qū)分,集中統(tǒng)一的給出不一致情況下的處理方法。采用模式匹配的方法對(duì) 源代碼進(jìn)行掃描,對(duì)大部分已證語(yǔ)言結(jié)構(gòu)部分則無(wú)需再做目標(biāo)碼覆蓋率測(cè)試。
[0029] 該方法用于適航機(jī)載AFDX交換機(jī)軟件開發(fā)和軟件測(cè)試過程中,能夠保證AFDX交 換機(jī)軟件目標(biāo)碼和源代碼的一致性。
[0030] 本發(fā)明提出了一種通過對(duì)編譯系統(tǒng)參數(shù)定制及編譯過程控制和分析常用C語(yǔ)言 結(jié)構(gòu)所形成的目標(biāo)碼,將大部分源代碼的額外目標(biāo)碼數(shù)量減少到零,額外分支做出統(tǒng)一的 分析和測(cè)試處理,從而大大減少需要做獨(dú)立目標(biāo)碼覆蓋測(cè)試的代碼范圍,減少工作量并提 高軟件的可靠性和安全性。
[0031] 分析常用C語(yǔ)言結(jié)構(gòu)所形成的目標(biāo)碼,分析其功能或分支與源代碼的一致性,對(duì) 額外代碼和額外分支進(jìn)行區(qū)分,集中統(tǒng)一的給出不一致情況下的處理方法。該部分可以采 用模式匹配的方法來(lái)進(jìn)行分析和處理。
[0032] 編譯過程控制,在編譯系統(tǒng)進(jìn)行編譯的過程中為了達(dá)到執(zhí)行目標(biāo)碼與匯編目標(biāo)碼 的完全一致,在鏈接的過程中對(duì)鏈接過程進(jìn)行嚴(yán)格控制,不能鏈接額外的庫(kù),并且把代碼優(yōu) 化功能全部關(guān)閉。
[0033] 定制編譯參數(shù):
[0034] 在源代碼編譯前打開GNU編譯器的參數(shù)說明文件,根據(jù)GNU編譯器的參數(shù)說明文 件,集中關(guān)閉可能會(huì)產(chǎn)生額外代碼的參數(shù),為了方便對(duì)目標(biāo)碼進(jìn)行分析,將編譯系統(tǒng)對(duì)代碼 的優(yōu)化操作選項(xiàng)也關(guān)閉,列表如表1所示,通過編譯系統(tǒng)參數(shù)定制及編譯系統(tǒng)對(duì)源代碼優(yōu) 化功能的關(guān)閉可以保證編譯系統(tǒng)在對(duì)源代碼編譯過程中不引入額外代碼,同時(shí)編譯產(chǎn)生的 目標(biāo)碼可讀性更強(qiáng)。
[0035] 表1編譯優(yōu)化選項(xiàng)設(shè)置
[0036]
【主權(quán)項(xiàng)】
1. 一種保證目標(biāo)碼和源代碼一致性的編譯鏈接方法,其特征在于:包括w下步驟: 1】定制編譯參數(shù): 1. 1】在源代碼編譯前打開GNU編譯器的參數(shù)說明文件; 1. 2】分析可能會(huì)產(chǎn)生額外代碼的編譯參數(shù),集中關(guān)閉該類編譯參數(shù); 1. 3】關(guān)閉編譯系統(tǒng)對(duì)代碼的優(yōu)化操作選項(xiàng); 2】驗(yàn)證編譯參數(shù): 通過分析常用C語(yǔ)言基本結(jié)構(gòu)及其編譯所形成的目標(biāo)碼,驗(yàn)證步驟1】所定制的編譯參 數(shù)是否引入額外代碼;如果引入,則關(guān)閉或修改相應(yīng)的編譯參數(shù),如果沒有引入,則無(wú)需關(guān) 閉或修改,確定最終的編譯參數(shù); 3】定制鏈接參數(shù); 4】驗(yàn)證鏈接參數(shù): 關(guān)閉代碼優(yōu)化功能,驗(yàn)證所定制的鏈接參數(shù)沒有引入額外的庫(kù)文件;如果引入,則關(guān)閉 或修改相應(yīng)的鏈接參數(shù),如果沒有引入,則無(wú)需關(guān)閉或修改,確定最終的鏈接參數(shù); 5】生成目標(biāo)碼: 根據(jù)步驟2】確定的最終的編譯參數(shù)W及4】確定的最終的鏈接參數(shù),對(duì)源代碼進(jìn)行編 譯鏈接,生成目標(biāo)碼; 6】對(duì)源代碼進(jìn)行模式匹配: 對(duì)于匹配成功的源代碼,不再進(jìn)行一致性分析;對(duì)于匹配不成功的源代碼,通過目標(biāo)碼 覆蓋率測(cè)試,分析證明目標(biāo)碼和源代碼的一致性。
2. 根據(jù)權(quán)利要求1所述的一種保證目標(biāo)碼和源代碼一致性的編譯鏈接方法,其特征在 于:所述步驟2還包括W下步驟:將確定的最終的編譯參數(shù)寫進(jìn)Makefile文件。
3. 根據(jù)權(quán)利要求2所述的一種保證目標(biāo)碼和源代碼一致性的編譯鏈接方法,其特征在 于:將生成匯編文件的命令、生成.1st列表文件的命令寫進(jìn)Makefile文件。
4. 根據(jù)權(quán)利要求3所述的一種保證目標(biāo)碼和源代碼一致性的編譯鏈接方法,其特征在 于:所述步驟4還包括W下步驟:將鏈接參數(shù)寫入Makefile文件。
【專利摘要】本發(fā)明涉及一種保證目標(biāo)碼和源代碼一致性的編譯鏈接方法,充分利用源代碼覆蓋率測(cè)試的結(jié)果,達(dá)到目標(biāo)碼的全覆蓋,以保障保證航空軟件的安全性和可靠性。本發(fā)明定制編譯參數(shù),分析C語(yǔ)言基本結(jié)構(gòu)及其編譯所形成的目標(biāo)碼,證明定制的編譯參數(shù)沒有引入額外代碼;定制鏈接參數(shù),關(guān)閉代碼優(yōu)化功能,對(duì)源代碼進(jìn)行編譯鏈接,生成目標(biāo)碼;目標(biāo)碼分析,對(duì)源代碼進(jìn)行模式匹配,未匹配上的部分進(jìn)行目標(biāo)碼覆蓋率測(cè)試,分析證明目標(biāo)碼和源代碼的一致性。本發(fā)明充分利用源代碼覆蓋率測(cè)試的結(jié)果,達(dá)到目標(biāo)碼的全覆蓋,以保障保證航空軟件的安全性和可靠性。
【IPC分類】G06F9-45
【公開號(hào)】CN104714829
【申請(qǐng)?zhí)枴緾N201310690027
【發(fā)明人】牛文生, 牟明, 田莉蓉, 黃韜, 王紅春, 邱征
【申請(qǐng)人】中國(guó)航空工業(yè)集團(tuán)公司第六三一研究所
【公開日】2015年6月17日
【申請(qǐng)日】2013年12月15日