版權(quán)歸原作者所有,如有侵權(quán),請(qǐng)聯(lián)系我們

[科普中國]-特性切換

科學(xué)百科
原創(chuàng)
科學(xué)百科為用戶提供權(quán)威科普內(nèi)容,打造知識(shí)科普陣地
收藏

特性切換或稱功能切換,(英語:feature toggle)它是軟件開發(fā)中的一種技術(shù),是替代維護(hù)多個(gè)源代碼分支(也稱特性分支)的一種方案,這使特性在完成并正式發(fā)布前也可以得到測(cè)試。特性切換是在運(yùn)行期間隱藏、啟用或禁用特定功能。例如在開發(fā)過程中,開發(fā)人員可以啟用功能以進(jìn)行測(cè)試,而其他用戶不會(huì)被啟用該功能和受到它的影響。

簡(jiǎn)介持續(xù)發(fā)布和持續(xù)交付為開發(fā)人員提供了有關(guān)其代碼的快速反饋,而這要求盡早地集成其代碼更改。特性分支為此過程引入了一個(gè)旁路。特性切換是實(shí)現(xiàn)持續(xù)交付的一項(xiàng)重要技術(shù)。

這種技術(shù)使開發(fā)人員得以發(fā)布包含未完成功能的產(chǎn)品版本。這些未完成的功能被隱藏或被禁用,因此不會(huì)出現(xiàn)在用戶界面中。這使軟件可以發(fā)布很多次小的增量版本,而無需承擔(dān)不斷分支與合并的成本。特性切換使軟件集成的周期得以更短。項(xiàng)目團(tuán)隊(duì)可以使用特性切換來加速開發(fā)過程,因?yàn)楫a(chǎn)品中可以包含默認(rèn)不啟用的未完成代碼。1

實(shí)現(xiàn)特征切換在本質(zhì)上是條件語句中使用的變量。因此,這些條件語句中的塊可以根據(jù)特征切換的值切換為開或關(guān)。切換為關(guān)的代碼塊類似于被注釋的代碼。這是開發(fā)人員可以繞過它們軟件中的某些流程,例如尚未準(zhǔn)備好部署的功能。

功能切換的主要用途是避免在發(fā)布前的最后一刻因軟件合并而產(chǎn)生的沖突。盡管這可能導(dǎo)致切換負(fù)債。切換負(fù)債是指一個(gè)功能已被永久關(guān)閉后,軟件中仍存留著死亡的代碼,并可能帶來一些開銷。這種代碼必須被仔細(xì)甄別才能刪除,以免干擾到其他代碼。

功能切換主要有兩種類型。一種是開發(fā)人員在產(chǎn)品發(fā)布之前決定保留或刪除的發(fā)布切換(取決于其效果)。另一種是業(yè)務(wù)切換,它相較于舊的代碼是滿足不同的用法。

特性切換可用于以下情況:

將一個(gè)新功能添加到應(yīng)用程序。

增強(qiáng)應(yīng)用程序中的現(xiàn)有功能。

隱藏或禁用某項(xiàng)功能。

擴(kuò)展一個(gè)接口。

特性切換可以存儲(chǔ)在:

數(shù)據(jù)庫中。

配置文件中。1

功能組功能組由一組可切換的互相配合的功能組成。這使開發(fā)人員可以輕松管理一系列相關(guān)的切換開關(guān)。2

Canary發(fā)布特性標(biāo)志的另一個(gè)好處是Canary發(fā)布。Canary發(fā)布(或Canary啟動(dòng)或Canary部署)允許開發(fā)人員逐步為一小群用戶測(cè)試某項(xiàng)功能。如果功能的性能不令人滿意,則可以回滾它,沒有任何不利影響。

雖然在大多數(shù)編程語言(例如Java、Angular JS、PHP、JavaScript等)中可以輕松實(shí)現(xiàn)這種模式,也存在一些函數(shù)庫來進(jìn)一步簡(jiǎn)化這種用法。

馬丁·福勒指出,功能切換應(yīng)該是你將功能投入生產(chǎn)時(shí)的最后一種選擇。取而代之,最好將功能分解成更小的部分,將每個(gè)部分安全地實(shí)現(xiàn)來引入到產(chǎn)品發(fā)布,從而避免導(dǎo)致問題。

許多大型網(wǎng)站都使用特性切換技術(shù),包括Flickr、Disqus、Etsy、reddit、Gmail和Netflix。

有許多適用于各種編程語言和平臺(tái)的開源的特性切換和特性標(biāo)記解決方案。2

本詞條內(nèi)容貢獻(xiàn)者為:

王沛 - 副教授、副研究員 - 中國科學(xué)院工程熱物理研究所