GDS Digital Service Manual 中文翻譯網站 (beta)
by HPX-GOV 英國政府數位服務研究小組 GDS Study Group
Home » 英國政府數位服務設計手冊 » 建造軟體 (Making software) » 選擇技術(Choosing technology)

選擇技術(Choosing technology)

如何選擇使用何種軟體工具

這篇文章僅作為指導之用,請勿作為法定建議。

在專案的不同階段,你必須從眾多技術中選擇一項技術,這可能是在下列項目之中進行選擇:

  • 程式語言
  • 資料庫
  • 程式庫
  • 作業系統
  • 幫助開發團隊提高工作效率的小工具
  • 相關的專利(商業)軟體和開源軟體

你可以改變你的想法

假定大部分的技術選擇可以改變或將來會改變,尤其是在開發的初期:

  • 在開發初期選擇一種容易且快速地建立原型的程式語言,而且必需考慮到未來成為最終產品時容易更換另一種程式語言以支援大​​型團隊所使用
  • 使用開源產品以達到快速上手的目的,或為了所需要的功能購買商業(專利)產品(或反之亦然)

在専案的第一天,因為沒有足夠的領域知識或對使用者需求的瞭解來選擇正確的技術。只要每個人都明白這一點,在這個階段根據知識或經驗來猜測是可以的。

務必在你更瞭解眼前的問題後,找個時間重新審視你所選擇的技術。

由功能開始

當決定選擇使用那一種技術時,往往因為過往的經驗或目前的趨勢,很容易立即跳進特定的產品。

  1. 退一步,思考你所追求技術的功能 – 例如你在找一個關聯式資料庫或文件資料庫?Key-Value 資料庫或圖學資料庫?
  2. 討論你想要的功能,而不是討論任何具體的實作。
  3. 一旦你定義了一組功能,依據這些功能,擬定如何對那些潛在可能的軟體解決方案作測試。
  4. 在一個非常類似於正式環境的環境中測試軟體,即在真實狀況下,正式環境的規模(包括最壞情況下的使用者負載)。

貫​​徹這一過程將確保您:

  • 理解軟體的特定特徵
  • 確定某個軟體的任何折衷或潛在的問題,如理想中適合你的領域模型相對於其在繁重負荷下的性能
  • 確認其所聲稱的功能是確實的

成本

當選擇技術時確認考慮了總成本以及任何前期費用

下列事項需考慮其成本:

  • 工作人員
  • 支持成本
  • 許可費用(如果適用)
  • 正在進行的服務改善工作
  • 任何退出成本(尤其是舊有系統中的資料移轉到新的系統),可能是由於使用非開放標準的格式或協議擴展引起的

確認你了解在正式系統中任何不尋常的高使用者負載量對成本的影響。

團隊中每個人都參與決定

選擇技術時參考整個團隊的意見。但這並不意味著沒有人負責做決策,而是你要開發團隊(包括網頁營運人員)分享自己的見解:

  • 可用的選項
  • 這將如何影響整個系統

期待技術的偏好多樣性,及選擇技術時的意見分歧。

所有的事情都是平等的,選擇開發人員和營運人員皆認可的技術通常會提高生產率。

測試和部署

如果你這麼作,在這些過程中會容易得多:

技術鎖定

技術鎖定發生在過去的決定限制了未來的決定,甚至可能讓你沒有其他選擇。

例如,如果您選擇只能在一種特定操作系統執行的資料庫,你對操作系統的使用將別無選擇。如果該操作系統的成本暴增,你將沒有簡單的方法迅速或廉價地降低成本。

被供應商或者做事情的方法綁定,將面臨如下的困境:

  • 不可預見的財務成本,例如成本在一夜之間增加
  • 限制產品迭代的速度,例如,如果理想的技術無法與當前供應商或技術相容

隨著時間的推移,在許多決策之後,你會發現自己陷入一種所有的技術決策皆緊密耦合並且鎖定在一個供應商或者某種做事方式的處境,。這可能有無法預料的財務成本(例如成本在一夜之間劇增)。這也可能限制產品迭代的速度(如果理想的技術無法與當前供應商或技術相容)。

當你決定技術時,必需確定對於變更該技術時產生的成本或影響有清晰的瞭解,並且盡可能地避免鎖定。這可能意味著選擇不使用某些功能(如非標準擴展協議,API或程式語言),因而擁有更換技術的自由。

在一般情況下,避免針對任何具體的技術,產品或供應商作長期承諾,直到你完全理解你正在試圖解決問題。即使如此,請確保未來開發方案有最多的選擇,並且避免技術鎖定。

新建與既有的軟體

如果有一個現有的軟體解決方案,可以解決您的問題,決對要優先考慮使用它。

如果您正在使用軟體來滿足罕見或是小眾的需求,你就不太可能會找到對於那些需求有幫助或是持續有幫助的工具。在這種情況下,你將須要開發新的軟體。

然而,也有很多情況下,使用現有的軟體更有意義,如:

  • 當你有商業需求,而有人可能已經開發出了針對常見的問題的解決方案
  • 面對已被政府其他部門或其他政府解決並且發布為開源軟體的小眾問題,特別是政府相關問題

