探究將軟件重用到面向服務的體系結構 (SOA) 時對其起負面作用的因素,了解重用工程如何給 SOA 價值實現過程帶來積極影響。
引言
對于許多組織而言,有效而系統的軟件重用仍然是一個很難達到的目標。現在真的存在很多與重用相關的業務促進因素。首當其沖的可能就是 IT 成本削減以及對 IT 體系結構和基礎系統中的靈活性和響應能力的迫切需要。
通常,您同樣也會發現阻礙進行更為成功的重用起負面作用的因素(或者,至少看起來是這樣的)。不過,要應付這些起負面作用的因素卻并不容易。同時,面向服務的體系結構 (SOA) 方面的技術演變為實現軟件重用提供了基礎。SOA 價值方面的關鍵部分就是通過軟件重用得到的益處。
作為重用的關鍵實現技術的 SOA
一項對 developerWorks 和其他開發人員參考資料中的各種 SOA 最佳實踐文章的調查表明,有大量的對 SOA 中的接口的重要性的論述。服務接口是集成設計的關鍵。通過與標準的使用相結合,接口成為了創建松散耦合(服務客戶機與服務提供程序的通信不受編程語言和平臺的限制)的基本元素。服務需要獨立,以使客戶機無需了解服務組件的內部工作;實質上,服務作為“黑盒”進行操作。“白盒”重用(或復制與粘貼)中將對源代碼進行修改,以在另一個上下文中使用,這種方法很有用,但通常不如“黑盒”重用的好處多。“由于在整個生命周期中可以從黑盒重用獲得較多的好處,因此系統的重用程序可以在不進行更改的情況下進行重用”(摘自 Measuring Software Reuse : Principles, Practices, and Economic Models,請參閱參考資料)。服務對功能進行封裝,此功能可以是業務功能或實用功能。在 developerWorks 文章“Migrating to a service-oriented architecture”中對 SOA 屬性進行了更為詳細的討論(請參閱參考資料)。
SOA 的所有這些特征提供了可進行軟件重用的技術環境。不過,即使有了 SOA 概念和技術提供的重用關鍵組件,傳統的重用阻礙因素仍然是個問題。
重用阻礙因素
在大多數開發組織中,會頻繁進行軟件重用(至少會臨時出現這種情況)。項目之間以一種非正式的方式共享。SOA 提供了更為正式的重用,當服務客戶機訪問服務以給定功能時,將出現重用。重用方(服務客戶機)甚至都不知道其所重用的代碼是什么,而且也不需要知道。它們只知道服務正向其提供所需的功能。那么,問題是什么呢?此處,我們將分析一些與可重用服務的創建與使用相關的挑戰。
- 教育培訓與文化:對某些項目團隊而言,Web 服務之類的 SOA 技術可能還是新事物,因而在利用可用服務之前,他們需要學習一些新的技能技巧。項目團隊有效找到可用服務,理解其功能并確定給項目帶來的好處的能力水平決定了該團隊實現服務重用價值的可能性。UDDI 注冊中心非常重要,但單單這個還不夠。WSDL 文檔設計用于供機器讀取,人也能讀懂其內容,希望重用服務的團隊通常需要其他信息。服務學習曲線會對重用價值造成影響,因此,這也是項目團隊要考慮的因素,以確定是進行重用,還是重新編寫代碼。
- 可重用服務的可用性:顯然,必須存在有價值的可重有服務才能實現服務重用。確定在給定組中的這些服務,并實際創建和提供它們,可能是一大挑戰。必須進行某種層次的域分析,以確定在整個域中存在的共性,從而確定哪種類型的服務具有重用價值。組中的項目團隊為其解決方案創建的軟件中可能包含可硬編碼為可重用服務的良好候選服務,這些服務能夠以經濟高效的方式在更廣泛的范圍內使用。了解何種情況下可以進行重用是一個挑戰,而提供允許在已確認可以進行重用的地方執行重用的組織構造則更是一大挑戰。
重用工程
對工程進行重用的核心是擔任跨項目邊界的職務的專家(重用工程師)的重用工作。他們在資產的使用和生產方面為項目團隊提供幫助。Robert Fichman 和 Chris Kemerer 在“Journal of Systems and Software”發表的一篇文章“Incentive compatibility and systematic software reuse”(請參閱參考資料)中提供了這個描述:
“重用中心的重用工程師實際上是‘外借’給應用程序開發團隊以通過重用實踐為他們提供幫助。在重用使用方面,重用工程師提供關于潛在的可重用內容的知識,并在任何必要的重用的采用過程中提供幫助。在生產方面,重用工程師識別何處最適合產生新組件,并幫助實現這些組件的可重用性。而對項目而言,重用工程師將記錄域的知識、可重用的新資產以及關于哪些現有資產本身已經很好了,哪些尚需要修改或增強的知識。”
重用工程師必須技術熟練,有項目級的經驗,且能最終促進重用的實現。重用工程師角色的一個關鍵特點就是其職位是跨多個項目組的。軟件重用是重用工程師的“日常工作”,他們通常在其影響范圍內有與重用結構相關的目標和措施。就取得重用程序的成功以及對 SOA 活動而言,對此類涉及的工作領域超過單個項目的角色的投資非常重要。很少有組織通過一次只專注于一個項目而實現了成功的系統重用(Software Reuse: Architecture, Process and Organization for Business Success——請參閱參考資料)。就我對組織應用重用的經驗而言,我發現采用這個方法處理傳統重用阻礙因素(如前面所述的那些因素)非常有效。對于這些阻礙因素中的每一個,我都將討論重用工程的影響。
教育培訓與文化
具有 SOA 技能的重用工程師通過與項目團隊協作,可以降低這些團隊采用 SOA 的壁壘。項目經理接受過相關培訓,要降低其項目的風險。搜索和重用別人的軟件可能有風險,但重用工程師是確定可用服務的專家,可以減少這些風險。他們可以與項目團隊合作,以評估和了解需求,然后花時間對服務進行搜索、了解和分析,并為團隊提供指導,告知如何以及何時使用這些服務。而且,他們還可以利用其他使用該服務的項目的實現經驗。所有這些將降低學習曲線的影響和減少重用風險。這些工程師可以對團隊進行培訓,告知他們遷移到 SOA 并盡可能少地影響其現有軟件的最佳方法。例如,改為使用服務(而不在應用程序內提供此功能)時,可以引入適配器設計模式以盡可能減少對應用程序代碼的干擾。
重用工程還對組織文化帶來了積極的影響。軟件重用并不是一個新概念,多年來各種組織對此進行了很多次嘗試,取得了不同程度的成功。因此,重用是大部分人都可以對其有自己的看法的事物,這些看法可能是正面的,可能是反面的,也可以介于兩者之間。重用工程師可以了解那些從來不會通過搜索框或表單表達出來的項目需求。人與人之間的交互提供了一個不能通過搜索工具和資產存儲庫加以解決的通信層次。這在項目團隊和重用工程師之間創造出一種和諧的氣氛,而這可以進一步幫助創建和引入重用文化,項目團隊將在此過程中更加認識到協作重用努力的重要性。重用工程師成為了一個通道,項目團隊可以通過他/她獲得以服務的形式創建可重用軟件資產的機會。
可重用服務的可用性
可以采用多種形式創建服務。對組織而言,第一步是理解哪些是有價值的服務。SOMA(面向服務的建模與體系結構——請參閱參考資料)是一種非常具有描述性的方法,其中包含了幾個補充服務識別方法(包括域分解)。重用工程是 SOMA 的補充,因為通過它可以對域加以了解。
域分析可以確定域中存在的共性,從而確定哪種類型的具有重用價值。可以通過若干方法進行域分析。對于重用工程模型,一個項目要進行一次域分析。重用工程師通過與項目團隊協作,可以捕獲項目團隊需要提供的功能。對給定域中此信息的分析,將揭示哪些地方存在對相同功能的重復使用,以及哪些地方可以引入服務以創造重用價值。由于企業體系結構方向和項目團隊提供的實際解決方案架構之間的差異,某些廣泛的水平重用機會沒有被發現(如 developerWorks 文章“Elements of service-oriented analysis and design”中所述,請參閱參考資料),此方法對于發現這種機會特別有效。由于重用的數量可能很大,所以這些常見的服務機會可以迅速體現 SOA 的價值,提供大量的投資回報,這一點非常誘人。
例如,以創建功能需求(如為企業內的應用程序對用戶訪問進行重新驗證)為例。隨著越來越關注法律法規的遵守、此類業務控制變得重要得多。由于廣泛要求提供此功能,可能組織內一次又一次地重新開發解決方案,最后的結果是沒有任何一個解決方案是可以重用的,缺乏業務的集中控制,而 IT 投資被大量浪費。這種類型的功能也可以作為可以廣泛重用的一組服務提供,異構企業中的應用程序都可以使用這些服務。各個層次的企業受益人(從 CFO 到應用程序開發人員)都可以實現 SOA 的價值,以一種實際的方式進行重用。
重用工程師在發現這些機會的同時,也會獲得可以減少向 SOA 遷移的成本知識。具體來說,重用工程師將對候選服務進行分類。這就是項目團隊為其解決方案創建的軟件,是一個可能硬編碼為可重用服務的候選項,能滿足通過域分析確定的需求。了解何處存在這些機會通常是個挑戰。重用工程師可以明確地確定最佳的實現,能提供生成服務的最佳機會。重用工程團隊也可以擔任進行硬編碼的角色,從而交付服務。或者,他們可以將以前項目中完成的工作與新項目的要求結合,從而在新項目范圍內硬編碼為服務。這個“下個項目生成”模型(Measuring Software Reuse : Principles, Practices, and Economic Models——請參閱參考資料)可以提高可重用服務的可用性和使用,能在不需要新投資流情況下實現重用。重用工程是發現那些經常被忽略的機會并針對其進行處理的關鍵。
總結
重用是有效的 SOA 的必要屬性,是 SOA 的業務案例的組成部分。重用工程是將軟件重用最佳實踐應用到 SOA 的有效方法,可以在整個企業范圍內高效地產生和使用服務。