單元測試碼重構(gòu)方法在安全相關(guān)軟件中的應用_第1頁
單元測試碼重構(gòu)方法在安全相關(guān)軟件中的應用_第2頁
單元測試碼重構(gòu)方法在安全相關(guān)軟件中的應用_第3頁
單元測試碼重構(gòu)方法在安全相關(guān)軟件中的應用_第4頁
單元測試碼重構(gòu)方法在安全相關(guān)軟件中的應用_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、    單元測試碼重構(gòu)方法在安全相關(guān)軟件中的應用    上官霞南蔣劍沈昕摘 要:結(jié)合目前軟件單元測試技術(shù)的研究現(xiàn)狀,本文對提高軟件單元測試質(zhì)量和效率的測試模式及方法進行了深入的分析和研究,提出了包括如何命名單元測試用例以便交流出其測試意圖、如何更有效地進行單元測試組件之間的依賴隔離及如何驗證被測單元的間接輸出以提高代碼行為覆蓋率等測試碼重構(gòu)方法,并給出了相應的技術(shù)措施和具體應用。關(guān)鍵詞:模塊依賴;代碼行為覆蓋率;硬編碼測試替身;可配置的測試替身一、緒論軟件代碼行為的自動驗證是最近幾十年開發(fā)方法方面最大的進展之一,單元測試是軟件測試過程中最基本的測試,其能

2、夠盡早暴露大量軟件缺陷,降低軟件工程整體開發(fā)成本,是前期測試中公認的、最有效的保證軟件質(zhì)量的活動之一。測試不光只能運行,還需要對其進行后期維護。然而目前很多公司級軟件測試項目中的測試壞味道包括模糊測試、緩慢測試、脆弱測試、甚至在產(chǎn)品代碼中包含測試邏輯等,1由此問題導致的高維護成本表明如果缺少正確的方法,引入單元測試不一定能提高生產(chǎn)力,因此如何識別及排除這些壞味道并重構(gòu)測試,讓測試變得更易理解和維護、更健壯及可復用成為目前亟待解決的問題。二、測試碼重構(gòu)方法本文我們將以嵌入式c語言為例,測試工具使用c+test,闡述下面提出的幾種測試碼重構(gòu)方法是如何在安全相關(guān)軟件的單元測試實踐中運用的。(一)測試

3、用例命名應該能交流出其測試的意圖一個好的用例名稱至少需要傳達以下幾方面信息,包含被測代碼函數(shù)/方法名、與被測代碼執(zhí)行相關(guān)的所有輸入值的重要特征及本用例預期輸出的抽象描述。這樣我們通過測試工具ide的用例瀏覽器中可以很清楚的看到每個用例測試的不同場景,達到良好交流其測試的意圖的目的,比較好的命名方案如下:test_其中:被測函數(shù)/方法的名稱;:被測試功能場景的描述;:被測試場景下的期望行為。(二)測試中應盡可能設(shè)計可配置的測試替身,而不是硬編碼的測試替身測試替身是出于運行測試這一明確目的而安裝代替實際組件的任何對象或組件,對依賴組件doc的調(diào)用通常返回某個值、更新其它參數(shù)或拋出異常。2硬編碼的測

4、試替身由測試人員將依賴組件每個用例的返回值直接編碼進替身組件中,而可配置的測試替身它將返回值或異常在用例運行時實時傳遞,這樣我們可以以更簡單的方式控制被測代碼的間接輸入,并使測試核心邏輯在用例體可見從而避免出現(xiàn)“神秘訪客”,下面為可配置的測試替身的實現(xiàn)。statice_sysbool s_isreceived = e_false;/*可配置的測試替身 */void setreceivemsgdatastatus(e_sysbool inrecivestatus)s_isreceived = inrecivestatus;e_sysbool isreceivemsgdata(void)retru

5、n isreceived;(三)應能驗證被測代碼的間接輸出以減少未測試的代碼行為很多時候,被測代碼sut產(chǎn)生的行為在其自身組件中存儲,通過直接訪問組件狀態(tài)可以驗證該行為,但是有時也會產(chǎn)生一些預期的副作用,比如有一個組件里有一個函數(shù),該函數(shù)什么也沒返回,或者至少沒有什么可以用來確定它是否正確實現(xiàn)了其功能,在這種情況下,我們別無選擇,只能從“后門測試”,通常程序?qū)τ涗浌收洗a的調(diào)用沒有返回表示正確完成的信息,確定其是否正常運行的唯一方法是,通過其它某個接口(一個允許檢索故障類型的接口)與它交互。static uint32 s_faultcode = 0ul;/*一個允許檢索故障代碼的接口 */ui

6、nt32getfaultcode(void)return s_faultcode;/*記錄故障代碼接口實現(xiàn) */uint32recordfalutcode(uint32 infaultcode)s_faultcode = infaultcode;/*測試用例中驗證了記錄故障代碼的行為 */voidtest_checklinkstatus_notreceivedcycleovermaxnum_linkfalut(void)/* pre-condition initialization */setreceivemsgdatastatus(e_false);s_commerrorcount =c_m

7、axcommerrornum;/* 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);三、結(jié)語本文選擇的幾種測試碼重構(gòu)方法經(jīng)公司lkj-15c安全認證項目中應用,證明其可以幫組開發(fā)人員在進行自動化單元測試實踐時在幾種可選項之間做出正確的選擇,最終使我們設(shè)計的測試用例能夠達到幫助理解被測代碼、提高設(shè)計質(zhì)量及降低代碼缺陷引入風險等目標。參考文獻:1gerard meszaros.xunit test patterns:refactoring test code.addison-we

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論