(中國聯通海南省分公司,海南 ???572500)
過程模型建立了工程中各種活動的順序,從這方面看,它體現了一個工程項目中整個生命周期。當前各種工程項目中都有各自的過程。MSF過程模型起始于微軟開發軟件應用程序的過程。它經過演化,與一些其他流行的過程模型中最為有效的原理相結合,形成一個模型。MSF過程模型可以跨越所有的工程類型,例如,基于階段類型的、里程碑驅動的、基于迭代模型等類型的工程。主流的軟件開發過程模型有瀑布模型、螺旋模型、噴泉模型、RUP模型等。
瀑布模型:使用里程碑作為整個過程管理中的轉換或評估點。在瀑布模型中,每一個任務在下一個任務開始前,必須完成。也就是說必須將當前階段的任務完成后,才可以進行下一階段的任務。瀑布模型的優點是有利于大型軟件開發過程中人員的組織、管理,有利于軟件開發方法和工具的研究,從而提高了大型軟件項目開發的質量和效率;缺點是開發過程不能逆轉,導致客戶需求變更時難以響應,并且客戶只能在項目后期才能看到軟件的實際情況。
螺旋模型:螺旋模型的焦點集中在需要對項目需求進行持續不斷的精練和對項目連續不斷的評估上。螺旋模型是一種非常簡單的過程模型,它沒有所謂的里程碑,它就是對軟件按周期不斷地重復構建。螺旋模型的優點:第一,設計上的靈活性,可以在項目的各個階段進行變更;第二,以小的分段來構建大型系統,使成本計算變得簡單容易;第三,客戶始終參與每個階段的開發,保證了項目不偏離正確方向以及項目的可控性;第四,隨著項目推進,客戶始終掌握項目的最新信息,從而能夠和管理層有效地交互。螺旋模型的缺點是需要相當豐富的風險評估經驗,若不能及時識別風險,將造成重大損失;并且過多的迭代次數會增加開發成本,延長交付時間。
MSF過程模型將上述瀑布模型和螺旋模型的最優秀的原理結合起來組成一體。瀑布模型中由于有基于里程碑的計劃,因此,它有可以預測項目的未來優點;而螺旋模型則有快速反饋和有創造力的優點。MSF過程模型繼承了它們的優點。
MSF模型是一種基于階段和里程碑的方法。MSF中用里程碑來計劃和監控項目的進程。MSF中的里程碑分為“主里程碑”和“中間里程碑”。主里程碑是項目階段的轉換點。MSF中主里程碑有“項目范圍認可”“項目計劃認可”“范圍完成”“發布就緒認可”“部署成功”。中間里程碑是指兩個主里程碑之間的小的工作目標指示物或工作成果。
“迭代開發”是MSF中一個重復發生的主題。代碼、文檔、設計、計劃和其他的工作成果都是以迭代的形式出現的。MSF建議一個解決方案可以先構建、測試、開發出一個核心的功能。然后,其他的功能特征可以被加入,這就是通常所說的發布策略。對于一些小的工程來說,它通常只需一個版本。功能復雜時把它們分成多個版本,從而可以找到改進的機會。版本發布沒有必要按順序進行,成熟的軟件產品經常會有多個版本重疊的發布周期。版本發布之間的間隔時間,根據項目的規模、類型、用戶要求和策略的不同而不同。一個解決方案在沒有完全被部署到生產環境中之前,是沒有辦法提供價值的。由于這個原因,MSF認為只有在開發完成后成功部署并交付價值以后,才開始下一個迭代過程。
MSF模型分為:需求分析、設計、軟件開發、測試驗證、部署實施五個階段。
需求分析:接到需求后,首先需要進行業務評估。如果確定承接該項目,則要詳細了解用戶需求和業務流程。整理客戶需求后,可以制作產品原型和業務流程圖,給客戶進行確認,這是一個反復修改和確認過程。通過溝通,確定最終的原型和需求。軟件開發團隊根據資源,制定開發計劃、產品路線圖表。
設計:確定需求和原型后,可以進行產品的功能邏輯設計,包括詳細和概要設計。設計師要參與原型評審,了解必要業務需求。
軟件開發:按照既定的技術路線和開發計劃進行軟件開發。在開發過程中需要重視代碼評審和版本管理。開發團隊需在對應的時間節點完成任務,保證項目的進度。
測試驗證:測試人員在初期參與需求分析、需求評審,確定測試哪些模塊、使用哪些測試用例、輸出哪些測試文檔。發現BUG后,要返回開發人員進行修改。測試通過后出具測試報告用于業務部門進行功能驗收。
部署實施:當前迭代周期的版本開發完成后,應與客戶進行溝通,對當前版本進行功能驗收,驗收通過后更新版本進行發布部署運行。部署階段是促進解決方案從項目團隊到運營團隊的順利過渡的過程??蛻羧杂泄δ苌壭枨髸r,可以進入下一次迭代周期。
從上面的總結中可以看到,MSF中的里程碑式過程管理方面還是很值得學習的。它通過一步一步地達到預先設定的目標,從而使整個軟件過程變得可控。同時,也會及時發現項目中潛在的危險因素,便于風險的管理。它把軟件過程分為幾個階段以后,可以針對某一階段中存在的問題進行定位、分析和解決,為提高軟件開發的成功率提供了有效保障。
同時,也可以看到該過程管理模型中對過程劃分得比較細??梢愿鶕椖康囊幠:皖愋蛯@個過程管理模型進行優化,使之更加適合于公司實際的項目開發。
戰略是實現企業目標的過程。因此,作為公司中的IT部門發展規劃一定要服從于集團的整體戰略與中長期規劃。
軟件研發部門應以信息化和數字化推動管理創新,軟件研發部門的建設,需要對集團公司的管理模式、業務流程進行根本性的思考,結合業務流程重組、項目管理技術以及“云+網+大數據”等技術,對集團公司的整個業務體系進行系統優化與改進的支撐作用,以信息化和數字化為契機推動管理創新,全面提升公司的管理水平和業務水平,增強公司在國內的領先地位。立足實際,持續打造IT核心能力,IT是一種工具,信息化和數字化的根本目的是為了改善管理,推動高質量發展,進而滿足集團公司的發展戰略的需要。因此,軟件研發部門建設需要從自身業務及管理需求出發,認真選擇切合公司實際的產品方向和技術架構,持續打造IT核心能力。
整體規劃、分步實施、循序漸進,軟件研發部門建設需要從集團公司的整體發展戰略及業務需求出發,明確方向與目標、現狀與差距,并結合當前信息技術的發展趨勢,勾畫公司數字化轉型的IT系統應用藍圖,制定合理的實施策略,對整個建設工作進行統籌規劃。在統籌規劃的基礎上,根據實際情況分步實施、穩步推進。通過軟件研發部門建設規劃,可統一公司對信息化和數字化的認識,明確方向與目標,避免盲目和重復的無效投資,有效降低IT建設的風險,提高IT投資回報。
需求管理是一種對系統需求進行啟發、組織、文檔化的系統的方法;是在客戶和項目組之間對變更的系統需求建立和維護一致意見的過程。在CMMI的定義里面,需求管理的目的是在客戶和項目組之間建立關于軟件項目要實現的客戶需求的共識??刂栖浖枨?,為軟件工程和管理工作建立基線。軟件計劃、產品和各項活動應當與軟件需求保持一致。軟件需求規格說明文檔是軟件生產中最重要的技術文檔,它不僅是進行軟件設計的依據,而且是整個軟件生產工作的基礎。如果需求管理不善,會增加軟件開發的迭代次數,從而導致成本失控。因此,需要開發設計人員盡早介入與客戶的需求溝通,明確需求,精簡需求模型,從而減少開發成本,縮短開發周期,提升用戶的滿意度。
海南省的整體信息化水平不高但發展迅速,疊加自由貿易港政策影響由此帶來了大量的軟件開發需求。但許多客戶在初始階段的軟件需求往往不夠明確,需要不斷升級優化、疊加功能。但對于開發團隊而言,假如不停地往其中堆功能,產品就會很臃腫,失去拓展性、易維護性,最后難以運營,甚至是丟失客戶。因此,技術上建議采用微服務架構。微服務架構具備易拓展性、易維護性、易復用性,在業務上具有高度的差異化可配置性;在運行上具有容錯性,能夠在某一功能發生問題時不影響整體運行。設計時通過將每個業務流程,都做成顆粒度很小的服務,提供可配置的選項,這樣便可以通過需求配置出適合的產品形態。目前的中國聯通統一軟件平臺底座,已經完全支持微服務架構的研發、測試、部署、運維的全生命周期管理。因此,目前筆者所在的研發團隊采取了當前最先進也最科學的微服務架構及前后端分離技術進行軟件開發:后端采取基于java的j2ee/springboot軟件架構,前端采用VUE等基于javascript的一體化門戶技術。采用云原生的DevOps開發模式,快速開發,快速測試,快速部署,快速交付。運營與運維人員直接參與項目團隊,可有效促進部門之間的溝通、協作與整合,并提高產品化的成熟度,提升產品研發質量。同時,研發過程要遵循微服務設計,將各類應用進行有效拆分,提前設好配置選項,預留擴展接口,以支撐在產品遇到的各類情況。
依托海南聯通整合本地及全國資源的能力,集成各行各業的龍頭應用廠商、軟件外包團隊,共同打造及完善產品,以最大程度地滿足客戶需求。公司應根據自身的業務特點,現有重點客戶的需求,集中力量打造在某幾個領域內的優勢產品。在項目的需求分析、開發計劃設計階段,做好任務分解,將本團隊不擅長或非核心優勢的工作劃分出去,以縮短開發周期,節省成本。同時,加強質量管理,經過嚴格測試評審后將外部團隊的開發成果整合到項目中進行交付,以保證產品功能特性在本團隊的掌控之中。
基于分級分類客戶的需求不同,通過不同的差異化產品版本,推進產品的規模推廣。持續服務,項目迭代方面,針對項目個性化需求多,通過研發與交付隊伍分離,不斷進行快速開發持續交付。產品迭代方面,當項目共性需求達一定閾值觸發產品迭代,發布新功能到整個產品線,逐步完善產品能力。通過市場洞察、產品研發、制定營銷策略、持續服務運營等各環節,體系化地推動產品運營、打通產品運營全流程各環節責任邊界。產品交付后,發揮本地團隊在持續服務運營當中的優勢,獲取客戶對已交付產品的反饋信息,及時轉化,從中不斷發掘出新的商機。
產品運營體系構建如圖1所示:

