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

單元測試碼重構方法在安全相關軟件中的應用

2019-12-06 06:22:29上官霞南蔣劍沈昕
科技風 2019年32期

上官霞南 蔣劍 沈昕

摘 要:結合目前軟件單元測試技術的研究現狀,本文對提高軟件單元測試質量和效率的測試模式及方法進行了深入的分析和研究,提出了包括如何命名單元測試用例以便交流出其測試意圖、如何更有效地進行單元測試組件之間的依賴隔離及如何驗證被測單元的間接輸出以提高代碼行為覆蓋率等測試碼重構方法,并給出了相應的技術措施和具體應用。

關鍵詞:模塊依賴;代碼行為覆蓋率;硬編碼測試替身;可配置的測試替身

一、緒論

軟件代碼行為的自動驗證是最近幾十年開發方法方面最大的進展之一,單元測試是軟件測試過程中最基本的測試,其能夠盡早暴露大量軟件缺陷,降低軟件工程整體開發成本,是前期測試中公認的、最有效的保證軟件質量的活動之一。

測試不光只能運行,還需要對其進行后期維護。然而目前很多公司級軟件測試項目中的測試壞味道包括模糊測試、緩慢測試、脆弱測試、甚至在產品代碼中包含測試邏輯等,[1]由此問題導致的高維護成本表明如果缺少正確的方法,引入單元測試不一定能提高生產力,因此如何識別及排除這些壞味道并重構測試,讓測試變得更易理解和維護、更健壯及可復用成為目前亟待解決的問題。

二、測試碼重構方法

本文我們將以嵌入式C語言為例,測試工具使用C++Test,闡述下面提出的幾種測試碼重構方法是如何在安全相關軟件的單元測試實踐中運用的。

(一)測試用例命名應該能交流出其測試的意圖

一個好的用例名稱至少需要傳達以下幾方面信息,包含被測代碼函數/方法名、與被測代碼執行相關的所有輸入值的重要特征及本用例預期輸出的抽象描述。這樣我們通過測試工具IDE的用例瀏覽器中可以很清楚的看到每個用例測試的不同場景,達到良好交流其測試的意圖的目的,比較好的命名方案如下:

test___

其中:

:被測函數/方法的名稱;

:被測試功能場景的描述;

:被測試場景下的期望行為。

(二)測試中應盡可能設計可配置的測試替身,而不是硬編碼的測試替身

測試替身是出于運行測試這一明確目的而安裝代替實際組件的任何對象或組件,對依賴組件DOC的調用通常返回某個值、更新其它參數或拋出異常。[2]

硬編碼的測試替身由測試人員將依賴組件每個用例的返回值直接編碼進替身組件中,而可配置的測試替身它將返回值或異常在用例運行時實時傳遞,這樣我們可以以更簡單的方式控制被測代碼的間接輸入,并使測試核心邏輯在用例體可見從而避免出現“神秘訪客”,下面為可配置的測試替身的實現。

staticE_SysBool s_IsReceived = e_FALSE;

/*可配置的測試替身 */

void SetReceiveMsgDataStatus(E_SysBool inReciveStatus)

{

s_IsReceived = inReciveStatus;

}

E_SysBool IsReceiveMsgData(void)

{

retrun IsReceived;

}

(三)應能驗證被測代碼的間接輸出以減少未測試的代碼行為

很多時候,被測代碼SUT產生的行為在其自身組件中存儲,通過直接訪問組件狀態可以驗證該行為,但是有時也會產生一些預期的副作用,比如有一個組件里有一個函數,該函數什么也沒返回,或者至少沒有什么可以用來確定它是否正確實現了其功能,在這種情況下,我們別無選擇,只能從“后門測試”,通常程序對記錄故障代碼的調用沒有返回表示正確完成的信息,確定其是否正常運行的唯一方法是,通過其它某個接口(一個允許檢索故障類型的接口)與它交互。

static UINT32 s_FaultCode = 0UL;

/*一個允許檢索故障代碼的接口 */

UINT32GetFaultCode(void)

{

return s_FaultCode;

}

/*記錄故障代碼接口實現 */

