軟件觀點 - 軟件工廠方法
現(xiàn)在軟件產(chǎn)品都面臨著快速高質(zhì)量的要求,而我們也在一直追求著這個目標。項目管理軟件規(guī)模較大,定制能力要求強,規(guī)?;_發(fā)也是一個很重要的目標。 影響生產(chǎn)力的現(xiàn)有主要因素1. 業(yè)務(wù)領(lǐng)域設(shè)計研究不夠深入。 當 業(yè)務(wù)復(fù)雜而又缺乏良好的設(shè)計時,那它就會變得難以重構(gòu)和組合。越來越多的領(lǐng)域規(guī)則被嵌入到查詢代碼中,大部分數(shù)據(jù)訪問基礎(chǔ)結(jié)構(gòu)的技術(shù)復(fù)雜性,很快使得客戶 代碼陷入混亂。由于開發(fā)人員不能夠確切的知道整個系統(tǒng)的功能,重復(fù)問題就產(chǎn)生了。我們可以對那些類和方法進行分解使之便于重用,但這樣一來各個小部分分別 有什么作用又變得難以跟蹤。一個缺乏清晰設(shè)計的軟件,單是看到其中的混亂結(jié)構(gòu)就會讓開發(fā)人員頭腦發(fā)暈,更不用說對設(shè)計進行修改(那只會使設(shè)計更加混亂), 有時甚至會由于意料之外的依賴關(guān)系而導(dǎo)致設(shè)計完全無法工作。這種脆弱性導(dǎo)致我們無法構(gòu)造出行為更加豐富的系統(tǒng)(除非系統(tǒng)的規(guī)模相當小),也阻礙了重構(gòu)和迭 代精化的進行。 2. 基礎(chǔ)架構(gòu)通用設(shè)計問題。 比如權(quán)限、流程、報表基礎(chǔ)設(shè)施的支持,效率、應(yīng)用模式的支持。 3. 技術(shù)本身帶來的問題。 比如配置文件的管理,工具支持不夠,新技術(shù)帶來的學習曲線,底層技術(shù)的質(zhì)量。 其他主要因素產(chǎn)品的快速和質(zhì)量是由需求、開發(fā)、測試共同完成的,影響進度和質(zhì)量的不能只考慮技術(shù)本身,可能我們開發(fā)的方法就未成型,可以改善的地方可以更多。所以我認為對現(xiàn)狀的改善不能只關(guān)注軟件技術(shù),而需要對軟件工程領(lǐng)域多投入一些關(guān)注。 如何才能快速開發(fā)高質(zhì)量的產(chǎn)品?如何才能提高我們的生產(chǎn)力?下面描述一下我的一些觀點。 關(guān)注方向產(chǎn)品線工程領(lǐng)域驅(qū)動開發(fā)很 多原因都會造成軟件開發(fā)的復(fù)雜性,然而其核心則是由于問題領(lǐng)域本身的復(fù)雜性??刂茝?fù)雜問題的關(guān)鍵是建立一個好的領(lǐng)域模型,它越過問題域的表象介紹其底層的 結(jié)構(gòu),給軟件開發(fā)人員提供所需的方法。領(lǐng)域驅(qū)動設(shè)計的一個核心的原則是使用一種基于模型的語言。因為模型是軟件滿足領(lǐng)域的共同點,它很適合作為這種通用語 言的構(gòu)造基礎(chǔ)。 特定領(lǐng)域開發(fā)我們現(xiàn)在使用Delphi開 發(fā)時,是利用編譯器將代碼編譯成可執(zhí)行的程序,不需要去直接修改二進制而是修改代碼然后重新編譯。特定領(lǐng)域開發(fā)也類似與一般開發(fā),當發(fā)現(xiàn)軟件有問題時,我 們不是直接修改代碼,而是修改領(lǐng)域模型,然后利用工具將模型轉(zhuǎn)成代碼再進行編譯或者直接將模型轉(zhuǎn)為配置。使用特定領(lǐng)域開發(fā)將大幅提升我們的生產(chǎn)力。 特定領(lǐng)域開發(fā)強調(diào)更安全、更高層次的自動化。它在軟件業(yè)中已經(jīng)應(yīng)用比較廣泛,也存在多種相關(guān)的方法,例如產(chǎn)生式編程、軟件工廠、特定領(lǐng)域建模(DSM)、面向問題語言(LOP)、模型驅(qū)動架構(gòu)(MDA)、意圖編程等。以上各個方法之間存在一些類似之處,在我工作中借鑒了部分產(chǎn)生式編程、軟件工廠和DSM的思想,這幾個也是我一直覺得比較好,希望在產(chǎn)品中更加深入應(yīng)用的一些方法,下文我將介紹軟件工廠相關(guān)的一些方法。 軟件工廠軟件工廠由四個基礎(chǔ)構(gòu)建塊組成,分別是產(chǎn)品線工程,架構(gòu)框架,模型驅(qū)動開發(fā)和構(gòu)建指南。 產(chǎn)品線工程1 軟 件產(chǎn)品線是指具有一組可管理的共同特性的軟件密集性系統(tǒng)的集合,這些系統(tǒng)滿足特定的市場需求或任務(wù)需求,并且按預(yù)定義的方式從一個公共的核心資產(chǎn)開發(fā)得 到。構(gòu)建一個產(chǎn)品主要工作是組裝或生成,而不是重新開發(fā),主要活動是集成而不是編程。每條軟件產(chǎn)品線都有一個預(yù)先定義的指南和計劃,用來定義確切地產(chǎn)品構(gòu) 建方法。 2 在軟件產(chǎn)品線方法中,重用是有計劃的、能夠?qū)崿F(xiàn)的和強制的。資產(chǎn)庫包括從一開始就花費大量成本進行開發(fā)的各類產(chǎn)品-即需求、領(lǐng)域模型、軟件構(gòu)架、性能模型、測試用例和組件。所有資產(chǎn)都是為重用而設(shè)計,并且為了能重用與多個系統(tǒng)進行了優(yōu)化。 3 產(chǎn)品線中每個產(chǎn)品都是核心資產(chǎn)的一個簡單定制,核心資產(chǎn)必須認真設(shè)計并不斷重構(gòu)。 4 產(chǎn)品線核心關(guān)注范圍、通用性、可變性和擴展點 軟件產(chǎn)品線活動概述一個產(chǎn)品線是基于商業(yè)策略,滿足給定市場的一組系統(tǒng)。產(chǎn)品線開發(fā)區(qū)別兩種活動:為重用而開發(fā)(for reuse)和使用重用來開發(fā)(with reuse)。傳統(tǒng)重用方法主要是基于代碼的重用,而軟件產(chǎn)品線的重用包括在產(chǎn)品開發(fā)生命周期各階段的資產(chǎn)。如上圖所示,軟件產(chǎn)品線工程由領(lǐng)域工程和應(yīng)用工程組成。 領(lǐng)域工程1. 縱向領(lǐng)域(vertical domain):根據(jù)系統(tǒng)類別而組織的領(lǐng)域。如預(yù)算軟件、材料管理、合同管理、企業(yè)報表系統(tǒng)等。 2. 橫向領(lǐng)域(horizontal domain):根據(jù)軟件部件的類別而組織的領(lǐng)域。比如數(shù)據(jù)關(guān)系計算引擎、報表引擎、工作流系統(tǒng)等。 3. 領(lǐng)域之間有3中類型的關(guān)系: a) 包含:比如成本管理軟件包含了材料管理系統(tǒng) b) 使用:比如公司大部分軟件都使用了報表引擎 c) 類似:領(lǐng)域之間側(cè)重點不同,但有很多的相似性,通過深入研究一個領(lǐng)域,可以取得對另一個領(lǐng)域的更好理解。比如報表引擎中對于表達式解析和索引部分可能與數(shù)據(jù)關(guān)系計算引擎類似。 應(yīng)用工程應(yīng)用工程是基于領(lǐng)域工程的結(jié)果構(gòu)建系統(tǒng)的過程。對一個新的具體應(yīng)用做需求分析的時候是利用已有的領(lǐng)域模型,通過領(lǐng)域分析提供的各種通用功能、支持的變量配置、 提供的擴展等來描述客戶需要。如果新的需求在領(lǐng)域模型中不存在,則可以定制,或者反饋到領(lǐng)域工程來擴充領(lǐng)域的支持范圍。 軟件產(chǎn)品線工程框架上圖是軟件產(chǎn)品線工程框架圖??蚣芊譃閮蓚€階段:領(lǐng)域工程和應(yīng)用工程。領(lǐng)域工程產(chǎn)出平臺的公共核心資產(chǎn),應(yīng)用工程產(chǎn)出產(chǎn)品。在整個開發(fā)生命周期中,存在9個 子流程,八個流程互相匹配成四組類似流程,需求、設(shè)計、實現(xiàn)和測試在領(lǐng)域工程和應(yīng)用工程都存在,每一匹配組的流程都緊密相連。領(lǐng)域工程的子流程目的在于滿 足通用需求,而在應(yīng)用工程是為了生產(chǎn)可供使用的產(chǎn)品。應(yīng)用工程的子流程需要提供反饋給領(lǐng)域工程,這種循環(huán)反饋才能確保平臺一直都能有效的生產(chǎn)出最終產(chǎn)品。 基于BAPO的系統(tǒng)族評估框架(FEF)BAPO模型覆蓋了軟件工程的主要關(guān)注點。這四個關(guān)注點(商業(yè)、架構(gòu)、流程和組織)成為了FEF的四個評估維度。每個維度有五個級別,并且有三到四個方面。 領(lǐng)域工程開發(fā)活動大綱產(chǎn)生式編程方法中對領(lǐng)域工程開發(fā)的各個活動進行介紹。 1. 領(lǐng)域分析 a) 領(lǐng)域定義 i. 目標和風險承擔者分析。此活動的工作量依賴于項目的大小和上下文。 ii. 領(lǐng)域范圍界定和上下文分析 1. 應(yīng)用領(lǐng)域和現(xiàn)有系統(tǒng)的分析 2. 領(lǐng)域特征的確定 3. 與其他領(lǐng)域關(guān)系的確定 b) 領(lǐng)域建模 i. 關(guān)鍵概念的確定 ii. 關(guān)鍵概念的特征建模(共同點、可變性、特征依賴和特征交互) 2. 領(lǐng)域設(shè)計 a) 整個實現(xiàn)架構(gòu)的確認和規(guī)范 b) 領(lǐng)域特定語言的確認和規(guī)范 c) 配置知識的規(guī)范 3. 領(lǐng)域?qū)崿F(xiàn)(DSL、產(chǎn)生器和實現(xiàn)組件的實現(xiàn)) 4. 領(lǐng)域測試 模型驅(qū)動開發(fā)MDD建立在更高級別的抽象基礎(chǔ)上,不同于傳統(tǒng)使用類、方法、屬性抽象軟件,而是使用業(yè)務(wù)領(lǐng)域概念(比如工作流模型、實體關(guān)系模型、報表模型、界面描述模型等)來描述模型。代碼生產(chǎn)和領(lǐng)域特定語言是模型驅(qū)動開發(fā)的一些重要概念。 DSM的三個核心元素有經(jīng)驗的開發(fā)員人都希望能達到一下目標: 1. 不重復(fù)自己:不反復(fù)做同類設(shè)計,拷貝粘貼代碼,大量重復(fù)勞動 2. 三次重復(fù)后就該考慮自動化 3. 定制方案比通用方案更好 DSM是領(lǐng)域特定建模,可以很好的解決以上三個問題。定義模型語言,代碼生成和框架代碼是DSM的三個主要元素。在工作中在UI方面采用元數(shù)據(jù)驅(qū)動的方法,很好的解決了以往UI帶來的重復(fù)工作以及很好的提高了這方面的軟件質(zhì)量。通過定義UI的元數(shù)據(jù)模型,項目運行框架通過生成的元數(shù)據(jù)信息來自動生成界面并綁定數(shù)據(jù)和操作事件。 代碼和模型代碼和模型一般存在以下幾種模式,DSM屬于最后一種。 DSM開發(fā)角色在以前的基于組件開發(fā)技術(shù)中,有人開發(fā)組件,有人使用組件。在產(chǎn)品線開發(fā)中,一部分人開發(fā)所有項目通用的平臺,一部分人使用這些資產(chǎn)進行開發(fā)。DSM開發(fā)組織機構(gòu)與這些方法類似,也區(qū)分兩種不同的角色:開發(fā)DSM解決方案的角色和使用DSM進行開發(fā)的角色。 1. 領(lǐng)域?qū)<遥河?/span>DSM應(yīng)用的問題領(lǐng)域的豐富知識。他們知道術(shù)語、概念和領(lǐng)域規(guī)則。當開發(fā)業(yè)務(wù)系統(tǒng)時,專家懂得業(yè)務(wù)知識。如果是技術(shù)領(lǐng)域,則架構(gòu)師和開發(fā)經(jīng)理就是領(lǐng)域?qū)<摇?/span> 2. DSM用戶:使用模型語言進行開發(fā)。這個角色的人員最多。模型在高級別層次上進行抽象,很大程度上支持測試、產(chǎn)品管理、QA、實施、銷售和客戶等多種人員進行溝通。測試人員可以使用模型建立測試用例,部署人員可以生產(chǎn)安裝程序,管理人員可以獲取度量信息等 3. 基于特定模型語言的語言開發(fā)人員:設(shè)計元模型,并提供使用指導(dǎo)和模型示例。語言開發(fā)人員與領(lǐng)域?qū)<液完P(guān)鍵DSM用戶關(guān)系密切。 4. 生成器開發(fā)人員:從模型轉(zhuǎn)換成代碼。通常生成器開發(fā)人員也是定義領(lǐng)域框架的人員。 5. 領(lǐng)域框架開發(fā)人員:通常是有應(yīng)用架構(gòu)的經(jīng)驗開發(fā)人員。他們提供在目標環(huán)境下的參考實現(xiàn),并且已經(jīng)開發(fā)過組件框架、類庫等。 6. 工具開發(fā)人員:實現(xiàn)模型語言和代碼生成器的工具支持。 架構(gòu)框架1. 架構(gòu)框架不同于一般產(chǎn)品的開發(fā)框架。架構(gòu)框架的需求來源是產(chǎn)品線所有產(chǎn)品的共性,架構(gòu)需要實現(xiàn)所有共性,靈活實現(xiàn)變化點,并支持獨立產(chǎn)品的擴展點。 2. 架構(gòu)不是瀑布式的,不是一層不變,而應(yīng)該隨著開發(fā)迭代周期不斷的重構(gòu)演化。 構(gòu)建指南對產(chǎn)品線產(chǎn)品實現(xiàn)的最佳實踐,指導(dǎo)開發(fā)人員什么時候該做什么以及怎么做,可以降低學習曲線,并減少錯誤。 模型驅(qū)動開發(fā)應(yīng)用目標通過幾個轉(zhuǎn)變來改變長期的工作方式: 1. 面向通用語言 –> 模型驅(qū)動開發(fā)。使用特定模型,提高產(chǎn)品生產(chǎn)力和質(zhì)量。 2. 基于數(shù)據(jù)庫開發(fā) –> 領(lǐng)域驅(qū)動開發(fā)。減少業(yè)務(wù)領(lǐng)域設(shè)計研究不夠深入帶來的問題 3.
開發(fā)人員驅(qū)動 –> 業(yè)務(wù)人員驅(qū)動
|
|