失敗代碼變化的識別的制作方法
【專利摘要】公開了識別在具有多個代碼變化的部署管線中的失敗代碼變化的方法。通過對多個代碼變化運行一組測試來測試多個代碼變化,直到多個代碼變化的子集通過這組測試為止。每當子集未能通過這組測試時,多個代碼變化中的至少一個從子集移除?;谕ㄟ^這組測試的子集來確定失敗代碼變化。
【專利說明】失敗代碼變化的識別
【背景技術】
[0001]軟件開發(fā)生命周期使用持續(xù)集成(Cl)和持續(xù)部署(DC)來減少在生產(chǎn)線中花費的時間代碼變化。持續(xù)集成使從特定的源配置管理(SCM)工具接收代碼變化、構造具有代碼變化的可交付使用組件并測試組件的過程自動化。
【專利附圖】
【附圖說明】
[0002]本公開的非限制性例子在參考附于其的附圖閱讀的下面描述中被描述,且并不限制權利要求的范圍。在附圖中,出現(xiàn)在多于一個附圖中的其相同和相似的結構、元件或部分在它們出現(xiàn)所在的附圖中通常用相同或相似的參考符號來標記。在附圖中示出的部件和特征的尺寸主要為了陳述的方便和清楚而被選擇,且不一定是按比例的。參考以下附圖:
圖1示出根據(jù)例子的網(wǎng)絡環(huán)境;
圖2-3示出根據(jù)例子的識別在部署管線中的失敗代碼變化的系統(tǒng)的方框圖;
圖4示出根據(jù)例子的可以與系統(tǒng)一起使用的計算機可讀介質的方框圖;
圖5示出根據(jù)例子的識別在部署管線中的失敗代碼變化的過程的示意圖;以及圖6-7示出根據(jù)例子的識別在部署管線中的失敗代碼變化的方法的流程圖。
【具體實施方式】
[0003]在下面的詳細描述中,參考形成其一部分的附圖,且其中通過特定例子的方式進行示出,本公開可被實施在所述特定例子中。應理解,其它例子可被利用,且結構或邏輯變化可被做出而不偏離本公開的范圍。因此下面的詳細描述不應在限制性的意義上被理解,且本公開的范圍由所附權利要求限定。
[0004]持續(xù)集成(Cl)和持續(xù)部署(⑶)使具有代碼變化的代碼組件的構造、測試和部署自動化。自動化在代碼變化被交付到源配置管理(SCM)工具之后開始。持續(xù)集成使從SCM工具獲取代碼變化、構造可交付使用組件、例如執(zhí)行對組件的構建和單元測試的過程自動化。持續(xù)部署通過將組件自動部署到測試環(huán)境中并對組件執(zhí)行測試來擴展持續(xù)集成。持續(xù)集成促進由不同開發(fā)者進行的代碼變化的進行中集成,并減小由于代碼合并而引起的在測試環(huán)境中的失敗的風險。
[0005]在例子中,提供了識別在具有多個代碼變化的部署管線中的失敗代碼變化的方法。通過對多個代碼變化運行一組測試來測試多個代碼變化,直到多個代碼變化的子集通過這組測試為止。每當子集未能通過這組測試時,多個代碼變化中的至少一個從該子集被移除?;谕ㄟ^這組測試的子集來確定失敗代碼變化。
[0006]短語“代碼變化”指在軟件應用的源代碼中的變化。短語代碼變化也可以指作為代碼組件的部分的代碼變化,代碼組件被構造為持續(xù)集成過程的部分。
[0007]短語“部署管線”指在代碼變化的隊列上串行和/或并行地執(zhí)行的一組動作。例如,部署管線可包括構建代碼、執(zhí)行單元測試、部署代碼、運行自動化測試、對代碼分級、運行端對端測試并部署代碼以生產(chǎn)。
[0008]短語“一組測試”指在模擬環(huán)境中使用代碼變化運行的測試。這組測試可包括測試代碼變化的集成的單元測試和/或具有代碼變化的功能測試。
[0009]短語“失敗代碼變化”指在測試期間的至少一個代碼變化的失敗。例如,多個代碼變化可被組裝或構建成組件,且單元測試可對代碼變化被執(zhí)行。如果一個代碼變化具有錯誤和/或如果代碼變化的組合不一起正確地工作,則單元測試可能失敗。
[0010]圖1示出根據(jù)例子的網(wǎng)絡環(huán)境100。網(wǎng)絡環(huán)境100包括連接測試設備12、部署設備14、客戶端設備16和數(shù)據(jù)儲存器18的鏈路10。測試設備12總地代表測試來自部署設備14的多個代碼變化的任何計算設備或計算設備的組合。部署設備14代表接收代碼變化并在部署管線中部署代碼變化的計算設備。
[0011]客戶端設備16代表配置成經(jīng)由鏈路10與測試設備12和部署設備14交互的計算設備和/或計算設備的組合。交互可包括代表用戶發(fā)送和/或傳輸數(shù)據(jù),例如代碼變化。交互還可包括接收數(shù)據(jù),例如具有代碼變化的軟件應用??蛻舳嗽O備16可以例如是包括使用戶能夠創(chuàng)建和/或編輯軟件應用的代碼的軟件的個人計算設備。
[0012]測試設備12可在測試環(huán)境下對應用中的多個代碼變化運行一組測試以集成多個代碼變化來在軟件應用中使用。這組測試和/或代碼變化可存儲在數(shù)據(jù)儲存器18中。數(shù)據(jù)儲存器18總地代表配置成存儲在其功能的執(zhí)行中可由測試設備12和部署設備14訪問的數(shù)據(jù)的任何存儲器。測試設備12的功能可經(jīng)由鏈路10實現(xiàn),鏈路10將測試設備12連接到部署設備14、客戶端設備16和數(shù)據(jù)儲存器18。
[0013]鏈路10總地代表經(jīng)由電信鏈路、紅外鏈路、射頻鏈路或提供電子通信的任何其它連接器或系統(tǒng)的電纜、無線、光纖或遠程連接中的一個或多個。鏈路10可至少部分地包括內(nèi)聯(lián)網(wǎng)、因特網(wǎng)或這兩者的組合。鏈路10還可包括中間代理、路由器、交換機、負載平衡器坐寸O
[0014]圖2示出識別在具有多個代碼變化的部署管線中的失敗代碼變化的系統(tǒng)100的方框圖。參考圖2,系統(tǒng)200包括測試引擎22和決策引擎24。測試引擎22總地代表對部署管線中的多個代碼變化的子集執(zhí)行一組測試的硬件和/或編程的組合。決策引擎24總地代表確定失敗代碼變化的硬件和/或編程的組合。決策引擎24還指示測試引擎22執(zhí)行這組測試并從該子集移除多個代碼變化中的至少一個,直到子集通過這組測試為止。決策引擎24基于從通過這組測試的子集移除的至少一個代碼變化來確定失敗代碼變化。
[0015]圖3示出根據(jù)進一步例子的在網(wǎng)絡環(huán)境100中的系統(tǒng)200的方框圖。圖3所示的系統(tǒng)200包括測試設備12、部署設備14和數(shù)據(jù)儲存器18。測試設備12被示為包括測試引擎22和決策引擎24。測試設備12連接到從客戶端設備16接收代碼變化36的部署設備
14。使用來自數(shù)據(jù)儲存器18的測試或一組測試38在測試設備12中測試代碼變化36。在代碼變化通過這組測試38之后,部署設備14經(jīng)由部署管線部署經(jīng)測試的代碼變化36。
[0016]測試引擎22對部署管線中的多個代碼變化36的子集執(zhí)行一組測試38。決策引擎24指示測試引擎22執(zhí)行這組測試38。決策引擎24還從多個代碼變化36的子集移除多個代碼變化36中的至少一個,直到該子集通過這組測試38為止。決策引擎24可具有移除代碼變化36的能力和/或可指示例如管線引擎32 (下面討論)的單獨的引擎移除代碼變化36。
[0017]此外,決策引擎24基于從通過這組測試38的子集移除的至少一個代碼變化36確定失敗代碼變化。例如,決策引擎24可識別從子集移除的多個代碼變化36中的至少一個以確定失敗代碼變化。而且,決策引擎24可執(zhí)行比較。例如,當子集在通過這組測試38之前未能通過這組測試38時,決策引擎24可通過比較包含在通過這組測試38的子集中的至少一個代碼變化36與包含在未能通過這組測試38的子集中的至少一個代碼變化36來確定失敗代碼。決策引擎24還可自動傳輸識別失敗代碼變化的消息。
[0018]測試設備12還被示為包括管線引擎32。管線引擎32總地代表創(chuàng)建在部署管線中的多個代碼變化36的子集和/或從該子集移除多個代碼變化中的至少一個的硬件和/或編程的組合。例如,管線引擎32可從決策引擎24接收指令以移除多個代碼變化36中的至少一個。管線引擎32也可從多個代碼變化36創(chuàng)建多個并行測試子集。多個并行測試子集中的每個包括多個代碼變化36的不同排列。測試引擎22可同時測試多個并行測試子集中的每個以確定多個并行測試子集中的哪個通過這組測試38??苫谔幚砥骱?或計算資源的能力來執(zhí)行同時測試。
[0019]部署設備14包括部署引擎34。部署引擎34總地代表在測試環(huán)境下在應用中測試之后部署代碼變化36的硬件和/或編程的組合。部署設備14連接到數(shù)據(jù)儲存器18。數(shù)據(jù)儲存器18例如是存儲代碼變化36和這組測試38的數(shù)據(jù)庫。部署引擎34可與測試引擎
22、決策引擎24和管線引擎36 —起工作以測試在部署管線中的多個代碼變化36的集成。
[0020]圖4不出根據(jù)例子的可以與圖2的系統(tǒng)200 —起使用的計算機可讀介質的方框圖。在圖4中,測試設備12被示為包括存儲器41、處理器42和接口 43。處理器42總地代表配置成執(zhí)行存儲在存儲器41中的程序指令以執(zhí)行各種指定的功能的任何處理器。接口43總地代表使測試設備12能夠經(jīng)由鏈路10與部署設備14通信的任何接口,如在圖1和3中所示的。
[0021]存儲器41被示為包括操作系統(tǒng)44和應用45。操作系統(tǒng)44代表當由處理器42執(zhí)行時用作平臺的程序的集合,應用45可在該平臺上運行。操作系統(tǒng)43的例子包括微軟的Windows?和Linux?的各種版本。應用45代表當由處理器42執(zhí)行時用作識別失敗代碼變化的應用的程序指令。例如,圖4示出測試模塊46、決策模塊47和管線模塊48作為存儲在測試設備12的存儲器41中的可執(zhí)行程序指令。
[0022]參考回圖2-3,測試引擎22、決策引擎24和管線引擎32被描述為硬件和/或編程的組合。如圖4所示,硬件部分可包括處理器42。編程部分可包括操作系統(tǒng)44、應用45和/或其組合。例如,測試模塊46代表當由處理器42執(zhí)行時引起圖2-3的測試引擎22的實現(xiàn)的程序指令。決策模塊47代表當由處理器42執(zhí)行時引起圖2-3的決策引擎24的實現(xiàn)的程序指令。管線模塊48代表當由處理器42執(zhí)行時引起圖2-3的管線引擎32的實現(xiàn)的程序指令。
[0023]測試模塊46、決策模塊47和管線模塊48的編程可以是存儲在包括有形存儲器介質的存儲器41上的處理器可執(zhí)行的指令,且硬件可包括用于執(zhí)行指令的處理器42。存儲器41可存儲程序指令,其當由處理器42執(zhí)行時使處理器42執(zhí)行程序指令。存儲器41可集成在與處理器42相同的設備中,或它可以是單獨的,但是對于該設備和處理器42是可訪問的。
[0024]在一些例子中,程序指令可以是可由處理器42執(zhí)行來使用系統(tǒng)200執(zhí)行方法的安裝封裝的部分。存儲器41可以是便攜式介質,例如CD、DVD或閃速驅動器或由服務器維持的存儲器,安裝封裝可從該服務器被下載和安裝。在一些例子中,程序指令可以是已經(jīng)安裝在服務器上的一個或多個應用的部分。在進一步的例子中,存儲器41可包括集成存儲器,例如硬盤驅動器。
[0025]圖5示出根據(jù)例子的識別失敗代碼變化的過程的示意圖500。圖5示出測試設備12和部署設備14。部署設備14分成持續(xù)集成部分50和持續(xù)部署部分51。持續(xù)集成部分50包括構建50A和單元測試50B步驟。構建50A步驟創(chuàng)建包括代碼變化的組件。持續(xù)部署部分51執(zhí)行組件的自動化測試,其確定具有代碼變化的組件何時就緒以被發(fā)布到軟件應用中的生產(chǎn)中。例如,部署管線53的持續(xù)部署部分51可使用下列步驟將具有代碼變化的組件部署到生產(chǎn):部署到測試51A、應用編程接口 /功能測試51B、部署到分級測試51C、端對端/性能測試5ID和對部署到生產(chǎn)5IE的驗證。
[0026]參考持續(xù)集成部分50,代碼變化集成在組件中可被自動化,這在單元測試50B的結果指示具有代碼變化的測試或一組測試是可接受的或通過測試時將組件發(fā)送到持續(xù)部署部分51。然而,當組件未通過單元測試時,引起失敗的代碼變化使用手動和耗時過程而被確定。如所示的測試設備12可允許導致失敗的代碼變化的自動化識別。例如,當單元測試50B失敗時,測試設備12被啟動。測試設備12然后從部署設備14中的部署管線53復制52在例如管線引擎32中的代碼變化。組件被重建54有從組件移除55的至少一個代碼變化。通過運行57與在重建54的組件上的單元測試50B相同或相似的一組測試來執(zhí)行單元測試56。組件可被重建,且單元測試在例如測試引擎22中被執(zhí)行。
[0027]當單元測試56失敗時,組件被重建54有被移除55的不同代碼變化,且單元測試56被再次執(zhí)行。重建54和單元測試56重復或繼續(xù),直到組件在單元測試56中通過這組測試57。接著基于在通過這組測試57的組件中的代碼變化來確定58失敗代碼變化。例如決策引擎24可比較通過這組測試的組件中的代碼變化與未能通過這組測試的最后一個組件中的代碼變化。失敗代碼變化可接著作為消息59被自動傳輸?shù)介_發(fā)者和/或管理員。失敗代碼變化的檢測58識別包含至少一個失敗代碼變化的單個代碼變化和/或一組或多個代碼變化。
[0028]圖6示出根據(jù)例子的識別在具有多個代碼變化的部署管線中的失敗代碼變化的方法的流程圖600,所述方法例如處理器實現(xiàn)的方法。在塊62中,在部署管線中的多個代碼變化在測試環(huán)境下在應用中被測試,例如在測試引擎中被測試。測試包括對多個代碼變化運行一組測試,直到多個代碼變化的子集通過這組測試為止。測試還包括每當子集未能通過這組測試時從子集移除多個代碼變化中的至少一個。
[0029]可基于多個代碼變化中的至少一個放置在源配置管理工具中時的時間來選擇所移除的多個代碼變化中的至少一個。例如,當每個代碼變化通過源配置管理工具被提交時它可接收時間戳,且與時間戳相關的數(shù)據(jù)可由管線引擎使用來確定哪個代碼變化被移除和/或提供識別信息,例如提交代碼變化的開發(fā)者。額外的數(shù)據(jù)也可與每個代碼變化相關,并可類似地用于確定哪個代碼變化被移除。此外,預定百分比的多個代碼變化可從子集移除,直到子集通過這組測試為止。例如,子集可分成兩半,直到子集通過這組測試為止。在例子中,如果在測試期間從子集移除三次一半代碼變化,則到子集通過這組測試時為止子集如下:測試I)子集中的所有代碼變化,測試2)子集中的一半代碼變化,測試3)子集中的四分之一的代碼變化,以及測試4)子集中的八分之一的代碼變化。
[0030]在塊64中基于通過這組測試的子集確定失敗代碼變化。決策引擎可做出確定并識別失敗代碼變化。失敗代碼變化的確定可包括從子集移除的多個代碼變化中的至少一個的識別。失敗代碼變化的確定還可包括通過這組測試的子集中的多個代碼變化中的至少一個與未能通過這組測試的子集中的多個代碼變化中的至少一個的比較。參考回其中每當子集未能通過單元測試時一半代碼變化被移除的例子,自動化確定失敗代碼變化在測試3和4之間移除的八分之一代碼變化中。在持續(xù)集成期間使用自動化確定節(jié)省了時間和資源。
[0031]該方法還可復制在部署管線中的多個代碼變化以創(chuàng)建子集。而且,多個代碼變化可被復制以創(chuàng)建多個并行測試子集,多個并行測試子集中的每個具有多個代碼變化的不同排列。多個并行測試子集可被同時測試以確定多個并行測試子集中的哪個通過這組測試。通過這組測試的多個并行測試子集然后被比較以確定失敗代碼變化。
[0032]圖7示出識別在具有多個代碼變化的部署管線中的失敗代碼變化的方法的流程圖700,該方法例如處理器實現(xiàn)的方法。例如,該方法可以是存儲在計算機可讀介質上的指令,其在由處理器執(zhí)行時使處理器執(zhí)行該方法。在塊72中,在部署管線中、例如在部署引擎中創(chuàng)建多個代碼變化的子集。在塊74中測試子集。例如,測試可由對子集運行一組測試的測試設備執(zhí)行,并從子集移除多個代碼變化中的至少一個,直到子集通過這組測試為止。在塊76中識別失敗代碼變化?;趶淖蛹瞥亩鄠€代碼變化中的至少一個來識別失敗代碼變化。
[0033]圖1-7幫助說明根據(jù)例子的架構、功能和操作。例子示出各種物理和邏輯部件。所示的各種部件至少部分地被定義為程序、編程或程序指令。每個這樣的部件、其部分或其各種組合可整體或部分地代表包括一個或多個可執(zhí)行指令來實現(xiàn)任何指定的邏輯功能的代碼部分、模塊或段。每個部件或其各種組合可代表實現(xiàn)指定的邏輯功能的電路或多個互連的電路。
[0034]例子可在任何計算機可讀介質中實現(xiàn),以由或結合指令執(zhí)行系統(tǒng)使用,指令執(zhí)行系統(tǒng)例如基于計算機/處理器的系統(tǒng)或ASIC (專用集成電路)或可從計算機可讀介質取出或得到邏輯并執(zhí)行其中包含的指令的其它系統(tǒng)?!坝嬎銠C可讀介質”可以是可包含、存儲或維持程序和數(shù)據(jù)以由或結合指令執(zhí)行系統(tǒng)使用的任何介質。計算機可讀介質可包括很多物理介質中的任一個,例如,諸如電子、磁性、光、電磁或半導體介質。適當?shù)挠嬎銠C可讀介質的更具體的例子包括但不限于便攜式磁計算機磁盤,例如軟盤或硬盤驅動器、隨機存取存儲器(RAM)、只讀存儲器(ROM)、可擦除可編程只讀存儲器或便攜式光盤。
[0035]雖然圖6-7的流程圖示出特定的執(zhí)行順序,但是執(zhí)行順序可不同于所示的執(zhí)行順序。例如,塊的執(zhí)行順序可相對于所示的順序被弄亂。此外,連續(xù)示出的塊可被同時或部分同時地執(zhí)行。所有這樣的變型在本發(fā)明的范圍內(nèi)。
[0036]本公開使用其例子的非限制性詳細描述被描述,且并不意圖限制本公開的范圍。應理解,關于一個例子描述的特征和/或操作可與其它例子一起使用,且不是本公開的所有例子都具有在特定的附圖中示出或關于例子之一描述的所有特征和/或操作。本領域的技術人員將想到所描述的例子的變型。此外,術語“包括”、“包含”、“具有”及其詞形變化當在本公開和/或權利要求中被使用時應意指“包括但不一定限于”。
[0037]注意,上述例子中的一些可包括可能對本公開不是必不可少且意圖是示例性的結構、動作或結構和動作的細節(jié)。如在本領域中已知的,本文描述的結構和動作可由執(zhí)行相同功能的等同物代替,即使結構或動作是不同的。因此,本公開的范圍僅由如在權利要求中使用的元件和限制來限制。
【權利要求】
1.一種識別在具有多個代碼變化的部署管線中的失敗代碼變化的計算機實現(xiàn)的方法,所述方法包括: 在測試環(huán)境下在應用中測試在所述部署管線中的所述多個代碼變化,測試包括:對所述多個代碼變化運行一組測試,直到所述多個代碼變化的子集通過所述一組測試為止,以及 每當子集未能通過所述一組測試時,從子集移除所述多個代碼變化中的至少一個;以及 基于通過所述一組測試的子集來確定失敗代碼變化。
2.如權利要求1所述的方法,其中確定失敗代碼變化包括識別從子集移除的所述多個代碼變化中的至少一個。
3.如權利要求1所述的方法,其中確定失敗代碼變化包括比較通過所述一組測試的子集中的所述多個代碼變化中的至少一個與未能通過所述一組測試的子集中的所述多個代碼變化中的至少一個。
4.如權利要求1所述的方法,其中移除所述多個代碼變化中的至少一個還包括基于所述多個代碼變化中的至少一個放置在源配置管理工具中時的時間來選擇要移除的所述多個代碼變化中的至少一個。
5.如權利要求 1所述的方法,其中移除所述多個代碼變化中的至少一個還包括從子集移除預定百分比的所述多個代碼變化,直到子集通過所述一組測試為止。
6.如權利要求1所述的方法,還包括復制在所述部署管線中的所述多個代碼變化中的至少一個以創(chuàng)建子集。
7.如權利要求1所述的方法,還包括從所述部署管線中的所述多個代碼變化創(chuàng)建多個并行測試子集,所述多個并行測試子集中的每個包括所述多個代碼變化的不同排列。
8.如權利要求7所述的方法,其中測試所述多個代碼變化還包括: 同時測試所述多個并行測試子集中的每個以確定所述多個并行測試子集中的哪個通過所述一組測試;以及 比較通過所述一組測試的多個并行測試子集以確定失敗代碼變化。
9.一種識別在具有多個代碼變化的部署管線中的失敗代碼變化的系統(tǒng),所述系統(tǒng)包括: 測試引擎,用于對在所述部署管線中的所述多個代碼變化的子集執(zhí)行一組測試;以及 決策引擎,用于: 指示所述測試引擎執(zhí)行所述一組測試, 從所述多個代碼變化的子集移除所述多個代碼變化中的至少一個,直到子集通過所述一組測試為止,以及 基于從通過所述一組測試的子集移除的至少一個代碼變化來確定失敗代碼變化。
10.如權利要求9所述的系統(tǒng),其中所述決策引擎通過比較以下來確定失敗代碼變化:包含在通過所述一組測試的子集中的至少一個代碼變化與當子集在通過所述一組測試之前未能通過所述一組測試時包含在未能通過所述一組測試的子集中的至少一個代碼變化。
11.如權利要求9所述的系統(tǒng),還包括管線引擎,用于從子集移除所述多個代碼變化中的至少一個。
12.如權利要求11所述的系統(tǒng),其中所述管線引擎從所述多個代碼變化創(chuàng)建多個并行測試子集,所述多個并行測試子集中的每個包括所述多個代碼變化的不同排列。
13.如權利要求12所述的系統(tǒng),其中所述測試引擎同時測試所述多個并行測試子集中的每個以確定所述多個并行測試子集中的哪個通過所述一組測試。
14.如權利要求9所述的系統(tǒng),其中所述決策引擎自動傳輸識別失敗代碼變化的消息。
15.一種其上存儲有指令的計算機可讀介質,所述指令在由處理器執(zhí)行時使所述處理器執(zhí)行識別在具有多個代碼變化的部署管線中的失敗代碼變化的方法,所述方法包括: 創(chuàng)建在所述部署管線中的所述多個代碼變化的子集; 測試子集,其中測試包括: 對子集運行一組測試,以及 從子集移除所述多個代碼變化中的至少一個,直到子集通過所述一組測試為止;以及 基 于從子集移除的所述多個代碼變化中的至少一個來識別失敗代碼變化。
【文檔編號】G06F11/28GK104081359SQ201280068701
【公開日】2014年10月1日 申請日期:2012年1月31日 優(yōu)先權日:2012年1月31日
【發(fā)明者】I.莎妮, A.尼桑, I.舒弗 申請人:惠普發(fā)展公司,有限責任合伙企業(yè)