在此描述的技術(shù)總體上涉及對計算系統(tǒng)應用的記錄和重放。
背景技術(shù):
可以期望的是構(gòu)建用于應用分析、調(diào)試、調(diào)諧等的計算系統(tǒng)應用的自動且可重復的測試情況或工作負載。這對于復雜應用可能是至關重要的,如例如網(wǎng)絡應用(通過互聯(lián)網(wǎng)訪問的應用)和運行時間,尤其是根據(jù)高級且快速演進HTML 5和開放網(wǎng)絡平臺技術(shù)。針對這類復雜應用,記錄應用流程并且確切地重復在記錄階段過程中所捕獲的東西可能是一種挑戰(zhàn)。再現(xiàn)性和可靠性可能受到應用的各種非確定性特性的顯著影響,這可能導致不一致或者甚至完全錯誤的重放行為。
目前的記錄和重放解決方案采用基于時間的記錄和重放,其中可以使用相似的定時(例如,基于記錄的時間戳)來捕獲和重復對應用的輸入以便重新創(chuàng)建應用流程。在重放過程中,使用那些輸入的記錄定時來模擬記錄的輸入。這種解決方案的缺陷是:一些應用(例如,網(wǎng)絡應用)的隨機性在重放階段中就“時間”而言可能會產(chǎn)生顯著變化,這可能意外地改變了所期望的行為。例如,在重放過程中,所需資源的加載可以比其在記錄過程中更慢,這可能導致錯誤或非預期結(jié)果(如果與輸入(例如,用戶動作)相關的進一步模擬仍然根據(jù)記錄時間發(fā)生)。在另一示例中,如果未對回調(diào)的順序進行限定或同步和/或而且如果運行時間是多線程的,則可以在重放中以不同的次序調(diào)用所述回調(diào)(例如,定時器、動畫等)。在又另一示例中,如果在記錄階段過程中用于記錄時間戳的定時器不準確,則這種不準確性可能在重放中被傳播從而產(chǎn)生完全非預期的應用流程。試圖避免這些問題的當前解決方案是基于時間的并且可能并不完全可靠。
附圖說明
圖1是根據(jù)實施例的示例應用的框圖。
圖2是根據(jù)實施例的記錄階段和重放階段的示例事件順序的框圖。
圖3是描繪根據(jù)實施例的一種事件記錄和重放方法的示例流程圖。
圖4是根據(jù)實施例的示例計算設備的框圖。
在附圖中,參考號最左邊的(多個)數(shù)字可以標識該參考號首次出現(xiàn)的附圖。
具體實施方式
在此描述的實施例中,可以以可靠且確定性的方式來記錄并重放應用事件。借助于這種技術(shù),可以以基于功能調(diào)用事件的方式來記錄應用的非確定性行為并且在重放過程中對其進行管理以便以與記錄時完全相同的方式來表現(xiàn)。由于消除了潛在隨機性,重放在本質(zhì)上可以是確定性的且可重復的。
如上所述,目前使用的記錄和重放技術(shù)采用基于時間的記錄和重放,其中可以使用相似的定時(例如,基于記錄的時間戳)來捕獲和重復對應用的輸入以便重新創(chuàng)建應用流程。在重放過程中,使用那些輸入的記錄定時來模擬記錄的輸入。然而,借助于這些基于時間的技術(shù),一些應用的隨機性在重放階段中就“時間”而言可能會產(chǎn)生顯著變化,這可能意外地改變了所期望的行為。圖1是示例應用的框圖,在其中以簡化的方式展示了此問題。在圖1中,記錄的游戲正在以模擬方式被重放。在屏幕截圖102中,玩家104正在計劃跳躍到平臺106上。換言之,跳躍事件將要被調(diào)度。如果使用基于時間的記錄技術(shù)來記錄游戲,則所記錄的時間戳可能需要幾乎準確地(如果不準確)是它們在最初玩過的游戲中那樣以便使得玩家104能夠成功跳躍到如屏幕截圖108所示的平臺106上。如屏幕截圖110所示,如果時間戳甚至是僅僅稍微偏移,相反玩家104則可能落到地上。在重放時,非常小的變化可能使得應用表現(xiàn)的非常不同于預期,這可能致使所重放的模擬無法實現(xiàn)其目的。
在此描述的實施例中,所使用的記錄和重放技術(shù)不像先前的解決方案中那樣是基于時間的。相反,應用軌跡(即記錄)是基于事件的,基于功能調(diào)用。功能可以被記錄到軌跡中,即使所述功能可以以非確定性順序被調(diào)用或者即使它們可以產(chǎn)生非確定性結(jié)果。可以以非確定性順序被調(diào)用的功能的示例可以包括但不限于:回調(diào)(例如,動畫回調(diào))、網(wǎng)絡下載、多線程網(wǎng)絡工作者等。在此類型的記錄功能的重放過程中,功能以與記錄相同的順序被重放??梢援a(chǎn)生非確定性結(jié)果的功能的示例可以包括例如但不限于:應用編程接口(API)(例如,JavaScript API,諸如Math.random()、Date.now()等)。在此類型的記錄功能的重放過程中,相同的輸出如被記錄那樣被生成。以此方式記錄的應用是可靠可重復的,因為對應用的外部輸入可以被固定從而使得輸出相同。
正在運行的應用涉及多個事件,包括但不限于用戶輸入、定時事件、網(wǎng)絡事件(例如,如果游戲具有多個玩家)等。每一個事件可以由相應的事件處置器功能來處置。事件可以以非確定性順序發(fā)生和/或可以返回非確定性結(jié)果。在記錄過程中,可以根據(jù)事件的順序來記錄對每個頂層功能的調(diào)用,這可以形成功能執(zhí)行次序。根據(jù)實施例,這在圖2中進行了演示。在圖2的記錄階段220中,主邏輯功能222(A1)被記錄,并且接下來按順序是記錄用戶輸入224(B1)、網(wǎng)絡事件226(D1)、主邏輯功能228(A2)、以及定時事件230(C1)。因此,記錄的應用在總體順序232上包括“A1B1D1A2C1”。與每個功能相關聯(lián)的數(shù)據(jù)(包括例如功能參數(shù)和返回值(例如,API的返回值))還可以與功能一起被記錄。在記錄之后,這導致在相關的執(zhí)行數(shù)據(jù)上下文的情況下完成對功能調(diào)用順序的追蹤,在這種情況下,可以完全確定在重放時原始執(zhí)行的應用的邏輯行為。
在圖2的重放階段234中,可以根據(jù)在記錄階段220的過程中所記錄的蹤跡來管理功能A1、B1、D1、A2和C1的執(zhí)行流程和調(diào)度??梢詫玫闹胤胚M行管理以便以無事件方式運行,從而使得應用執(zhí)行將不受非確定性事件處置器的影響。各種事件在自動重放過程中將不存在(例如,用戶輸入)、或者將被抑制。將被抑制的事件(例如,定時事件、網(wǎng)絡事件等)可以被攔截并且被旁路。在沒有任何未管理的事件插入到應用流程中的情況下,總體的功能執(zhí)行順序可以由主邏輯以受控方式來確定。這些非主邏輯事件(例如,用戶輸入事件、定時事件、網(wǎng)絡事件等)可以被包封到其前面的主邏輯事件中以便根據(jù)記錄的功能執(zhí)行順序包含事件處置器。在圖2所示的示例中,主邏輯功能A1被包封到事件塊236(“A1B1D1”)中,并且主邏輯功能A2被包封到事件塊238(“A2C1”)中。結(jié)果,在重放階段234中,總體的功能執(zhí)行次序240仍然是“A1B1D1A2C1”??梢栽谥胤胚^程中進行提供并對齊所記錄的功能參數(shù)和返回值,從而使得每個功能將以與在記錄階段220中相同的數(shù)據(jù)上下文中被執(zhí)行。在相同的功能調(diào)用順序處于相同的數(shù)據(jù)上下文的情況下,可以利用與在記錄階段完全相同的邏輯和確定性行為來嚴格重放應用。
在實施例中,可能存在用于在軟件棧的不同層進行記錄和重放的多種可能的實現(xiàn)方式。例如,在此描述的技術(shù)可以在以下各項中的一項或多項中實現(xiàn):腳本引擎(例如,JavaScript引擎)、應用層(例如,JavaScript)、瀏覽引擎(例如,作為擴展件)、操作系統(tǒng)等。這些示例僅是出于展示的目的,并不旨在是限制性的。
作為示例,可以寫入工具(例如,在JavaScript中)以便記錄和重放各種應用(例如,網(wǎng)絡應用)。應用的流程可以由各種功能來驅(qū)動,所述各種功能可以由工具(例如,動畫回調(diào)、超時回調(diào)、用戶事件處置器等)來追蹤。所述工具可以處置作為主應用邏輯的動畫回調(diào)的執(zhí)行,因為在需要屏幕噴畫時動畫回調(diào)是由例如瀏覽器來調(diào)用。以此方式,可以維持應用的渲染性質(zhì)。超時回調(diào)和用戶事件處置器可以被視為將由工具根據(jù)記錄軌跡自動調(diào)用的事件。所述工具可以攔截并包封內(nèi)置功能(例如,內(nèi)置JavaScript功能(如果在JavaScript中寫入所述工具),并且可以利用腳本語言的動態(tài)特性。
圖3是描繪根據(jù)實施例的一種事件記錄和重放方法300的示例流程圖。在302處,可以執(zhí)行應用的應用邏輯。在304處,可以基于與關聯(lián)于所述應用的事件相關聯(lián)的功能調(diào)用來記錄所述事件。事件的記錄可以包括根據(jù)所述事件的順序來記錄頂層事件,并且可以包括記錄與所述記錄的事件相關聯(lián)的數(shù)據(jù),諸如例如所使用的功能參數(shù)以及返回值。在306處,可以將記錄的事件存儲在存儲器中以備將來回放。在308處,可以使用與記錄的事件相關聯(lián)的記錄數(shù)據(jù)來按順序重放記錄的事件,同時抑制在重放過程中可能嘗試執(zhí)行的未記錄事件。
在此公開的一個或多個特征可以在硬件、軟件、固件及其組合中實現(xiàn),包括離散和集成電路邏輯、專用集成電路(ASIC)邏輯、以及微控制器,并且可以被實現(xiàn)為特定域的集成電路封裝體的一部分或多個集成電路封裝體的組合。如在此使用的,術(shù)語軟件和固件指代計算機程序產(chǎn)品,所述計算機程序產(chǎn)品包括其中存儲有計算機程序邏輯(諸如計算機可執(zhí)行指令)的至少一個計算機可讀介質(zhì),用以使得計算機系統(tǒng)執(zhí)行在此公開的一個或多個特征和/或特征的組合。計算機可讀介質(zhì)可以是瞬態(tài)的或非瞬態(tài)的。瞬態(tài)計算機可讀介質(zhì)的示例可以是通過局域網(wǎng)或廣域網(wǎng)、或者通過諸如因特網(wǎng)的網(wǎng)絡在無線電頻率或在電導體上傳輸?shù)臄?shù)字信號。非瞬態(tài)計算機可讀介質(zhì)的示例可以是致密盤、閃存、SRAM、DRAM、硬盤驅(qū)動器、固態(tài)驅(qū)動器、或其他數(shù)據(jù)存儲設備。
如上所述,在實施例中,在此描述的處理中的一些或全部可以被實現(xiàn)為硬件、軟件、和/或固件。這類實施例可以在如圖4中示出的示例計算系統(tǒng)450的背景下來展示。計算系統(tǒng)450可以包括由鏈路458或相似機制連接至存儲器454和一個或多個輔助存儲設備456的一個或多個處理器452。(多個)處理器452可以包括用于實施在此描述的方法的一個或多個邏輯單元。本領域的普通技術(shù)人員將認識到,所述邏輯單元的功能可以由單個邏輯單元、或任何數(shù)量的邏輯單元來執(zhí)行。計算系統(tǒng)450可以可選地包括(多個)通信接口460和/或用戶接口部件462。所述(多個)通信接口460可以在硬件或硬件與軟件的組合中實現(xiàn),并且可以向網(wǎng)絡提供有線或無線網(wǎng)絡接口。所述用戶接口部件462可以包括例如觸摸屏、顯示器、一個或多個用戶輸入部件(例如,鍵盤、鼠標等)、揚聲器等、或其任意組合。經(jīng)由在此描述的方法所處理的數(shù)據(jù)和/或圖形可以顯示在一個或多個用戶接口部件上。所述一個或多個輔助存儲設備456可以是例如一個或多個硬盤驅(qū)動器等,并且可以存儲由(多個)處理器452執(zhí)行的邏輯464(例如,應用邏輯)。在實施例中,(多個)處理器452可以是微處理器,并且邏輯464可以存儲或加載至存儲器454中以用于由(多個)處理器452執(zhí)行從而提供在此描述的功能。根據(jù)在此描述的實施例,記錄的事件和相關聯(lián)數(shù)據(jù)也可以存儲在存儲器454中。注意,雖然未示出,但計算系統(tǒng)450可以包括附加部件。
在此公開的技術(shù)允許以可靠且確定性的方式來記錄并重放應用事件??梢砸曰诠δ苷{(diào)用事件的方式來記錄應用的非確定性行為并且在重放過程中對其進行管理以便以與記錄時完全相同的方式來表現(xiàn)。由于消除了潛在隨機性,重放在本質(zhì)上可以是確定性的且可重復的。如上所述,將可靠且確定性的記錄和重放技術(shù)用于工作負載、基準和測試情況對于應用分析、調(diào)試和調(diào)諧而言是至關重要的。在此描述的技術(shù)對于高級網(wǎng)絡應用特別有用,所述高級網(wǎng)絡應用可以包含豐富的動畫和用戶交互(例如,網(wǎng)絡工作者、基于網(wǎng)絡的游戲(例如,切片游戲、射擊游戲、賽車游戲等)、在線生產(chǎn)力工具(郵件、文檔管理系統(tǒng)等)等)。這類新興的網(wǎng)絡應用使用傳統(tǒng)的記錄和重放解決方案以一致且匹配的方式進行重放可能非常困難,因為較小的變化可能使得在重放過程中產(chǎn)生較大的行為差異。在此描述的技術(shù)避免了傳統(tǒng)解決方案的潛在問題。例如,針對一些應用,可以基于屏幕或幀變化而不是基于時間戳通過調(diào)用功能來獲得更好的重放結(jié)果,因為基于時間的技術(shù)在重放時可能導致非預期的行為。
使用在此描述的技術(shù)具有各種優(yōu)點。例如,一個優(yōu)點是:應用可以在一個平臺上被記錄并且在另一個平臺上被重放,而不失可靠的重復性。還可以設想許多其他優(yōu)點。
本文檔中所使用的具體示例和場景是為了易于理解并且不是限制性的。如本領域的普通技術(shù)人員將了解的,在此描述的特征可以用于許多其他上下文。
下面的示例涉及進一步的實施例。
示例1可以包括一種計算系統(tǒng),所述計算系統(tǒng)包括:存儲器;以及與所述存儲器通信地耦合的處理器,所述處理器用于:執(zhí)行應用的應用邏輯;基于與關聯(lián)于所述應用的事件相關聯(lián)的功能調(diào)用來記錄所述事件;以及將所述記錄的事件存儲在所述存儲器中以備將來回放。
示例2可以包括示例1的主題,其中,所述應用為網(wǎng)絡應用、游戲應用、或生產(chǎn)力應用中的一項或多項。
示例3可以包括示例1或示例2的主題,其中,所述事件包括用戶交互、定時事件、網(wǎng)絡下載、回調(diào)、或網(wǎng)絡工作者任務中的一項或多項。
示例4可以包括示例1至示例3中任一項的主題,其中,對所述事件的所述記錄包括;根據(jù)所述事件的順序記錄每個事件的頂層功能,并且記錄包括功能參數(shù)或返回值中的一項或多項的相關聯(lián)數(shù)據(jù)。
示例5可以包括示例4的主題,其中,所述處理器進一步用于使用所述記錄的相關聯(lián)數(shù)據(jù)按順序重放所述記錄的事件,同時抑制未記錄的事件。
示例6可以包括示例5的主題,其中,所述記錄和所述重放是在軟件棧的一個或多個不同層進行的。
示例7可以包括示例1至示例6中任一項的主題,其中,對所述事件的所述記錄包括將非主邏輯事件包封到其前面的主邏輯事件中。
在示例8中,示例1至示例7中的任一項可以可選地包括:與所述處理器和網(wǎng)絡通信地耦合的通信接口;包括導航設備和顯示器的用戶接口,所述用戶接口與所述處理器通信地耦合;以及存儲所述應用邏輯的存儲裝置,所述存儲裝置與所述處理器通信地耦合,其中,所述處理器用于加載和執(zhí)行所述應用邏輯,其中,所述應用邏輯的所述執(zhí)行包括經(jīng)由所述用戶接口呈現(xiàn)所述應用。
示例9可以包括至少一種計算機程序產(chǎn)品,所述計算機程序產(chǎn)品包括其中存儲有計算機程序邏輯的至少一個計算機可讀介質(zhì),所述計算機程序邏輯包括使處理器執(zhí)行以下各項的邏輯:執(zhí)行應用的應用邏輯;基于與關聯(lián)于所述應用的事件相關聯(lián)的功能調(diào)用來記錄所述事件;以及將所述記錄的事件存儲在存儲器中以備將來回放。
示例10可以包括示例9的主題,其中,對所述事件的所述記錄包括:根據(jù)所述事件的順序記錄每個事件的頂層功能,并且記錄包括功能參數(shù)或返回值中的一項或多項的相關聯(lián)數(shù)據(jù)。
示例11可以包括示例10的主題,其中,所述計算機程序邏輯進一步包括用于使所述處理器執(zhí)行以下各項的邏輯:使用所述記錄的相關聯(lián)數(shù)據(jù)按順序重放所述記錄的事件、同時抑制未記錄的事件。
示例12可以包括示例11的主題,其中,所述記錄和所述重放是在軟件棧的一個或多個不同層進行的。
示例13可以包括示例9至示例12中任一項的主題,其中,對所述事件的所述記錄包括將非主邏輯事件包封到其前面的主邏輯事件中。
示例14可以包括一種計算裝置,所述計算裝置包括:用于執(zhí)行應用的應用邏輯的裝置;用于基于與關聯(lián)于所述應用的事件相關聯(lián)的功能調(diào)用來記錄所述事件的裝置;以及用于將所述記錄的事件存儲在存儲器中以備將來回放的裝置。
示例15可以包括示例14的主題,其中,用于對所述事件記錄的所述裝置包括:用于根據(jù)所述事件的順序記錄每個事件的頂層功能、并且用于記錄包括功能參數(shù)或返回值中的一項或多項的相關聯(lián)數(shù)據(jù)的裝置。
在示例16中,示例15可以可選地包括:用于使用所述記錄的相關聯(lián)數(shù)據(jù)按順序重放所述記錄的事件、同時抑制未記錄的事件的裝置。
示例17可以包括示例16的主題,其中,所述記錄和所述重放是在軟件棧的一個或多個不同層進行的。
示例18可以包括示例14至示例17中任一項的主題,其中,用于記錄所述事件的所述裝置包括:用于將非主邏輯事件包封到其前面的主邏輯事件中的裝置。
示例19可以包括一種應用處理的方法,所述方法包括:處理器執(zhí)行應用的應用邏輯;所述處理器基于與關聯(lián)于所述應用的事件相關聯(lián)的功能調(diào)用來記錄所述事件;以及所述處理器將所述記錄的事件存儲在存儲器中以備將來回放。
示例20可以包括示例19的主題,其中,對所述事件的所述記錄包括:根據(jù)所述事件的順序記錄每個事件的頂層功能,并且記錄包括功能參數(shù)或返回值中的一項或多項的相關聯(lián)數(shù)據(jù)。
在示例21中,示例20可以可選地包括:使用所述記錄的相關聯(lián)數(shù)據(jù)按順序重放所述記錄的事件、同時抑制未記錄的事件。
示例22可以包括示例21的主題,其中,所述記錄和所述重放是在軟件棧的一個或多個不同層進行的。
示例23可以包括示例19至示例22中任一項的主題,其中,對所述事件的所述記錄包括將非主邏輯事件包封到其前面的主邏輯事件中。
示例24可以包括至少一種機器可讀介質(zhì),所述機器可讀介質(zhì)包括多條指令,所述指令響應于在計算設備上被執(zhí)行而使得所述計算設備執(zhí)行根據(jù)示例19至示例23中任一項所述的方法。
示例25可以包括一種用于執(zhí)行示例19至示例23中任一項所述的方法的裝置。
示例26可以包括一種用于執(zhí)行示例19至示例23中任一項所述的方法的計算機系統(tǒng)。
示例27可以包括一種用于執(zhí)行示例19至示例23中任一項所述的方法的機器。
示例28可以包括一種裝置,所述裝置包括用于執(zhí)行示例19至示例23中任一項所述的方法的裝置。
示例29可以包括一種計算設備,所述計算設備包括用于執(zhí)行示例19至示例23中任一項所述的方法的存儲器和芯片組。
方法和系統(tǒng)在此借助于展示其功能、特征、和關系的功能構(gòu)建塊來公開。為了方便描述,在此已經(jīng)任意定義了這些功能構(gòu)建塊的邊界中的至少一些。可以限定可替換的界限,只要其特定的功能和關系被適當執(zhí)行即可。
雖然在此公開了各種實施例,但應當理解的是,它們僅是以舉例的方式呈現(xiàn),而非限制性的。對相關領域技術(shù)人員而言將明顯的是,在不脫離在此公開的方法和系統(tǒng)的范圍的情況下,可以在其中對形式和細節(jié)做出各種變化。因此,權(quán)利要求書的寬度和范圍不應由在此公開的示例性實施例中的任何一個來限制。
如在本申請和權(quán)利要求書中所使用的,由術(shù)語“中的一項或多項”接合的一系列項目可意指所列術(shù)語的任何組合。例如,短語“A、B或C中的一項或多項”和“A、B和C中的一項或多項”可意指A;B;C;A和B;A和C;B和C;或A、B和C。