欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種Linux內(nèi)核級單元測試的方法

文檔序號:6465793閱讀:602來源:國知局
專利名稱:一種Linux內(nèi)核級單元測試的方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種單元測試方法,更具體地說,涉及一種Linux內(nèi)核級單 元測方法。
背景技術(shù)
單元測試被公認為軟件開發(fā)過程中的一個關(guān)鍵步驟。單元測試能夠簡化 錯誤檢測,在減少開發(fā)時間和成本的同時提高軟件質(zhì)量。
通常而言, 一個單元測試是用于判斷某個特定條件(或者場景)下某個 特定函數(shù)的行為。例如,你可能把一個很大的值放入一個有序list中去,然 后確認該值出現(xiàn)在list的尾部。或者,你可能會從字符串中刪除匹配某種模 式的字符,然后確認字符串確實不再包含這些字符了。
當(dāng)前已經(jīng)存在多種單元測試框架,但是都是用于用戶空間的應(yīng)用程序單 元測試。例如,在公開號為CN101055522A的發(fā)明專利中公開了一種自動生 成單元測試?yán)姆椒ê脱b置,其中,預(yù)先設(shè)置程序單元的詳細設(shè)計文檔,讀 取詳細設(shè)計文檔中接口規(guī)格部分,并且從接口規(guī)格部分解析出所有針對程序 單元的參數(shù)的參數(shù)值,然后將各參數(shù)的參數(shù)值組合生成單元測試?yán)?br> 在公開號為CN1987821A的發(fā)明專利中公開了 一種實現(xiàn)單元測試的方法 及系統(tǒng),具體地說,該方法和系統(tǒng)利用記錄函數(shù)信息的方法,將一函數(shù)抽離 開發(fā)環(huán)境進行單元測試,依據(jù)該函數(shù)的測試實例對該函數(shù)進行測試,產(chǎn)生測 試覆蓋率及測試報告,并且將其作為該函數(shù)的品質(zhì)參考數(shù)據(jù)。
在公開號為CN1641601A的發(fā)明專利中公開了一種軟件的單元測試方 法,在該方法中,啟動測試用例;設(shè)置能夠提供被測單元所需數(shù)據(jù)的樁環(huán)境 或數(shù)據(jù)庫環(huán)境;構(gòu)造被測單元所需的輸入?yún)?shù),并驅(qū)動被測單元執(zhí)行被測函 數(shù)或方法,該被測函數(shù)或方法需要的下層數(shù)據(jù)或外部數(shù)據(jù)從樁環(huán)境或數(shù)據(jù)庫 環(huán)境獲??;檢查被測函數(shù)或方法的輸出以驗證被測單元是否工作正常。
目前尚無Linux內(nèi)核空間的單元測試框架和完善的單元測試方法。因此, 需要一種Linux內(nèi)核中做單元測試的方法來解決Linux內(nèi)核級單元測試的問題。

發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種Linux內(nèi)核中做單元測試的方法來解決 Linux內(nèi)核級單元測試。
根據(jù)本發(fā)明的一方面,提供一種Linux內(nèi)核級單元測試的方法,所述方 法包括編譯被測模塊,并將編譯后的被測模塊加載到內(nèi)核空間;建立并實 現(xiàn)內(nèi)核級單元測試框架;建立并實現(xiàn)單元測試模塊;將內(nèi)核級單元測試框架 連同單元測試模塊一起編譯,并且將編譯后的模塊加載到內(nèi)核空間;以及輸 出單元測試結(jié)果。
根據(jù)本發(fā)明的另 一方面,提供一種Linux內(nèi)核級單元測試的方法,所述 方法包括編譯被測模塊,并將編譯后的被測模塊加載到內(nèi)核空間;建立并 實現(xiàn)內(nèi)核級單元測試框架;建立并實現(xiàn)單元測試模塊;分別編譯內(nèi)核級單元 測試框架和單元測試模塊,并且先將編譯后的內(nèi)核級單元測試框架加載到內(nèi) 核空間,再將編譯后的單元測試模塊加載到內(nèi)核空間;以及輸出單元測試結(jié) 果。


