專利名稱:跨動態(tài)邊界的運行時分析的可視化的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及創(chuàng)建軟件的構(gòu)架圖的技術(shù)。
背景技術(shù):
軟件所提供的功能變得越來越復(fù)雜。架構(gòu)圖(architectural diagram)被用于提供對于軟件功能和/或結(jié)構(gòu)的概觀。有多種類型的用于軟件的架構(gòu)圖。在這些架構(gòu)圖之中一般有一些對于軟件組件的可視化呈現(xiàn),和組件之間關(guān)系的一些可視化。統(tǒng)一建模語言 (UML)是一種標準化的建模語言,且包括一組創(chuàng)建軟件密集系統(tǒng)的可視化的圖形標記技術(shù)。 所述UML界定多個不同類型的架構(gòu)圖。從歷史看,架構(gòu)圖最初曾經(jīng)被人工構(gòu)建,其中作者繪出圖來強調(diào)該軟件的設(shè)計或需求。最近,使用了架構(gòu)圖的自動生成。這樣的自動系統(tǒng)實現(xiàn)對源代碼、中間代碼和/或二進制碼的靜態(tài)代碼分析。所述系統(tǒng)可以從靜態(tài)代碼分析得出信息,從該信息中可以得出代碼的靜態(tài)模型,所述靜態(tài)模型表示了各軟件的組件及其關(guān)系。從那個靜態(tài)模型中,可以自動構(gòu)建架構(gòu)圖。
發(fā)明內(nèi)容
此處描述的至少一個實施例與帶有多個組件的軟件程序的架構(gòu)圖的建立 (formulatoin)有關(guān)。標識組件中的至少一些以及組件之間關(guān)系的靜態(tài)模型被訪問。比如, 軟件程序的代碼的靜態(tài)代碼分析可以展示出組件的標識和與組件間的關(guān)系相關(guān)的信息。還可以通過執(zhí)行軟件程序并觀察所述執(zhí)行來得出所述軟件程序的動態(tài)行為,從而實現(xiàn)動態(tài)分析。這些動態(tài)行為可能并不能從靜態(tài)模型中容易地理解。然后使用所述靜態(tài)模型和動態(tài)行為來建立架構(gòu)圖以生成所述計算程序的更完整的表示。所述架構(gòu)圖可能可以被顯示在顯示器上用于人工解釋。本發(fā)明內(nèi)容并非旨在標識所要求保護的主題的關(guān)鍵特征或必要特征,也不旨在用于幫助確定所要求保護的主題的范圍。附圖簡述為了描述可以獲得上面所列舉的及其他優(yōu)點和特征的方式,下面將參考附圖來呈現(xiàn)對各實施例的更具體的描述??梢岳斫?,這些附圖只描繪了樣本實施例,并且因此不被認為是對其范圍的限制,將通過使用附圖并利用附加屬性和細節(jié)來描述和解釋各實施例,在附圖中
圖1示出了可用于采用此處所描述的實施例的示例計算系統(tǒng);圖2示出了可在其中實現(xiàn)計算機程序分析的環(huán)境;圖3示出了用于建立架構(gòu)圖的方法的流程圖;圖4示出了僅由從靜態(tài)代碼分析得到的信息來構(gòu)建的序列圖。圖5修改了圖4以包括從動態(tài)分析中得到的附加動態(tài)行為的表示,該動態(tài)行為的形式為在計算機程序的實際執(zhí)行期間所遍歷的執(zhí)行路徑的標識。
圖6修改了圖5以附加地表示與在計算機程序執(zhí)行期間組件之間交換的參數(shù)的實際值相關(guān)的動態(tài)行為。圖7修改圖5以進一步表示動態(tài)行為,該動態(tài)行為的形式為計算機程序執(zhí)行期間所調(diào)用,但并非由計算機程序自身所定義的附加組件;圖8是用于描述定界試探方法(scoping heuristics method)的序列圖;圖9是用于描述先行估計的試探方法的序列具體實施例方式根據(jù)此處描述的實施例,描述了含有多個組件的軟件程序的架構(gòu)圖的建立。通過可能是執(zhí)行所述軟件程序的靜態(tài)代碼分析來訪問標識至少一些組件以及組件間關(guān)系的靜態(tài)模型。還可以通過執(zhí)行軟件程序并觀察所述執(zhí)行來得出所述軟件程序的動態(tài)行為,從而實現(xiàn)動態(tài)分析。這些動態(tài)行為可能或許不能從單獨的靜態(tài)模型中容易地理解,諸如交換的參數(shù)值、執(zhí)行的路徑和被調(diào)用的額外組件。然后使用所述靜態(tài)模型和動態(tài)行為來建立架構(gòu)圖以生成所述計算程序的更完整的表示。所描述的實施例在所有方面都應(yīng)被認為僅是說明性而非限制性的。從而,本發(fā)明的范圍由所附權(quán)利要求書而非前述描述指示。落入權(quán)利要求書的等效方案的含義和范圍內(nèi)的所有改變都被權(quán)利要求書的范圍所涵蓋。首先,將參考圖1來描述關(guān)于計算系統(tǒng)的某些介紹性討論。然后,參考圖2到圖9 來描述軟件程序架構(gòu)圖的建立的實施例。首先,參考圖1來描述關(guān)于計算系統(tǒng)的介紹性討論。計算系統(tǒng)現(xiàn)在越來越多地采取多種多樣的形式。計算系統(tǒng)可以例如是手持式設(shè)備、電器、膝上型計算機、臺式計算機、大型機、分布式計算系統(tǒng),或者甚至通常不被視為計算系統(tǒng)的設(shè)備。在本說明書以及權(quán)利要求書中,術(shù)語“計算系統(tǒng)”被廣義地定義為包括包含至少一個處理器以及其上能含有可由處理器執(zhí)行的計算機可執(zhí)行指令的存儲器的任何設(shè)備或系統(tǒng)(或其組合)。存儲器可以采取任何形式,并可以取決于計算系統(tǒng)的特性和形式。計算系統(tǒng)可以分布在網(wǎng)絡(luò)環(huán)境中,并可包括多個組分計算系統(tǒng)。如圖1所示,在其最基本的配置中,計算系統(tǒng)100通常包括至少一個處理單元102 和存儲器104。存儲器104可以是物理系統(tǒng)存儲器,該物理系統(tǒng)存儲器可以是易失性、非易失性、或兩者的某種組合。術(shù)語“存儲器”在此也可用來指諸如物理存儲介質(zhì)等非易失性大容量存儲。如果計算系統(tǒng)是分布式的,則處理、存儲器和/或存儲能力也可以是分布式的。 如此處所使用的那樣,術(shù)語“模塊”或“組件”可以指在計算系統(tǒng)上執(zhí)行的軟件對象或例程。 此處所描述的不同組件、模塊、引擎,以及服務(wù)可以實現(xiàn)為在計算系統(tǒng)上執(zhí)行的對象或進程 (例如,作為分開的線程)。在隨后的描述中,參考由一個或多個計算系統(tǒng)執(zhí)行的動作描述了各實施例。如果這樣的動作是以軟件實現(xiàn)的,則執(zhí)行動作的相關(guān)聯(lián)計算系統(tǒng)的一個或多個處理器響應(yīng)于已經(jīng)執(zhí)行了計算機可執(zhí)行指令來引導(dǎo)計算系統(tǒng)的操作。這樣的操作的示例涉及對數(shù)據(jù)的操縱。計算機可執(zhí)行指令(以及被操縱的數(shù)據(jù))可以存儲在計算系統(tǒng)100的存儲器104中。 計算系統(tǒng)100還可包括可用于提供諸如此處所述客戶界面之類的各種具體客戶界面的顯示器112。計算系統(tǒng)100還可包含允許計算系統(tǒng)100例如通過網(wǎng)絡(luò)110與其他消息處理器通信的通信信道108。本發(fā)明的各實施例可以包括或利用包括諸如一個或多個處理器和系統(tǒng)存儲器的計算機硬件的專用或通用計算機,這將在以下做出進一步討論。本發(fā)明范圍內(nèi)的各實施例還包括用于承載或存儲計算機可執(zhí)行指令和/或數(shù)據(jù)結(jié)構(gòu)的物理和其他計算機可讀介質(zhì)。 這樣的計算機可讀介質(zhì)可以是可由通用或?qū)S糜嬎銠C系統(tǒng)訪問的任何可用介質(zhì)。存儲計算機可執(zhí)行指令的計算機可讀介質(zhì)是物理存儲介質(zhì)。承載計算機可執(zhí)行指令的計算機可讀介質(zhì)是傳輸介質(zhì)。由此,作為示例而非限制,本發(fā)明的各實施例可包括至少兩種完全不同的計算機可讀介質(zhì)計算機存儲介質(zhì)和傳輸介質(zhì)。計算機存儲介質(zhì)包括RAM、ROM、EEPROM、CD-ROM或其他光盤存儲、磁盤存儲或其他磁存儲設(shè)備、或可用于存儲計算機可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的所需程序代碼裝置且可由通用或?qū)S糜嬎銠C訪問的任何其他介質(zhì)。“網(wǎng)絡(luò)”被定義為允許在計算機系統(tǒng)和/或模塊和/或其他電子設(shè)備之間傳輸電子數(shù)據(jù)的一個或多個數(shù)據(jù)鏈路。當信息通過網(wǎng)絡(luò)或另一通信連接(硬連線、無線、或硬連線或無線的組合)傳輸或提供給計算機時,該計算機將該連接適當?shù)匾暈閭鬏斀橘|(zhì)。傳輸介質(zhì)可包括可用于承載計算機可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的所需程序代碼裝置并可由通用或?qū)S糜嬎銠C訪問的網(wǎng)絡(luò)和/或數(shù)據(jù)鏈路。上述的組合也應(yīng)被包括在計算機可讀介質(zhì)的范圍內(nèi)。此外,在到達各種計算機系統(tǒng)組件之后,計算機可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的程序代碼裝置可從傳輸介質(zhì)自動轉(zhuǎn)移到計算機存儲介質(zhì)(或者相反)。例如,通過網(wǎng)絡(luò)或數(shù)據(jù)鏈路接收到的計算機可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)可被緩存在網(wǎng)絡(luò)接口模塊(例如,“NIC”)內(nèi)的RAM中,然后最終被傳送到計算機系統(tǒng)RAM和/或計算機系統(tǒng)處的較不易失性的計算機存儲介質(zhì)。由此,應(yīng)當理解,計算機存儲介質(zhì)可被包括在同樣(或甚至主要)利用傳輸介質(zhì)的計算機系統(tǒng)組件中。計算機可執(zhí)行指令例如包括,當在處理器處執(zhí)行時使通用計算機、專用計算機、或?qū)S锰幚碓O(shè)備執(zhí)行某一功能或某組功能的指令和數(shù)據(jù)。計算機可執(zhí)行指令可以是例如二進制代碼、諸如匯編語言等中間格式指令、或甚至源代碼。盡管用結(jié)構(gòu)特征和/或方法動作專用的語言描述了本主題,但可以理解的是,所附權(quán)利要求書中定義的主題不必限于上述特征或動作。相反,上述特征和動作是作為實現(xiàn)權(quán)利要求的示例形式而公開的。本領(lǐng)域的技術(shù)人員將理解,本發(fā)明可以在具有許多類型的計算機系統(tǒng)配置的網(wǎng)絡(luò)計算環(huán)境中實踐,這些計算機系統(tǒng)配置包括個人計算機、臺式計算機、膝上型計算機、消息處理器、手持式設(shè)備、多處理器系統(tǒng)、基于微處理器的或可編程消費電子設(shè)備、網(wǎng)絡(luò)PC、小型計算機、大型計算機、移動電話、PDA、尋呼機、路由器、交換機等等。本發(fā)明也可以在其中通過網(wǎng)絡(luò)鏈接(或者通過硬連線數(shù)據(jù)鏈路、無線數(shù)據(jù)鏈路,或者通過硬連線和無線數(shù)據(jù)鏈路的組合)的本地和遠程計算機系統(tǒng)兩者都執(zhí)行任務(wù)的分布式系統(tǒng)環(huán)境中實踐。在分布式系統(tǒng)環(huán)境中,程序模塊可以位于本地和遠程存儲器存儲設(shè)備中。圖2示出了可在其中實現(xiàn)計算機程序201的分析的環(huán)境200。所述計算機程序201 可以自動地使用靜態(tài)代碼分析210或動態(tài)分析220而被分析。在靜態(tài)代碼分析210中,檢驗?zāi)K211檢驗計算機程序的源代碼、中間代碼和/或二進制代碼。從靜態(tài)代碼分析可以確定代碼的靜態(tài)模型。作為示例,軟件程序201的多個組件可以與這些組件之間的多個關(guān)系一起被標識出來。比如,在圖2中,探測模塊211標識組件212A,212B和212C及其相應(yīng)關(guān)系213A,21!3B和213C。靜態(tài)代碼分析可以用于建立計算機程序的靜態(tài)模型而不論在所述計算機程序中的組件數(shù)量。靜態(tài)代碼分析在現(xiàn)有技術(shù)中是已知的。 在動態(tài)分析220中,計算機程序201實際上使用執(zhí)行模塊221 (如,計算機處理器) 而被執(zhí)行。在本詳細描述和在權(quán)利要求中,在動態(tài)分析的上下文中代碼被“執(zhí)行”還包括代碼被模擬,在此情況下代碼是在模擬器上,而不是在真實的機器上運行。由此,所述計算機程序的動態(tài)行為222可以由觀察模塊223觀察到,從而藉此生成有關(guān)計算機程序201的附加動態(tài)信息224。靜態(tài)代碼分析210和動態(tài)分析220可以由計算機可執(zhí)行指令指導(dǎo)的計算系統(tǒng)來實現(xiàn),所述計算機可執(zhí)行指令存在于一個或多個計算機可讀介質(zhì)上。這樣的計算機可讀介質(zhì)可以形成計算機程序產(chǎn)品。圖3示出了用于建立架構(gòu)圖的方法的流程圖;方法300可以使用圖2的環(huán)境200 來執(zhí)行。相應(yīng)的,圖3在此將會頻繁參看圖2來描述。方法300包括對計算機程序的一組組件的標識和該一組組件之間關(guān)系的的訪問 (動作301)。通過這樣作,方法300訪問所述軟件程序的靜態(tài)模型。這個靜態(tài)模型可以從所述軟件程序的狀態(tài)分析(動作311)(諸如靜態(tài)代碼分析210)的結(jié)果中得到。另選地或附加地,所述標識可以是手動產(chǎn)生的標識(動作31 。例如,編程者可以分析與計算機程序相關(guān)的代碼和/或文檔,借此標識軟件程序中的至少一些組件和組件之間的關(guān)系。另外,執(zhí)行所述軟件程序的動態(tài)分析(動作30 。所述動態(tài)分析(動作30 被示為與得到組件標識的動作(動作301)相平行,以強調(diào)本方法的實施例并不限于一個動作在另一個動作之后發(fā)生的實施例。動態(tài)分析標識所述軟件程序的動態(tài)行為。動態(tài)行為可能不是從靜態(tài)代碼分析中可得到的信息,或者可能是單從靜態(tài)代碼中很難以得到的信息。然后建立架構(gòu)圖(動作303),該架構(gòu)圖結(jié)合靜態(tài)模型和動態(tài)行為(動作303)。然后,架構(gòu)圖可以被顯示(動作304)。如之前所提到的,根據(jù)此處描述的原理,此處并沒有對所生成的架構(gòu)圖的類型作出限制。示例包括序列圖和依賴圖。動態(tài)行為的示例將會在下文中結(jié)合圖4到圖7而提供,其中所述架構(gòu)圖為序列圖。 圖4示出了由僅從靜態(tài)代碼分析得到的信息而構(gòu)建的序列圖。因此,圖4僅表示了代碼的靜態(tài)模型。圖5到圖7示出將通過所述代碼的動態(tài)分析得到的動態(tài)行為加到所述靜態(tài)模型上的序列圖。例如,圖5修改了圖4以包括動態(tài)行為,該動態(tài)行為的形式為在所述計算機程序的實際執(zhí)行期間遍歷的執(zhí)行路徑的標識。圖6修改了圖5以附加地包括與在計算機程序的執(zhí)行期間組件之間交換的參數(shù)的實際值相關(guān)的動態(tài)行為。圖7修改圖5以進一步標識動態(tài)行為,其形式為在計算機程序的執(zhí)行期間被調(diào)用,但并非由計算機程序自身所定義的附加組件。圖4到圖7中的每一個僅是使用此處描述的原理而生成的架構(gòu)圖的示例。使用此處描述的原理可以構(gòu)建任何類型的架構(gòu)圖。圖4示出序列圖400,其表示可僅基于靜態(tài)代碼分析而生成的示例序列圖。靜態(tài)代碼分析標識出四個程序組件401、402、403和404。靜態(tài)代碼分析還標識出這些組件之間的關(guān)系。在一個序列圖中,那些關(guān)系是函數(shù)調(diào)用和返回。在圖4中,靜態(tài)代碼分析顯示出程序401發(fā)出調(diào)用“創(chuàng)建訂單處理器(CreateOrderProcessor) ”,其導(dǎo)致訂單處理器(OrderProcessor) 402的產(chǎn)生。訂單處理器 402執(zhí)行其處理然后返回。然后,程序401發(fā)出調(diào)用“下訂單(PlaceOrder)”給訂單處理器402。然后,訂單處理器402發(fā)出“購買(Purchase) ”調(diào)用到客戶訂單(CustomerOrder)403中,然后客戶訂單403返回。可以如“如果(If) ”框411所表示的那樣實現(xiàn)一些條件邏輯?!叭绻笨?11中流程執(zhí)行的條件是購買(Purchase)調(diào)用是否成功地返回。如果成功了,則訂單處理器402發(fā)出創(chuàng)建訂單結(jié)果(Create OrderResult)調(diào)用,藉此導(dǎo)致訂單結(jié)果(orderResult)404的產(chǎn)生,訂單結(jié)果404然后返回。然后,購買成功(PurchaseSuccess)調(diào)用由訂單處理器402發(fā)出至訂單結(jié)果404中,然后訂單結(jié)果404返回。如果所述條件沒有被滿足,則返回錯誤狀態(tài), 如“如果”框411的否則(else)部分所清晰顯示地那樣。一旦處理完成,訂單處理器402將控制返回給程序401。再次重申,序列圖400可以僅從靜態(tài)代碼分析中生成。圖5示出序列圖500,其中圖4的靜態(tài)模型由從所述計算機程序的動態(tài)分析中得到的動態(tài)行為所補充。在這個情況中,動態(tài)信息是當執(zhí)行計算機程序時使用的實際執(zhí)行路徑。 在圖5所示情況中,路徑為分支,但是執(zhí)行路徑還可以是回路。執(zhí)行路徑在圖5中使用交錯箭頭來表示。然而,顏色或其他可視化手段也可以被用于將實際執(zhí)行路徑與其他可能的執(zhí)行路徑區(qū)別開。參看圖5,實際執(zhí)行路徑由所述程序401的實例化開始。然后,創(chuàng)建訂單處理器被調(diào)用以產(chǎn)生訂單處理器402。返回后,則訂單處理器402用“購買”方法來調(diào)用客戶訂單403。 返回后,動態(tài)路徑信息說明在訂單處理器402用“創(chuàng)建訂單結(jié)果”方法調(diào)用訂單結(jié)果404, 以及訂單處理器402隨后調(diào)用“購買成功”方法此二步驟被實際執(zhí)行之后,在“如果”框411 中的特定條件應(yīng)該已經(jīng)被滿足。在被動態(tài)分析所觀察的執(zhí)行期間,“如果”框411中“否則” 部分所規(guī)定的的調(diào)用沒有被執(zhí)行。因此,可以觀察實際執(zhí)行路徑,并與計算機程序的靜態(tài)結(jié)構(gòu)合并。圖6示出序列圖600,其中圖5進一步由從所述計算機程序的動態(tài)分析中得到的附加動態(tài)行為所補充。在這個情況下,動態(tài)行為是在調(diào)用中交換的參數(shù)的實際值。具體的,函數(shù)調(diào)用601由顯示參數(shù)“訂單Id” (orderld)的值是12的可視化611來補充。圖7示出序列圖700,其中圖5進一步由從所述計算機程序的動態(tài)分析中得到的附加動態(tài)行為所補充。在這個情況下,動態(tài)行為是計算機程序的執(zhí)行期間被調(diào)用的實際外部模塊的身份,以及被標識的與這些外部模塊的交互。這些外部模塊701和702可以是由靜態(tài)代碼難以標識或不可能標識的模塊。例如,計算機程序,具體為客戶訂單模塊403可能使用客戶訂單執(zhí)行(CustomerOrderImplementation)模塊701來對信用卡收費,該模塊701 又可能使用信用卡服務(wù)模塊(CreditCardService)702來授權(quán)信用卡。本說明書現(xiàn)在將會描述靜態(tài)模型如何可與動態(tài)行為合并。此處將描述兩個寬泛的分類,有關(guān)如何使用此處描述的原理來實現(xiàn)靜態(tài)模型和動態(tài)行為的相關(guān)。第一個分類從在靜態(tài)模型和動態(tài)行為之間映射程序執(zhí)行流程的視角來解決這個問題。第二個分類從在靜態(tài)模型和動態(tài)行為之間映射對象實例(序列圖中的生命線)的視角來解決這個問題。現(xiàn)在將描述在靜態(tài)模型和動態(tài)行為之間映射程序執(zhí)行流程的第一個分類。將動態(tài)行為匹配到靜態(tài)模型上可能是非常有挑戰(zhàn)的一不論從質(zhì)(正確度)的方面還是從量(性能)的方面而言。取決于數(shù)據(jù)質(zhì)量,能使用不同的算法。此處提到的所述算法使用這樣的概念跟隨自動態(tài)行為中的事件開始通過靜態(tài)模型的執(zhí)行路徑,并將動態(tài)事件鏈接到靜態(tài)模型中的位置。如果動態(tài)事件和靜態(tài)模型已經(jīng)足夠詳細以至于可能準確地將動態(tài)事件匹配到靜態(tài)模型中的位置的話,那么僅跟隨通過靜態(tài)模型的執(zhí)行路徑并將動態(tài)事件匹配到靜態(tài)模型位置的很直接的算法就足夠了。如果靜態(tài)模型或動態(tài)事件不夠詳細的話,那么匹配動態(tài)事件到靜態(tài)模型位置可能變得不明確。這樣的不明確可能會有多種形式,諸如不能辨認哪個重載的(overloaded)方法被調(diào)用了,循環(huán)被迭代了多少次或者采用了條件的哪個分支。為解決這樣的不明確,可使用各種算法和試探法。一個這樣的算法樸素地在所述靜態(tài)模型的有限范圍內(nèi)搜索并應(yīng)用試探法來決定執(zhí)行如何通過靜態(tài)模型繼續(xù)。一旦決定作出,另一個在有限范圍內(nèi)的搜索發(fā)生,以此類推直到找出了通過所述靜態(tài)模型的完整執(zhí)行路徑。這個算法可使用用于解決不明確 (ambiguity)的更先進技術(shù),諸如使用先行估計(look ahead)以確保接下來N個事件,而不僅僅是下一個事件能匹配到靜態(tài)模型。另一個更復(fù)雜的算法將該問題構(gòu)思為類似于常規(guī)的表達匹配。靜態(tài)模型定義了從中產(chǎn)生動態(tài)行為的模式(pattern),問題是找到所述動態(tài)行為如何從所述靜態(tài)模型中產(chǎn)生的推導(dǎo)。再次重申,試探法可以被用于解決一些類型的不明確。現(xiàn)在將描述可被用在匹配算法中的六個試探法的示例。每一個可能被與另一個結(jié)合使用。1.定界(scope)將結(jié)合圖8的序列圖800而描述定界試探法的示例。一旦消息1在圖中匹配,我們知道下一個消息必定發(fā)生在圖8的虛線框部分801中。這樣大幅地減少了需要被匹配的消息組。試探法不需要知道圖中是否有另一個消息2,因為可能已經(jīng)出現(xiàn)的唯一消息2就是所顯示的那個。2.消息/方法名稱在這個示例中,出現(xiàn)的方法的名稱與圖中的消息/方法的名稱相匹配。這種簡單的字符串匹配消除了大多數(shù)的選項,在一些情況下可能返回精確匹配。然而,如果不是如此,可使用接下來的試探法示例。3.參數(shù)的數(shù)量從消息/方法名稱的試探法示例中得出的可能匹配的經(jīng)過濾列表進一步使用方法的參數(shù)的數(shù)量來過濾。例如,考慮運行時跟蹤(runtime trace)“method = Foo (Paraml, Param2),,{類型在這個示例中并不重要)?,F(xiàn)在假設(shè)對于消息/方法名稱的可能匹配的列表包括了如下四個可能的匹配:Foo(int), Foo (int, string), Foo (string, string),和 Foo (int, string, string)。將可能匹配的列表與運行時跟蹤進行比較,可能匹配的列表可被進一步過濾到只有兩個可能的匹配I7Oo (int,string),F(xiàn)oo (string, string)。這是一個重要的中間步驟,因為這能在有大量重載的示例中進一步減少數(shù)據(jù)組。4.類型
方法的調(diào)用(invocation)目標類型可被用于過濾匹配組。進一步地,參數(shù)的類型能被用于明確進一步的關(guān)系(tie)。返回類型能被用于再進一步地予以明確。5.先行估計將結(jié)合圖9的序列圖900而描述先行估計(look ahead)試探法的示例。參看圖 9,所述方法可以通過對在已經(jīng)匹配的事件之后發(fā)生的事件進行匹配來過濾可能的選項。由于有兩個消息2的發(fā)生,下一個消息被評估來看是否我們能找到匹配。如果該評估看到消息3接下來發(fā)生(如在圖9中的情況),那么該分析能推斷采用哪個路徑。可以通過基于數(shù)據(jù)量而減少先行估計的數(shù)量從而進一步優(yōu)化該方法。這個方法還能被用于明確循環(huán)和條件。6.確定在循環(huán)中放多少動態(tài)事件最大適合規(guī)則(maximal munch rule)能被用于循環(huán),所謂最大適合規(guī)則放置盡量多的動態(tài)事件到循環(huán)中。最大適合規(guī)則如下通過解析理論和工程(works)而得出。假設(shè)如下代碼被用于評估
For (int I = 0; I < 5; i++)
A();
A();進一步假設(shè)代碼遇到了來自動態(tài)數(shù)據(jù)的調(diào)用流Α,Α, Α, Α, Α, Α,…。在這個情況下,所述分析分配盡可能多的A給循環(huán),并且可能使用先行估計試探法來計算出一個A (第六個A)要被保存下來以用于循環(huán)之后的調(diào)用?;叵胗成潇o態(tài)模型到動態(tài)行為的第二個分類是在靜態(tài)模型與動態(tài)行為之間映射對象實例。一個能用于在靜態(tài)模型和動態(tài)動作之間連接對象實例的技術(shù)在此處被稱為“對象標識符相關(guān)”。當靜態(tài)模型被建立時,對象的實例被跟蹤,不論用于指代所述對象的別名 (可變名稱)是什么。在動態(tài)分析期間,對象的實例也被跟蹤。當在兩個模型中的對象標識符系統(tǒng)相關(guān)時,對象實例以及在這些實例上的操作能在靜態(tài)模型和動態(tài)行為之間被對齊。 一個這樣做的方法如下1.當建立靜態(tài)模型時,確定對象實例并分配給每個實例唯一的標識符,使用該標識符而不論用于指代所述實例的別名(alias)是什么。2.當從程序的執(zhí)行中標識動態(tài)行為時,收集容許唯一地標識對象實例的信息。例如,對于帶有不可移動的堆(heap)對象(例如,C++)的系統(tǒng),跟蹤對象實例的地址一般就足夠了。對于帶有按不同分類(gartage)收集的堆(例如,CLR)的系統(tǒng),跨分類收集地跟蹤對象實例,其中在堆空間被壓縮時,這些對象實例可能被重新放置。3.在執(zhí)行動態(tài)分析時,使用在步驟2中收集的對象標識符以保持對象實例。4.當模型被結(jié)合時,通過將在程序的執(zhí)行中的已知點處的對象標識符進行同步來相關(guān)兩個對象標識符系統(tǒng)。取決于所收集數(shù)據(jù)的級別,這可能位于每個指令、每個對象分配、每個函數(shù)中的模塊、每個函數(shù)調(diào)用、每個函數(shù)進入點和/或每個函數(shù)返回點。使用以下的代碼示例,如果id = 1的對象實例在靜態(tài)模型的第4行產(chǎn)生,而動態(tài)模型中產(chǎn)生的對象 id = 101,那么這兩個標識符能被鏈接,然后,當其中一個標識符被看到的時候,靜態(tài)模型和動態(tài)行為之間的對象實例可被映射。該技術(shù)容許在靜態(tài)模型或動態(tài)行為中的稀疏記錄/ 建模。比如,如果動態(tài)分析僅在每次創(chuàng)建對象并調(diào)用函數(shù)時記錄數(shù)據(jù),則靜態(tài)模型和動態(tài)行為之間的相關(guān)性將會在那里同步(也就是,靜態(tài)idl將會在第4行上被映射到動態(tài)idlOl), 且然后,如果作出動態(tài)函數(shù)調(diào)用(在靜態(tài)模型中不可行,因為該調(diào)用是動態(tài)的),則傳遞帶有動態(tài)idlOl的對象,帶有靜態(tài)idl的對象實例將會被正確地相關(guān),即便該信息在靜態(tài)模型中并非是原始可得的(第12行)。接下來是參考以上的代碼示例。1 public void Main()
3// static_id=l, dynamic_id=101, name=a
4Object a = new Object();
5
6Il static_id=2, dynamic_id=102, name二d
7DynamicObjectd= LoadDynamicObject("http://myservice object=5");
8d.InvokeDynamicMethod("DynamicFunction", a); 9}
10
11// dynamic_id=101, name=o
12public void DynamicFunction(Object o)
13{ 14}相應(yīng)的,此處描述的原理允許自動構(gòu)建結(jié)合了在計算機程序的執(zhí)行中得到的動態(tài)行為和靜態(tài)模型的架構(gòu)圖,提供對于計算機程序的結(jié)構(gòu)和操作的豐富呈現(xiàn)和直覺理解。本發(fā)明可被具體化為其他具體形式而不背離其精神或本質(zhì)特征。所描述的諸實施例在各方面將僅被視為說明性的而不是限制性的。本發(fā)明的范圍因此由所附的權(quán)利要求而不是由該以上描述來指示。落入權(quán)利要求的等價物的含義和范圍的所有改變都包含在權(quán)利要求的范圍內(nèi)。
權(quán)利要求
1.一種包括在其上具有計算機可執(zhí)行指令的一個或多個計算機可讀介質(zhì)(104)的計算機程序產(chǎn)品,當所述計算機可執(zhí)行指令由計算系統(tǒng)(100)的一個或多個處理器(102)執(zhí)行時,導(dǎo)致所述計算系統(tǒng)執(zhí)行下列動作訪問軟件程序O01)的一組組件012)的標識以及該組組件之間的關(guān)系013)的動作;基于所述軟件程序的執(zhí)行(221)進行動態(tài)分析Q20)以標識所述軟件程序的動態(tài)行為 (222)的動作;和自動建立架構(gòu)圖(303)的動作,所述架構(gòu)圖將來自非動態(tài)分析的結(jié)果和由動態(tài)分析所標識的動態(tài)行為相結(jié)合。
2.根據(jù)權(quán)利要求1所述的計算機程序產(chǎn)品,其特征在于,訪問軟件程序的一組組件的標識的動作包括基于對所述軟件程序的代碼的檢查靜態(tài)地分析軟件程序以標識所述軟件程序的一組組件以及該組組件之間的關(guān)系的動作。
3.根據(jù)權(quán)利要求1所述的計算機程序產(chǎn)品,其特征在于,所述動態(tài)行為包括在所述計算機程序的執(zhí)行期間在組件之間交換的參數(shù)的實際值。
4.根據(jù)權(quán)利要求1所述的計算機程序產(chǎn)品,其特征在于,所述動態(tài)行為包括在所述計算機程序的執(zhí)行期間所遍歷的執(zhí)行路徑的標識。
5.根據(jù)權(quán)利要求1所述的計算機程序產(chǎn)品,其特征在于,所述動態(tài)行為包括在所述計算機程序的執(zhí)行期間被調(diào)用,但并不是所述計算機程序所定義的附加組件。
6.如權(quán)利要求1所述的計算機程序產(chǎn)品,其特征在于,所述架構(gòu)圖是序列圖。
7.如權(quán)利要求1所述的計算機程序產(chǎn)品,其特征在于,所述架構(gòu)圖是依賴圖。
8.根據(jù)權(quán)利要求1所述的計算機程序產(chǎn)品,其特征在于,訪問軟件程序的一組組件的標識以及該組組件之間的關(guān)系的動作包括訪問所述一組組件的手動生成的標識以及該組組件之間的關(guān)系的動作。
9.根據(jù)權(quán)利要求1所述的計算機程序產(chǎn)品,其特征在于,所述計算機可執(zhí)行指令進一步被構(gòu)造從而所述計算機系統(tǒng)進一步執(zhí)行下述動作顯示自動生成的架構(gòu)圖的動作。
10.一種計算機實現(xiàn)的方法(300),包括基于對計算機程序的代碼的檢查(211)或知曉來訪問(301)所述計算機程序O01)的靜態(tài)代碼分析O10)的結(jié)果的動作;基于所述軟件程序的執(zhí)行(221)進行(30 動態(tài)分析Q20)以標識所述軟件程序的動態(tài)行為022)的動作;和自動建立架構(gòu)圖(303)的動作,所述架構(gòu)圖將來自靜態(tài)代碼分析的結(jié)果和從動態(tài)分析所標識的動態(tài)行為相結(jié)合。
全文摘要
公開了跨動態(tài)邊界的運行時分析的可視化的技術(shù),其涉及帶有多個組件的軟件程序的架構(gòu)圖的建立??赡芡ㄟ^執(zhí)行所述軟件程序的靜態(tài)代碼分析來訪問標識組件中的至少一些和組件間關(guān)系的靜態(tài)模型。還可以通過執(zhí)行軟件程序并觀察所述執(zhí)行來得出所述軟件程序的動態(tài)行為,從而實現(xiàn)動態(tài)分析。這些動態(tài)行為可能是僅僅基于對計算機程序的靜態(tài)代碼分析不能容易地得到的,諸如交換的參數(shù)值、執(zhí)行的路徑和附加的被調(diào)用組件。然后使用所述靜態(tài)模型和動態(tài)行為來建立結(jié)構(gòu)圖以生成計算程序的更完整的表示。
文檔編號G06F9/44GK102385511SQ20111018502
公開日2012年3月21日 申請日期2011年6月22日 優(yōu)先權(quán)日2010年6月23日
發(fā)明者B·R·克勞福德, E·R·科南特, S·杜塔 申請人:微軟公司