專利名稱:用于提供遠(yuǎn)程軟件應(yīng)用的支持的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明總體涉及對在遠(yuǎn)離服務(wù)支持設(shè)備的機(jī)器上運行的客戶端應(yīng)用提供技術(shù)支持,尤其涉及自動或半自動的支持技術(shù)。
背景技術(shù):
由于商業(yè)軟件應(yīng)用的復(fù)雜性及其所有權(quán)成本的增加,企業(yè)越來越意識到對運行在“客戶端側(cè)”的應(yīng)用進(jìn)行遠(yuǎn)程支持的需要。用于支持客戶端側(cè)的應(yīng)用的當(dāng)前方法是勞動密集的,這導(dǎo)致了增加的問題診斷時間,因而導(dǎo)致了增加的所有權(quán)成本。
發(fā)明內(nèi)容
本發(fā)明的目的在于基本上克服、或至少改善現(xiàn)有布置的一個或多個缺點。
本發(fā)明公開一種稱為GUI日志文本記錄布置的布置,其通過使支持服務(wù)提供者(SSP)與客戶之間的問題診斷過程變得容易,來解決上述問題。雖然在說明書中使用了術(shù)語“問題”和“問題解決方案”,但應(yīng)該指出的是,即使不存在“問題”和“故障”,用戶同樣可以僅調(diào)用所公開的GUI日志文本記錄布置(也稱為GLTR布置),來獲得幫助。本說明書應(yīng)結(jié)合這一點來理解。該GLTR方法典型地大量減少應(yīng)用問題診斷時間。關(guān)于應(yīng)用,以GUI日志文本記錄的形式記錄圖形用戶界面(GUI)屏幕及其相關(guān)的用戶操作。該GLTR系統(tǒng)根據(jù)所記錄的GUI日志文本記錄,準(zhǔn)確或高度一致地再現(xiàn)應(yīng)用GUI屏幕和用戶操作。在某些情況下,所模擬的GUI屏幕可能不完全與歷史的客戶端GUI屏幕相同。然而,在大多數(shù)情況下,所公開的系統(tǒng)能夠使用組件(即java.awt.component的孩子)再現(xiàn)至少應(yīng)用GUI的一部分。對于SSP,提供用于瀏覽歷史的應(yīng)用GUI屏幕及其相關(guān)的用戶操作的手段。該GLTR系統(tǒng)還提供用于對客戶端應(yīng)用遠(yuǎn)程地進(jìn)行操作以進(jìn)一步澄清問題和/或采取克服該問題的補救操作的手段。
所公開的GLTR布置以壓縮的GUI日志文本記錄的形式執(zhí)行GUI屏幕和事件的日志記錄,因此,網(wǎng)絡(luò)和日志記錄開銷是最小的。例如,以GUI日志文本記錄而不是圖像的形式,對GUI屏幕進(jìn)行日志記錄。在組件(即圖標(biāo)和按鈕)中使用的圖像(即gif、jpg)被記錄為圖像,而使用GUI日志文本記錄來記錄顯示有前述組件的屏幕。此外,一旦所討論的客戶端應(yīng)用初始化了日志記錄服務(wù)(見圖5中的405),所公開的GLTR布置便不需要來自所討論的客戶端應(yīng)用的任何支持。
根據(jù)本發(fā)明的第一方面,提供一種提供對于在第一機(jī)器上運行的客戶端軟件應(yīng)用的支持的方法,所述方法包括以下步驟在第一機(jī)器處將圖形用戶界面顯示和相關(guān)的用戶操作記錄為基于文本的日志記錄;在第二機(jī)器處根據(jù)涉及所述客戶端軟件應(yīng)用在所述第一機(jī)器上的運行的支持請求而調(diào)用支持服務(wù);將所記錄的日志文本記錄發(fā)送至第二機(jī)器;以及在第二機(jī)器處根據(jù)所記錄的日志文本記錄模擬圖形用戶界面顯示和相關(guān)的用戶操作;其中所述支持是根據(jù)所述模擬而提供的。
根據(jù)本發(fā)明的另一方面,提供一種用于提供對于在第一機(jī)器上運行的客戶端軟件應(yīng)用的支持的裝置,所述裝置包括用于存儲程序的存儲器;以及用于執(zhí)行該程序的處理器,所述程序包括用于在第一機(jī)器處將圖形用戶界面顯示和相關(guān)的用戶操作記錄為基于文本的日志記錄的代碼;用于在第二機(jī)器處根據(jù)涉及所述客戶端軟件應(yīng)用在所述第一機(jī)器上的運行的支持請求而調(diào)用支持服務(wù)的代碼;
用于將所記錄的日志文本記錄發(fā)送至第二機(jī)器的代碼;以及用于在第二機(jī)器處根據(jù)所記錄的日志文本記錄模擬圖形用戶界面顯示和相關(guān)的用戶操作的代碼;其中所述支持是根據(jù)所述模擬而提供的。
根據(jù)本發(fā)明的另一方面,提供一種用于提供對于在第一機(jī)器上運行的客戶端軟件應(yīng)用的支持的裝置,所述裝置包括用于在第一機(jī)器處將圖形用戶界面顯示和相關(guān)的用戶操作記錄為基于文本的日志記錄的裝置;用于在第二機(jī)器處根據(jù)涉及所述客戶端軟件應(yīng)用在所述第一機(jī)器上的運行的支持請求而調(diào)用支持服務(wù)的裝置;用于將所記錄的日志文本記錄發(fā)送至第二機(jī)器的裝置;以及用于在第二機(jī)器處根據(jù)所記錄的日志文本記錄模擬圖形用戶界面顯示和相關(guān)的用戶操作的裝置;其中所述支持是根據(jù)所述模擬而提供的。
根據(jù)本發(fā)明的另一方面,提供一種包括計算機(jī)可讀介質(zhì)的計算機(jī)程序產(chǎn)品,該計算機(jī)可讀介質(zhì)具有記錄在其上的計算機(jī)程序,該計算機(jī)程序用于引導(dǎo)處理器執(zhí)行一種提供對于在第一機(jī)器上運行的客戶端軟件應(yīng)用的支持的方法,所述程序包括用于在第一機(jī)器處將圖形用戶界面顯示和相關(guān)的用戶操作記錄為基于文本的日志記錄的代碼;用于在第二機(jī)器處根據(jù)涉及所述客戶端軟件應(yīng)用在所述第一機(jī)器上的運行的支持請求而調(diào)用支持服務(wù)的代碼;用于將所記錄的日志文本記錄發(fā)送至第二機(jī)器的代碼;以及用于在第二機(jī)器處根據(jù)所記錄的日志文本記錄模擬圖形用戶界面顯示和相關(guān)的用戶操作的代碼;其中所述支持是根據(jù)所述模擬而提供的。
本發(fā)明的其他方面也被公開。
現(xiàn)在參照附圖對現(xiàn)有技術(shù)的一些方面和本發(fā)明的一個或多個實施例進(jìn)行描述,其中圖1示出了在其中能夠?qū)崿F(xiàn)所公開的GLTR方法的計算機(jī)系統(tǒng)的功能框圖;圖2示出了能夠?qū)崿F(xiàn)所公開的GLTR方法的通用計算機(jī)布置;圖3示出了能夠在圖1的系統(tǒng)上實現(xiàn)的現(xiàn)有技術(shù)遠(yuǎn)程支持過程;圖4示出了一布置,根據(jù)該布置能夠在圖1的系統(tǒng)上實現(xiàn)所公開的GLTR方法;圖5示出了用于實現(xiàn)所公開的GLTR方法的系統(tǒng)400的功能框圖;圖6A和6B示出了表示客戶端應(yīng)用的正常操作的過程;圖7示出了圖1的服務(wù)支持應(yīng)用進(jìn)行操作的處理流/數(shù)據(jù)流圖;圖8示出了一過程,根據(jù)該過程在圖6A和6B中初始化GUI日志記錄服務(wù);圖9示出了GUI日志記錄服務(wù)過程的一個線程;圖10示出了GUI日志記錄服務(wù)過程的另一個線程;圖11更詳細(xì)地示出了圖9中的步驟802;圖12更詳細(xì)地示出了圖9中的步驟803;圖13A和13B更詳細(xì)地示出了圖7中的步驟610;圖14更詳細(xì)地示出了圖7中的步驟605;以及圖15更詳細(xì)地示出了圖7中的步驟615。
具體實施例方式
參照任意一個或多個附圖中具有相同的參考標(biāo)號的步驟和/或特征,除非出現(xiàn)相反的意思,否則這些步驟和/或特征對本說明書來說具有相同的功能或操作。
以下的描述的某些部分明確或隱含地呈現(xiàn)對于計算機(jī)存儲器內(nèi)數(shù)據(jù)的操作的算法和符號表示。這些算法描述和表示,是數(shù)據(jù)處理領(lǐng)域中的技術(shù)人員用于將其工作的內(nèi)容最有效地傳達(dá)給本領(lǐng)域的其他技術(shù)人員的手段。這里并且一般認(rèn)為算法是獲得所期望的結(jié)果的自相一致的步驟序列。這些步驟,是需要物理量的物理操作的。通常,但不是必須的,這些量采用能夠被存儲、傳輸、組合、比較和被進(jìn)行其他操作的電或磁信號的形式。有時,主要是基于通用的原因,將這些信號稱作位、值、元素、符號、特性、術(shù)語、數(shù)量等是方便的。
然而,應(yīng)該指出,上述以及類似的術(shù)語是與適當(dāng)?shù)奈锢砹肯嚓P(guān)的,且其僅是應(yīng)用于這些物理量的方便標(biāo)簽。除非特別說明及從下面明顯得出,否則可以理解的是,在整個本說明書中使用諸如“掃描”、“計算”、“確定”、“替代”、“生成”、“初始化”、“輸出”等術(shù)語而進(jìn)行的討論是指計算機(jī)系統(tǒng)或類似電子設(shè)備的動作和處理,這些動作和處理對在計算機(jī)系統(tǒng)的寄存器和存儲器內(nèi)以物理(電子)量表示的數(shù)據(jù)進(jìn)行操作,并將其轉(zhuǎn)換為在該計算機(jī)存儲器或寄存器或其他這樣的信息存儲設(shè)備、傳輸或顯示設(shè)備內(nèi)以物理量類似地表示的其他數(shù)據(jù)。
本說明書還公開了用于執(zhí)行GLTR方法的操作的裝置。該裝置可以針對所需目的專門進(jìn)行構(gòu)建,或可以包括能被存儲在計算機(jī)中的計算機(jī)程序選擇性地激活或重新配置的通用計算機(jī)或其他裝置。這里提出的算法和表示并不是固有地與任何特定的計算機(jī)或其他裝置相關(guān)。各通用機(jī)器都可與根據(jù)本文的教導(dǎo)的程序一起使用??蛇x地,對執(zhí)行所需的GLTR方法步驟的多個專用裝置的構(gòu)建可是適宜的。下面對傳統(tǒng)通用計算機(jī)的結(jié)構(gòu)進(jìn)行描述。
此外,本發(fā)明還隱含地公開了一種計算機(jī)程序,因為對于本領(lǐng)域的技術(shù)人員來說顯而易見的,這里所描述的優(yōu)選方法的各步驟將由計算機(jī)代碼來實現(xiàn)。該計算機(jī)程序并不旨在限制于任何特定的編程語言及其實現(xiàn),即使本說明書中是使用Java語言來呈現(xiàn)的??梢岳斫猓梢允褂枚喾N編程語言及其編碼來實現(xiàn)這里所包括的公開的教導(dǎo)。此外,該計算機(jī)程序并不旨在限制于任何特定的控制流。在不脫離本發(fā)明的精神或范圍的情況下,存在該計算機(jī)程序的能夠使用不同的控制流的多種其他變體。此外,該計算機(jī)程序的一個或多個步驟可以并行而不是順序地執(zhí)行。
這樣的計算機(jī)程序可以存儲在任何計算機(jī)可讀介質(zhì)上。該計算機(jī)可讀介質(zhì)可以包括諸如磁盤或光盤的存儲設(shè)備、存儲芯片或適用于與通用計算機(jī)接口的其他存儲設(shè)備。該計算機(jī)可讀介質(zhì)還可以包括諸如在因特網(wǎng)系統(tǒng)中示例化的之類的硬接線的介質(zhì),或諸如在GSM移動電話系統(tǒng)中示例化的之類的無線介質(zhì)。當(dāng)在這樣的通用計算機(jī)上加載并執(zhí)行時,該計算機(jī)程序在效果上形成實現(xiàn)優(yōu)選的GLTR方法的步驟的裝置。
圖1示出了在其中能夠?qū)崿F(xiàn)所公開的GLTR方法的計算機(jī)系統(tǒng)100的功能框圖??蛻舳似脚_機(jī)108具有存儲客戶端應(yīng)用110和相關(guān)數(shù)據(jù)111的存儲器109。如113所示,客戶機(jī)108連接至網(wǎng)絡(luò)106??蛻魴C(jī)108與前述組件一起被稱為系統(tǒng)100的“客戶端側(cè)”,如參考標(biāo)號107所示。
SSP平臺101具有存儲支持應(yīng)用103和相關(guān)數(shù)據(jù)104的存儲器102。如112所示,SSP機(jī)101連接至網(wǎng)絡(luò)106。SSP機(jī)101與相關(guān)組件一起被稱為系統(tǒng)100的“支持側(cè)”,如箭頭105所示。
圖2示出了能夠?qū)崿F(xiàn)所公開的GLTR方法的通用計算機(jī)系統(tǒng)。該GLTR方法特別適合于在諸如圖2中所示的通用計算機(jī)系統(tǒng)1100上實現(xiàn),其中圖4和6-15中的過程可以實現(xiàn)為軟件,諸如在計算機(jī)系統(tǒng)1100中執(zhí)行的應(yīng)用程序。具體地,在由該計算機(jī)執(zhí)行的軟件中,利用指令來實現(xiàn)GLTR方法的步驟。這些指令可以形成為一個或多個代碼模塊,每一個模塊用于執(zhí)行一個或多個特定任務(wù)。
該軟件也可以劃分為兩個單獨的部分,其中第一部分執(zhí)行GLTR方法,而第二部分管理第一部分與用戶之間的用戶接口。該軟件可以存儲在例如包括下述的存儲設(shè)備在內(nèi)的計算機(jī)可讀介質(zhì)中。該軟件從該計算機(jī)可讀介質(zhì)被加載到計算機(jī)中,然后由該計算機(jī)執(zhí)行。具有這樣的記錄在其上的軟件或計算機(jī)程序的計算機(jī)可讀介質(zhì)是一種計算機(jī)程序產(chǎn)品。該計算機(jī)程序產(chǎn)品在計算機(jī)中的使用,優(yōu)選地實現(xiàn)用于GLTR方法的有利裝置。
計算機(jī)系統(tǒng)1100由SSP計算機(jī)模塊101、諸如鍵盤1102和鼠標(biāo)1103的輸入設(shè)備、包括打印機(jī)1115的輸出設(shè)備、顯示設(shè)備1114和揚聲器1117構(gòu)成。調(diào)制解調(diào)器(Modem)收發(fā)設(shè)備1116由計算機(jī)模塊101用于與通信網(wǎng)絡(luò)1120進(jìn)行相互通信,通信網(wǎng)絡(luò)1120例如可經(jīng)由電話線1121或其他功能介質(zhì)連接至客戶機(jī)108。調(diào)制解調(diào)器1116能夠用于獲得對因特網(wǎng)以及諸如局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)的其他網(wǎng)絡(luò)系統(tǒng)的訪問,并且在某些實現(xiàn)中其可以被合并到計算機(jī)模塊101內(nèi)。
計算機(jī)模塊101通常包括至少一個處理器單元1105,以及例如由半導(dǎo)體隨機(jī)存儲器(RAM)和只讀存儲器(ROM)形成的存儲器單元102。模塊101還包括多個輸入/輸出(I/O)接口,包括連接至視頻顯示器1114和揚聲器1117的音頻-視頻接口1107、用于鍵盤1102和鼠標(biāo)1103以及可選的游戲桿(未示出)的I/O接口1113以及用于調(diào)制解調(diào)器1116和打印機(jī)1115的接口1108。
在一些實現(xiàn)中,調(diào)制解調(diào)器1116可以合并到計算機(jī)模塊101中,例如合并到接口1108內(nèi)。提供了存儲設(shè)備1109,其通常包括硬盤驅(qū)動器1110和軟盤驅(qū)動器1111。也可以使用磁帶驅(qū)動器(未示出)。通常,提供CD-ROM驅(qū)動器1112作為非易失性數(shù)據(jù)源。計算機(jī)模塊101的組件1105至1113,通常,經(jīng)由互連總線1104并且以導(dǎo)致對于本領(lǐng)域技術(shù)人員而言所公知的計算機(jī)系統(tǒng)1100的傳統(tǒng)模式的操作的方式進(jìn)行通信。能夠在其上實現(xiàn)所描述的布置的計算機(jī)的示例包括IBM-PC和兼容機(jī)、Sun Sparcstation或由此演變出的類似的計算機(jī)系統(tǒng)。
通常,應(yīng)用程序駐留在硬盤驅(qū)動器1110上,并且在其執(zhí)行過程中由處理器1105讀取和控制。從網(wǎng)絡(luò)1120獲取的程序和任何數(shù)據(jù)的中間存儲可使用半導(dǎo)體存儲器1106、可能地協(xié)同硬盤驅(qū)動器1110來實現(xiàn)。在一些實例中,可以將應(yīng)用程序編碼在CD-ROM或軟盤上提供給用戶,且經(jīng)由相應(yīng)的設(shè)備1112或1111來讀取其,可選地,用戶可以經(jīng)由調(diào)制解調(diào)設(shè)備1116從網(wǎng)絡(luò)1120讀取應(yīng)用程序。
更進(jìn)一步地,軟件也可以從其他計算機(jī)可讀介質(zhì)被加載至計算機(jī)系統(tǒng)1100。這里所使用的術(shù)語“計算機(jī)可讀介質(zhì)”,指參與向計算機(jī)系統(tǒng)1100提供指令和/或數(shù)據(jù)以便執(zhí)行和/或處理的任何存儲或傳輸介質(zhì)。存儲介質(zhì)的示例包括軟盤、磁帶、CD-ROM、硬盤驅(qū)動器、ROM或集成電路、磁-光盤或諸如PCMCIA卡之類的計算機(jī)可讀卡等,而無論這樣的設(shè)備位于計算機(jī)模塊101的內(nèi)部還是外部。傳輸介質(zhì)的示例包括無線電或紅外傳輸信道以及至另一臺計算機(jī)或聯(lián)網(wǎng)設(shè)備及包括電子郵件傳輸和記錄在網(wǎng)站等上的信息的因特網(wǎng)或內(nèi)聯(lián)網(wǎng)的網(wǎng)絡(luò)連接。
圖3示出了能夠在圖1的系統(tǒng)100上實現(xiàn)的現(xiàn)有技術(shù)遠(yuǎn)程支持過程200。提供遠(yuǎn)程支持的過程包括三個主要步驟。首先,客戶或客戶端系統(tǒng)管理員盡其所能向SSP解釋問題。然后SSP使用客戶端系統(tǒng)管理員所提供的問題描述作為診斷該問題的基礎(chǔ)。然后,SSP指導(dǎo)客戶端系統(tǒng)管理員修復(fù)該問題。轉(zhuǎn)至圖3,在步驟214,在過程200的客戶端側(cè)201,客戶在客戶機(jī)108上運行應(yīng)用110。
此外,在步驟203,只要應(yīng)用110的運行未遇到問題,過程200便將沿“否”箭頭返回步驟203。然而,當(dāng)運行客戶端應(yīng)用110遇到問題時,過程200便沿“是”箭頭從步驟203前進(jìn)到步驟204。在步驟204,客戶或客戶端系統(tǒng)管理員請求SSP的幫助,之后在步驟205,客戶解釋客戶端應(yīng)用103正遇到的問題。通常,使用電話和/或電子郵件來執(zhí)行步驟205,且由于客戶經(jīng)驗、報告的準(zhǔn)確性等該步驟的準(zhǔn)確性易受影響。
然后,過程200前進(jìn)到步驟209,其中,SSP確定就客戶在步驟205所提供的解釋是否需要進(jìn)一步的澄清。如果需要進(jìn)一步的澄清,則過程200由“是”箭頭前進(jìn)至步驟210,其中SSP請求進(jìn)一步的澄清。在此情況下,過程200將返回至步驟205,以便客戶進(jìn)一步解釋該問題。
返回至步驟209,如果SSP并不需要任何進(jìn)一步的澄清,然后,系統(tǒng)200沿“否”箭頭前進(jìn)至步驟211,其中SSP確定是否需要對客戶機(jī)108上的客戶端應(yīng)用110進(jìn)行遠(yuǎn)程操作。如果需要,則過程200沿“是”箭頭至步驟212。在步驟212,SSP在支持側(cè)202使用平臺101遠(yuǎn)程訪問客戶端側(cè)201客戶機(jī)108上的客戶端應(yīng)用110,并對客戶機(jī)108上的客戶端應(yīng)用110進(jìn)行遠(yuǎn)程操作。SSP還在步驟212中采取補救措施。然后,過程200前進(jìn)至步驟207,以確定該問題是否已解決。如果未解決,則過程200沿“否”箭頭返回至步驟205。如果步驟207確定該問題已解決,則過程200沿“是”箭頭從步驟207前進(jìn)至終止步驟208。
返回至步驟211,如果SSP確定不需要遠(yuǎn)程操作,則過程200沿“否”箭頭至步驟213。在步驟213,SSP通常通過電話或電子郵件向客戶解釋怎樣采取補救步驟。然后過程200從步驟213前進(jìn)至步驟206,其中客戶采取補救措施。然后,過程200從步驟206前進(jìn)至步驟207。
圖4示出了布置300,根據(jù)該布置能夠在圖1的系統(tǒng)100上實現(xiàn)所公開的GLTR方法。過程300開始于客戶端側(cè)301的步驟313,其中,客戶在客戶機(jī)108上運行客戶端軟件應(yīng)用110。接下來的步驟303確定在運行前述客戶端應(yīng)用110時是否遇到故障,且只要沒有遇到故障,過程300便將沿“否”箭頭返回至步驟303。然而,當(dāng)遇到問題時,過程300將沿“是”箭頭前進(jìn)至步驟304。在步驟304,客戶請求幫助,且根據(jù)一種裝置,過程300沿箭頭308前進(jìn)至支持側(cè)302的步驟309。在該布置中,客戶僅僅報告有問題出現(xiàn)的事實,而并不以任何方式解釋該問題。
可選地,過程300能夠從步驟304前進(jìn)至步驟306(以虛線示出,表示該步驟是可選的),其中,客戶通過電話或電子郵件向支持側(cè)203的SSP解釋該問題。在此情況下,過程300沿箭頭307前進(jìn)至步驟309。
在支持側(cè)302,所公開的GLTR方法根據(jù)策略服務(wù)器419(見圖5)中所存儲的策略,確定該問題的性質(zhì),并決定策略服務(wù)器419中所存儲的哪一個支持執(zhí)行程序適合于解決該問題。然后,將GUI日志(見圖5中的409)發(fā)送至諸如圖5中的411之類的、在支持執(zhí)行程序的計算機(jī)上運行的GUI模擬器,該模擬器根據(jù)該GUI日志模擬某些或所有被記入日志的用戶屏幕歷史操作。
返回圖4。在步驟309,在支持側(cè)302,所公開的GLTR系統(tǒng)模擬客戶端應(yīng)用110的圖形用戶界面(GUI)屏幕(也稱為客戶端GUI屏幕),并在接下來的步驟310,SSP瀏覽之前的客戶端GUI屏幕和相關(guān)的客戶端操作。在接下來的步驟311,為了檢驗步驟310中所顯現(xiàn)的信息并且在需要時采取補救措施,SSP使用GLTR SSP軟件應(yīng)用103從支持機(jī)101執(zhí)行對客戶機(jī)108上的客戶端應(yīng)用110的遠(yuǎn)程操作。然后,過程300在結(jié)束步驟312終止。
圖5示出了用于實現(xiàn)所公開的GLTR方法的系統(tǒng)400的功能框圖。當(dāng)在SSP機(jī)101上調(diào)用支持服務(wù)應(yīng)用(SSA)103時,調(diào)用以虛線示出的系統(tǒng)組件(即SSP側(cè)的411-413、415、418和419,以及客戶端側(cè)的402和410)。當(dāng)SSP機(jī)101上調(diào)用支持服務(wù)應(yīng)用(SSA)103時,調(diào)用以虛線示出的可選步驟(即客戶端側(cè)的401、404、420和409,以及SSP側(cè)的414、416和417)。當(dāng)SSP機(jī)101接收到支持請求時(圖4中的308、307),在SSP機(jī)101上調(diào)用SSA 103。
在客戶端應(yīng)用110啟動時,客戶端應(yīng)用110初始化GUI日志記錄服務(wù)405,在本說明書中也稱為GLOGGER(更多細(xì)節(jié)見圖8-10)。在進(jìn)行對于客戶端應(yīng)用110的每一GUI操作時執(zhí)行步驟403、406。在SSP應(yīng)用103的調(diào)用之后執(zhí)行步驟409、414、416和417。在SSP進(jìn)行每一GUI操作時執(zhí)行步驟401和404。
通常,SSP應(yīng)用103將GUI模擬器411-413(更多細(xì)節(jié)見圖12)與支持協(xié)調(diào)器415(更多細(xì)節(jié)見圖7)相結(jié)合。授權(quán)服務(wù)器418和策略服務(wù)器419駐留在SSP應(yīng)用103中,或其他位置。監(jiān)督用戶服務(wù)402(更多細(xì)節(jié)見圖14)和日志協(xié)調(diào)器服務(wù)410可能地作為客戶端應(yīng)用110的一部分駐留在客戶機(jī)108上。具體地,監(jiān)督用戶服務(wù)402和GUI日志記錄服務(wù)405典型地以這樣的服務(wù)的形式作為客戶端應(yīng)用進(jìn)程110(見圖5)中的組件來運行,該服務(wù)由客戶端應(yīng)用110通過調(diào)用函數(shù)startLoggingService()而被調(diào)用。由GUI日志記錄服務(wù)405來管理剩余部分的涉及GLTR方法的相關(guān)處理和GUI日志數(shù)據(jù)庫408的管理(見圖5)。GUI日志記錄服務(wù)405作為客戶端應(yīng)用110中的獨立的線程運行。這樣,客戶端應(yīng)用110并不提供對于執(zhí)行日志記錄所需的所有處理的GUI日志記錄服務(wù)405的任何支持。
GUI日志數(shù)據(jù)庫408是客戶機(jī)108中存儲器109的數(shù)據(jù)111的一部分。
當(dāng)客戶運行客戶端應(yīng)用110時,接著GUI日志記錄服務(wù)405(稱為GLOGGER)被初始化。每當(dāng)客戶端應(yīng)用110由于客戶端應(yīng)用110的自主操作或由于客戶操作而發(fā)生GUI事件時,該GUI事件的對象便被提供給GUI日志記錄服務(wù)405,如箭頭403所表示的那樣。前述的GUI事件的事件對象(即java.awt.event.ActionEvent)由Java事件管理器來提供。然而,應(yīng)該指出的是,GUI日志記錄服務(wù)405從客戶端應(yīng)用110中“拉出”該GUI事件對象,或者換句話說,客戶端應(yīng)用110無法將該GUI事件對象“推出”給GUI日志記錄服務(wù)405。然后,如箭頭406所表示的,GUI日志記錄服務(wù)405在GUI日志數(shù)據(jù)庫408中存儲相應(yīng)的GUI日志文本記錄。
GUI日志記錄服務(wù)405以GUI日志文本記錄的形式將GUI屏幕和操作記入日志,并存儲這些日志文本記錄,如GUI日志數(shù)據(jù)庫408中的箭頭406所表示的。GUI日志記錄服務(wù)405注冊捕獲前述GUI事件的事件處理器。在應(yīng)用GUI上這些事件處理器被記錄為不同的GUI組件。因此,GUI日志記錄服務(wù)405將與客戶端應(yīng)用110相關(guān)的所有用戶操作和應(yīng)用GUI變化記入日志。GUI日志記錄服務(wù)405只為客戶端應(yīng)用110所處理的那些事件記錄事件處理器,從而大量減少了數(shù)據(jù)庫408中所存儲的日志的大小。
如箭頭406所表示的,在GUI日志數(shù)據(jù)庫408中所存儲的GUI日志文本記錄是存儲關(guān)于應(yīng)用GUI屏幕組件和用戶操作的信息的文本記錄。GUI日志文本記錄屬于三種不同的類型,即(a)組件GUI日志文本記錄,(b)事件GUI日志文本記錄,以及(c)快照GUI日志文本記錄。
組件GUI日志文本記錄存儲該組件的所有屬性、客戶端應(yīng)用110為該組件所記錄的事件監(jiān)聽器的列表、GUI日志記錄服務(wù)405所生成的GUI組件的布局和組件id,以便能夠根據(jù)組件GUI日志文本記錄重建相應(yīng)的GUI組件。組件GUI日志文本記錄還存儲與GUI樹中的其他組件相關(guān)的層次信息。
事件GUI日志文本記錄存儲關(guān)于GUI組件的用戶操作和屬性變化的信息。事件GUI日志文本記錄存儲涉及該事件的所有信息、唯一地標(biāo)識該事件的事件id以及相應(yīng)的組件id,以便能夠在SSP側(cè)根據(jù)該事件GUI日志文本記錄再現(xiàn)相應(yīng)的事件。
快照GUI日志文本記錄是日志文本記錄的一種類型,其具有構(gòu)建之前在特定時間出現(xiàn)的應(yīng)用GUI屏幕的充足信息。快照GUI日志文本記錄通常用于將多個事件/操作打包為單個日志文本記錄,典型地,為了減小存儲器和通信傳輸帶寬需求。
如所指出的,在服務(wù)支持被請求時,以虛線格式示出的系統(tǒng)400的元素被調(diào)用。相應(yīng)地,在支持服務(wù)提供者側(cè),支持協(xié)調(diào)器415、授權(quán)服務(wù)器418、策略服務(wù)器419以及GUI模擬器411、412和413被調(diào)用??梢源嬖谌魏螖?shù)量的GUI模擬器,其中至少一個具有每一支持執(zhí)行程序。典型地,對于一個服務(wù)支持請求調(diào)用前述GUI模擬器之一。在客戶端側(cè),當(dāng)由于客戶報告故障而調(diào)用支持服務(wù)時,監(jiān)督用戶服務(wù)402和日志協(xié)調(diào)器服務(wù)410被調(diào)用。
在客戶端應(yīng)用110的正常操作過程中,每一GUI操作都將引發(fā)如403所表示的GUI事件的日志記錄以及如406所表示的相應(yīng)GUI日志文本記錄的存儲。
在接收到支持請求以及隨之發(fā)生的SSA 103的調(diào)用時,如虛線箭頭420所表示的,日志協(xié)調(diào)器服務(wù)410訪問GUI日志數(shù)據(jù)庫408中所存儲的GUI日志文本記錄。然后,如虛線箭頭409所表示的,日志協(xié)調(diào)器服務(wù)410將前述GUI日志文本記錄提供給支持協(xié)調(diào)器415。如虛線箭頭416所表示的,支持協(xié)調(diào)器415通過調(diào)用授權(quán)服務(wù)器418,確定該支持請求是否是授權(quán)的。如果這引發(fā)服務(wù)請求的授權(quán),則支持協(xié)調(diào)器415調(diào)用策略服務(wù)器419,并從策略服務(wù)器419接收適當(dāng)?shù)闹С址?wù)執(zhí)行程序以處理該支持請求,如虛線箭頭417所表示的。然后,如虛線箭頭414所表示的,支持協(xié)調(diào)器415將GUI日志文本記錄傳送至該支持執(zhí)行程序的GUI模擬器411。
客戶端應(yīng)用GUI可能會響應(yīng)于監(jiān)督用戶服務(wù)(見圖4中的311)所實施的操作引發(fā)的程序化操作而在調(diào)用支持服務(wù)(見圖7中的606)之后發(fā)生變化。這些變化需要反應(yīng)在所模擬的GUI中(見圖4中的309),為了確保這樣的狀態(tài)的實現(xiàn),日志協(xié)調(diào)器服務(wù)410繼續(xù)將調(diào)用支持服務(wù)之后所產(chǎn)生的、新的GUI日志文本記錄發(fā)送至支持協(xié)調(diào)器415,支持協(xié)調(diào)器415將這些內(nèi)容發(fā)送至相關(guān)的GUI模擬器。如圖13A和13B所示的那樣,這些新的GUI日志文本記錄被應(yīng)用。
GUI模擬器411使用GUI日志文本記錄,使SSP能夠重建客戶端應(yīng)用GUI屏幕。GUI日志文本記錄捕獲之前所有的客戶端GUI屏幕和操作,并且使SSP能夠為了理解客戶端應(yīng)用110的操作而瀏覽之前客戶端應(yīng)用GUI操作和屏幕。如虛線箭頭401所表示的,SSP也能夠使用監(jiān)督用戶服務(wù)402對客戶端應(yīng)用110實施如虛線箭頭404所表示的針對所模擬的GUI采取的操作。這實現(xiàn)了SSP在支持側(cè)對客戶端應(yīng)用110的遠(yuǎn)程操作。
所公開的GLTR系統(tǒng)和方法的實現(xiàn)使用了Java(1.3版)語言,這僅是代表性的實現(xiàn)。因此,所公開的實現(xiàn)支持以所提到的Java語言實現(xiàn)的應(yīng)用。還可以使用Java Abstract Window ToolkitTM和SwingTM應(yīng)用程序接口(API)。在基于提供者的體系結(jié)構(gòu)的基礎(chǔ)上,來實現(xiàn)GUI日志記錄服務(wù)405(GLOGGER)、GUI監(jiān)督用戶服務(wù)402(GSHADOW)和GUI模擬器組件411-413(GSIM)。該體系結(jié)構(gòu)具有一個主層以及針對每一GUI組件的提供者。該主層提供對提供者所支持的API的說明。該主層進(jìn)行普通處理,并使用提供者功能以進(jìn)行特定于GUI組件的處理。雖然本說明書使用了Java語言,但也可以使用提供功能上與結(jié)合Java所描述的API等價的事件處理API的其他語言。
圖6A和6B示出了表示客戶端應(yīng)用110的正常操作(見圖5)的過程片段500和500’。過程片段500和500’與客戶端側(cè)501相關(guān)。過程片段500以步驟313開始,其中客戶在客戶機(jī)108上運行客戶端應(yīng)用110(見圖1)。在接下來的步驟504,客戶端應(yīng)用110初始化GUI日志記錄服務(wù)405。在接下來的步驟518,GUI日志記錄服務(wù)405獲取最頂層客戶端應(yīng)用GUI組件的列表作為輸入,并確定與該GUI相關(guān)的組件層次。在GUI日志記錄服務(wù)405被初始化時,步驟505確定適當(dāng)?shù)氖录幚砥魇欠駲z測到GUI操作。如果未檢測到,則過程500沿“否”箭頭返回至步驟505。相反,如果發(fā)生了GUI操作,則過程500沿“是”箭頭前進(jìn)至步驟506。在步驟506,GUI日志記錄服務(wù)405創(chuàng)建所檢測到的相應(yīng)GUI事件的GUI日志文本記錄。隨后的步驟515(圖6B中示出)確定是否有組件從該組件層次中被移除或被添加到該組件層次中(見圖12)。如果有,則過程500沿“是”箭頭前進(jìn)至步驟516,更新與GUI相關(guān)的組件層次。如果沒有組件被移除或添加,則過程500沿“否”箭頭從步驟515前進(jìn)至步驟507。
隨后的步驟507在GUI日志數(shù)據(jù)庫408中存儲GUI日志文本記錄。在隨后的步驟508,GUI日志記錄服務(wù)405確定客戶端應(yīng)用110是否仍在運行。如果在運行,則過程500沿“是”箭頭返回至圖6A中的步驟505。返回到圖6B中的步驟508,如果GUI日志記錄服務(wù)405確定客戶端應(yīng)用110未在運行,則過程500從步驟508沿“否”箭頭前進(jìn)至終止步驟509。從實際的觀點出發(fā),在優(yōu)選布置中,GUI日志記錄服務(wù)405作為客戶端應(yīng)用110中的線程而運行,所以當(dāng)客戶端應(yīng)用110終止時,GUI日志記錄服務(wù)405也終止。
圖7示出了處理流/數(shù)據(jù)流片段600和600’,服務(wù)支持應(yīng)用103(見圖1)根據(jù)該流程進(jìn)行操作。諸如618之類的實線格式的箭頭表示所討論的過程從位于所討論的箭頭起點的步驟(例如步驟603位于箭頭618的起點)前進(jìn)到位于所討論的箭頭末端的步驟(例如步驟604位于箭頭618的末端)的方式。相反,諸如617之類的虛線格式的箭頭表示數(shù)據(jù)流從位于所討論的箭頭起點的步驟(例如步驟604位于箭頭617的起點)前進(jìn)到位于所討論的箭頭末端的步驟(例如步驟607位于箭頭617的末端)的方式。
片段600從支持請求開始,如箭頭308或箭頭307(見圖4)所表示的,該支持請求是在客戶或可選地客戶端應(yīng)用110請求幫助時產(chǎn)生的。如箭頭316(見圖4)所表示的,片段600’也從支持請求開始。
在支持側(cè)602接收到幫助請求時,步驟606調(diào)用支持側(cè)的支持服務(wù)組件。這些支持服務(wù)組件是GUI模擬器411、412和413、支持協(xié)調(diào)器415、授權(quán)服務(wù)器418以及策略服務(wù)器419。然后,片段600前進(jìn)至步驟607。步驟603調(diào)用客戶端側(cè)支持組件。這些組件包括日志協(xié)調(diào)器服務(wù)410和監(jiān)督用戶服務(wù)402。在隨后的步驟604,日志協(xié)調(diào)器服務(wù)410訪問GUI日志數(shù)據(jù)庫408中的GUI日志文本記錄,并如虛線箭頭617所表示的,將該GUI日志文本記錄發(fā)送至支持側(cè)602的支持協(xié)調(diào)器415。在步驟607,支持協(xié)調(diào)器415接收前述GUI日志文本記錄,之后在步驟608,支持協(xié)調(diào)器415詢問授權(quán)服務(wù)器418,以確定是否該對該支持請求授權(quán)。如果授權(quán),則過程600沿“是”箭頭前進(jìn)至步驟609。在步驟609,支持協(xié)調(diào)器415通過詢問策略服務(wù)器419,確定合適的服務(wù)支持執(zhí)行程序。返回至步驟608,如果授權(quán)服務(wù)器418指示并不對該支持請求授權(quán),則過程600沿“否”箭頭前進(jìn)至步驟613,其中向支持協(xié)調(diào)器415發(fā)送消息,大意表示該服務(wù)請求未被授權(quán),且不能被許可。支持協(xié)調(diào)器415將其作為出錯消息傳遞至客戶端應(yīng)用110。
在步驟609,在策略服務(wù)器419向支持協(xié)調(diào)器415提供了適合的服務(wù)支持執(zhí)行程序時,如箭頭611所表示的,片段600前進(jìn)至步驟610,其中諸如411之類的GUI模擬器使用客戶端側(cè)所發(fā)送的GUI日志文本記錄重建應(yīng)用GUI屏幕。在步驟610,SSP在支持側(cè)602瀏覽歷史GUI屏幕和用戶操作信息,直到確定問題所在為止。
如虛線箭頭614所表示的,在步驟610(結(jié)合圖13A和13B更詳細(xì)地進(jìn)行描述)重建了應(yīng)用GUI屏幕時,在SSP側(cè)602可對所模擬的GUI屏幕進(jìn)行操作,如步驟615所描述的。這將結(jié)合圖15更詳細(xì)地進(jìn)行描述。
如虛線箭頭618所表示的,SSP在步驟615對所模擬的GUI所采取的GUI操作,作為GUI日志文本記錄,被傳送至步驟605,其中客戶端側(cè)601上的監(jiān)督用戶服務(wù)402遠(yuǎn)程操作客戶端應(yīng)用110,如結(jié)合圖14更詳細(xì)地描述的。
在步驟605,監(jiān)督用戶服務(wù)402所進(jìn)行的客戶端應(yīng)用的上述操作,將引起客戶端應(yīng)用GUI變化。這些變化需要被鏡像至SSP所模擬的GUI。為了實現(xiàn)該操作,如虛線箭頭616所表示的,監(jiān)督用戶服務(wù)402將GUI日志文本記錄發(fā)送至日志協(xié)調(diào)器服務(wù)410。步驟610使用由日志協(xié)調(diào)器服務(wù)所傳遞的GUI日志文本記錄,以更新所模擬的GUI屏幕,如關(guān)于圖13A和13B更詳細(xì)地描述的。
因此,步驟610處理由于監(jiān)督用戶服務(wù)402在步驟605中所采取的操作而產(chǎn)生的GUI日志文本記錄的方式,與步驟610對在初始的支持調(diào)用時支持協(xié)調(diào)器服務(wù)415所發(fā)送的GUI日志文本記錄進(jìn)行處理的方式相同。
如前所述,為了反映響應(yīng)于監(jiān)督用戶服務(wù)402所采取的程序化操作而發(fā)生的客戶端應(yīng)用GUI變化,GUI日志協(xié)調(diào)器服務(wù)410持續(xù)發(fā)送新的GUI日志文本記錄(這些是在支持調(diào)用之后被存儲的記錄),該記錄由GUI日志記錄服務(wù)405存儲在GUI日志數(shù)據(jù)庫408中。應(yīng)該指出的是,日志協(xié)調(diào)器服務(wù)410并不發(fā)送對應(yīng)于監(jiān)督用戶服務(wù)402所采取的操作的GUI日志文本記錄,而是僅發(fā)送對應(yīng)于應(yīng)用GUI變化的GUI日志文本記錄,該變化是響應(yīng)于監(jiān)督用戶服務(wù)402所采取的程序化操作而發(fā)生的。如616所示被發(fā)送的日志文本記錄被用于區(qū)分與監(jiān)督用戶服務(wù)所采取的操作和客戶端應(yīng)用GUI變化對應(yīng)的日志文本記錄。
圖8示出了一過程,根據(jù)該過程在圖6A的步驟504和518初始化GUI日志記錄服務(wù)405。GUI日志記錄服務(wù)405執(zhí)行GUI事件和屏幕的日志記錄。在注冊頂層GUI組件對象的客戶端應(yīng)用110列表時,初始化GUI日志記錄服務(wù)405。GUI日志記錄服務(wù)405執(zhí)行注冊之后出現(xiàn)的GUI操作和屏幕的日志記錄。通常,客戶端應(yīng)用110在客戶端應(yīng)用110的啟動時向GUI日志記錄服務(wù)405注冊,然而該注冊能夠在任何時間執(zhí)行。如果在啟動之后執(zhí)行該注冊,則GUI日志記錄服務(wù)將不會獲得在注冊之前出現(xiàn)的任何應(yīng)用GUI信息。因此,該系統(tǒng)將不能再現(xiàn)(即模擬)在注冊之前出現(xiàn)的GUI屏幕/操作。
GUI日志記錄服務(wù)405的初始化包括三個步驟。首先,GUI日志記錄服務(wù)405使用Java所提供的GUI父子關(guān)系A(chǔ)PI來發(fā)現(xiàn)所有GUI組件及其相關(guān)層次。以這種方式,GUI日志記錄服務(wù)405創(chuàng)建GUI樹,該GUI樹具有關(guān)于在客戶端應(yīng)用110的GUI中所存在的GUI組件的所有信息。應(yīng)該指出的是,該GUI樹具有關(guān)于GUI組件的信息,而不是GUI組件對象的信息,此外,每一GUI組件由GUI日志記錄服務(wù)405所生成的唯一id來標(biāo)識。
第二,GUI日志記錄服務(wù)405發(fā)現(xiàn)按客戶端應(yīng)用110的GUI組件所注冊的事件監(jiān)聽器的列表。由此,GUI日志記錄服務(wù)405了解客戶端應(yīng)用110所處理的GUI事件。第三,GUI日志記錄服務(wù)405向每一GUI組件注冊其自身的事件監(jiān)聽器。換句話說,對于客戶端應(yīng)用110所注冊的每一事件處理器,GUI日志記錄服務(wù)405還注冊單獨的事件監(jiān)聽器。以這種方式,GUI日志記錄服務(wù)405捕獲客戶端應(yīng)用110所處理的所有用戶操作。
GUI日志記錄服務(wù)405還注冊其他的監(jiān)聽器,以跟蹤GUI組件的添加、移除和屬性變化。GUI日志記錄服務(wù)405向每一GUI組件注冊屬性變化監(jiān)聽器,以跟蹤GUI組件的屬性變化。GUI日志記錄服務(wù)405注冊組件監(jiān)聽器,以跟蹤GUI組件移除和添加。大多數(shù)GUI組件提供都上述監(jiān)聽器。如果不提供,則使用探測機(jī)制和語言(即Java)所提供的事件監(jiān)聽器API來實現(xiàn)這些監(jiān)聽器。為了捕獲這些變化,前述監(jiān)聽器探測不同的GUI組件。該探測可以是基于事件的(在此情況下,每一次刷新GUI屏幕,相應(yīng)的頂層組件便發(fā)生變化)或者該探測可以是基于間隔的(在此情況下,用戶能夠指定兩次探測之間的時間間隔)。屬性變化監(jiān)聽器的一個可能的有效實現(xiàn)可以是,其在任一用戶事件處理器報告事件時檢查組件的屬性(即JTextField中的文本)變化。這樣的屬性變化事件監(jiān)聽器將確保在用戶進(jìn)行由客戶端應(yīng)用所捕獲到的操作時使日志得以更新。注意術(shù)語“事件處理器”和“監(jiān)聽器”指捕獲事件/操作并將它們送至日志記錄服務(wù)的代碼。
過程504從步驟701開始,其中GUI日志記錄服務(wù)405發(fā)現(xiàn)所有的應(yīng)用GUI組件及其相關(guān)層次。此后,在步驟702,GUI日志記錄服務(wù)405創(chuàng)建GUI樹。在隨后的步驟703,GUI日志記錄服務(wù)405發(fā)現(xiàn)每一應(yīng)用GUI組件的所注冊的事件監(jiān)聽器的列表。此后,在步驟704,GUI日志記錄服務(wù)405向每一應(yīng)用GUI組件注冊其自身的事件監(jiān)聽器。隨后,GUI日志記錄服務(wù)405向每一應(yīng)用GUI組件注冊其自身的屬性變化監(jiān)聽器。在隨后的步驟706,GUI日志記錄服務(wù)405注冊其自身的組件監(jiān)聽器,以跟蹤組件添加和/或移除。然后,過程504沿箭頭512前進(jìn)至圖6A中的步驟505。
圖9和10示出了在圖6A中的步驟518之后開始前進(jìn)到圖6B中的步驟508的流程。該流程包括標(biāo)記為800和800’的2個過程線程。過程800和800’以基本的格式示出,它們表示兩個并發(fā)運行的過程。過程800結(jié)合圖9來描述,并發(fā)過程800’結(jié)合圖10來描述。
過程800從步驟801開始,其中GUI日志記錄服務(wù)405確定所檢測的GUI操作是否涉及屬性變化和/或用戶操作事件。如果涉及,則過程800沿“是”箭頭前進(jìn)至步驟802。在步驟802,GUI日志記錄服務(wù)執(zhí)行屬性變化和/或用戶操作事件日志記錄過程,該過程結(jié)合圖11更詳細(xì)地被描述。在處理802完成時,過程800沿箭頭513前進(jìn)至圖6B中的步驟508。
返回至步驟801,如果GUI日志記錄服務(wù)405確定所出現(xiàn)的GUI操作與屬性變化和/或用戶操作事件無關(guān),則過程800沿“否”箭頭前進(jìn)至步驟803。在步驟803,GUI日志記錄服務(wù)405執(zhí)行組件添加和/或移除日志記錄操作,該操作結(jié)合圖12更詳細(xì)地被描述。在步驟803完成時,過程800經(jīng)由箭頭805,從步驟803前進(jìn)至圖6B中的步驟508。
圖10示出了過程線程800’,其與結(jié)合圖9所描述的過程800并發(fā)運行。在過程800’中,GUI日志記錄服務(wù)405進(jìn)行不同類型的事件日志記錄,其中所討論的事件的復(fù)合日志被壓縮為快照。GUI屏幕和用戶操作以文本記錄的形式被記入日志,以使記錄開銷接近于最小,這通常是所公開的GLTR方法的情形。
利用以下示例對快照日志文本記錄進(jìn)行最佳描述??煺杖罩疚谋居涗浭侨罩疚谋居涗浀囊环N類型,其具有構(gòu)建在之前的特定時間出現(xiàn)的應(yīng)用GUI屏幕的充足信息。其通常用于將多個事件打包為單個日志文本記錄,典型地,為了減少存儲器和通信傳輸帶寬需求。這樣,例如,如果特定客戶端應(yīng)用具有4個按鈕,且由于一系列用戶和程序化操作,發(fā)生了下面的事件序列(1)按鈕1被單擊;(2)按鈕2被單擊;(3)按鈕3被單擊;(4)按鈕2被移除;(5)文本框被添加。
考慮上述示例,如果捕獲每一事件(即單獨地進(jìn)行日志記錄),則必須以5個相應(yīng)的事件日志文本記錄的形式捕獲5個單獨的事件。然而,在客戶端應(yīng)用運行較長的一段時間且出現(xiàn)了大量操作的情況下,對每一事件存儲單獨的日志文本記錄會消耗大量的存儲器。在這種情況下,采用“快照事件記錄”方法,能夠有效地將多個事件壓縮為單個快照日志文本記錄。返回至上述具有5個單獨事件的示例,相應(yīng)的快照日志文本記錄將以下面的格式存儲信息按鈕1(單擊狀態(tài)),按鈕3(單擊狀態(tài)),按鈕4(未單擊狀態(tài)),一個文本框。
明顯地,上述快照日志文本記錄并未存儲任何各變化和/或操作何時發(fā)生的時間信息。該快照日志文本記錄僅存儲所有操作和/或變化的集合效果。從粒度的觀點出發(fā),快照記錄可以按照客戶端應(yīng)用的用戶所確定的時間間隔被記錄。因此,能夠以每小時、每天或任何方便的頻率對快照日志記錄進(jìn)行記錄。這使得能夠從存儲器中刪除大量的單個日志文本記錄,從而在某些情況下節(jié)省大量的存儲器容量。在實際中,用戶通??杀4孀罱?例如,前1天或2天)的各日志文本記錄,而在該時間之前被記錄的操作則以每小時被壓縮為快照日志文本記錄。
考慮前述的快照GLTR示例,顯而易見,通過創(chuàng)建以客戶端應(yīng)用110的用戶所定義的時間粒度生成的GUI快照,能夠進(jìn)一步使日志記錄開銷最小化。GUI快照日志文本記錄是GUI樹的日志,該GUI樹具有與客戶端應(yīng)用110的GUI中、在快照生成時所存在的所有GUI組件相關(guān)的全部信息。GUI快照日志文本記錄具有與客戶端應(yīng)用110的GUI中、在給定時間所存在的所有GUI組件相關(guān)的全部信息。該GUI快照并不以事件或操作的形式存儲,而是以GUI樹的編排后的副本的形式所存儲。
在其他情況下,客戶端應(yīng)用GUI屏幕以與之前的屏幕的區(qū)別的形式進(jìn)行存儲。應(yīng)該指出的是,通常,諸如鼠標(biāo)單擊之類的用戶操作或諸如setText之類的程序化操作/屬性變化事件,均被記錄為相應(yīng)的事件日志文本記錄。因此,對于客戶端應(yīng)用GUI中的每一變化,GUI日志記錄服務(wù)405通常會向日志添加日志文本記錄。然而,如果日志文本記錄的數(shù)量超過預(yù)定閾值,則GUI日志記錄服務(wù)405通過創(chuàng)建將之前的日志文本記錄組合的快照日志文本記錄,來降低日志記錄開銷。日志文本記錄被壓縮為快照記錄的粒度由客戶端應(yīng)用110的用戶來設(shè)定。區(qū)別的示例,是(a)諸如鼠標(biāo)單擊之類的用戶操作,或(b)諸如計劃性地采取的操作的、例如setText的程序化操作。
過程線程800’從步驟1200開始,其中GUI日志記錄服務(wù)確定是否應(yīng)進(jìn)行快照日志記錄操作(根據(jù)客戶端應(yīng)用用戶所定義的時間粒度)。如果不應(yīng)進(jìn)行,則過程800’沿“否”箭頭返回至步驟1200。相反,如果應(yīng)進(jìn)行快照日志記錄事件,則過程800’沿“是”箭頭前進(jìn)至步驟1201。在步驟1201,主層將當(dāng)前GUI樹中的每一GUI節(jié)點(組件)傳送給相應(yīng)的提供者。在隨后的步驟1202,相應(yīng)的提供者向主層返回組件日志文本記錄。此后,在步驟1203,主層將組件日志文本記錄與組件層次一起編排以形成快照記錄,其中的組件日志文本記錄是針對GUI樹中的每一GUI節(jié)點被返回的。在隨后的步驟1204,主層在數(shù)據(jù)庫408中記錄編排后的快照日志文本記錄。然后,過程800’沿箭頭513前進(jìn)至圖6B中的步驟508。
術(shù)語“編排”用于表示相應(yīng)提供者將GUI組件對象轉(zhuǎn)換為相應(yīng)的組件GUI日志文本記錄(即JButton)、將GUI事件對象(即java.util.ActionEvent或PropertyChangeEvent)轉(zhuǎn)換為相應(yīng)的事件GUI日志文本記錄的步驟。
應(yīng)該指出的是,從相應(yīng)提供者返回的任一GUI組件的組件GUI日志文本記錄,均具有相應(yīng)GUI組件的所有屬性。這就是在SSP側(cè)之所以能夠根據(jù)組件日志文本記錄重建該GUI組件的原因。因此,例如,JButton提供者在組件日志文本記錄中存儲給定JButton組件的所有屬性,從而在SSP側(cè)能夠根據(jù)組件日志文本記錄重建相同的JButton GUI組件。
圖11更詳細(xì)地示出了圖9的步驟802。用于屬性變化和用戶操作事件的處理包括三個步驟。首先,主層發(fā)現(xiàn)組件唯一id和提供者。然后,主層將事件對象(從Java事件管理器接收的)傳輸至所發(fā)現(xiàn)的提供者,該提供者將該GUI事件對象編排為事件日志文本記錄。然后,主層將編排后的事件日志文本記錄與主層所生成的組件id和事件id一起記錄。應(yīng)該指出的是,該事件日志文本記錄存儲了關(guān)于該事件的所有信息以及相應(yīng)的組件id,以便在SSP側(cè)能夠根據(jù)該事件GUI日志文本記錄再現(xiàn)該事件。
返回圖11,過程802從步驟901開始,其中主層發(fā)現(xiàn)組件唯一id和適合的提供者。此后,在步驟902,主層將事件對象傳輸至所發(fā)現(xiàn)的提供者。隨后,在步驟903,提供者將該GUI事件對象編排為事件日志文本記錄。在隨后的步驟904,主層將編排后的事件日志文本記錄與組件id和事件id一起記錄在GUI日志數(shù)據(jù)庫408中,然后,箭頭513將過程802引導(dǎo)至圖6B中的步驟508。
圖12更詳細(xì)地示出了圖9中的步驟803。組件添加/移除事件的處理包括基于組件的移除或添加的處理。在移除GUI組件的情況下,主層從GUI樹中移除該條目,并記錄該組件移除日志文本記錄。該組件移除日志文本記錄包括組件id和關(guān)于所刪除的組件的層次信息。GUI組件添加事件的處理按三個步驟來執(zhí)行。首先,主層生成GUI樹節(jié)點以保存關(guān)于所添加的GUI組件的信息,并將其條目添加至GUI樹中。這個步驟主要包括生成唯一id、確定其提供者以及確定父子關(guān)系。第二,將該GUI組件對象傳送給該提供者,該提供者在組件日志文本記錄中對該組件的所有屬性進(jìn)行編排。第三,主層將該組件日志文本記錄與組件添加日志文本記錄一起記錄。該組件添加日志文本記錄保存關(guān)于所添加的GUI組件的層次信息。應(yīng)該指出的是,GUI日志記錄服務(wù)405以多個組件添加事件(日志記錄)的形式記錄客戶端應(yīng)用GUI屏幕中的所有GUI組件。
返回圖12,處理803從步驟1001開始,其中GUI日志記錄服務(wù)405確定是否將有組件被添加或移除。如果組件將被移除,則過程803沿“移除”箭頭前進(jìn)至步驟1002。在步驟1002,主層從GUI樹中移除該條目,并記錄組件移除日志文本記錄。然后,過程803沿箭頭1007前進(jìn)至圖9中的箭頭805。
返回步驟1001,如果GUI日志記錄服務(wù)405確定有組件被添加,則過程803沿“添加”箭頭從步驟1001前進(jìn)至步驟1003。在步驟1003,主層生成GUI樹節(jié)點,以保存關(guān)于所添加的GUI組件對象的信息。此后,主層在步驟1004、在GUI樹中生成其條目。在隨后的步驟1005,主層將GUI組件對象傳送給適當(dāng)?shù)奶峁┱?。之后,在步驟1006,提供者在組件日志文本記錄中對該組件的屬性進(jìn)行編排。在隨后的步驟1007,主層將組件日志文本記錄與組件添加日志文本記錄一起記錄在GUI日志數(shù)據(jù)庫408中。為了捕獲與新添加的組件相關(guān)的事件,主層還執(zhí)行步驟703、704、705和706(圖8中示出)。然后,步驟803沿箭頭1007前進(jìn)至圖9中的箭頭805。
圖13A和13B更詳細(xì)地示出了圖7中的步驟610,其涉及GUI模擬器進(jìn)程411。圖7中的步驟610分別由圖13A和13B中的過程片段610’和610”來示出。GUI模擬器進(jìn)程411運行于支持提供者側(cè)。GUI模擬器進(jìn)程411使用從客戶端側(cè)接收的GUI日志文本記錄來模擬客戶端應(yīng)用GUI。如已經(jīng)描述過的,GUI日志記錄服務(wù)405以可用于步進(jìn)地生成客戶端應(yīng)用GUI的GUI組件添加、移除、用戶操作和屬性變化事件(日志文本記錄)的形式,捕獲客戶端應(yīng)用GUI屏幕。用戶操作和屬性變化事件(日志文本記錄)也可逐一應(yīng)用,以提供用于全部瀏覽之前所調(diào)用的客戶端應(yīng)用GUI屏幕的手段。GUI模擬器進(jìn)程411還提供用于成組地應(yīng)用用戶操作的手段。這使得能夠以低于在客戶端側(cè)出現(xiàn)的每一用戶操作或事件的粒度來瀏覽用戶操作和相應(yīng)的GUI屏幕。
根據(jù)GUI日志文本記錄模擬之前和當(dāng)前的客戶端應(yīng)用GUI屏幕的過程包括一個初始化階段,然后,步進(jìn)地應(yīng)用GUI日志文本記錄。在初始化階段,主層根據(jù)客戶端側(cè)GUI日志記錄服務(wù)405所生成的日志文本記錄創(chuàng)建頂層GUI組件。
每一GUI日志文本記錄的處理,取決于其類型。下面是用于組件GUI日志文本記錄的處理。主層將組件日志文本記錄傳輸至相應(yīng)的提供者,該提供者則創(chuàng)建并返回實際的GUI組件。將關(guān)于新組件的信息添加至GUI樹,并在屏幕上顯示該組件。在如Jpanel的容器組件的情況下,子GUI組件也與GUI日志文本記錄一起被傳送。
事件日志文本記錄的處理包括三個步驟。首先,主層從GUI樹中發(fā)現(xiàn)GUI組件和相應(yīng)的提供者。第二,基于GUI事件日志文本記錄中的信息,提供者對相應(yīng)的GUI組件采取程序化操作。
GUI快照日志文本記錄表示完整的GUI屏幕,所以,其處理如下。主層使用GUI快照日志文本記錄中給出的GUI樹的GUI組件樹(即GUI屏幕),來創(chuàng)建完整的應(yīng)用GUI。
GUI模擬器進(jìn)程411還提供用于對當(dāng)前所模擬的GUI屏幕(與客戶端GUI相同)進(jìn)行遠(yuǎn)程用戶操作的手段。因此,以GUI日志文本記錄的形式,將對所模擬的GUI采取的操作傳輸至客戶端側(cè)的監(jiān)督用戶服務(wù)402,該服務(wù)對實際的應(yīng)用GUI進(jìn)行程序化操作。
返回至圖13A和13B,特別是圖13A,在過程片段610’的初始化步驟1301,主層根據(jù)日志文本記錄創(chuàng)建頂層GUI。此后,在步驟1303,GUI模擬器411確定所討論的日志文本記錄是組件類型、事件類型還是快照類型的。如果該日志文本記錄是組件日志文本記錄,則過程片段610’沿“組件”箭頭1317前進(jìn)至圖13B中的步驟1318。步驟1318確定該日志文本記錄涉及組件添加還是組件移除類型。如果步驟1318確定其是組件添加類型,則過程片段610”沿“添加”箭頭前進(jìn)至步驟1304。在步驟1304,主層將相應(yīng)的組件GUI日志文本記錄傳輸至相應(yīng)的提供者。在隨后的步驟1305,提供者創(chuàng)建并返回實際的GUI組件對象。提供者還注冊用于新創(chuàng)建的GUI組件的事件監(jiān)聽器,要注意到的是監(jiān)聽器的列表存在于組件GUI日志文本記錄之中。此后,在步驟1306,主層將關(guān)于該新GUI組件對象的信息添加至GUI樹,且將提供者所返回的GUI組件添加至父組件,要注意的是層次信息是從組件添加日志文本記錄中獲得的。然后,過程片段610”前進(jìn)至步驟1315,其中主層刷新屏幕1114,以便在屏幕1114上顯示該新組件(見圖2)。然后,過程片段610”沿箭頭1316返回圖13A。
返回至步驟1318,如果該步驟確定該日志文本記錄是組件移除類型的,則過程片段610”沿“移除”箭頭前進(jìn)至步驟1319,其中移除所模擬的GUI的相應(yīng)GUI組件。然后,過程片段610”沿箭頭1320前進(jìn)至步驟1315。
圖15示出了怎樣處理對于所模擬的GUI屏幕進(jìn)行的SSP側(cè)操作。圖13A中的虛線箭頭614表示對通過617從日志協(xié)調(diào)器服務(wù)410接收的GUI日志文本記錄進(jìn)行處理以通過步驟610(見圖7)反映客戶端側(cè)GUI變化的情況。此后,在步驟1501,主層發(fā)現(xiàn)組件唯一id和提供者。在隨后的步驟1502,提供者將事件對象(從Java事件管理器接收的)編排或轉(zhuǎn)換為相應(yīng)的事件GUI日志文本記錄。
此后,在步驟1503,主層以GUI日志文本記錄的形式,將對于所模擬的GUI進(jìn)行的操作傳輸至監(jiān)督用戶服務(wù)402。因此,就對于SSP所模擬的GUI進(jìn)行的每一操作來說,包括三個步驟。在第一步驟1501,主層發(fā)現(xiàn)組件唯一id和提供者。在第二步驟1502,相應(yīng)的提供者將事件對象(從Java事件管理器接收的)編排或轉(zhuǎn)換為相應(yīng)的事件GUI日志文本記錄。在第三步驟1503,將事件GUI日志文本記錄傳輸至監(jiān)督用戶服務(wù)。
返回至圖13A中的步驟1303,如果確定該日志文本記錄是事件類型的,則過程610沿“用戶”箭頭前進(jìn)至步驟1307。在步驟1307,主層從GUI樹中發(fā)現(xiàn)GUI組件和相應(yīng)的提供者。在隨后的步驟1308,提供者對相應(yīng)的GUI組件采取程序化操作。
返回至步驟1303,如果確定該日志文本記錄是快照類型的,則過程610沿“快照”箭頭前進(jìn)至步驟1309。在步驟1309,主層從快照日志文本記錄中獲得GUI樹層次信息,并創(chuàng)建GUI樹。該快照日志文本記錄具有對應(yīng)于該GUI樹中每一GUI節(jié)點的組件日志文本記錄。在隨后的步驟1312,對于該GUI樹中的每一節(jié)點,主層將存在于該快照記錄中的相應(yīng)的組件日志文本記錄傳送至相應(yīng)的提供者。此后,在步驟1313,各提供者返回GUI組件,該GUI組件與在步驟1312主層傳送給它們的組件日志文本記錄相對應(yīng)。在隨后的步驟1314,主層根據(jù)存在于快照日志文本記錄中的層次信息添加和/或布置所返回的GUI組件,最后,主層刷新整個應(yīng)用GUI。
圖14更詳細(xì)地示出了圖7中的步驟605,該步驟涉及監(jiān)督用戶服務(wù)402。監(jiān)督用戶服務(wù)402運行于客戶端應(yīng)用側(cè)。監(jiān)督用戶服務(wù)402從GUI模擬器411接收編排后的GUI日志文本記錄。主層使用GUI日志記錄服務(wù)405所準(zhǔn)備的GUI樹。GUI日志文本記錄的處理包括2個步驟。首先,監(jiān)督用戶服務(wù)402根據(jù)存在于所接收的GUI日志文本記錄中的信息,發(fā)現(xiàn)GUI組件對象和提供者。第二,監(jiān)督用戶服務(wù)402將編排后的GUI日志文本記錄與所發(fā)現(xiàn)的GUI組件一起傳送至相應(yīng)的提供者。第三,該提供者對該GUI組件程序化地應(yīng)用該事件(即相應(yīng)的日志文本記錄)。這樣,例如,如果接收到按鈕單擊日志文本記錄,則監(jiān)督用戶服務(wù)402對相應(yīng)的組件調(diào)用doClick()方法。
例如,doClick()方法的調(diào)用,產(chǎn)生與客戶端應(yīng)用用戶的操作相同的效果。這樣,例如,doClick()方法的調(diào)用,對于GUI生成與用戶的操作所會生成的相同的效果。一些GUI組件提供創(chuàng)建與用戶操作相同的效果的API,但一些GUI組件可能不是這樣。因此,該特征取決于這樣的API的可用性。
返回圖14,在初始化步驟1401,主層從GUI模擬器接收編排后的GUI日志文本記錄,之后,在步驟1402,主層發(fā)現(xiàn)GUI組件對象和相應(yīng)的提供者。此后,在步驟1403,主層將編排后的GUI日志文本記錄與所發(fā)現(xiàn)的GUI組件一起,傳送至相應(yīng)的提供者。隨后,在步驟1404,提供者將該事件(即日志文本記錄)程序化地應(yīng)用于該GUI組件。然后,過程605沿箭頭1405返回至步驟1401。
因此,圖14中的過程605循環(huán)步驟1401-1404,直到服務(wù)支持操作者完成對應(yīng)用的遠(yuǎn)程操作。
所公開的GLTR方法的多個優(yōu)點是顯而易見的。所公開的方法并不強制需要與現(xiàn)有客戶端應(yīng)用結(jié)合,并且并不需要除了用于向GUI日志記錄服務(wù)405進(jìn)行注冊所需的代碼之外的任何代碼變化。
GUI日志記錄服務(wù)405以GUI日志文本記錄的形式執(zhí)行GUI屏幕和事件的日志記錄,因此,網(wǎng)絡(luò)和日志記錄開銷是最小的。GUI日志記錄服務(wù)405以GUI日志文本記錄、而不是圖像的形式對GUI屏幕進(jìn)行記錄,(除了在組件(即圖標(biāo)、按鈕)中使用的圖像,即gif、jpg之外)。
由于以GUI日志文本記錄的形式執(zhí)行該日志記錄,所以所公開的方法使客戶端應(yīng)用的程序化分析能夠使用模式、簡化的統(tǒng)計以及基于策略的支持服務(wù)??蛻舳藨?yīng)用用戶能夠通過在執(zhí)行GUI再現(xiàn)/模擬時不記錄組件中的確切數(shù)據(jù)(即正文)或不向SSP顯示數(shù)據(jù),來確保組件(即JTextField)中所存在的數(shù)據(jù)的保密性。應(yīng)該指出的是,即使在這種情況下,GUI模擬器也將示出組件(即JTextField)但不會示出數(shù)據(jù)(即正文)。在一種有利的布置中,可示出“*”或已加密的數(shù)據(jù),而不示出組件(即JTextField)中的實際數(shù)據(jù)(即正文)。
上面僅描述了本發(fā)明的一些實施例,在不脫離本發(fā)明的范圍和精神的情況下,可對其進(jìn)行修改和/或變換,這些實施例是說明性的,而不是限制性的。
權(quán)利要求
1.一種提供對于在第一機(jī)器上運行的客戶端軟件應(yīng)用的支持的方法,所述方法包括以下步驟在第一機(jī)器處將圖形用戶界面顯示和相關(guān)的用戶操作記錄為基于文本的日志記錄;在第二機(jī)器處根據(jù)涉及所述客戶端軟件應(yīng)用在所述第一機(jī)器上的運行的支持請求而調(diào)用支持服務(wù);將所記錄的日志文本記錄發(fā)送至第二機(jī)器;以及在第二機(jī)器處根據(jù)所記錄的日志文本記錄模擬圖形用戶界面顯示和相關(guān)的用戶操作;其中所述支持是根據(jù)所述模擬而提供的。
2.根據(jù)權(quán)利要求1的方法,還包括以下步驟由第二機(jī)器處理從第一機(jī)器接收的所記錄的日志文本記錄;將處理后的、表示對于所模擬的圖形用戶顯示采取的操作的日志文本記錄發(fā)送至第一機(jī)器;根據(jù)第二機(jī)器所接收的處理后的日志文本記錄,從第二機(jī)器對在所述第一機(jī)器上運行的客戶端軟件應(yīng)用遠(yuǎn)程地進(jìn)行操作;其中所述支持是進(jìn)一步根據(jù)從第二機(jī)器對在所述第一機(jī)器上運行的客戶端軟件應(yīng)用進(jìn)行的遠(yuǎn)程操作而提供的。
3.根據(jù)權(quán)利要求2的方法,其中所述記錄圖形用戶界面顯示和相關(guān)的用戶操作的步驟包括以下步驟當(dāng)所述客戶端軟件應(yīng)用運行時,在第一機(jī)器處調(diào)用GUI日志記錄服務(wù);檢測GUI事件;確定相關(guān)的組件層次;以及將與所述GUI事件相關(guān)的GUI顯示和相關(guān)的用戶操作記錄為所述基于文本的日志記錄。
4.一種用于提供對于在第一機(jī)器上運行的客戶端軟件應(yīng)用的支持的裝置,所述裝置包括用于存儲程序的存儲器;以及用于執(zhí)行該程序的處理器,所述程序包括用于在第一機(jī)器處將圖形用戶界面顯示和相關(guān)的用戶操作記錄為基于文本的日志記錄的代碼;用于在第二機(jī)器處根據(jù)涉及所述客戶端軟件應(yīng)用在所述第一機(jī)器上的運行的支持請求而調(diào)用支持服務(wù)的代碼;用于將所記錄的日志文本記錄發(fā)送至第二機(jī)器的代碼;以及用于在第二機(jī)器處根據(jù)所記錄的日志文本記錄模擬所述圖形用戶界面顯示和相關(guān)的用戶操作的代碼;其中所述支持是根據(jù)所述模擬而提供的。
5.一種用于提供對于在第一機(jī)器上運行的客戶端軟件應(yīng)用的支持的裝置,所述裝置包括用于在第一機(jī)器處將圖形用戶界面顯示和相關(guān)的用戶操作記錄為基于文本的日志記錄的裝置;用于在第二機(jī)器處根據(jù)涉及所述客戶端軟件應(yīng)用在所述第一機(jī)器上的運行的支持請求而調(diào)用支持服務(wù)的裝置;用于將所記錄的日志文本記錄發(fā)送至第二機(jī)器的裝置;以及用于在第二機(jī)器處根據(jù)所記錄的日志文本記錄模擬所述圖形用戶界面顯示和相關(guān)的用戶操作的裝置;其中所述支持是根據(jù)所述模擬而提供的。
全文摘要
本發(fā)明公開了GUI日志文本記錄布置(稱為GLTR布置),其使支持服務(wù)提供者(SSP)機(jī)(101)與客戶機(jī)(108)之間的問題診斷過程變得容易。關(guān)于客戶端應(yīng)用,在客戶機(jī)(108)上以GUI日志文本記錄的形式記錄圖形用戶界面(GUI)屏幕及其相關(guān)的用戶操作。SSP機(jī)(101)根據(jù)從客戶機(jī)(108)傳送來的所記錄的GUI日志文本記錄,再現(xiàn)應(yīng)用GUI屏幕和用戶操作。對于SSP機(jī)(101),提供用于瀏覽歷史的應(yīng)用GUI屏幕及其相關(guān)的用戶操作的手段。該GLTR系統(tǒng)還提供用于對客戶端應(yīng)用遠(yuǎn)程地進(jìn)行操作以進(jìn)一步澄清問題和/或采取用于克服該問題的補救操作的手段。
文檔編號H04L29/08GK1976352SQ20061014673
公開日2007年6月6日 申請日期2006年11月16日 優(yōu)先權(quán)日2005年11月29日
發(fā)明者V·S·森加爾 申請人:國際商業(yè)機(jī)器公司