版本、變體和其他的基礎定義
“ 大家好,這是【產品線工程(PLE)專題】更新的第三篇,上一篇我們介紹了 ‘ 我們是否需要統一產品線工程的標準——如果需要,有哪些標準? ’,這一篇我們介紹 版本、變體和其他的基礎定義”
版本和變體:瞭解它們之間的區別
© pure-systems GmbH
在談論產品線工程和變體管理時的重要的事情是對基本術語有共同的理解。多年來的經驗告訴我,明確“版本”和“變體”之間的區別是具挑戰性的事情之一。在產品線工程(PLE)之外的許多場景下,都會或多或少地使用這些術語。這也是我們在展會上經常遇到有參觀者說“我看到你們在做版本管理相關的事情,與產品、與xx版本控制系統相比,你們的做法有什麼不同”相似的話的原因之一。
事實上,這有很多不同,因為我們根本就沒有做版本管理。在這篇文章中,我將給出一些與版本和變體有關的基本定義。我還將說明這些術語之間的關係,並解釋為什麼它們會經常被當作是在描述同一件事。
基本術語的定義
? 版本(Version)
資產的版本是指該資產在描述某一個特定時間點所記錄的狀態/內容。一個資產的兩個版本之間可能存在相同或不同的內容。因此,版本反映了同一資產在不同時間點上的情況。在大多數情況下,版本是由一些標籤或數字所標識的。在某些情況下,修訂版(只要資產發生變化就會建立)和版本(會指向有標籤/名稱的修訂版)之間會有區別。
? 基線(Baseline)
一條基線是指一組資產的一個被命名的版本快照。
? 變化(Variation)
變化或變異(Variation)是兩個可比較的資產之間的差異。假設有一個產品的外殼是由金屬或塑膠製成的,那麼"金屬外殼"和"塑膠外殼"就是該產品外殼的兩個變化或變異。
? 變化點(Variation Point)
變化點代表導致資產有不同變體的決策點。一個變化點由一組可能的例項(變化點的合法變體)組成。繼續以帶有金屬或塑膠外殼的產品為例,變化點是“外殼材料”,相應的變化是"金屬外殼"和"塑膠外殼"。變化點通常需要明確繫結時間,即做出決定來獲得例項的時間。繫結時間可以是編譯時、安裝時或執行時。
? 變體派生(Variant derivation)
變體派生是將可用資產集作為輸入,將它們組合在一起並繫結/例項化其中的變體點的操作。如果存在具有多個繫結時間的變化點,則派生將分多個步驟進行,每個繫結時間進行一個步驟。派生的結果是一組變體資產。在技術層面上,派生可以透過許多方式執行。較簡單的(也是不太推薦的)方式是複製資產並手動修改它們(例如,透過指定配置引數)。派生的結果通常稱為配置。
派生是產品線工程的核心部分,因為改變一個產品線的資產(例如在修復一個錯誤時)往往需要重新建立所有包括改變後的資產的派生產品。為了儘量減少重新建立派生產品的工作,派生通常是在一個工具中自動進行的。
? 變體(Variant)
如果資產X’源自資產X且具有與利益攸關者(stakeholder)相關的屬性,這些屬性使得X’與從同一資產X派生的其他變體不同,則該資產X’就是變體。
例如,如果一臺機器可以透過給球塗上藍色或紅色的油漆來生產藍色和紅色(其他方面都一樣)的球,那麼它就能創造出兩種變體(藍球,紅球)。塗有藍色或紅色的球的實際數量並不重要。無論是一個藍球和一個紅球,還是100個藍球和200個紅球,變體的數量總是兩個。
如果你仔細閱讀,你會注意到變體的定義並沒有談到派生髮生的時間。這是有意而為之的,因為變體的概念是獨立於時間的。因此無論變體是在同一時刻建立的,還是相隔數月之後建立的,都不重要。
需要強調的是,並不是兩個資產之間的任意一個小的差異都會產生一個變體,而是相關的利益攸關者是否“看到了”相關的變體。可以想象一下,假如你買了兩件襯衫,一件是某天買的,另一件是一週之後買的。這兩件是同樣的品牌,同樣的顏色,同樣的剪裁,同樣的尺寸。不過襯衫的區別是有不同的洗滌標籤,因為製造商在這期間修改了洗滌標籤。但是對於你來說(在這個場景中你是利益攸關者)這些襯衫是相同的,因為你並不關心洗滌標籤。接下來,我們想象另一個不同的情景。你為自己買了一件襯衫,為另一個人買了一件不同尺寸的襯衫。在這種情景下,襯衫的尺寸是一個相關的差異或者說是你關心的差異,因此,你會認為這兩件襯衫是彼此的變體。
? 可變性(Variability)
最後一個重要的定義是可變性。可變性描述了具有變化點的資產的可能變化。由於潛在變體的數量是龐大的,因此通常不可能窮舉出所有可能的變體,故通常藉助可變性模型(如特徵模型或配置規則)來描述系統的可變性。
總結
希望這些定義能讓我們更清楚地瞭解變體和版本的區別,以及為什麼這種區別在產品線工程中很重要。如果你想了解更多,請看看我們有關PLE的其他系列文章。
作者:Danilo Beuche
翻譯:經緯恆潤
【產品線工程(PLE)專題】下期預告:特徵模型和特徵——這是什麼
* 如果您對PLE或pure::variants感興趣,可以透過 撥打電話與我們取得聯絡,同時還能獲得 pure::variants30天的試用申請哦~
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31535135/viewspace-2849863/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 『忘了再學』Shell基礎 — 11、變數定義的規則和分類變數
- 『忘了再學』Shell基礎 — 17、預定義變數變數
- 變數的定義和使用變數
- React基礎-定義元件React元件
- Oracle EBR 基於版本重定義Oracle
- 03 . Vue基礎之計算屬性,元件基礎定義和使用Vue元件
- 各個軟體版本定義描述
- Linux 基礎-檢視和設定環境變數Linux變數
- IDC:混合雲和軟體定義是未來數字基礎架構的主流模式架構模式
- mongodb基礎運維能力定義MongoDB運維
- js基礎之定義篇1.0JS
- c 語言中巨集定義和定義全域性變數的區別變數
- 易優CMS模板標籤assign定義變數模板檔案中定義變數,可在其他標籤裡使用該變數變數
- c+++變數宣告和定義C++變數
- 1.2程式設計基礎之變數定義、賦值及轉換程式設計變數賦值
- MySQL中變數的定義和變數的賦值使用MySql變數賦值
- Python基礎(二) 最簡單易懂的基礎篇——Python資料型別定義和分類Python資料型別
- Python基礎(八) 模組的引入與定義Python
- Spring基礎使用(三)-------XML定義AOP的使用SpringXML
- 人工智慧定義的 IT 基礎設施淺析人工智慧
- C++教程-----C++變數型別和變數的定義C++變數型別
- C語言基礎-2、函式的定義與使用C語言函式
- Python基礎入門(5)- 函式的定義與使用Python函式
- 『忘了再學』Shell基礎 — 23、其他環境變數配置檔案變數
- Go基礎系列:常量和變數Go變數
- 【基礎題】【陣列】定義並初始化陣列
- vue定義全域性變數和全域性方法Vue變數
- C語言零基礎教程之預處理和巨集定義篇C語言
- grafana如何使用定義的變數Grafana變數
- 02-論證基礎:論證的定義及構成
- 專案管理基礎:從定義到實施的全面指南專案管理
- lua基礎教程(轉其他網站)網站
- 基於Kubernetes和OpenKruise的可變基礎設施實踐UI
- Gradle For Android (一) 基礎定義與依賴管理篇GradleAndroid
- 01.變數定義變數
- Python中可變物件和不可變物件的區別?Python基礎Python物件
- 安裝其他版本的 LaravelLaravel
- Day10 函式基礎+函式三種定義形式 + 函式的返回值、物件和引數 + 可變長引數函式物件