樊亮 闞青
(中國電科第28研究所,江蘇 南京 210007)
對于軟件產(chǎn)品來說,探索軟件開發(fā)方法和技術(shù)以提高計算機軟件開發(fā)效率和質(zhì)量,是軟件工程領(lǐng)域探討的主要話題。提高質(zhì)量和產(chǎn)品功能的同時,縮短開發(fā)周期、降低開發(fā)成本是許多優(yōu)秀軟件開發(fā)企業(yè)不斷追求、自我完善的目標(biāo),也是在激烈的市場競爭中生存的根本。這不只是簡單的代碼質(zhì)量問題,而更是一個從管理學(xué)角度上不斷優(yōu)化、創(chuàng)新,面對需求調(diào)整適應(yīng)的過程。因此,理解和研究新型的、現(xiàn)代化的,基于信息化的軟件開發(fā)項目管理模式對企業(yè)及管理者來說具有非常重要的意義[1]。
40年前Winston Royce(1970)博士提出了瀑布式軟件開發(fā)模式,對軟件開發(fā)項目管理的發(fā)展起到了一定的積極作用。這個生命周期模型識別出了軟件開發(fā)所需的重要活動以及除代碼外的過程產(chǎn)出物。它對需求明確、開發(fā)技術(shù)成熟的項目確實有很好的指導(dǎo)作用。多年來,大部分的軟件開發(fā)項目執(zhí)行的都是瀑布開發(fā)模式。
軟件開發(fā)項目過程由一系列互不交互的階段組成,瀑布開發(fā)模式要求上個階段的工作全部完成并通過出口檢查評審后,下個階段才能開始。而實際的情況是,大部分軟件開發(fā)項目在需求活動完成前就已經(jīng)開始了設(shè)計工作,很少有團隊真正百分之百執(zhí)行瀑布開發(fā)模式。軟件開發(fā)項目中的不確定性,特別是需求的不確定性和技術(shù)的不確定性,導(dǎo)致了過程重復(fù)是有限的,不可能走同樣的開發(fā)步驟,因此變更不可避免地發(fā)生。而變更的代價,瀑布開發(fā)模式往往不能承受,這是“明確定義過程”不適用于復(fù)雜軟件開發(fā)項目管理的重要原因,大部分的軟件開發(fā)項目正是在這種矛盾中艱難前行的。
瀑布開發(fā)模式的不合理之處在于對開發(fā)產(chǎn)品了解最少時,做出對產(chǎn)品功能、性能、進度、成本的承諾并懲罰變更。因此,軟件開發(fā)項目特別是復(fù)雜軟件開發(fā)項目需要一套真正適用的開發(fā)模式。近年來,敏捷開發(fā)模式正越來越受到軟件開發(fā)項目的關(guān)注和重視[2]。
軟件開發(fā)過程不同于硬件研發(fā)過程,隨著開發(fā)的不斷深入,變更無時無刻不在,軟件版本的更迭、升級相對頻繁,需求管理難度逐漸增大。在大部分項目的實際開發(fā)中,一般都不具備有效的開發(fā)管理工具,很多項目組還在利用表單、人工記錄、人工核對等方式進行軟件開發(fā)項目過程的管理,效率很低,難以實時有效地進行軟件版本管理。并且針對需求從設(shè)計到編碼,再到測試,缺乏一體化的高效的跟蹤監(jiān)控機制。
傳統(tǒng)的軟件開發(fā)項目中需要記錄的過程數(shù)據(jù)信息,如工時、評審問題、測試缺陷等均由人工填寫完成,過程的執(zhí)行、審批記錄均采取紙質(zhì)形式保存,進行量化分析時依靠人工進行統(tǒng)計、計算、分析。從記錄到收集,再到計算分析的過程需要花費大量的人力工時,同時還存在較大的錯誤風(fēng)險。開發(fā)人員疲于記錄大量的工作信息,不能將主要精力集中于軟件開發(fā)工作本身,從而產(chǎn)生抵觸情緒,無法有效推進軟件工程化管理。
利用信息化手段就是要解決數(shù)據(jù)信息產(chǎn)生、收集、匯總、分析、評估的自動化,把開發(fā)人員從大量的手工記錄中解放出來。所有信息在軟件開發(fā)項目活動的執(zhí)行過程中被自動記錄下來,并進行收集、分析,實時展現(xiàn)分析結(jié)果信息。
人工記錄過程中最大的問題是實時性和準(zhǔn)確性難以保證。記錄的時機一般為該項軟件開發(fā)項目活動結(jié)束時,或者數(shù)據(jù)已經(jīng)產(chǎn)生后,因此很難保證實時記錄,并且人工記錄不可避免地會出現(xiàn)記錄錯誤,某一處錯誤將導(dǎo)致最終統(tǒng)計結(jié)果的偏差,錯誤查找并修復(fù)將花費更多的人力成本。
利用信息化手段的優(yōu)勢可以輕易地確保過程信息記錄的及時性和準(zhǔn)確性。在項目研發(fā)活動執(zhí)行的過程中,信息系統(tǒng)可以及時保存操作的記錄、工時、缺陷等信息,并且不會出現(xiàn)記錄錯誤的問題,從而確保過程記錄信息的實時、有效。
手工操作時項目研發(fā)過程的數(shù)據(jù)信息記錄和審批表單通常由紙質(zhì)表單保存。當(dāng)需要追溯時間久遠的記錄信息及審批表單時,查找的信息介質(zhì)往往因為保存不當(dāng)或記錄不清晰,無法提供所需的完整信息,造成信息追溯困難。
利用信息化手段可以完整提供需追溯的信息,同時還可以查詢與之相關(guān)的其他關(guān)聯(lián)信息供參考,信息量大,可追溯性強。
軟件敏捷開發(fā)模式的特點:一是強調(diào)項目人員的互動,二是利用頻繁交付工作軟件與用戶溝通,三是及時響應(yīng)變更[2]。信息化對這三方面特點能夠提供有力的支撐(圖1)。
圖1 信息化對軟件開發(fā)項目的支撐
(1)對項目人員互動的支撐。在整個軟件開發(fā)項目期間,項目組人員包括業(yè)務(wù)人員與開發(fā)人員可以天天溝通、一起解決問題。復(fù)雜軟件開發(fā)項目不會完全依據(jù)計劃進行,各種不可預(yù)測的因素會使實際與計劃產(chǎn)生偏差,因此有效、頻繁的交互是及時發(fā)現(xiàn)并解決問題的有效手段。利用信息化手段還可及時同步項目信息,將任何變更信息及時通知項目組的每個人,同時任何人可以利用信息化提出問題及解決辦法,與項目組的其他人員實時分享和學(xué)習(xí)。信息化是對項目人員互動的有效支撐。
(2)對頻繁交付工作軟件的支撐。頻繁的交付工作軟件能夠給利益相關(guān)人員提供一個很好的溝通平臺。這些反饋可以讓開發(fā)團隊和產(chǎn)品管理團隊及時對產(chǎn)品的方向做出調(diào)整,也可以讓開發(fā)團隊及時總結(jié)、對使用的過程進行調(diào)整。和瀑布開發(fā)模式不同的是,敏捷開發(fā)模式對開發(fā)階段沒有重要的分割,不是需求階段、分析階段、設(shè)計階段、編碼階段等的接力,而是各階段工作同時開展,因此純手工的軟件開發(fā)項目管理手段對此就顯得忙亂而低效,給管理帶來風(fēng)險。利用信息化手段可以輕而易舉地解決這些問題,信息化手段能夠提供有效的需求管理系統(tǒng)、版本管理系統(tǒng)、問題處理反饋系統(tǒng)等,確保軟件需求變更及時、版本可控、問題處理高效,保障軟件頻繁交付工作的順利開展。
(3)對及時響應(yīng)變更的支撐。變化是軟件開發(fā)項目過程中的一個常態(tài),比如:客戶對業(yè)務(wù)的理解加深會導(dǎo)致變更,開發(fā)環(huán)境變化會導(dǎo)致變更,技術(shù)的變化會導(dǎo)致變更,人員的變動也會帶來變更。必須及時拋棄過時計劃元素,更新計劃響應(yīng)變化。項目的目的不是符合計劃,而是用計劃指導(dǎo),開發(fā)出對客戶有價值的產(chǎn)品。為此,變更的管控尤為重要,以傳統(tǒng)的手工方式管理變更常常會遇到變更信息傳遞不及時,有時某一變更還未審批結(jié)束,新的變更需求又產(chǎn)生了,同時靠人工去識別變更影響域,難免會有疏漏。利用信息化手段就可以將變更信息及時傳遞給每個項目成員,并用信息系統(tǒng)自動關(guān)聯(lián)所需要變更的部分,提示項目人員及時做出變更,反饋變更信息。信息化是對及時響應(yīng)變更最有效的支撐手段。
實施軟件開發(fā)管理信息化的首要步驟是部署各個階段活動所需要的信息化專業(yè)工具,將重要活動的信息節(jié)點建立起來。
(1)需求開發(fā)活動。部署專業(yè)的需求管理工具,從以往以計劃為任務(wù)驅(qū)動的方式轉(zhuǎn)變?yōu)橐孕枨鬄槿蝿?wù)驅(qū)動的方式開展項目活動。同時,建立以需求為管理主線的項目全生命周期的全維度跟蹤管理模式,跟蹤從需求到設(shè)計、編碼、測試、缺陷修改,再到回歸測試的全過程。需求的變更可以及時傳遞至項目組相關(guān)人員,同時自動識別變更影響域,自動收集分析各階段產(chǎn)品的需求覆蓋率信息、需求分析人員的能力信息等。
(2)設(shè)計活動。部署專業(yè)的設(shè)計管理工具,將原先的線下設(shè)計工作轉(zhuǎn)向線上開展。借助設(shè)計工具的能力,設(shè)計人員可在需求的框架下、相關(guān)標(biāo)準(zhǔn)要求的設(shè)定下,開展設(shè)計工作,系統(tǒng)可按照設(shè)計的要素輸出設(shè)計文檔,同時系統(tǒng)記錄分析設(shè)計對需求的覆蓋率、設(shè)計的標(biāo)準(zhǔn)符合率、設(shè)計人員能力信息等。
(3)編碼活動。改變以往基于電子或紙質(zhì)表單方式進行配置管理流程流轉(zhuǎn)的方式,形成統(tǒng)一的配置管理信息化手段,基于SVN服務(wù)器建立專業(yè)的配置管理工具,構(gòu)建“開發(fā)庫”“受控庫”“產(chǎn)品庫”,在線運行配置管理業(yè)務(wù)流程。編碼人員完成編碼工作后自動及時將代碼上傳至配置管理服務(wù)器中相應(yīng)的代碼庫,等待出庫開展測試工作。
(4)測試活動。集成部署專業(yè)的自動化測試工具與缺陷管理工具,實施單元測試、配置項測試、系統(tǒng)測試及缺陷關(guān)閉。系統(tǒng)可自動收集、分析、統(tǒng)計軟件產(chǎn)品的質(zhì)量信息、編碼人員的能力信息、測試人員的能力信息等。
部署完成各專業(yè)工具后,需要打通各工具間的信息通道,讓孤立的信息孤島連接成一個一體化開發(fā)管理的信息平臺,自動收集、分析、評估、展示研發(fā)相關(guān)的質(zhì)量信息。具體的實施工作:一是要明確統(tǒng)計、分析、評估的質(zhì)量信息內(nèi)容,如產(chǎn)品質(zhì)量信息、人員能力信息、工作效率等,開發(fā)分析評估模型;二是要識別互通共享利用的信息要素,包括系統(tǒng)基礎(chǔ)信息和工具運行的應(yīng)用信息;三是梳理共享信息的流向,打通信息通道。
對收集到的各工具的數(shù)據(jù)信息進行統(tǒng)計分析后,可以獲得有關(guān)產(chǎn)品質(zhì)量、人員能力、工作效率等方面的信息。這些信息是評價研發(fā)工作的重要參數(shù)指標(biāo),應(yīng)實時展現(xiàn)出來,并作為項目管理者決策的依據(jù)。在信息化建設(shè)中應(yīng)著力打造一套項目全生命周期的質(zhì)量信息監(jiān)控系統(tǒng),及時展示研發(fā)過程中各階段活動的重要質(zhì)量信息,同時對信息進行自動監(jiān)控,對存在的風(fēng)險趨勢予以告警,以引起關(guān)注,采取必要措施應(yīng)對風(fēng)險[3]。
傳統(tǒng)的軟件開發(fā)項目管理信息化以流程為基礎(chǔ),打造基于流程應(yīng)用的功能模塊,從某種意義上說,是在已定義的框架下開展軟件開發(fā),關(guān)注的焦點是過程是否符合流程;而軟件敏捷開發(fā)所關(guān)注的焦點是產(chǎn)品,是不斷迭代的產(chǎn)品,一切要圍繞產(chǎn)品是否滿足用戶需要展開。因此,敏捷開發(fā)的信息化管理模式圍繞需求展開,以需求為導(dǎo)向,以需求為任務(wù)驅(qū)動,任何工作的標(biāo)準(zhǔn)是滿足需求,而不僅僅是符合流程操作。
一旦建立了軟件開發(fā)管理信息化,所要開展的重要工作就是信息化的推廣使用。要使使用者改變以往的操作習(xí)慣,同時理解敏捷開發(fā)的重要原則,并樂于利用新工具進行開發(fā)嘗試,這是推廣的關(guān)鍵。推廣使用工作可分為三部分:一是軟件開發(fā)管理規(guī)范的宣貫;二是業(yè)務(wù)操作的培訓(xùn);三是使用者針對各自使用的實際特點,基于工具能力制定軟件工程化的實施規(guī)范,進一步深化工具的使用。
在具體實施時,一定要與組織的實際情況緊密結(jié)合,考慮項目的特點,制定本地化的過程,不斷去完善過程。本地化意味著深入理解團隊、客戶、產(chǎn)品需求、技術(shù)平臺、組織文化、工具情況、工作環(huán)境等因素。在組織架構(gòu)下,由誰來做過程經(jīng)理、如何設(shè)計產(chǎn)品需求列表、如何描述用戶故事,這些都是需要根據(jù)自己組織的情況來確定的。
唯一不變的是變化。軟件開發(fā)項目研發(fā)模式也是一樣的,隨著各種新技術(shù)、新方法的應(yīng)用,軟件開發(fā)項目的研發(fā)模式會不斷更新?lián)Q代,不存在一成不變的好方法。對于信息化手段也要緊跟發(fā)展的步伐,做好信息系統(tǒng)不斷改進完善的工作,不斷收集使用反饋、改進建議、解決使用問題,進一步完善信息系統(tǒng)的功能,為軟件開發(fā)管理提供有力保障[4]。
軟件開發(fā)中永遠不變的就是需求的變化。傳統(tǒng)的瀑布開發(fā)模式適合需求較為清晰明確的軟件開發(fā),而敏捷開發(fā)模式所自帶的快速反饋機制更適應(yīng)大多數(shù)客戶需求快速變化的外部情況。敏捷開發(fā)中的核心實踐之一就是不斷地審查,然后調(diào)整,這是在開發(fā)中學(xué)習(xí)、成長、調(diào)整和完善。推廣軟件敏捷開發(fā)模式正成為大勢所趨,在這個過程中信息系統(tǒng)的“線上化”“自動化”“實時化”“快速化”優(yōu)勢與敏捷開發(fā)模式可以說是不謀而合。因此,利用信息化建立一套軟件開發(fā)項目管理信息系統(tǒng)能夠有效提升研發(fā)管理水平,為軟件開發(fā)工作提供強有力的支撐。同時需要注意,要充分、及時、有效地利用軟件開發(fā)過程中的反饋信息,提取有價值的改進信息,不斷提升,不斷總結(jié),不斷完善軟件開發(fā)項目管理系統(tǒng),使之發(fā)揮更大的效率,最終提升軟件產(chǎn)品的質(zhì)量水平。