2007/08/08

雙方合作多版本 如何更新軟體 how to update your software version in multi partners

我們在與 chip 廠商合作開發產品時,有個軟體更新流程提供參考:

現狀:
  1. Chip 開發其 demo board 的軟體,使其接近 turn key。軟體版本以 Vo 代表
  2. 敝公司將修改 GUI 後的軟體 porting 上去,軟體版本以 Vo' 代表,也就是我們新增部份是 (Vo'-Vo)
  3. 當我們測試產品有非 GUI 相關 bug 時,會請 chip 商修改,其軟體版本以 Vn 代表,回到 步驟 1. 2. 以便產生 Vn'

這邊提兩個 porting 的方式,其中 Vn 是 Chip 商提供的新版,Vo 是 Chip 商提供的舊版,而 Vn' 是我們 porting 欲Porting 至 Vn 後的新版,Vo' 是我們 Porting 至 Vo 後的舊版

  1. Vn' = Vn + (Vo' - Vo) : 將兩個舊版比對差異後 porting 到 Vn

  2. Vn' = (Vn - Vo) + Vo' : 將 Chip 商新舊版比對差異後 Porting 到 Vo'
以上兩個作法乍看之下效果是相同的,但是我這邊得花點時間來檢視其間的差異:

  1. 當初期自行修改的 code 較少時,Vo'-Vo 的值會較小,看起來前者較優。相反的,初期 Vn - Vo 的值應該較大,不利於 Porting 到 Vo'。因此可以判定說:當 Chip 提供的 code 變異性很大時或我們新創的 GUI 方面的 code 較少時,採用前者較有利

  2. 但是通常上面的情形比較不會發生,原因是 Chip 商提供的 code 通常一開始就已經相對龐大,或者說在後期通常只是針對 bug 在修正。在此情形下,若我們發現 (Vo' - Vo) > (Vn - Vo) 時,應該採後面的作法。

  3. 另外一種考量其實無關兩個差值,我只想說,只有採行第二種作法才是正確的方式。
    1. 讓我們看看前者,當採用 (Vo'-Vo) 時,會給我們一種錯覺,認為這樣的差值我們最熟,最容易控制,加上當初就是這樣開發自己的 code for GUI,採用前者的作法似乎較受歡迎。

    2. 但是正如我說這是錯覺,其原因是你把假設建立在 Vn 一定是對的上面。若 Vo --> Vn 的發行是因為要修正 bug, 那很顯然 Vo 已經不對,而且也不保證 Vn - Vo 真的只修改到 bug 的部份。會不會有邊際效應?或者說會不會因為團隊開發使得 Vn 跟 Vo 做的變動你根本無法預期?

    3. 這邊要說的其實是,Vo' 是我們最熟的部份,也是我們知道 bug 在哪的狀態,那麼為何不是透過 (Vn-Vo) 來挑出 Chip 商到底做了哪些修正?再將這些修正挑選適合的移植到 Vo' 上?也就是說,其實我們得修正上面後者的公式為:

      Vn' = (Vn - Vo)' + Vo'

      值得注意的是,第一種作法是無法這樣修正的。


0 意見: