軟件開發長期以來被認為是一項富有創造性的活動。一個軟件開發機構在接到一個新的項目之后,通常遵循需求、獲取、分析、設計、實現、集成和測試的步驟,進行項目的開發。傳統的開發方法并不強調軟件復用,這樣就必然導致大量的重復勞動,給軟件企業造成巨大的人力、物力和財力的浪費。對比一些成熟的工程領域,復用是這些領域的一個基本特征,例如土木工程、化學工程、計算機硬件工程等。通過大量復用經過實踐檢驗的系統體系結構和標準化的構件,使得對于一般的設計問題都可以直接利用現成的解決方法,避免了系統開發時“不斷重復地發明車輪”,從而大幅度降低開發成本、提高生產效率和產品質量。系統化的復用將為軟件企業在競爭日益激烈的市場上贏得有利的地位,因此,對軟件復用的研究和實踐越來越引起學術界和產業界的高度重視。
----在國家“九五”重點攻關項目青鳥工程中,對基于復用的軟件生產技術進行了深入的研究和實踐,實現了基于構件-構架的軟件生產線系統,制定了系列標準和規范,為軟件的工業化生產和工程化開發提供了必要的基礎和能力,并取得了初步的成果。
----在青鳥軟件生產線系統的基礎上,我們與浪潮集團通用軟件公司進行技術合作,實施了“青鳥軟件工業化生產技術示范工程——基于青鳥軟件生產線的浪潮軟件產品開發平臺”,旨在提高浪潮通軟的軟件生產能力和市場競爭能力,同時在實踐中補充和完善青鳥軟件生產線系統。雙方將在商業、財務、金融、工業產供銷、醫藥等領域進行合作,目前正在實施商業領域軟件開發平臺的建設,滿足商業零售、批發、連鎖等不同業態的需求。
青鳥軟件生產線
----青鳥工程在“七五”期間提出了軟件生產線的思想, “八五”期間對軟件生產線的思想進行了實踐和豐富,“九五”期間對基于構件-構架模式的軟件工業化生產技術進行了研究,并實現了青鳥軟件生產線系統。青鳥軟件生產線同時支持面向復用的開發和基于復用的開發,為軟件復用提供了一個比較全面的解決方案。
----如圖1所示,青鳥軟件生產線將軟件的生產過程劃分為三類不同生產車間的活動,即應用構架提取車間、構件生產車間和基于構件-構架復用的應用集成(組裝)車間,在這三個車間之間存在著兩個庫,即應用構架庫和構件庫,從而形成軟件生產組織內部的合理分工,構劃出了軟件生產過程,奠定了軟件工程化開發和工業化生產的基礎。通過標準規范和質量保證對整個生產過程提供支持。
----青鳥軟件生產線中的主要活動如下:
----(1) 應用構架提取車間,從一組現有的軟件系統中提取可復用的構架,并存入到構架庫中。
----(2) 構件生產車間,以應用構架為指導生產可復用的構件,這些構件可以是專為復用而開發的,也可以是從現有系統中提取、修改、包裝而得到的,生產出的構件存入構件庫中。
----(3) 應用組裝車間,根據當前應用系統的用戶需求,從構架庫中選取合適的可復用構架或設計新的構架,并以此為指導,從構件庫中得到合適的構件,進行必要的適應性修改,可能還要開發一些新的構件,進行組裝,得到新的應用系統。
----(4) 產生新的應用系統后,“現有系統”的集合擴大了,這時要根據新的“現有系統”對可復用構架進行演化,可能還會有新的構件入庫。
----與這些活動相對應,在青鳥軟件生產線中,軟件開發人員被劃分成三類:構件/構架生產者、構件/構架庫管理者和構件/構架復用者。這三種角色所需完成的任務是不同的,構件/構架生產者負責構件/構架的生產和維護;構件/構架庫管理者負責構件分類以及構件庫的管理工作;而構件/構架復用者負責進行基于構件的軟件開發,包括構件查詢、構件理解、適應性修改、構件組裝以及系統演化。
領域工程和應用工程
----實際上,在青鳥軟件生產線中的前兩個車間,即應用構架提取車間和構件生產車間對應領域工程,而組裝車間對應應用工程。目前對什么是領域工程還沒有一個統一的定義,一般認為,領域工程是為一組相似或相近系統的應用工程建立基本能力和必備基礎的過程,它覆蓋了建立可復用的軟件構件和構架的所有活動。這里的“領域”是指一組具有相似或相近軟件需求的應用系統所覆蓋的功能區域。
----圖2給出了實施領域工程的基本過程,其中最重要的結果是形成面向領域的可復用構件和構架庫,體現了上述領域工程定義中的“建立基本能力和必備基礎”。如圖2中央的環所示,實施領域工程的整個過程是迭代的,雙向的箭頭表示并不存在一種從輸入到輸出之間的單向因果關系,輸入和輸出實際上是相互影響和相互作用的。例如,稍微擴充一下產品空間可能意味著接納全新的系統類型,作為可復用構件和構架的來源;類似地,生產約束(例如強制使用CORBA)可能導致在整個領域工程范圍內,需要考慮對體系結構風格和模式(例如基于消息傳遞的分布式對象風格)的限制。這種限制反過來又將確定哪些現有的構件和構架是可供復用或挖掘的候選者。
----按照上述定義,領域工程是為一組相似或相近系統的應用工程建立基本能力和必備基礎的過程,我們將開發單個應用系統的軟件工程過程稱為應用工程,領域工程的最終目標是為了在開發滿足特定用戶需要的應用工程時,通過復用領域工程的構件和構架等結果,以達到提高開發效率和質量、降低開發和維護成本的目的。
----在圖3中,應用工程的實施依賴于領域工程的輸出,即產品空間、構件、構架和生產計劃,以及特定產品的需求,應用工程的結果是符合上述需求的產品。領域工程和應用工程之間也沒有固定的順序關系,它們是一個迭代的過程,可以采取自頂向下的開發策略,即從一組構件和構架出發,生產符合用戶需求的特定產品;也可以采取自底而上的開發策略,即從一組產品出發,提煉可復用的構件和構架。
項目實施過程
----建立商業領域軟件開發平臺的過程就是在實施領域工程,為商業領域應用工程的實施建立基本能力和必備基礎。現在比較流行的軟件開發方法是面向對象方法,但隨著對軟件復用認識的不斷深入,基于構件的軟件開發逐漸成為學術界和產業界關注的焦點。構件是對象概念的延伸和發展,通常可以認為,構件的粒度比對象的粒度更大,它們是獨立的功能單元,在實現上可以是一組協作的對象集合,典型的構件如 CORBA構件、DCOM構件、JavaBeans 構件等。在由對象構成的系統中,對象具有小粒度、大數量的特點。相對而言,構件系統中的構件具有大粒度和小數量的特點。鑒于目前基于構件的開發方法還處于研究階段,缺乏完整的方法學的支持,因此在該項目的實施過程中,我們結合了面向對象方法和基于構件的開發方法,但由于其間過渡的不平滑,因此引入了“構件關系建模”活動,基本實施過程如圖4所示。
----商業領域軟件開發平臺實施過程中主要活動如下:
----(1) 領域建模
----模型是對現實世界的一種抽象,因此,任何一個模型都不可能事無巨細地刻畫現實世界的各個方面。我們采用了ARIS模型,從過程、數據、功能和數據等四個方面對不同的商業業態進行了比較完整的刻畫,標識出系統的共性和變化性。從ARIS模型可以直接轉換為系統的Use Case模型。
----(2) Use Case建模
----Use Cases目前被認為是一種較好地獲取軟件系統需求的手段,特別是在基于構件的系統開發中。通常,一個系統有許多不同類型的用戶,每種類型的用戶作為系統的一類活動者(actors),通過和Use Cases的交互使用系統。一個Use Case 表示了系統向活動者提供一些有價值的結果而執行的動作序列。所有活動者Use Cases和它們之間的關聯構成了系統的Use-Case模型,反映了用戶同系統的交互,刻畫了系統的功能和行為。
----在商業領域業務模型的基礎上,將注意力集中于捕獲系統為每個用戶(即活動者)所提供的服務上,根據用戶的實際需要確定系統的功能。所有用戶不需要的功能是系統中不應包含的,而任何用戶的每種需要又是系統中必須包含的,這樣就在用戶的真正需求和分析人員獲取的需求之間建立了一一對應的關系。
----(3) 面向對象分析
----需求規約階段的主要任務是以準確、無二義的方式刻畫用戶需求,使開發人員能更準確地理解在需求獲取階段得到的Use-Case模型,把Use Cases 細化為對象和對象之間的交互。這個階段以Use-Case模型作為輸入,產生的結果主要包括表達系統靜態特征的類圖和動態特征的順序圖。
----標識系統的類和對象是建立上述靜態和動態模型的基礎。通過Use Cases,識別參與實現Use Cases的對象,并把Use Cases中定義的責任分配給不同的對象類。以這種方式,可以確定系統真正需要的、并實現Use Cases的一組對象類,然后建立對象類之間的關系,包括關聯、依賴和繼承。 [NextPage]
----順序圖在某種意義上是Use Cases的一種實現,Use Cases在黑盒層面上表達了用戶和系統的交互,順序圖則通過參與一個Use Case的對象實例之間的交互,詳細地表達了如何實現該Use Case。
----(4) 構件關系模型
----前面提到過,為了彌合面向對象分析和基于構件的設計之間過渡的不平滑,我們引入了構件關系模型。在這里,構件的接口定義了一組對外提供和要求的功能,構件在實現上對應一組協作的對象。
----構件之間的關系包括功能連接和聚集兩種,功能連接表達了一個構件對外提供功能和另一個構件對外要求功能之間的匹配。值得注意的是,我們這里并沒有引入泛化(generalization)關系,在面向對象中是通過繼承機制體現的,可以很好地支持源代碼級的復用,但也存在著一定的局限性,其中最突出的是被稱為“脆弱的基類(fragile base classes)”問題。繼承機制在支持復用時,子類可以直接使用父類提供的屬性和服務,并根據需要做適應性修改,一旦繼承樹中的某個非葉節點的接口發生變化時,這種影響就會波及到以該節點為根的整個子樹,有時這種波及并不是所希望的;繼承機制還會帶來復用的效率問題,復用一個子類會引入該子類的所有父類,如果整個繼承樹很大(實際情況往往是這樣的,如Microsoft Visual C++的MFC庫,Java中類庫等),會導致巨大的開銷,這也是面向對象在一些對性能要求很高的領域難以廣泛使用的原因之一。在構件關系模型中,我們通過使用聚集來實現構件之間的復用。
----(5) 特定于商業領域的軟件構架設計(DSSA)
----構架設計是從問題空間向軟件解空間過渡的第一個活動,以構件關系模型為基礎,在考慮系統實現環境(如操作系統、數據庫、通信機制、中間件等)和應遵循的標準等因素的情況下,形成針對特定系統或領域的軟件構架。
----構架是系統實現的藍圖,在后續開發活動中的作用包括以下兩個方面:1規定了構件接口和規約,有助于構件獲取(例如,定制或發現相關的構件); 2為系統集成提供框架,有助于符合規定接口的構件集成。
----在開發商業領域的軟件開發平臺時,考慮到運行平臺、構件數量、價格、市場以及商業系統傳統的運行環境等方面的因素,我們選擇了bbbbbbs DNA和COM+作為系統實現環境,支持具有三層體系結構的分布式應用,如圖5所示。
----(6) 構件獲取
----構架定義了構件的接口和相應的規約,為構件的獲取提供了依據。在基于構件的系統開發中,構件的獲取通常包括幾種不同的方式:
----①直接從構件庫中獲得符合要求的構件;
----②對構件庫中的構件進行適應性修改;
----③從市場上購買現成的商業構件,即COTS構件;
----④開發新的符合要求的構件。在進行以上決策時,必須考慮不同方式獲取構件的一次性成本和以后的維護成本。
----在圖5中,構件被分為基礎構件和業務構件,這里基礎構件包括:注冊表、字典、編碼、公式、單據、賬簿、報表、圖表等,支持進銷調存等業務過程中的數據加工、流動和工作流的靈活定制;業務構件包括:POS機、POS Server、信用卡接口、電子秤、盤點機、條碼簽、物價簽、會員卡等,這些特定于商業領域的應用需求,并建立在基礎構件之上;商業應用模板為不同的商業業態提供參考模型,包括功能、數據和業務流程;根據不同商業企業的具體需求,通過對商業應用模板進行實例化,定制出適合該企業的具體系統。各層次之間的關系如圖6所示。
新型的商業應用系統開發和組織模式
----在上述商業領域軟件開發平臺的支持下,商業應用系統的開發模式和開發機構的組織模式將會發生一定的變化,如圖7所示。橢圓表示開發機構的人員角色,矩形表示這類角色的人員所生產和維護的軟件制品。構件構架的生產、維護人員對應到類似構件中心的部門,負責整個開發機構所需的各種可復用的構件和構架;應用模板制作、維護人員對應到各個應用產品部門,如根據不同的領域劃分為商業應用產品部、財務應用產品部、金融應用產品部等;應用系統開發人員負責現場實施;運行維護由軟件開發機構和最終用戶共同承擔,由于提供了靈活的數據加工和業務流程定制的功能,因此當用戶的報表和業務流程發生變化之后,用戶自己就可以方便地進行定制,無需軟件開發機構跟蹤維護,不僅節省了軟件開發機構大量的人力、物力和財力,而且因為產品的靈活性加快了對用戶需求的響應速度,從而提高了產品的市場競爭力。
結束語
----青鳥工程以及青鳥軟件生產線的研究和實踐,其目的是為了促進軟件產業的合理分工,形成構件生產業、集成組裝業和服務業。隨著軟件技術的發展,軟件構件市場已初見端倪,標志著軟件工程化開發方法,以及軟件工業化生產技術正在逐漸走向成熟。
----這次示范工程是基于青鳥軟件生產線系統開發領域平臺的一次有益的嘗試,為企業提高軟件生產能力和市場競爭能力提供了技術儲備,同時在實踐中補充和完善了青鳥軟件生產線系統,為進一步的行業推廣取得了寶貴的經驗 。