通過下面結(jié)合附圖進行的描述,本發(fā)明的目的和特點將會變得更加清楚, 其中
圖1是根據(jù)本發(fā)明的示例性實施例的內(nèi)核級單元測試方法的流程圖2是根據(jù)本發(fā)明的示例性實施例的調(diào)用關(guān)系的示圖;以及
圖3是根據(jù)本發(fā)明的另一示例性實施例的內(nèi)核級單元測試方法的流程圖。
具體實施例方式
下面將詳細說明本發(fā)明的實施例。首先,明確在本發(fā)明的實施例中使用 的幾個概念。 被測模塊
被測模塊是我們編寫的某種用途的內(nèi)核模塊,需要對它進行單元測試, 在本發(fā)明的示例性實施例中假定為被測模塊為mod。
5^皮測函凄t
被測模塊中的被測函數(shù)。在本發(fā)明的示例性實施例中假定有 一 個單元foo
的凈皮觀'J函凄t foo—bar。 單元測試模塊
單元測試模塊一個獨立的內(nèi)核模塊,用單元測試模塊來對被測模塊中的 單元進行單元測試。在本發(fā)明的示例性實施例中假定為kut_mod。 單元測試函數(shù)
單元測試函數(shù)包括在單元測試模塊中,用于對被測模塊中的被測函數(shù)進 行測試。在本發(fā)明的示例性實施例中假定為test—foo—bar, test_foo—baz等。 Linux內(nèi)核級單元測試(KUnit)框架模塊
KUnit框架可以編譯為一個獨立的內(nèi)核模塊,這樣它可以同時被多個單 元測試模塊使用。KUnit框架也可以和單元測試模塊一起編譯為一個獨立的 單元測試模塊。
斷言
斷言是一個簡單的方法調(diào)用,用于判斷某個語句是否為真。 下面將參照圖l詳細根據(jù)本發(fā)明的內(nèi)核級單元測試方法。在步驟SIOI,
當(dāng)測試被測模塊mod時,可以修改被測模塊的代碼,以使用 EXPORT—SYMBOL宏將被測模塊的被測函數(shù)導(dǎo)出到內(nèi)核空間中,并且將被 測才莫塊編if為mod.ko。
在步驟S102,使用insmod命令將mod.ko加載到內(nèi)核空間。 在步驟S103,建立并實現(xiàn)KUnit框架。具體地說,建立KUnit框架包括 實現(xiàn)內(nèi)核空間斷言(kunit_assert )、實現(xiàn)調(diào)用單元測試函lt的方法(kunit_run ) 以及實現(xiàn)單元測試結(jié)果的收集、管理和輸出(kunit一result )。
在本發(fā)明的示例性實施例中,可以按照下述方式來實現(xiàn)內(nèi)核空間斷言 (kunit—assert ):
# define kunit—assert(condition) \ do { \ if (!(condition)) \ return ^condition; \ } while (O)
其中,參數(shù)包含斷言條件(例如,condition )。斷言的關(guān)鍵是對條件的判斷,條件condition不滿足時返回不滿足的條件信息。
kunit—run帶有一個參數(shù),該參數(shù)是單元測試函數(shù)。kunit_mn的主要職責(zé) 是調(diào)用單元測試函數(shù),收集單元測試函數(shù)執(zhí)行的結(jié)果,并且將該結(jié)果保存在 某種數(shù)據(jù)結(jié)構(gòu)中(例如,鏈表)。結(jié)果信息至少包含單元測試函數(shù)名,ID,測 試成功與否,失敗時的斷言錯誤信息,以便最后輸出。
下面將描述調(diào)用單元測試函數(shù),收集測試結(jié)果,對測試結(jié)果進行管理的 過程。
單元測試模塊(kut_mod )的test_foo函數(shù)用于對與被測模塊mod中foo 單元的每個被測函數(shù)(如foo一bar, foo_baz等)相應(yīng)的單元測試模塊中的單 元測試函數(shù)(test—foo—bar等)依次調(diào)用kunit—run,然而,test—foo函數(shù)被單 元測試模塊的入口函數(shù)(kut—mod—init)調(diào)用。參見如圖2所示的調(diào)用關(guān)系。
圖中test—foo—bar函數(shù)分別用kunit—assert來斷言foo—bar各種測試用例的結(jié)果。
最后通過kunit—result函數(shù),遍歷內(nèi)部的鏈表或其它數(shù)據(jù)結(jié)構(gòu),輸出各結(jié) 點上保存的結(jié)果信息。輸出信息可以顯示在屏幕,內(nèi)核日志文件或者遠端機器上。
在步驟SI04,建立并實現(xiàn)單元測試模塊kut一mod。 kut—mod包括入口函 數(shù)kut—mod—init函lt和test—foo函凄史。kut—modjnit函凄丈是單元測試才莫塊的入 口函數(shù)。test—foo函數(shù)對每個單元測試函數(shù)依次調(diào)用kunit—run,并且test—foo 函IU皮kut—mod—init函凄t調(diào)用。
在步驟S105 ,將KUnit框架連同單元測試才莫塊kut一mod —起編譯為內(nèi)核 單元測試模塊kut—mod.ko,并且使用insmod命令將kut—mod.ko力口載到內(nèi)核 空間。
然后,在步驟S106,在加載kut_mod.ko的同時啟動入口函數(shù)kut_mod—init 從而進行自動化的內(nèi)核單元測試,并輸出結(jié)果。
此外,KUnit框架可以不與單元測試才莫塊kut—mod —起凈皮編譯,而是被 單獨編譯。下面將參照圖3描述根據(jù)本發(fā)明的示例性實施例的將KUnit框架 單獨編譯的單元測試方法。
在步驟S301,當(dāng)測試被測模塊mod時,可以修改被測模塊的代碼,以 使用EXPORT—SYMBOL宏將被測模塊的被測函數(shù)導(dǎo)出到內(nèi)核空間中,并且 將被測模塊編譯為mod.ko。在步驟S302,使用insmod命令將mod.ko加載到內(nèi)核空間。 在步驟S303,建立并實現(xiàn)KUnit框架。具體地說,建立KUnit框架包括 實現(xiàn)內(nèi)核空間斷言(kunit—assert )、實現(xiàn)調(diào)用單元測試函^:的方法(kunit—mn ) 以及實現(xiàn)單元測試結(jié)果的收集、管理和輸出(kunit—result )。
在本發(fā)明的示例性實施例中,可以按照下述方式來實現(xiàn)內(nèi)核空間斷言 (loinit—assert ):
# define kunit—assert(condition) \ do { \ if ('(condition)) \ return #condition; \ } while (0)
其中,參數(shù)包含斷言條件(例如,condition )。斷言的關(guān)鍵是對條件的判 斷,條件condition不滿足時返回不滿足的條件信息。
kunit_mn帶有一個參數(shù),該參數(shù)是單元測試函數(shù)。kunit—run的主要職責(zé) 是調(diào)用單元測試函數(shù),收集單元測試函數(shù)執(zhí)行的結(jié)果,并且將該結(jié)果保存在 某種數(shù)據(jù)結(jié)構(gòu)中(例如,鏈表)。結(jié)果信息至少包含單元測試函數(shù)名,ID,測 試成功與否,失敗時的斷言錯誤信息,以便最后輸出。
下面將描述調(diào)用單元測試函數(shù),收集測試結(jié)果,對測試結(jié)果進行管理的 過程。
單元測試模塊(kut—mod )的test—foo函數(shù)用于對與被測模塊mod中foo 單元的每個被測函數(shù)(如foo_bar, foo—baz等)相應(yīng)的單元測試模塊中的單 元頂'J試函數(shù)(test foo bar等)依次調(diào)用kunit run, 然而,test foo函數(shù)被單 元測試模塊的入口函數(shù)(kut_mod_init)調(diào)用。參見如圖2所示的各函數(shù)之間 的調(diào)用關(guān)系。
圖中test—foo—bar函數(shù)分別用kunit—assert來斷言foo—bar各種測試用例的 結(jié)果。
最后通過kunit—result函數(shù),遍歷內(nèi)部的鏈表或其它數(shù)據(jù)結(jié)構(gòu),輸出各結(jié) 點上保存的結(jié)果信息。輸出信息可以顯示在屏幕,內(nèi)核日志文件或者遠端機器上。
在步驟S304,建立并實現(xiàn)單元測試模塊kut_mod。 kut—mod包括入口函 凄丈kut—mod—init函凄t和test—foo函數(shù)。kut—mod—init函凄i是單元測試才莫塊的入口函數(shù)。test—foo函數(shù)對每個單元測試函數(shù)依次調(diào)用kunit—mn,并且test—foo 函數(shù)被kut—mod一init函數(shù)調(diào)用。
在步驟S305,分別將KUnit框架和kut—mod編譯為kunit.ko和 kut—mod.ko,并且使用insmod命令將其加載到內(nèi)核空間。因為KUnit框架被 編譯為一個獨立的內(nèi)核模塊,在該內(nèi)核模塊中,用EXPORT—SYMBOL宏導(dǎo) 出kunit_assert, kunit—run, kunit—result符號,并將KUnit才匡架編譯為kunit.ko。 在一導(dǎo)kunit.ko禾口 kut—mod.ko力口載至li內(nèi)#亥空間日于,先力口載kunit.ko,再力口載 kut—mod.ko 。
然后,在步驟S306,在加載kut—mod.ko的同時啟動入口函數(shù)kut—mod—init 從而進行自動化的內(nèi)核單元測試,并輸出結(jié)果。
根據(jù)本發(fā)明的Linux內(nèi)核級單元測試方法能夠有效地對內(nèi)核中的被測模 塊進行自動化的單元測試。
盡管已經(jīng)參照本發(fā)明的特定的示例性實施例顯示和描述了本發(fā)明,但本 領(lǐng)域的技術(shù)人員應(yīng)該理解,在不脫離由權(quán)利要求限定的本發(fā)明的精神和范圍 的情況下,可以對其進行各種形式和細節(jié)的變形。
9
權(quán)利要求
1、一種Linux內(nèi)核級單元測試的方法,包括編譯被測模塊,并將編譯后的被測模塊加載到內(nèi)核空間;建立并實現(xiàn)內(nèi)核級單元測試框架;建立并實現(xiàn)單元測試模塊;將內(nèi)核級單元測試框架連同單元測試模塊一起編譯,并且將編譯后的模塊加載到內(nèi)核空間;以及輸出單元測試結(jié)果。
2、 如權(quán)利要求l所述的方法,其中,建立內(nèi)核級單元測試框架包括實現(xiàn)內(nèi)核空間斷言、實現(xiàn)調(diào)用單元測試函數(shù)的方法以及實現(xiàn)單元測試結(jié)果的收集、管理和輸出。
3、 如權(quán)利要求2所述的方法,其中,實現(xiàn)調(diào)用單元測試函數(shù)的方法包括調(diào)用單元測試函數(shù),收集單元測試函數(shù)執(zhí)行的結(jié)果,并且將該結(jié)果保存在數(shù)據(jù)結(jié)構(gòu)中。
4、 如權(quán)利要求3所述的方法,其中,所述結(jié)果的信息至少包含單元測試函數(shù)名、ID、測試成功與否、失敗時的斷言錯誤信息等。
5、 如權(quán)利要求2所述的方法,其中,實現(xiàn)單元測試結(jié)果的收集、管理和輸出包括遍歷內(nèi)部的鏈表或其它數(shù)據(jù)結(jié)構(gòu),并且輸出各結(jié)點上保存的結(jié)果信息。
6、 如權(quán)利要求1所述的方法,其中,所述單元測試模塊包括入口函數(shù)kut—mod—init和對每個單元測試函數(shù)依次調(diào)用實現(xiàn)調(diào)用單元測試函數(shù)的方法的函數(shù)test_foo,其中,入口函數(shù)kut_mod—init調(diào)用test—foo。
7、 一種Linux內(nèi)核級單元測試的方法,包括編譯被測模塊,并將編譯后的被測模塊加載到內(nèi)核空間;建立并實現(xiàn)內(nèi)核級單元測試框架;建立并實現(xiàn)單元測試模塊;分別編譯內(nèi)核級單元測試框架和單元測試模塊,并且先將編譯后的內(nèi)核級單元測試框架加載到內(nèi)核空間,再將編譯后的單元測試模塊加載到內(nèi)核空間;以及輸出單元測試結(jié)果。
8、 如權(quán)利要求7所述的方法,其中,建立內(nèi)核級單元測試框架包括實現(xiàn)內(nèi)核空間斷言、實現(xiàn)調(diào)用單元測試函數(shù)的方法以及實現(xiàn)單元測試結(jié)果的收集、管理和輸出。
9、 如權(quán)利要求8所述的方法,其中,實現(xiàn)調(diào)用單元測試函數(shù)的方法包括調(diào)用單元測試函數(shù),收集單元測試函數(shù)執(zhí)行的結(jié)果,并且將該結(jié)果保存在數(shù)據(jù)結(jié)構(gòu)中。
10、 如權(quán)利要求9所述的方法,其中,所述結(jié)果的信息至少包含單元測試函數(shù)名、ID、測試成功與否、失敗時的斷言錯誤信息等。
11、 如權(quán)利要求8所述的方法,其中,實現(xiàn)單元測試結(jié)果的收集、管理和輸出包括遍歷內(nèi)部的鏈表或其它數(shù)據(jù)結(jié)構(gòu),并且輸出各結(jié)點上保存的結(jié)果信息。
12、 如權(quán)利要求7所述的方法,其中,所述單元測試模塊包括入口函數(shù)kut—mod—init和對每個單元測試函數(shù)依次調(diào)用實現(xiàn)調(diào)用單元測試函數(shù)的方法的函數(shù)test—foo,其中,入口函數(shù)kut mod init調(diào)用test foo。
全文摘要
提供一種Linux內(nèi)核級單元測試的方法,包括編譯被測模塊,并將編譯后的被測模塊加載到內(nèi)核空間;建立并實現(xiàn)內(nèi)核級單元測試框架;建立并實現(xiàn)單元測試模塊;將內(nèi)核級單元測試框架連同單元測試模塊一起編譯,并且將編譯后的模塊加載到內(nèi)核空間;以及輸出單元測試結(jié)果。
文檔編號G06F11/36GK101634965SQ20081013408
公開日2010年1月27日 申請日期2008年7月24日 優(yōu)先權(quán)日2008年7月24日
發(fā)明者石 王, 王儀科, 理素霞, 晨 紀(jì), 姝 譚, 邱龍斌 申請人:三星電子(中國)研發(fā)中心;三星電子株式會社
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
伊川县| 牡丹江市| 遂溪县| 陆良县| 泰顺县| 衡阳县| 巴林右旗| 兰考县| 东海县| 通辽市| 商河县| 富宁县| 崇仁县| 廉江市| 陆良县| 邹平县| 尤溪县| 舒城县| 沾益县| 镇平县| 敦化市| 固阳县| 阿鲁科尔沁旗| 赣州市| 沙田区| 荣成市| 和政县| 井研县| 铜梁县| 彰化市| 和田市| 麟游县| 丰镇市| 七台河市| 淮滨县| 台中市| 郎溪县| 友谊县| 白银市| 诸城市| 景洪市|