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