圖1 產品運營體系架構圖
在DevOps的流程下,在項目開發期間就需要整合銷售隊伍、集成隊伍和研發隊伍。通過團隊整合,打破部門間壁壘,實現能力流通,形成研發交付一體化。項目實施方面,通過虛擬化BU項目制的方式,將銷售、解決方案、運維與運營等交付實施團隊并入研發隊伍,前置參與研發,發揮運營商屬地化交付的天然優勢,增強項目交維能力。同時,設置產品運營中心,以產品為核心,通過精準運營策略引導市場銷售,以市場前端持續運營牽引后端研發。
根據上述的軟件工程基本原理及研發實踐,筆者團隊形成了一套行之有效的組織架構,并且基于該架構成功地開發了海南省的多個大型軟件項目。
研發經理(技術總監),對系統方向和團隊中一些決策性的事進行管理,包括日常事務,雖然他不需要編碼,但能擔任技術總監,他經歷了設計開發,產品的實施,并對系統的戰略性發展都有相當的見解,對整個系統的所有流程都面面俱到,不單單局限于技術層面,因為他需要主導整個團隊運作??梢愿蛻艚涣餍枨蟆⒏鶕枨蠓峙扇蝿?。
Leader,管理項目組成員、技術難點分析,編寫詳細設計文檔,技能特色很突出,有創新能力,不是什么都是從網上拿下來一改就用的,其他方面都可以講出一二,對行業內的動態都很關注,有一定的交際能力??梢愿蛻艚涣餍枨蟆?/p>
項目經理,項目經理負責分配資源,確定優先級,協調與客戶和用戶之間的交往??偠灾?,就是盡量使項目團隊一直集中于正確的目標。項目經理還要建立一套工作方法,以確保項目工件的完整性和質量。懂開發,知識面廣,針對項目,對系統進度的控制,風險評估進有把控,根據反饋的客戶需求,分派具體工作內容,項目中日常事務調配,人員配置,具有一定的溝通能力??梢愿蛻艚涣餍枨蟆T谖覀兊脑O置中,基本保證項目經理和研發經理崗位基本類似,并且資歷和年齡相仿,并且有過合作經驗的為佳。
項目助理,對會議、文檔、日常事務的跟蹤進行管理,這不只是助理一職,這個職務在整個項目中,啟著至關重要的位置,他貫穿于團隊中、每個職務之中,其他職務是針,他就是一根線,他可以對項目中每個人的工作進度監控、總結和傳達任務。
系統架構師:可以由研發經理兼任,對系統進行構架設計、技術評估、開發環境,編寫概要設計文檔與設計規范文檔,對各類技術點進行分析,要求技術全面,并掌握熟練,有豐富的項目經驗,在各種環境下,給出最佳的解決方案。首先,業務分析員通過概括和界定作為建模對象的組織來領導和協調業務用例建模。例如,確定存在哪些業務主角和業務用例,他們之間如何交互。通過描述一個或幾個用例的需求狀況以及其他支持軟件的需求來獲取系統功能某一部分的規約。還要負責用例包并維護該用例包的完整性。其次,構架設計師負責在整個項目中對技術活動和工件進行領導和協調。構架設計師要為各構架視圖確立整體結構:視圖的詳細組織結構、元素的分組以及這些主要元素組之間的接口。因此,與其他角色相比,構架設計師的見解重在廣度,而不是深度。
產品經理:可以由項目經理兼任,負責對系統功能需求分析、用戶體驗設計,編寫需求文檔,如果我們接到任務,我們的產品需要做哪些功能,產品經理必須給出需求,將功能項目實際的列舉出來,不但要知道自己做什么樣的東西,還要了解我們做出來怎么用,分析產品在實際運營中的一些需求,制定項目的功能開發階段,現在一般的開發團隊中還沒有這個職位,其實這個職位對一個產品的好壞影響很大,我們在產品開發完成后,常常遇到一個問題,就是產品剛出來就感覺已經落后了。
高級軟件工程師(主程):以后臺為主,負責完成架構師的設計意圖,根據設計文檔編寫代碼;根據設計文檔編寫單元測試代碼,根據測試報告BUG己錄修訂BUG完成包或子系統的開發。熟練相關開發技術例如:JAVA、C#(.net)、C++、C、匯編、3D方面等,負責項目的核心模塊開發,編寫模塊設計文檔,不需要培訓就可以直接進入開發狀態,是團隊模塊開發引領者和銜接者,一般經歷過幾個項目的人都可以擔當。
初級軟件工程師(輔程):以前端為主,懂java、javascript、C#(.net)、C++、C能開發一些簡單的模塊,在技術上需要提高,現在大部程序員都喜歡寫后臺代碼,邏輯思維強,寫服務、API代碼比較好,做小型項目外包都沒問題。高級初級的項目配比為1:2至1:3之間。
UI設計、美工,界面設計人員通過以下方法來領導和協調 Web界面的原型設計和正式設計:獲取對 Web界面的需求(包括可用性需求),構建Web頁面原型,使Web界面的其他涉眾(如最終用戶)參與可用性復審和使用測試會議,復審并提供對Web界面最終實施方案(由其他開發人員員創建,如設計師和實施工程師)的適當反饋。UI設計、規范,切割并排好界面,有很多美工只懂設計切割,會設計還要什么html、css、js,還要懂一些接口規范,有很多美工怕寫代碼,所以在招聘的時候可以招兩個,一個設計切割,一個排版處理,兩個結合處理。
DBA,搭建好數據庫環境,準備數據規范,更新數據以及數據文檔,對數據系統性能分析、遷移、管理等工作。
測試工程師,測試工程師負責執行測試,其中包括設置和執行測試,評估測試執行過程并修改錯誤,以及評估測試結果并記錄所發現的缺陷。完成測試用例,文檔,編寫測試文檔。
實施工程師,負責軟件產品安裝調試和部署,完成項目相關系統工程工作,負責客戶技術支持,負責編寫系統部署方案和使用手冊、維護手冊,負責系統實施計劃和規劃。