[英]How do you decide when to upgrade a library in your project?
我在一個使用多個開源Java庫的項目上工作。 當升級到這些庫時,我們傾向於遵循保守的策略:
我們遵循這一策略是因為我們通常沒有時間放入新庫並徹底測試整個應用程序。 (像許多軟件開發團隊一樣,我們總是落后於幾個月前承諾的功能。)
但是,我有時想知道這種策略是否明智,因為一些性能改進和大量的bug修復通常伴隨着庫升級。 (即“誰知道,也許事情會以我們無法預見的方式更好地運作......”)
在項目中做出這些類型的決策時,您使用什么標准?
重要:避免技術債務 。
“如果它沒有破產,不要升級”是一個瘋狂的政策,導致軟件如此破碎,沒有人可以解決它。
皮疹,未經測試的改變是一個壞主意,但不像累積技術債務那么糟糕,因為它在短期內看起來更便宜。
獲得“夜間構建”過程,以便您可以持續測試所有更改 - 您的更改以及您依賴的包。
在您進行持續集成過程之前,您可以執行包含基礎架構升級的季度主要版本。
避免技術債務。
我已經吸取了足夠的教訓來完成以下工作:
編輯:我想添加一個至少同樣重要的項目,也許比其他項目更重要。
一種方法是在您自己的源代碼控制下使用您使用的開源庫。 然后定期將上游更改合並到下一個發布分支中,或者如果它們是安全修復程序,則會更快,並運行自動化測試。
換句話說,使用相同的標准來決定是否像在內部編寫的代碼一樣使用上游更改。 考慮開源開發人員加入虛擬開發團隊。 無論如何,情況確實如此,只是您是否選擇將其視為開發實踐的一部分。
雖然您不想僅因為有新版本而升級,但還有另一個考慮因素,即舊版本的可用性。 我遇到了試圖構建開源項目的問題。
我通常認為忽略一個新版本的庫(因為它沒有任何有趣的功能或改進)是一個錯誤,因為有一天你會發現這個版本是遷移到下一個版本所必需的。你可能想要升級到。
所以我的建議是仔細審查新版本中的變化,並考慮變更是否需要大量測試,或者很少。
如果需要進行大量測試,最好在軟件的下一個版本(主要版本)升級到更新的庫(例如從v8.0升級到v8.5時)。 當發生這種情況時,我猜還有其他重大修改,因此進行了大量測試。
我不想讓版本在依賴庫上落后太多。 除非知道安全性或性能問題,否則大多數庫可以使用長達一年的時間。 具有已知安全問題的庫是必須刷新的。
我定期下載每個庫的最新版本並使用它們運行我的應用程序單元測試。 如果它們通過,我會在我們的開發和集成環境中使用它們一段時間,並在我滿意它們不吸吮時推送到QA。
上述過程假設API沒有顯着變化。 如果我需要重構現有代碼只是為了使用更新的庫版本,所有的賭注都是關閉的。 (例如Axis 1x vs. 2x)然后我需要讓管理層參與決定分配資源。 在計划對遺留代碼進行重大修訂之前,這種更改通常會有所不同。
一些重要問題:
除非根據上述標准升級看起來不好,否則最好使用它,如果您有任何問題,請恢復舊版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.