消息擾動系統的製作方法
2023-05-28 14:35:01 2
專利名稱:消息擾動系統的製作方法
技術領域:
本發明屬於電子技術領域中的故障測試技術,具體涉及一種消息擾動系統。
背景技術:
在一些特定應用領域,例如航天、核電站、鐵路控制、醫療、通信等,對軟體的可靠性、安全性要求越來越高,這些軟體的失效,往往會造成重大損失。
而軟體故障注入技術是業界常用的一種用於提高軟體可靠性的方法。該故障注入測試方法是指通過人為的方式在待測試系統中引入故障,考察該待測試系統的容錯能力和薄弱環節。
但是,隨著軟體規模的不斷增大,對軟體的測試越來越困難,而另一方面,對軟體的可靠性要求則越來越高。當今的大規模軟體大部分是由更小一些的軟體模塊構成的,模塊與模塊之間的接口通常都是消息接口,因此,模塊之間消息傳遞的可靠性對整個軟體有很大的影響。且由於系統受到非法消息攻擊而造成事故在大型軟體系統中時有發生,因此,消息接口的軟體模塊的消息故障注入測試就變得更為必要。
在現有技術中,還沒有成功應用的在軟體模塊的消息接口之間引入消息故障注入測試技術,可見,如何實現這一技術,是業界極需解決的技術問題。
發明內容
本發明提出了一種消息擾動系統,以解決現有技術中沒有在軟體模塊的消息接口之間引入消息故障注入測試技術的問題。
為解決上述問題,本發明提供如下技術方案
一種消息擾動系統,其包括第一消息模塊、第二消息模塊,其中該裝置還包括一連接在第一消息模塊及第二消息模塊接口間的消息擾動系統,該消息擾動系統接收從第一模塊輸入的消息,並對該消息進行至少一個故障幹擾後,再將消息輸出至第二消息模塊。
所述的消息擾動系統具體包括有消息擾動模塊,接收待測消息,並對待測消息進行故障幹擾;消息擾動配置模塊,用於給消息擾動模塊配置故障幹擾模塊。
所述的消息擾動模塊至少包括下述一種子模塊丟包控制子模塊,用於完成消息丟棄處理;誤碼插入子模塊,用於完成在消息內容中插入誤碼;重包控制子模塊,用於完成消息的複製;亂序控制子模塊,用於擾亂消息流中消息的先後順序;延時控制子模塊,用於完成消息的延時。
其中,對待測消息進行故障幹擾至少包括丟棄擾動、誤碼擾動、重包擾動、亂序擾動及時延擾動中的一種。
採用本發明所述的技術方案,可以方便地得到消息傳遞過程中囊括多種消息故障注入主要測試點的故障模式,更具體的包括丟包、誤碼、重包、亂序、超時、消息格式錯誤、消息數據錯誤、消息一致性錯誤等。本發明具有良好的靈活性、通用性和可重用性,其可廣泛應用於任何需要進行消息故障注入測試的軟體系統中基於消息接口的各模塊之間,進而可以考察該待測試系統的容錯能力和薄弱環節。通過這些錯誤消息的測試,軟體系統將大大提高其穩定性、可靠性、安全性。
圖1是本發明實施例消息擾動系統原理示意圖;圖2是本發明實施例消息擾動系統組成結構示意圖;圖3是本發明實施例消息擾動的具體實現流程圖;圖4是本發明實施例消息順序擾動原理示意圖。
具體實施例方式
下面結合如圖1、2、3所示的具體實施例情形來詳細描述本發明。
本實施例是基於消息接口的軟體模塊的消息故障注入測試而製作的消息擾動系統。
如圖1所示為本發明實施例的消息擾動原理示意圖,本實施例位於需要進行消息擾動的消息接口模塊A與模塊B之間,消息擾動系統將模塊A的消息全部截獲,經過丟棄、誤碼、複製、順序和時延擾動後,再發回原來接收該消息的模塊B。
如圖2所示為本發明實施例的消息擾動系統組成結構示意圖,其組成包括消息擾動模塊,用於由消息擾動配置模塊配置數據後進行丟棄、誤碼、複製、順序或時延的故障幹擾;消息擾動配置模塊,用於對已被截獲的消息配置所述丟棄、誤碼、複製、順序或時延擾動;截獲被測模塊接口的消息經由消息擾動模塊進行相應故障幹擾後,再從原來接收該消息的模塊接口出去,其中,由消息擾動配置模塊配置數據以確定故障幹擾模式。
該消息擾動模塊具體包括下述各子模塊丟包控制子模塊21,用於完成消息丟棄處理;誤碼插入子模塊22,用於完成在消息內容中插入誤碼;重包控制子模塊23,用於完成消息的複製;亂序控制子模塊24,用於擾亂消息流中消息的先後順序;延時控制子模塊25,用於完成消息的延時。
由消息擾動配置模塊配置數據得到的參數,輸入給對應的所述擾動子模塊,該擾動子模塊完成相應的擾動。
下面分別對各子模塊進行具體闡述1、丟包控制子模塊21該子模塊主要完成消息丟棄處理。而丟棄策略可以採用隨機方式或非隨機方式。
丟包控制過程開始時,首先判斷是否需要跟蹤接口消息,如果需要跟蹤,則把消息內容按十六進位格式列印出來;然後判斷本丟包控制是否處於停止狀態,如果處於停止狀態,則不進行丟包處理,直接返回FALSE,否則繼續,判斷如果丟包處理處於自動停止狀態,並且擾動時間或擾動次數已為0,則不進行丟包處理,直接返回FALSE,否則繼續,判斷如果丟包處理處於指定丟包方式,並且當前消息不符合指定的條件,則不進行丟包處理,否則繼續。
最後用丟包率倒數後取整所得數為參數取隨機值,如果該隨機值為0,表明該消息需要丟棄,調用釋放消息函數釋放本消息。如果工作狀態為自動停止方式,並且擾動次數大於0,則擾動次數減1,丟棄成功,返回TRUE。
上述闡述中的數據定義部分參見下表1.1
接口函數BOOLFIT_PT_DiscardMsg(pTDiscarder pDiscarder,BYTE*pMsg)
被調用函數(1)void FreeMsg(BYTE*pMsg),為釋放消息函數,把消息所佔用內存釋放回系統內存管理單元。
(2)DWORD Random(void),為隨機數產生函數,返回一個偽隨機整數。
2、誤碼插入子模塊22該子模塊主要完成對消息內容的誤碼插入功能,支持變長和定長消息。
該子模塊接收到消息後,首先判斷該模塊是否處於停止狀態,如果處於停止狀態,則不進行誤碼插入處理,直接返回FALSE,否則繼續,判斷如果該模塊處於自動停止狀態,並且擾動時間或擾動次數已為0,則不進行處理,直接返回FALSE,否則繼續,判斷如果該模塊處於指定方式,並且當前消息不符合指定的條件,則不進行處理。
通過前面的檢查後,調用函數取得該消息的長度,並與配置數據中的終止位置比較,如果該終止位置在該消息的合法長度後面,則取該長度值為擾動終止位置,否則按照配置的數據作為終止位置。
然後取配置數據中的誤碼插入開始位置,從開始到結束位置以字節為單位逐一誤碼插入,誤碼插入條件為按照誤碼率倒數取整所得數為參數產生的隨機值小於8,然後判斷工作狀態是否為自動停止狀態,並且擾動次數大於0,則把擾動次數減1。該子模塊處理完後將消息送至下一個子模塊處理。
上述闡述中的數據定義部分參見下表2.1
接口函數void FIT_PT_InsertErrBits(pTBitsFlipper pBitsFlipper,BYTE*pMsg)
被調用函數(1)DWORD Random(void),為隨機數產生函數,返回一個偽隨機整數。
3、重包控制子模塊23該子模塊用於完成對消息的複製功能,支持變長和定長消息。
該模塊接收到由誤碼插入子模塊處理過的消息後,首先判斷該模塊是否處於停止狀態,如果處於停止狀態,則不進行消息複製,進入下一個模塊的處理,否則繼續,判斷如果該模塊處於自動停止狀態,並且擾動時間或擾動次數已為0,則不進行複製,進入下一個模塊的處理,否則繼續,判斷如果該模塊處於指定方式,並且當前消息不符合指定的條件,也不進行複製。
通過前面的檢查後,用擾動概率倒數取整所得數作為調用隨機函數的參數產生一個隨機值,如果該隨機值不為0,則表示本消息不需要進行複製,直接進入下一個模塊處理;如果該隨機值為0,則需要複製,調用函數取得本消息的長度,同時用配置數據中的最大消息複製數作為參數再一次調用隨機函數,得到本次擾動需要複製的消息數量。
然後按照本消息的長度申請空閒內存,如果申請不成功,進入下一個模塊的處理,如果申請成功,把本消息內容拷貝到新消息中去,把新消息發送到下一個模塊繼續處理,同時如果當前本模塊工作方式處於自動停止狀態而且擾動次數大於0,則把擾動次數減1。
最後重複上面的複製過程,直到全部複製完成,同時把最開始的消息,即被複製的樣板消息本身發送到下一個模塊繼續處理。
上述闡述中的數據定義部分參見下表3.1
接口函數void FIT_PT_DuplicateMsg(pTDuplicater pDuplicater,BYTE*pMsg)
被調用函數(1)DWORD Random(void),為隨機數產生函數,返回一個偽隨機整數。
(2)BYTE*AllocMsg(WORD Len),為申請分配一個長度為Len的空閒消息塊函數。
4、亂序控制子模塊24該子模塊完成在消息流中擾動消息的先後順序功能。
消息順序擾動原理如圖4所示,初始化時,置整個擾動池為空。當消息進入時,亂序控制模塊接收到消息後,也要進行一連串的檢查。
首先判斷本模塊是否處於停止狀態,如果處於停止狀態,則不進行消息擾動,直接返回,否則繼續,再判斷如果該模塊處於自動停止狀態,並且擾動時間或擾動次數已為0,則不進行亂序擾動,直接返回,否則繼續,判斷如果該模塊處於指定方式,並且當前消息不符合指定的條件,或者按照擾動概率計算出來的隨機值不為0,表明不需進行擾動,否則計算插入位置。
插入位置分兩步計算第一步,按照配置數據中的最大擾動距離為參數調用隨機函數得到本消息的提前或滯後量;第二步,檢查剛才計算出的位置是否已經有消息佔用,如果被佔用,則就近找一個空位置填入,否則把當前消息置入該位置。
然後檢查讀出位置,如果不空,則把對應消息發送到延時處理部分,然後把該位置清空,重複兩次,最後把當前指針和輸出指針向後移二個位置。每次移動二個位置是為了改善在強擾動條件下的擾動性能。
最後把處理過的消息發送到下一個模塊繼續處理。
上述闡述中的數據定義部分參見下表4.1
#define POOL_SIZE(FIT_PT_MAX_MSG_DISTANCE*2+2)*2為消息擾動池大小接口函數void FIT_PT_DisorderMsg(pTDisorder pDisorder,BYTE*pMsg)
被調用函數DWORD Random(void),為隨機數產生函數,返回一個偽隨機整數。
5、延時控制子模塊25該子模塊完成消息延時功能。
當延時控制模塊接收到消息時,如果該模塊工作狀態處於停止狀態;或者是自動停止狀態並且擾動時間或擾動次數為0;或者是指定方式而且不符合指定條件;或者根據擾動概率計算得到的隨機數不為0;則檢查是否需要跟蹤,如果需要跟蹤,則根據消息的長度把整個消息按照十六進位格式列印出來,然後把該消息發送出去。否則,如果是自動停止工作方式並且擾動計數大於0,則把該計數值減1。
然後按照配置數據中的最大延時量為參數調用隨機函數取得當前消息的延時量,把該消息送入延時隊列中,如果入隊列失敗,作為異常處理,還要把該消息按不延時處理,立即發送出去。
上述闡述中的數據定義部分參見下表5.1
FIT_PT_TTimer定時器結構
接口函數void FIT_PT_DelayMsgProc(pTMsgDelayer pMsgDelayer,BYTE*pMsg)
void FIT_PT_MsgDelayTimerProc(pTMsgDelayer pMsgDelayer,DWORD dwTickNum)
BOOL FIT_PT_AddMsg(pTMsgDelayer pMsgDelayer,BYTE*pMsg,DWORD dwDelayTime)
被調用函數(1)DWORD Random(void),為隨機數產生函數,返回一個偽隨機整數。
(2)void SendMsg(pTMsgPerturber pMsgPerturber,BYTE*pMsg),為消息發送函數。
在使用消息擾動程序時,本函數需要結合實際環境重新編寫,完成消息發送功能。根據pMsgPerturber的值識別消息的發送方向。
(3)void printf(char*fmt,...),為列印函數,按照fmt格式字符串的格式列印指定內容。
上述是對消息擾動模塊中的各子模塊進行的具體闡述。
如圖2所示,消息擾動配置模塊通過接口函數對接口參數進行處理,進而選擇進行那種擾動模式,以便在消息擾動模塊進行相應處理。其接口函數具體包括查詢屬性、設置屬性、查詢工作狀態、設置工作狀態、查詢擾動時間、設置擾動時間、查詢擾動次數、設置擾動次數、查詢工作方式、設置工作方式、查詢擾動概率、設置擾動概率、查詢是否跟蹤、設置是否跟蹤。同時在消息擾動模塊的五個子模塊中也包含有與上述各種接口函數相應的接口函數,當消息擾動配置模塊配置完擾動模式後,如圖2所示,消息擾動配置模塊通過接口函數對個子模塊的內部工作參數進行配置,使其能獨立工作。接口函數具體包括查詢/設置屬性、工作狀態、擾動時間、擾動次數、工作方式、擾動概率、是否跟蹤等。
下面消息擾動配置模塊進行具體闡述1、丟棄控制屬性,如前述表1.1所示。
2、誤碼插入屬性,如前述表2.1所示。
3、複製控制屬性,如前述表3.1所示。
4、擾序控制屬性,如下述表所示
5、時延控制屬性,如下述表所示
6、應用接口(1)消息入口void FIT_PT_PerturbMsg(pTMsgPerturber pMsgPerturber,BYTE*pMsg)該函數是消息擾動系統總的入口函數,調用後,對該消息不用再管理,如果遇到異常,就會由擾動器自動釋放該消息所佔的內存。在處理上,首先由消息擾動配置模塊判斷入口參數的合法性,然後對消息進行丟棄處理、誤碼插入、複製、擾序和延時返回值FALSE表示該消息已經不存在了。
(2)定時器處理void FIT_PT_MsgDelayTimerProc(pTMsgDelayer pMsgDelayer,DWORD dwTickNum)該函數是消息擾動器的TICK驅動函數,主要用於延時處理中的時間基準。同時也用於各個模塊的處理時間的計時,在自動停止方式下,當某個模塊的處理時間到時,將自動停止該模塊的擾動功能。另外,為避免不輸入消息時亂序擾動池中的消息不至於呆死在裡面,在本函數中進行定時清理一遍,最後,處理定時器中的消息,把定時時間到的消息通過調用消息發送函數發送出去,完成延時擾動。
綜上所述,被測模塊接口的消息被截獲後,首先由消息擾動配置模塊配置數據以確定其擾動模式,然後在消息擾動模塊進行相應擾動,最後擾動後的消息再發送回原來接收該消息的模塊接口,消息擾動結束。
本發明實施例前述的一種消息擾動系統,如圖3所示,其工作過程包含以下步驟一、截獲被測模塊接口的消息。
消息擾動模塊截獲被測模塊接口A的接口消息,用於將其進行丟棄、誤碼、複製、順序或時延擾動處理。
二、將接口消息進行丟包、插入誤碼、重包、擾序或延時擾動。
消息擾動模塊截獲被測模塊接口的接口消息後,根據消息擾動配置模塊26提供的配置數據,例如擾動模式、擾動概率等,確定選擇消息擾動模塊中的擾動模式並施加相應擾動,如丟包、插入誤碼、重包、擾序、延時擾動中的一種或幾種,依具體情況而定。
三、將擾動後的消息再發回原來接收該消息的模塊接口。
經過上述各子模塊處理過的消息再發送回原來接收該消息的模塊接口B,進而整個消息擾動過程結束。
本實施例可以方便地得到消息傳遞過程中的故障模式,囊括如丟包、誤碼、重包、亂序、超時、消息格式錯誤、消息數據錯誤、消息一致性錯誤等多種消息故障注入主要測試點。本實施例具有良好的靈活性、通用性和可重用性,其可廣泛應用於任何需要進行消息故障注入測試的軟體系統中基於消息接口的各模塊之間,進而可以考察該待測試系統的容錯能力和薄弱環節。通過這些錯誤消息的測試,軟體系統將大大提高其穩定性、可靠性、安全性,從而,實現了考察系統的容錯能力和系統薄弱環節的測試過程。
權利要求
1.一種消息擾動系統,其包括第一消息模塊、第二消息模塊,其特徵在於,該裝置還包括一連接在第一消息模塊及第二消息模塊接口間的消息擾動系統,該消息擾動系統接收從第一模塊輸入的消息,並對該消息進行至少一個故障幹擾後,再將消息輸出至第二消息模塊。
2.如權利要求1所述的消息擾動系統,其特徵在於,所述的消息擾動系統具體包括有消息擾動模塊,接收待測消息,並對待測消息進行故障幹擾;消息擾動配置模塊,用於給消息擾動模塊配置故障幹擾模塊。
3.如權利要求2所述的消息擾動系統,其特徵在於,所述的消息擾動模塊至少包括下述一種子模塊丟包控制子模塊,用於完成消息丟棄處理;誤碼插入子模塊,用於完成在消息內容中插入誤碼;重包控制子模塊,用於完成消息的複製;亂序控制子模塊,用於擾亂消息流中消息的先後順序;延時控制子模塊,用於完成消息的延時。
4.如權利要求2所述的消息擾動系統,其特徵在於,對待測消息進行故障幹擾至少包括丟棄擾動、誤碼擾動、重包擾動、亂序擾動及時延擾動中的一種。
全文摘要
本發明涉及一種消息擾動系統,其包括第一消息模塊、第二消息模塊,其中該裝置還包括一連接在第一消息模塊及第二消息模塊接口間的消息擾動系統,該消息擾動系統接收從第一模塊輸入的消息,並對該消息進行至少一個故障幹擾後,再將消息輸出至第二消息模塊。通過本發明,可以解決現有技術中沒有在軟體模塊的消息接口之間引入消息故障注入測試技術的問題。
文檔編號G06F11/36GK1567236SQ03149380
公開日2005年1月19日 申請日期2003年6月25日 優先權日2003年6月25日
發明者葉小仁 申請人:華為技術有限公司