摘要:基于中、小型規模的軟件開發特點,通過融合多種軟件過程開發實踐,保證快速、合理、低代價和清晰的軟件開發過程控制基礎上,作者基于工程實踐的總結和歸納,提出一種基于組件構建軟件系統的CMM和RUP的有序過程控制的最佳實踐方法,該方法具有清晰過程控制、可被重復檢驗和理解,允許在軟件過程中進行適應性的自我調整和完善。通過實際案例的統計和規律性分析,證明該種軟件開發過程的最佳實踐方法在實際的工程項目管理中具有較強的工程指導意義和現實參考價值。
關鍵詞:軟件工程;軟件項目管理;組件;最佳實踐
Abstract: This article is based, small-scale features of the software development, integration of multiple software process development practices, to ensure fast, reasonable, low cost and clear control of the software development process. The author proposes a component-based software systems built an orderly CMM and RUP best practices of process control and this method has a clear process control, inspection and understanding can be repeated, allowing the software during the process of adaptive self-tuning and improved. Through actual cases and regularity of the statistical analysis show that thiskind of software development best practices process in the actual project has a strong and practical reference guide.
Keywords: software engineering; software project management; components; best practices
一、引言
以計算機信息系統為核心的IT技術已成為最活躍、最有發展潛力的支柱產業,絕大多數的社會業務領域都形成了非常成熟的高水平的行業應用軟件。這些行業應用軟件的開發是一項極其復雜艱巨的任務,它包含技術與管理的多重素,必須使用工程化的思想與方法,結合軟件開發技術因素,對軟件開發過程進行有效的組織與管理,以提高軟件開發效率,并保證軟件開發質量。即便我們認識到軟件開發中存在的問題,軟件開發項目也并非總能成功。由于軟件開發過程的缺陷、項目管理的問題和缺乏對企業內部軟件開發過程的最佳實踐總結與應用,項目失敗的預期遠遠超出行業內人士的想象。根據美國Standish Group對2003年美國1.35萬個軟件項目的統計,有問題的和失敗的軟件項目占66%,中國甚至達到了90%以上的項目不完全符合實際的業務需求[1],軟件項目的失敗比率至今沒有太大變化。即低下的軟件生產能力與強烈的業務發展需求間的矛盾造成的。這里所謂的成功是指在預期的時間和預算內,開發預期功能與質量的軟件產品。這就要求從事軟件生產的組織、相關人員迫切需要選擇良好的軟件生產能力的改造;對于軟件開發者來說,保持持久的競爭優勢關鍵因素在于通過適合領域問題的完善軟件過程項目管理實現。
軟件工程界已經認識到美國卡內基·梅隆大學軟件工程研究所(Software Engineering Institute,SEI)所提出的軟件過程能力成熟度模型(Capability Maturity Model,CMM)在改進并完善軟件過程、提高軟件質量(產品規格)和軟件開發效率(進度)、降低成本(代價)等方面的重要指導意義。
軟件項目的目標有兩個,即取得當前項目的成功并進行積累,為后續的項目做提供經驗積累和準備。為避免在軟件開發過程中出現開發周期長、組織過程混亂、軟件質量決定于軟件開發者、緩慢的開發與適應性開發與擴展的效率、維護低價不可預期和軟件適應性差等軟件缺陷,在軟件開發企業中通過改進并提高軟件過程和項目管理水平,提高軟件生產力能力與水平,應用良好的軟件過程組織的最佳實踐成為必然選擇。
二、軟件項目管理相關知識
軟件項目管理是為了使軟件項目能夠按照預定的成本、進度、質量順利完成,而對人員(People)、產品(Product)、過程(Process)和項目(Project)進行分析和管理的活動。
軟件項目管理的根本目的是為了讓軟件項目尤其是大型項目的整個軟件生命周期(從分析、設計、編碼到測試、維護全過程)都能在管理者的控制之下,以預定成本按期,按質的完成軟件交付用戶使用。而研究軟件項目管理為了從已有的成功或失敗的案例中總結出能夠指導今后開發的通用原則,方法,同時避免前人的失誤。軟件生命周期包括軟件定義、開發和運行三個階段,軟件開發過程的生命周期一般經過可行性研究、需要分析、總體設計、詳細設計、編譯、系統測試和系統實施與維護等過程活動[2]。在軟件開發過程中,經常遇到溝通協作問題、需求模糊與較高頻度的調整、開發過程組織管理差、不合理的設計、領域知識構件與適應性組件不完善和難于進行系統的集成等實際的問題,進而導致難于進行需求功能擴展和設計的適應性迭代和實現的效率低下、項目進度慢和里程碑不可控制和軟件質量差和維護成本代價高等現實的軟件項目管理問題。
上述出現的軟件過程缺陷也是軟件項目管理知識體系(PMBOK)中9個知識領域及關鍵軟件過程路徑(CPM)中所關切的,即通過提高軟件過程管理中的技術、方法、團隊組織建設、信息和溝通的有機結合,實現軟件開發的最佳實踐(Best Practices)能力。SEI的CMM過程模型通過7組13個質量指標指導軟件過程的開發[3];CMMI(Capability Maturity Model Integration)是針對產品開發和服務的一個過程改進成熟度模型。這是一個涵蓋現在所有的以及將被發展出來的各種能力成熟度模型的框架,共有兩個功能,第一,軟件獲取方法的改革;第二,建立一種從集成產口與過程發展的角度出發、包含健全的系統開發原則的過程改進。它包含了25個最佳實踐過程域,關注開發和維護活動,覆蓋從概念到交付和維護的完整產品生命周期。在個體軟件過程(Personal Software Process,PSP)和美國NASA軟件工程實驗室(SEL)同樣強調通過統一的軟件開發過程,進而實現提高軟件質量的目標的原則。實用軟件度量(PSM)的7種質量組、22個分組和64個度量指標的關鍵實踐中強調在軟件過程中通過合理的裁剪、應用和實施建立對軟件全過程的有效管理實踐。
為解決軟件開發過程出現的問題,多種軟件實踐中熱點的一個研究就是軟件產業正迅速向基于組件化的開發模式演進。即在正確理解軟件開發過程,在領域知識指導下改進軟件開發成功率,在軟件統一過程(RUP)、基于組件構建軟件系統,實現軟件工作目標,保證并通過軟件的最佳實踐來降低軟件危機風險是本文需要研究解決的問題。
三、基于組件構建系統的最佳實踐內容
最佳實踐在軟件開發中最突出的貢獻就是軟件工程理論的建立,將軟件開發進化為全程可控、可測量的工程式開發。最佳實踐是一種理念,它表現為有一種技術、方法、過程、活動、鼓勵或報酬與任何其他技術、方法、過程等比較而言可以更有效地提供一個特定的 預期結果。
遵守統一過程(RUP)提出了六項最佳實踐即迭代的開發軟件、需求管理、使用基于構件的體系結構、可視化軟件建模、驗證軟件質量和控制軟件變更。軟件開發過程以體系結構為核心、按照高級抽象宏觀指導下,通過領域建模、主題業務分解、功能任務確定和過程實現的層次建模方法完善最佳實踐的過程;基于體系結構為核心的、適應性和動態擴展方便的組件集成的方式,增量、迭代式軟件開發組織過程;迫切需要通過設計流程、技術、方法和人員等各個有機結合才能實現健壯的需求管理、項目計劃、項目跟蹤、質量保證和業務擴展應用,通過組件集成降低軟件工程總體的代價;因此軟件開發過程的最佳實踐也應是為完成某項任務時最高效(最少的努力)和有效(最佳的效果)的方式,并且是基于一段時間內被大量人員檢驗的可重復過程[4][5][6]。在最佳實踐完善與實踐中,以提高軟件生產能力為根本目標的軟件工程管理。
本文提出普遍適應意義的最佳實踐過程基于軟件過程控制中,關注軟件目標、軟件邊界及范圍、軟件成本和過程控制等相關的內容,具體的實踐過程步驟如下:
1)建立并設計適應企業技術能力的軟件開發規劃及標準
在項目啟動、項目計劃、軟件過程和跟蹤監控等軟件項目管理核心過程控制中,首先要基于企業所在行業、領域特點和技術積累經驗建立恰當的過程模型與相應過程標準。例如在設計中考慮某系統的業務管理角色、授權信息在系統運行期間是相對靜態不變的即“數據動態、業務靜態”的啟發規則,設計約束和實現的組件服務標準設定為“一次數據獲取,二次數據組裝,三次業務靜態應用”,進而保證了設計思想與編碼過程中的統一模式,成為該軟件最佳實踐的一個重要因素。
2)基于軟件過程的人員授權
在實踐中,應該基于軟件過程的3P(人員、問題和過程),將三者基于主題業務特征、人員能力和角色職責、軟件過程任務,量化授權資源、責任和里程碑責任人。例如在某軟件過程責任授權中,為實現軟件過程的階段和任務,按照最佳實踐的方式進行組織與評審。
3)定義需求規格獲取的工程方法、建設管理配置變更等制度
按照操作、控制簡便和實用,指導性強的原則,基于企業的組織特點和技術生產水平,以快速原型系統為典型特征,適應軟件變化特征和便于階段評審的軟件過程的制品配置管理。
4)使用以領域分析建模為基礎的抽象設計方法
設計過程遵循自頂向下、由粗到細、逐步細化,抽象為指導設計的原則,按照分治和啟發式規則完善體系結構設計和組件化應用系統設計。比如我們進行信息化系統的建模過程中,可以按照業務流程分析和指導下,確認界面原型,根據業務的操作與規格約束,確定界面的統一性和布局、界面要素的層次性,基于實際業務流程的信息模型特征進行軟件系統基礎設施的設計與組件配置和開發,這樣實現了軟件系統的設計統一性和開發編碼的自動化規格,降低各個階段的開發代價與維護成本。
5)實施嚴格的階段項目評估
確定軟件過程管理所需要的活動和開發過程和管理及控制過程所需要的技術和管理。對軟件過程進行量化控制,根據生命周期的不同階段,構建對應不同的評估階段,從解決問題轉變為預防可能出現的問題。
6)采用組件化、標準接口的協議規范
主要包括組件定義的粒度,編碼規則,集成化的開發與構建系統模式指導等。系統功能模塊是系統提供的各類服務的編排和合成。在設計完系統的功能模塊后,在這個基礎上把各個功能模塊的服務提取出來,一個功能模塊可能由一個服務組成,也可能由多個服務組成。服務的基礎是組件,一些重要的組件能夠單獨封裝成服務。基礎服務其實就是一個業務組件,它是基于商務對象的原子操作。它是封裝好的組件,它只關心定義好的組件接口,和需要傳遞的對象。業務組件包含兩個重要的含義,一個是“操作”,一個是“操作的對象”。
7)實現可跟蹤性、變更控制與配置管理
需求變更是軟件開發中的最大難題,很少有一個項目能從頭至尾保持同樣的需求。因此,可跟蹤性是所有軟件開發流程的基礎部分,它可以及時發現流程中的問題,并及時修復。跟蹤從需求定義開始,經過執行、構建、組裝直到交付工作。它有助于在開發流程中協調分配、規劃開發和監控狀態。從而確保正確管理和跟蹤需求變更,保證軟件代碼的變更與需求變更同步。配置管理是整個軟件過程中的保護性活動,除了文檔、程序及數據以外,軟件開發環境也在配置管理中。
8)功能設計適應主題業務特征與行業規律
在滿足業務功能需求的前提下,又要適應各業務角色的工作特點,做到簡單、實用,并且符合行業一般規律。
9)采用項目目標可控的標程化過程管理
掌握軟件項目目標,保證一切開發活動按預定計劃進行。在識別、預測、評估、監控和風險管理投入精力將保證項目過程平穩,跟蹤和控制項目能力加強。
通過上述統一的軟件開發過程模式,使企業能夠適應不同的項目實踐要求和良好的系統解決方案,同時,又能夠具有適當的過程控制靈活性和風險控制。
四、最佳實踐工程案例
按照本文所提出軟件開發過程的最佳實踐步驟得到實踐檢驗的軟件系統的特點總結如下:


