国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      應(yīng)用程序測試的制作方法

      文檔序號:11333711閱讀:295來源:國知局
      應(yīng)用程序測試的制造方法與工藝

      優(yōu)先權(quán)要求

      本申請要求2015年5月19日提交的美國專利申請14/715,807的優(yōu)先權(quán),其中該美國專利申請14/715,807要求2014年11月5日提交的美國臨時(shí)專利申請序列號62/075,451的優(yōu)先權(quán),這兩個(gè)申請的全部內(nèi)容通過引用包含于此。



      背景技術(shù):

      本說明書涉及調(diào)試圖。

      代碼開發(fā)人員經(jīng)常在整個(gè)開發(fā)過程中調(diào)試源代碼。如此,可以利用可能會影響源代碼的功能的調(diào)試代碼來修改源代碼。經(jīng)常期望在調(diào)試結(jié)束時(shí)從源代碼中去除所添加的調(diào)試代碼以恢復(fù)源代碼的原始功能。



      技術(shù)實(shí)現(xiàn)要素:

      在一般方面中,一種方法,包括:利用處理器來分析第一版本的計(jì)算機(jī)程序。所述分析包括識別所述第一版本的計(jì)算機(jī)程序中所包括的第一數(shù)據(jù)處理元素。所述第一數(shù)據(jù)處理元素引用位于所述第一版本的計(jì)算機(jī)程序外部的第一數(shù)據(jù)源。所述方法包括:生成表示與所述第一數(shù)據(jù)源不同的第二數(shù)據(jù)源的數(shù)據(jù)源元素。所述方法包括:生成第二版本的計(jì)算機(jī)程序。所述第二版本的計(jì)算機(jī)程序包括所生成的數(shù)據(jù)源元素和基于所述第一數(shù)據(jù)處理元素的第二數(shù)據(jù)處理元素。在所述第二版本的計(jì)算機(jī)程序中,所述第二數(shù)據(jù)處理元素引用所生成的數(shù)據(jù)源元素。

      實(shí)施例可以包括以下特征中的一個(gè)或多個(gè)特征。

      所述方法包括:確定所述第二數(shù)據(jù)源的位置。確定所述第二數(shù)據(jù)源的位置包括:接收表示所述位置的輸入。

      所述方法包括:在用戶接口中呈現(xiàn)所識別的所述第一數(shù)據(jù)處理元素、所述第一數(shù)據(jù)源或這兩者的標(biāo)識符。所述方法包括:接收所識別的所述第一數(shù)據(jù)處理元素、所述第一數(shù)據(jù)源或這兩者的選擇。

      分析所述第一版本的計(jì)算機(jī)程序包括:分析向所述第一版本的計(jì)算機(jī)程序中的數(shù)據(jù)處理元素至少之一的輸入流。

      所述方法包括:在所述計(jì)算機(jī)程序的運(yùn)行時(shí)分析所述第一版本的計(jì)算機(jī)程序。

      所述計(jì)算機(jī)程序包括圖。生成所述第二版本的計(jì)算機(jī)程序包括:使所生成的數(shù)據(jù)源元素位于向所述第二數(shù)據(jù)處理元素的輸入流處。

      來自所述第二數(shù)據(jù)源的數(shù)據(jù)具有與來自所述第一數(shù)據(jù)源的數(shù)據(jù)相同的格式。

      生成數(shù)據(jù)源元素包括:針對所生成的數(shù)據(jù)源元素定義覆蓋規(guī)范。

      所述方法包括:利用基于來自所述第一數(shù)據(jù)源的數(shù)據(jù)的數(shù)據(jù)來填充所述第二數(shù)據(jù)源。

      在所述第一版本的計(jì)算機(jī)程序中,第三數(shù)據(jù)處理元素引用位于所述第一版本的計(jì)算機(jī)程序外部的第一數(shù)據(jù)目的地。在所述第二版本的計(jì)算機(jī)程序中,基于所述第三數(shù)據(jù)處理元素的第四數(shù)據(jù)處理元素引用與所述第一數(shù)據(jù)目的地不同的第二數(shù)據(jù)目的地。

      所述方法包括:識別所述第一版本的計(jì)算機(jī)程序中所包括的第三數(shù)據(jù)處理元素。所述第三數(shù)據(jù)處理元素引用位于所述第一版本的計(jì)算機(jī)程序外部的第一數(shù)據(jù)目的地。所述方法包括:生成表示與所述第一數(shù)據(jù)目的地不同的第二數(shù)據(jù)目的地的輸出元素。所述第二版本的計(jì)算機(jī)程序包括所生成的輸出元素和基于所述第三數(shù)據(jù)處理元素的第四數(shù)據(jù)處理元素。在所述第二版本的計(jì)算機(jī)程序中,所述第四數(shù)據(jù)處理元素引用所生成的輸出元素。所述方法包括:確定所述第二數(shù)據(jù)目的地的位置。確定所述第二數(shù)據(jù)目的地的位置包括:接收表示所述位置的輸入。

      所述方法包括:執(zhí)行所述第二版本的計(jì)算機(jī)程序。

      執(zhí)行所述第二版本的計(jì)算機(jī)程序使得能夠?qū)λ鲇?jì)算機(jī)程序進(jìn)行調(diào)試。

      生成所述第二版本的至少一部分的計(jì)算機(jī)程序包括:生成所述計(jì)算機(jī)程序的該部分的副本。所述方法包括:修改所述計(jì)算機(jī)程序的該部分的副本以包括所生成的數(shù)據(jù)源元素。

      在一般方面中,一種系統(tǒng),包括用于利用處理器來分析第一版本的計(jì)算機(jī)程序的部件。所述分析包括識別所述第一版本的計(jì)算機(jī)程序中所包括的第一數(shù)據(jù)處理元素。所述第一數(shù)據(jù)處理元素引用位于所述第一版本的計(jì)算機(jī)程序外部的第一數(shù)據(jù)源。所述系統(tǒng)包括用于生成表示與所述第一數(shù)據(jù)源不同的第二數(shù)據(jù)源的數(shù)據(jù)源元素的部件。所述系統(tǒng)包括用于生成第二版本的計(jì)算機(jī)程序的部件。所述第二版本的計(jì)算機(jī)程序包括所生成的數(shù)據(jù)源元素和基于所述第一數(shù)據(jù)處理元素的第二數(shù)據(jù)處理元素。在所述第二版本的計(jì)算機(jī)程序中,所述第二數(shù)據(jù)處理元素引用所生成的數(shù)據(jù)源元素。

      在一般方面中,一種系統(tǒng),包括處理器,所述處理器連接至存儲器,所述處理器和所述存儲器被配置為利用所述處理器來分析第一版本的計(jì)算機(jī)程序。所述分析包括識別所述第一版本的計(jì)算機(jī)程序中所包括的第一數(shù)據(jù)處理元素。所述第一數(shù)據(jù)處理元素引用位于所述第一版本的計(jì)算機(jī)程序外部的第一數(shù)據(jù)源。所述處理器和所述存儲器被配置為生成表示與所述第一數(shù)據(jù)源不同的第二數(shù)據(jù)源的數(shù)據(jù)源元素。所述處理器和所述存儲器被配置為生成第二版本的至少一部分的計(jì)算機(jī)程序。所述第二版本的計(jì)算機(jī)程序包括所生成的數(shù)據(jù)源元素和基于所述第一數(shù)據(jù)處理元素的第二數(shù)據(jù)處理元素。在所述第二版本的計(jì)算機(jī)程序中,所述第二數(shù)據(jù)處理元素引用所生成的數(shù)據(jù)源元素。

      在一般方面中,一種用于存儲指令的非暫時(shí)性計(jì)算機(jī)可讀介質(zhì),所述指令用于使計(jì)算系統(tǒng)利用處理器來分析第一版本的計(jì)算機(jī)程序。所述分析包括識別所述第一版本的計(jì)算機(jī)程序中所包括的第一數(shù)據(jù)處理元素。所述第一數(shù)據(jù)處理元素引用位于所述第一版本的計(jì)算機(jī)程序外部的第一數(shù)據(jù)源。所述指令使所述計(jì)算系統(tǒng)生成表示與所述第一數(shù)據(jù)源不同的第二數(shù)據(jù)源的數(shù)據(jù)源元素。所述指令使所述計(jì)算系統(tǒng)生成第二版本的至少一部分的計(jì)算機(jī)程序。所述第二版本的計(jì)算機(jī)程序包括所生成的數(shù)據(jù)源元素和基于所述第一數(shù)據(jù)處理元素的第二數(shù)據(jù)處理元素。在所述第二版本的計(jì)算機(jī)程序中,所述第二數(shù)據(jù)處理元素引用所生成的數(shù)據(jù)源元素。

      根據(jù)以下的說明書、以及根據(jù)權(quán)利要求書,本發(fā)明的其它特征和優(yōu)點(diǎn)將變得明顯。

      附圖說明

      圖1是圖(graph)的示例。

      圖2是覆蓋規(guī)范的示例。

      圖3是框圖。

      圖4是流程圖。

      圖5a~5d是修改后的圖的示例。

      圖6~8是框圖。

      圖9是流程圖。

      具體實(shí)施方式

      在測試或調(diào)試諸如圖等的可執(zhí)行應(yīng)用程序時(shí),測試人員或開發(fā)人員可能想要使用特殊的一組輸入數(shù)據(jù)來進(jìn)行測試。在一些示例中,測試人員可能希望對應(yīng)用程序作出改變。通過在改變之前和之后都使用一致的一組輸入數(shù)據(jù)執(zhí)行應(yīng)用程序,可以監(jiān)測該改變對應(yīng)用程序所輸出的數(shù)據(jù)的影響。在一些示例中,測試人員可以具有在測試應(yīng)用程序時(shí)要使用的特定一組測試數(shù)據(jù),諸如將使得至少執(zhí)行一次應(yīng)用程序的所有功能的一組測試數(shù)據(jù)等。同樣,測試人員可能希望將應(yīng)用程序所輸出的數(shù)據(jù)寫入與應(yīng)用程序?qū)⑵漭敵鰯?shù)據(jù)寫入至的標(biāo)準(zhǔn)目的地不同的特殊目的地。

      在傳統(tǒng)的開發(fā)環(huán)境中,測試人員手動提供測試所用的期望的一組輸入數(shù)據(jù)并且指定輸出數(shù)據(jù)的目的地。這里,說明用以自動識別用于向應(yīng)用程序提供輸入數(shù)據(jù)的數(shù)據(jù)源和用于從應(yīng)用程序接收輸出數(shù)據(jù)的輸出數(shù)據(jù)宿的方法。所識別的數(shù)據(jù)源可以被替換數(shù)據(jù)源(有時(shí)稱為測試源)自動替換。所識別的輸出數(shù)據(jù)宿可以被替代目的地(有時(shí)稱為探測器)自動替換。測試源和探測器是插入的示例。

      在一些示例中,可執(zhí)行應(yīng)用程序是基于圖的處理。諸如測試源和探測器等的插入是與基于圖的處理中的流相關(guān)聯(lián)的對象。測試源可以利用新數(shù)據(jù)替換通過流的數(shù)據(jù)(例如,上游數(shù)據(jù)),使得上游計(jì)算不必針對圖的每次執(zhí)行重新運(yùn)行。例如,測試源可以替換數(shù)據(jù)源,使得從測試源而不是從數(shù)據(jù)源向圖提供測試數(shù)據(jù)。探測器可以監(jiān)測在圖執(zhí)行時(shí)通過流的數(shù)據(jù),并且可以使得保存該數(shù)據(jù)以供隨后檢查或重復(fù)使用。例如,探測器可以接收原本將被保存至諸如數(shù)據(jù)庫等的輸出數(shù)據(jù)宿的數(shù)據(jù)。

      可以利用作為與圖或其它可執(zhí)行應(yīng)用程序分開的文件的覆蓋規(guī)范來定義諸如測試源和探測器等的插入。在一些示例中,可以基于應(yīng)用程序的自動化分析、例如基于應(yīng)用程序的數(shù)據(jù)源和輸出數(shù)據(jù)宿的自動識別,來自動定義插入。

      覆蓋規(guī)范中所定義的插入可以在執(zhí)行期間被添加到應(yīng)用程序中,而不是成為原始程序的一部分。在編譯應(yīng)用程序時(shí),編譯人員考慮覆蓋文件并且生成包括插入的可執(zhí)行應(yīng)用程序。有時(shí)將原始應(yīng)用程序稱為第一版本應(yīng)用程序并且將包括插入的應(yīng)用程序稱為第二版本應(yīng)用程序。例如,在基于圖的處理的示例中,可以將可執(zhí)行圖從視覺上表示為包括第一版本圖的與覆蓋規(guī)范中所定義的插入對象相組合的組件的第二版本圖。在一些示例中,可執(zhí)行圖是shell腳本(外殼腳本)并且沒有存儲在文件中。在一些示例中,可執(zhí)行圖和圖存儲在單獨(dú)文件中。

      將插入并入第二版本圖中沒有修改調(diào)試中的第一版本圖。作為代替,插入定義保持在單獨(dú)文件(例如,單獨(dú)的覆蓋規(guī)范)中,并且可以在代碼生成開始時(shí)變?yōu)槠胀▓D組件以包括在修改后的圖中。如此,不存在調(diào)試期間無意中破壞原始圖的風(fēng)險(xiǎn)。

      還可以在圖中的除數(shù)據(jù)源和輸出數(shù)據(jù)宿以外的位置處引入插入。這些插入(有時(shí)稱為內(nèi)部插入)可以使得測試人員能夠在數(shù)據(jù)流經(jīng)圖時(shí)訪問該數(shù)據(jù)。例如,測試人員可能希望在數(shù)據(jù)從一個(gè)組件流向另一組件時(shí)驗(yàn)證該數(shù)據(jù)。測試人員還可能已驗(yàn)證了上游處理正確地起作用,但可能沒有驗(yàn)證下游處理。在一些情況下,上游處理可能需要長的時(shí)間來執(zhí)行,這導(dǎo)致測試不高效。如果測試人員可以利用先前驗(yàn)證的數(shù)據(jù)替換先前驗(yàn)證的上游操作,則可以提高測試效率。在傳統(tǒng)的開發(fā)環(huán)境中,測試人員將需要修改圖以添加觀察點(diǎn)或者利用預(yù)先驗(yàn)證的數(shù)據(jù)替換上游組件。然而,一旦編輯了圖,則測試人員無法確定出沒有修改原始圖的功能。在一些環(huán)境中,測試人員可能缺少編輯圖所需的許可。

      圖1示出圖100的示例。圖100是包括通過流所連接的數(shù)據(jù)處理組件的計(jì)算機(jī)程序的視覺表示。連接兩個(gè)組件的流表示從第一組件輸出的記錄被傳遞至第二組件。在第一組件通過流連接至第二組件時(shí),第一組件引用第二組件。

      諸如數(shù)據(jù)庫(如圖所示)、文件、隊(duì)列、可執(zhí)行語句(例如,sql語句)或位于圖100外部的另一類型的數(shù)據(jù)源等的數(shù)據(jù)源102包括利用圖100要處理的一個(gè)或多個(gè)數(shù)據(jù)記錄。外部是指數(shù)據(jù)源102的數(shù)據(jù)沒有存儲在圖100中。數(shù)據(jù)源102通過流連接至過濾組件103。通常,過濾組件過濾或去除不滿足預(yù)定標(biāo)準(zhǔn)的記錄。在該示例中,過濾組件103使居住于俄亥俄州的客戶的數(shù)據(jù)記錄通過并且拒絕其它記錄。過濾組件103連接至排序組件104,其中該排序組件104用于按照郵政編碼對過濾后的數(shù)據(jù)記錄進(jìn)行排序。排序組件104連接至復(fù)制組件106,其中該復(fù)制組件106用于創(chuàng)建數(shù)據(jù)記錄的副本,使得可以采用兩個(gè)不同的方式來處理數(shù)據(jù)記錄。該復(fù)制組件連接至重定格式組件108和按表達(dá)式過濾組件110。例如,將按郵政編碼進(jìn)行排序后的居住于俄亥俄州的客戶的數(shù)據(jù)記錄的一個(gè)實(shí)例發(fā)送至重定格式組件108,并且將這些數(shù)據(jù)記錄的另一實(shí)例發(fā)送至按表達(dá)式過濾組件110。重定格式組件108將數(shù)據(jù)記錄的格式改變?yōu)椴煌臄?shù)據(jù)格式,并且按表達(dá)式過濾組件110基于與數(shù)據(jù)記錄相關(guān)聯(lián)的表達(dá)式來去除數(shù)據(jù)記錄。重定格式組件108和按表達(dá)式過濾組件110連接至用于組合所接收到的數(shù)據(jù)記錄的收集組件112,并且該收集組件連接至位于圖外部的輸出數(shù)據(jù)宿組件114,諸如數(shù)據(jù)庫(如圖所示)、文件、隊(duì)列或下游處理組件等。外部是指輸出數(shù)據(jù)宿114的數(shù)據(jù)沒有存儲在圖100中。盡管圖100包括許多在組件之間的流,但在該示例中,特別關(guān)注數(shù)據(jù)源102和過濾組件103之間的流116(有時(shí)稱為源-過濾流116)以及收集組件112和輸出數(shù)據(jù)宿114之間的流118(有時(shí)稱為收集-輸出流118)。

      圖100的測試人員可能希望調(diào)試圖100以驗(yàn)證其功能。在一些情況下,測試人員可能想要在數(shù)據(jù)從一個(gè)組件流向另一組件時(shí)驗(yàn)證數(shù)據(jù)。在一些情況下,測試人員可能想要繞過圖100中的上游組件,而是將數(shù)據(jù)插入所繞過的組件的位置。在一些情況下,測試人員可能想要使用一致的一組輸入數(shù)據(jù)來測試圖100的操作以監(jiān)測改變該圖對該圖所輸出的數(shù)據(jù)的影響。在一些情況下,測試人員可能想要使用該測試人員知曉的將使得至少執(zhí)行一次圖的所有功能的一組輸入數(shù)據(jù)來測試圖100的操作,由此使得能夠完成圖的測試。

      在調(diào)試圖100時(shí),可以期望避免修改圖。例如,測試人員可能不想冒破壞圖的功能的風(fēng)險(xiǎn)。在一些示例中,測試人員對圖的訪問權(quán)限可能受限或者可能無權(quán)訪問圖(例如,測試人員可能缺少編輯圖所需的許可)。為了在無需修改圖100的情況下調(diào)試該圖,可以使用覆蓋來調(diào)試圖。在一些示例中,可以例如基于圖的自動化分析來自動指定覆蓋??梢曰谠紙D100(有時(shí)稱為第一版本圖)和覆蓋規(guī)范來生成第二版本的至少一部分的圖100。

      圖2示出用于定義覆蓋的覆蓋規(guī)范200的示例。覆蓋規(guī)范200可以存儲在文件中。該文件可以與包含圖的文件分開。覆蓋規(guī)范定義一個(gè)或多個(gè)插入。插入可以是與圖100的流相關(guān)聯(lián)的對象并且可以采用探測器或測試源的形式。

      探測器在數(shù)據(jù)通過圖100的組件之間的流(例如,沿著從第一組件向第二組件的流或者沿著向輸出數(shù)據(jù)宿的流通過)時(shí)收集或監(jiān)測該數(shù)據(jù)。例如,在圖100執(zhí)行時(shí)數(shù)據(jù)通過流的情況下,可以監(jiān)測該數(shù)據(jù)、可以保存該數(shù)據(jù)以供隨后檢查、或者可以保存該數(shù)據(jù)以供重復(fù)使用。覆蓋規(guī)范可以定義參考攜載要收集或監(jiān)測的數(shù)據(jù)的流的探測器。探測器指定要收集或監(jiān)測數(shù)據(jù)所經(jīng)由的流。探測器可被配置為報(bào)告特定值,或者報(bào)告特定值何時(shí)在預(yù)定范圍內(nèi)或在預(yù)定范圍外。可以保存通過探測器的數(shù)據(jù)以供隨后分析或使用,例如可以將數(shù)據(jù)存儲在平面文件或關(guān)系數(shù)據(jù)庫中。

      在一些示例中,探測器可以參考從圖100的組件向諸如文件或數(shù)據(jù)庫等的輸出數(shù)據(jù)宿的流。通過在圖100的調(diào)試期間沿著向數(shù)據(jù)宿的流配置探測器,該探測器接收從圖100輸出的數(shù)據(jù)。例如,每次在調(diào)試模式中執(zhí)行圖100時(shí),輸出數(shù)據(jù)可被探測器接收到并且寫入文件,使得可以比較或評價(jià)來自各種圖執(zhí)行的輸出數(shù)據(jù)。在一些示例中,自動識別輸出數(shù)據(jù)宿并且自動指定覆蓋,以定義供所識別的輸出數(shù)據(jù)宿之前的插入用的探測器。

      在一些示例中,探測器可以參考從圖100的上游組件向下游組件的流。通過在圖100的調(diào)試期間沿著向下游組件的流配置探測器,該探測器接收原本將被下游組件接收到的數(shù)據(jù),由此防止下游組件執(zhí)行。例如,測試人員可能希望監(jiān)測下游組件之前的圖處理的結(jié)果。例如,下游組件可以具有對圖的外部產(chǎn)生影響的功能,例如下游組件可以向該下游組件處理信用卡記錄的各人發(fā)送文本消息。在圖的調(diào)試期間,測試人員可能希望禁用對圖的外部產(chǎn)生影響的組件。

      測試源將數(shù)據(jù)插入圖100中的圖100的兩個(gè)組件之間的特定流處。覆蓋規(guī)范可以定義參考如下流的測試源,其中該流攜載要利用來自測試源的數(shù)據(jù)替換的數(shù)據(jù)。在一些示例中,測試源利用新數(shù)據(jù)替換通常將通過流的數(shù)據(jù)。在一些方案中,測試源可被配置為讀取先前保存的數(shù)據(jù),并且將該數(shù)據(jù)傳遞至下游組件。在一些示例中,測試源將數(shù)據(jù)插入圖100中的來自數(shù)據(jù)源(諸如數(shù)據(jù)庫或文件等)的流處。測試源可以插入具有與數(shù)據(jù)源原本將提供的數(shù)據(jù)相同的格式的數(shù)據(jù)。在一些示例中,自動識別數(shù)據(jù)源并且自動指定覆蓋,以定義要替換所識別的數(shù)據(jù)源的測試源。

      在一些示例中,圖100的直到特定點(diǎn)為止(例如,直到特定組件為止)的執(zhí)行的結(jié)果可能以前已被驗(yàn)證。換句話說,可能已驗(yàn)證了直到特定點(diǎn)為止的上游處理功能。在這些情況下,上游組件在每次圖100執(zhí)行時(shí)重新處理功能這一做法可能效率低。測試源可以將數(shù)據(jù)(例如,先前驗(yàn)證的數(shù)據(jù))插入圖中的該特定點(diǎn)處。這樣,可以繞過圖100的先前執(zhí)行的整個(gè)部分。

      圖2示出用于定義覆蓋的覆蓋規(guī)范200的示例。覆蓋規(guī)范200可以包括一個(gè)或多個(gè)插入定義。在該示例中,覆蓋規(guī)范200包括一個(gè)測試源定義201和一個(gè)探測器定義213。覆蓋規(guī)范200從指定插入定義可以對應(yīng)于的圖的3行標(biāo)題開始。該標(biāo)題之后是測試源定義201,其中該測試源定義201包括名稱202、上游端口204、下游端口206、插入類型208、原型路徑210和布局參數(shù)212。

      測試源定義201的上游端口204引用測試源要被插入圖100中的流的正上游的組件的輸出端口。流的上游的組件是輸出端口數(shù)據(jù)被輸出到流上的組件。在圖2的示例中,測試源定義201的上游端口204指向數(shù)據(jù)庫102的輸出。測試源定義201的下游端口206引用測試源要插入到圖100中的流的正下游的組件的輸入端口。流的下游的組件是從該流接收到輸入端口數(shù)據(jù)的組件。在圖2的示例中,測試源定義的下游端口206指向過濾組件103的輸入。因而,該示例中的測試源定義201表示要在數(shù)據(jù)庫102的輸出和過濾組件103的輸入之間的流中配置測試源,使得測試源所提供的數(shù)據(jù)可以替換來自數(shù)據(jù)庫102的輸入數(shù)據(jù)。

      插入類型208定義插入是測試源還是探測器。值“0”定義測試源,并且值“1”定義探測器。由于該插入是測試源,因此插入類型108的值是“0”。

      原型路徑210表示插入的類型。在該示例中,由于該插入是測試源,因此原型路徑210指定輸入文件組件。原型路徑210指向包含用于定義特定類型的插入的代碼的文件。布局參數(shù)212定義包含測試源將包含的數(shù)據(jù)的源文件的位置。在一些示例中,該位置是文件路徑。源文件中的數(shù)據(jù)要替換通常將通過由上游端口204和下游端口206定義的流的數(shù)據(jù)。即,在將測試源應(yīng)用于圖100時(shí),過濾組件103接收源文件中的數(shù)據(jù)而不是從數(shù)據(jù)庫102接收數(shù)據(jù)。

      源文件包含具有與測試源的下游的組件原本將接收到的數(shù)據(jù)相同的格式的數(shù)據(jù)。在一些示例中,源文件中的數(shù)據(jù)可以與測試源的上游的數(shù)據(jù)源(例如,數(shù)據(jù)庫)中的數(shù)據(jù)相同。例如??梢詫碜詳?shù)據(jù)庫102的數(shù)據(jù)記錄復(fù)制到源文件中。在一些示例中,數(shù)據(jù)源表示諸如sql查詢等的可執(zhí)行語句。在這些示例中,可以執(zhí)行sql查詢并且可以將查詢執(zhí)行的結(jié)果存儲在源文件中。在一些示例中,可以從除數(shù)據(jù)源以外的某處獲得源文件中的數(shù)據(jù)。例如,可以生成源文件中的數(shù)據(jù),從而確保對特定數(shù)據(jù)(例如,特定范圍的值)進(jìn)行處理以進(jìn)行圖100的完整調(diào)試。在一些示例中,即使數(shù)據(jù)源中的數(shù)據(jù)改變,源文件中的數(shù)據(jù)也保持相同,由此使得能夠利用一致的一組輸入數(shù)據(jù)繼續(xù)調(diào)試。

      在一些示例中,源文件中的數(shù)據(jù)可以與圖100的正常執(zhí)行期間將通過流的數(shù)據(jù)相同,但通過使用測試源插入數(shù)據(jù),上游組件可以避免處理。例如,諸如復(fù)制組件106等的上游組件可能要求大量的系統(tǒng)資源來處理數(shù)據(jù),或者與數(shù)據(jù)流圖100中的其它組件相比可能需要相對較長的時(shí)間來處理數(shù)據(jù)。如此,可以將已知數(shù)據(jù)(例如,在正常執(zhí)行期間將通過流的相同數(shù)據(jù))插入流中以節(jié)省時(shí)間或節(jié)約系統(tǒng)資源。

      測試源定義201之后是探測器定義213,其中該探測器定義213包括名稱214、上游端口216、下游端口218、插入類型220和原型路徑222。

      探測器定義213的上游端口216引用探測器要被插入圖100中的流的正上游的組件的輸出端口。在圖2的示例中,探測器定義213的上游端口216指向收集組件112的輸出。探測器定義213的下游端口218引用探測器要被插入圖100中的流的正下游的組件的輸入端口。在圖2的示例中,探測器定義213的下游端口218指向輸出數(shù)據(jù)宿組件114。因而,該示例中的探測器定義213表示要在收集組件112的輸出和輸出數(shù)據(jù)宿組件114之間的流中配置探測器,使得探測器接收原本將被寫入輸出數(shù)據(jù)宿組件的數(shù)據(jù)。

      探測器定義213的插入類型220定義插入是測試源還是探測器。值“1”表示探測器。由于該插入是探測器,因此插入類型220的值是“1”。

      原型路徑222表示插入的類型。在該示例中,由于該插入是探測器,因此原型路徑222指定輸出文件組件。原型路徑222指向包含用于定義特定類型的插入的代碼的文件。

      在一些示例中,要利用探測器監(jiān)測的數(shù)據(jù)被存儲在系統(tǒng)自動創(chuàng)建的文件中。該文件可以存儲在系統(tǒng)所確定的位置中。探測器監(jiān)測通過由上游端口216和下游端口218所定義的流的數(shù)據(jù)。即,在將探測器應(yīng)用于圖100時(shí),監(jiān)測從收集組件112的輸出通向輸出數(shù)據(jù)宿組件114的輸入的數(shù)據(jù)并且將該數(shù)據(jù)存儲在系統(tǒng)自動創(chuàng)建的文件中。在一些示例中,可以在存儲該數(shù)據(jù)之前監(jiān)測該數(shù)據(jù)。該文件能夠接收具有探測器定義所引用的組件(在該示例中為外部數(shù)據(jù)宿組件114)將接收的相同格式的數(shù)據(jù)。

      在一些示例中,作為圖的自動化分析的結(jié)果,可以利用覆蓋規(guī)范來定義一個(gè)或多個(gè)插入。例如,可以進(jìn)行圖100的自動化分析以識別諸如數(shù)據(jù)庫、文件或其它類型的數(shù)據(jù)源等的任何數(shù)據(jù)源。所識別的數(shù)據(jù)源中的一個(gè)或多個(gè)數(shù)據(jù)源可被測試源自動替換。被替換的數(shù)據(jù)源是指將測試源插入該數(shù)據(jù)源的正下游的流中,使得將來自該測試源的數(shù)據(jù)而不是將來自該數(shù)據(jù)源的數(shù)據(jù)提供至下游組件。同樣,圖100的自動化分析可以識別諸如數(shù)據(jù)庫、文件或其它類型的輸出數(shù)據(jù)宿等的任何輸出數(shù)據(jù)宿。所識別的輸出數(shù)據(jù)宿中的一個(gè)或多個(gè)輸出數(shù)據(jù)宿可被探測器自動替換。被替換的輸出數(shù)據(jù)宿是指將探測器插入該輸出數(shù)據(jù)宿的正上游的流中,使得來自上游組件的數(shù)據(jù)被探測器而不是被該輸出數(shù)據(jù)宿接收到。還可以使用圖100的自動化分析來識別諸如特定類型的組件(例如,執(zhí)行對圖100的外部產(chǎn)生影響的特定類型的組件)等的其它組件。

      參考圖3,分析引擎300自動分析圖100以識別數(shù)據(jù)源302和輸出數(shù)據(jù)宿304。例如,分析引擎300可以訪問針對圖100的各節(jié)點(diǎn)的參數(shù)和連接。如果給定節(jié)點(diǎn)不存在傳入連接,則分析引擎300將該節(jié)點(diǎn)識別為數(shù)據(jù)源。同樣,如果給定節(jié)點(diǎn)不存在傳出連接,則分析引擎300將該節(jié)點(diǎn)識別為輸出數(shù)據(jù)宿。為了訪問并分析圖的各節(jié)點(diǎn),分析引擎“遍歷”圖的所有連接。在一些示例中,直到運(yùn)行時(shí)(例如,在處理為了調(diào)試目的而開始時(shí))為止,圖100未被實(shí)例化或參數(shù)化。分析引擎300可以在運(yùn)行時(shí)進(jìn)行自動化分析以識別圖100中的數(shù)據(jù)源和輸出數(shù)據(jù)宿。

      分析引擎300將數(shù)據(jù)源302和輸出數(shù)據(jù)宿304的標(biāo)識符發(fā)送至插入引擎306,其中該插入引擎306確定數(shù)據(jù)源和輸出數(shù)據(jù)宿中的哪些數(shù)據(jù)源和輸出數(shù)據(jù)宿要被測試源和探測器分別替換。在一些示例中,測試人員308提供要被測試源和探測器替換的數(shù)據(jù)源和輸出數(shù)據(jù)宿的列表310。可以將列表310作為文件、數(shù)據(jù)庫或采用其它格式來提供。例如,測試人員308可以將他期望頻繁地改變的任何數(shù)據(jù)源包括在列表310上。通過利用測試源替換這種數(shù)據(jù)源,測試人員308可以確??墒褂靡恢碌妮斎霐?shù)據(jù)來測試圖。

      插入引擎306將各個(gè)所識別的數(shù)據(jù)源302和輸出數(shù)據(jù)宿304與列表310上的數(shù)據(jù)源和輸出數(shù)據(jù)宿進(jìn)行比較。該插入引擎針對列表310上出現(xiàn)的任何數(shù)據(jù)源302或輸出數(shù)據(jù)宿304創(chuàng)建覆蓋規(guī)范312。在一些示例中,利用分析引擎300將諸如上游端口和下游端口等的針對覆蓋規(guī)范312的參數(shù)提供至插入引擎306。在一些示例中,插入引擎306訪問圖100以獲得相關(guān)參數(shù)。

      為了針對測試源創(chuàng)建覆蓋規(guī)范312,插入引擎306利用數(shù)據(jù)填充源文件。在一些示例中,插入引擎306利用從數(shù)據(jù)源302復(fù)制得到的數(shù)據(jù)填充將替換特定數(shù)據(jù)源302的測試源所用的源文件。在一些示例中,數(shù)據(jù)源302包括諸如sql語句等的可執(zhí)行表達(dá)式,并且插入引擎306執(zhí)行該可執(zhí)行表達(dá)式并利用執(zhí)行結(jié)果填充源文件。在一些示例中,插入引擎306可以經(jīng)由用戶接口314向測試人員308提示源文件所用的數(shù)據(jù)。例如,插入引擎306可以向測試人員308呈現(xiàn)所識別的數(shù)據(jù)源302的列表,使得測試人員308可以選擇所識別的數(shù)據(jù)源302中的哪些數(shù)據(jù)源要被測試源替換。測試人員308還可以指定要包括在該測試源所用的源文件中的數(shù)據(jù)。在一些情況下,測試人員308可以識別包括該測試源所用的數(shù)據(jù)的文件的位置(例如,路徑)。在一些情況下,測試人員308可以指示插入引擎306生成作為原始數(shù)據(jù)源302中的數(shù)據(jù)的副本的源文件。在一些情況下,測試人員308可以指示插入引擎306執(zhí)行原始數(shù)據(jù)源302中所包括的或者與原始數(shù)據(jù)源302相關(guān)聯(lián)的諸如sql語句等的可執(zhí)行表達(dá)式。在一些情況下,測試人員308可以使得針對測試源的源文件生成數(shù)據(jù)。例如,測試人員308可以提供將使得至少執(zhí)行一次圖中的每個(gè)功能的一組數(shù)據(jù)(諸如真實(shí)數(shù)據(jù)或所生成數(shù)據(jù)等)。

      為了針對探測器創(chuàng)建覆蓋規(guī)范312,插入引擎306確定輸出數(shù)據(jù)要被存儲的文件的位置。在一些示例中,該位置是默認(rèn)(例如,由系統(tǒng)架構(gòu)師)設(shè)置的。在一些示例中,插入引擎306可以經(jīng)由用戶接口314提示測試人員308指定輸出數(shù)據(jù)文件所用的位置。

      參考圖4,在用以自動定義插入的一般方法中,接收要被測試源和探測器分別替換的數(shù)據(jù)源和輸出數(shù)據(jù)宿的列表(400)。例如,該列表可以由測試人員基于他關(guān)于數(shù)據(jù)源和輸出數(shù)據(jù)宿的知識或者基于調(diào)試的目標(biāo)或目的來提供。在一些示例中,該列表還可以包括要替換該列表上所包括的數(shù)據(jù)源和輸出數(shù)據(jù)宿的文件的諸如位置和文件名等的標(biāo)識符。

      例如利用處理器自動分析圖,以識別該圖中的數(shù)據(jù)源、輸出數(shù)據(jù)宿或這兩者(402)。特別地,不具有傳入連接的組件被識別為數(shù)據(jù)源,并且不具有傳出連接的組件被識別為輸出數(shù)據(jù)宿。例如,分析各組件以識別該組件的傳入連接和傳出連接,并且來自各組件的各連接被實(shí)現(xiàn)直到相鄰組件以識別該組件的傳入連接和傳出連接。這樣,可以分析圖的所有組件。在一些示例中,可以在運(yùn)行時(shí)(例如,在圖被參數(shù)化之后)自動進(jìn)行該分析。在一些示例中,可以自動地且動態(tài)地(例如,在圖正運(yùn)行時(shí))進(jìn)行該分析。例如,可以在圖的執(zhí)行期間解析特定參數(shù)時(shí)進(jìn)行動態(tài)分析。在一些示例中,圖被接收到短期存儲器中,其中利用處理器從該短期存儲器中分析圖以識別數(shù)據(jù)源或輸出數(shù)據(jù)宿。

      自動將所識別的數(shù)據(jù)源和輸出數(shù)據(jù)宿與列表上的數(shù)據(jù)源和輸出數(shù)據(jù)宿進(jìn)行比較(404)。針對列表上所包括的各個(gè)所識別的數(shù)據(jù)源或輸出數(shù)據(jù)宿定義覆蓋規(guī)范(406)。在執(zhí)行圖之前,編譯器可以將圖編譯成可執(zhí)行圖。作為編譯的一部分,編譯器考慮覆蓋規(guī)范200。例如,編譯器可以接受覆蓋規(guī)范200作為輸入。對一個(gè)或多個(gè)插入進(jìn)行處理并且將該一個(gè)或多個(gè)插入以各自與覆蓋規(guī)范200中所包含的插入定義相對應(yīng)的對象的形式插入圖中。可以將插入對象連同第一版本圖100中所包括的數(shù)據(jù)處理組件一起在(圖5a所示的)第二版本圖500中表示。插入對象可以通過定向流連接至數(shù)據(jù)處理組件或其它插入。然而,覆蓋規(guī)范200或存儲該覆蓋規(guī)范的文件保持與包含圖的文件分開。即,盡管插入對象以及第一版本圖100中所包括的數(shù)據(jù)處理組件可以出現(xiàn)在第二版本圖500中,但包含第一版本圖100的文件不包括插入定義。插入對象有時(shí)被簡稱為插入。

      在一些示例中,測試人員沒有供給要替換的數(shù)據(jù)源和輸出數(shù)據(jù)宿的初始列表。相反,自動分析圖并且經(jīng)由用戶接口向測試人員呈現(xiàn)與圖相關(guān)聯(lián)的所有數(shù)據(jù)源和輸出數(shù)據(jù)宿的列表。測試人員可以選擇數(shù)據(jù)源和輸出數(shù)據(jù)宿中的要被插入替換的一個(gè)或多個(gè)數(shù)據(jù)源和輸出數(shù)據(jù)宿。測試人員可以提供要替換列表上所包括的數(shù)據(jù)源和輸出數(shù)據(jù)宿的文件的諸如位置和文件名等的標(biāo)識符,或者可以提供用于生成插入所用的源文件的指令。

      可以使用單執(zhí)行模式(single-executionmode)和保存狀態(tài)模式(saved-statemode)的至少兩個(gè)模式其中之一來執(zhí)行覆蓋規(guī)范中所定義的插入。

      圖6示出用于在單執(zhí)行模式中執(zhí)行插入定義的示例系統(tǒng)。在該示例中,客戶端602生成或引用第一版本圖604和用于定義插入的覆蓋文件606(例如,覆蓋規(guī)范)。例如,覆蓋文件606可以是圖2的覆蓋規(guī)范200。然后,利用編譯器608編譯圖604。編譯器608考慮覆蓋文件606并且創(chuàng)建第二版本圖。第二版本圖是可執(zhí)行的并且包括覆蓋文件606所定義的插入。然后,可以執(zhí)行第二版本圖。在一些示例中,編譯和執(zhí)行同時(shí)發(fā)生。如果要再次執(zhí)行第二版本圖,則重復(fù)該處理,其中該處理包括重新指定、重新編譯圖604并且重新執(zhí)行第二版本圖。從可執(zhí)行圖的一次執(zhí)行起直到可執(zhí)行圖的下次執(zhí)行為止,沒有保存信息。

      圖5a示出第二版本圖500的示例。第二版本圖500是圖的視覺表示。在該示例中,第二版本圖500與圖1的第一版本圖100相似,并且已被修改為包括插入。第二版本圖500包括圖2的覆蓋規(guī)范200中所定義的插入的表示。測試源插入502與測試源定義201相對應(yīng),并且探測器插入504與探測器定義213相對應(yīng)。在該示例中,在編譯器編譯圖100時(shí)生成插入。盡管圖5a示出第二版本圖500,但原始的第一版本圖100保持未被修改。

      在數(shù)據(jù)源102的輸出和過濾組件103的輸入之間配置測試源插入502,其中流116已位于第一版本圖100中。該插入的位置是基于測試源定義中的上游端口204和下游端口206(圖2)。在執(zhí)行第二版本圖500的情況下,數(shù)據(jù)沒有如第一版本圖100的情況那樣從數(shù)據(jù)源102流向過濾組件103。作為代替,來自利用測試源502的測試源定義201中的布局參數(shù)212所標(biāo)識的源文件的數(shù)據(jù)流向過濾組件103。

      在收集組件112的輸出和輸出數(shù)據(jù)宿組件114的輸入之間的流118中配置探測器插入504。該插入的位置是基于探測器定義213中的上游端口216和下游端口218(圖2)。在執(zhí)行第二版本圖500的情況下,利用探測器插入504來監(jiān)測并存儲從收集組件112流向輸出數(shù)據(jù)宿組件114的數(shù)據(jù)。如上所述,為了再次執(zhí)行可執(zhí)行圖,對圖進(jìn)行重新指定和重新編譯,并且要重新執(zhí)行可執(zhí)行圖。從可執(zhí)行圖的一次執(zhí)行起直到可執(zhí)行圖的下次執(zhí)行為止,沒有保存信息。例如,如果要再次執(zhí)行可執(zhí)行圖,則將利用相同的數(shù)據(jù)重新填充探測器插入504。

      在圖5a的示例中,沿著流118流動的數(shù)據(jù)被探測器插入504和輸出數(shù)據(jù)宿組件114這兩者接收到。參考圖5b,在一些示例中,第二版本圖可以包括探測器插入其中該探測器插入使向輸出數(shù)據(jù)宿組件114的流中斷,使得數(shù)據(jù)被探測器插入接收到而沒有流向輸出數(shù)據(jù)宿組件114。

      在圖5a和5b的示例中,第二版本圖500、包括測試源插入502(或)和探測器插入504(或)這兩者。在一些示例中,第二版本圖可以包括多個(gè)測試源插入和多個(gè)探測器插入。參考圖5c,在一些示例中,第二版本圖可以包括一個(gè)或多個(gè)測試源插入但不包括探測器插入。參考圖5d,在一些示例中,第二版本圖可以包括一個(gè)或多個(gè)探測器插入但不包括測試源插入。

      圖7示出用于利用保存狀態(tài)管理器708在保存狀態(tài)模式中執(zhí)行插入定義的示例系統(tǒng)。在該示例中,客戶端702生成或引用圖704和用于定義插入的覆蓋文件706(例如,覆蓋規(guī)范)。例如,覆蓋文件706可以是圖2的覆蓋規(guī)范200。保存狀態(tài)儲存庫710由保存狀態(tài)管理器708和編譯器712來管理。保存狀態(tài)管理器708還可以識別保存狀態(tài)數(shù)據(jù)位于保存狀態(tài)儲存庫710內(nèi)的何處。利用編譯器712對圖704進(jìn)行編譯。編譯器712考慮覆蓋文件706并且創(chuàng)建包括覆蓋文件706所定義的插入的第二版本圖。然后,可以執(zhí)行該第二版本圖。在一些示例中,編譯和執(zhí)行同時(shí)發(fā)生。保存狀態(tài)模式與單執(zhí)行模式的不同之處在于:保存狀態(tài)模式使得能夠在執(zhí)行之間保存信息的同時(shí),多次執(zhí)行可執(zhí)行圖。例如,參考圖5a,如果使用保存狀態(tài)模式來執(zhí)行圖2的覆蓋規(guī)范200中所定義的插入,則在第二次執(zhí)行期間可以不必重新填充在第一次執(zhí)行第二版本圖時(shí)所填充的探測器插入504。在一些示例中,由于探測器插入504實(shí)質(zhì)是將數(shù)據(jù)插入到圖中的收集組件112的輸出和輸出數(shù)據(jù)宿組件114的輸入之間的流處,因此在第二次執(zhí)行時(shí)探測器插入504可以在內(nèi)部變換為測試源。

      可以駐留在保存狀態(tài)管理器目錄中的保存狀態(tài)管理器708管理保存狀態(tài)??梢员4嬖诒4鏍顟B(tài)儲存庫710中的信息的示例包括與探測器插入有關(guān)的信息、與測試源插入有關(guān)的信息、與覆蓋文件706有關(guān)的信息和與圖組件相關(guān)聯(lián)的參數(shù)(例如,屬性)等。

      在一些示例中,在執(zhí)行可執(zhí)行圖時(shí),僅執(zhí)行圖的特定部分。即,僅執(zhí)行圖的特定組件。在一些示例中,執(zhí)行比圖的所有組件少的組件??蓤?zhí)行圖可以僅執(zhí)行將會影響插入的組件。例如,可執(zhí)行圖可以僅執(zhí)行圖中的所定義的探測器插入監(jiān)測并存儲數(shù)據(jù)所需的部分。在一些示例中,可能不必執(zhí)行最下游探測器的下游的組件。在一些示例中,第二版本圖是整個(gè)原始圖的第二版本。在一些示例中,第二版本圖是整個(gè)原始圖的僅一部分的第二版本、例如該圖的僅與所定義插入有關(guān)的部分的第二版本。

      在一些示例中,在第一次執(zhí)行可執(zhí)行圖時(shí)填充探測器。在執(zhí)行之間,可以改變圖組件中的一個(gè)或多個(gè)圖組件的參數(shù)。組件的參數(shù)定義了組件如何工作。可以追蹤與組件相關(guān)聯(lián)的參數(shù),使得編譯器712可以確定在組件中何時(shí)發(fā)生參數(shù)變化。最后值表追蹤與圖組件相關(guān)聯(lián)的參數(shù)。在運(yùn)行可執(zhí)行圖時(shí),將最后值表與組件的當(dāng)前參數(shù)進(jìn)行比較以判斷在運(yùn)行之間任何參數(shù)是否發(fā)生改變。在發(fā)生參數(shù)變化的情況下,該變化可能會或者可能不會影響探測器所存儲的數(shù)據(jù)。編譯器712判斷組件和變化是否影響下次執(zhí)行可執(zhí)行圖時(shí)探測器將存儲的數(shù)據(jù)。如果探測器將存儲的數(shù)據(jù)受到該變化影響,則在下次執(zhí)行可執(zhí)行圖期間,重新執(zhí)行改變后的組件以及駐留于該改變后的組件和探測器之間的流上的組件。換句話說,如果改變后的組件影響組件的執(zhí)行并且該組件影響探測器所存儲的數(shù)據(jù),則再次執(zhí)行該改變后的組件和探測器之間的組件。如果探測器將存儲的數(shù)據(jù)不會受到該變化影響,則可以不必重新執(zhí)行任何組件。

      圖8示出可以使用調(diào)試技術(shù)的示例數(shù)據(jù)處理系統(tǒng)800。該系統(tǒng)800包括數(shù)據(jù)源802,其中該數(shù)據(jù)源802可以包括諸如存儲裝置或者至線上數(shù)據(jù)流的連接等的一個(gè)或多個(gè)數(shù)據(jù)源,其中該一個(gè)或多個(gè)數(shù)據(jù)源各自可以以各種格式(例如,數(shù)據(jù)庫表、電子表格文件、非結(jié)構(gòu)文本(flattext)文件或大型機(jī)所使用的原本格式)中的任何格式來存儲或提供數(shù)據(jù)。執(zhí)行環(huán)境804和開發(fā)環(huán)境818例如可以在諸如某個(gè)版本的unix操作系統(tǒng)等的適當(dāng)?shù)牟僮飨到y(tǒng)的控制下安裝在一個(gè)或多個(gè)通用計(jì)算機(jī)上。例如,執(zhí)行環(huán)境804可以包括包含使用多個(gè)中央處理單元(cpu)或多個(gè)處理器內(nèi)核的計(jì)算機(jī)系統(tǒng)的結(jié)構(gòu)的多節(jié)點(diǎn)并行計(jì)算環(huán)境,可以是本地的(例如,諸如對稱多處理(smp)計(jì)算機(jī)等的多處理器系統(tǒng))或本地分布式的(例如,作為集群所連接的多個(gè)處理器或大規(guī)模并行處理(mpp)系統(tǒng))、或者遠(yuǎn)程或遠(yuǎn)程分布式的(例如,經(jīng)由局域網(wǎng)(lan)和/或廣域網(wǎng)(wan)連接的多個(gè)處理器)、或者它們的任何組合。

      執(zhí)行環(huán)境804從數(shù)據(jù)源802讀取數(shù)據(jù)并且生成輸出數(shù)據(jù)。提供數(shù)據(jù)源802的存儲裝置相對于執(zhí)行環(huán)境804可以是本地的,例如存儲在連接至安裝有執(zhí)行環(huán)境804的計(jì)算機(jī)的存儲介質(zhì)(例如,硬盤驅(qū)動器808)上,或者相對于執(zhí)行環(huán)境804可以是遠(yuǎn)程的,例如安裝在經(jīng)由(例如云計(jì)算基礎(chǔ)設(shè)施所提供的)遠(yuǎn)程連接與安裝有執(zhí)行環(huán)境804的計(jì)算機(jī)進(jìn)行通信的遠(yuǎn)程系統(tǒng)(例如,大型機(jī)110)上。數(shù)據(jù)源802可以包含測試源定義(例如,圖2的測試源定義201)中所定義的數(shù)據(jù)。即,測試源定義201的布局參數(shù)212可以指向數(shù)據(jù)源802中的源文件的位置。

      輸出數(shù)據(jù)可被存儲回至數(shù)據(jù)源802中或者存儲回至執(zhí)行環(huán)境804可訪問的數(shù)據(jù)存儲系統(tǒng)816中,或者被使用。開發(fā)環(huán)境818也可以訪問數(shù)據(jù)存儲系統(tǒng)816,其中在開發(fā)環(huán)境818中,開發(fā)人員820能夠開發(fā)、調(diào)試并測試圖。在一些實(shí)現(xiàn)中,開發(fā)環(huán)境818是用于開發(fā)作為圖的應(yīng)用程序的系統(tǒng),其中這些圖包括頂點(diǎn)(表示數(shù)據(jù)處理組件或數(shù)據(jù)集),并且這些頂點(diǎn)通過頂點(diǎn)之間的定向流(directedflow)(表示工作元素(即,數(shù)據(jù))的流)相連接。例如,在標(biāo)題為“managingparametersforgraph-basedapplications”的美國公開號2007/0011668中更詳細(xì)地說明了這種環(huán)境。

      簡單的數(shù)據(jù)流圖可以處理通過流連接至諸如過濾組件等的數(shù)據(jù)處理元素的輸入數(shù)據(jù)集。過濾組件通過流連接至輸出數(shù)據(jù)集。數(shù)據(jù)集例如可以包括用于提供數(shù)據(jù)(例如,輸入數(shù)據(jù)集)或接收數(shù)據(jù)(例如,輸出數(shù)據(jù)集)以供數(shù)據(jù)流圖所進(jìn)行的計(jì)算用的文件或數(shù)據(jù)庫表??梢詫?shù)據(jù)流圖中利用“流”表示的數(shù)據(jù)的流組織成離散的數(shù)據(jù)元素。例如,這些元素可以包括來自被組織成記錄(或行)和字段(或列)的數(shù)據(jù)集的記錄。描述與記錄中的值相對應(yīng)的字段和數(shù)據(jù)類型的序列的元數(shù)據(jù)被稱為“記錄格式”。圖中的組件和數(shù)據(jù)集具有用于連接至流的輸入和/或輸出端口。流的“源端”與輸入數(shù)據(jù)集的輸出端口并且與過濾組件的輸出端口相連接。流的“宿端”與過濾組件的輸入端口并且與輸出數(shù)據(jù)集的輸入端口相連接。數(shù)據(jù)集或組件的輸入或輸出端口與元數(shù)據(jù)(諸如流入端口或從端口流出的數(shù)據(jù)所用的記錄格式等)相關(guān)聯(lián)??梢允褂门c形成“子圖”的流互連的其它組件來實(shí)現(xiàn)圖中所使用的組件。

      在標(biāo)題為“executingcomputationsexpressedasgraphs”的美國專利5,966,072中說明了用于執(zhí)行這種基于圖的計(jì)算的系統(tǒng)。根據(jù)該系統(tǒng)所制作的圖提供用于將信息輸入至圖組件所表示的個(gè)別處理或從圖組件所表示的個(gè)別處理獲得信息的方法、用于在處理之間移動信息的方法以及用于定義處理的運(yùn)行順序的方法。該系統(tǒng)包括用于從任何可用方法中選取處理間通信方法的算法(例如,與圖的流相對應(yīng)的通信路徑可以使用tcp/ip或unix域套接字或者使用共享存儲器在處理之間傳遞數(shù)據(jù))。

      開發(fā)環(huán)境818包括用于存儲源代碼的代碼儲存庫822。在一些示例中,可以由例如經(jīng)由用戶接口有權(quán)訪問開發(fā)環(huán)境的開發(fā)人員820來開發(fā)源代碼和覆蓋規(guī)范(例如,圖2的覆蓋規(guī)范200)。在一些示例中,源代碼和覆蓋規(guī)范例如是由上述的分析引擎300和插入引擎306自動確定的。在一些示例中,圖和覆蓋規(guī)范可以存儲在代碼儲存庫822中。在一些示例中,圖存儲在代碼儲存庫822中,并且覆蓋規(guī)范存儲在單獨(dú)的覆蓋儲存庫824中。

      代碼儲存庫822和覆蓋儲存庫824其中之一或這兩者可以與編譯器826進(jìn)行通信。編譯器826可以將第一版本圖和覆蓋規(guī)范(例如,圖2的覆蓋規(guī)范200)編譯成可執(zhí)行的第二版本圖828。例如,編譯器可以接受覆蓋規(guī)范作為輸入。對一個(gè)或多個(gè)插入進(jìn)行處理并且將該一個(gè)或多個(gè)插入以各自與覆蓋規(guī)范中所包含的插入定義相對應(yīng)的對象的形式插入圖中??梢岳眯薷膱D(例如,圖5a的第二版本圖500)來從視覺上表示第二版本圖828??梢栽诘诙姹緢D500中表示插入對象。

      開發(fā)環(huán)境818可以包括測試執(zhí)行環(huán)境830,其中該測試執(zhí)行環(huán)境830用于執(zhí)行第二版本圖828。例如,一旦利用編譯器826對圖進(jìn)行了編譯,則可以執(zhí)行第二版本圖828。執(zhí)行第二版本圖828可以包括執(zhí)行與第二版本圖828的組件、插入和定向流相關(guān)聯(lián)的計(jì)算作為組件之間的數(shù)據(jù)流(例如,工作元素或數(shù)據(jù)記錄)。在一些示例中,測試執(zhí)行環(huán)境830在無需修改代碼儲存庫822中所存儲的第一版本圖的源代碼或者覆蓋儲存庫824中所存儲的源代碼的情況下,執(zhí)行第二版本圖828。測試執(zhí)行環(huán)境830可以是經(jīng)由開發(fā)環(huán)境818的接口可訪問的,或者可以具有其自己的接口。該接口可被配置為顯示與執(zhí)行有關(guān)的信息。該接口還可被配置為顯示與插入有關(guān)的信息(例如,探測器正監(jiān)測并保存的數(shù)據(jù)、或者測試源正插入的數(shù)據(jù))。測試執(zhí)行環(huán)境830可以允許開發(fā)人員820多次執(zhí)行第二版本圖828并且在執(zhí)行之間修改第二版本圖828的多個(gè)方面。

      在一些示例中,開發(fā)人員指導(dǎo)圖的插入和編譯。例如,開發(fā)人員820從代碼儲存庫822中選擇圖1的第一版本圖100。開發(fā)人員820還從覆蓋儲存庫824中選擇圖2的覆蓋規(guī)范200。在一些示例中,代替選擇覆蓋規(guī)范200,開發(fā)人員820可以從覆蓋儲存庫824內(nèi)的各種覆蓋規(guī)范中選擇插入定義。開發(fā)人員820指示編譯器826基于第一版本圖100和覆蓋規(guī)范200來對第二版本圖828進(jìn)行編譯。

      在一些示例中,插入可以是自動插入的。例如,如上所述,例如通過識別不具有傳入連接或不具有傳出連接的組件來自動識別圖100中的數(shù)據(jù)源和輸出數(shù)據(jù)宿。自動將所識別的數(shù)據(jù)源和輸出數(shù)據(jù)宿與在圖100的調(diào)試期間要被插入替換的數(shù)據(jù)源和輸出數(shù)據(jù)宿的列表進(jìn)行比較。例如,該列表可以由開發(fā)人員820提供。根據(jù)該列表來針對圖100的數(shù)據(jù)源和輸出數(shù)據(jù)宿自動創(chuàng)建覆蓋規(guī)范。然后,自動編譯第二版本圖。

      在一些示例中,在執(zhí)行之后,開發(fā)人員820可以評價(jià)輸出到探測器插入504中的數(shù)據(jù)。在必要的情況下,開發(fā)人員820可以仍然使用來自測試源502的相同輸入數(shù)據(jù),來對第一版本圖100作出改變并且重新執(zhí)行改變后的第一版本圖100。通過使輸入數(shù)據(jù)在圖的多輪執(zhí)行內(nèi)保持相同,開發(fā)人員820可以將從改變后的第一版本圖輸出的數(shù)據(jù)與先前輸出的數(shù)據(jù)進(jìn)行比較,以判斷第一版本圖是否正按照期望進(jìn)行。

      在一些示例中,在執(zhí)行期間或在執(zhí)行之后,開發(fā)人員820可以觀察與第二版本圖828的執(zhí)行及其組件、插入和流有關(guān)的信息。例如,返回參考圖5a,開發(fā)人員820可以觀察到探測器插入504所監(jiān)測并存儲的數(shù)據(jù)不正確或出乎意料。開發(fā)人員820可以從覆蓋儲存庫824中選擇用于定義要插入在重定格式組件108和收集組件112之間的流中的探測器的探測器插入定義以及用于定義要插入在按表達(dá)式過濾組件和收集組件112之間的流中的探測器的探測器插入定義。開發(fā)人員820可以分析這兩個(gè)探測器所收集到的數(shù)據(jù),以判斷是來自重定格式組件108的數(shù)據(jù)還是來自按表達(dá)式過濾組件110的數(shù)據(jù)正導(dǎo)致從收集組件112輸出的數(shù)據(jù)不正確。

      繼續(xù)該示例,假定開發(fā)人員820判斷為來自按表達(dá)式過濾組件110的數(shù)據(jù)不正確。代替調(diào)試按表達(dá)式過濾組件110的上游的所有組件(例如,過濾組件103、排序組件104和復(fù)制組件106)以判斷不正確數(shù)據(jù)的原因,開發(fā)人員820可以選擇將正確數(shù)據(jù)(例如,預(yù)期從按表達(dá)式過濾組件110輸出的數(shù)據(jù))插入按表達(dá)式過濾組件110和收集組件112之間的流中。開發(fā)人員820可以從覆蓋儲存庫824中選擇用于定義要插入在按表達(dá)式過濾組件110和收集組件112之間的流中的測試源的測試源插入定義。如果開發(fā)人員820關(guān)注對按表達(dá)式過濾組件110的下游的第二版本圖500的組件進(jìn)行調(diào)試,則該方法可以是適當(dāng)?shù)摹?/p>

      在一些示例中,覆蓋規(guī)范沒有被作為文件永久地存儲在代碼儲存庫822或覆蓋儲存庫824中。相反,通常將包括在覆蓋文件中的信息(例如,插入定義)是由開發(fā)人員820(例如,經(jīng)由用戶接口)所開發(fā)的、或者是由分析引擎300和插入引擎306自動確定的并暫時(shí)存儲在存儲器中。然后,將覆蓋信息傳遞至編譯器(例如,圖6的608)或保存狀態(tài)管理器(例如,圖7的708)。

      圖9是示出調(diào)試過程900的流程圖。接收到第一版本圖(例如,圖1的圖100)(902)。例如,第一版本圖可被接收到處理器可訪問的短期存儲器中。第一版本圖100包括組件和流。組件表示針對數(shù)據(jù)記錄所進(jìn)行的操作,并且流表示組件之間的數(shù)據(jù)記錄的流。這些組件可以包括圖1所示的過濾組件103、排序組件104、復(fù)制組件106、重定格式組件108、按表達(dá)式過濾組件110和收集組件112。這些流可以包括圖1所示的復(fù)制-重定格式流116和收集-輸出數(shù)據(jù)宿流118。

      接收到用于定義一個(gè)或多個(gè)插入的覆蓋規(guī)范(904)。在一些示例中,覆蓋規(guī)范是從開發(fā)人員或測試人員接收到的。在一些示例中,例如如上所述,覆蓋規(guī)范是自動定義的。覆蓋規(guī)范可以是圖2所示的覆蓋規(guī)范200。覆蓋規(guī)范可以包括一個(gè)或多個(gè)插入定義(例如,測試源定義201和探測器定義213)。插入定義可以包括(測試源定義所用的)名稱、上游端口、下游端口、插入類型、原型路徑和布局參數(shù)。所定義的各個(gè)插入可以與圖100的流相關(guān)聯(lián)。插入可以采取探測器或測試源的形式。采用圖的組件的形式的插入的示例包括圖5a的測試源插入502和探測器插入504。例如,測試源插入502與圖100的數(shù)據(jù)庫-過濾流116相關(guān)聯(lián),并且探測器插入504與圖100的收集-輸出數(shù)據(jù)宿流118相關(guān)聯(lián)。

      生成各自與所定義的插入其中之一相對應(yīng)的一個(gè)或多個(gè)對象(906)。這些對象可以是圖的組件。對象的示例包括圖5a的測試源插入502和探測器插入504。例如,測試源插入502與圖100的復(fù)制-重定格式流116相關(guān)聯(lián),并且探測器插入504與圖100的收集-輸出數(shù)據(jù)宿流118相關(guān)聯(lián)。

      生成第二版本的至少一部分的圖(908),其中該圖包括圖100的該部分的組件和流中的至少一些組件和流以及所生成的一個(gè)或多個(gè)對象。在一些示例中,第二版本圖是原始圖100的被修改為包括圖100的該部分的組件和流中的至少一些組件和流以及所生成的一個(gè)或多個(gè)對象的副本??梢岳眯薷暮蟮膱D(例如,圖5a的第二版本圖500)來從視覺上表示第二版本圖。將各對象插入與對應(yīng)于該對象的所定義插入相關(guān)聯(lián)的流處。例如,參考第二版本圖500,將測試源插入502插入復(fù)制-重定格式流116中,并且將探測器插入504插入收集-輸出數(shù)據(jù)宿流118中。盡管所生成的插入對象以及圖100的數(shù)據(jù)處理組件可以出現(xiàn)在第二版本圖500中,但第一版本圖100(或包含第一版本圖100的文件)沒有被修改。

      盡管描述了可以對圖和覆蓋規(guī)范進(jìn)行編譯以創(chuàng)建包括覆蓋文件所定義的插入的第二版本圖的編譯器(例如,圖6的編譯器608和圖7的編譯器712),但在一些實(shí)施例中,沒有對圖和覆蓋規(guī)范進(jìn)行編譯。例如,可以在無需編譯的情況下直接執(zhí)行圖和覆蓋規(guī)范。解釋器可以通過將各語句翻譯成已編譯成機(jī)器代碼的一個(gè)或多個(gè)子例程的序列來直接執(zhí)行圖和覆蓋規(guī)范。

      盡管描述了采用探測器和測試源的形式的插入,但在一些實(shí)施例中,插入可以采用其它形式。插入可以廣泛地用于將數(shù)據(jù)注入圖的給定點(diǎn)并從圖的給定點(diǎn)提取數(shù)據(jù)。例如,插入可被設(shè)計(jì)成監(jiān)測通過圖的流的數(shù)據(jù)的質(zhì)量。如果數(shù)據(jù)質(zhì)量低于閾值,則用戶可以接收自動警報(bào)。在美國申請序列號14/715,904(代理人案號07470-0313001)中可以發(fā)現(xiàn)關(guān)于插入的更多說明。

      此外,盡管在圖的上下文中描述了插入,但在一些實(shí)施例中,可以將插入與其它可執(zhí)行應(yīng)用程序相結(jié)合地使用。例如,可以通過針對通用的可執(zhí)行應(yīng)用程序的自動化分析來識別該應(yīng)用程序所用的數(shù)據(jù)源和輸出數(shù)據(jù)宿。所識別的數(shù)據(jù)源和輸出數(shù)據(jù)宿可以被測試源和探測器分別替換。這樣,可執(zhí)行應(yīng)用程序可以處理來自測試源的數(shù)據(jù)并向探測器輸出數(shù)據(jù)。該結(jié)構(gòu)對于測試或調(diào)試可執(zhí)行應(yīng)用程序而言可以是有用的。

      上述的調(diào)試方法可以使用執(zhí)行適當(dāng)軟件的計(jì)算系統(tǒng)來實(shí)現(xiàn)。例如,該軟件可以包括在一個(gè)或多個(gè)編程或可編程計(jì)算系統(tǒng)(可以具有諸如分布式、客戶端/服務(wù)器或網(wǎng)格等的各種架構(gòu))上執(zhí)行的一個(gè)或多個(gè)計(jì)算機(jī)程序中的過程,其中該一個(gè)或多個(gè)編程或可編程計(jì)算系統(tǒng)各自包括至少一個(gè)處理器、至少一個(gè)數(shù)據(jù)存儲系統(tǒng)(包括易失性和/或非易失性存儲器和/或存儲元件)、(用于使用至少一個(gè)輸入裝置或端口接收輸入、并且用于使用至少一個(gè)輸出裝置或端口提供輸出的)至少一個(gè)用戶接口。該軟件可以包括例如提供與圖的設(shè)計(jì)、結(jié)構(gòu)和執(zhí)行相關(guān)的服務(wù)的更大程序的一個(gè)或多個(gè)模塊。該程序的模塊(例如,圖的元素)可以實(shí)現(xiàn)為符合數(shù)據(jù)儲存庫中所存儲的數(shù)據(jù)模型的數(shù)據(jù)結(jié)構(gòu)或其它有組織的數(shù)據(jù)。

      可以將軟件設(shè)置在諸如(例如,利用通用或?qū)S糜?jì)算系統(tǒng)或裝置可讀取的)cd-rom或其它計(jì)算機(jī)可讀介質(zhì)等的有形非暫時(shí)性介質(zhì)上、或者經(jīng)由網(wǎng)絡(luò)的通信介質(zhì)(例如,以編碼在傳播信號中的形式)傳遞至執(zhí)行該軟件的計(jì)算系統(tǒng)的有形非暫時(shí)性介質(zhì)??梢栽趯S糜?jì)算機(jī)上、或者使用諸如協(xié)處理器或現(xiàn)場可編程門陣列(fpga)或?qū)S眉呻娐?asic)等的專用硬件來進(jìn)行該處理的一部分或全部??梢砸岳貌煌挠?jì)算元件來進(jìn)行軟件所指定的計(jì)算的不同部分的分布式方式來實(shí)現(xiàn)該處理。優(yōu)選將這種計(jì)算機(jī)程序各自存儲在通用或?qū)S每删幊逃?jì)算機(jī)可訪問的存儲裝置的計(jì)算機(jī)可讀存儲介質(zhì)(例如,固態(tài)存儲器或介質(zhì)、或者磁性或光學(xué)介質(zhì))上或者下載至該計(jì)算機(jī)可讀存儲介質(zhì),以在利用計(jì)算機(jī)讀取存儲裝置介質(zhì)以進(jìn)行這里所述的處理的情況下配置計(jì)算機(jī)并使該計(jì)算機(jī)進(jìn)行工作。本發(fā)明的系統(tǒng)還可被視為作為配置有計(jì)算機(jī)程序的有形非暫時(shí)性介質(zhì)來實(shí)現(xiàn),其中如此配置成的介質(zhì)使計(jì)算機(jī)以特定的預(yù)定義方式進(jìn)行工作,以進(jìn)行這里所述的處理步驟中的一個(gè)或多個(gè)。

      已經(jīng)說明了本發(fā)明的多個(gè)實(shí)施例。然而,應(yīng)當(dāng)理解,上述說明意圖例示而并非限制由所附權(quán)利要求書的范圍所限定的本發(fā)明的范圍。因此,其它實(shí)施例也在所附權(quán)利要求書的范圍內(nèi)。例如,可以在沒有背離本發(fā)明的范圍的情況下進(jìn)行各種變形。另外,上述步驟中的一部分可以是與順序無關(guān)的,因而可以以與所描述的順序不同的順序來進(jìn)行。

      例如,除上述特征外或者作為上述特征的替代,說明以下實(shí)施例:

      實(shí)施例1涉及一種方法,該方法包括利用處理器來分析第一版本的計(jì)算機(jī)程序。所述分析包括識別所述第一版本的計(jì)算機(jī)程序中所包括的第一數(shù)據(jù)處理元素。所述第一數(shù)據(jù)處理元素引用位于所述第一版本的計(jì)算機(jī)程序外部的第一數(shù)據(jù)源。所述方法還包括生成表示與所述第一數(shù)據(jù)源不同的第二數(shù)據(jù)源的數(shù)據(jù)源元素。所述方法還包括生成第二版本的計(jì)算機(jī)程序。所述第二版本的計(jì)算機(jī)程序包括所生成的數(shù)據(jù)源元素和基于所述第一數(shù)據(jù)處理元素的第二數(shù)據(jù)處理元素。在所述第二版本的計(jì)算機(jī)程序中,所述第二數(shù)據(jù)處理元素引用所生成的數(shù)據(jù)源元素。

      實(shí)施例2涉及實(shí)施例1,其中,所述方法還包括:確定所述第二數(shù)據(jù)源的位置。

      實(shí)施例3涉及前述實(shí)施例中的任一項(xiàng),其中,確定所述第二數(shù)據(jù)源的位置包括:接收表示所述位置的輸入。

      實(shí)施例4涉及前述實(shí)施例中的任一項(xiàng),其中,所述方法還包括:在用戶接口中呈現(xiàn)所識別的第一數(shù)據(jù)處理元素、所述第一數(shù)據(jù)源或這兩者的標(biāo)識符。

      實(shí)施例5涉及實(shí)施例4,其中,所述方法還包括:接收所識別的第一數(shù)據(jù)處理元素、所述第一數(shù)據(jù)源或這兩者的選擇。

      實(shí)施例6涉及前述實(shí)施例中的任一項(xiàng),其中,分析所述第一版本的計(jì)算機(jī)程序包括:分析向所述第一版本的計(jì)算機(jī)程序中的數(shù)據(jù)處理元素至少之一的輸入流。

      實(shí)施例7涉及前述實(shí)施例中的任一項(xiàng),其中,所述方法還包括:在所述計(jì)算機(jī)程序的運(yùn)行時(shí)分析所述第一版本的計(jì)算機(jī)程序。

      實(shí)施例8涉及前述實(shí)施例中的任一項(xiàng),其中,所述計(jì)算機(jī)程序包括圖。

      實(shí)施例9涉及實(shí)施例8,其中,生成所述第二版本的計(jì)算機(jī)程序包括:使所生成的數(shù)據(jù)源元素位于向所述第二數(shù)據(jù)處理元素的輸入流處。

      實(shí)施例10涉及前述實(shí)施例中的任一項(xiàng),其中,來自所述第二數(shù)據(jù)源的數(shù)據(jù)具有與來自所述第一數(shù)據(jù)源的數(shù)據(jù)相同的格式。

      實(shí)施例11涉及前述實(shí)施例中的任一項(xiàng),其中,生成數(shù)據(jù)源元素包括:針對所生成的數(shù)據(jù)源元素定義覆蓋規(guī)范。

      實(shí)施例12涉及前述實(shí)施例中的任一項(xiàng),其中,所述方法還包括:利用基于來自所述第一數(shù)據(jù)源的數(shù)據(jù)的數(shù)據(jù)來填充所述第二數(shù)據(jù)源。

      實(shí)施例13涉及前述實(shí)施例中的任一項(xiàng),其中,在所述第一版本的計(jì)算機(jī)程序中,第三數(shù)據(jù)處理元素引用位于所述第一版本的計(jì)算機(jī)程序外部的第一數(shù)據(jù)目的地。在所述第二版本的計(jì)算機(jī)程序中,基于所述第三數(shù)據(jù)處理元素的第四數(shù)據(jù)處理元素引用與所述第一數(shù)據(jù)目的地不同的第二數(shù)據(jù)目的地。

      實(shí)施例14涉及前述實(shí)施例中的任一項(xiàng),其中,所述方法還包括:識別所述第一版本的計(jì)算機(jī)程序中所包括的第三數(shù)據(jù)處理元素。所述第三數(shù)據(jù)處理元素引用位于所述第一版本的計(jì)算機(jī)程序外部的第一數(shù)據(jù)目的地。所述方法還包括:生成表示與所述第一數(shù)據(jù)目的地不同的第二數(shù)據(jù)目的地的輸出元素。所述第二版本的計(jì)算機(jī)程序包括所生成的輸出元素和基于所述第三數(shù)據(jù)處理元素的第四數(shù)據(jù)處理元素。在所述第二版本的計(jì)算機(jī)程序中,所述第四數(shù)據(jù)處理元素引用所生成的輸出元素。

      實(shí)施例15涉及實(shí)施例14,其中,所述方法還包括:確定所述第二數(shù)據(jù)目的地的位置。

      實(shí)施例16涉及實(shí)施例15,其中,確定所述第二數(shù)據(jù)目的地的位置包括:接收表示所述位置的輸入。

      實(shí)施例17涉及前述實(shí)施例中的任一項(xiàng),其中,所述方法還包括:執(zhí)行所述第二版本的計(jì)算機(jī)程序。

      實(shí)施例18涉及前述實(shí)施例中的任一項(xiàng),其中,執(zhí)行所述第二版本的計(jì)算機(jī)程序使得能夠?qū)λ鲇?jì)算機(jī)程序進(jìn)行調(diào)試。

      實(shí)施例19涉及前述實(shí)施例中的任一項(xiàng),其中,生成所述第二版本的至少一部分的計(jì)算機(jī)程序包括:生成所述計(jì)算機(jī)程序的該部分的副本。

      實(shí)施例20涉及實(shí)施例19,其中,所述方法還包括:修改所述計(jì)算機(jī)程序的該部分的副本以包括所生成的數(shù)據(jù)源元素。

      當(dāng)前第1頁1 2 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
      1