如何應對軟體可變性?這4種常用的方法肯定要知道
摘要:在許多軟體系統的開發運行階段乃至整個生命周期中,軟體可變性都是其設計開發者所要面對的基本問題。
本文分享自華為雲社區《如何應對軟體可變性?這4種常用的方法肯定要知道。》,作者: 陳星亮|華為雲開天aPaaS專家。
軟體可變性(Software Variability)是指在一定上下文中一個軟體系統被有效改變(擴展、配置、調整)的能力。在許多軟體系統的開發運行階段乃至整個生命周期中,軟體可變性都是其設計開發者所要面對的基本問題。
在大多數系統中,可變性表現為軟體在某個或某些可變點處對變體的綁定。其中可變點是指軟體中可以發生變化(綁定變體)的位置,而變體則是變化發生時,人或機器可以在相應位置做出的選擇。
可以看出,在軟體的運行實例中,變化發生的位置、變化發生的程度是在設計階段預定義的。而這種定義又在很大程度上依賴於軟體的需求分析以及在此基礎上做出的種種假設。系統雖然具有變體綁定能力來滿足既定的需求,但可變性模型(可變點、變體以及它們之間的關係)本身沒有變化,導致軟體在應對變化的需求或環境時存在一定限制。
在傳統意義上,軟體運行時可變性模型被認為是靜態的。在許多研究工作中,模型被以只讀的方式訪問,以支援軟體適應外部的環境。人們將注意力集中在可變性綁定方面(即為什麼(重新)綁定變體、綁定什麼變體、怎樣綁定),而忽視了對運行時可變性模型本身蘊含的限制的突破。隨著電腦技術的發展進步、用戶需求的增多及變化的加快、系統駐留環境的開放、外界對系統靈活性和可伸縮性要求的提高,這種限制顯得愈加突出。
針對軟體可變性,開發者們根據軟體實現要求和成本投入,採取軟體預留配置點、動態軟體產品線、運行時可變性動態綁定、多變非核心功能的快速開發等方法來應對。
1、軟體預留配置點:
軟體預留配置點可以自動地根據環境的變化來調整自身。換言之,它可以收集和分析有關環境的資訊,基於分析的結果決定是否改變自己的行為,如果是,再採取調整動作。
系統設計者指出或假設系統所面對環境變化等資訊,確定系統所能夠感知和收集的環境數據,進而以一定的數據結構將其表示在電腦內,而後才能設計相應的演算法對這些資訊進行分析並做出決策。
在執行環節對於自身的調整,實際上是軟體在可變點處對於變體的動態綁定,這是其運行時可變性的表現。
關鍵點:
1)設計者難以在系統部署運行之前設想所有的需求或環境的變化,當超過預期的變化出現時,已經成型的系統無法自動地收集與其相關的資訊。
2)並未改變可變性要素的數量、屬性或關係。只能在設計開發時預定的範圍內,進行選擇。
2、動態軟體產品線:
動態軟體產品線包括一組核心資產和從資產開發而來的一系列具有共同特徵的軟體產品。與傳統軟體產品線對比,動態軟體產品線更關注軟體的運行時可變性,本質上是建立具備可配置能力的一系列軟體。
關鍵點:
1)產品線自身的設計者可以快速開發出具有運行時可變性的軟體產品,並賦予其自主選擇綁定變體的能力。
2)其關注的運行時可變性大部分都是封閉的而非開放的,這意味著運行時可變性應對的是開發者在設計期設想的環境變化,導致軟體產品難以應對超過預期的環境變化。
3、運行時可變性動態綁定
運行時可變性動態綁定機制描述一個運行中的軟體如何在一個可變點綁定相應的變體,是軟體可變性實現的核心。綁定機制涉及對構件內部結構和行為的調整,包括對子構件的重配置和動態綁定。
關鍵點:
1) 對構件行為的調整往往通過重新組織構件的工作流或是重新設置構件內部參數來實現。
2) 對於突破了原有設計範圍內的變化,需要能被系統識別,並自動生成對應的邏輯。
4、多變非核心功能的快速開發
為應對行業應用不斷變化的情況,亦有思路是降低軟體應用開發的難度,將軟體的穩定的核心功能與多變的功能分開。對於多變非核心功能,以提供低碼開發的方式,便於開發者能快速的根據訴求,進行近場快速開發並投入使用。
關鍵點:
1) 軟體設計者需要能識別出穩定的核心功能、多變的非核心功能。並且能夠在兩者之間建立好連接。
2) 提供便捷的工具,使得多變的非核心功能能夠被近場開發者,甚至是使用者自己能快速實現。
如何提升軟體的可變性,讓軟體能夠從容應對業務的變化,一直都是軟體工程領域的一個重要話題。針對上述4種在應對軟體可變性經常用到的方法,各自都有其特點,分別在不同的場景下使用。