專利名稱:測試代碼質(zhì)量評估的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及代碼質(zhì)量評估。
背景技術(shù):
應用程序代碼是可以是計算機應用程序的一部分的源代碼。應用程序代碼通常被 用作軟件產(chǎn)品的一部分并且可作為可執(zhí)行計算機代碼來編譯和傳送(ship)。測試代碼可被用來測試應用程序代碼。一般而言,測試代碼不像應用程序代碼那 樣被傳送給客戶或最終用戶,而是可被用來鍛煉應用程序代碼來標識該應用程序代碼中的 隱錯。隱錯可以是應用程序代碼執(zhí)行的不合需要的任何操作。一些隱錯可能是嚴重的,如 使得應用程序崩潰或停止操作,而其他隱錯可以是微小的,如笨拙地處理不正確的輸入。測試代碼有效性的一個度量是源代碼或程序被測試的‘覆蓋度’或程度。一個簡 單度量是由測試代碼執(zhí)行的應用程序代碼的可執(zhí)行塊或命令的百分比。其他度量可包括函 數(shù)覆蓋度、語句覆蓋度、分支覆蓋度以及條件覆蓋度。在應用程序代碼開發(fā)期間,這些度量 通常用來測量應用程序代碼對發(fā)布和傳送的適合性。
發(fā)明內(nèi)容
測試環(huán)境可包括被用來測試應用程序代碼的測試代碼的質(zhì)量評估。若干質(zhì)量評估 可以從對已編譯或源代碼形式的測試代碼的分析來確定,包括評估測試代碼作出的描述性 斷言、依賴關(guān)系評估、秩復雜度評估、返回值斷言、可變參數(shù)斷言、以及測試有效性歷史。質(zhì) 量評估還可包括與應用程序代碼相關(guān)地分析測試代碼,包括異常捕捉、邊界條件、對返回值 的斷言以及其他評估。測試代碼評估可以與測試代碼一起呈現(xiàn)在用戶界面中,并且可被用 來測量對源代碼所執(zhí)行的測試的質(zhì)量。測試代碼評估可被集成到具有圖形用戶界面的代碼 開發(fā)應用程序。提供本發(fā)明內(nèi)容是為了以簡化的形式介紹將在以下具體實施方式
中進一步描述 的一些概念。本發(fā)明內(nèi)容并不旨在標識出所要求保護的主題的關(guān)鍵特征或必要特征,也不 旨在用于限定所要求保護的主題的范圍。
在附圖中圖1是示出了測試代碼評估系統(tǒng)可在其中操作的環(huán)境的一實施方式的圖示。圖2是質(zhì)量測試代碼健康度量的示例實施方式的圖示。圖3是示出用于分析測試代碼的方法的實施方式的流程圖。圖4是示出用于使用應用程序代碼來分析測試代碼的方法的實施方式的流程圖。圖5是示出具有測試代碼分析結(jié)果的用戶界面的一實施方式的圖示。
具體實施例方式一種用于測試應用程序代碼的系統(tǒng)可以評估測試代碼來確定該測試代碼的質(zhì)量 度量。該質(zhì)量度量可以用比常規(guī)測試覆蓋度分析更有用的方式來給出測試代碼的有效性的 簡單評估。該系統(tǒng)可以通過源代碼分析和已編譯或中間代碼的分析來自動地評估測試代 碼,并可以使用可標識該測試代碼的‘質(zhì)量’的若干規(guī)則。在一應用程序開發(fā)環(huán)境中,測試代碼可以從應用程序代碼自動生成或被手動地創(chuàng) 作成單位測試。測試代碼可被應用程序開發(fā)者或測試工程師進一步修改和編輯以具有各種 斷言并覆蓋不同的場景。單位測試中的每一個可以在應用程序開發(fā)環(huán)境內(nèi)與示出測試代碼 組件的質(zhì)量水平的質(zhì)量圖標或其他顯示一起顯示。在對應用程序代碼執(zhí)行測試代碼時,測 試結(jié)果可以與可從測試代碼的質(zhì)量導出的質(zhì)量度量一起顯示。本說明書通篇中,在所有附圖的描述中,相同的附圖標記表示相同的元素。在將元素稱為“連接”或“耦合”的時候,這些元素可以直接連接或耦合在一起,或 者也可以存在一個或多個中間元素。相反,在將元素稱為“直接連接”或“直接耦合”的時 候,不存在中間元素。本發(fā)明可被具體化為設(shè)備、系統(tǒng)、方法、和/或計算機程序產(chǎn)品。因此,本發(fā)明的部 分或全部能以硬件和/或軟件(包括固件、常駐軟件、微碼、狀態(tài)機、門陣列等)來具體化。 此外,本發(fā)明可以采用其上包含有供指令執(zhí)行系統(tǒng)使用或結(jié)合其使用的計算機可使用或計 算機可讀程序代碼的計算機可使用或計算機可讀存儲介質(zhì)上的計算機程序產(chǎn)品的形式。在 本文的上下文中,計算機可使用或計算機可讀介質(zhì)可以是可包含、存儲、傳遞、傳播、或傳輸 程序以供指令執(zhí)行系統(tǒng)、裝置或設(shè)備使用或結(jié)合其使用的任何介質(zhì)。計算機可使用或計算機可讀介質(zhì)可以是,例如,但不限于,電、磁、光、電磁、紅外、 或半導體系統(tǒng)、裝置、設(shè)備或傳播介質(zhì)。作為示例而非限制,計算機可讀介質(zhì)可以包括計算 機存儲介質(zhì)和通信介質(zhì)。計算機存儲介質(zhì)包括以用于存儲諸如計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其 他數(shù)據(jù)這樣的信息的任意方法或技術(shù)來實現(xiàn)的易失性和非易失性、可移動和不可移動介 質(zhì)。計算機存儲介質(zhì)包括,但不限于,RAM、ROM、EEPR0M、閃存或其他存儲器技術(shù)、CD-ROM、數(shù) 字多功能盤(DVD)或其他光盤存儲、磁帶盒、磁帶、磁盤存儲或其他磁性存儲設(shè)備、或能用 于存儲所需信息且可以由指令執(zhí)行系統(tǒng)訪問的任何其他介質(zhì)。注意,計算機可使用或計算 機可讀介質(zhì)可以是其上打印有程序的紙張或其他合適的介質(zhì),因為程序可以經(jīng)由例如對紙 張或其他介質(zhì)的光學掃描而電子地被捕獲,隨后如有必要被編譯、解釋,或以其他合適的方 式處理,并隨后存儲在計算機存儲器中。通信介質(zhì)通常以諸如載波或其他傳輸機制等已調(diào)制數(shù)據(jù)信號來體現(xiàn)計算機可讀指 令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其他數(shù)據(jù),并包括任意信息傳送介質(zhì)。術(shù)語“已調(diào)制數(shù)據(jù)信號’可以被 定義為其一個或多個特征以在該信號中編碼信息的方式被設(shè)定或更改的信號。作為示例而非 限制,通信介質(zhì)包括有線介質(zhì),如有線網(wǎng)絡或直接有線連接,以及諸如聲學、射頻(RF)、紅外線 及其他無線介質(zhì)之類的無線介質(zhì)。上述的任意組合也應包含在計算機可讀介質(zhì)的范圍內(nèi)。當本發(fā)明在計算機可執(zhí)行指令的一般上下文中具體化時,該實施方式可以包括由 一個或多個系統(tǒng)、計算機、或其他設(shè)備執(zhí)行的程序模塊。一般而言,程序模塊包括執(zhí)行特定 任務或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等等。通常,程序模塊的功能可以在各個實施方式中按需進行組合或分布。圖1是示出系統(tǒng)代碼開發(fā)的實施方式100的圖示。實施方式100是可被用來編寫、 編輯、測試并調(diào)試計算機可執(zhí)行代碼的設(shè)備的簡化示例。圖1的示圖示出系統(tǒng)的各個功能組件。在某些情況下,組件可以是硬件組件、軟件 組件、或硬件和軟件的組合。某些組件可以是應用層軟件,而其他組件可以是操作系統(tǒng)層組 件。在某些情況下,一個組件到另一個組件的連接可以是緊密連接,其中兩個或更多個組件 在單個硬件平臺上操作。在其他情況下,連接可以通過跨長距離的網(wǎng)絡連接來進行。每個 實施方式可以使用不同的硬件、軟件、以及互連體系結(jié)構(gòu)來實現(xiàn)所描述的功能。實施方式100是可被用來開發(fā)軟件、固件或其他可執(zhí)行代碼的系統(tǒng)的示例。在實 施方式100的系統(tǒng)上開發(fā)的最終產(chǎn)品可被稱為應用程序代碼。如在本說明書和權(quán)利要求書 中使用的,應用程序代碼是由測試代碼測試的軟件產(chǎn)品。如在本說明書和權(quán)利要求書中使 用的,測試代碼是鍛煉應用程序代碼的軟件。一般而言,測試代碼不與應用程序代碼一起傳 送并且在執(zhí)行應用程序時不使用。軟件開發(fā)系統(tǒng)可被用來生成測試代碼,并且隨后該測試代碼可被自動地評估以確 定該測試代碼的質(zhì)量度量。在許多情況下,該測試代碼可被手動地創(chuàng)作并隨后被評估以生 成質(zhì)量度量。對該測試代碼的分析可以確定該測試代碼的各個特征或方面,以便可以確立
質(zhì)量度量。使用可對該測試代碼執(zhí)行的各種分析,該質(zhì)量度量可被用來確定測試代碼有多么 ‘好’。質(zhì)量度量可被用來標識測試代碼的可能具有缺陷的各部分并在測試結(jié)果中給出某一
確信度量。例如,可以向在分析上得分高的測試代碼給出高質(zhì)量度量。在對應用程序代碼執(zhí) 行時,測試代碼的結(jié)果可被認為是應用程序代碼質(zhì)量的良好表示。相反,具有差質(zhì)量度量的 測試代碼的結(jié)果可能是有問題的。設(shè)備102可以是具有硬件組件104和軟件組件106的通用計算機。設(shè)備102可以 具有可被用來開發(fā)應用程序代碼并可由程序員或應用程序開發(fā)人員使用的若干工具。在一些實施方式中,設(shè)備102可以類似于應用程序旨在其上執(zhí)行的設(shè)備。如此,設(shè) 備102可以表示個人計算機或其他類似設(shè)備。在其他實施方式中,設(shè)備102可以是可在不同的設(shè)備上執(zhí)行的軟件或固件的開發(fā) 平臺。例如,設(shè)備102可被用來開發(fā)并測試可以在諸如蜂窩電話或具有計算機處理器的其 他設(shè)備等另一類型的計算機設(shè)備上執(zhí)行的軟件。在這樣的實施方式中,設(shè)備102可包括模 擬預期設(shè)備的操作的仿真器或模擬器。這樣的仿真器可以允許在安裝并在預期設(shè)備硬件上 運行之前測試并執(zhí)行應用程序代碼。硬件組件104可包括可以使用隨機存取存儲器110和非易失性存儲112的處理器 108。硬件組件104可以具有網(wǎng)絡接口 114以及用戶界面116。在實施方式100的示例中,硬件組件104可以表示通用個人計算機。在其他實施 方式中,硬件組件104可以是臺式計算機或服務器計算機。一些實施方式可以是諸如膝上 型計算機、筆記本計算機、或甚至蜂窩電話、個人數(shù)字助理等便攜式設(shè)備,或其他設(shè)備。軟件組件106可包括若干不同類型的軟件可在其上操作的操作系統(tǒng)118。可執(zhí)行代碼120可以是可在操作系統(tǒng)內(nèi)直接執(zhí)行的任何類型的代碼。在一些情況下,可執(zhí)行代碼120可以是可包括可由處理器108直接執(zhí)行的命令的機器碼。在其他情況 下,可執(zhí)行代碼120可以是可在由匯編程序處理之后執(zhí)行的匯編碼。
一些軟件組件可以使用中間代碼120來定義。中間代碼120可以是被編譯成中間 表示并隨后可使用即時編譯器124來進一步編譯并由執(zhí)行引擎126執(zhí)行的源代碼。中間代 碼122在受管(managed)代碼應用程序中或其中可使用若干不同的編程語言的應用程序中 是有用的。應用程序開發(fā)系統(tǒng)128可具有被用于編寫、編輯、測試、調(diào)試以及發(fā)布應用程序的 元素中的許多元素。在實施方式100的示例中,應用程序開發(fā)系統(tǒng)128的特征可被示為其 中程序員可以在單個應用程序中執(zhí)行許多不同操作的大型應用程序或編程環(huán)境的一部分。 在其他實施方式中,所描述的各組件可以是獨立地執(zhí)行的分開的應用程序。在一些實施方式中,應用程序開發(fā)系統(tǒng)128的各部分可由其他設(shè)備來執(zhí)行。例如, 服務器設(shè)備可被用來將代碼編譯成可執(zhí)行代碼。在另一示例中,另一設(shè)備可被用來執(zhí)行應 用程序代碼和測試代碼。這樣的示例可針對具有應用程序代碼旨在用于其上的專用處理器 或硬件的設(shè)備。應用程序開發(fā)系統(tǒng)的許多實施方式或應用程序開發(fā)系統(tǒng)128中的各組件可具有 圖形用戶界面。圖形用戶界面可被用來瀏覽代碼,編寫并編輯代碼,以及從各組件的許多不 同功能中進行選擇。在一些實施方式中,應用程序開發(fā)系統(tǒng)128的各部分中的一些或全部可以使用命 令行或其他界面來執(zhí)行。許多應用程序開發(fā)系統(tǒng)128可具有編輯器130、編譯器132以及執(zhí)行環(huán)境134。編 輯器130可以允許用戶查看、編寫并編輯代碼,包括應用程序代碼和測試代碼。編譯器132 可以將源代碼編譯成可使用執(zhí)行環(huán)境134來執(zhí)行的可執(zhí)行代碼。執(zhí)行環(huán)境134可以類似于在操作系統(tǒng)環(huán)境中運行已編譯代碼。執(zhí)行環(huán)境134可包 括可提供與執(zhí)行操作系統(tǒng)環(huán)境中不可用代碼有關(guān)的詳細信息的一些調(diào)試和跟蹤功能。一組測試組件138可被用來開發(fā)并測試應用程序代碼140。測試組件138可包括 用于創(chuàng)建并分析測試代碼142的各種組件。測試代碼142可以鍛煉應用程序代碼140來揭 示應用程序代碼140中的任何缺陷并確保應用程序代碼140如預期的那樣執(zhí)行。一些實施方式可以具有可從應用程序代碼140創(chuàng)建各種測試代碼元素的測試代 碼生成器144。例如,測試代碼生成器144可以創(chuàng)建可使得應用程序代碼內(nèi)的命令或函數(shù)得 到鍛煉的單位測試。單位測試可以鍛煉應用程序代碼140的一小部分,如短函數(shù)、子例程、 或單獨的命令。在一些實施方式中,測試代碼生成器144可以創(chuàng)建可由程序員修改或改變以全面 地鍛煉應用程序代碼的該部分的測試代碼的各部分。在這樣的實施方式中,測試代碼生成 器144可以創(chuàng)建諸如單位測試等測試的外殼,并且程序員可以執(zhí)行一些編輯或編寫測試代 碼的一小部分來完成測試。測試代碼142可包括可以測試應用程序140的一被隔離的部分的單位測試。在大 型應用程序中,可以創(chuàng)建數(shù)百或甚至數(shù)千單位測試來測試應用程序的各部分。單位測試可 以確保應用程序代碼140的各小部分如預期的那樣執(zhí)行,并可在單個類內(nèi)操作并且無需外 部組件。
測試代碼142可包括集成測試,其中應用程序代碼140內(nèi)的各軟件模塊或組件可 以作為一個組來組合并測試。集成測試可以在單個測試中測試應用程序代碼140的大型子 集。在許多情況下,可以創(chuàng)建多個集成測試來測試不同的使用場景或測試例。集成測試可 包括測試進程之間以及其他事件中的通信。測試代 碼142還可包括系統(tǒng)測試,這可將應用程序代碼140作為單個單位來進 行測試。系統(tǒng)測試可以在各種使用場景中在高級別上鍛煉應用程序代碼140。許多這樣 的測試可以將應用程序代碼140當作‘黑盒’,提供輸入并期待特定輸出。系統(tǒng)測試可包 括性能測試、功能測試、錯誤處理測試、負載測試、壓力測試、可靠性測試、恢復和故障轉(zhuǎn)移 (failover)測試、以及許多其他類型的測試。可以剪裁測試代碼142以適應應用程序代碼140的類型。一個示例可以是在飛機 中的航空計算機中操作的軟件。這樣的軟件可以在人類生命處于危險之中時操作,測試代 碼142可以被非常詳細并嚴格地制作。在另一示例中,簡單的游戲應用程序可具有游戲制 造商可能希望在發(fā)貨之前維持的特定質(zhì)量標準。在又一示例中,出于安全性起見,可以嚴格 地測試處理健康記錄或其他個人信息的軟件應用程序。測試代碼評估器146可以使用測試策略148分析測試代碼142以確定測試代碼 142的質(zhì)量評估。測試代碼評估器146可以分析測試代碼142來尋找斷言、斷言內(nèi)的描述、 秩復雜度、依賴關(guān)系、以及其他因素。從這些和其他分析中,可為各單獨的測試以及為整個 測試代碼142創(chuàng)建質(zhì)量測試代碼健康度量。質(zhì)量測試代碼健康度量可以與測試代碼142內(nèi)的各單獨的測試中的每個測試一 起顯示。健康度量可被用來指示哪些測試滿足以及哪些測試不滿足測試策略148中定義的 標準。可以對不滿足這些標準的那些測試加上標志以進行改進或進一步開發(fā)。測試策略148可以定義可在應用程序代碼140的開發(fā)期間使用的最佳實踐或測試 標準。測試策略148可以定義由測試代碼評估器146應用的一些規(guī)則來確定測試代碼142 是否符合最佳實踐。在一些實施方式中,測試策略148可包括針對各測試標準的若干組規(guī)則。這些規(guī) 則可由程序員選擇,使得程序員可以集中于測試代碼142的特定方面。例如,程序員可以選 擇斷言相關(guān)測試并可以不選擇其他度量。在這種情況下,測試代碼評估器146可以分析測 試代碼142以尋找適用于斷言的測試的子集,而不分析其他類型的潛在問題??蔀樗_發(fā)的不同類型的應用程序軟件并為編程團隊或公司的內(nèi)部管理來創(chuàng)建 一組測試策略148。測試策略148可以定義測試代碼評估器146可用來驗證遵從性的測試 代碼的各種特性。在一些情況下,不同類型的應用程序代碼140可以確定測試策略148。應用程序代碼評估器152可以用與測試代碼142類似的方式來評估應用程序代碼 140。代碼設(shè)計策略154可以描述應用程序代碼評估器152對應用程序代碼140所執(zhí)行的 分析。應用程序代碼評估器152可以檢查應用程序代碼140來確定與代碼設(shè)計策略154 的遵從性。代碼設(shè)計策略154可以包括與如何構(gòu)造應用程序代碼140相關(guān)的策略,如定義 模塊性策略、注釋和文檔編制策略、函數(shù)的輸入和輸出參數(shù)的檢查、以及許多其他類型的分 析。在一些實施方式中,測試代碼評估器146和應用程序代碼評估器152可以是同一應用程序或可執(zhí)行代碼,但可以使用測試策略148和代碼設(shè)計策略154來對測試代碼142 和應用程序代碼140分別執(zhí)行不同類型的檢查和分析。
測試代碼評估器146和應用程序代碼評估器152的輸出可被組合以產(chǎn)生用于測試 結(jié)果的質(zhì)量度量。例如,可以通過分析應用程序代碼140中的函數(shù)來確定一組測試代碼的 完成度或覆蓋度,并將所述函數(shù)與測試代碼142進行匹配來確定是否所有應用程序函數(shù)都 具有匹配的測試例程。在另一示例中,測試代碼142所產(chǎn)生的測試結(jié)果可以由測試代碼142的質(zhì)量來評 定資格。例如,具有差質(zhì)量測試代碼健康度量的測試代碼可不利地影響應用程序代碼的總 體評估。在該示例中,對應用程序代碼140執(zhí)行的很差地構(gòu)造的測試代碼142可生成測試 結(jié)果。測試結(jié)果可以顯示在質(zhì)量測試代碼健康度量的旁邊,它可指示測試代碼142不滿足 測試策略148中定義的基本標準。這樣的指示可以否定測試結(jié)果。相反,肯定的質(zhì)量測試 代碼健康度量可以向測試結(jié)果給出高可信性。測試代碼執(zhí)行器150可以對應用程序代碼140執(zhí)行測試代碼142以生成測試結(jié) 果。一些實施方式可以按包括可收集測試執(zhí)行期間的各種監(jiān)視信息的各種調(diào)試特征的方式 來執(zhí)行測試代碼。調(diào)試特征可在應用程序開發(fā)系統(tǒng)128內(nèi)被打開和關(guān)閉,并且可以在應用 程序開發(fā)系統(tǒng)128外部執(zhí)行應用程序時存在或不存在。在一些實施方式中,測試結(jié)果可以存儲在通過網(wǎng)絡154到達的隱錯數(shù)據(jù)庫158中 并可以位于遠程服務器156上。隱錯數(shù)據(jù)庫158可以捕捉得自測試代碼執(zhí)行器150的任何 故障或問題。隱錯數(shù)據(jù)庫158可以具有用于標識應用程序代碼140內(nèi)的隱錯并跟蹤對隱錯 的修復的機制。這樣的系統(tǒng)可被用來管理應用程序代碼140的代碼開發(fā)項目,并且在管理 開發(fā)應用程序代碼140的不同部分上工作的程序員團隊時是有用的。應用程序開發(fā)系統(tǒng)128可包括可被用來顯示質(zhì)量測試代碼健康度量連同其他質(zhì) 量度量的用戶界面136。在本說明書中稍后呈現(xiàn)的實施方式500中示出了一個示例。圖2是實施方式200的示圖,示出了用于分析測試代碼和應用程序代碼以生成質(zhì) 量測試健康代碼度量的順序。實施方式200是可用來分析應用程序代碼和測試代碼、隨后 對這兩者一起分析并最后分析測試結(jié)果以確定測試代碼的質(zhì)量測量的方法的總體概覽。測試代碼202和應用程序代碼204可在應用程序代碼開發(fā)期間的任何點處測試。 在許多情況下,實施方式200的過程可以在應用程序代碼204的開發(fā)期間執(zhí)行數(shù)百或數(shù)千 次。在非常復雜的應用程序中,實施方式200的過程可以消耗很長的時間并且可以例如在 代碼開發(fā)一天之后的每天晚上執(zhí)行。在許多情況下,實施方式200的過程可以對應用程序的一小部分執(zhí)行,如可以由 單個程序員或一小隊程序員開發(fā)的部分。在這種情況下,實施方式200的過程可以相對快 速地執(zhí)行,并且可被用來在周期性的基礎(chǔ)上生成質(zhì)量測試代碼健康度量以幫助開發(fā)人員創(chuàng) 建測試代碼來測試應用程序代碼??梢允褂貌捎么a設(shè)計策略208的代碼設(shè)計分析工具206來分析應用程序代碼 204。該分析可以檢查應用程序代碼204與各設(shè)計實踐的遵從性,以使得該代碼可以是可維 護的、可讀的,并可以遵循各功能設(shè)計標準。該分析的結(jié)果可以是一組代碼遵從性度量210??墒褂脺y試策略214的測試代碼分析工具212可以類似地分析測試代碼202。測 試策略214可以分析測試代碼202與測試代碼標準的遵從性,測試代碼標準可以與代碼設(shè)計策略208中定義的代碼設(shè)計標準不同。具體而言,測試代碼分析工具212可以評估測試代碼202的斷言和與斷言相關(guān)聯(lián) 的描述。另外,可以分析測試代碼的秩復雜度和額外依賴關(guān)系。測試代碼分析工具212可以將測試代碼202作為源代碼或已編譯代碼來評估。在 一些情況下,已編譯代碼可以是中間代碼。在框216,可以使用測試代碼和應用程序代碼來執(zhí)行附加分析。這一分析還可使用 測試策略214并可以標識應用程序代碼204中的特征以確定測試代碼202的各部分是否覆 蓋這些特征。框21 6的分析的輸出是測試代碼遵從性。測試執(zhí)行器202可以對應用程序代碼204執(zhí)行測試代碼202以產(chǎn)生測試結(jié)果222。 可以執(zhí)行結(jié)果分析224并使用測試代碼遵從性218生成質(zhì)量測試代碼健康度量226。實施方式200的操作僅僅是可生成質(zhì)量測試代碼健康度量的一種方法。質(zhì)量測試 代碼健康度量可由測試代碼分析212生成并被反映在測試代碼遵從性218中。在一些實施 方式中,這些附加質(zhì)量測試代碼健康度量可被捕捉、存儲并顯示給用戶。在其他實施方式 中,可以生成一組總體度量,如質(zhì)量測試代碼健康度量226中所反映的。圖3是示出用于分析測試代碼的方法的實施方式300的流程圖。實施方式300是 可由諸如實施方式100的測試代碼評估器146等測試代碼評估器執(zhí)行的方法的示例。其他實施方式可以使用不同的順序、附加或更少的步驟以及不同的名稱或術(shù)語來 實現(xiàn)類似的功能。在一些實施方式中,各種操作或一組操作可以按同步或異步的方式與其 他操作并行執(zhí)行。在此選擇的這些步驟被挑選來以簡化的形式示出操作的一些原理。實施方式300是可對測試代碼執(zhí)行的分析的更詳細的圖示。實施方式300的分析 類似于實施方式200中示出的分析,但可按不同的順序示出。在框302,可開發(fā)應用程序代碼。在框304,可開發(fā)測試代碼以對應用程序代碼執(zhí)行各種測試。測試代碼可包括單位 測試、集成測試、系統(tǒng)測試以及任何其他類型的測試。在框306,可分析每一測試。在框308,分析測試代碼內(nèi)的每一輸入、輸出以及可變參數(shù)。在框310,如果沒有對該參數(shù)的斷言,則在框312,將該測試標記為缺少斷言。在框316,檢查斷言的描述。在框318,如果該描述不包含描述性文本,則在框320, 將該測試標記為缺少描述性文本。可以通過檢查測試來確定斷言描述是否與可作為默認描 述的自動地生成的斷言描述不同來簡單地確定該描述性文本。這樣的改變可以指示人類程 序員可能已經(jīng)修改了該描述。在一些實施方式中,可以通過確定特定關(guān)鍵詞存在、該文本至少包含最少數(shù)量的 詞語、該描述與測試中的任何其他描述不同、或其他組織準則來驗證該描述性文本.在框324,可以評估測試的秩復雜度。秩復雜度可以是通過測試的源代碼的獨立路 徑的數(shù)量的測量。具有高秩復雜度的測試可以指示比具有低秩復雜度的測試更高的復雜度 并且可能更低的可靠性。較高的秩復雜度可以指示測試代碼可能更難以維護并且對外部改 變較沒有回復力。在框326,可以評估測試的依賴關(guān)系。具有高數(shù)量的依賴關(guān)系的測試可以比具有較 少數(shù)量的依賴關(guān)系的測試更不可靠。在框328,可以查詢隱錯數(shù)據(jù)庫以確定當前測試所檢測到的故障。隱錯數(shù)據(jù)庫可以返回檢測到的故障的總數(shù)以及這些故障是否被確定為應用程序代碼或測試代碼中的問題。 一致地返回應用程序代碼中的故障以及很少或沒有返回測試代碼中的故障的測試可具有
高置信度。 在框330,可創(chuàng)建測試的質(zhì)量測試代碼健康度量??赏ㄟ^一組規(guī)則、一種算法、或其 他機制來評估斷言的存在、斷言的質(zhì)量、秩復雜度、依賴關(guān)系和使用歷史以確定質(zhì)量測試代 碼健康度量。在許多情況下,質(zhì)量測試代碼健康度量可以是簡單的“高”、“中”或“低”置信 度。其他實施方式可以使用具有更多或更少值的范圍。在框322,質(zhì)量測試代碼健康度量可以在用戶界面中顯示在測試的旁邊。質(zhì)量測試 代碼健康度量可以向開發(fā)人員給出可被用來標識可能不合標準的測試的簡單指示符。圖4是示出用于根據(jù)應用程序代碼來分析測試代碼的方法的實施方式400的流程 圖。實施方式400是可由測試代碼評估器,諸如實施方式100的測試代碼評估器146,執(zhí)行 的方法的示例。其他實施方式可以使用不同的順序、附加或更少的步驟以及不同的名稱或術(shù)語來 實現(xiàn)類似的功能。在一些實施方式中,各種操作或一組操作可以按同步或異步的方式與其 他操作并行執(zhí)行。在此選擇的這些步驟被挑選來以簡化的形式示出操作的一些原理。實施方式400示出可以執(zhí)行以基于應用程序代碼(除測試代碼之外)來確定質(zhì)量 度量的一些分析。在一些情況下,實施方式400可以是實施方式300的繼續(xù)。在框402,可分析應用程序代碼。在框404,可標識應用程序可扔出的所有異常,并 且在框406,可將所扔出的異常與測試代碼進行匹配,并且可以記錄任何未測試的異常。在框408,可標識函數(shù)的所有參數(shù)并標識這些函數(shù)的所有邊界條件。在框410,可 將這些參數(shù)和邊界條件與測試代碼進行匹配并可記錄任何未測試的參數(shù)或邊界條件。在框412,可以標識應用程序代碼中的所有可調(diào)用函數(shù)。在框414,單獨地分析這 些函數(shù)。在框416,如果不存在對該函數(shù)的測試,則在框418,將該函數(shù)標記為未測試的。如 果在框418存在測試并且在框420沒有斷言返回值,則在框422,將該函數(shù)標記為缺少斷言。 如果在框416存在測試并且在框420斷言了返回值,則該過程可返回框414以處理另一函 數(shù)。在框424,標識應用程序代碼的具有高秩復雜度的各部分。在框426,檢查測試代 碼以確定測試代碼是否鍛煉應用程序代碼中的該部分中的每一獨立路徑。高秩復雜度應用 程序代碼的測試代碼可以使用比具有較低秩復雜度的應用程序代碼的其他類似大小的塊 更徹底的測試。在框428,可標識應用程序代碼的依賴關(guān)系。在框430,對于應用程序代碼的各高 依賴關(guān)系部分,可以確定這些區(qū)域的測試覆蓋度。到現(xiàn)在為止在實施方式400中執(zhí)行的應用程序代碼和測試代碼的所有分析可被 用來確定質(zhì)量測試覆蓋度度量。質(zhì)量測試覆蓋度度量可被顯示在應用程序代碼的該部分的 旁邊,使得程序員可以快速地標識應用程序代碼的可從附加測試代碼開發(fā)中獲益的這些區(qū) 域。在框434,可將質(zhì)量測試覆蓋度度量與來自實施方式300的質(zhì)量測試代碼健康度 量相組合以生成質(zhì)量測試度量。質(zhì)量測試度量可以表示應用程序的測試狀況(regime)的 總體‘健康’。
在框436,可以顯示各測試度量。圖5是示出用戶界面的示例實施方式500的示圖。實施方式500僅僅是可在用戶 界面中如何顯示質(zhì)量度量的一個示例。實施方式500是可合并編輯器、編譯器以及測試執(zhí)行器的應用程序開發(fā)系統(tǒng)的示 例。實施方式500可具有程序員可通過其編寫應用程序代碼、創(chuàng)建測試代碼并對該應用程 序代碼執(zhí)行該測試代碼以生成測試結(jié)果的圖形用戶界面。測試結(jié)果可被瀏覽、查看、保存并 用來標識應用程序代碼或測試代碼中的問題區(qū)域??梢允褂脩贸绦蜷_發(fā)系統(tǒng)內(nèi)的各位置 中的圖標來顯示在本說明書中討論的質(zhì)量度量。窗口 502具有標題504和若干窗口。編輯窗口 506可包含代碼并可被用來編寫并 編輯應用程序代碼和測試代碼。在實施方式500的示例中,可以選擇一組選項卡508之一 來打開 “Classl. cs (類 1) ” 或 “TestClassl. cs (測試類 1) ”。測試視圖窗口 510可以顯示各種測試代碼元素。與測試代碼元素一起的是可 反映測試代碼的分析結(jié)果的質(zhì)量測試代碼度量圖標512。在實施方式500的示例中, "SubtractTest (減去測試)”可以與指示‘良好,狀況的暗或綠圖標一起 示出。"AddTest (添 加測試)”可以與指示‘差,狀況的‘X,或紅圖標一起示出。“ ItsJustMathTest (僅是數(shù) 學測試)”可與指示中間狀況的中等或黃圖標一起示出。“ItsJustMathTest”可以是包含 “SubtractTest”和“AddTest”的類,并且“ItsJustMathTest”的圖標可以反映其中包含的 測試的總體狀況。測試結(jié)果窗口 514可以在對應用程序代碼執(zhí)行測試代碼時示出應用程序代碼的 測試結(jié)果。測試結(jié)果窗口 514可包含框516中的應用程序代碼的分層結(jié)構(gòu)視圖連同測試覆蓋 度518。測試覆蓋度518可以反映在對應用程序代碼執(zhí)行測試代碼時該測試代碼鍛煉了應 用程序代碼的多少塊。測試質(zhì)量圖標520可以反映對應用程序代碼的該部分執(zhí)行的每一組測試的質(zhì)量 測試代碼度量。在一些情況下,測試質(zhì)量圖標520可以表示對應用程序代碼執(zhí)行的若干不 同測試代碼組件的聚集。測試故障522可以表示在測試代碼的最后一次運行中遇到的故障的數(shù)量。應用程序代碼質(zhì)量度量524可以是將測試結(jié)果522、測試覆蓋度518以及測試質(zhì)量 520相組合以表示應用程序代碼的當前狀況的質(zhì)量應用程序代碼健康度量。以上對本主題的描述是出于說明和描述的目的而提出的。它不旨在窮舉本主題或 將本主題限于所公開的精確形式,且鑒于以上教導其他修改和變型都是可能的。選擇并描 述實施方式來最好地解釋本發(fā)明的原理及其實踐應用,從而使本領(lǐng)域的其他技術(shù)人員能夠 在各種實施方式和各種適于所構(gòu)想的特定用途的修改中最好地利用本發(fā)明的技術(shù)。所附權(quán) 利要求書旨在包括除受現(xiàn)有技術(shù)所限的范圍之外的其他替換實施方式。
權(quán)利要求
1.一種可在計算機處理器上操作的應用程序開發(fā)系統(tǒng),所述應用程序開發(fā)系統(tǒng)包括 對應用程序代碼執(zhí)行測試代碼以生成測試結(jié)果的測試代碼執(zhí)行系統(tǒng),所述測試代碼具有多個測試代碼組件,所述測試代碼組件中的每一個可單獨執(zhí)行;確定所述測試代碼組件中的每一個的質(zhì)量測試代碼健康度量的測試代碼評估器;以及 將所述測試代碼組件與所述質(zhì)量測試代碼健康度量的指示符一起顯示在其上的用戶 界面。
2.如權(quán)利要求1所述的系統(tǒng),其特征在于,還包括能夠編輯所述測試代碼和所述應用程序代碼的代碼編輯器。
3.如權(quán)利要求2所述的系統(tǒng),其特征在于,還包括檢查所述應用程序代碼并生成所述測試代碼組件的至少一部分的自動測試代碼生成。
4.如權(quán)利要求3所述的系統(tǒng),其特征在于,所述測試代碼評估器評估所述測試代碼中 定義的斷言。
5.如權(quán)利要求4所述的系統(tǒng),其特征在于,所述斷言通過一種方法來評估,所述方法包括確定第一測試代碼組件所覆蓋的應用程序代碼塊; 標識來自所述塊的每一輸出以確定輸出的數(shù)量;檢查所述第一測試代碼組件以確定與所述輸出相對應的數(shù)量的斷言;以及 使用所述數(shù)量的斷言和所述數(shù)量的輸出來確定質(zhì)量測試代碼健康度量。
6.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述測試代碼評估器檢查所述測試代碼的 依賴關(guān)系棧并至少部分地從所述依賴關(guān)系棧中生成質(zhì)量測試代碼健康度量。
7.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述測試代碼評估器確定第一測試代碼組 件的秩復雜度并至少部分地使用所述秩復雜度來生成所述第一測試代碼組件的質(zhì)量測試 代碼健康度量。
8.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述測試代碼評估器還確定包括所述測試 代碼健康度量的測試結(jié)果度量。
9.如權(quán)利要求8所述的系統(tǒng),其特征在于,所述測試結(jié)果度量是從測試覆蓋度和所述 測試代碼健康度量來確定的。
10.如權(quán)利要求9所述的系統(tǒng),其特征在于,所述測試覆蓋度包括來自所述應用程序代 碼的輸出的斷言。
11.如權(quán)利要求10所述的系統(tǒng),其特征在于,所述測試覆蓋度包括來自所述應用程序 代碼的所扔出的異常的異常處理。
12.如權(quán)利要求11所述的系統(tǒng),其特征在于,所述測試覆蓋度與包括同所述測試結(jié)果 度量相對應的顏色的指示符一起顯示在所述用戶界面上。
13.—種在計算機處理器上執(zhí)行的方法,所述方法包括 接收要測試的應用程序代碼;接收被設(shè)計來測試所述應用程序代碼的測試代碼,所述測試代碼包括所述應用程序代 碼的單位測試;執(zhí)行所述測試代碼的自動評估以確定所述單位測試中的每一個的質(zhì)量測試代碼健康度量;以及顯示所述單位測試中的每一個的所述質(zhì)量測試代碼健康度量。
14.如權(quán)利要求13所述的方法,其特征在于,還包括基于所述質(zhì)量測試代碼健康度量中的每一個來生成總體測試代碼健康度量。
15.如權(quán)利要求13所述的方法,其特征在于,還包括 對所述應用程序代碼執(zhí)行所述測試代碼以生成測試結(jié)果;以及 顯示所述測試結(jié)果連同所述質(zhì)量測試代碼健康度量。
16.如權(quán)利要求15所述的方法,其特征在于,所述測試代碼還包括集成測試。
17.如權(quán)利要求16所述的方法,其特征在于,所述測試代碼還包括系統(tǒng)測試。
18.—種可在計算機處理器上操作的應用程序開發(fā)系統(tǒng),所述應用程序開發(fā)系統(tǒng)包括可通過其顯示源代碼的編輯器;用于將所述源代碼編譯成已編譯代碼的編譯器;在所述計算機處理器上執(zhí)行所述已編譯代碼的執(zhí)行環(huán)境;對應用程序代碼執(zhí)行測試代碼以生成測試結(jié)果的測試代碼執(zhí)行系統(tǒng),所述測試代碼具 有多個測試代碼組件,所述測試代碼組件中的每一個可單獨執(zhí)行,所述測試代碼組件包括 單位測試;通過分析所述測試代碼組件來確定所述測試代碼組件中的每一個的質(zhì)量測試代碼健 康度量的測試代碼評估器;以及所述測試代碼組件可與所述質(zhì)量測試代碼健康度量的指示符一起顯示在其上的用戶 界面。
19.如權(quán)利要求18所述的系統(tǒng),其特征在于,所述測試代碼評估器分析所述測試代碼 組件中的至少一個的源代碼版本。
20.如權(quán)利要求19所述的系統(tǒng),其特征在于,所述測試代碼評估器分析所述測試代碼 組件中的至少一個的已編譯代碼版本。
全文摘要
測試環(huán)境可包括被用來測試應用程序代碼的測試代碼的質(zhì)量評估。若干質(zhì)量評估可以從對已編譯或源代碼形式的測試代碼的分析來確定,包括評估測試代碼作出的描述性斷言、依賴關(guān)系評估、秩復雜度評估、返回值斷言、可變參數(shù)斷言、以及測試有效性歷史。質(zhì)量評估還可包括與應用程序代碼相關(guān)的測試代碼分析,包括異常捕捉、邊界條件、對返回值的斷言以及其他評估。測試代碼評估可以與測試代碼一起呈現(xiàn)在用戶界面中,并且可被用來管理應用程序的測試過程。測試代碼評估可被集成到具有圖形用戶界面的代碼開發(fā)應用程序。
文檔編號G06F11/36GK102147764SQ201110037410
公開日2011年8月10日 申請日期2011年1月31日 優(yōu)先權(quán)日2010年2月8日
發(fā)明者J·A·穆哈斯凱, R·沃格里內(nèi)茨 申請人:微軟公司