如大家有留意,最近香港天晴的更新將版本編號由 v1.16.1 變成 v17 。為何由 v1 一口氣跳到 v17 呢?或者說,為什麼將前面的 v1 拿走?其實每次程式出新版本,都會面對一個問題,就是此版本的編號應該是什麼呢?

之前一直使用 Semantic Versioning, 即

MAJOR.MINOR.PATCH 。

規則約略如下:

  1. 如有重大改變 (如 API 改動) ,即 MAJOR + 1
  2. 如只是功能改動,即 MINOR +1
  3. 如只是 bug fix,即 PATCH +1

以「香港天晴」為例,之前是 v1.16.1,可以看出沒有重大改動,而功能變更則為 16 次。

其實使用此此法沒什麼不便,不過一直覺得很長很累贅。有時也實在決定不了怎樣才算是大改動,如「香港天晴」 v1.2 時加入 Widget 支持,算是 major 還是 minor 功能?可以說是重大變更,但也可以說是功能強化而已。結果現在出了 40 多個版本,版本編號還停留在 v1.16.1,感覺 major no. 變得沒什麼用。

直至最近讀到這篇文章,其中關於 application versioning 的部份令我深有同感,就是對用家來說,只有最前的 major no. 是重要的,點數後的數字不太理會。 你不覺得 v16v1.16 容易記一點嗎? 另外文章作者也不是用有沒有重大改動決定 major + 1,而是以有沒有用家視覺上看得到的改變來決定的,則是如果程式加了一個 text box,major no 就要 + 1。

讀完後決定將 app 的版本編號改為

MAJOR.MINOR

並用以下規則:

  1. 如視覺上有變動,則 major + 1
  2. 如用家看不到的變動,如修正臭蟲或優化處理,則只是 minor + 1

這樣決定 version no. 會比較簡單,也不會令 version no. 太長,感覺不錯。