[英]How to quickly analyse the impact of a program change?
最近我需要對更改廣泛使用的表(如PRODUCT,USER等)的DB列定義進行影響分析。 我發現這是一個非常耗時,乏味和困難的任務。 我想問一下是否有任何已知的方法可以這樣做?
這個問題也適用於應用程序,文件系統,搜索引擎等的變化。起初,我認為這種功能關系應該預先記錄下來或者一些如何跟蹤,但后來我意識到一切都可以有變化,它會不可能這樣做。
我甚至不知道該問題應該貼上什么,請幫忙。
抱歉我的英語不好。
當然。 通過確定程序切片 ,技術上至少可以知道哪些代碼接觸DB列(讀取或寫入)。
方法:查找源中的所有SQL代碼元素。 確定哪些觸摸相關列。 (小心:SELECT ALL可能會觸及您的列,因此您需要了解架構)。 確定讀取或寫入該列的變量。 隨時隨地跟蹤這些變量,並確定它們影響的代碼和變量; 也遵循所有這些變量。 (這相當於計算前向切片)。 同樣,找到用於填充列的變量的來源; 跟隨他們回到他們的代碼和來源,並遵循這些變量。 (這相當於計算后向切片)。
切片的所有元素都可能受到更改的影響/影響。 切片選擇的代碼中可能存在明顯超出新用例預期條件的條件,您可以從中考慮消除該代碼。 切片中的其他所有內容都可以檢查/修改以進行更改。
現在,您的更改可能會影響其他一些代碼(例如,使用DB列的新位置,或者將DB列中的值與其他值組合)。 您還需要檢查更改的代碼的上行和下游切片。
您可以將此過程應用於您可能對代碼庫進行的任何更改,而不僅僅是數據庫列。
手動這在大型代碼庫中並不容易,而且肯定不是很快。 對C和C ++代碼有一些自動化,但對其他語言則不多。
您可以通過運行涉及所需變量或操作的測試用例並檢查測試覆蓋率來獲得不正確的近似值。 (如果運行測試用例,您的近似值會更好,您確定不會覆蓋所需的變量或操作,並且會消除它所涵蓋的所有代碼)。
最終,此任務無法自動執行或縮減為算法,否則將會有一個工具來預覽重構的更改。 你在開始編寫代碼越好,任務就越容易。
讓我解釋一下如何找到答案: 隔離是關鍵 。 將所有內容映射到對象屬性可以幫助您自動執行審閱。
我可以舉個例子。 如果您能設法將您的具體案例映射到下面,它將挽救您的生命。
像Hibernate或Entity Framework一樣......
可以通過分析哪些代碼使用某個對象的屬性來簡單地預覽對數據庫列的更改。 由於所有數據庫列都映射到對象屬性, 並且假設沒有代碼使用純SQL ,因此您最好進行估算
這是一個非常簡單的變更管理模式。
為了將文件系統/網絡或數據文件問題減少到上述模式,您需要實現其他軟件模式 。 我的意思是,如果您可以將復雜場景減少到對象屬性的更改,您可以利用IDE來檢測更改,包括需要稍微修改才能編譯或需要重寫的代碼。
如果您執行上述操作,則您的手動需求審核將變得更加容易。 因為整體任務是手動的,但可以使用自動化工具輔助。 您可以嘗試更改類屬性的名稱,並在編譯器中查看其副作用
顯然,如果您需要更改軟件中數據庫中特定列的名稱,類型和長度,並且在代碼周圍的多個位置使用純SQL進行硬編碼和破碎,更糟糕的是許多表提供類似的列命名,加上沒有項目文檔(確實如此)我寫了最糟糕的情況,對吧?)總共10000多個類,除了手動探索你的項目之外別無他法,使用查找工具但不依賴它們。
如果您沒有測試計划 ,這是您希望從中創建軟件測試套件的文檔,那么現在是時候制作一個。
加我2美分。 我假設你在生產環境中工作,所以必須進行某種形式的單元測試,集成測試和系統測試。
如果是,那么驗證更改的一種好方法是再次運行所有這些測試並創建可能需要的任何新測試。
顯而易見,不要在不運行這些測試的情況下將代碼更改集成到主生產代碼庫中。
然而,在測試環境中工作正常的更改可能無法在生產環境中起作用。 有一些形式的源代碼配置管理系統,如Subversion,GitHub,CVS等。這使您可以回滾您的更改
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.