我想測量我們組織中生成的代碼有多少實際上是可重用的,我想設置一些指導原則。 我想有一定的參考外部世界:測量代碼的可重用性
多少代碼是在一個單一的應用程序通常重用? 更具體地說 - 如果我們考慮完整的最終用戶產品的所有代碼(並最終排除第三方庫),那麼從多個地方調用多少個函數和方法?
使用什麼指標來衡量代碼的可重用性? 是否有任何可用的數字或研究開源和/或封閉源碼軟件?
我想測量我們組織中生成的代碼有多少實際上是可重用的,我想設置一些指導原則。 我想有一定的參考外部世界:測量代碼的可重用性
多少代碼是在一個單一的應用程序通常重用? 更具體地說 - 如果我們考慮完整的最終用戶產品的所有代碼(並最終排除第三方庫),那麼從多個地方調用多少個函數和方法?
使用什麼指標來衡量代碼的可重用性? 是否有任何可用的數字或研究開源和/或封閉源碼軟件?
多少代碼在一個單一的應用程序通常是重複使用?
IMO沒有「典型」應用程序,特別是在這方面。應用程序具有截然不同的體系結構和執行流程,這導致了「重用」的不同模式。
考慮一個批量數據處理應用程序,它從文件中以特定的格式讀取數據,將其轉換爲另一種格式,然後將其保存。它實際上只有一個執行路徑,因此從多個地方調用的方法並不多。
OTOH考慮幾個獨立的插件,它們都使用相同的基礎設施層,等等功能,在該層中的插件框架是由許多不同的地方調用。
你真的不能說的第一個應用程序的設計比第二應用程序的更糟糕(沒有實際去到具體案件的細節)。
還要注意的是,在第二種情況的指標是棘手:如果你只測量核心框架本身無插件,你會得到一個較低的再利用次數,但與實際的插件的重用計數較高。由於插件可能是由外部開發的,因此您甚至可能無法訪問這些插件,因此您的指標會出現偏差。
這導致了另一點:重用可能發生在很多層面上。您可以在應用內或應用之間重複使用代碼。後者只能通過考慮所有應用程序來衡量。
我認爲一個更好的方法可能是從另一端開始,搜索重複的代碼(例如,使用類似於PMD的工具,用於Java代碼)。如果您在很多地方都有大量重複代碼,則需要重構。
如果您將問題定義爲「從多個地方調用了多少個函數」,您可以在技術上構建一個靜態分析器來回答該問題;它只是構建調用圖並進行一些計算(有關從C,Java和COBOL中提取調用圖的工具,請參閱this)。作爲一個實際問題,你可能會發現你願意做更多的工作來直接回答這個問題。
您可能會考慮在您的代碼庫中運行clone detector。這將顯示被拷貝和粘貼的人以及提供精確的度量標準的代碼,這些代碼實際上已經被重用(並且應該已經以某種方式被抽象出來)。像這樣複製代碼是最直接和最常用的重用形式。
我一直在構建克隆探測器大約十年。幾乎我遇到的每一個系統,無論使用何種語言,都有20%的代碼涉及克隆( - >大約10%被重用)。我見過高達55%的例子。
如果您正在使用.NET平臺,請考慮使用NDepend爲您提供有關軟件的many metrics。 「代碼重用」不能直接作爲衡量指標(可能出於其他海報已經提到的原因),但耦合和內聚等因素也可能對您有所幫助。
即使你不在.net上,也許metrics definitions是有幫助的。
我知道所有這些障礙,但我仍然想做點什麼,我需要某種參考。 可以分別分析不同的模塊。 (還沒有嘗試過)一個好的方法是調查每個函數的使用次數分佈(我已經完成了 - X軸上的使用次數,Y軸上X次使用的函數數量)。我假設的是,這些分佈對於不同的大型軟件包來說是相似的,所以應該可以與它們進行比較。作爲一個簡單的開始,我會感興趣的是,有多少函數不會被多次調用。 – user384278 2010-07-06 09:33:57