不要讓其他人的技術債務影響到你

Jim Bird是一位經驗豐富的軟件開發經理、項目經理與CTO,專注於軟件開發與維護、軟件質量與安全等領域中疑難問題的解決。在過去的15年間,Jim曾管理過團隊建設並主導過高性能的財務系統的建設。他的主要興趣在於如何提升小團隊的效率以構建真正的軟件:高質量、安全、可靠、高性能及適應性強。近日,Jim撰寫了一篇博文,談到了與技術債務相關的主題,特別是如何不要讓其他人的技術債務影響到自己,希望文中的觀點能給各位讀者帶來一些啓示。

目前有不少人已經寫過關於技術債務的文章:何爲技術債務技術債務的不同類型、在設計、編碼與修改代碼時如何避免引入技術債務、組織要爲技術債務付出多少代價、以及爲何、如何、何時來償還這些技術債務等等。

不過所有這一切都忽略掉了系統中這樣一些技術債務與風險,即這些債務與開發者的設計、編碼實踐以及單元測試等並沒有什麼關係。這些文章沒有澄清的一點就是系統中那些並非由你編寫的代碼所帶來的技術債務,要遠遠超過你所編寫的代碼所帶來的債務。

就像西班牙、希臘和葡萄牙等國家的金融負債會拖累全球經濟一樣,其他人所編寫的軟件中的債務問題也會拖累你,即便你在自己的代碼中對債務的管理保持着非常負責的態度也是如此。

來自Oracle、IBM、微軟的軟件以及開發者從網上下載的開源軟件中的問題將成爲你自己的問題。如果使用其他人所開發的軟件(我們都會這麼做),那麼你就需要爲這些人的錯誤、疏忽或是在穩定性以及安全性等方面的決策失誤問題埋單。你自己會受到他們在開發、測試與安全等問題上的牽制,也會受到這些開發者所使用的第三方軟件和開源軟件的影響。

他們的Bug會成爲你的Bug,他們的安全漏洞會成爲你的安全漏洞,他們的錯誤決定會成爲你的錯誤決定。

你所使用的其他軟件的代碼量(以及由此產生的技術債務)可能會非常大,甚至超過你自己所編寫的代碼量。根據Sonatype的一項調查顯示,80%的Java應用都是由開源組件與框架裝配起來的,一個大型系統甚至會使用30多個不同的庫或組件。

你承擔了多少其他人的技術債務?

這種技術債務要比你自己代碼中的債務更加難以理解和管理。由於你可能沒有理解這些代碼、看不到代碼有多麼糟糕,或是可以看到但你卻沒有看,因此這些代碼是你所無法控制的,特別是那些由多個系統共享的一般性平臺技術,人人都在使用這些技術,不過卻沒有人對他們負責。你可能壓根兒就不知道這些代碼的存在,這些代碼可能是由其他人下載的,成爲了系統的一部分,不過卻沒有人知道這回事。

要想了解這種債務問題的嚴重性,你需要審查代碼中使用了哪些第三方和開源包與依賴。大公司可能會使用Black Duck、Palamida或OpenLogic來掃描和構建開源庫與組件的目錄清單,檢查相關許可,並及時追蹤這些軟件所報告出來的各種問題。

小公司可能就是手工做這件事了,也許會使用WhiteSource(一款SaaS掃描平臺,對於初創公司和小公司免費),它提供了一個名爲JNinka的免費源代碼掃描器,可以探查許可等信息。

減少技術債務

一旦清楚了其他人的軟件會對你造成何種影響,你就需要評估由此所帶來的風險和問題了,並且需要緊密追蹤這些軟件的補丁、升級信息及Bug報告等,這看起來確實不太容易。

OWASP曾提到過:

從理論上來說,搞清楚你當前是否在使用任何易受攻擊的組件或庫應該是很容易的事情。不過遺憾的是,攻擊報告有時並不會以標準、清晰的方式明確指出組件的哪個版本會受到攻擊。此外,並非所有的庫都使用了版本化的系統。更糟的是,並不是所有的攻擊信息都會被寫到易於搜索的地方。

補丁與升級

知道問題的嚴重性是一方面,修復問題則是另一方面。

對最新的發佈打補丁並非易事。最好能在外圍打補丁,因爲補丁並非總是適合於你使用軟件的方式:Apache、Tomcat、Web Service庫、客戶端組件等。我們要更加謹慎地管理後端代碼。如果每當出現一個Linux或是Oracle RDBMS補丁時你就需要立刻打上,那就說明你的架構可能有些問題。

升級更是一個大問題了,升級到最新的OS、RDBMS、VM等都涉及到很高的代價與風險。你需要承擔起這個工作,因爲供應商會要求你這麼做,你能獲得他們支持的唯一方式就是升級到最新的版本上。

雖然可以通過升級的方式獲得在可伸縮性、管理性及新特性等方面的一些優勢,不過升級項目還需要更加關注一些潛在的問題:功能迴歸、兼容性問題、操作流程的變化、對其他系統的依賴變化等等。升級之後,大多數軟件會變得更大而不是更好,也許會加入很多新特性,不過你可能壓根就用不上這些特性,這也意味着需要花更多的時間進行安裝、配置和測試。你需要搞清楚所有變化的地方,重新進行測試和調優。

這只是冰山一角

就像造成泰坦尼克號沉沒的冰山一樣,很多技術風險都處於隱藏狀態,當發現時已經爲時太晚。你得清楚風險的大小,採取負責的態度來管理這些風險。

擁有資源並能對廠商施加影響的大公司會更加主動。比如說,Veracode就爲那些想要對第三方代碼進行掃描來查找風險和Bug的企業提供了第三方的掃描服務。

我們所要做的就是檢查我們所使用的軟件,知道其作者是誰,緊跟缺陷與Bug報告,清楚地知道使用其他人的軟件有什麼風險。我們無法準確預測風險,也沒法評估風險的代價,但這並不是說我們就可以忽略掉他們了;相反,我們還是要對其持有謹慎的態度。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章