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