王瑩

【摘要】 通過科研院所對GJB5000A軟件研制管理下不同項目在實際應用中引入多種開發方法需要的分析,探討了使用敏捷開發方法在GJB5000A框架下實施開發過程的方法的可行性,同時介紹了利用Scrum及其擴展方法實現GJB5000A過程域目標的實踐方法
【關鍵詞】 軟件質量管理 GJB5000A 敏捷開發
一、引言
在國防信息化程度的不斷提高的今天,軍事領域中的軟件產品已經成為了和硬件產品比肩而立的重要存在,軍用軟件的質量高低也成為了決定軍事和武器系統質量的關鍵因素。隨著武器裝備系統中的軟件規模迎來爆炸式增長,只有對過程質量的全面控制,才有可能最大程度的降低風險,提高軟件產品質量。我單位從2011年開始試推行GJB5000A軟件研制過程管理,到如今已實現了軍用軟件研制能力二級管理的全面覆蓋,期間為兼顧不同專業領域、不同項目類型、不同規模和軍兵種的要求,對體系進行了持續改進。改進焦點在執行GJB5000A標準的大框架下盡可能解決特異性問題上,同時在開發方法及操作層面上鼓勵項目組團隊在現有質量體系策略要求下進行創新式探索。其中利用敏捷開發的方法與CJB5000A管理體系的融合就是一種有益思考。
二、GJB5000A質量管理體系結合敏捷方法在科研院所的適應性
2.1 GJB5000A在科研院所的落地實施
GJB5000A-2008《軍用軟件研制能力成熟度模型》作為框架模型,體現了業內軟件研制過程最佳實踐集,其采用分級表示的方法,按預先確定的過程域來定義組織的改進路徑,同時規定了軟件研制和維護活動中的主要軟件管理過程和工程過程的實踐。模型五個級別中共定義了22個過程域,每個過程域由不同個數的專用目標和相同個數的共用目標組成,每個目標又推薦了不同的實踐。在GJB5000A的定義中,目標是必需的部件,實踐是期望的部件,我們用滿足所有目標來確定過程域的實現,用實踐來指導過程改進和評估。換句話說,GJB5000A標準允許我們用規定的實踐或可接受的替代實踐來滿足目標。所以科研院所要想真正實現標準落地就必須按照單位自身產品特點和用戶要求將實踐本地化。
在實現本地化過程中,組織會按照大多數項目的模式定義標準過程,但卻無法確保所有過程適用于所有項目,同時在執行自由度上也遇到了很大困擾,強約束導致了項目缺乏靈活性,而降低約束度則可能帶來質量和進度的雙重風險。此外,即使組織開放了項目組利用替代實踐實現目標,但南于團隊人員的經驗不足,也很難找到恰當的替代實踐,組織還必須承擔面對評估時替代實踐有效性的質疑,所以在組織層面上定義多種開發方法供項目選擇就顯得尤為重要。
2.2 敏捷開發方法在軍用軟件研制過程中的適用性
軟件敏捷開發是一種相對于傳統軟件開發而言的輕型開發方法,它改變了傳統開發中以文檔為驅動的開發模式,以人為主要驅動核心,目前常用的基本敏捷實踐方法有很多,如極限編程(XP)、Scrum方法、特征驅動開發(FDD)等,每種方法的實踐過程都有不同,但基礎都是基于增量和迭代的過程。軟件敏捷開發有四大價值觀:個體和交互勝過過程和工具;可以工作的軟件勝過面面俱到的文檔;客戶合作勝過合同談判;響應變化勝過遵循計劃。這些特點使得敏捷開發方法靈活、適用多變需求,可快速交付,但應用在軍用軟件研制過程中可能會帶來以下問題:1、敏捷開發方法應用的是需求的快速迭代,每一個迭代作為一個計劃階段,很難對項目的整體目標有完整計劃。2、敏捷開發方法更注重有效代碼的快速交付,而非文檔,這對有嚴格軍標約束下的文檔編制提出了更高的要求。3、敏捷開發最重要的開發方式是與客戶一起開發,因軍用軟件的需方往往是部隊使用方,面對面開發的形式較難實現。4、敏捷開發方法對開發人員的能力要求極高,人員要不但要精通設計、編碼、測試相關工作,而且要能參與項目的需求分析和架構設計,能對頻繁變更的需求做出快速響應。
既然敏捷方法會帶來以上問題,我們為何還要考慮在軍用軟件承研單位引入敏捷開發過程呢?這是因為隨著軍用軟件研制領域中引入的競爭機制,出現了越來越多需要直接進行代碼交付的PK項目,如果再應用傳統研發方式,就失去了市場競爭優勢。所以,對于規模小、周期短、需求變動頻繁、現場開發為主要形式且已經具備了較穩定的開發技術架構的項目而言,敏捷開發方法既能讓項目組在短時間內針對需求拿出有效代碼,而且在快速迭代中能總結大量有用的文檔信息。只要我們可以偏重組建成員技術水平在同一層面上的成熟開發團隊來承接這樣的項目,必然起到事半功倍的效果。
三、GJB5000A質量管理體系下的敏捷開發方法實施
3.1 用敏捷開發方法定義過程
在組織級,GJB5000A三級過程域中的組織過程定義(OPD)可以幫助組織建立起自己的敏捷開發方法下的過程定義,包括過程和過程元素的說明,過程剪裁指南,敏捷開發方法下的生命周期,標準工作環境、組織測量庫、組織資產庫等。有了組織級定義,項目組就可以按照集成項目管理(IPM)實現方法對組織標準過程進行剪裁,形成項目的已定義過程(P'DP),這個過程就可以直接指導項目的過程實施。從項目級的角度看,GJB5000A的過程管理關注的是項目做了什么,而敏捷開發方法正是提供了該怎么做的具體開發方法,敏捷開發方法中的活動經過合理替代和剪裁的實踐方法以實現GJB5000A目標是完全可行的。
3.2 敏捷開發方法實踐
1.實踐方法的選擇。在敏捷開發的眾多方法中,我們選擇了以Scrum為基本敏捷實踐,以持續集成(CI)和測試驅動開發(TDD)為擴展方法的敏捷開發架構。Scrum方法是敏捷開發中最典型的模型框架,它把產品需求的實現分為若干個Sprint來完成,每個Sprint完成后進行產品演示,收集、細化直至實現用戶需求,整個過程為一個迭代式增量過程。持續集成提倡利用一個全自動的過程,在一天中根據代碼變化進行多次構建(包括編譯、發布和自動化測試)來驗證集成結果和發現集成錯誤。測試驅動開發技術(TDD)基本原理是在開發功能代碼之前,先編寫單元測試用例代碼是持續集成的驗證手段。
2.項目定義過程。Scrum結合CI與TDD的過程可以簡單描述為:一開始先由項目負責人確定一個ProductBacklog(產品需求列表),而后召集項目團隊召開Sprint計劃會議對列表中的需求進行工作量預估和安排,從中挑選出一個story作為本次迭代完成的目標,形成SprintBacklog(迭代需求列表)分配給項目組成員,每個成員接收到任務后將任務進一步細化,在每日例會上匯報自己的完成情況和對下一步工作作出承諾,同時在公示板上標注出自己的工作情況(燃盡圖法等方法)。每個項目組成員對工作進行每日集成,集成后利用測試驅動開發構建測試來快速評估集成結果,如果發現問題馬上修改,再次集成測試,反復循環,直到一個迭代結束形成可用的代碼。
3.用GJB5000A過程管理敏捷開發方法下的研制。從項目層面看,Scrum方法可以結合GJB5000A過程域中的需求開發,項目策劃、項目監控等,CI與TDD可以結合產品集成、配置管理等,當敏捷開發的方法在GJB5000A的過程管理方法約束下,可以得到更精確的控制和工作產品反饋。下表我們就給出了部分實踐的實施方案。
四、總結
GJB5000A體系結合敏捷開發方法有別于傳統研制方法中以文檔為驅動的順序研制過程,它充分強調了消除冗余、減少返工、縮短周期,提高效率的理念,同時用過程記錄的方法收集重要的項目信息,可以在一輪迭代完成后一次輸出成可用的文檔和經過測試的可交付代碼。于項目而言,這種研制方式給項目提供了更多的靈活性選擇。于組織而言,因總裝備部和軍標的強制要求,承研軍用軟件的單位必須要在GJB5000A及相關配套軍標的要求下建立質量管理體系和規范項目研制過程。通過合理剪裁那些能提高產品質量、提高生產率的方法和模型后,通過驗證和確認方法形成組織標準過程,必然能增強組織標準框架的適應性和實用性,提升組織管理能力目標。