在大多數情況下,很多專案都會有相同的需求,因此重新開發某些類型的軟體意義不大,如:

  • 開發工具
  • 構建工具
  • 實用工具庫
  • 資料庫
  • 監控工具

軟體共享

分享針對政府需求而開發的軟體,無論是否是寬鬆的GPL相容開源軟體授權條款(例如共享軟體MIT / X113-clause BSD ),除非這樣做會:

  • 對於系統或流程在安全上,造成無法以合理的努力減輕的不可接受的風險
  • 打破現有的合約安排
  • 直接威脅國家安全

共享軟體是指能夠被世界上任何有相似需求的人廣泛的應用並且改善的。重要的是,特別是其他國家的政府有機會重新使用你所創建的軟體,因為每個人都值得擁有人們更願意使用的很棒的數據服務

例如GovSpeakunicorn herder都是被開發為GOV.UK的一部分 的小元件。他們現在被幾種不同的組織所使用,並已得到了一些公開的貢獻

在實踐中,共享通常意味著:

在內部程式碼控制系統存儲軟體的“主要”版本並且複製的最新版本到公共程式庫中。

不共享軟體的原因

有時候為政府開發軟體的第三方針對其所開發的軟體保留“智慧財產權”(IP),分享軟體不可能的。

因此,與第三方合作,於簽署合約時應避免:

  • 允許第三方針對為政府開發的軟體保留智慧財產權
  • 限制政府可以在寬鬆的GPL相容開源軟體授權條款下分享其所開發的軟體

在其他情況下團隊也許會基於風險的決策採取不分享某些他們所開發的軟體,例如,避免對公眾揭露特定風險評估演算法或流程的細節。

對任何的封裝軟體,這是良好的工程實踐,大部分特定系統或服務的軟體在這種情況下,仍然可以公共共享。

CESG

基本的假設應該是贊成廣泛地在開放且共享的軟體中開發。但是,如果你對於公開分享程式碼有嚴重顧慮,那麼CESG可以根據您的特定情況為您提供建議。另請參閱在聯合內閣辦公室/ CESG針對開源軟體和安全的聲明 。

商業或開源?

隨著自由/開源軟體的成長,很多高品質的技術產品(資料庫,作業系統,程式語言,開發工具等)均免費提供給政府及其供應商使用及改善。

然而,商業軟體產品的巨大的市場仍然存在,並且開源軟體的功能並不自動意味著你不能選擇符合您需求的專有技術。

我們的規範是,當開源軟體和非開源軟體在於滿足最低和基本功能的成本在整體上沒有顯著差別時。基於自由軟體固有的靈活性,政府的政策仍然是優先選擇開源軟體。

關於如何確保有專利軟體和自由軟體之間的公平競爭環境的詳細資訊,請參閱:

確保任何決定無論是使用現有的開源或專有的軟體時,無法限制你在寬鬆的GPL相容開源軟體授權條款下分享你所開發的軟體。

在開放環境中開發程式

一個成功的開放原始碼專案,將會由組織內外大量的資源得到貢獻。允許開發人員花時間來審查貢獻,並回答其他該軟體使用者所提出的問題和討論。

確保開發人員擁有:

  • 安裝與實驗開源軟體的能力
  • 很容易在網路上發布服務原型的環境
  • 方便取得各種用來測試網站的連網裝置
  • 不受限制地使用協作工具,例如GitHub上Stack Overflow以及IRC

大型開放原始碼專案通常開放擴展模型,讓其他人有機會可以繼續以各種通常出人意料又或者可能是不適當的方式使用這個服務;同時核心專案由一群小受信任的核心成員(committers) 編輯以保持一致性。

抓住每一個機會來回饋您所使用的開放原始碼專案,它可以是以下形式:

  • 程式碼
  • patches
  • 報告錯誤
  • 要求功能
  • 開發人員和支持人員贊助
  • 參與社群討論
  • 給予専案公共授權

標註引用你所使用的開放源程式碼,如GOV.UK 版權頁 -你可以在 GDS blog entry about coding in the open 中瞭解更多。

安全機制

密鑰,密碼和其他機密不可以標示或儲存在程式碼之中,需遵守Kerckhoffs原則 。這種將專案程式碼與佈署的執行個體(deployed instances)分開的方式是很好的開發作法,無論軟體本身是否是公開共享的。

建議大型或重要的專案需要有一個私有空間(private space),用來討論安全問題及製作patch。這消除了在修復程式被佈署前標記漏洞的風險。特別建議如果有一小部分的參與開發者。

為什麼GDS要這麼作

選擇的技術是很重要的,但它可能並不像你想像的那麼重要。重要的是該技術的使用者能夠以可以持續的速度及合理的成本生產出優質的成果。當進行技術選擇時,重要的是你開發你的產品,並且不斷地重新評估您的選擇,嘗試和作符合下列條件的決定:

  • 最大限度地提高開發人員的生產力
  • 減少總擁有成本
  • 避免鎖定
  • 很容易讓政府分享其創建的軟體

延伸閱讀

開放標準的考慮因素

譯者:Sharon Wang
校稿者:
原始出處:https://www.gov.uk/service-manual/making-software/choosing-technology.html

請留言

你的email信箱不會被發布出來. Required fields are marked *

*