l

2011年11月19日 星期六

What Netscape learned from cross-platform software development (2)

November 19 21:14~22:29



第 1 集提到有兩種跨平台軟體開發方式:
  • 針對不同的平台從頭開發個別版本的軟體(基本上不同平台不共用程式碼)。
  • 軟體系統大部分的功能都採用 generic, cross-platform code 來開發(不同平台共用程式嗎碼),軟體中只有少部份與平台相依的程式碼。
Netscape 採用上述第二種方法來開發跨平台軟體,為此 Netscape 開發了一個稱之為 Netscape Portable Runtime (NSPR) 的元件作為跨平台開發的基礎,後來 Netscape 嘗試使用 Java 這個跨平台的語言來取代 NSPR 並用 Java 重新撰寫瀏覽器但是最後以失敗收場。


***


跨平台軟體開發除了程式語言的選擇以外,還有很多其他的成本。 根據 Netscape 工程師估算相較於單一平台的軟體開發,開發跨平台軟體需要至少額外 15%-20% 的人力與時間(design and coding 的時間)這還不包含整合與系統測試的時間(integration and system testing)


另外一個問題是『人力資源』的問題。例如,Netscape 的 server 部門只有一個 developer 熟悉 HP Unix,於是這個 developer 成為開發的瓶頸(可能有很多不同的團隊都需要用到這個 developer 的專長)。跨平台軟體開發團隊需要具備各種平台專家的人力資源,當此需求無法被滿足時就會影響到產品開發的時程。


另外一個更嚴重的問題是測試各種不同版本的軟體。根據某位 Netscape QA 經理的估計,與測試單一平台相比,測試 7 個左右不同版本的 Unix 軟體至少需要多 1 倍(double) 的時間。如果是測試 Windows NT 則需要更多的人力與時間。



***

論文最後一個要談的議題是軟體執行效率(performance)。Netscape 絕大部分的收入來自於販賣伺服器軟體(Web Server,LDAP Server, etc.),這些伺服器軟體執行速度要夠快才有賣點。根據 Netscape 工程師的估算,執行相同的功能,專為 Windows NT 所設計的軟體將會比跨平台的軟體至少要快 1 倍(at least twice as fast as cross-platform code)



綜合以上所說的種種問題,Netscape 改變了設計跨平台軟體的策略。在 Navigator 3.0 (1996 年 8 月釋出)與 SuiteSpot 3.5 (1998 年 2 月釋出) 這兩個軟體中,約有 20% 的程式碼是與平台相依的程式碼(platform-specific code)。到了 Communicator 5.0 時,裡面大概有 40% 的 platform-specific code這些 platform-specific code 絕大多數都是用來最佳化程式在 Windows 平台上的執行效率(應該是要跟微軟的軟體競爭)。


雖然 Netscape 原本的開發策略是『cross-everything』,但是後來 Netscape 的工程師把心力專注於最受歡迎的 Unix 平台:Sun 的 Solaris,而且不再所有的 Unix 平台上提供 Netscape 的產品。



***

最近這一段時間團隊也投資了很多時間在改善系統執行效率上面,因此讀完這篇 paper 讓 Teddy 感觸良多也感同身受。用講的太慢,乾脆用唱的...不是,是用條列式說明:
  • 在人力與資源不足的情況下,如果真的還是要開發跨平台的軟體,Teddy 也會選擇第二種方式(軟體系統大部分的功能都採用 generic, cross-platform code 來開發)。
  • Teddy 本身就是 Java -- write once, run anywhere -- 的受害者,也許 98% 的情況這句話都成立,但是剩下的 2% 就足以搞死你。
  • Performance 真的是開發完跨平台軟體之後最大的痛。聽到『你們做出來的軟體怎麼跑的這麼慢』的時候,真想靠...近...一點跟對方說....不然咬我啊...電腦該升級了...XD。
  • 『先研究可以動,再考慮最佳化』。跨平台軟體要先能夠做出來(能夠動),再看看那些部份對於 performance 影響最大(使用者最常使用或是最在意的功能),想辦法加以最佳化。
  • 需要撰寫 platform-specific code 的時候就放手去寫,想辦法從『設計面』來讓整個系統的設計保持一致,不要因為過多的  platform-specific code 導致系統無法維護或擴充 。
  • 最後一點,跨平台測試與整合真的很花時間。

***


寫到最後突然覺的中文不太好,快被 1 倍還是 2 倍煩死了...XD。



***


Java 內心獨白:Write once, run anywhere...公堂之上大膽假設一下,應該不犯法吧?!

3 則留言:

  1. 我們今年其中一位學弟的論文也是採取第二種方案。雖然那時候我沒讀過Netscape這篇paper,但不知道為什麼我那時候的直覺就是這個方案比較好,經過一翻討論跟評估,還是採用這個方案。

    回覆刪除
  2. To Sprint Du,

    如果你待的公司跟微軟一樣要錢有錢,要人有人,選擇的可能性就多很多了...像我們這種貧窮人家出生的小孩,當然只能選二啦。

    回覆刪除
  3. 雖然沒有明確的數字,但當初老師覺得程式「量」不大的情況下,第二個方案真的有省到嗎?問題是,我們也不知道分界點在哪。

    回覆刪除