新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Linux內(nèi)核函數(shù)魯棒性關(guān)聯(lián)測試研究

Linux內(nèi)核函數(shù)魯棒性關(guān)聯(lián)測試研究

作者: 時(shí)間:2012-03-09 來源:網(wǎng)絡(luò) 收藏

是系統(tǒng)的心臟,是運(yùn)行程序和管理像磁盤和打印機(jī)等硬件設(shè)備的核心程序。是最受歡迎的自由電腦作業(yè)系統(tǒng)核心。它是一個(gè)用C語言寫成,符合POSIX標(biāo)準(zhǔn)的類Unix作業(yè)系統(tǒng)。最早是由芬蘭黑客林納斯·托瓦茲為嘗試在英特爾x86架構(gòu)上提供自由免費(fèi)的類Unix操作系統(tǒng)而開發(fā)的。該計(jì)劃開始于1991年,這里有一份林納斯·托瓦茲當(dāng)時(shí)在Usenet新聞群組comp.os.minix所登載的貼子,這份著名的貼子標(biāo)志著計(jì)劃的正式開始。

本文引用地址:http://m.butianyuan.cn/article/149476.htm

軟件(或軟件構(gòu)件)是衡量軟件在異常輸入和應(yīng)力環(huán)境條件下保持正常工作能力的一種度量。主要用于操作系統(tǒng)、應(yīng)用程序、COTS軟件、構(gòu)件及服務(wù)協(xié)議等軟件和協(xié)議的可靠性及健壯性。在操作系統(tǒng)和安全關(guān)鍵軟件等一些重要軟件的上尤為重要。對于系統(tǒng)的評價(jià)一般有基于測量的方法和基于故障注入的方法,近年來提出了魯棒性基準(zhǔn)程序方法(RobuSTness Benchmarking)[1].魯棒性基準(zhǔn)程序(Robustness Benchmark)由一組健壯性測試用例組成。

實(shí)施軟件魯棒性測試的目的是發(fā)現(xiàn)所測代碼的健壯性薄弱環(huán)節(jié),并予以消除或增強(qiáng)抵抗異常情況的能力。增強(qiáng)代碼健壯性的過程包括:(1)確定軟件的激發(fā)健壯性失效的異常值參數(shù),并進(jìn)行測試;(2)分析測試結(jié)果,找出失效原因;(3)寫保護(hù)代碼屏蔽導(dǎo)致失效的異常值;(4)把保護(hù)代碼與軟件模塊相連接。

1 Linux測試

Linux 實(shí)現(xiàn)了很多重要的體系結(jié)構(gòu)屬性。在或高或低的層次上,內(nèi)核被劃分為多個(gè)子系統(tǒng)。Linux 也可以看作是一個(gè)整體,因?yàn)樗鼤⑺羞@些基本服務(wù)都集成到內(nèi)核中。這與微內(nèi)核的體系結(jié)構(gòu)不同,后者會提供一些基本的服務(wù),例如通信、I/O、內(nèi)存和進(jìn)程管理,更具體的服務(wù)都是插入到微內(nèi)核層中的。

Linux操作系統(tǒng)體系結(jié)構(gòu)從底層到頂部的順序依次是:內(nèi)核(包含內(nèi)核)、系統(tǒng)調(diào)用、內(nèi)建程序(操作系統(tǒng)的命令)。內(nèi)核是內(nèi)核代碼的組成部分,其調(diào)用程序直接運(yùn)行在內(nèi)核空間。內(nèi)核函數(shù)一旦出現(xiàn)異常,將立刻對整個(gè)操作系統(tǒng)產(chǎn)生影響。系統(tǒng)調(diào)用一般對內(nèi)核函數(shù)進(jìn)行封裝,以此作為內(nèi)核與用戶空間的接口。當(dāng)用戶程序使用系統(tǒng)調(diào)用時(shí)會轉(zhuǎn)到內(nèi)核空間,調(diào)用結(jié)束后又會返回用戶空間。內(nèi)核函數(shù)的測試結(jié)果一般分類為:函數(shù)錯(cuò)誤碼返回、異常、內(nèi)核掛起、工作負(fù)載夭折、工作負(fù)載結(jié)果不正確、工作負(fù)載完成.

Linux內(nèi)核函數(shù)魯棒性測試的最終目的是要提高系統(tǒng)的健壯性,需要根據(jù)測試結(jié)果生成相應(yīng)的保護(hù)代碼。

2 魯棒性維度分析