UINT32RecordFalutCode(UINT32 inFaultCode)

{

s_FaultCode = inFaultCode;

}

/*測試用例中驗證了記錄故障代碼的行為 */

voidtest_CheckLinkStatus_NotReceivedCycleOverMaxNum_LinkFalut(void)

{

/* Pre-condition initialization */

SetReceiveMsgDataStatus(e_FAlSE);

s_CommErrorCount =c_MaxCommErrorNum;

{

/* Tested function call */

E_SysBool IsLinkNormal = CheckLinkStatus();

UINT32 vFaultCode = GetFaultCode();

/* Post-condition check */

CPPTEST_ASSERT_EQUAL(e_FAlSE,IsLinkNormal);

CPPTEST_ASSERT_EQUAL(c_CommFalut,vFaultCode);

}

}

三、結語

本文選擇的幾種測試碼重構方法經公司LKJ-15C安全認證項目中應用,證明其可以幫組開發人員在進行自動化單元測試實踐時在幾種可選項之間做出正確的選擇,最終使我們設計的測試用例能夠達到幫助理解被測代碼、提高設計質量及降低代碼缺陷引入風險等目標。

參考文獻:

[1]Gerard Meszaros.xUnit Test Patterns:Refactoring Test Code.Addison-Wesley,Reading,MA,2007.

[2]James W.Grenning.Test Driven Development for Embedded C.Pragmatic Programmers.2011.

作者簡介:上官霞南(1982-),男,漢族,江西吉水人,碩士,中級職稱,研究方向:安全相關軟件自動化測試。

主站蜘蛛池模板: 色婷婷久久| 72种姿势欧美久久久大黄蕉| 亚洲女同一区二区| 午夜啪啪福利| 99一级毛片| 成人在线观看不卡| 青草视频久久| 免费国产小视频在线观看| 97人人做人人爽香蕉精品| 美女被狂躁www在线观看| 中文字幕 日韩 欧美| 91色老久久精品偷偷蜜臀| 黄色三级网站免费| 亚洲综合天堂网| 国产三级毛片| 亚洲va视频| 国产拍在线| 91久久偷偷做嫩草影院免费看| 无码aaa视频| 日本不卡在线视频| 91精品国产丝袜| 亚洲精品第一页不卡| 欧美天堂久久| 无码日韩精品91超碰| 国产综合欧美| 午夜小视频在线| 欧美亚洲国产一区| 国产视频 第一页| 老司机午夜精品网站在线观看| 亚洲欧美一区二区三区麻豆| 在线免费观看AV| 亚洲精品国产综合99久久夜夜嗨| 欧美色综合网站| 真人免费一级毛片一区二区| 91精品免费高清在线| 在线播放91| 亚洲视频免| 亚洲成在人线av品善网好看| 久青草网站| 99人妻碰碰碰久久久久禁片| 欧美区一区| 国产精品私拍在线爆乳| 免费jizz在线播放| 日韩最新中文字幕| 国产精品成人免费视频99| 免费jjzz在在线播放国产| 国产精品久久精品| 色网站免费在线观看| 久久毛片网| 亚洲成人在线网| 一区二区欧美日韩高清免费| 国产午夜一级淫片| 3344在线观看无码| 国产成人精品免费av| 国产网友愉拍精品| 四虎国产永久在线观看| 婷婷色在线视频| 国产亚洲精品在天天在线麻豆 | 老熟妇喷水一区二区三区| 国产午夜看片| 国产鲁鲁视频在线观看| 欧美黄色网站在线看| 伊人蕉久影院| 在线播放91| 国产精品九九视频| 亚洲精品波多野结衣| 亚洲天堂网视频| 国产精品19p| 亚洲国产精品国自产拍A| 亚洲不卡影院| 国产激情无码一区二区APP| 日韩天堂视频| 色偷偷一区二区三区| a毛片在线| 国产青榴视频| 国产亚洲精久久久久久久91| 五月婷婷中文字幕| 国产亚洲欧美日韩在线一区| 国产黄色视频综合| 在线色国产| 日本午夜精品一本在线观看| 日韩精品一区二区三区中文无码|