專利名稱:通訊設(shè)備中命令行接口命令的自動拼寫檢查方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種數(shù)據(jù)通訊產(chǎn)品中網(wǎng)管人機命令的自動拼寫檢查方法及系統(tǒng),尤其涉及一種路由器、交換機以及接入服務(wù)器等數(shù)據(jù)通訊產(chǎn)品測試領(lǐng)域中網(wǎng)管CLI(Command Line Interface,命令行接口)命令相關(guān)文本的自動拼寫檢查器的實現(xiàn)及其自動拼寫檢查方法。
背景技術(shù):
現(xiàn)代數(shù)據(jù)通訊設(shè)備,如路由器、交換機和寬帶接入服務(wù)器等都支持基于命令行接口CLI的網(wǎng)管方式。操作人員通過運行測試主機上的Telnet(遠(yuǎn)程登錄協(xié)議)客戶端程序或超級終端程序與被測設(shè)備建立連接,并通過在程序內(nèi)鍵入并執(zhí)行CLI命令來對設(shè)備進(jìn)行配置管理、測試及維護(hù)等操作。CLI命令相關(guān)文本的拼寫正確性測試作為網(wǎng)管命令正確性測試的一項基本內(nèi)容,目前尚未有自動化的檢查方法以及有力的測試工具支持,測試人員一般只在測試網(wǎng)管命令功能和性能的同時,人工對拼寫正確性進(jìn)行檢查,所覆蓋的命令文本的路徑較單一和固定,并且很容易造成檢查錯誤和遺漏,因此,現(xiàn)有方法在檢查的效率和正確性方面均無法滿足設(shè)備測試的高效率和準(zhǔn)確性的要求。
因此,現(xiàn)有技術(shù)存有缺陷,尚有待于繼續(xù)改進(jìn)和發(fā)展。
發(fā)明內(nèi)容
本發(fā)明的目的在于提出一種通訊設(shè)備中命令行接口命令的自動拼寫檢查方法,針對現(xiàn)有技術(shù)的上述問題提出了一種解決方案,所構(gòu)造的軟件系統(tǒng)可實現(xiàn)網(wǎng)管人機命令相關(guān)文本的拼寫正確性的自動檢查,實現(xiàn)拼寫檢查的自動高效率和高準(zhǔn)確性。
本發(fā)明的目的還在于提供一種通訊設(shè)備中命令行接口命令的自動拼寫檢查系統(tǒng),要解決的技術(shù)問題包括CLI命令樹的自動遍歷、命令文本的拼寫檢查、用戶字典的構(gòu)建與定制以及命令文本在線檢查和離線檢查的實現(xiàn)方式,本發(fā)明提出的自動拼寫檢查系統(tǒng)能有效克服現(xiàn)有人工檢查方法在正確性和檢查效率方面的局限性,并可覆蓋被測設(shè)備CLI命令樹的全部命令分支,能有效地提高檢查的正確性以及檢查效率和質(zhì)量。
本發(fā)明的技術(shù)方案如下一種通訊設(shè)備中命令行接口命令的自動拼寫檢查系統(tǒng),其中,其包括如下功能模塊通訊協(xié)議模塊、命令狀態(tài)機模塊、命令樹遍歷模塊、字典引擎模塊、控制模塊、人機界面模塊;所述通訊協(xié)議模塊設(shè)置在測試主機操作系統(tǒng)的TCP/IP協(xié)議棧或串口驅(qū)動模塊之上,完成Telnet客戶端的協(xié)議處理或串口通訊協(xié)議處理,為所述命令狀態(tài)機模塊提供文本方式的人機命令字符流;所述命令狀態(tài)機模塊實現(xiàn)命令字符流的解析與處理,并調(diào)用所述命令樹遍歷模塊構(gòu)造命令節(jié)點樹;所述字典引擎模塊根據(jù)用戶選擇的字典文件完成初始字典的構(gòu)建,并提供命令文本的自動拼寫檢查;上述各模塊在所述控制模塊的協(xié)調(diào)下完成所述命令節(jié)點樹的遍歷和命令的預(yù)處理。
所述的自動拼寫檢查系統(tǒng),其中,所述字典引擎模塊對命令文本的自動拼寫檢查可實時或批處理進(jìn)行。
所述的自動拼寫檢查系統(tǒng),其中,所述控制模塊還控制在所述人機界面上拼寫錯誤的實時顯示與告警。
所述系統(tǒng)的自動拼寫檢查方法,其包括如下步驟a)在人機界面內(nèi)設(shè)置底層通訊參數(shù);
b)選擇字典文件,構(gòu)造初始字典;c)啟動所述命令狀態(tài)機,按照命令樹遍歷算法,生成命令節(jié)點樹,根據(jù)用戶設(shè)定的拼寫檢查方式,對人機命令文本進(jìn)行拼寫檢查。
所述的方法,其中,所述方法還包括所述用戶設(shè)定的拼寫檢查方式包括d)如果選擇實時檢查方式,則被測設(shè)備發(fā)送的字符串經(jīng)過命令預(yù)處理器處理,分解為單詞序列,并調(diào)用字典引擎的搜索算法模塊進(jìn)行匹配,匹配的結(jié)果實時顯示在人機界面中;如果選擇批處理方式,則命令文本首先存儲至內(nèi)存文件,在命令樹遍歷結(jié)束后進(jìn)行批量預(yù)處理和拼寫檢查,檢查結(jié)果顯示在人機界面中或在日志文件中。
所述的方法,其中,所述字典引擎采用鍵樹數(shù)據(jù)結(jié)構(gòu)。
所述的方法,其中,所述步驟b)中的字典的初始創(chuàng)建由用戶通過人機界面選擇字典文件的方式完成,字典引擎使用插入算法對字典文件中的單詞進(jìn)行批處理插入,后續(xù)新詞的插入使用同樣的算法完成,所述字典引擎的插入步驟如下b1)初始化單詞數(shù)組下標(biāo)為0,當(dāng)前節(jié)點為根節(jié)點;b2)判斷單詞該下標(biāo)的字符,如果為NULL,設(shè)置當(dāng)前節(jié)點#指針為TRUE;否則轉(zhuǎn)步驟b3);b3)判斷當(dāng)前節(jié)點中該單詞下標(biāo)字符對應(yīng)的指針,如果為NULL,以該單詞為鍵創(chuàng)建一葉節(jié)點,將該葉節(jié)點指針存儲在當(dāng)前節(jié)點中該單詞下標(biāo)字符所對應(yīng)的指針處,完成插入操作;否則轉(zhuǎn)步驟b4);b4)判斷當(dāng)前節(jié)點中該單詞下標(biāo)字符對應(yīng)的指針?biāo)傅墓?jié)點類型,如果為葉節(jié)點,轉(zhuǎn)步驟b6),否則轉(zhuǎn)步驟b5);b5)設(shè)置當(dāng)前節(jié)點為當(dāng)前節(jié)點中該單詞下標(biāo)字符對應(yīng)的指針?biāo)赶虻墓?jié)點,將單詞數(shù)組下標(biāo)遞增,轉(zhuǎn)步驟b2);b6)取該葉節(jié)點中的鍵值,從當(dāng)前字符起,累計該鍵值與插入單詞的公有前綴字符串,對該字符串中的每一字符,循環(huán)創(chuàng)建一非葉節(jié)點,并將其指針存至當(dāng)前節(jié)點中該單詞下標(biāo)字符對應(yīng)的指針處,設(shè)置當(dāng)前節(jié)點為該新創(chuàng)建的節(jié)點;b7)創(chuàng)建一葉節(jié)點,將其鍵值設(shè)置為插入的單詞,并將該節(jié)點指針置于步驟b6)中創(chuàng)建的最下一級內(nèi)部節(jié)點中;b8)判斷當(dāng)前字符位置,如果已到達(dá)插入單詞的末尾,設(shè)置步驟b7)中葉節(jié)點的單詞結(jié)束標(biāo)志;將步驟b6)中取出的節(jié)點指針置入步驟b6)中創(chuàng)建的最下一級內(nèi)部節(jié)點中的對應(yīng)字符的位置。
所述的方法,其中,所述字典引擎模塊的搜索步驟如下b11)初始化單詞數(shù)組下標(biāo)為0,當(dāng)前節(jié)點為根節(jié)點;b12)判斷當(dāng)前節(jié)點中該數(shù)組下標(biāo)字符對應(yīng)的節(jié)點指針,如果指針為NULL,則單詞不匹配,向上層報錯或記錄日志,取下一個單詞并轉(zhuǎn)本流程的步驟b11),否則轉(zhuǎn)步驟b13);b13)判斷該節(jié)點的類型,如果為葉節(jié)點,比較單詞所剩余字符串后綴與葉節(jié)點中存儲的字符串是否一致,如果不一致,則向上層報錯或記錄日志,取下一單詞,轉(zhuǎn)步驟b11);否則,匹配成功,取下一個單詞并轉(zhuǎn)步驟b11);b14)如果節(jié)點類型為內(nèi)部節(jié)點,則遞增單詞字符下標(biāo),將當(dāng)前指針設(shè)置為該節(jié)點中當(dāng)前字符索引的節(jié)點指針,并轉(zhuǎn)步驟b12)。
本發(fā)明所提供的一種通訊設(shè)備中命令行接口命令的自動拼寫檢查的方法及系統(tǒng),通過在測試主機通訊協(xié)議軟件層上構(gòu)建人機命令樹遍歷模塊,并使用可定制的用戶字典,在遍歷網(wǎng)管命令樹的同時,調(diào)用字典引擎模塊的命令預(yù)處理器以及相關(guān)接口函數(shù),完成命令文本的拼寫正確性檢查,對命令行接口命令可自動進(jìn)行拼寫檢查,提高了命令檢查的高效率性,并保證了命令的準(zhǔn)確性,對網(wǎng)管命令來說尤其具有方便高效準(zhǔn)確的效果。
圖1是本發(fā)明通訊設(shè)備中命令行接口命令的自動拼寫檢查方法及系統(tǒng)與被測設(shè)備的交互方式圖;圖2是本發(fā)明的通訊設(shè)備中命令行接口命令的自動拼寫檢查方法及系統(tǒng)的內(nèi)部結(jié)構(gòu)及功能模塊示意圖。
具體實施例方式
下面結(jié)合附圖對本發(fā)明的具體實施方式
進(jìn)行詳細(xì)說明。
本發(fā)明的所述通訊設(shè)備中命令行接口命令的自動拼寫檢查方法及系統(tǒng)中,該自動拼寫檢查方法通過在測試主機通訊協(xié)議軟件層上構(gòu)建人機命令樹遍歷模塊,并使用可定制的用戶字典,在遍歷網(wǎng)管命令樹的同時,調(diào)用字典引擎模塊的命令預(yù)處理器以及相關(guān)接口函數(shù),完成命令文本的拼寫正確性檢查,同時通過人機界面模塊實現(xiàn)錯誤文本的自動顯示和告警,實現(xiàn)拼寫檢查的自動高效率和高準(zhǔn)確性。
所述自動拼寫檢查系統(tǒng)首先在測試主機的拼寫檢查器軟件內(nèi)構(gòu)造字典引擎模塊,然后通過在通訊協(xié)議模塊上構(gòu)建人機命令字符串分析處理軟件模塊,在測試主機內(nèi)遍歷并生成網(wǎng)管命令節(jié)點樹數(shù)據(jù)結(jié)構(gòu),在構(gòu)造該數(shù)據(jù)結(jié)構(gòu)的過程中,實時調(diào)用字典引擎進(jìn)行CLI命令文本的搜索與匹配,或在命令樹構(gòu)造完成后對命令文本進(jìn)行批處理檢查。
本發(fā)明所提出的數(shù)據(jù)通訊產(chǎn)品網(wǎng)管人機命令的自動拼寫檢查系統(tǒng)以下簡稱為ACSC(Automatic CLI SpellChecker,CLI命令自動拼寫檢查器),如圖2所示,其包括如下功能模塊通訊協(xié)議模塊、命令狀態(tài)機模塊、命令樹遍歷模塊、字典引擎模塊、控制模塊、人機界面模塊等。
其中,通訊協(xié)議模塊構(gòu)建于測試主機操作系統(tǒng)的TCP/IP協(xié)議?;虼隍?qū)動模塊之上,完成Telnet客戶端的協(xié)議處理或串口通訊協(xié)議處理,為命令狀態(tài)機模塊提供文本方式的人機命令字符流;命令狀態(tài)機模塊實現(xiàn)命令字符流的解析與處理,并調(diào)用命令樹遍歷模塊構(gòu)造命令節(jié)點樹;字典引擎模塊根據(jù)用戶選擇的字典文件完成初始字典的構(gòu)建,并提供命令文本的實時或批處理檢查。上述各模塊在控制模塊的協(xié)調(diào)下完成節(jié)點樹的遍歷、命令的預(yù)處理以及拼寫錯誤的實時顯示與告警等功能。
本發(fā)明的所述通訊設(shè)備中命令行接口命令的自動拼寫檢查系統(tǒng)可在Telnet和串口兩種通訊方式下實現(xiàn),運行ACSC軟件的測試主機與被測設(shè)備的連接和交互模型如圖1所示。在Telnet方式下,ACSC軟件模塊構(gòu)建在操作系統(tǒng)TCP/IP協(xié)議棧軟件之上,協(xié)議棧底層與NIC驅(qū)動接口,在物理層經(jīng)網(wǎng)絡(luò)連接與被測設(shè)備管理口相連;相應(yīng)地,在被測設(shè)備側(cè)分別有對應(yīng)軟件層,包括網(wǎng)絡(luò)接口驅(qū)動、TCP/IP協(xié)議棧、Telnet服務(wù)器、人機命令處理模塊。在串口方式下,ACSC軟件模塊構(gòu)建于操作系統(tǒng)串口驅(qū)動程序之上,被測設(shè)備側(cè)也使用串口驅(qū)動和協(xié)議軟件,測試主機與被測設(shè)備通過串口線進(jìn)行數(shù)據(jù)交互。
如圖2所示的本發(fā)明的ACSC系統(tǒng)內(nèi)部結(jié)構(gòu)及功能模塊包括通訊協(xié)議模塊、命令狀態(tài)機模塊、命令樹遍歷模塊、字典引擎模塊、控制模塊、人機界面模塊。各模塊的功能與實現(xiàn)方式如下1.通訊協(xié)議模塊通訊協(xié)議模塊支持Telnet和串口兩種通訊方式,可根據(jù)人機界面模塊的用戶設(shè)置項分別啟動。在Telnet方式下,通訊協(xié)議模塊實現(xiàn)Telnet客戶端協(xié)議功能,提供RFC 854網(wǎng)絡(luò)虛終端(NVT)的實現(xiàn)方式。ACSC的算法可全部基于NVT方式實現(xiàn),通訊協(xié)議模塊無需支持其他Telnet選項,因此通訊協(xié)議模塊在選項協(xié)商時對被測設(shè)備的選項請求均可做否定應(yīng)答。通訊協(xié)議模塊為命令樹遍歷模塊的生成的命令查詢串提供發(fā)送接口,將這些查詢信息發(fā)送至被測設(shè)備。根據(jù)人機界面模塊的設(shè)置,通訊協(xié)議模塊在TCP端口23與被測設(shè)備建立連接。連接成功后,鏈路接收的數(shù)據(jù)流通過調(diào)用通訊協(xié)議模塊協(xié)議狀態(tài)機接口發(fā)送至Telnet狀態(tài)機處理,該狀態(tài)機處理數(shù)據(jù)流中的Telnet命令,進(jìn)行協(xié)議交互,并調(diào)用命令狀態(tài)機模塊接口將其他數(shù)據(jù)上傳給命令狀態(tài)機模塊處理。在串口方式下,通訊協(xié)議模塊根據(jù)人機界面模塊提供的COM端口號、波特率、數(shù)據(jù)校驗與停止位(與被測設(shè)備設(shè)置一致)信息設(shè)置本地串口參數(shù),并調(diào)用操作系統(tǒng)提供的讀寫文件API與被測設(shè)備進(jìn)行交互數(shù)據(jù)。通訊協(xié)議模塊將串口接收的字符流發(fā)送至命令狀態(tài)機模塊處理,并為命令樹遍歷模塊提供發(fā)送數(shù)據(jù)的接口函數(shù)。
2.命令狀態(tài)機模塊命令狀態(tài)機模塊在底層與通訊協(xié)議模塊接口,接收通訊協(xié)議模塊上傳的命令數(shù)據(jù)流。命令狀態(tài)機模塊內(nèi)部實現(xiàn)字符處理狀態(tài)機功能,根據(jù)輸入字符和當(dāng)前狀態(tài)決定后續(xù)操作。
CLI命令的一般格式如下,其中提示符為被測設(shè)備返回的命令提示字符串,命令串為ACSC系統(tǒng)在命令串后鍵入的命令查詢字符串,包括一系列命令、子命令、參數(shù)以及查詢字符串。被測設(shè)備接收上述命令字符串后返回該命令字符串的所有下一級子命令、參數(shù)、結(jié)束符,以及各子命令、參數(shù)的描述信息。
[命令串][子命令][命令描述][參數(shù)][命令描述][結(jié)束符]為解析上述命令格式,命令狀態(tài)機設(shè)置的狀態(tài)包括等待提示、接收命令名、接收命令提示、列表結(jié)束、消耗字符串、空閑提示、換頁提示、空閑、錯誤處理等。各狀態(tài)下狀態(tài)機的主要操作如下等待提示狀態(tài)用于接收并匹配被測設(shè)備命令提示符。命令提示符串由用戶通過人機界面模塊輸入。在獲取命令提示符后,初始化命令狀態(tài)機內(nèi)部的數(shù)據(jù)結(jié)構(gòu),切換至空閑狀態(tài),等待用戶控制其后續(xù)執(zhí)行。
接收命令名狀態(tài)與接收命令提示狀態(tài)分別用于接收子命令、參數(shù)、命令描述字符串。命令狀態(tài)機在這兩個狀態(tài)間循環(huán)切換,直至命令列表結(jié)束。如果命令列表末尾為結(jié)束符字符串,該字符串可通過人機界面模塊設(shè)置,則切換至列表結(jié)束狀態(tài),如果為提示符字符串,則切換至等待提示狀態(tài)。列表結(jié)束狀態(tài)接收并匹配結(jié)束符字符串。如果匹配成功,對所接收的命令節(jié)點和參數(shù)節(jié)點的屬性進(jìn)行標(biāo)記,如是否為葉節(jié)點以及參數(shù)節(jié)點的類型等。狀態(tài)切換至空閑狀態(tài),等待命令樹遍歷模塊控制其后續(xù)執(zhí)行。
消耗字符串狀態(tài)用于當(dāng)命令樹遍歷模塊判斷已遍歷至最深層節(jié)點時,調(diào)用通訊協(xié)議模塊向被測設(shè)備發(fā)送垃圾字符串清空被測設(shè)備命令緩沖區(qū),并控制命令狀態(tài)機模塊切換至消耗字符串狀態(tài)。在此狀態(tài)下,命令狀態(tài)機模塊消耗返回的錯誤提示字符串,等待提示符字符串,然后切換至空閑狀態(tài)。
空閑提示狀態(tài)用于被測設(shè)備發(fā)送空閑提示字符串時命令狀態(tài)機模塊切換至此狀態(tài)??臻e提示字符串可由用戶通過人機界面模塊設(shè)置。
換頁提示用于當(dāng)被測設(shè)備發(fā)送的字符串行數(shù)大于終端長度時,將按頁發(fā)送,并在每頁后發(fā)送換頁提示字符串。在此狀態(tài)下,命令狀態(tài)機模塊接收并匹配該字符串,如果匹配成功,調(diào)用通訊協(xié)議模塊向被測設(shè)備發(fā)送特殊字符(通過人機界面模塊輸入)控制被測設(shè)備發(fā)送下一頁。該換頁提示符由用戶通過人機界面模塊設(shè)置。如果通過人機界面模塊設(shè)置配置被測設(shè)備終端長度的命令字符串,將被測設(shè)備的終端長度設(shè)置為足夠長,命令狀態(tài)機模塊可以不包括本狀態(tài)。
空閑狀態(tài)用于人機界面模塊和命令樹遍歷模塊控制狀態(tài)機的執(zhí)行方式。切換至此狀態(tài)的三種方式為狀態(tài)機內(nèi)部邏輯控制切換;由命令樹遍歷模塊直接設(shè)置;利用控制模塊調(diào)用命令狀態(tài)機模塊的接口函數(shù),通過人機界面模塊設(shè)置。
錯誤處理狀態(tài)用于當(dāng)上述各狀態(tài)下的操作出現(xiàn)錯誤時,狀態(tài)機切換至此狀態(tài)。根據(jù)錯誤的類型,處理方式包括狀態(tài)機復(fù)位、向人機界面模塊報錯或終止命令狀態(tài)機的執(zhí)行。
在ACSC系統(tǒng)的具體實現(xiàn)中,可以將測試主機與被側(cè)設(shè)備之間的登錄步驟全部由命令狀態(tài)機完成,為此該模塊中應(yīng)增加等待登錄與等待口令兩個狀態(tài)。其中等待登錄狀態(tài)用于接收并匹配被側(cè)設(shè)備的登錄提示字符串,等待口令狀態(tài)用于接收并匹配被側(cè)設(shè)備的口令提示字符串。當(dāng)獲取上述信息后,狀態(tài)機切換至等待提示狀態(tài)。
3.命令樹遍歷模塊所述命令樹遍歷模塊在底層與所述命令狀態(tài)機模塊接口,直接控制命令狀態(tài)機的操作;在上層,命令樹遍歷模塊通過控制模塊間接接收并執(zhí)行用戶通過人機界面模塊發(fā)送的控制命令;同時所述命令樹遍歷模塊將命令遍歷獲取的信息記錄在命令樹數(shù)據(jù)結(jié)構(gòu)中。
命令樹遍歷模塊的算法根據(jù)通訊設(shè)備CLI命令的查詢方式確定,該查詢方式的一般格式如下[提示符][命令串][查詢字符串]提示符為命令提示符,命令串為任意命令字符串,該命令字符串可以為空,此時查詢的起點為本命令模式下的所有根命令,查詢字符串因設(shè)備而異,可通過人機界面模塊設(shè)置,一般為“?”。當(dāng)命令串有下層子命令或參數(shù)時,在命令串后輸入查詢字符串,被測設(shè)備將返回命令串下層的所有子命令和參數(shù)列表。按照上述格式,命令樹遍歷模塊算法的查詢步驟從根命令開始,然后采用遞進(jìn)的深度遍歷方式依次查詢并構(gòu)造命令節(jié)點樹。命令樹遍歷模塊的遍歷算法采用遞歸函數(shù)實現(xiàn),函數(shù)的參數(shù)為要查詢節(jié)點的父節(jié)點指針,實現(xiàn)方式如下1.判斷傳入的父節(jié)點指針是否為NULL,如果為空則報錯;2.判斷父節(jié)點是否處理過,如果處理過,返回NULL;3.從父節(jié)點的第一個子節(jié)點開始遍歷,對每個子節(jié)點,如果已處理過,繼續(xù)查詢下一子節(jié)點,否則以該子節(jié)點指針為參數(shù)遞歸調(diào)用本函數(shù);4.判斷步驟3中本函數(shù)調(diào)用的返回值,如果非NULL,則逐級返回此返回值;如果為NULL同時本節(jié)點已處理,則返回本節(jié)點指針,否則繼續(xù)處理下一個子節(jié)點。
5.如果傳入的參數(shù)節(jié)點沒有子節(jié)點,直接返回NULL。
當(dāng)命令狀態(tài)機模塊接收到結(jié)束符字符串后,調(diào)用命令樹遍歷模塊的接口,函數(shù)構(gòu)造下一次查詢的命令字符串,該接口函數(shù)首先調(diào)用遞歸函數(shù)獲得下一個命令節(jié)點,然后構(gòu)造完整的命令查詢字符串。當(dāng)命令列表中只包含結(jié)束符字符串時,命令狀態(tài)機模塊通知命令樹遍歷模塊生成垃圾字符串,并調(diào)用通訊協(xié)議模塊將垃圾字符串發(fā)送至被測設(shè)備,清空被測設(shè)備的命令緩沖區(qū)。
所述命令節(jié)點樹保存命令樹遍歷模塊獲得的CLI命令節(jié)點信息,并組織為多顆相關(guān)的二叉樹,每顆二叉樹用于記錄一個命令模式下的全部命令節(jié)點信息。初始情況下命令節(jié)點樹包含一顆二叉樹,用于記錄登錄后的命令模式下命令節(jié)點的信息。命令模式由用戶通過人機界面模塊設(shè)置,設(shè)置方式為將某一命令節(jié)點設(shè)置為關(guān)鍵節(jié)點,同時設(shè)置該關(guān)鍵節(jié)點的完整命令字符串以及執(zhí)行后的命令提示字符串,不同命令模式下的二叉樹之間通過關(guān)鍵節(jié)點相關(guān)聯(lián)。例如,將進(jìn)入特權(quán)模式的命令節(jié)點,如enable設(shè)置為關(guān)鍵節(jié)點,輸入特權(quán)模式命令的命令提示符,將在命令節(jié)點樹中構(gòu)造一顆新的二叉樹,用于記錄特權(quán)模式下的命令節(jié)點信息。
所述命令節(jié)點樹中記錄的節(jié)點信息包括節(jié)點類型,如子命令和各種參數(shù);節(jié)點數(shù)據(jù),如命令名和命令描述等;父節(jié)點指針;第一個子節(jié)點指針;后一節(jié)點指針;前一節(jié)點指針;遍歷標(biāo)記;當(dāng)前命令模式及其命令提示符;新的命令模式及其命令提示符;節(jié)點屬性,如是否為葉節(jié)點關(guān)鍵節(jié)點;與該節(jié)點關(guān)聯(lián)的人機界面模塊節(jié)點指針等。其中,命令節(jié)點與人機界面模塊顯示相關(guān)的信息記錄在人機界面模塊節(jié)點指針中,其中包括本節(jié)點及其父、子節(jié)點和前后節(jié)點的句柄,以及該節(jié)點的使能標(biāo)記等,用戶可通過人機界面模塊設(shè)置節(jié)點的使能狀態(tài),命令生成與執(zhí)行模塊根據(jù)該標(biāo)記確定命令生成的方式。
4.字典引擎模塊所述字典引擎模塊的底層為一個CLI命令的預(yù)處理器,該預(yù)處理器為命令樹遍歷模塊提供接口函數(shù),用于完成CLI命令文本中單詞的分割,并輸出獨立單詞的序列。根據(jù)用戶選擇的拼寫檢查方式,預(yù)處理器直接調(diào)用字典引擎的接口函數(shù)進(jìn)行單詞匹配,或者將單詞序列存儲至文件或內(nèi)存緩沖區(qū),進(jìn)行后續(xù)的批處理檢查。字典引擎模塊采用鍵樹(Trie)數(shù)據(jù)結(jié)構(gòu)實現(xiàn)字典的構(gòu)造、插入、搜索、刪除等操作。鍵樹是一種高度大于等于2的樹,樹中每個結(jié)點中不是包含一個或幾個關(guān)鍵字,而是只含有組成關(guān)鍵字的字符。鍵樹構(gòu)建在這些關(guān)鍵字的構(gòu)成字符集上,并使用字符集中的字符完成樹的搜索和插入操作。與采用平衡的二叉搜索樹的字典結(jié)構(gòu)相比,鍵樹的搜索路徑長度對單詞數(shù)量的增加不敏感,同時,與二叉搜索樹不同,單詞的匹配不用在每個節(jié)點進(jìn)行,多數(shù)情況下只需比較單個字符,在葉節(jié)點比較未處理的后綴,因此采用鍵樹的搜索效率比二叉樹方式有很大提高。為解決一個詞為另一個詞的前綴時的查找問題,鍵樹的每個節(jié)點中引入一個單詞結(jié)束符,當(dāng)查找到某級節(jié)點是單詞的最后一個字符指針指向的節(jié)點非空時,檢查該節(jié)點結(jié)束符位置的指針,如果該指針非空,則表示該詞已在鍵樹中。
為提高單詞匹配的效率并節(jié)省存儲空間,鍵樹的葉節(jié)點中不必存放要查找的整個單詞,只需存儲單詞的未處理后綴。當(dāng)從根節(jié)點順次查找時,查找每增加一級,單詞的指針遞增,這樣當(dāng)查找至葉節(jié)點,只需比較單詞的后綴長度,因此能有效地提高查找效率;同時,鍵樹的每個節(jié)點不必由全部英文字母和結(jié)束符組成,而是在每個節(jié)點中保存實際存在的字符對應(yīng)的信息。
字典的初始創(chuàng)建由用戶通過人機界面選擇字典文件的方式完成,字典引擎使用插入算法對字典文件中的單詞進(jìn)行批處理插入,后續(xù)新詞的插入使用同樣的算法完成。字典引擎的插入算法如下1)初始化單詞數(shù)組下標(biāo)為0,當(dāng)前節(jié)點為根節(jié)點;2)判斷單詞該下標(biāo)的字符,如果為NULL,設(shè)置當(dāng)前節(jié)點#指針為TRUE;否則轉(zhuǎn)步驟3);
3)判斷當(dāng)前節(jié)點中該單詞下標(biāo)字符對應(yīng)的指針,如果為NULL,以該單詞為鍵創(chuàng)建一葉節(jié)點,將該葉節(jié)點指針存儲在當(dāng)前節(jié)點中該單詞下標(biāo)字符所對應(yīng)的指針處,完成插入操作。否則轉(zhuǎn)步驟4);4)判斷當(dāng)前節(jié)點中該單詞下標(biāo)字符對應(yīng)的指針?biāo)傅墓?jié)點類型,如果為葉節(jié)點,轉(zhuǎn)步驟6),否則轉(zhuǎn)步驟5);5)設(shè)置當(dāng)前節(jié)點為當(dāng)前節(jié)點中該單詞下標(biāo)字符對應(yīng)的指針?biāo)赶虻墓?jié)點,將單詞數(shù)組下標(biāo)遞增,轉(zhuǎn)步驟2);6)取該葉節(jié)點中的鍵值,從當(dāng)前字符起,累計該鍵值與插入單詞的公有前綴字符串。對該字符串中的每一字符,循環(huán)創(chuàng)建一非葉節(jié)點,并將其指針存至當(dāng)前節(jié)點中該單詞下標(biāo)字符對應(yīng)的指針處,設(shè)置當(dāng)前節(jié)點為該新創(chuàng)建的節(jié)點。
7)創(chuàng)建一葉節(jié)點,將其鍵值設(shè)置為插入的單詞,并將該節(jié)點指針置于步驟6)中創(chuàng)建的最下一級內(nèi)部節(jié)點中。
8)判斷當(dāng)前字符位置,如果已到達(dá)插入單詞的末尾,設(shè)置步驟7)中葉節(jié)點的單詞結(jié)束標(biāo)志;將步驟6)中取出的節(jié)點指針置入步驟6)中創(chuàng)建的最下一級內(nèi)部節(jié)點中的對應(yīng)字符的位置。
字典引擎模塊的搜索算法如下1)初始化單詞數(shù)組下標(biāo)為0,當(dāng)前節(jié)點為根節(jié)點;2)判斷當(dāng)前節(jié)點中該數(shù)組下標(biāo)字符對應(yīng)的節(jié)點指針,如果指針為NULL,則單詞不匹配,向上層報錯或記錄日志,取下一個單詞并轉(zhuǎn)本流程的步驟1),否則轉(zhuǎn)步驟3);3)判斷該節(jié)點的類型,如果為葉節(jié)點,比較單詞所剩余字符串后綴與葉節(jié)點中存儲的字符串是否一致,如果不一致,則向上層報錯或記錄日志,取下一單詞,轉(zhuǎn)步驟1);否則,匹配成功,取下一個單詞并轉(zhuǎn)步驟1);4)如果節(jié)點類型為內(nèi)部節(jié)點,則遞增單詞字符下標(biāo),將當(dāng)前指針設(shè)置為該節(jié)點中當(dāng)前字符索引的節(jié)點指針,并轉(zhuǎn)步驟2)。
5.控制模塊所述控制模塊提供一組控制ACSC運行方式的公用接口函數(shù)來避免各模塊間的緊密耦合,其接口函數(shù)的具體實現(xiàn)由人機界面模塊和其他底層模塊提供。ACSC系統(tǒng)中的控制模塊做為一個中間層,其封裝的接口函數(shù)分為上下兩層。在上層,控制模塊為用戶通過人機界面模塊控制ACSC提供的調(diào)用接口包括啟動、停止和復(fù)位命令狀態(tài)機模塊狀態(tài)、讀取和設(shè)置命令狀態(tài)機模塊狀態(tài);啟動和停止命令樹遍歷模塊;構(gòu)建用戶字典和測試字典引擎接口;查詢拼寫檢查錯誤提示信息。在下層,控制模塊為其他模塊提供的接口包括一組向人機界面模塊反饋信息的接口函數(shù),包括各底層模塊的出錯信息和調(diào)試信息的反饋。
6.人機界面模塊所述人機界面模塊實現(xiàn)ACSC系統(tǒng)的圖形用戶界面,用戶通過該模塊可實現(xiàn)的操作包括構(gòu)造字典并測試字典引擎,如選擇字典文件,提供增加、刪除新詞的界面;拼寫檢查方式的設(shè)置,如在線檢查或批處理檢查;實現(xiàn)人機命令拼寫檢查錯誤的提示與告警界面,包括實時或批處理方式的視覺及聲音提示界面;提供輸入命令模式下提示符字符串,查詢字符串字符串、登錄提示字符串、口令提示字符串,空閑提示字符串,換頁提示字符串,用戶名、口令等的界面;為通訊協(xié)議模塊提供輸入和修改被測設(shè)備地址、端口號以及串口方式下的各種通訊參數(shù)等的界面等。
用戶使用ASCS系統(tǒng)進(jìn)行自動拼寫檢查的過程如下1)在人機界面內(nèi)設(shè)置底層通訊參數(shù),如DUT(Device Under Test,待測器件)地址、端口號,DUT的特征字符串,如等待登錄提示符、口令提示符、空閑提示符、換頁提示符等,設(shè)置日志的記錄方式等;設(shè)置拼寫檢查的方式。
2)選擇字典文件,構(gòu)造初始字典。
3)啟動命令狀態(tài)機,按照命令樹遍歷算法,生成命令節(jié)點樹。根據(jù)用戶設(shè)定的拼寫檢查方式,對人機命令文本進(jìn)行拼寫檢查。
4)如果選擇實時檢查方式,則被測設(shè)備發(fā)送的字符串經(jīng)過命令預(yù)處理器處理,分解為單詞序列,并調(diào)用字典引擎的搜索算法模塊進(jìn)行匹配,匹配的結(jié)果實時顯示在人機界面中;如果選擇批處理方式,則命令文本首先存儲至內(nèi)存文件,在命令樹遍歷結(jié)束后進(jìn)行批量預(yù)處理和拼寫檢查,檢查結(jié)果可顯示在人機界面中,也可記錄在日志文件中。
本發(fā)明提出的ACSC系統(tǒng)和相關(guān)算法為數(shù)據(jù)通訊設(shè)備CLI命令的拼寫檢查提供了一種新的解決方案,所構(gòu)造的ACSC系統(tǒng)可實現(xiàn)網(wǎng)管人機命令文本的實時或批處理方式的自動拼寫檢查,該方法和系統(tǒng)可直接應(yīng)用于現(xiàn)有的大多數(shù)據(jù)數(shù)通訊設(shè)備,能有效地提高拼寫檢查的正確性、覆蓋率以及檢查效率。
應(yīng)當(dāng)理解的是,本發(fā)明的上述針對具體實施例的描述是比較具體的,不能因此而理解為對本發(fā)明的請求保護(hù)范圍的限制,專利保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。
權(quán)利要求
1.一種通訊設(shè)備中命令行接口命令的自動拼寫檢查系統(tǒng),其特征在于,其包括如下功能模塊通訊協(xié)議模塊、命令狀態(tài)機模塊、命令樹遍歷模塊、字典引擎模塊、控制模塊、人機界面模塊;所述通訊協(xié)議模塊設(shè)置在測試主機操作系統(tǒng)的TCP/IP協(xié)議?;虼隍?qū)動模塊之上,完成Telnet客戶端的協(xié)議處理或串口通訊協(xié)議處理,為所述命令狀態(tài)機模塊提供文本方式的人機命令字符流;所述命令狀態(tài)機模塊實現(xiàn)命令字符流的解析與處理,并調(diào)用所述命令樹遍歷模塊構(gòu)造命令節(jié)點樹;所述字典引擎模塊根據(jù)用戶選擇的字典文件完成初始字典的構(gòu)建,并提供命令文本的自動拼寫檢查;上述各模塊在所述控制模塊的協(xié)調(diào)下完成所述命令節(jié)點樹的遍歷和命令的預(yù)處理。
2.根據(jù)權(quán)利要求1所述的自動拼寫檢查系統(tǒng),其特征在于,所述字典引擎模塊對命令文本的自動拼寫檢查可實時或批處理進(jìn)行。
3.根據(jù)權(quán)利要求2所述的自動拼寫檢查系統(tǒng),其特征在于,所述控制模塊還控制在所述人機界面上拼寫錯誤的實時顯示與告警。
4.一種如權(quán)利要求1所述系統(tǒng)的自動拼寫檢查方法,其包括如下步驟a)在人機界面內(nèi)設(shè)置底層通訊參數(shù);b)選擇字典文件,構(gòu)造初始字典;c)啟動所述命令狀態(tài)機,按照命令樹遍歷算法,生成命令節(jié)點樹,根據(jù)用戶設(shè)定的拼寫檢查方式,對人機命令文本進(jìn)行拼寫檢查。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述方法還包括所述用戶設(shè)定的拼寫檢查方式包括d)如果選擇實時檢查方式,則被測設(shè)備發(fā)送的字符串經(jīng)過命令預(yù)處理器處理,分解為單詞序列,并調(diào)用字典引擎的搜索算法模塊進(jìn)行匹配,匹配的結(jié)果實時顯示在人機界面中;如果選擇批處理方式,則命令文本首先存儲至內(nèi)存文件,在命令樹遍歷結(jié)束后進(jìn)行批量預(yù)處理和拼寫檢查,檢查結(jié)果顯示在人機界面中或在日志文件中。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述字典引擎采用鍵樹數(shù)據(jù)結(jié)構(gòu)。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述步驟b)中的字典的初始創(chuàng)建由用戶通過人機界面選擇字典文件的方式完成,字典引擎使用插入算法對字典文件中的單詞進(jìn)行批處理插入,后續(xù)新詞的插入使用同樣的算法完成,所述字典引擎的插入步驟如下b1)初始化單詞數(shù)組下標(biāo)為0,當(dāng)前節(jié)點為根節(jié)點;b2)判斷單詞該下標(biāo)的字符,如果為NULL,設(shè)置當(dāng)前節(jié)點#指針為TRUE;否則轉(zhuǎn)步驟b3);b3)判斷當(dāng)前節(jié)點中該單詞下標(biāo)字符對應(yīng)的指針,如果為NULL,以該單詞為鍵創(chuàng)建一葉節(jié)點,將該葉節(jié)點指針存儲在當(dāng)前節(jié)點中該單詞下標(biāo)字符所對應(yīng)的指針處,完成插入操作;否則轉(zhuǎn)步驟b4);b4)判斷當(dāng)前節(jié)點中該單詞下標(biāo)字符對應(yīng)的指針?biāo)傅墓?jié)點類型,如果為葉節(jié)點,轉(zhuǎn)步驟b6),否則轉(zhuǎn)步驟b5);b5)設(shè)置當(dāng)前節(jié)點為當(dāng)前節(jié)點中該單詞下標(biāo)字符對應(yīng)的指針?biāo)赶虻墓?jié)點,將單詞數(shù)組下標(biāo)遞增,轉(zhuǎn)步驟b2);b6)取該葉節(jié)點中的鍵值,從當(dāng)前字符起,累計該鍵值與插入單詞的公有前綴字符串,對該字符串中的每一字符,循環(huán)創(chuàng)建一非葉節(jié)點,并將其指針存至當(dāng)前節(jié)點中該單詞下標(biāo)字符對應(yīng)的指針處,設(shè)置當(dāng)前節(jié)點為該新創(chuàng)建的節(jié)點;b7)創(chuàng)建一葉節(jié)點,將其鍵值設(shè)置為插入的單詞,并將該節(jié)點指針置于步驟b6)中創(chuàng)建的最下一級內(nèi)部節(jié)點中;b8)判斷當(dāng)前字符位置,如果已到達(dá)插入單詞的末尾,設(shè)置步驟b7)中葉節(jié)點的單詞結(jié)束標(biāo)志;將步驟b6)中取出的節(jié)點指針置入步驟b6)中創(chuàng)建的最下一級內(nèi)部節(jié)點中的對應(yīng)字符的位置。
8.根據(jù)權(quán)利要求7所述的方法,其特征在于,所述字典引擎模塊的搜索步驟如下b11)初始化單詞數(shù)組下標(biāo)為0,當(dāng)前節(jié)點為根節(jié)點;b12)判斷當(dāng)前節(jié)點中該數(shù)組下標(biāo)字符對應(yīng)的節(jié)點指針,如果指針為NULL,則單詞不匹配,向上層報錯或記錄日志,取下一個單詞并轉(zhuǎn)本流程的步驟b11),否則轉(zhuǎn)步驟b13);b13)判斷該節(jié)點的類型,如果為葉節(jié)點,比較單詞所剩余字符串后綴與葉節(jié)點中存儲的字符串是否一致,如果不一致,則向上層報錯或記錄日志,取下一單詞,轉(zhuǎn)步驟b11);否則,匹配成功,取下一個單詞并轉(zhuǎn)步驟b11);b14)如果節(jié)點類型為內(nèi)部節(jié)點,則遞增單詞字符下標(biāo),將當(dāng)前指針設(shè)置為該節(jié)點中當(dāng)前字符索引的節(jié)點指針,并轉(zhuǎn)步驟b12)。
全文摘要
一種通訊設(shè)備中命令行接口命令的自動拼寫檢查方法及系統(tǒng),其系統(tǒng)包括通訊協(xié)議模塊、命令狀態(tài)機模塊、命令樹遍歷模塊、字典引擎模塊、控制模塊、人機界面模塊;所述通訊協(xié)議模塊完成Telnet客戶端的協(xié)議處理或串口通訊協(xié)議處理,為所述命令狀態(tài)機模塊提供文本方式的人機命令字符流;所述命令狀態(tài)機模塊實現(xiàn)命令字符流的解析與處理,并調(diào)用所述命令樹遍歷模塊構(gòu)造命令節(jié)點樹;所述字典引擎模塊根據(jù)用戶選擇的字典文件完成初始字典的構(gòu)建,并提供命令文本的自動拼寫檢查;上述各模塊在所述控制模塊的協(xié)調(diào)下完成所述命令節(jié)點樹的遍歷和命令的預(yù)處理。該方法和系統(tǒng)有效地提高了拼寫檢查的正確性、覆蓋率以及檢查效率。
文檔編號H04L29/06GK1780235SQ200410052350
公開日2006年5月31日 申請日期2004年11月19日 優(yōu)先權(quán)日2004年11月19日
發(fā)明者徐冬生 申請人:中興通訊股份有限公司