探索如何建置軟體
現代軟體開發已經從根本上發生了變化,從從頭開始建立所有內容,到從現有元件組裝應用程式。 了解這種基於元件的方法對於在當代開發環境中有效實施和管理軟體至關重要。
元件型軟體模型
今天的應用程式是透過 將原始程式碼與可重複使用的元件相結合來構建的。 開發團隊不是編寫每個功能,而是從以下位置組裝解決方案:
- 原始業務邏輯程式碼: 自訂程式碼,可實作特定業務需求、工作流程和獨特功能,使您的應用程式與眾不同。
- 開源函式庫和框架: 由社群創建和維護的可重複使用的元件,提供資料處理、身份驗證、使用者介面和通訊協定等通用功能。
- 商業組件: 供應商提供的第三方函式庫,通常提供專門的功能、支援和保證。
- 整合程式碼: 「黏合」程式碼將元件連接在一起、調整介面並協調系統不同部分之間的互動。
研究一致表明,現代應用程式由大約 80% 的現有元件組成,這些元件在專案外部維護,只有 20% 是由開發團隊編寫的原始程式碼。 這種組合反映了軟體創建方式的根本轉變——從建置到組裝。
為什麼軟體是這樣建構的
基於組件的方法提供了顯著的優勢:
開發速度
重複使用現有元件可大幅加速開發:
- 經過驗證的解決方案: 團隊不會解決其他人已經解決的問題,而是整合了經過實戰考驗且可靠工作的組件。
- 縮短開發時間: 從頭開始建置 Web 應用程式架構、資料庫驅動程式或身份驗證系統需要數月或數年的時間。 使用現有組件將此時間縮短為幾天或幾小時。
- 專注於商業價值: 開發人員專注於獨特的業務邏輯,而不是重新發明通用基礎設施。
- 更快的上市時間: 應用程式可以更快地投入生產,因為團隊不會從頭開始建置每一層。
質量和可靠性
維護良好的開源元件往往超過自訂程式碼的品質:
- 社區審查: 流行的開源專案有數千名用戶識別和報告問題,從而產生強大、可靠的程式碼。
- 專家發展: 許多開源專案是由專門研究特定問題領域的專家創建和維護的。
- 持續改進: 活躍的專案會從全球貢獻者那裡定期更新、錯誤修復和增強功能。
- 生產測試: 數千個應用程式使用的元件已在不同的環境和場景中進行了測試。
成本效益
使用開源元件可降低開發和維護成本:
- 無許可費: 大多數開放原始碼元件都可以免費使用,避免了每個席位或每個部署的授權成本。
- 分擔維護負擔: 錯誤修正和改進由社群提供,從而降低組織的維護成本。
- 減少人員需求: 團隊不需要每個技術層的專家,因為他們可以透過元件整合現有的專業知識。
- 降低總擁有成本: 雖然商業組件具有直接成本,但開源替代方案通常提供類似的功能,無需許可費用。
取得創新資源
開源社群推動技術創新:
- 尖端功能: 許多新技術和方法首先出現在開源專案中。
- 生態系統效應: 流行的框架創建了相容元件、工具和知識的生態系統。
- 靈活採用: 組織可以嘗試新技術,而無需大量財務承諾。
- 社區知識: 廣泛的文件、教學和社群支援使採用變得更加容易。
開源與閉源元件
根據原始程式碼可用性,元件分為兩個基本類別:
開放原始碼元件
開放原始碼可供 任何人公開檢查、使用、修改,並經常為:
- 原始碼可見性: 您可以檢查實際實作、瞭解元件的工作原理,以及驗證安全性實務。
- 社區參與: 許多人可以貢獻改進、修復錯誤和添加功能。
- 授權控管的使用: 開源許可證指定了允許的用途,從不受限制的使用到衍生作品共享同一許可證的要求。
- 透明度: 安全研究人員、開發人員和用戶可以審核代碼是否存在漏洞、後門或質量問題。
流行的開源元件包括:
- 程式語言和運行時: Python、Node.js、.NET Core、Go、Rust。
- Web 框架: React、Angular、Vue.js、Express、Django、Spring Boot。
- 資料庫: PostgreSQL、MySQL、MongoDB、Redis、Elasticsearch。
- 開發工具: Visual Studio Code、Git、Docker、Kubernetes。
- 圖書館: Lodash、Moment.js、NumPy、Pandas、TensorFlow。
閉源元件
閉源(專有)元件 提供功能,而無需提供原始程式碼:
- 二進位分佈: 元件以編譯的二進位檔或封裝的函式庫的形式提供,沒有原始程式碼。
- 供應商控制: 建立組織會控制更新、功能和授權條款。
- 商業支援: 許多閉源元件包括專業支援、服務等級協定和保證維護。
- 透明度有限: 使用者無法檢查實作細節,使安全性和品質評估變得更加困難。
範例包括許多商業資料庫驅動程式、專有 SDK、廠商特定工具,以及專門的產業特定程式庫。
元件的分配方式
套件 提供正式的機制來分發和管理元件:
封裝結構
- 二進位碼: 已編譯的函式庫可在應用程式中使用。
- 元數據: 套件的相關資訊,包括名稱、版本、作者和描述。
- 依賴性: 元件運作所需的其他套件清單。
- 許可證信息: 規範套件使用方式的法律術語。
- 文檔: 使用說明、API 參考和範例。
套件生態系統
不同的程式語言已經建立了套件生態系統:
- npm(節點套件管理器): JavaScript 和 TypeScript 套件,世界上最大的套件註冊表,擁有超過 2,000,000 個套件。
- PyPI(Python 套件索引): Python 套件,提供資料科學、Web 開發、自動化等程式庫。
- NuGet: 適用於 C#、F# 和 Visual Basic 應用程式的 .NET 套件。
- Maven 中心: 用於企業和 Android 開發的 Java 套件。
- RubyGems: 用於 Web 應用程式和自動化的 Gem 套件。
- Crates.io: 用於系統程式設計的 Rust 套件。
套件管理工具
套件管理器可 自動下載、安裝和更新依賴項:
- 依賴關係解決: 自動判斷並安裝所需的相依性。
- 版本管理: 追蹤應用程式使用的套件版本。
- 更新通知: 當有較新的版本可用時通知開發人員。
- 漏洞掃描: 一些套件管理器整合了安全掃描來識別已知漏洞。
基於元件的開發的影響
雖然基於組件的方法提供了巨大的好處,但它也帶來了挑戰:
相依性管理複雜性
- 相依性樹狀結構: 您的應用程式可能直接相依於 20 個套件,但這些套件相依於其他套件,從而建立數百或數千個相依性的樹狀結構。
- 版本衝突: 不同的元件可能需要不相容版本的共用相依性。
- 更新級聯: 更新一個元件可能會需要更新許多其他元件。
安全性考慮
- 繼承的漏洞: 任何相依性中的安全性弱點都會影響您的應用程式。
- 供應鏈攻擊: 惡意執行者可能會入侵熱門套件,以攻擊相依於它們的應用程式。
- 未維護的依賴項: 不再維護的元件將不會收到安全性更新。
授權合規性
- 許可義務: 每個開源許可證都有要求——有些允許不受限制的商業用途,有些則要求共享您的源代碼。
- 許可證激增: 應用程式可能會包含數百個具有數十種不同授權的套件。
- 合規負擔: 組織必須追蹤授權義務並確保合規性。
作業相依性
- 外部託管: 許多應用程式相依於裝載在公用登錄上的套件,這些套件可能會發生中斷。
- 註冊表可用性: 如果公用登錄變得無法使用,建置和部署可能會失敗。
- 包裹移除: 作者有時可以從公用登錄中移除套件,從而破壞依賴它們的應用程式。
了解現代軟體如何使用元件建置,為組織在實施開源軟體時必須解決的安全、法律和營運問題提供了基本背景資訊。 本模塊中的其餘單元探討了這些問題以及有效管理它們的策略。