專利名稱:基于上下文的代碼分析的制作方法
基于上下文的代碼分析
祖旦 冃"、
大多數軟件被開發為大量可重用的軟件對象,它們各自被設計為執行一或 多個任務。軟件的實用性與功能以及運行該軟件的計算系統,依賴于對被編譯 或解釋以便處理器執行的源代碼的正確編碼。編碼錯誤通常引起偏離軟件的預 期功能,并且有可能影響計算機系統的其它部分(例如,其它應用程序、數據 庫、操作系統等)。這樣的編碼錯誤不僅破壞用戶有關軟件的計算體驗,而且 還會在整個計算機系統中引起不希望的效果。因此,高質量軟件的生產者花費 大量的測試和分析努力來消除其軟件中的錯誤。
然而,市場需求和編程者與設計者的創造性已經導致日益復雜但強大的軟 件。隨著軟件復雜性的增加,實現軟件所需的源代碼行數通常也增加。其直接 結果是源代碼中錯誤的可能性持續增加。因此,必須經常以各種方式(在發布 之前和之后)多次測試和分析軟件,以幫助保證軟件按預期方式運行。
在一些分析環境中,測試者開發自動化規則或測試(在本文中可互換使 用),它們驗證軟件的一或多個部分的操作。例如,規則可自動化圖形用戶界 面內輸入域值的輸入,以各種輸入參數并在各種各樣的條件下調用軟件對象, 收集產生的輸出,并且確定測試是通過還是失敗。測試者(無論是否為測試開 發者)隨后可執行測試實例,它提供正在測試的對象或目標代碼通過還是失敗 (且由此對象是否按預期方式運行)的指示。
當前,測試開發者編寫不同的規則用于不同級別的軟件驗證,即每一規則 在確定對象或代碼段通過還是失敗時執行的分析量。用于測試軟件的規則的驗 證級別依賴于無數因素而很大地變化。因此,通常在運行規則或測試實例所消 耗的時間量與徹底測試軟件的程度之間有一個折衷。具體地,生成與分析的輸 出越少,則進行測試所消耗的時間就變得越少。例如,測試開發者可編寫用于 僅測試軟件的壓力或負荷的規則。在此情形中,可忽略測試實例產生的輸出, 并且如果軟件或系統沒有崩潰,則認為對象或目標代碼己經通過。盡管該分析形式允許快速測試軟件,但不提供對由軟件引起的所有效果的完整測定。因此, 在確定每一規則所需的驗證級別以適當地分析軟件時,通常存在許多必需的商 討與考量。
為了允許各種各樣的測試驗證級別,已經開發了代碼分析工具(例如靜態 代碼分析工具),它們為軟件開發者提供在其代碼中檢査問題和矛盾的半自動 化機制。更具體地,測試開發者用一組具有各種驗證級別的規則來填充這些工 具來分析軟件源、目標或二進制代碼,以便標識其正確性、完整性和/或質量。 這些工具一般作為通過各種配置形式控制的整體操作來完成或執行對軟件的
分析。換言之,應用于代碼的特定檢查或規則由源控制表達式(諸如弁pmgma)、 經由工具命令行選項或者通過在單獨的控制文件中給出的設置來啟用或禁用。 盡管這允許測試者對在開發過程中的各級處要運行什么類型的規則進行某種 程度的控制,但這樣的方法仍存在若干缺點和限制。
例如,為了適當地測試代碼,測試者(即靜態代碼分析工具的用戶)需要 對各種規則具有詳盡的了解,包括但不限于在什么級和在什么條件下應當應用 這些規則。然而,了解所有測試實例,通常超出了大多數代碼開發者的專業知 識(因為他們通常不是專業的測試開發者)。因此,測試者可能不能在適當的 時間并在適當的條件下應用規則。而且,因為這些測試在實質上通常是靜態的 (即,它們通常由來自測試者的明確表示來執行),所以在執行這些測試時存 在各種時間效率低下的情況。例如,相同的檢查可能反復運行,在過程中不適 當的接合處可能引起問題(例如,在重復地忽略或推遲它們的地方),和/或不 能在開發過程的足夠早的時間標識錯誤或故障(即,不言自明的是,標識或定 位問題的時候離開工(check in)越遠,則要解決它的成本就越高)。因此, 典型代碼分析工具的這些和其它有關缺點經常引起大量問題,諸如未完成的工 作、用戶和開發者受挫、性能問題、未標識的錯誤和故障、時間成本等等。
簡要概述
通過本發明的示例實施例,克服了上面標識的當前代碼分析工具的不足與 缺點。例如,本文描述的實施例提供一種代碼分析工具,它通過動態地跟蹤在 其下開發代碼的分析上下文并且應用對應于當前上下文條件的規則(或其部分)來自動管理一組預定義規則的執行,以便平衡性能考量。注意到,提供本 概述以便用簡化形式介紹將在下面詳細描述中進一步描述的一些概念。本概述 不旨在標識要求保護主題的關鍵特征或基本特征,也不旨在用于幫助確定要求 保護主題的范圍。
一個示例實施例提供一種配置有代碼分析工具的計算系統,該工具接收要 基于一組預定義的規則對正確性、完整性和/或質量進行分析的目標代碼。還從 開發設備接收代碼分析上下文信息,用于動態跟蹤正在其中開發該目標代碼的 當前代碼分析上下文。此外,接收對應于從該組預定義規則中選擇的規則的上 下文參數。注意,上下文參數按照代碼分析上下文信息描述該規則的至少一部 分的執行條件。之后,根據當前代碼分析上下文評估規則上下文參數,用于動 態確定該規則的至少一部分是否能針對正在分析的目標代碼執行;因而,在開 發過程中的適當階段處應用該規則的至少一部分。
其它示例性實施例提供一種代碼分析工具,它包括動態上下文跟蹤模塊, 用于從開發設備接收用于確定正在其中開發目標代碼的當前代碼分析上下文 的代碼分析上下文信息。代碼分析工具還包括規則管理模塊,用于按照代碼分 析上下文信息評估當前代碼分析上下文和指示規則的至少一部分的執行條件 的上下文參數。基于評估,規則管理模塊動態確定規則的至少一部分可以針對 要對正確性、完整性和/或質量進行分析的目標代碼來執行。另外,代碼分析工 具包括執行模塊,用于針對正在分析的目標代碼執行規則的至少一部分,使得 規則的至少一部分在開發過程中的適當階段得到應用。
本發明的其它特征和優點將在后面的描述中闡述,并且通過該描述其部分 將是顯然的,或者可通過實踐本發明來領會。本發明的特征和優點可借助于所 附權利要求書中具體指出的工具和組合來了解和獲得。本發明的這些和其它特 征通過下面的描述和所附權利要求書將變得更為顯然,或者可通過實踐如下文 闡述的本發明來領會。
附圖簡述
為了描述可以獲得本發明的上述及其它優點和特征的方式,將參考本發明 在附圖中例示的特定實施例來提供上面簡述的本發明的更具體描述。可以理解這些附圖只是描繪本發明的典型實施例并且因此不應視為對本發明范圍的限 定,將通過使用附圖以額外的特殊性與細節來描述本發明,這些附圖是-
圖1例示按照示例實施例被配置為基于正在其下開發目標代碼的上下文 動態檢查軟件的代碼分析工具;以及
圖2例示按照示例實施例用于通過動態跟蹤正在其下開發代碼的分析上 下文來管理規則的執行的方法的流程圖。
詳細說明
本發明延及用于基于正在其下開發代碼的當前上下文動態管理規則在代 碼分析工具中的執行的方法、系統和計算機程序產品。本發明的實施例可包括 包含各種計算機硬件或模塊的專用或通用計算機,如下更詳細地描述的。
本文提供的實施例形式化多個與目標代碼的分析檢査有關的中間分析上 下文。因此,實施例動態標識正在其下開發目標代碼的當前分析上下文,并且 隨后可基于規則可應用于什么樣的上下文的了解來執行規則(或其部分)。這 樣的中間分析上下文可包括但不限于,目標代碼的開發階段、目標代碼的類型 或狀態、操縱目標代碼的源、目標代碼的用途或者開發或運行時要求。注意, 這樣的中間分析上下文與軟件開發過程除字面上的代碼的開發之外的其它階 段有關。這些其它階段可包括但不限于,構建和打包表示、部署測試以及在照 字面意義執行一一例如在各種機器和網絡配置中執行時的運行時的代碼的分 析。當然,存在用于定義或形式化代碼分析上下文的眾多重疊或其它的關系。 因此,本文定義的術語"代碼分析上下文"應當寬泛地解釋為包括任何數量的 上面提到的并在后續實施例中更詳細地定義的分析上下文、它們的組合和/或其 分層關系。
注意,對當前的上下文條件的了解可由系統以各種方法來獲得。例如,這 樣的上下文信息可通過與集成開發環境(IDE)的耦合來獲得,集成開發環境 通常傳達項目類型和源語言,并且可能具有對編譯器設置和/或構建風格等等的 了解。可替換地,或者相結合地,這樣的上下文信息可通過檢査基于源的和編 譯器所提供的元數據和/或通過檢查作為二進制代碼的宿主的機器來獲得。另 外,用于提供代碼分析信息的其它上下文源可包括諸如檢査作為機器的宿主的較大網絡系統之類。
不管如何確定當前的代碼分析上下文條件,為了確定與這些條件有關的規 則集,分析規則(或其它數據對象)可以描述(例如通過元數據)在其下規則 (或其一部分)能運行的那些上下文條件(以及諸如規則優選或默認上下文等
其它信息)。有關用于運行規則的上下文或所提供的其它信息(例如在元數據 中提供)的這些決定可由規則開發者作出,但其它實施例還允許修改、噪聲過 濾和/或覆蓋這些上下文條件。例如, 一些實施例允許通過IDE內的明確表示 和/或通過修改關聯于分析運行的控制文件來修改或覆蓋規則可在其下應用的 上下文。因此,當開發者轉到配置代碼分析選項時,該開發者可具有覆蓋關聯 于每一規則的一組上下文的選項。該信息隨后可存儲在包含由用戶設置的其它 代碼分析選項的項目文件中。
不過,對于還未被覆蓋的那些規則,在各個開發級期間,動態確定當前的 上下文,并且基于提供的信息或元數據,執行已經配置為應用于這些上下文條 件的那些規則。如可以看到的,這允許在各個開發級期間對代碼的動態分析, 使得可在開發過程中盡可能早地向代碼開發者通知潛在問題。另外,測試開發 者,通常具有有關規則的更專業知識,可以考慮和設置規則應當在其下應用的 上下文。此外,隨著條件改變或發展(例如,在其下開發目標代碼的經形式化 的上下文條件發生改變),還可以修改各種元數據并保持最新,從而使這些規 則能夠擴展。
盡管下面參考附圖更詳細地描述對有利特征的更具體引用,但本發明范圍 內的實施例還包括用于攜帶或其上存儲有計算機可執行指令或數據結構的計 算機可讀介質。這樣的計算機可讀介質可以是可由通用或專用計算機訪問的任
何可用介質。作為示例但非限制,這樣的計算機可讀介質可包括RAM、 ROM、 EEPROM、 CD-ROM或其它光盤存儲、磁盤存儲或其它磁存儲設備,或者可 用于攜帶或存儲計算機可執行指令或數據結構形式的程序代碼工具并且可由 通用或專用計算機訪問的任何其它介質。當信息通過網絡或其它通信連接(硬 連線的、無線或者硬連線或無線的組合)傳送或提供至計算機時,計算機適當 地將該連接視為計算機可讀介質。因而,任何這樣的連接適當地被稱為計算機 可讀介質。上述的組合也應當包括在計算機可讀介質的范圍內。計算機可執行指令包括例如使通用計算機、專用計算機或專用處理設備執 行某一功能或某一組功能的指令和數據。盡管已經以專用于結構特征和/或方法 動作的語言描述了本主題,但應理解,所附權利要求書中定義的主題不必限于 上述特定特征或動作。相反,上述特定特征和動作是作為實現權利要求的示例 形式而公開的。
如本文使用的,術語"模塊"或"組件"可以指在計算系統上執行的軟件 對象或例程。在本文描述的不同組件、模塊、引擎和服務可被實現為在計算系 統上執行的對象或進程(例如作為獨立的線程)。盡管在本文描述的系統和方 法較佳地以軟件來實現,但用硬件或軟硬件組合的實現也是可能且被構想的。 在本說明書中,"計算實體"可以是在本文之前定義的任何計算系統,或者是 在計算系統上運行的任何模塊或模塊組合。
在本文描述的實施例提供一種代碼分析工具,它考慮無數因素來動態管理 規則的執行以便平衡性能考量。例如,本文的實施例考慮到,由一些規則生成 的消息當在構建代碼期間或之后檢測到時進行修補的成本更高。因此,開發者 可能想要盡可能早得到關于這些警告的通知,通常是在編輯代碼的時候。另外, 一些規則生成的消息對解決代碼何時準備好用于諸如開工的各個開發級或者 開發里程碑何時完成最感興趣。作為一個示例,在里程碑未完成時執行檢測無 用代碼的分析沒有多大意義,因為代碼可能在以后的開發過程中使用。而且, 如前所述, 一些規則的運行成本特別高。因此,開發者可能不想在每次增量構 建或者甚至完全的重建時招致這樣的分析成本。
要考慮的其它因素說明規則取決于其功能需要或多或少的二進制元數據 來完成分析。這些規則可能需要僅在源代碼中可用的信息,它們可在實際生成 文件時編譯掉。但是,其它規則需要被寫到盤或將被寫到盤的字面上的目標代 碼。另外一些實施例說明一些規則需要二進制代碼出于在真正發布狀態中的考
量,這與開發者在客戶箱(clientbox)上生成的構建不同。例如,開發者一般不
創建完全簽名的二進制代碼,它們是由特定公司的實際安全密鑰來簽名的。 要顧及的另外一些因素考慮到一些規則依賴于與客戶開發者系統明顯不
同的機器配置。例如, 一些web應用程序分析可能只是在針對實際部署在web 服務器上的代碼執行時才是有關的。另外, 一些規則需要有關二進制代碼的執行上下文的特殊了解。例如,從未被本地化或者在非英語系統上運行的代碼一 般不需要針對全球化/本地化專用的問題進行檢查。還考慮到, 一些規則必須在 特殊的上下文中運行,以便驗證與較大的網絡系統有關的問題。作為示例,針 對為因特網的部署的web應用程序的安全檢查可能需要在防火墻內聯網外執 行。
本文還構想一些規則行為按照與代碼的生存期有關的環境而改變的事實。 作為示例,可能需要之前已經向外界客戶發布的二進制代碼以維護高級別的后 向兼容性。因此,不應當激發會激發要求破壞性改變來解決的違規的規則。另 外, 一些規則行為按照對執行行為的運行時預期而改變。作為示例, 一些性能 檢査可能僅與頻繁調用的性能敏感代碼有關。不希望針對非頻繁調用的代碼或 者必須蒙受壓倒解決被標識問題的好處的執行成本的代碼來運行這些規則。與 上述有關,分析應當在其它環境中按照在分析目標代碼中是否有可能進行修補 而變化。作為示例,分析可能針對編譯器發出的、不會受到改變用戶代碼的影 響的代碼模式進行。然而,編譯器團隊可能希望標識這些問題并且對生成分析 目標的編譯器作出改變。
在一些實施例中還構想的是,一些規則按照對目標二進制代碼的預期重用 (或者不重用)而改變行為。例如,可由任意第三方開發者消費的代碼可能需 要遵循某些標準以便提供一致性與可用性。對于一個實施不同編碼標準的團隊 的完全內部項目,可能無視這些標準。另外,規則行為可能按照項目資源考量 而改變。例如,對于具有受約束資源或者具有緊張時間期限的項目,分析可能 需要被限制于具有重要糾正暗示的高度確定性結果。
當然,按照本文描述的用于基于開發過程中的各種上下文管理規則的執行 的示例實施例,存在無數因素和考量可供考慮。事實上,如在下面將更詳細地 描述的,因為在其下開發代碼的分析上下文不斷地改變,本文描述的實施例允 許如何管理和執行各種規則的可擴展性。因此,本文描述的用于確定規則(或 其一部分)應當在什么上下文下執行的考量僅用于說明性的目的,并且除非明 確要求否則不表示限制或者縮小本發明的范圍。
無論如何,在考慮上述考量中的一些的情況下,圖l例示基于正在其中開
發代碼的當前代碼分析上下文來管理規則執行的代碼分析工具100。如圖1所示,為了開發,目標代碼120可分布在無數開發設備105的一或多個之中,開 發設備105包括IDE IIO和能提供上下文的、諸如列為其它上下文源115的其 它設備。例如,目標代碼可以是IDEllO中的源代碼形式,或者可以是在機器 或系統內運行的二進制代碼。當然,本文還構想了其它形式的目標代碼120。 例如,如下面更詳細地描述的,目標代碼120還可處于設計階段,即來自源代 碼的抽象概念。因此,本文描述的任何特定類型的目標代碼120將依賴于適當 的開發或運行時狀態。
不管開發或運行時狀態,本文的實施例提供能從如本文所述的各種開發設 備105獲得代碼分析信息125的動態上下文跟蹤模塊130。如在下面將更詳細 地描述的,代碼分析信息125包括有關當前正在其下分析和/或開發目標代碼 120的上下文的信息。注意,代碼分析信息125且由此分析上下文信息可由代 碼分析工具100或者動態上下文跟蹤模塊130通過各種方法來獲得。例如,動 態上下文跟蹤模塊130可以耦合至IDE 110,后者可傳達項目類型和源語言, 并且還可能具有對編譯器設置和構建風格等的了解。
代碼分析125中的上下文信息也可以通過檢査諸如基于源且編譯器提供 的元數據的其它上下文源115、通過檢查作為二進制或目標代碼120的宿主的 機器和/或通過檢查作為機器的宿主的較大網絡系統來獲得。當然,如會了解的, 存在眾多可由動態上下文跟蹤模塊130獲得的上下文源115。事實上,代碼分 析工具100內的模塊(例如,規則執行模塊140)和/或甚至規則本身可提供代 碼分析信息125。因此,用于提供如本文所述的代碼分析信息125的任何特定 的設備、組件、模塊、數據對象等僅用于說明性的目的,并且除非明確聲明否 則不表示限制或縮小本文的實施例范圍。
還要注意,代碼分析信息125可以通過任何眾多周知的機制諸如請求-響 應、推-拉、發布-提交(pub-sub)系統等等來動態獲得。例如, 一個實施例允許 代碼分析信息125使用事件通知系統來獲得。例如,在上下文改變或影響目標 代碼120開發的其它事件發生時,通知(通常以代碼分析信息125的形式)可 以由動態上下文跟蹤模塊130發送或以其他方式接收。當然,存在用于獲得代 碼分析信息125的眾多方法。因此,對如何獲得代碼分析信息125的任何特定 引用在本文中僅用于說明性的目的,并且除非明確聲明否則不表示限制或縮小所述實施例的范圍。
無論如何,如前所述,動態上下文跟蹤模塊130形式化多個與檢査有關的 分析上下文。因此,不管從哪里以及如何獲得代碼分析信息125,隨后可使用 信息125基于動態上下文跟蹤模塊130內定義(或以其他方式獲得)的那些上 下文來確定當前代碼分析上下文135。注意,當前代碼分析上下文135可按照 諸如前面提到的眾多考量來定義。例如,這樣的分析上下文可按照目標代碼120 的開發階段、目標代碼120的狀態、操縱目標代碼120的源類型、目標代碼120 的用途和/或其它開發或運行時要求和考量來定義。
注意,上面定義的分析上下文可包括無論是否用各種分層術語來表達的眾 多屬性或條件(例如,分析離編寫代碼有多遠)。例如,按照開發的階段定義 的代碼分析上下文可包括設計、構建、部署的各級,或者其它階段或屬性。另 外,分析上下文可按照之前的階段以及正在進行分析的當前階段來定義。而且, 每一開發階段可進一步由其它子階段來定義。例如,構建級可包括編輯階段、 用于增量構建的編譯階段或者開工之前(before a check in)子階段的子級。作 為另一個示例,分析上下文可按照其諸如源代碼、目標代碼、二進制代碼或者 抽象代碼狀態(它一般不提供對代碼本身的完整描述)之類的狀態或類型來定 義。
還要注意,分析上下文(例如,在該情形中可以是當前代碼分析上下文 135)可進一步按照相互之間的分層關系來定義。例如, 一個代碼分析上下文 可按照另一分析上下文的成功(或者不成功)完成來定義。而且,在分析上下 文之間可以存在重疊屬性,諸如按照針對無論是否準確對應于將向客戶發布的 二進制代碼的構建環境定義的上下文的情形。當然,存在用于定義或形式化代 碼分析上下文的眾多關系。因此,如前所述,術語"代碼分析上下文"(例如, 當前代碼分析上下文135)應當寬泛地解釋為包括在本文定義的任何數量的分 析上下文、它們的組合和/或分層關系。
不管定義的形式化代碼分析上下文如何,結合代碼分析信息125使用該上 下文列表來確定當前代碼分析上下文135。因此,規則管理模塊155可以使用 當前代碼分析上下文135來動態管理分析規則存儲器170中規則175的執行。 更具體地,為了規則管理模塊155動態確定用于相對于當前代碼分析上下文135執行的規則175的集合,每一分析規則175 (或者其它數據對象)描述(例 如通過元數據)規則可在其下運行的上下文參數180。通常,這樣的上下文參
數180將由規則開發者來定義;然而,實施例還構想了允許使用規則配置模塊
165來修改和/或添加上下文參數180。如將更詳細地描述的,也可通過其它各 種機制來覆蓋這些規則。
無論如何,上下文參數180可包括諸如可以應用或者不可應用規則175 的上下文之類的信息,和/或可具有確定優先級的上下文列表,例如,按照支持 的、優選的、可選的、要求的或者任何其它周知的優先次序。作為一個更具體 的示例,命名和裝箱規則可標記為支持所有的分析階段(即命名規則可適于在 任何開發階段執行)。然而,優選的執行階段可以是后臺時期。因此,這些檢 査應當在開發者正在編輯源的同時執行,但也可在其它階段執行。
另外,上下文參數180可以包括按照諸如用于完成分析的運行時持續時 間、輸入所需的信息或者產生的輸出等行為來定義規則的元數據。因此,這樣 的附加信息可由規則管理模塊155使用來確定需要執行的適當規則150 (和/ 或由動態上下文跟蹤模塊130使用來確定當前代碼分析上下文135)。當然, 上下文參數180可按照重疊屬性、分層關系等以上面參考代碼分析上下文描述 的類似方式來定義。例如,在一個實施例中,規則的分析可在等于當前指定的 階段或者離當前指定階段更遠的任何階段中發生。例如,被配置為在后臺編譯 期間運行的規則也可在構建、或里程碑階段期間運行。
注意,通常, 一般具有有關規則的更專業知識的測試開發者可以考慮和設 置規則應當在其下應用的上下文參數180。這些考量可包括但不限于以下各項 (不必按照任何特定的順序)。第一,在什么開發階段由該規則生成的消息有 意義?第二,控制應當多快返回給用戶?例如,在編輯代碼的同時進行的分析 一般不應當影響編輯器可感知的性能。第三,需要多少元數據來完成檢查?例 如,針對對象設計圖進行的分析可能不提供有關類型是否對于第三方開發者公 開可見的信息。第四,對問題的可能修補是否構成破壞性改變?也就是說,修 補該問題是否會打斷所修改的應用編程接口 (API)之前版本的消費者?如果 是,則可能需要將該信息在開發過程中盡可能早得給予開發者。否則,如果標 識了針對之前已經出廠的代碼的破壞性性改變,則一種典型的解決方案是根本不向開發者顯示該問題(假設分析已經被配置為保持高級別的后向兼容性)。 換言之,如果該問題已經出廠并且因此修補不再安全(因為它可能引起打斷之 前版本的打斷),則可能必須或者需要對結果的過濾。第五,解決問題的成本 如何?代碼改變的程度是多少?分析要花多少時間?改變引起退化的可能性 多大?與問題有關的源代碼是否可進行修改?第六,有什么特殊的二進制代 碼、操作系統(OS)、機器和/或網絡考量影響規則行為和/或檢查是否應當運 行?第七,有什么特殊的項目考量影響什么分析發生和/或應當向用戶返回什么 結果?
另外,如前所述,本文的實施例規定,上下文參數180是可修改的或者可 配置的。因此,規則配置模塊165可(由規則和/或代碼開發者)使用來擴展或
以其他方式限制規則可在哪些分析上下文下運行。可替換地,或者另外,通過
配置設置/控制文件160可覆蓋規則可在其下運行的上下文。例如,通過諸如 IDE 110內明確的表示或者通過修改關聯于分析運行的控制文件之類可覆蓋規 則。因此, 一個實施例允許開發者訪問配置代碼分析選項,它可允許開發者覆 蓋關聯于每一規則的上下文集合。隨后可將該信息與其它信息存儲在包含用戶 設置的其它代碼分析選項的項目文件中。
與規則/上下文的配置有關,本文實施例還考慮一些配置表示可專用于檢 査;并且因此,本文提供了可耦合至較大的分析上下文的配置選項。例如,本 文實施例允許規則以某種方式來調節(例如,范圍在0-100%之間并且可以通 過提供給用戶的旋鈕或其它調節控制機制來調整的噪聲過濾設置),這限制了 用于審閱的輸出、將輸出限于高度確定性選項和/或限制了分析的時間。注意, 該規則配置選項應當在系統中無縫地存在,并且在規則專用配置與較大系統所 定義的上下文之間可以存在耦合(例如,在運行后臺分析時,將噪聲水平限于 50%確定性或更高)。
其它實施例還允許將分析上下文可配置性映射至項目中的人員角色。更具 體地,工作于軟件開發項目的人員一般(l)對在暗示分析上下文的特定接合處 的代碼作出貢獻;具有各不相同的專業知識,該知識將使得他們對結果的敏感 性或多或少;以及(3)對作出有關在何處分配(以及可能地,分配多少)資源的 決策具有或多或少的權限。例如,開發者應當看到專用于針對開發者所應答的代碼的此改變的結果。另一方面,可允許項目管理員回撥(dial back)結果以便 限制專用于特定分析的開發者/測試循環。與之相比,負責標識和修補與二進制 代碼/產品完整性有關的問題(例如,所有二進制代碼都存在?防病毒?沒有損 壞?等等)的構建管理員卻既沒有修補正確性問題的技術資格,也沒有此能力。
因此,本文實施例允許本文描述的分析上下文配置自動映射至團隊中的各種角 色以及代碼開發和運行時過程中涉及的其它角色。
不管如何配置規則和/或分析上下文,基于在當前代碼分析上下文135之 間的分析、每一規則175內定義的上下文參數,和/或基于配置設置/控制文件 160,規則管理模塊155隨后可選擇一組規則150來執行。因此,規則執行模 塊140可以針對目標代碼120應用該組規則150以產生結果145。如會了解的, 這樣的結果145將依賴于諸如分析上下文、正應用的規則及其它因素之類而很 大地變化。例如,結果145可以立即被報告給編輯源代碼的用戶作為對諸如命 名約定分析之類的智能感知文字(intellisense squigglies),而其它規則150可根 本不向用戶產生反饋,如對于一些壓力測試。可將其它結果140報告給文件和 或以某種其它數據格式產生用于進一步分析。當然,存在可應用于本文描述的 實施例的眾多結果145,并且在任何描述的上下文下產生的任何特定結果僅用 于說明性目的并且不表示限制或者縮小本文實施例的范圍。
下面提供按照目標代碼的開發階段、目標代碼的類型和/或狀態、操縱目 標代碼的源、目標代碼的用途或其它開發和/或運行時要求定義的中間分析上下 文的一些示例。如上所述,以及在下面的描述中,這些中間分析上下文還可按 照任何組合、重疊屬性和/或分層關系來定義。而且,如前所述,上下文參數 180、所定義的分析上下文(例如,當前代碼分析上下文135)、配置設置/控 制文件160以及規則本身是可擴展的,因此下面分析上下文和/或描述的規則的 列表(以及本文描述的其它上下文或分析)不旨在是詳盡的。
例如,規則175可按照在IDE110中的編輯級期間進行的后臺分析來描述, 例如用于向開發者通知對源代碼的改變。其它分析可在每一增量構建或完全構 建的上下文中進行,如由上下文參數180所定義的。例如,在編譯期間,可執 行為后臺和編譯階段定義的規則。這樣的檢査可與命名和裝箱有關,并且通常 具有極端的性能和/或表示標記通常應當立即解決的嚴重問題的高值正確性檢査。
上下文參數180和/或當前代碼分析上下文135可按照在開工之前階段進 行的分析來定義。例如,在開工之前,可進行巻起后臺、編譯以及進行階段規
則的分析。因此,專以開工階段為目標的規則175通常是花較長時間來執行和 /或標記通常不應當被注冊到官方源庫中的問題的高值規則175。
其它分析上下文可被定義或標記為按照里程碑階段運行,它通常由明確的 用戶表示來執行。因此,專以里程碑階段為目標的規則可以是運行成本極端昂 貴的規則,它們要求高水平的審閱(即,它們比其它檢査較易發生假陽性), 和/或它們構成因調度考量或因為工作更易于作為批處理來完成而被推遲的工 作項目。
當然,如前所述,隨著用于代碼分析100的環境的改變,在其下運行規則 175的分析上下文也會改變。例如,隨著處理速度增加,可確定之前僅在里程 碑階段運行的規則可在之前的一些階段中運行。然而,要注意的是,存在可以 改變或影響分析上下文的眾多因素,這就是為什么可以使用規則配置模塊165 來修改上下文參數180 (以及用于創建當前代碼分析上下文135的分析上下文 的形式化表示)以便在需要時更新和調整系統。
其它分析上下文可包括在構建環境中針對可以或可以不精確對應于將發 布給客戶的內容的二進制代碼而進行的分析。還可以存在針對部署在不必對應 于顧客運行時環境的配置上的二進制代碼而進行的分析。此外,如前所述,可 以存在針對通常不提供對得到的代碼的完整描述的抽象概念(諸如設計時分 析)而進行的分析。其它分析上下文可由被發行至盤的源或目標代碼來定義。 其它分析上下文考慮或說明編譯設置,諸如當前構建是否已經用優化來構建。 針對二進制代碼進行的其它分析可考慮特定代碼用途或運行時用途,諸如在非 英語系統上運行或者部署為web應用的一部分的那些用途。因此,例如將不會 被本地化或者在非英語系統上運行的這類代碼可能不需要針對全球化/本地化 專用的問題進行分析或者為這類問題執行規則。另一分析上下文或上下文參數 185可按照針對在或不在專門環境(諸如內聯網服務器或者在防火墻的另一側 上)中部署的二進制代碼而進行的分析來定義。這樣的規則通常在特殊上下文 中運行以便驗證與較大的網絡系統有關的問題。其它代碼分析可針對之前已經出廠或未出廠的代碼而進行,或者針對可由 第三方式提供或可不由第三方的代碼而進行。例如,如果上下文被認為來自第 三方,則需要按照上下文參數180定義地來運行病毒檢査或規則。其它的分析 可針對由外部或內部客戶消費或不可由其消費的代碼而進行,或者針對限制在 私人團隊或其它運行時環境中使用的代碼而進行。分析上下文還可由針對可具 有或可不具有對運行時特性諸如性能或安全性有嚴格要求的目標的分析來定 義。在較少安全性有關的分析者隨后對其編碼之前要求高級安全許可(諸如寫 到任意盤位置的能力)組件將在部分信任的環境中運行。還有其它的分析上下 文包括針對將部署在具有特定操作系統配置(諸如僅啟用政府批準的加密服務 的要求)的系統上的目標的分析。其它分析上下文可針對處于或不處于維護模 式中的目標或者在受到嚴格的人員配備或最終期限考量的團隊上開發的目標 來定義。
注意,分析有可能針對各種結構(即目標代碼120)發生,這些結構指源 自源代碼、二進制代碼或與兩者都不相關聯的抽象概念(諸如分析類圖、使用 數據庫表、確認數據庫模式、驗證存儲過程、將命名/裝箱約定應用于數據庫專 用的標識符和/或基于當前項目設備激發違規)的信息。而且,與當前上下文的 聚集集合有關的規則集的配置通常動態進行。因此,結果通常在軟件開發生命 周期中的精確和適當的時刻返回給用戶。如本文所述,正確結果或軟件開發生 命周期中的精確和適當的時刻將依賴諸如以下各項而變化代碼
/abstractions(抽象概念)的當前條件;其當前或假設的機器、操作系統、網絡和/ 或運行時間環境;對包括安全性、可靠性、后向兼容性以及字面上的性能的質 量的各方面給定的項目要求;給定的項目生命周期、時間線和/或資源約束;給 定的分析時間約束;給定的接收結果的人員理解和影響結果的能力;給定的由 特定檢查提供或由于上面未列舉的任何原因(包括用戶的純粹的固執)而被覆 蓋的默認配置的任何特殊配置;等等。另外,因為分析上下文(例如,規則175, 上下文參數180等)是可配置的、可擴展的、可插入的等等,本文描述的實施 例定義開口的系統來描述多個與分析有關的中間上下文。
本發明還可按照包含功能步驟和/或非功能動作的方法來描述。下面是可 在實踐本發明時執行的步驟和/或動作的描述。通常,功能步驟按照完成的結果來描述本發明,然而非功能動作描述用于實現特定結果的更具體行為。盡管功 能步驟和/或非功能動作可按特定順序來描述和要求,但本發明不必受限于步驟 和/或動作的任何特定的順序或組合。另外,對步驟和/或動作的使用是對權利 要求書的敘述——并且在下面圖2的流程圖的描述中——通常用于指示對這些 術語的所期望的特定使用。
如前所述,圖2例示本發明各個示例性實施例的流程圖。下面圖2的描述 有時參考來自圖1的相應元素。盡管可針對來自該圖的特定元素進行參考,但 這樣的參考僅用于說明性目的并且除非明確聲明否則不表示限制或者縮小所 述實施例的范圍。
圖2示出方法200的流程圖,它通過動態跟蹤在其下開發代碼的分析上下
文并且應用一組預定義規則中對應于當前上下文條件的至少一部分,來管理這
些規則的執行以便平衡性能考量。方法200包括動態確定一規則是否可以針對 目標代碼執行的步驟225。更明確地,步驟225包括接收205要進行分析的目 標代碼的動作。例如,代碼分析工具100、規則管理模塊155、規則執行模塊 140、開發設備105或者計算系統內的其它模塊和組件可接收要基于預定義規 則175對正確性、完整性和/或質量進行分析的目標代碼120。
步驟225還包括接收210代碼分析信息的動作。例如,動態上下文跟蹤模 塊130可從各個開發設備105接收代碼分析信息125用于動態跟蹤正為其開發 目標代碼120的當前代碼分析上下文135。注意,當前代碼分析上下文135可 按照目標代碼開發階段、目標代碼類型或狀態、操縱目標代碼120的源、目標 代碼120的用途或者一或多個開發或運行時要求來定義。
在定義目標代碼開發階段的情形中,這樣的階段可包括設計、構建、部署 或其它級。還要注意,構建階段可包括諸如編輯階段、用于構建的編譯階段、 或者開工之前階段等。因此,為這樣級定義的規則可能是針對還未被編譯到盤 的目標代碼120進行的后臺分析。還要注意,構建級可包括里程碑階段,該階 段由于按照分析持續時間、要求的輸入、要求的輸出、假陽性的高或頻繁的發 生、調度考量中的一個或多個執行規則的至少一部分所需的開銷,或者因為執 行更容易作為隨其它規則的批處理的一部分來完成而要求特定的用戶輸入以 執行規則的至少一部分。還要注意,在當前代碼分析上下文按照目標代碼類型或狀態來定義時,這 樣的類型或狀態包括諸如源代碼、目標代碼、二進制代碼或抽象代碼狀態等等。 對于抽象代碼狀態,這樣的狀態可以是對不提供源代碼的完整描述的目標代碼 的設計時分析。
步驟225還包括接收215對應于從一組預定義規則選擇的規則的上下文參 數的動作。例如,規則管理模塊155可接收當前代碼分析上下文135以及對應 于從規則組175選擇的一或多個規則的上下文參數180兩者。注意,上下文參 數按照至少代碼分析上下文信息為規則的至少一部分定義執行條件(通過例如 元數據)。而且,上下文參數180可按照用于完成分析的運行時持續時間、需 要輸入的信息和/或得到的輸出中的一或多項包括有關規則行為的元數據。注 意,要應用規則的什么部分(例如其結果的數量或類型)可以基于其它因素, 諸如影響或改變規則行為的配置。如前所述,這樣的配置可基于對于字面規則 執行、噪聲過濾或其它控制機制有意義的設置/控制信息。
還要注意,上下文參數180定義所支持的代碼分析上下文的執行條件,它 們按照優選的、可任選的、所要求的等中的一或多個來確定優先級。但是,通 過一或多個配置設置和各種開發設備105、關聯于代碼分析工具100的控制文 件和或通過允許上下文參數180可被配置能夠覆蓋這些執行條件。此外,注意 上下文參數可被配置成允許擴展現有的上下文條件。
步驟225還包括根據當前代碼分析上下文評估220規則上下文參數的動 作。例如,規則管理模塊155可評估規則上下文參數180和當前代碼分析上下 文135用于動態確定部分或全部規則150以便針對目標代碼120執行。注意, 可完成這樣的評估以便在開發過程中的適當階段處應用規則150。還要注意, 根據當前代碼分析上下文135對規則175上下文參數180的評估可考慮代碼與 分析上下文之間的分層關系、該組預定義規則175或兩者。
本發明可在不脫離其精神或實質特征的情況下以其它具體形式體現。描述 的實施例在任何方面被視為僅是說明性的而不是限制性的。因此,本發明的范 圍是由所附權利要求書而非上述描述來指示的。落在權利要求書的等價意義與 范圍之內的所有改變要包括在其范圍內。
權利要求
1.在一個具有使用一組預定義規則檢查軟件的代碼分析工具的計算機系統中,所述規則通常由通過配置設置控制的整體操作來執行,一種通過動態跟蹤在其下開發代碼的分析上下文并且應用所述規則中對應于當前上下文條件的至少一部分來管理所述一組預定義規則以便平衡性能考量的方法,所述方法包括接收要基于一組預定義規則對正確性、完整性或質量中的一或多項進行分析的目標代碼;從一或多個開發設備接收代碼分析上下文信息用于動態跟蹤正為其開發所述目標代碼的當前代碼分析上下文;接收對應于從所述一組預定義規則中選擇的規則的上下文參數,所述上下文參數按照所述代碼分析上下文信息為所述規則的至少一部分描述執行條件;以及根據所述當前代碼分析上下文評估所述規則上下文參數,用于動態確定所述規則的所述至少一部分是否可以針對正在分析的所述目標代碼來執行,以便在所述開發過程中的適當階段處應用所述規則的所述至少一部分。
2. 如權利要求1所述的方法,其特征在于,所述當前代碼分析上下文是按 照所述目標代碼開發階段、所述目標代碼類型或狀態、操縱所述目標代碼的源、 所述目標代碼的用途或者一或多個開發或運行時要求中的一或多項來定義的。
3. 如權利要求2所述的方法,其特征在于,所述目標代碼開發階段包括設 計、構建或部署中的一或多級,以及其中所述代碼類型或狀態包括源代碼、目 標代碼、二進制代碼或抽象代碼狀態中的一或多項。
4. 如權利要求3所述的方法,其特征在于,所述抽象狀態是對不提供其完 整描述的目標代碼的設計時分析。
5. 如權利要求3所述的方法,其特征在于,所述構建階段包括針對還未編 譯至盤的所述目標代碼進行的后臺分析,并且包括編輯階段、用于增量構建的 編譯階段或者開工之前階段中的一或多項。
6. 如權利要求3所述的方法,其特征在于,所述構建階段包括由于按照分析持續時間、要求的輸入、要求的輸出、假陽性的高發生率、調度考量的一或 項執行所述規則的所述至少一部分所需的花費,或者因為執行最易于作為隨其 它規則的批處理的一部分來完成而要求特定用戶輸入以執行所述規則的所述 至少一部分的里程碑階段。
7. 如權利要求1所述的方法,其特征在于,用于所述上下文參數的所述執 行條件是由元數據定義的,以及其中所述元數據還按照完成分析的運行時持續 時間、需要輸入的信息或者得到的輸出中的一或多項來定義所述規則的行為。
8. 如權利要求1所述的方法,其特征在于,所述上下文參數定義所支持的 代碼分析上下文的執行條件,它們按照優選的、可任選選的或被要求的中的一 或多項來確定優先級。
9. 如權利要求8所述的方法,其特征在于,評估允許通過進一步評估所述 一或多個開發設備中的配置設置、關聯于所述代碼分析工具的控制文件中的一 或多項或者允許所述上下文參數可被配置來覆蓋所述執行條件。
10. 如權利要求1所述的方法,其特征在于,所述規則上下文參數是可配 置的以允許擴展現有的上下文條件。
11. 如權利要求1所述的方法,其特征在于,所述根據當前代碼分析對規 則上下文參數的評估考慮所述代碼分析上下文之間的分層關系、所述一組預定 義規則或者兩者。
12. —種使用一組預定義的規則檢查軟件的代碼分析工具,所述規則通常 由通過配置設置控制的整體操作來執行,所述代碼分析工具被配置為通過動態 跟蹤在其下開發代碼的分析上下文并且應用所述規則中對應于當前上下文條 件的至少一部分來管理所述一組預定義的規則的執行以便平衡性能考量,所述 代碼分析工具包括-動態上下文跟蹤模塊,用于從一或多個開發設備接收用于確定正為其開發 目標代碼的當前代碼分析上下文的代碼分析上下文信息;規則管理模塊,用于 按照所述代碼分析上下文信息評估所述當前代碼分析上下文和指示規則的至 少一部分的執行條件的上下文參數,其中基于所述評估,所述規則管理模塊動 態確定所述規則的至少一部分可以針對要對正確性、完整性或質量中的一或多 項迸行分析的目標代碼執行;以及執行模塊,用于針對正在分析的所述目標代碼執行所述規則的所述至少一 部分,使得所述規則的所述至少一部分在所述開發過程中的適當階段處得到應 用。
13. 在一個具有使用一組預定義規則檢査軟件的代碼分析工具的計算系統 中,所述規則通常由通過配置設置控制的整體操作來執行, 一種用于實現通過 動態跟蹤在其下開發代碼的分析上下文并且應用所述規則中對應于所述當前 上下文條件的至少一部分來管理所述一組預定義規則的執行以便平衡性能考 量的方法的計算機程序產品,所述計算機程序產品包括其上存儲計算機可執行 指令的一或多個計算機可讀介質,當所述指令由所述計算系統的一或多個處理 器執行時,使所述計算系統執行以下步驟接收要基于一組預定義規則對正確性、完整性或質量中的一或多項進行分 析的目標代碼;從一或多個開發設備接收代碼分析上下文信息用于動態跟蹤正為其開發 目標代碼的當前代碼分析上下文;接收對應于從所述一組預定義規則中選擇的規則的上下文參數,所述上下文參數按照所述代碼分析上下文信息為所述規則的至少一部分描述執行條件; 以及根據所述當前代碼分析上下文評估所述規則上下文參數,用于動態確定所 述規則的所述至少一部分是否可以針對正在分析的所述目標代碼來執行,以便 在所述開發過程中的適當階段處應用所述規則的所述至少一部分。
14. 如權利要求13所述的方法,其特征在于,所述當前代碼分析上下文是 按照所述目標代碼開發階段、所述目標代碼類型或狀態、操縱所述目標代碼的 源、所述目標代碼的用途或者一或多個開發或運行時要求中的一或多項來定義 的。
15. 如權利要求14所述的方法,其特征在于,所述目標代碼開發階段包括 設計、構建或部署中的一或多級,以及其中所述代碼類型或狀態包括源代碼、 目標代碼、二進制代碼或抽象代碼狀態中的一或多項。
16. 如權利要求15所述的方法,其特征在于,所述抽象狀態是對不提供其 完整描述的目標代碼的設計時分析。
17. 如權利要求15所述的方法,其特征在于,所述構建階段包括針對尚未 編譯至盤的所述目標代碼進行的后臺分析,并且包括編輯階段、用于增量構建 的編譯階段或者開工之前階段中的一或多項。
18. 如權利要求13所述的方法,其特征在于,所述上下文參數使用元數據 描述所述執行條件,以及其中所述元數據還按照完成分析的運行時持續時間、 需要輸入的信息或者得到的輸出中的一或多項來描述所述規則的行為。
19. 如權利要求13所述的方法,其特征在于,所述上下文參數是可配置的 以允許擴展現有的上下文條件。
20. 如權利要求13所述的方法,其特征在于,所述根據所述當前代碼分析 對所述規則上下文參數的評估考慮所述代碼分析上下文之間的分層關系、所述 一組預定義規則或兩者。
全文摘要
實施例提供與目標代碼的分析檢查有關的一組形式化的中間分析上下文。這樣的中間分析上下文可包括但不限于,目標代碼的開發階段、目標代碼的類型或狀態、操縱目標代碼的源、目標代碼的用途或者其它開發或運行時要求。因此,實施例動態標識正在其下開發目標代碼的當前分析上下文并且隨后可基于規則可應用什么上下文的了解來執行規則。更具體地,分析規則可描述(例如通過元數據)規則可在其下運行的那些上下文條件。基于這樣的描述和當前上下文,可以執行已經被配置為應用于這樣的上下文條件的那些規則。
文檔編號G06F17/00GK101589380SQ200680052035
公開日2009年11月25日 申請日期2006年12月28日 優先權日2006年1月30日
發明者G·J·凡, M·C·范寧, S·D·桑蒂斯 申請人:微軟公司