典型的魯棒性測試包括模塊化基準(zhǔn)測試和層次化測試兩種主要方法。模塊化基準(zhǔn)測試是對一個(gè)系統(tǒng)進(jìn)行分離測試。它把一個(gè)獨(dú)立的系統(tǒng)看作是一系列組件的集合,如文件系統(tǒng)、內(nèi)存系統(tǒng)、外部交互系統(tǒng)、鎖機(jī)制和多道程序運(yùn)作等,另外還通過一個(gè)監(jiān)視器程序來監(jiān)視和收集測試的結(jié)果。而層次化測試是通過定義一個(gè)清晰的交互層,使測試和對各種模塊進(jìn)行測試的執(zhí)行細(xì)節(jié)相分離。一些測試可以適用于所有模塊,而另一些可能只適合一個(gè)模塊子集。使用層次性結(jié)構(gòu)是分解系統(tǒng)的好方法。通過層次化來對操作系統(tǒng)進(jìn)行測試可以收到較好的效果。

無論采用模塊化基準(zhǔn)測試還是層次化方法,最終都是對操作系統(tǒng)接口函數(shù)采用參數(shù)的組合測試。對魯棒性測試結(jié)果進(jìn)行分析的一種方法是使用維度模型。維度有兩種定義:(1)參數(shù)維度,它指的是模塊中參數(shù)的個(gè)數(shù),對于一個(gè)軟件模塊而言,參數(shù)維度被定義為其變量的個(gè)數(shù);(2)魯棒性失效維度,對于引起魯棒性失效的一組特殊參數(shù),那些確實(shí)引起失效的參數(shù)的個(gè)數(shù)被定義為魯棒性失效維數(shù)。

2.1 維度失效

維度失效分一維失效和多維失效。多維失效的參數(shù)一定都是符合條件的系統(tǒng)能夠識別的值。一維失效和多維失效所引發(fā)的原因不同,一維失效是參數(shù)非法,多維失效是參數(shù)組合非法(每個(gè)參數(shù)都是合法的)。當(dāng)一維失效用例被保護(hù)和屏蔽后,會不會跳轉(zhuǎn)為多維失效,關(guān)鍵是看其參數(shù)是否構(gòu)成組合關(guān)系。從對其參數(shù)的組合關(guān)系的判定上,可以判斷該失效用例是真維失效用例還是變維失效用例。

基于低維度優(yōu)先的維度模型中失效維度不可能超過參數(shù)維度??赡軐儆谝痪S失效的某個(gè)失效,同時(shí)也可能屬于高維失效。激發(fā)軟件魯棒性失效所需考慮的最少因素取決于魯棒性失效維數(shù),當(dāng)參數(shù)維度為失效維度時(shí),測試結(jié)果的觀察最為直觀;當(dāng)參數(shù)維度大于失效維度,測試結(jié)果的觀察就不太直觀了。失效維度也可以通過觀察魯棒性測試的響應(yīng)模式得到。

2.2 失效狀態(tài)分析

維度失效狀態(tài)分為三類。(1)真維失效指狀態(tài)失效條件被屏蔽后,測試用例跳轉(zhuǎn)到正常狀態(tài);(2)同維失效指狀態(tài)失效條件被屏蔽后,失效維度保持不變;(3)變維失效指相同條件下產(chǎn)生失效維度升高。由于基于低維度優(yōu)先原則,所以由高維度向低維度的失效躍遷跳變不可能發(fā)生[3].魯棒性測試用例的失效維度狀態(tài)轉(zhuǎn)變?nèi)鐖D1所示。

33.jpg

現(xiàn)以Linux系統(tǒng)函數(shù)read(fd, buf,count)為實(shí)例進(jìn)行分析,說明上述不同失效維度之間的轉(zhuǎn)變問題。函數(shù)的三個(gè)參數(shù)取值如表1所示。

34.jpg

假設(shè)當(dāng)參數(shù)fd取值errno file,buf取值 Null時(shí),均會產(chǎn)生一維失效。當(dāng)fd取合法的值,并且buf分配空間小于count時(shí)產(chǎn)生一個(gè)二維失效。此時(shí),對參數(shù)fd取值empty file進(jìn)行保護(hù)屏蔽,則一些測試用例將會通過測試,如read(empty file,8,1);而另一些用例則維持一維失效不變,如read(empty file,Null,1024);還有一些用例將轉(zhuǎn)化為多維(維度≥2)失效,如read(empty file,1,8)。

3 魯棒性測試

當(dāng)參數(shù)維度等于失效維度時(shí),很容易看出是哪些參數(shù)失效。而測試時(shí)維度的跳變,會給魯棒性測試的分析帶來困難,會影響測試覆蓋率的問題,還牽扯到測試用例的增加.在魯棒性測試中可以利用參數(shù)的性進(jìn)行測試。將傳統(tǒng)的組合測試法分為兩步:性測試和非關(guān)聯(lián)性測試。魯棒性關(guān)聯(lián)測試的流程如圖2所示。

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
光電開關(guān)相關(guān)文章:光電開關(guān)原理

上一頁 1 2 下一頁

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