設(shè)備為達(dá)到連續(xù)可運(yùn)行目標(biāo),除了在硬件設(shè)計(jì)中考慮器件可連續(xù)無故障運(yùn)行外,很重要的方面是軟件在各種條件下可經(jīng)受考驗(yàn),持續(xù)工作。這需要在實(shí)現(xiàn)基本功能前提下,在軟件中設(shè)計(jì)一系列容錯(cuò)性邏輯去保證。為全面評(píng)估軟件容錯(cuò)性和故障恢復(fù)能力,測(cè)試需要制造或模擬一系列條件,包括內(nèi)部硬件故障條件、外部惡意攻擊條件、偶發(fā)過載條件、軟件資源耗盡條件、周邊環(huán)境故障條件以及長(zhǎng)時(shí)間正常負(fù)荷持續(xù)運(yùn)行模擬。為了在產(chǎn)品開發(fā)的不同階段組織針對(duì)性測(cè)試,這些測(cè)試行為又被明確定義并歸類。
測(cè)試分類
1、協(xié)議健壯性測(cè)試
協(xié)議健壯性測(cè)試是為了找出特定協(xié)議的具體實(shí)現(xiàn)代碼的弱點(diǎn)。是一種以破壞性手段去嘗試運(yùn)行軟件的行為,通過用戶接口的異常輸入,使用異常協(xié)議消息交互引導(dǎo)軟件進(jìn)入未定義或未保護(hù)的狀態(tài)。
對(duì)軟件系統(tǒng)而言,合法輸入組合以外的輸入往往超出正常輸入的組合,軟件運(yùn)行中總會(huì)遇到一些預(yù)期之外的輸入。因此,軟件需要有嚴(yán)格的合法性檢查才能避免進(jìn)入未知狀態(tài)。協(xié)議健壯行測(cè)試的目標(biāo)就是盡可能找出軟件保護(hù)不周的問題。
在軟件測(cè)試的早期階段進(jìn)行的參數(shù)邊界值測(cè)試就屬于健壯性測(cè)試的一部分。比如一個(gè)用戶接口接受1-100的整數(shù)輸入,那么1和100就是合法邊界,大于100和小于1的輸入都是非法輸入。其他非整數(shù)型的輸入也屬于非法值,包括故意破壞檢查輸入條件的代碼的一些組合(如超長(zhǎng)輸入值,空輸入,格式化字符等)。軟件面對(duì)的接口除了最終用戶可見的部分之外,還有大量的軟件組件之間的不可見部分,以及設(shè)備之間的通信協(xié)議接口。
除了單一輸入的簡(jiǎn)單合法性判斷,軟件在組合輸入和特定狀態(tài)下可接受輸入的定義更為復(fù)雜。為確認(rèn)軟件在各種條件下的運(yùn)行正常,測(cè)試需要嘗試盡可能多的組合。復(fù)雜的通信協(xié)議除了定義有邏輯化結(jié)構(gòu)的報(bào)文格式,還有一系列的內(nèi)部狀態(tài),要測(cè)試人員完全手工方式遍歷這些狀態(tài),并且構(gòu)造所有可能的異常組合輸入條件是無法想象的,因此需要專用的測(cè)試工具和儀器專門檢測(cè)軟件對(duì)各種協(xié)議變異報(bào)文的處理。目前,商用化的測(cè)試工具已經(jīng)很多,比如IxDefend協(xié)議健壯性測(cè)試套件和MuDynamics的fuzzing測(cè)試套件是比較強(qiáng)大的。為了達(dá)成在特定狀態(tài)下注入錯(cuò)誤,測(cè)試套件需要先完成一些合法的交互過程,使被測(cè)目標(biāo)達(dá)到預(yù)設(shè)狀態(tài),然后再注入異常。復(fù)雜的協(xié)議需要事先配置很多參數(shù)去達(dá)成這種交互,而變異輸入的變化和組合數(shù)量非常龐大,一個(gè)復(fù)雜協(xié)議經(jīng)常達(dá)到幾十萬甚至上百萬的測(cè)試用例,盡管有自動(dòng)化測(cè)試工具,這種測(cè)試運(yùn)行也要耗費(fèi)大量的時(shí)間。因此,對(duì)參數(shù)的調(diào)整是測(cè)試需要關(guān)注的一個(gè)重要方面。
從系統(tǒng)測(cè)試的角度,觀測(cè)協(xié)議健壯性的測(cè)試結(jié)果是比較困難的,一般是從系統(tǒng)外部觀察整機(jī)是否存在異常,正在被測(cè)試的協(xié)議功能有沒有停止響應(yīng),正常用戶請(qǐng)求是否得到及時(shí)處理,設(shè)備的性能有沒有下降。最容易被觀測(cè)到現(xiàn)象是系統(tǒng)死鎖或重啟,系統(tǒng)性能變化或主要功能異常也能被及時(shí)發(fā)現(xiàn)。而一些細(xì)微的功能異?;蛸Y源耗費(fèi),很容易被測(cè)試人員忽視,在這里,測(cè)試工具也無能為力。
以IxDefend測(cè)試TLS-Server舉例。
完成測(cè)試儀器與被測(cè)試設(shè)備的物理連接,并且將端口配置IP地址,開啟TLS-Server服務(wù)。
通過測(cè)試儀器的GUI控制界面裝入TLS Server測(cè)試套件,如圖1所示。
配置TLS Server測(cè)試所需要的參數(shù),包括被測(cè)試設(shè)備IP、TLS服務(wù)端口、超時(shí)時(shí)間等,如圖2所示。
點(diǎn)擊開始按鈕啟動(dòng)測(cè)試運(yùn)行。
測(cè)試運(yùn)行期間,儀器會(huì)發(fā)送事先定義好的各種異常組合,并檢查設(shè)備對(duì)這些報(bào)文的響應(yīng)。一旦被測(cè)試設(shè)備失去任何響應(yīng),就記錄為一次失敗,并持續(xù)嘗試下面的測(cè)試用例。如圖3所示的是一個(gè)真實(shí)的運(yùn)行記錄,設(shè)備在某項(xiàng)測(cè)試運(yùn)行后發(fā)生異常,該項(xiàng)目被標(biāo)記為紅色。測(cè)試人員可以根據(jù)該記錄重現(xiàn)問題,并將設(shè)備異常信息一并提交給開發(fā)定位具體
圖1IxDefend選擇測(cè)試套件
圖2IxDefend配置TLS-Server套件運(yùn)行參數(shù)
圖3IxDefend運(yùn)行結(jié)果統(tǒng)計(jì)
2、硬件故障模擬測(cè)試
通常,判斷軟件行為是否正常的先決條件之一是其是否運(yùn)行在正確的硬件環(huán)境之下,因?yàn)橛布收蠈?duì)軟件產(chǎn)生的影響往往是致命的和不可預(yù)測(cè)的。在實(shí)際情況中,越是造價(jià)昂貴且承擔(dān)重要任務(wù)的硬件系統(tǒng),其硬件的復(fù)雜度越高,故障率也更高。為了提高系統(tǒng)的可靠性,硬件在設(shè)計(jì)上會(huì)使用冗余器件的方式(比如多個(gè)電源、多個(gè)風(fēng)扇、多個(gè)交換網(wǎng)板、多個(gè)主控板),但在很多情況下,硬件替換做不到對(duì)軟件透明,需要依賴軟件檢測(cè)并采取一系列措施。此外,軟件還需要設(shè)計(jì)足夠的容錯(cuò)性去隔離硬件錯(cuò)誤的影響范圍。在非關(guān)鍵器件停止工作之前,軟件需要盡可能保證系統(tǒng)其它功能不受影響。
對(duì)測(cè)試人員而言,了解軟件對(duì)硬件的依賴,通過制造或模擬硬件器件故障檢驗(yàn)軟件行為的合理性,是可靠性測(cè)試的一個(gè)重要環(huán)節(jié)。硬件故障測(cè)試的目標(biāo)就是觀測(cè)和評(píng)估軟件在硬件失效時(shí)的反映,找出預(yù)期與實(shí)際結(jié)果之間的差距。在測(cè)試有備份硬件系統(tǒng)的產(chǎn)品時(shí),測(cè)試人員往往使用硬件拔出槽位,命令重啟等方式驗(yàn)證備份機(jī)制的有效性。然而,這還遠(yuǎn)遠(yuǎn)不夠。設(shè)備在實(shí)際運(yùn)行條件下器件被拔出只是一種維護(hù)行為,很多情況下是在連續(xù)運(yùn)行過程中,器件突然失效。測(cè)試人員需要驗(yàn)證這些情況,以確認(rèn)軟件設(shè)計(jì)的故障檢測(cè)機(jī)制和容錯(cuò)機(jī)制的真實(shí)有效性。
由于硬件系統(tǒng)的具體情況不同,每個(gè)器件的故障形式和直接影響不同,是否有規(guī)避方案需要具體分析。軟件對(duì)硬件可用性的依存度往往很高,因此硬件故障測(cè)試的結(jié)果經(jīng)常具有很大的爭(zhēng)議性。對(duì)測(cè)試結(jié)果的分析和判斷比測(cè)試設(shè)計(jì)和執(zhí)行更為重要。
現(xiàn)有的測(cè)試手段中,最直接的方式是通過改動(dòng)硬件線路或干預(yù)數(shù)字信號(hào)制造故障。此外,可以通過軟件加入調(diào)試命令,對(duì)一些關(guān)鍵器件的狀態(tài)進(jìn)行修改,設(shè)置為非法的狀態(tài)來模擬故障。
3、壓力測(cè)試
任何設(shè)備或系統(tǒng)都是在一定的工作負(fù)荷下完成其功能。如果外部加入的工作負(fù)擔(dān)超過其最大能力,系統(tǒng)效能會(huì)下降甚至是停止工作。這是一種與可用性相背離的特性,卻是任何系統(tǒng)的必然屬性。很多重要系統(tǒng)是通過增加硬件成本,人為降低承諾指標(biāo)來緩解這一問題,然而事實(shí)上都存在一個(gè)能力極限,除非輸入子系統(tǒng)進(jìn)行了硬性限制。
為了提高設(shè)備的性價(jià)比,一般軟件系統(tǒng)不會(huì)設(shè)定承載能力的硬性約束,因此,設(shè)備都會(huì)面對(duì)超負(fù)荷工作的場(chǎng)景。軟件設(shè)計(jì)力爭(zhēng)減少超負(fù)荷運(yùn)行的負(fù)面效應(yīng),使系統(tǒng)在合理壓力下能夠正常運(yùn)作是可靠性的一個(gè)重要考量。雖然用戶不會(huì)要求設(shè)備能在超負(fù)荷的工作環(huán)境下連續(xù)穩(wěn)定運(yùn)行,但在真實(shí)網(wǎng)絡(luò)中,負(fù)荷波動(dòng)是無法避免的,短時(shí)間的超載運(yùn)行不應(yīng)該導(dǎo)致災(zāi)難性的后果。
事實(shí)上,壓力除了令系統(tǒng)的計(jì)算能力經(jīng)受考驗(yàn),也會(huì)使系統(tǒng)內(nèi)的很多資源被軟件進(jìn)程占用;如果壓力消除以后,這些資源不能被充分釋放和回收,經(jīng)受過壓力的系統(tǒng)將無法完全恢復(fù)正常的工作能力。原因。
壓力測(cè)試就是通過制造設(shè)備的超載負(fù)荷,模擬設(shè)備在真實(shí)環(huán)境下可能遇到的場(chǎng)景。一臺(tái)網(wǎng)絡(luò)設(shè)備會(huì)有很多負(fù)載指標(biāo),驗(yàn)證各個(gè)指標(biāo)的超載工作能力是一項(xiàng)繁雜的測(cè)試工作。除了觀測(cè)壓力下設(shè)備的反應(yīng),在負(fù)荷恢復(fù)到承諾指標(biāo)范圍內(nèi)之后,系統(tǒng)完全達(dá)到正常工作狀態(tài)的能力和恢復(fù)時(shí)間也是用戶關(guān)心的指標(biāo)。這些高負(fù)載的測(cè)試一般都要依賴專用的測(cè)試儀器來模擬。
一般在設(shè)備規(guī)格會(huì)寫明產(chǎn)品支持的IP路由表容量、最大轉(zhuǎn)發(fā)數(shù)據(jù)流量、ARP或MAC地址容量等指標(biāo)。測(cè)試的工作就是把被測(cè)試設(shè)備與測(cè)試儀器連接,通過儀器構(gòu)造與規(guī)格指標(biāo)相同或略低的一項(xiàng)負(fù)載,再制造一個(gè)10%左右的異常波動(dòng)沖擊被測(cè)設(shè)備,并觀察被測(cè)設(shè)備在加載超載負(fù)荷前、負(fù)荷中和恢復(fù)到初始設(shè)定負(fù)荷之后的實(shí)際表現(xiàn)。。
不受壓力影響和能快速恢復(fù)的設(shè)備是可能被制造出來的,但是代價(jià)是必然提高硬件和軟件成本。因此一個(gè)合理的可接受的壓力反應(yīng)和恢復(fù)時(shí)間,往往需要根據(jù)用戶的使用場(chǎng)景和可承受成本綜合考慮。
4、內(nèi)存耗盡測(cè)試
與硬件發(fā)生故障類似,軟件所要面對(duì)的另一種是情況是資源枯竭。因?yàn)檐浖鲿车剡\(yùn)行需要依賴很多外部資源,其中包括:內(nèi)存、定時(shí)器、隊(duì)列、文件句柄、Socket等等。這些資源中最關(guān)鍵的就是內(nèi)存,因?yàn)楹芏噘Y源不足可以等待,內(nèi)存短缺會(huì)導(dǎo)致立即的操作失敗。一個(gè)復(fù)雜的軟件系統(tǒng)內(nèi)存資源都是動(dòng)態(tài)申請(qǐng)和釋放的,在各個(gè)處理進(jìn)程之間動(dòng)態(tài)流轉(zhuǎn)。在突發(fā)任務(wù)占用大量?jī)?nèi)存的情況下,其他任務(wù)就可能面臨資源枯竭。一個(gè)良好設(shè)計(jì)的軟件系統(tǒng)需要設(shè)定內(nèi)存門限,一旦內(nèi)存消耗達(dá)到門限會(huì)強(qiáng)制一些不重要的任務(wù)退出運(yùn)行而釋放資源。而且所有申請(qǐng)內(nèi)存的任務(wù)需要自身設(shè)計(jì)保護(hù)代碼,避免沒有申請(qǐng)成功時(shí)誤入歧途。
資源耗盡的情況下軟件系統(tǒng)必然會(huì)產(chǎn)生一些功能受限的反應(yīng),只要這種情況能在資源充足后得到恢復(fù)就不構(gòu)成嚴(yán)重問題。確認(rèn)系統(tǒng)在資源不足時(shí)沒有異常反映,合理屏蔽了次要功能,同時(shí)確保高優(yōu)先級(jí)進(jìn)程得到應(yīng)得的資源就是軟件測(cè)試所要做的工作。
測(cè)試手段通常是啟動(dòng)一些重要的功能和構(gòu)造動(dòng)態(tài)的運(yùn)行負(fù)荷,然后用調(diào)試命令占用內(nèi)存或啟動(dòng)一些消耗型任務(wù)占用內(nèi)存,以構(gòu)造資源耗盡的條件,觀察被測(cè)系統(tǒng)在內(nèi)存枯竭后的反應(yīng),并繼續(xù)進(jìn)行操作。最后再通過釋放占用的內(nèi)存來恢復(fù)正常條件,觀察系統(tǒng)受影響的功能是否自動(dòng)恢復(fù)。
內(nèi)存耗盡測(cè)試的原理非常簡(jiǎn)單,但是因?yàn)閯?dòng)態(tài)分配內(nèi)存的指令無處不在,測(cè)試覆蓋各種流程分支就要設(shè)定各種組合條件,存在很大執(zhí)行的難度。內(nèi)存耗盡測(cè)試可能發(fā)現(xiàn)長(zhǎng)期隱藏于軟件中的嚴(yán)重問題,徹底解決這些問題,對(duì)軟件的可靠性有很重要的意義。
5、拷機(jī)測(cè)試
由于軟件固有的邏輯復(fù)雜性和系統(tǒng)測(cè)試手段的限制,有些問題只有在實(shí)際環(huán)境下經(jīng)過足夠長(zhǎng)時(shí)間運(yùn)行才會(huì)出現(xiàn)??綑C(jī)測(cè)試就是在實(shí)驗(yàn)室模擬設(shè)備運(yùn)行的真實(shí)工作場(chǎng)景,通過規(guī)定負(fù)荷及偶發(fā)性過載條件下連續(xù)運(yùn)行,觀測(cè)被測(cè)設(shè)備連續(xù)無故障運(yùn)行時(shí)間,俘獲異常錯(cuò)誤的測(cè)試。
測(cè)試所構(gòu)造的工作場(chǎng)景能否還原真實(shí)應(yīng)用,是能否提早發(fā)現(xiàn)問題的關(guān)鍵。由于用戶的應(yīng)用場(chǎng)景千差萬別,需要用很多設(shè)備搭建組網(wǎng)來還原,而且必須等候足夠長(zhǎng)的時(shí)間,這是一種高成本的測(cè)試方式,卻又不可替代。測(cè)試人員一般會(huì)采用頻繁觸發(fā)設(shè)備狀態(tài)變化的手段加速問題出現(xiàn),這對(duì)某些問題有效,卻可能隱蔽另外一些問題。
H3C的每個(gè)產(chǎn)品都要經(jīng)過嚴(yán)格測(cè)試,其中必須進(jìn)行的一項(xiàng)就是長(zhǎng)時(shí)間的拷機(jī)環(huán)境測(cè)試。設(shè)備被接入一個(gè)運(yùn)行各種拓?fù)涔芾韰f(xié)議和有大量背景流量的模擬環(huán)境,以驗(yàn)證設(shè)備在典型應(yīng)用環(huán)境下7*24小時(shí)的穩(wěn)定運(yùn)行。即使產(chǎn)品已經(jīng)在市場(chǎng)正式投入使用,這套拷機(jī)環(huán)境還會(huì)持續(xù)運(yùn)行,并且經(jīng)常調(diào)整流量和業(yè)務(wù)規(guī)劃,以期覆蓋更多的用戶應(yīng)用環(huán)境。
6、收斂指標(biāo)測(cè)試
對(duì)網(wǎng)絡(luò)設(shè)備而言,保證網(wǎng)絡(luò)通暢是其最重要的功能之一。因此,網(wǎng)絡(luò)設(shè)備除保障自身連續(xù)運(yùn)行外,還專門設(shè)計(jì)了很多從環(huán)境故障中恢復(fù)網(wǎng)絡(luò)連通性的協(xié)議。有些則是針對(duì)自身發(fā)生異常時(shí)實(shí)現(xiàn)冗余硬件切換,流量路徑切換或快速故障恢復(fù)的協(xié)議。針對(duì)這些情況,有一個(gè)通用的度量指標(biāo),即網(wǎng)絡(luò)收斂指標(biāo),是通過網(wǎng)絡(luò)中斷服務(wù)(或故障恢復(fù))時(shí)間來考察設(shè)備或網(wǎng)絡(luò)提供的可靠性。
任何一種網(wǎng)絡(luò)路由協(xié)議或拓?fù)涔芾韰f(xié)議都是為了在動(dòng)態(tài)變化的網(wǎng)絡(luò)中提供一個(gè)可行的流量路徑而設(shè)計(jì)的,所以收斂是一個(gè)基本屬性。從注入拓?fù)渥兓蚬收习l(fā)生的時(shí)間開始,網(wǎng)絡(luò)服務(wù)和數(shù)據(jù)流量受到影響,在拓?fù)涫諗亢舐窂角袚Q到備份網(wǎng)絡(luò)上,恢復(fù)網(wǎng)絡(luò)服務(wù)和流量所經(jīng)歷的時(shí)間就是收斂時(shí)間。為加速收斂而提出的一。
附加技術(shù)可以使收斂時(shí)間縮短到毫秒級(jí)甚至在設(shè)備主控發(fā)生重啟等情況下提供不中斷的轉(zhuǎn)發(fā)服務(wù)。
圖4IGP路由收斂測(cè)試組網(wǎng)圖
IGP收斂的測(cè)試實(shí)例。
如圖4所示,被測(cè)試設(shè)備首先從B和C端口學(xué)習(xí)到大量的IGP路由信息,其中B端口的度量值優(yōu)于C端口。測(cè)試儀器用穩(wěn)定的流量由A端口發(fā)送,被測(cè)設(shè)備轉(zhuǎn)發(fā)到B端口。測(cè)試儀器通過在B端口模擬拓?fù)渥兓蜂N一部分路由信息,受影響的流量開始丟失。被測(cè)試設(shè)備在完成路由計(jì)算后將這些流量重新路由到C端口上。測(cè)試儀器通過計(jì)算這個(gè)過程丟失的數(shù)據(jù)流量和發(fā)送速率折算收斂過程經(jīng)歷的時(shí)間。
在收斂網(wǎng)絡(luò)之外來評(píng)估收斂時(shí)間時(shí),可以使用相同的原則,根據(jù)發(fā)送流量的速率和被丟失報(bào)文數(shù)量計(jì)算出收斂經(jīng)歷的時(shí)間。收斂測(cè)試的另一個(gè)方向是故障恢復(fù)主路徑時(shí),對(duì)于流量的保護(hù)。理想的情況可以做到網(wǎng)絡(luò)無中斷地回切到主路徑。然而不同的拓?fù)涔芾韰f(xié)議和具體實(shí)現(xiàn)技術(shù)有一定差別,很多情況下回切過程的流量丟失不能完全避免。
常見的收斂指標(biāo)測(cè)試有二層網(wǎng)絡(luò)STP收斂測(cè)試,RPR和RRPP環(huán)網(wǎng)收斂,三層路由協(xié)議RIP、OSPF、BGP收斂,以及雙主控設(shè)備的主備倒換測(cè)試,VRRP設(shè)備倒換測(cè)試。為了減少拓?fù)涔芾韰f(xié)議在設(shè)備重啟期間對(duì)周邊網(wǎng)絡(luò)的沖擊,很多協(xié)議開發(fā)了GracefulRestart的功能,并通過控制與數(shù)據(jù)轉(zhuǎn)發(fā)分離的Non-StopForwarding技術(shù)使流量轉(zhuǎn)發(fā)近乎不中斷。H3C的IRF2技術(shù)也可以將多個(gè)物理設(shè)備組成一個(gè)邏輯設(shè)備,以降低對(duì)STP、VRRP等慢收斂協(xié)議的依賴。所有這些技術(shù)的目標(biāo)都是減少設(shè)備故障造成的網(wǎng)絡(luò)影響,提高組網(wǎng)的可靠性,而評(píng)價(jià)這些技術(shù)的指標(biāo)都是網(wǎng)絡(luò)收斂時(shí)間。測(cè)試執(zhí)行的步驟幾乎是相同的,首先構(gòu)建正常的網(wǎng)絡(luò)拓?fù)?,模擬故障發(fā)生,監(jiān)測(cè)流量切換的過程和流量丟失的情況,計(jì)算切換需要的時(shí)間。
結(jié)束語
以上的幾種測(cè)試類型基本覆蓋了軟件可靠性相關(guān)的測(cè)試。在具體的產(chǎn)品開發(fā)過程中,協(xié)議健壯性測(cè)試、硬件故障模擬測(cè)試、內(nèi)存耗盡測(cè)試等適合在軟件功能組件的開發(fā)過程中進(jìn)行測(cè)試,而壓力測(cè)試、收斂指標(biāo)測(cè)試、拷機(jī)測(cè)試需要在系統(tǒng)整合并且功能穩(wěn)定后才能實(shí)施,所以一般放在產(chǎn)品開發(fā)后期。經(jīng)過全方位的可靠性測(cè)試并解決所有問題之后,軟件系統(tǒng)可以應(yīng)對(duì)各種內(nèi)部外部的復(fù)雜情況,為用戶提供更高可用性的健壯網(wǎng)絡(luò)。
評(píng)論
查看更多