隨著軟體系統規模日益龐大,如何降低新專案的開發成本成為軟體公司的核心課題。提高既有程式碼的重用程度是最直接的途徑,但這引出了兩個關鍵問題:系統應該具備多大的擴展性?又能實現多大程度的擴展性?
若原始系統未考慮擴展性,強行重用程式碼反而會抵消生產力提升。然而,為了擴展性而設計會引入額外複雜度,可能犧牲效能或可測試性。極限編程將此比作購買股票期權:預先投入成本換取未來彈性,但若從未行使期權,沉沒成本將無法收回。因此,只有在確信收益大於成本、且明確知道系統將如何被擴展時,才應採用擴展性策略。
討論程式擴展性時,本質上存在三種類型:黑盒擴展性與兩種白盒擴展性(開放盒、玻璃盒)。其核心差異在於原始碼對擴展者的可存取程度。
透過配置語言或嚮導即可擴展系統,原始碼對外不可见。典型案例是稅務軟體:政府發布新申報表時,僅需用配置語言描述結構即可擴展。此模式適合專有元件與框架,滿足「原始碼不公開」與「外部開發者需一定定制彈性」的雙重需求。支援使用者定義腳本或巨集的程式(如 Emacs、MS Office)皆屬此類。
白盒擴展性允許透過修改或新增原始碼來擴展程式,可細分為:
不同擴展性類型適用於特定環境:專有軟體允許外部擴展但不公開底層代碼時,黑盒方案適合;需公開底層代碼供查看或修改時,白盒方式介入。單一系統中亦可混合使用多種形式。下篇將深入探討白盒擴展性的具體實作議題,並剖析混合多種擴展類型的系統案例。