有些軟體更新只是更新部分文件(資源、DLL),為什麼不採用增量更新,而要採取全量更新?在設計軟體更新的時候,增量更新和全量更新是如何考慮的?


增量更新的問題是要求你必須已經安裝了某個指定的版本。

如果你當前版本不是某個指定版本,就還是要做完全更新。

所以完整更新是始終要做的。增量更新是額外工作量。額外工作量要不要做就看決策者的意思了。


增量更新對於版本更新不是很頻繁的軟體來說還可以,但對於更新較頻繁的軟體,使用增量更新每更新一次工作量都會很大,因為你需要考慮各個版本升級到最新版本的兼容性問題。

比如一個APP有V1.0、V1.1、V1.2、V1.3、V1.4、V1.5幾個版本,現在有V2.0需要發布,如果做增量升級的話需要做之前每個版本升級到V2.0的差分包,因為你不能保證用戶手中的APP都是V1.5版本,這對於測試驗證來說工作量太大了,並且管理起來也很麻煩。


因為要考慮不同版本的兼容問題,否則就必須一個個的打升級包。同時對於新用戶還需要提供一個完整的安裝包。考慮到帶寬和人工間的成本一定是完整包更具性價比。


Windows 等平台不會保留原始安裝文件 (因為占空間), 這對增量更新的流程最後一步做signature check (integrity check)來說是一個挑戰, Android 平台會保留安裝的APK 文件, 做起來會簡單很多。

你可能想到對安裝之後的每一個文件以及Manifest 文件來做integrity check, 那恭喜你,你好聰明,Google Chrome 團隊 也是這麼想的, 他們使用了一個叫Courgette的技術。 Software Updates: Courgette 所以能做到頻繁的小量的更新。


增量更新恢復速度相對來說很慢。


只要有更新系統那一般就是要做增量更新的啊,除非軟體特別小,但是小他也有安裝成本,增量一更新,順帶給安裝了,省一步又省流量,對現在講求快速迭代的思路太重要了


拿遊戲舉個栗子吧。

對於已經上線的版本,運營維穩期間涉及到階段性的運營活動(包括可能頻繁出現的bug),這些活動大多需要新的資源配置,而且活動會較為頻繁,這個時候如果總是全量更新,等同於他們要重新下載這個遊戲,用戶進入到遊戲的成本會大幅增加,而增量更新來的方便快捷。

然而頻繁的打增量會對遊戲包產生各種奇葩影響,會出很多意想不到的問題。比如,資源怎麼壓壓不進去,導致遊戲內缺失資源出現驚人bug,亦或是頻現閃退崩潰大法等。所以一段時間如果需要出一個大的版本,可能會考慮重新更包,像是爐石每隔一段時間就得重下一次幾百兆的巨包…

兩種更新方式是需要根據產品的情況進行考慮的,各有所長。


推薦閱讀:

軟體上線後出現了重大bug,要軟體測試工程師負主要責任還是要開發人員負主要責任?那麼項目經理呢?
chrome 安裝路徑不讓用戶干預,是一種什麼設計理念?
為何國內計算機研究領域在計算機應用技術領域非常火,而計算機軟體與理論很冷清?
一個稱職的技術負責人應該是什麼樣的?
下了 Visual Studio 2015 至今未成功寫對過任何一個程序?

TAG:軟體 | 軟體工程 | 軟體更新 | OTA | 增量更新 |