用于在代碼審查期間顯示測試覆蓋數(shù)據(jù)的過程的制作方法
【專利摘要】所提供的是用于在代碼審查過程期間監(jiān)測為進行審查而發(fā)送的代碼更改并且對所述代碼更改執(zhí)行測試覆蓋計算以生成對應(yīng)的測試覆蓋數(shù)據(jù)的方法和系統(tǒng)。代碼覆蓋服務(wù)監(jiān)測輸入至代碼審查系統(tǒng)的代碼更改,并且對作為代碼審查過程的結(jié)果被確定為已經(jīng)顯著演進的任何代碼更改自動執(zhí)行測試覆蓋計算。所述代碼覆蓋服務(wù)將產(chǎn)生的測試覆蓋數(shù)據(jù)(例如,測試覆蓋數(shù))的通知提供至與所述代碼更改相關(guān)聯(lián)的各種用戶和/或系統(tǒng),包括代碼審查者、代碼作者、代碼審查系統(tǒng)、其它通知系統(tǒng)、和/或其任何組合。所述測試覆蓋數(shù)據(jù)能夠用于所涉及的相關(guān)代碼的代碼健康的綜合評估。
【專利說明】
用于在代碼審查期間顯示測試覆蓋數(shù)據(jù)的過程
【背景技術(shù)】
[0001]在程序代碼審查期間,對于審查代碼的工程師而言,了解測試是否覆蓋一個特定代碼可以耗費相當(dāng)多的時間和精力。工程師需要讀取正受測試的代碼和測試兩者,遵循代碼執(zhí)行路徑,并且對于每行代碼確定是否執(zhí)行了該行代碼。這種過程不但艱難,而且還容易出錯。
[0002]可替代地,代碼審查者可以要求代碼更改的作者手動運行現(xiàn)有代碼覆蓋計算器中的一種并且手動地向?qū)彶檎邎蟾娼Y(jié)果。由于該過程涉及至少兩個執(zhí)行手動步驟的人,因此該過程可能具有顯著的等待時間,尤其是如果審查者和代碼更改的作者在地理上彼此相距較遠。
【發(fā)明內(nèi)容】
[0003]本
【發(fā)明內(nèi)容】
簡要介紹了對構(gòu)思的選取,以便提供對本公開的某些方面的基本了解。本
【發(fā)明內(nèi)容】
不是對本公開的詳盡綜述,并且不旨在識別本公開的重要或者關(guān)鍵要素或者勾畫本公開的范圍。本
【發(fā)明內(nèi)容】
僅僅提出了本公開的某些構(gòu)思作為以下提供的【具體實施方式】的序g。
[0004]本公開大體涉及向用戶提供自動化服務(wù)的方法和系統(tǒng)。更具體地,本公開的各個方面涉及用于在代碼審查過程期間向用戶提供對于計算機代碼更改的測試覆蓋信息的自動化服務(wù)。
[0005]本公開的一個實施例涉及用于提供對于代碼更改的測試覆蓋數(shù)據(jù)的計算機實現(xiàn)方法,該方法包括:檢測到至代碼審查系統(tǒng)傳入的代碼更改;對傳入的代碼更改執(zhí)行一個或者多個測試覆蓋計算;基于所執(zhí)行的一個或者多個測試覆蓋計算,生成對于代碼更改的測試覆蓋數(shù)據(jù);以及,將生成的對于代碼更改的測試覆蓋數(shù)據(jù)的通知發(fā)送至與代碼更改相關(guān)聯(lián)的至少一個接收方。
[0006]在另一實施例中,用于提供測試覆蓋數(shù)據(jù)的方法進一步包括:監(jiān)測代碼審查系統(tǒng)有關(guān)代碼客戶端中的更改的通知;以及,基于接收的有關(guān)代碼客戶端中的更改的通知,檢測到傳入的代碼更改。
[0007]在另一實施例中,用于提供測試覆蓋數(shù)據(jù)的方法進一步包括:確定對傳入的代碼更改的先前版本執(zhí)行了測試覆蓋計算;以及,基于確定了傳入的代碼更改不同于代碼更改的先前版本,對傳入的代碼更改執(zhí)行一個或者多個更新的測試覆蓋計算。
[0008]在再一實施例中,用于提供測試覆蓋數(shù)據(jù)的方法進一步包括:比較傳入的代碼更改的快照與代碼更改的先前版本的快照;以及基于該比較,按照以下方式中的至少一種來確定傳入的代碼更改不同于代碼更改的先前版本:已經(jīng)向代碼更改添加了一個或者多個新的測試;已經(jīng)從代碼更改中去除了一個或者多個測試;除了測試代碼之外,已經(jīng)向代碼更改添加了超過閾值量的新代碼;以及,除了測試代碼之外,已經(jīng)從代碼更改中去除了超過閾值量的代碼。
[0009]在又一實施例中,用于提供測試覆蓋數(shù)據(jù)的方法進一步包括:接收對于提交至代碼審查系統(tǒng)的代碼更改的更新的測試覆蓋計算的請求,其中,在檢測到所提交的代碼更改之前,接收更新的測試覆蓋計算的請求;并且,響應(yīng)于該請求,對所提交的代碼更改執(zhí)行一個或者多個更新的測試覆蓋計算。
[0010]本公開的又一實施例涉及一種用于提供對于代碼更改的測試覆蓋數(shù)據(jù)的系統(tǒng),該系統(tǒng)包括:一個或者多個處理器;以及,耦合至一個或者多個處理器的非暫時性計算機可讀介質(zhì),該非暫時性計算機可讀介質(zhì)具有存儲在其上的指令,當(dāng)指令由一個或者多個處理器執(zhí)行時,該指令使一個或者多個處理器執(zhí)行操作,該操作包括:檢測到至代碼審查服務(wù)的傳入的代碼更改;對傳入的代碼更改執(zhí)行一個或者多個測試覆蓋計算;基于所執(zhí)行的一個或者多個測試覆蓋計算,生成對于代碼更改的測試覆蓋數(shù)據(jù);以及,將生成的對于代碼更改的測試覆蓋數(shù)據(jù)的通知發(fā)送至與代碼更改相關(guān)聯(lián)的至少一個接收方。
[0011]在另一實施例中,用于提供測試覆蓋數(shù)據(jù)的系統(tǒng)中的該一個或者多個處理器執(zhí)行進一步的操作,該操作包括:監(jiān)測代碼審查服務(wù)有關(guān)代碼客戶端中的更改的通知;以及,基于接收的有關(guān)代碼客戶端中的更改的通知,檢測到傳入的代碼更改。
[0012]在再一實施例中,用于提供測試覆蓋數(shù)據(jù)的系統(tǒng)中的該一個或者更多處理器執(zhí)行進一步操作,該操作包括:確定對傳入的代碼更改的先前版本執(zhí)行了測試覆蓋計算;以及,基于確定了傳入的代碼更改不同于代碼更改的先前版本,對傳入的代碼更改執(zhí)行一個或者多個更新的測試覆蓋計算。
[0013]在再一實施例中,用于提供測試覆蓋數(shù)據(jù)的系統(tǒng)中的該一個或者更多處理器執(zhí)行進一步操作,該操作包括:比較傳入的代碼更改的快照與代碼更改的先前版本的快照;以及,基于該比較,按照以下方式中的至少一種來確定傳入的代碼更改不同于與代碼更改的先前版本:已經(jīng)向代碼更改添加了一個或者多個新的測試;已經(jīng)從代碼更改中去除了一個或者多個測試;除了測試代碼之外,已經(jīng)向代碼更改添加了超過閾值量的新代碼;以及,除了測試代碼之外,已經(jīng)從代碼更改中去除了超過閾值量的代碼。
[0014]在再一實施例中,用于提供測試覆蓋數(shù)據(jù)的系統(tǒng)中的該一個或者更多處理器執(zhí)行進一步操作,該操作包括:在與代碼審查服務(wù)相關(guān)聯(lián)的用戶界面屏幕的通知區(qū)域中發(fā)布通知,其中,所發(fā)布的通知可由與代碼更改相關(guān)聯(lián)的至少一個接收方訪問。
[0015]在再一實施例中,用于提供測試覆蓋數(shù)據(jù)的系統(tǒng)中的該一個或者更多處理器執(zhí)行進一步操作,該操作包括:接收對于提交至代碼審查服務(wù)的代碼更改的更新的測試覆蓋計算的請求,其中,在檢測到所提交的代碼更改之前,接收更新測試覆蓋計算的請求;并且,響應(yīng)于該請求,對所提交的代碼更改執(zhí)行一個或者多個更新的測試覆蓋計算。
[0016]本公開的又一實施例涉及一種或者多種非暫時性計算機可讀介質(zhì),該非暫時性計算機可讀介質(zhì)存儲了計算機可執(zhí)行指令,當(dāng)計算機可執(zhí)行指令由一個或者多個處理器執(zhí)行時,計算機可執(zhí)行指令使一個或者多個處理器執(zhí)行操作,該操作包括:監(jiān)測代碼審查系統(tǒng)有關(guān)代碼客戶端中的更改的通知;基于接收的有關(guān)代碼客戶端中的更改的通知,檢測到至代碼審查系統(tǒng)的傳入的代碼更改。對傳入的代碼更改執(zhí)行一個或者多個測試覆蓋計算;基于所執(zhí)行的一個或者多個測試覆蓋計算,生成對于代碼更改的測試覆蓋數(shù)據(jù);以及,將生成的對于代碼更改的測試覆蓋數(shù)據(jù)的通知發(fā)送給與代碼更改相關(guān)聯(lián)的至少一個接收方。
[0017]在一個或者多個其它實施例中,本文描述的方法和系統(tǒng)可以可選地包括以下附加特征中的一種或者多種:確定對傳入的代碼更改的先前版本執(zhí)行了測試覆蓋計算是基于與傳入的代碼更改和傳入的代碼更改的先前版本兩者相關(guān)聯(lián)的代碼更改標(biāo)識符;確定傳入的代碼更改不同于代碼更改的先前版本是基于傳入的代碼更改的快照與傳入的代碼更改的先前版本的快照之間的比較;與代碼更改相關(guān)聯(lián)的至少一個接收方包括代碼更改的作者、代碼更改的審查者和可通過其訪問代碼更改的代碼審查服務(wù)中的至少一個;并且/或者發(fā)送生成的對于代碼更改的測試覆蓋數(shù)據(jù)的通知包括:在與所述代碼審查系統(tǒng)相關(guān)聯(lián)的用戶界面屏幕的通知區(qū)域中發(fā)布通知,其中,所發(fā)布的通知可由與代碼更改相關(guān)聯(lián)的至少一個接收方訪問。
[0018]本公開的進一步適用范圍將通過下面給出的【具體實施方式】而變得顯而易見。然而,應(yīng)了解,僅通過說明性的方式給出了指示優(yōu)選實施例的【具體實施方式】和具體示例,這是因為,對于本領(lǐng)域的技術(shù)人員而言,在本公開的精神和范圍內(nèi)的多種改變和修改通過本【具體實施方式】將變得顯而易見。
【附圖說明】
[0019]對于本領(lǐng)域的技術(shù)人員而言,本公開的這些和其它目的、特征和特性將通過結(jié)合隨附權(quán)利要求書和附圖學(xué)習(xí)以下的【具體實施方式】而變得顯而易見,所有這些構(gòu)成了本說明書的一部分。在圖中:
[0020]圖1是圖示了根據(jù)本文描述的一個或者多個實施例的用于在代碼審查過程期間對為進行審查而發(fā)送的代碼更改提供測試覆蓋數(shù)據(jù)的示例系統(tǒng)的框圖。
[0021]圖2是圖示了根據(jù)本文描述的一個或者多個實施例的用于監(jiān)測輸入至代碼審查系統(tǒng)的代碼更改并且對該代碼更改執(zhí)行測試覆蓋計算以生成對于該代碼更改的對應(yīng)的測試覆蓋數(shù)據(jù)的示例方法的流程圖。
[0022]圖3是圖示了根據(jù)本文描述的一個或者多個實施例的用于檢測輸入至代碼審查系統(tǒng)的新代碼更改,監(jiān)測代碼更改的進展,并且基于監(jiān)測到的代碼更改的進展對代碼更改執(zhí)行更新的測試覆蓋計算的示例方法的流程圖。
[0023]圖4是圖示了根據(jù)本文描述的一個或者多個實施例的被布置用于監(jiān)測輸入至代碼審查系統(tǒng)的代碼更改并且對代碼更改執(zhí)行測試覆蓋計算以對于代碼更改生成對應(yīng)的測試覆蓋數(shù)據(jù)的示例計算裝置的框圖。
[0024]本文提供的標(biāo)題僅是為了方便起見,并不一定影響本公開中所要求保護的范圍和含義。
[0025]在圖中,為了容易理解和方便起見,相同的參考標(biāo)號和任何縮略詞識別了具有相同或者相似結(jié)構(gòu)或者功能的元件或者動作。通過下面的【具體實施方式】,將詳細描述這些圖。
【具體實施方式】
[0026]現(xiàn)在將描述各種示例和實施例。下面的描述提供了用于全面理解這些示例的描述并使其能夠?qū)崿F(xiàn)的具體細節(jié)。然而,相關(guān)領(lǐng)域的技術(shù)人員應(yīng)該理解,可以在沒有很多這些細節(jié)的情況下實踐本文描述的一個或者多個實施例。同樣,相關(guān)領(lǐng)域的技術(shù)人員也應(yīng)該理解,本公開的一個或者多個實施例能夠包括本文未詳細描述的許多其它明顯的特征。此外,為了避免不必要地模糊相關(guān)描述,下面可能不詳細示出或者描述某些周知的結(jié)構(gòu)或者功能。
[0027]本公開的實施例涉及用于在代碼審查過程期間監(jiān)測為了審查而發(fā)送的計算機代碼更改并且對該代碼更改執(zhí)行測試覆蓋計算以生成對于該代碼更改的對應(yīng)的測試覆蓋數(shù)據(jù)的方法和系統(tǒng)。如本文將更詳細描述的,中央監(jiān)測服務(wù)可以生成對于輸入至代碼審查系統(tǒng)的代碼更改的測試覆蓋數(shù)據(jù),并且將這種測試覆蓋數(shù)據(jù)提供至與特定代碼更改相關(guān)聯(lián)的一個或者多個用戶和/或系統(tǒng)。例如,根據(jù)本文描述的至少一個實施例,該服務(wù)可以將對于代碼更改所生成的測試覆蓋數(shù)據(jù)提供(諸如,發(fā)送、使其可以利用等)至代碼更改的作者、代碼更改的審查者、代碼審查系統(tǒng)的通知部件、和/或其任何組合。對于代碼更改所生成的測試覆蓋數(shù)據(jù)可以由各種有關(guān)方/系統(tǒng)用于,例如,評估代碼的健康。
[0028]如上所論述的,當(dāng)代碼審查者與代碼更改的作者在地理上彼此相距較遠(例如,相隔幾個時區(qū))時,對于代碼審查者來說,要求代碼更改的作者手動地運行現(xiàn)有代碼覆蓋計算器并且手動地向?qū)彶檎邎蟾娼Y(jié)果,通常是很耗時的。在這種地理上相距較遠的場景下,甚至在審查者已經(jīng)有機會查看代碼更改之前,代碼更改的作者將受益于確保該作者未忘記測試他或她的更改的任何代碼路徑的測試代碼覆蓋計算。該作者可以,例如,執(zhí)行與審查者將執(zhí)行的過程相同的過程并且手動地檢查代碼,這既容易出錯又很耗時,或者手動地運行覆蓋計算,該作者可能會忘記這樣做或者可能未意識到這種操作是很容易完成的。
[0029]某些現(xiàn)有的方法對每個代碼更改提供二進制的“所有測試通過”或者“某些測試失敗”的信息。然而,這種方法未提供解決上述問題的必要的每行解決方案。其它現(xiàn)有的方法利用在預(yù)定時間運行所有測試的外部系統(tǒng)。如此,一旦代碼更改已經(jīng)被納入代碼中,這些其它方法只能提供回顧性信息。
[0030]因此,本公開的實施例涉及大規(guī)模自動提供代碼更改測試覆蓋信息的方法和系統(tǒng)。如下面將更詳細描述的,可以對被確定為在一段時間內(nèi)顯著演進的任何代碼更改自動執(zhí)行測試覆蓋計算。根據(jù)至少一個實施例,可以確定新的代碼更改對于保證新的/更新的測試覆蓋計算的性能是足夠顯著的,其中通過以下示例方式中的至少一種新代碼更改的快照不同于先前測試的代碼更改的快照:(I)已經(jīng)向代碼更改添加了一個或者多個新的測試;
(2)已經(jīng)從代碼更改中去除了一個或者多個測試;(3)除了測試代碼之外,已經(jīng)向代碼更改添加了超過閾值量(例如,10%)的新代碼;(4)除了測試代碼之外,已經(jīng)從代碼更改去除了超過閾值量(例如,10%)的代碼;(5)(1)-(4)的任何組合。應(yīng)該理解,上述因素本質(zhì)上是示例性的,并且除了或者代替上述示例因素,在確定新的代碼更改對保證新的/更新的測試覆蓋計算是否足夠顯著時,也可以考慮很多其它因素。
[0031]根據(jù)至少一個實施例,集中式服務(wù)可以配置為監(jiān)測為審查而發(fā)送的代碼更改,并且通過使用本領(lǐng)域的技術(shù)人員已知的現(xiàn)有測試覆蓋計算工具(例如,涉及代碼更改的特定代碼語言)對代碼更改運行一個或者多個預(yù)先配置的測試集合。然后,集中式服務(wù)可以將產(chǎn)生的測試覆蓋信息(測試覆蓋數(shù))的通知提供至代碼審查者、代碼的作者、代碼審查系統(tǒng)、一個或者多個其它有關(guān)方、和/或其任何組合。在一個示例中,該服務(wù)可以經(jīng)由電子郵件提供此類通知。在一個或者多個其它示例中,該服務(wù)通過經(jīng)由即時消息服務(wù)發(fā)送該通知,或者通過向一個或者多個其他通知系統(tǒng)發(fā)送測試覆蓋數(shù)據(jù),可以在與代碼審查系統(tǒng)相關(guān)聯(lián)的用戶界面屏幕的通知區(qū)域中提供該通知。
[0032]根據(jù)本文描述的至少一個實施例,集中式服務(wù)可以配置為通過訂閱提交至代碼審查系統(tǒng)的所有傳入的代碼更改來監(jiān)測代碼更改。
[0033]應(yīng)該注意,根據(jù)本公開的一個或者多個實施例,本文描述的代碼覆蓋服務(wù)可以配置用于向用戶提供一種手動調(diào)用服務(wù)的機制。例如,在代碼覆蓋服務(wù)不能自動檢測到為進行審查而提交的代碼更改(例如,提交至代碼審查系統(tǒng))的情況下,或者在迫切需要更新的測試覆蓋計算(例如,由于如代碼審查過程的結(jié)果,代碼更改存在顯著更改)的情況下,與代碼更改相關(guān)聯(lián)的用戶(例如,代碼更改的作者、代碼更改的審查者等)可以手動地調(diào)用代碼覆蓋服務(wù)以執(zhí)行本文描述的各種操作。根據(jù)至少一個實施例,本文描述的代碼審查系統(tǒng)的用戶可以訪問實用程序,該實用程序能夠以與代碼審查服務(wù)(如下面更詳細描述的)在檢測到代碼更改時發(fā)送通知的方式相同或相似的方式向代碼覆蓋服務(wù)發(fā)送通知。進一步地,根據(jù)至少一個實施例,與代碼審查服務(wù)相關(guān)聯(lián)的用戶界面屏幕可以包括可選按鈕,用戶能夠選擇該可選按鈕使代碼審查系統(tǒng)代表用戶向代碼覆蓋服務(wù)提交請求。
[0034]—旦使該服務(wù)首次意識到代碼更改,該服務(wù)可以以規(guī)律的時間間隔(例如,每小時、每天等)持續(xù)監(jiān)測代碼更改。如果服務(wù)確定代碼更改已經(jīng)顯著演進,服務(wù)可以自動地重新運行測試覆蓋計算并且發(fā)送新的覆蓋信息。根據(jù)至少一個實施例,服務(wù)可以持續(xù)監(jiān)測代碼更改直到這些更改:(I)被提交至代碼庫;(2)從審查系統(tǒng)中丟棄和刪除;或者(3)由于超時而到期并且被宣布廢棄。在服務(wù)檢測到代碼更改已經(jīng)提交至代碼庫的示例場景中,該服務(wù)可以配置為執(zhí)行最終測試覆蓋運行并且計算最終的“發(fā)布的提交”的覆蓋數(shù)。在這種場景中,服務(wù)也可以配置為確定(例如,由服務(wù)執(zhí)行的)首次代碼覆蓋計算與發(fā)布的提交覆蓋計算之間的差異,并且(在數(shù)據(jù)庫中)存儲該差異并且/或者向有關(guān)方發(fā)送關(guān)于該差異的通知。根據(jù)至少一個實施例,可以存儲該服務(wù)收集到的所有信息(例如,對每次代碼更改每次運行預(yù)配置測試的測試覆蓋結(jié)果),以便進行長期趨勢和總體代碼健康的分析。
[0035]根據(jù)本文描述的一個或者多個實施例,代碼覆蓋服務(wù)的自動化性質(zhì)免除了代碼更改的作者必須記住對于代碼更改運行覆蓋計算。替代地,代碼更改的代碼審查者可以具備從視覺上(直接地)確定測試是否覆蓋一行特定代碼的能力,并且可以向與代碼更改相關(guān)聯(lián)的各種其它用戶/系統(tǒng)等提供綜合的測試覆蓋數(shù)據(jù)(例如,總體測試覆蓋數(shù)),該綜合的測試覆蓋數(shù)據(jù)可以用于評估相關(guān)代碼的代碼健康。除了許多其它優(yōu)點,本公開的代碼覆蓋服務(wù)減少了人為誤差(例如,提高了代碼審查過程的準(zhǔn)確性),減少了貫穿整個代碼審查過程的各個階段的等待時間(例如,提高了代碼審查過程的效率),并且允許對代碼健康進行長期跨項目的分析。
[0036]圖1圖示了根據(jù)本文描述的一個或者多個實施例的在代碼審查過程期間對為進行審查而發(fā)送的代碼更改提供測試覆蓋數(shù)據(jù)的示例系統(tǒng)。系統(tǒng)100可以包括代碼客戶端105、代碼覆蓋服務(wù)客戶端115、代碼更改服務(wù)器110、代碼更改服務(wù)120、測試執(zhí)行器130、代碼審查服務(wù)150和通知服務(wù)145。系統(tǒng)100還可以包括配置為存儲數(shù)據(jù)的一個或者多個數(shù)據(jù)庫,諸如,例如,代碼覆蓋儲存器135和測試結(jié)果儲存器140。
[0037]根據(jù)至少一個實施例,系統(tǒng)100可以是分布式系統(tǒng),在該分布式系統(tǒng)中,組成系統(tǒng)100的各個部件可以配置為在獨立的機器(例如,計算機、服務(wù)器等)上運行。例如,代碼客戶端105可以在開發(fā)者的機器上(例如,計算機)運行,而系統(tǒng)100中的其余部件在通過系統(tǒng)100的各種用戶之間共享的通信網(wǎng)絡(luò)可訪問的位置中操作。此外,許多代碼客戶端105可以與同一服務(wù)(例如,代碼覆蓋服務(wù)客戶端115、代碼更改服務(wù)器110、代碼更改服務(wù)120等)通信。根據(jù)一個或者多個實施例,系統(tǒng)100可以以容錯的方式來設(shè)計,借此同一共享進程的多個實例在通過網(wǎng)絡(luò)連接的多臺計算機上運行。
[0038]代碼客戶端105可以是配置為管理由開發(fā)者更改的源代碼的快照的應(yīng)用(例如,計算機軟件應(yīng)用或者程序)
[0039]代碼覆蓋服務(wù)客戶端115可以是實用程序,該實用程序配置為向代碼覆蓋服務(wù)120通知有關(guān)代碼更改并且當(dāng)檢測到代碼更改時還生成代碼覆蓋計算的請求。
[0040]代碼更改服務(wù)器110可以是配置為管理代碼快照和由開發(fā)者提交的代碼更改建議的服務(wù)。
[0041]代碼覆蓋服務(wù)120可以是配置為監(jiān)測從代碼覆蓋服務(wù)客戶端115接收的代碼更改通知并且執(zhí)行代碼覆蓋計算(例如,使用一種或者多種現(xiàn)有的測試覆蓋計算工具)的服務(wù)。
[0042]測試執(zhí)行器130可以是配置為對代碼庫的任何給出的快照執(zhí)行測試并且將測試執(zhí)行結(jié)果記錄在例如測試結(jié)果儲存器140中的服務(wù)。
[0043]根據(jù)本文描述的一個或者多個實施例,代碼審查服務(wù)150可以配置為促進代碼審查過程。例如,開發(fā)者可以利用代碼審查服務(wù)150來請求代碼審查,并且代碼審查者可以將所建議的代碼更改的意見提交至代碼審查服務(wù)150。另外,代碼審查服務(wù)150可以包括允許用戶對所建議的代碼更改進行注釋(諸如,突出顯示、插入評論、顯示修訂等)的一種或者多種工具。
[0044]通知服務(wù)145可以是配置為生成有關(guān)于代碼覆蓋測試結(jié)果(例如,由測試執(zhí)行器130存儲在測試結(jié)果儲存器140中)的通知并且將這種通知發(fā)送(或以其它方式使之可用)至一個或者多個單獨的用戶或者用戶組的服務(wù)。
[0045]根據(jù)本文描述的至少一個實施例,在系統(tǒng)的各個部件之間的示例數(shù)據(jù)流可以包括如下。
[0046]代碼覆蓋服務(wù)120可以配置為從測試結(jié)果儲存器140中讀取(例如,由測試執(zhí)行器130)完成的測試執(zhí)行的代碼覆蓋數(shù)據(jù)。例如,代碼覆蓋服務(wù)120可以讀取關(guān)于由測試執(zhí)行器130執(zhí)行的一個或者多個測試所覆蓋的代碼的更改行的百分比的數(shù)據(jù)。在另一示例中,代碼覆蓋服務(wù)120可以從測試結(jié)果140中讀取關(guān)于由測試執(zhí)行器130執(zhí)行的任何一次測試所覆蓋的文件列表的數(shù)據(jù)。
[0047]根據(jù)至少一個實施例,代碼覆蓋服務(wù)120也可以配置為從代碼覆蓋儲存器135讀取數(shù)據(jù)和向其寫入數(shù)據(jù)這兩者。例如,代碼覆蓋服務(wù)120可以配置為將對于給出的代碼更改的測試覆蓋計算(例如,正由代碼覆蓋服務(wù)120執(zhí)行)的當(dāng)前狀態(tài)記錄在代碼覆蓋儲存器135中。根據(jù)一個或者多個其它實施例,代碼覆蓋服務(wù)120可以進一步配置為:在服務(wù)器重新啟動的情況下(例如,發(fā)生故障后),從代碼覆蓋儲存器135中讀取這種記錄,以便,例如,重新開始對代碼更改執(zhí)行測試覆蓋計算。
[0048]代碼審查服務(wù)150可以配置為從測試結(jié)果儲存器140中讀取(例如,由測試執(zhí)行器130)完成的測試執(zhí)行的代碼覆蓋數(shù)據(jù)。例如,代碼審查服務(wù)150可以讀取關(guān)于由測試執(zhí)行器130執(zhí)行的任何一次測試所覆蓋的文件列表的數(shù)據(jù),以及對于這些文件中的每一個由測試所覆蓋的代碼行的列表。根據(jù)本文描述的至少一個實施例,代碼審查服務(wù)150可以使用從測試結(jié)果儲存器140中讀取的數(shù)據(jù),以便,例如,識別和區(qū)分經(jīng)過測試的代碼行與未經(jīng)過測試的代碼行。例如,代碼審查服務(wù)可以使用第一種顏色來突出顯示經(jīng)過測試的代碼行,而使用第二種顏色來突出顯示未經(jīng)過測試的代碼行,并且然后在代碼審查用戶界面屏幕(未示出)中(使用突出顯示)呈現(xiàn)所有的代碼行,該用戶界面屏幕可以呈現(xiàn)給與代碼相關(guān)聯(lián)的各種用戶(例如,代碼開發(fā)者、代碼審查者等)。代碼審查服務(wù)150也可以配置為將所審查的代碼的更改通知給代碼覆蓋服務(wù)120。
[0049]測試執(zhí)行器130可以配置為向測試結(jié)果儲存器140寫入數(shù)據(jù)。根據(jù)至少一個實施例,測試執(zhí)行器130可以配置為向測試結(jié)果儲存器140寫入測試日志、通過信息/失敗信息、以及測試覆蓋數(shù)據(jù)(例如,由測試執(zhí)行器130執(zhí)行的任何測試所覆蓋的文件列表,以及對于這些文件中的每一個由測試覆蓋的代碼行的列表)。例如,測試執(zhí)行器可以配置為向測試結(jié)果儲存器140寫入以下示例數(shù)據(jù):
[0050]測試_1通過[0051 ]測試_2失敗
[0052]測試_3超時
[0053]測試_4構(gòu)建失敗
[0054]代碼_文件_1:
[0055]行1:已插粧、已覆蓋
[0056]行2:已插粧、已覆蓋
[0057]行3:已插粧、未覆蓋
[0058]行4:未插粧
[0059]...
[0060]代碼_文件_2:
[0061 ] 行1:已插粧、已覆蓋
[0062]行2:已插粧、已覆蓋
[0063]行3:已插粧、未覆蓋
[0064]行4:已插粧、已覆蓋
[0065]...
[0066]代碼覆蓋服務(wù)客戶端115可以配置為向代碼覆蓋儲存器135寫入數(shù)據(jù)。根據(jù)至少一個實施例,代碼覆蓋服務(wù)客戶端115可以配置為將(例如,當(dāng)檢測到代碼更改時由代碼覆蓋服務(wù)客戶端115生成并且發(fā)送至代碼覆蓋服務(wù)120的)代碼覆蓋計算請求的事件記錄在代碼覆蓋儲存器135中。例如,當(dāng)向代碼覆蓋服務(wù)120發(fā)送代碼覆蓋計算請求時,代碼覆蓋服務(wù)客戶端115可以將有關(guān)該請求的各種數(shù)據(jù)作為日志記錄在代碼覆蓋儲存器135中,該數(shù)據(jù)諸如為代碼客戶端標(biāo)識符、代碼更改標(biāo)識符、用戶名、包括將運行的測試列表和將插粧的文件模式的項目配置、或者其任何組合。應(yīng)該理解,除了或者替代以上描述的示例數(shù)據(jù),各種其它數(shù)據(jù)也可以由代碼覆蓋服務(wù)客戶端115作為日志記錄在代碼覆蓋儲存器135中。
[0067]代碼客戶端105可以配置為向代碼覆蓋服務(wù)客戶端115推送數(shù)據(jù)。例如,代碼客戶端105可以配置為向代碼覆蓋服務(wù)客戶端115發(fā)送請求,其中,該請求涉及特定代碼更改,并且可以包括項目配置,該項目配置包括對于該代碼更改將運行的測試列表和將插粧的文件模式。
[0068]根據(jù)至少一個實施例,響應(yīng)于代碼客戶端105向代碼覆蓋服務(wù)客戶端115推送代碼,代碼客戶端105可以從代碼覆蓋服務(wù)客戶端115接收狀態(tài)(諸如,“OK”,“NOT 0K”)。例如,代碼客戶端105可以,響應(yīng)于代碼覆蓋服務(wù)客戶端115確定將開發(fā)者更改的源代碼的快照成功上傳至代碼更改服務(wù)器110并且確定代碼覆蓋服務(wù)120已經(jīng)對該代碼更改啟動了所請求的代碼覆蓋計算,從代碼覆蓋服務(wù)客戶端115接收“OK”狀態(tài)。在另一示例中,代碼客戶端105可以,響應(yīng)于代碼覆蓋服務(wù)客戶端115確定在上述操作中的任一個中發(fā)生了故障,從代碼覆蓋服務(wù)客戶端115接收“NOT OK”狀態(tài)。
[0069]代碼覆蓋服務(wù)客戶端115可以配置為向代碼更改服務(wù)器110和代碼覆蓋服務(wù)120推送數(shù)據(jù)。根據(jù)至少一個實施例,代碼覆蓋服務(wù)客戶端115可以配置為將開發(fā)者更改的源代碼的當(dāng)前快照上傳至代碼更改服務(wù)器110。例如,代碼覆蓋服務(wù)客戶端115可以將更改的源代碼的快照上傳至代碼更改服務(wù)器110,以便使測試執(zhí)行器130可以訪問該快照。下面是可以由代碼覆蓋服務(wù)客戶端115推送至代碼更改服務(wù)器110的示例數(shù)據(jù):
[0070]〈用戶名〉
[0071]目錄_1/文件_1,〈文件I內(nèi)容〉
[0072]目錄_1/文件_2,〈文件2內(nèi)容〉
[0073]目錄_2/文件_3,〈文件3內(nèi)容〉
[0074]代碼覆蓋服務(wù)客戶端115也可以配置為將關(guān)于代碼更改通知給代碼覆蓋服務(wù)120。根據(jù)至少一個實施例,代碼覆蓋服務(wù)客戶端115可以通過向代碼覆蓋服務(wù)120發(fā)送對代碼更改的代碼覆蓋計算的請求,來將關(guān)于代碼更改通知給代碼覆蓋服務(wù)120。在這種請求中可以發(fā)送至代碼覆蓋服務(wù)120的數(shù)據(jù)可以包括:例如,上傳至代碼更改服務(wù)器110的代碼更改快照的代碼更改快照標(biāo)識符、代碼更改標(biāo)識符、用戶名、包括將運行的測試列表和將插粧的文件模式的項目配置、或者其任何組合。例如,對特定代碼更改的代碼覆蓋計算的請求可以包括以下示例數(shù)據(jù):
[0075]代碼更改快照標(biāo)識符:12[對于具體代碼更改是唯一的]
[0076]代碼更改標(biāo)識符:12345[對于任何代碼更改是唯一的]
[0077]用戶名:用戶_1
[0078]測試模式:目錄_1/測試_1,目錄_2/*[指定單次測試,或者應(yīng)該擴展至與該模式匹配的所有測試的通配符模式]
[0079]文件插粧模式:目錄_1/*,目錄_2/*
[0080]應(yīng)該理解,除了或者替代上述示例數(shù)據(jù),各種其它數(shù)據(jù)也可以包括在從代碼覆蓋服務(wù)客戶端115發(fā)送至代碼覆蓋服務(wù)120的代碼覆蓋計算的請求中。
[0081]響應(yīng)于代碼覆蓋服務(wù)客戶端115向代碼更改服務(wù)器110和代碼覆蓋服務(wù)120推送數(shù)據(jù),代碼覆蓋服務(wù)客戶端115可以從代碼更改服務(wù)器110和代碼覆蓋服務(wù)120中的每一個接收狀態(tài)(例如,“0K”或者“NOT 0K”狀態(tài))。例如,響應(yīng)于代碼覆蓋服務(wù)客戶端115將開發(fā)者更改的源代碼的快照上傳至代碼更改服務(wù)器110,如果源代碼快照被成功上傳,那么代碼覆蓋服務(wù)客戶端115可以從代碼更改服務(wù)器110接收“0K”狀態(tài)。根據(jù)至少一個實施例,代碼覆蓋服務(wù)客戶端115可以從代碼更改服務(wù)器110—起接收“0K”狀態(tài)和上傳至代碼更改服務(wù)器110的代碼更改快照的標(biāo)識符。在另一示例中,響應(yīng)于代碼覆蓋服務(wù)客戶端115將源代碼快照上傳至代碼更改服務(wù)器110,如果源代碼快照未能被恰當(dāng)?shù)鼗蛘咄耆厣蟼髦链a更改服務(wù)器110,那么代碼服務(wù)客戶端115可以從代碼更改服務(wù)器110接收“NOT 0K”狀態(tài)。在又一示例中,響應(yīng)于代碼覆蓋服務(wù)客戶端115向代碼覆蓋服務(wù)120發(fā)送代碼覆蓋計算的請求,如果,例如代碼覆蓋服務(wù)120無法啟動所請求的代碼覆蓋計算,那么代碼覆蓋服務(wù)客戶端115可以從代碼覆蓋服務(wù)120接收“NOT 0K”狀態(tài)。
[0082]根據(jù)本文描述的一個或者多個實施例,如果代碼覆蓋服務(wù)客戶端115從代碼更改服務(wù)器110和代碼覆蓋服務(wù)120中的一個接收“NOT 0K”狀態(tài),那么代碼覆蓋服務(wù)客戶端115可以配置為中止正在執(zhí)行的操作(例如,將源代碼快照上傳至代碼更改服務(wù)器110或者請求來自代碼覆蓋服務(wù)120的代碼覆蓋計算)并且將故障事件作為日志記錄在代碼覆蓋儲存器135中。代碼覆蓋服務(wù)客戶端115可以將其作為日志記錄在代碼覆蓋儲存器135中的故障事件可以包括:例如,關(guān)于特定故障的數(shù)據(jù)一一諸如所嘗試的操作、所涉及的源代碼更改、時間戳信息等。在至少一個示例中,作為日志記錄在代碼覆蓋儲存器135中的數(shù)據(jù)可以用于各種系統(tǒng)100調(diào)試目的。
[0083]代碼覆蓋服務(wù)120可以配置為請求來自測試執(zhí)行器130的對特定代碼更改的測試執(zhí)行。根據(jù)至少一個實施例,可以從代碼覆蓋服務(wù)120發(fā)送至測試執(zhí)行器130的該請求可以包括與包括在如上所述從代碼覆蓋服務(wù)客戶端115發(fā)送至代碼覆蓋服務(wù)120的代碼覆蓋計算的請求中的數(shù)據(jù)相似的數(shù)據(jù)。例如,可以從代碼覆蓋服務(wù)120發(fā)送至測試執(zhí)行器130的該請求可以包含:來自代碼蓋率服務(wù)120處接收的代碼覆蓋計算請求的數(shù)據(jù)的子集,包括,例如,上傳至代碼更改服務(wù)器110的代碼更改快照的標(biāo)識符,以及包括將運行的測試列表和將插粧的文件模式的項目配置。
[0084]測試執(zhí)行器130可以配置為從代碼更改服務(wù)器110讀取由開發(fā)者更改的源代碼的快照。例如,測試執(zhí)行器130可以讀取(例如,由代碼覆蓋服務(wù)客戶端115)存儲在代碼更改服務(wù)器110中的代碼更改,以便對該代碼更改執(zhí)行測試。
[0085]測試執(zhí)行器130也可以配置為基于由測試執(zhí)行器130對特定代碼更改執(zhí)行的測試結(jié)果向代碼覆蓋服務(wù)120報告狀態(tài)。例如,響應(yīng)于測試執(zhí)行器130確定代碼更改通過了所有測試,測試執(zhí)行器130可以向代碼覆蓋服務(wù)120發(fā)送“0K”狀態(tài)。在另一示例中,響應(yīng)于測試執(zhí)行器130確定代碼更改未通過一個或者多個測試或者確定對代碼更改不能執(zhí)行所請求的測試,測試執(zhí)行器130可以向代碼覆蓋服務(wù)120發(fā)送“NOT 0K”狀態(tài)。根據(jù)至少一個實施例,代碼覆蓋服務(wù)120可以將從測試執(zhí)行器130接收的狀態(tài)記錄在代碼覆蓋儲存器135中。
[0086]代碼覆蓋服務(wù)120可以配置為請求通過通知服務(wù)145生成和傳送電子郵件。例如,代碼覆蓋服務(wù)120可以請求通知服務(wù)145發(fā)送電子郵件(例如,發(fā)送至一個或者多個授權(quán)的或者指定的接收方),該電子郵件包含了(例如,由測試執(zhí)行器130)已經(jīng)對其執(zhí)行了測試的代碼更改的報告和由此確定的總體代碼覆蓋計算(例如,百分比)。根據(jù)至少一個實施例,響應(yīng)于向通知服務(wù)145發(fā)送電子郵件通知的請求,代碼覆蓋服務(wù)120可以從通知服務(wù)145接收狀態(tài)報告。例如,如果通知服務(wù)145成功發(fā)送了所請求的電子郵件,那么代碼覆蓋服務(wù)120可以從通知服務(wù)145接收“0K”狀態(tài),以及,如果通知服務(wù)145未能發(fā)送所請求的電子郵件,那么代碼覆蓋服務(wù)120可以接收“NOT 0K”狀態(tài)。根據(jù)至少一個實施例,代碼覆蓋服務(wù)120可以將從通知服務(wù)145接收的狀態(tài)記錄在代碼覆蓋儲存器135中。
[0087]根據(jù)一個或者多個實施例,代碼覆蓋服務(wù)120也可以配置為向代碼審查服務(wù)150推送代碼覆蓋數(shù)據(jù)(例如,基于從測試執(zhí)行器130接收的測試結(jié)果的代碼覆蓋計算),以將其顯示在與代碼審查服務(wù)150相關(guān)聯(lián)的用戶界面屏幕的通知區(qū)域中。例如,代碼覆蓋服務(wù)120可以配置為生成對特定代碼更改的代碼覆蓋結(jié)果的概要并且將該概要發(fā)布在與代碼審查服務(wù)150相關(guān)聯(lián)的用戶界面屏幕的通知區(qū)域中。
[0088]圖2圖示了用于監(jiān)測輸入至代碼審查系統(tǒng)的代碼更改并且對該代碼更改執(zhí)行測試覆蓋計算以生成對于該代碼更改的對應(yīng)的測試覆蓋數(shù)據(jù)的示例過程。根據(jù)至少一個實施例,該過程200可以由配置為運行一個或者多個服務(wù)器的分布式系統(tǒng)(例如,圖1所示的系統(tǒng)100)來執(zhí)行。
[0089]在框205中,程序可以是監(jiān)測關(guān)于代碼客戶端中的更改的通知。例如,代碼覆蓋服務(wù)可以配置為監(jiān)測用于通知的實用程序,該通知是關(guān)于由開發(fā)者進行的源代碼更改(例如,在圖1所示的示例系統(tǒng)100中,代碼覆蓋服務(wù)120可以監(jiān)測從代碼覆蓋客戶端115接收的關(guān)于通過代碼客戶端105提交的代碼更改的通知)。根據(jù)至少一個實施例,在框205中監(jiān)測到的通知可以是實用程序生成的通知,該實用程序配置為從管理開發(fā)者正從事的源代碼的快照的應(yīng)用接收代碼更改請求。
[0090]在框210中,基于在框205中執(zhí)行的該監(jiān)測,可以檢測到關(guān)于代碼更改的通知。例如,代碼覆蓋服務(wù)可以基于從代碼覆蓋服務(wù)客戶端接收的通知,檢測到代碼更改(例如,在圖1所示的示例系統(tǒng)100中,代碼覆蓋服務(wù)120可以基于從代碼覆蓋服務(wù)客戶端115接收的通知,檢測到代碼更改)。
[0091]在框215中,可以對在框210中檢測到的代碼更改執(zhí)行一個或者多個測試。例如,可以使用本領(lǐng)域技術(shù)人員已知的測試覆蓋計算工具對代碼更改(例如,由圖1所示的示例系統(tǒng)100中的測試執(zhí)行器130)執(zhí)行一個或者多個覆蓋測試。
[0092]在框220中,可以基于在框215中執(zhí)行的測試,對代碼更改生成測試覆蓋數(shù)據(jù)(例如,代碼覆蓋計算)。根據(jù)至少一個實施例,代碼覆蓋服務(wù)可以利用從在框215中對代碼更改執(zhí)行的測試中所獲得的結(jié)果,來生成對于代碼更改的代碼覆蓋計算(例如,百分比)(例如,在如圖1所示的示例系統(tǒng)100中,代碼覆蓋服務(wù)120可以利用從測試執(zhí)行器130中獲得的結(jié)果來生成代碼覆蓋計算)
[0093]在框225中,可以將通知發(fā)送給與代碼更改相關(guān)聯(lián)的一個或者多個接收方(例如,用戶、系統(tǒng)、服務(wù)等),其中,該通知指示了或者包括在框220中生成的測試覆蓋數(shù)據(jù)。例如,在框225中,可以向一個或者多個授權(quán)的或者指定的接收方發(fā)生電子郵件,其中,該電子郵件包含了在框215中對其執(zhí)行了測試的代碼更改的報告、以及基于測試結(jié)果在框220中確定的總體代碼覆蓋計算。根據(jù)至少一個實施例,可以在框225中發(fā)送的通知可以是將代碼更改的代碼覆蓋結(jié)果的概要發(fā)布在與代碼審查服務(wù)(例如,圖1所示的示例系統(tǒng)100中的代碼審查服務(wù)150)相關(guān)聯(lián)的用戶界面屏幕的通知區(qū)域中。
[0094]圖3圖示了根據(jù)本文描述的一個或者多個實施例的用于檢測輸入至代碼審查系統(tǒng)的新代碼更改,監(jiān)測該代碼更改的更改(例如,如代碼審查過程的結(jié)果),并且基于對該代碼更改所做出的更改(例如代碼更改的進展)對代碼更改執(zhí)行更新的測試覆蓋計算的示例過程。根據(jù)至少一個實施例,該過程300可以由配置為運行一個或者多個服務(wù)器的分布式系統(tǒng)(例如,圖1所示的系統(tǒng)1 O)來執(zhí)行。
[0095]在框305中,可以檢測到至代碼審查系統(tǒng)的傳入的代碼更改。例如,開發(fā)者可以將源代碼更改(例如,為了進行審查和/或得到批準(zhǔn))提交至代碼審查系統(tǒng),并且該提交可以由該系統(tǒng)的部件檢測到(例如,在如圖1所示的示例系統(tǒng)100中,可以由代碼覆蓋服務(wù)120基于由代碼覆蓋服務(wù)客戶端115生成的通知,檢測到客戶端代碼150中開發(fā)者所進行的代碼更改)。
[0096]在框310中,可以對于在框305中檢測到的傳入的代碼更改先前是否已經(jīng)請求了覆蓋計算(例如,測試覆蓋測量),進行確定。根據(jù)至少一個實施例,基于與傳入的代碼更改相關(guān)聯(lián)的各種數(shù)據(jù),可以做出在框310中的確定。例如,在框305中檢測到的代碼更改可以包括代碼客戶端標(biāo)識符、代碼更改標(biāo)識符、用戶名、包括將運行的測試列表和將插粧的文件模式的項目配置、或者其任何組合。與代碼更改相關(guān)聯(lián)的數(shù)據(jù)可以用于,例如,確定對于該代碼更改(例如,在圖1所示的示例系統(tǒng)100的測試結(jié)果儲存器140中)是否存儲了任何覆蓋測試結(jié)果。
[0097]如果在框310中確定先前尚未對傳入的代碼更改請求覆蓋測量,那么該過程可以結(jié)束。根據(jù)至少一個實施例,如果在框310中確定當(dāng)前尚不存在對代碼更改的覆蓋測量(例如,在圖1所示的示例系統(tǒng)100的測試結(jié)果儲存器140中),那么,可以根據(jù)圖2中圖示的以及上面所述的示例過程200,對代碼更改執(zhí)行測試覆蓋計算,以生成對于代碼更改的對應(yīng)的測試覆蓋數(shù)據(jù)。
[0098]另一方面,如果在框305中確定先前已經(jīng)對于傳入的代碼更改請求了覆蓋測量,那么,在框315中,可以將傳入的代碼更改與先前已經(jīng)測試了覆蓋的代碼更改進行比較。例如,在框315中,可以將傳入的代碼更改的快照(例如,在圖1所示的示例系統(tǒng)100中,由代碼客戶端105提供至代碼覆蓋服務(wù)客戶端115的代碼更改的快照)與先前測試的代碼更改的快照(例如,存儲在圖1所示的示例系統(tǒng)100的代碼更改服務(wù)器110中)進行比較,以確定代碼更改已經(jīng)被修改的程度。
[0099]基于在框315中執(zhí)行的比較,可以在框320中對是否需要對代碼更改進行更新的測試覆蓋計算(測量),進行確定。根據(jù)至少一個實施例,可以在框320中進行的確定可以基于根據(jù)先前對其測試的版本和在框305中檢測到的版本代碼更改已經(jīng)演進(例如,已經(jīng)修改或者修訂)的程度。例如,可以確定新的代碼更改對于保證新的/更新的測試覆蓋計算的性能是足夠顯著的,其中,通過以下示例方式中的至少一種新代碼更改的快照不同于先前測試的代碼更改的快照:(I)已經(jīng)向代碼更改添加了一個或者多個新的測試;(2)已經(jīng)從代碼更改中去除了一個或者多個測試;(3)除了測試代碼之外,已經(jīng)向代碼更改添加了超過閾值量(例如,10%)的新代碼;(4)除了測試代碼之外,已經(jīng)從代碼更改中去除了超過閾值量(例如,10%)的代碼;(5)(1)-(4)的任何組合。應(yīng)該理解,除了或者代替上述示例因素,在框中320中確定在框305中檢測到的代碼更改的新版本是否對保證新的/更新的測試覆蓋計算足夠顯著時,也可以考慮很多其它因素。
[0100]如果在框320中確定不需要對特定代碼更改進行更新的測試覆蓋計算,那么該過程可以返回至框305并且重復(fù)。另一方面,如果基于在框315中執(zhí)行的比較,在框320中確定代碼更改已經(jīng)演進至足以保證更新的覆蓋計算,那么該過程可以前進至框325。
[0101]根據(jù)至少一個實施例,在示例過程300中剩余的框325、330和335可以包括分別與圖2所示以及以上詳細描述的示例過程200中的框215、220和225的操作相似的操作。因此,為了簡潔起見,將不再進一步描述示例過程300中的框325、330、和335的操作。
[0102]圖4是圖示了根據(jù)本文描述的一個或者多個實施例的被布置用于監(jiān)測輸入至代碼審查系統(tǒng)的代碼更改并且對代碼更改執(zhí)行測試覆蓋計算以生成對于代碼更改的對應(yīng)的測試覆蓋數(shù)據(jù)的示例性計算機(400)的高層次框圖。在非?;A(chǔ)的配置(401)中,計算裝置(400)通常包括一個或者多個處理器(410)和系統(tǒng)存儲器(420)。存儲器總線(430)能夠用于在處理器(410)與系統(tǒng)存儲器(420)之間進行通信。
[0103]依據(jù)所需的配置,處理器(410)能夠是任何類型,包括但不限于:微處理器(μΡ)、微控制器(μθ)、數(shù)字信號處理器(DSP)、或其任何組合。處理器(410)可以包括諸如級別I緩存(411)和級別2緩存(412)的一個或者多個級別緩存、處理器核(413)和寄存器(414)。處理器核(413)可以包括算數(shù)邏輯單元(ALU)、浮點單元(FPU)、數(shù)字信號處理核(DSP核)、或其任何組合。存儲器控制器(416)也可以與處理器(410) —起使用,或者在一些實施方式中,存儲器控制器(415)可以是處理器(410)的內(nèi)部部分。
[0104]依據(jù)所需的配置,系統(tǒng)存儲器(420)可以是任何類型,包括但不限于:易失性存儲器(諸如,RAM)、非易失性存儲器(諸如R0M、閃存等)、或其任何組合。系統(tǒng)存儲器(420)通常包括操作系統(tǒng)(421)、一個或者多個應(yīng)用(422)、和程序數(shù)據(jù)(424)。應(yīng)用(422)可以包括提供對于代碼更改(例如,提交至諸如圖1所示的示例代碼審查系統(tǒng)100的代碼審查系統(tǒng)的代碼更改)的測試覆蓋數(shù)據(jù)的服務(wù)(423)。程序數(shù)據(jù)(424)可以包括存儲指令,當(dāng)該存儲指令由一個或者多個處理裝置執(zhí)行時,該存儲指令實施提供對于代碼更改的測試覆蓋數(shù)據(jù)的服務(wù)。此外,根據(jù)至少一個實施例,程序數(shù)據(jù)(424)可以包括代碼更改和測試結(jié)果數(shù)據(jù)(425),該測試結(jié)果數(shù)據(jù)(425)可以包括作為代碼審查過程的結(jié)果的關(guān)于對代碼更改進行的一個或者多個更改的數(shù)據(jù),以及關(guān)于(通過提供對于代碼更改的測試覆蓋數(shù)據(jù)的服務(wù)(423))對代碼更改執(zhí)行的測試覆蓋計算的數(shù)據(jù)。在一些實施例中,應(yīng)用(422)可以布置為在操作系統(tǒng)(421)上使用程序數(shù)據(jù)(424)來操作。
[0105]計算裝置(400)可以具有附加特征或者功能,以及促進基礎(chǔ)配置(401)與任何需要的裝置和接口之間的通信的附加接口。
[0106]系統(tǒng)存儲器(420)是計算機存儲介質(zhì)的示例。計算機存儲介質(zhì)包括,但不限于,RAM、R0M、EEPR0M、閃存或者其它存儲技術(shù)、⑶-R0M、數(shù)字多功能盤(DVD)或者其它光存儲裝置、磁帶盒、磁帶、磁盤存儲或者其它磁存儲裝置、或者可以用于存儲所需信息并且可以由計算裝置400訪問的任何其它介質(zhì)。任何這種計算存儲介質(zhì)可以是裝置(400)的部分。
[0107]計算裝置(400)可以實施為小型便攜式(或者移動)電子裝置的一部分,諸如手機、智能手機、個人數(shù)據(jù)助理(PDA)、個人媒體播放器裝置、平板計算機(平板)、無線網(wǎng)絡(luò)監(jiān)視裝置、個人耳機裝置、應(yīng)用專用裝置、或者包括任何以上功能的混合裝置。計算裝置(400)也可以實現(xiàn)為個人計算機,包括膝上型計算機和非膝上型計算機配置。
[0108]經(jīng)由使用框圖、流程圖、和/或示例,前述的詳細描述已經(jīng)闡述了裝置和/或過程的各種實施例。在這種框圖、流程圖、和/或示例的范圍內(nèi)包含一個或者多個功能和/或操作,本領(lǐng)域的技術(shù)人員將理解,在這種框圖、流程圖、或者示例中的每個功能和/或操作能夠各自地和/或共同地通過大范圍的硬件、軟件、固件、或其實質(zhì)上任何組合來實施。在一個實施例中,本文描述的主題的多個部分可以經(jīng)由專用集成電路(ASIC)、現(xiàn)場可編程門陣列(FPGA)、數(shù)字信號處理器(DSP)或者其它集成格式來實施。然而,本領(lǐng)域的技術(shù)人員將認識至IJ,本文所公開的實施例的一些方面能夠整體地或者部分地等效實施在集成電路中,作為在一個或者多個計算機上運行的一個或者多個計算機程序、作為在一個或者多個處理器上運行的一個或者多個程序、作為固件、或作為其實質(zhì)上任何組合,并且將認識到,根據(jù)本公開,設(shè)計軟件和/或固件的電路系統(tǒng)和/或編寫軟件和/或固件的代碼應(yīng)在本領(lǐng)域的技術(shù)人員所掌握的技術(shù)內(nèi)。另外,本領(lǐng)域的技術(shù)人員將了解,本文描述的主題的機制能夠分配為各種形式的程序產(chǎn)品,并且將了解,本文描述的主題的說明性實施例的適用與用于實際執(zhí)行該分配的非暫時性信號承載介質(zhì)的特定類型無關(guān)。非暫時性信號承載介質(zhì)的示例包括但不限于以下:可記錄式介質(zhì),諸如,軟盤、硬盤驅(qū)動器、壓縮盤(CD)、數(shù)字視頻盤(DVD)、數(shù)字磁帶、計算機存儲器等;以及,傳輸式介質(zhì),諸如,數(shù)字和/或模擬通信介質(zhì)(例如,光纖電纜、波導(dǎo)、有線通信鏈路、無線通信鏈路等)。
[0109]關(guān)于本文中實質(zhì)上使用了任何復(fù)數(shù)和/或單數(shù)術(shù)語,本領(lǐng)域的技術(shù)人員可以按照適用于上下文和/或本申請,將復(fù)數(shù)轉(zhuǎn)化為單數(shù),和/或?qū)螖?shù)轉(zhuǎn)化為復(fù)數(shù)。為了明晰起見,本文可以清楚闡述各種單/復(fù)數(shù)排列。
[0110]因此,已經(jīng)描述了主題的具體實施例。其它實施例在以下權(quán)利要求書的范圍內(nèi)。在一些情況下,可以按照不同的順序執(zhí)行權(quán)利要求書中列舉的動作,并且仍然可以獲得所需的效果。另外,附圖中描述的過程并不一定要求所示的特定順序或者依次的順序來實現(xiàn)所需的結(jié)果。在某些實施方式中,多任務(wù)處理和并行處理可以是有利的。
【主權(quán)項】
1.一種用于提供代碼更改的測試覆蓋數(shù)據(jù)的計算機實現(xiàn)方法,所述方法包括: 檢測(210)至代碼審查系統(tǒng)的傳入代碼更改; 對所述傳入代碼更改執(zhí)行(215) —個或者多個測試覆蓋計算; 基于所執(zhí)行的所述一個或者多個測試覆蓋計算,生成(220)所述代碼更改的測試覆蓋數(shù)據(jù);以及 將對于所述代碼更改而生成的所述測試覆蓋數(shù)據(jù)的通知發(fā)送(225)至與所述代碼更改相關(guān)聯(lián)的至少一個接收方。2.根據(jù)權(quán)利要求1所述的計算機實現(xiàn)方法,進一步包括: 為有關(guān)代碼客戶端中的更改的通知而監(jiān)測(205)所述代碼審查系統(tǒng);以及 基于有關(guān)所述代碼客戶端中的更改的所接收通知,檢測(210)所述傳入代碼更改。3.根據(jù)權(quán)利要求1所述的計算機實現(xiàn)方法,進一步包括: 確定(310)對所述傳入代碼更改的先前版本執(zhí)行了測試覆蓋計算;以及 基于確定所述傳入代碼更改不同于所述代碼更改的先前版本,對所述傳入代碼更改執(zhí)行(325) —個或者多個更新測試覆蓋計算。4.根據(jù)權(quán)利要求3所述的計算機實現(xiàn)方法,其中,確定對所述傳入代碼更改的先前版本執(zhí)行了測試覆蓋計算是基于與所述傳入代碼更改和所述傳入代碼更改的所述先前版本兩者相關(guān)聯(lián)的代碼更改標(biāo)識符。5.根據(jù)權(quán)利要求3所述的計算機實現(xiàn)方法,其中,確定所述傳入代碼更改不同于所述代碼更改的先前版本是基于所述傳入代碼更改的快照與所述傳入代碼更改的所述先前版本的快照之間的比較。6.根據(jù)權(quán)利要求3所述的計算機實現(xiàn)方法,進一步包括: 將所述傳入代碼更改的快照與所述代碼更改的所述先前版本的快照進行比較(315);以及 基于所述比較,按照以下方式中的至少一種來確定所述傳入代碼更改不同于所述代碼更改的所述先前版本:已經(jīng)向所述代碼更改添加了一個或者多個新的測試;已經(jīng)從所述代碼更改中去除了一個或者多個測試;已經(jīng)向所述代碼更改添加了除測試代碼外的超過閾值量的新代碼;以及已經(jīng)從所述代碼更改中去除了除測試代碼外的超過閾值量的代碼。7.根據(jù)權(quán)利要求1所述的計算機實現(xiàn)方法,其中,與所述代碼更改相關(guān)聯(lián)的至少一個接收方包括下述中的至少一個:所述代碼更改的作者、所述代碼更改的審查者、和可以訪問所述代碼更改所通過的代碼審查服務(wù)。8.根據(jù)權(quán)利要求1所述的計算機實現(xiàn)方法,其中,發(fā)送對于所述代碼更改而生成的所述測試覆蓋數(shù)據(jù)的通知包括:在與所述代碼審查系統(tǒng)相關(guān)聯(lián)的用戶界面屏幕的通知區(qū)域中發(fā)布通知,其中,所發(fā)布的通知能由與所述代碼更改相關(guān)聯(lián)的所述至少一個接收方訪問。9.根據(jù)權(quán)利要求1所述的計算機實現(xiàn)方法,進一步包括: 接收對于提交至所述代碼審查系統(tǒng)的代碼更改的更新測試覆蓋計算的請求,其中,在檢測到所提交的代碼更改之前,接收所述更新測試覆蓋計算的請求;以及 響應(yīng)于所述請求,對所提交的代碼更改執(zhí)行一個或者多個更新測試覆蓋計算。10.—種用于提供代碼更改的測試覆蓋數(shù)據(jù)的系統(tǒng)(100),所述系統(tǒng)包括: 一個或者多個處理器;以及 耦合至所述一個或者多個處理器的非暫時性計算機可讀介質(zhì),所述非暫時性計算機可讀介質(zhì)具有存儲在其上的指令,當(dāng)所述指令由所述一個或者多個處理器執(zhí)行時,所述指令使所述一個或者多個處理器執(zhí)行操作,所述操作包括: 檢測至代碼審查服務(wù)(150)的傳入代碼更改; 對所述傳入代碼更改執(zhí)行一個或者多個測試覆蓋計算; 基于所執(zhí)行的所述一個或者多個測試覆蓋計算,生成所述代碼更改的測試覆蓋數(shù)據(jù);以及 將生成的所述代碼更改的測試覆蓋數(shù)據(jù)的通知發(fā)送至與所述代碼更改相關(guān)聯(lián)的至少一個接收方。11.根據(jù)權(quán)利要求10所述的系統(tǒng),其中,使所述一個或者多個處理器執(zhí)行進一步的操作,所述進一步的操作包括: 為有關(guān)代碼客戶端(105)中的更改的通知而監(jiān)測所述代碼審查服務(wù);以及 基于有關(guān)所述代碼客戶端中的更改的所接收通知,檢測所述傳入代碼更改。12.根據(jù)權(quán)利要求10所述的系統(tǒng),其中,使所述一個或者多個處理器執(zhí)行進一步的操作,所述進一步的操作包括: 確定對所述傳入代碼更改的先前版本執(zhí)行了測試覆蓋計算;以及基于確定所述傳入代碼更改不同于所述代碼更改的先前版本,對所述傳入代碼更改執(zhí)行一個或者多個更新測試覆蓋計算。13.根據(jù)權(quán)利要求12所述的系統(tǒng),其中,確定對所述傳入代碼更改的先前版本執(zhí)行了測試覆蓋計算是基于與所述傳入代碼更改和所述傳入代碼更改的先前版本兩者相關(guān)聯(lián)的代碼更改標(biāo)識符。14.根據(jù)權(quán)利要求12所述的系統(tǒng),其中,確定所述傳入代碼更改不同于所述代碼更改的先前版本是基于所述傳入代碼更改的快照與所述傳入代碼更改的所述先前版本的快照之間的比較。15.根據(jù)權(quán)利要求12所述的系統(tǒng),其中,使所述一個或者多個處理器執(zhí)行進一步的操作,所述進一步的操作包括: 將所述傳入代碼更改的快照與所述代碼更改的所述先前版本的快照進行比較;以及 基于所述比較,按照以下方式中的至少一種來確定所述傳入代碼更改不同于所述代碼更改的所述先前版本:已經(jīng)向所述代碼更改添加了一個或者多個新的測試;已經(jīng)從所述代碼更改中去除了一個或者多個測試;已經(jīng)向所述代碼更改添加了除測試代碼外的超過閾值量的新代碼;以及已經(jīng)從所述代碼更改中去除了除測試代碼外的超過閾值量的代碼。16.根據(jù)權(quán)利要求10所述的系統(tǒng),其中,與所述代碼更改相關(guān)聯(lián)的所述至少一個接收方包括下述中的至少一個:所述代碼更改的作者、所述代碼更改的審查者、和可以訪問所述代碼更改所通過的代碼審查服務(wù)。17.根據(jù)權(quán)利要求10所述的系統(tǒng),其中,使所述一個或者多個處理器執(zhí)行進一步的操作,所述進一步的操作包括: 在與所述代碼審查服務(wù)相關(guān)聯(lián)的用戶界面屏幕的通知區(qū)域中發(fā)布通知,其中,所發(fā)布的通知能由與所述代碼更改相關(guān)聯(lián)的所述至少一個接收方訪問。18.根據(jù)權(quán)利要求10所述的系統(tǒng),其中,使所述一個或者多個處理器執(zhí)行進一步的操作,所述進一步的操作包括: 接收對于提交至所述代碼審查系統(tǒng)的代碼更改的更新測試覆蓋計算的請求,其中,在檢測到所提交的代碼更改之前,接收所述更新測試覆蓋計算的請求;以及 響應(yīng)于所述請求,對所提交的代碼更改執(zhí)行一個或者多個更新測試覆蓋計算。19.一種或者多種非暫時性計算機可讀介質(zhì),所述非暫時性計算機可讀介質(zhì)存儲計算機可執(zhí)行指令,當(dāng)所述計算機可執(zhí)行指令由一個或者多個處理器執(zhí)行時,使所述一個或者多個處理器執(zhí)行操作,所述操作包括: 為有關(guān)代碼客戶端中的更改的通知而監(jiān)測代碼審查系統(tǒng); 基于有關(guān)所述代碼客戶端中的更改的所接收通知,檢測至所述代碼審查系統(tǒng)的傳入代碼更改; 對所述傳入代碼更改執(zhí)行一個或者多個測試覆蓋計算; 基于所執(zhí)行的所述一個或者多個測試覆蓋計算,生成所述代碼更改的測試覆蓋數(shù)據(jù);以及 將所生成的所述代碼更改的所述測試覆蓋數(shù)據(jù)的通知發(fā)送至與所述代碼更改相關(guān)聯(lián)的至少一個接收方。20.根據(jù)權(quán)利要求19所述的一種或者多種非暫時性計算機可讀介質(zhì),其中,使所述一個或者多個處理器執(zhí)行進一步的操作,所述進一步的操作包括: 確定對所述傳入代碼更改的先前版本執(zhí)行了測試覆蓋計算;以及 基于確定所述傳入代碼更改不同于所述代碼更改的先前版本,對所述傳入代碼更改執(zhí)行一個或者多個更新測試覆蓋計算。
【文檔編號】G06F11/36GK105830037SQ201480068403
【公開日】2016年8月3日
【申請日】2014年12月11日
【發(fā)明人】馬爾科·伊萬科維奇, 維奧拉·卡塔林·彼得拉, 帕維爾·馬齊尼亞克
【申請人】谷歌公司