通過以上不同特點、規模不同的軟件項目情況統計可得出,本文所提出的采用軟件開發的最佳實踐方法進行組織,從軟件錯誤或缺陷數量、產生的階段過程、維護代價等方面來看,提高了軟件開發效率,降低軟件開發成本,軟件過程可控,結果預期和維護代價均得到滿足,項目預期成功幾率大大提高,提高了軟件開發生產力。
五、結論
本文所提倡的最佳實踐方法因為選擇的案例和實踐均為中、小型規模項目,因此在最佳實踐的開發過程中,軟件風險、決策選擇和軟件目標的建模方法等沒有過多強調。如何結合中、小型規模軟件項目開發中,重點解決的是保證快速、高效、高質量和低代價的目標下,更突出階段風險評估、過程評審和決策過程的控制是研究和解決的重點內容。
參考文獻
[1]Zhang Wei,Zhou Chang-le, “Muti-Agent Concurrent Model in Software Project Management,” Application Research of Computers, vol. 2004, pp. 17-19. (references)
[2]Kurt C.Wallnau,Scott A.Hissons,Robert C.Sealord,Building Systems Commercial Components,Addison-Wesley,2001
[3]韓萬江,姜立新,軟件項目管理案例教程,China Machine Press,2005
[4]Garmus,D,and David,H.The Software Measuring Process:A Practical Guide to Functional Measurements.NJ:Yourdon Press,1996
[5]G.A.Hazelrigy,”A Framework for Decision-Based Engineering,Design,”,Journal of Mechanical Design,1999
[6]Felix Bachman,Len Bass,C.Buhman,F.Long,Technial Concepts of Componet-Based Software Engineering,Technical Report CMU/SEI-2000-TR-008,Software Engineering Institute,Carregie Mellon University,Pittisburgh:http://www.sei.cmu.edu/publications/documents/00.reports/00r008/00tr008title.html
[7]I.Thomas,B.Nejmeh,Definitions of Tool Integration for Environments,IEEE Software 9.NO.3,March 1992 :29-35
[8]PMI.A Guide to the Project Management Body of Knowledge,2000
[9]James Rumbaugh,Ivar Jacobson,Grady Booch,The Unified Modeling Language User Guide,Addison-Wesley,2001
[10]Klaus Bergner,Andreas Rausch,Marc Sihling,Using UML for Modeling a Distributed Java Application,1997
[11]Frank J.Sisti,Sujoe Joseph, Software Risk Evaluation Method Version 1.0,CMU/SEI-94-TR-19,December,1994