軟體組態管理解析
轉載地址:http://www.rjgc.net/control/content/content.php?nid=5997
組態管理的三大誤區
國內軟體公司實施組態管理,已經取得了很多進步,也提高了軟體的品質。但是對於軟體組態管理,有很多公司對它的理解比較模糊,或者在真正的組態管理實施過程中存在著誤區。從專家們的討論中,我們瞭解到國內的軟體組態管理主要有三個方面的誤區。
誤區一:版本控制=軟體組態管理
也許很多人不承認自己對於軟體組態管理的理解局限在版本控制上,但在具體實施組態管理的過程中,就只見版本控制,而不見真正的組態管理。其實版本控制只是組態管理最基本的層次和功能。當然只有進行了版本控制,其他的功能才可能會逐漸提升。就是一個基本的版本控制,在部分軟體公司中也並不是一個非常正規和完善的過程。
這種問題,歸根到底在於軟體公司對軟體開發流程的管理在意識上不夠重視。國內軟體企業的開發管理不是很規範,即使在大的軟體公司裡面,項目組對於開發管理的關注也是有限的。另外一個原因是由於開發管理中資源的不足,比如:資金的缺乏(導致不能購買功能齊全、價格昂貴的商業產品)、人力資源(不能招聘專業的組態管理人員),因此不能在公司內部實施體系化的組態管理。
誤區二:編碼水平最差=組態管理員
組態管理人員是組態管理具體實施的人。可以說公司制定了組態管理的流程和規章只是組態管理實施的基礎,而真正組態管理能否實施,能否有效,關鍵在於從事組態管理的人員。但國內的一個誤區是:在選擇組態管理人員的時候,是尋找Team Dev中編碼水平最差的人。比如張三寫代碼不行,測試也不行,那就只好去從事組態管理工作了。
穀煉對此深有體會。穀煉有在日本Rational和國內在組態管理領域工作的經曆。相比國內低水平的組態管理人員,國外公司一般都由有豐富編程經驗的人擔任軟體組態管理人員,有的時候組態管理部分的工作職責直接由開發經理擔任。組態管理人員的層級也相當高,被認為是專案經理的左右手,拿的是雙薪。
其實一個SCM人員的責任相當重大,一個團隊所有的代碼、文檔都由其負責,國內好像是處於一個相當尷尬的境地,認為一個什麼都不懂的人擔任,才能保證這些代碼文檔的安全。
當然國內也不泛重視組態管理的公司。據傳說華為就非常重視軟體組態管理,除了設定CTO、CEO,好像還設定了一個CMO(Configuration Management Officer,或者叫配置經理)。
誤區三:採用組態管理工具=有效組態管理
組態管理工具在軟體組態管理中起著不可替代的作用。沒有工具的支援,實施一個完整合格的組態管理是不可想象的。也許正是因為工具的重要,造成了很多軟體公司對於工具的迷信,以為只要部署了組態管理工具,尤其是一個專業的商業工具,就自以為建立了組態管理體系。
使用好的工具並不能代表就能實施好組態管理。因為工具就是工具,工具不能代替管理。否則為什麼總是說配置“管理”而不單單說配置“工具”呢?一個成功的組態管理工具實施,需要兩個方面的條件:一是規範的軟體開發流程;二是合格的組態管理參與人員,這裡的組態管理參與人員包括了組態管理員、開發人員、專案經理等。
對此,鄧小年認為:“無論怎麼樣,沒有流程和規範地使用工具,那麼再強的工具也沒有靈魂。比如簡單的一個check in操作,不同的人用起來可不一樣。有人修改後,進行build,然後check in;有人修改後,進行build,並簡單的測試再check in,也有人修改後馬上check in,……可看出不同的人使用工具的同一操作有不同的後果。”
人——為何如此重要?
組態管理員在組態管理中是一個比較奇妙的角色,對於一個實施了組態管理、建立了組態管理工作平台的團隊來說,他是非常重要的,整個Team Dev的工作成果都在他的掌管之下。如果他管理和維護的組態管理系統出現了問題,輕則影響團隊其他成員的工作效率,重則可能出現丟失工作成果、發布錯誤版本等嚴重的後果。
組態管理員應該做什麼
一般而言,組態管理人員在軟體公司中應該具有下面的幾項主要職責:
1、 提交組態管理計劃;
2、 軟體組態管理工具的日常管理與維護,各配置項的管理與維護;
3、 執資料列版本設定和變更控制方案;
4、 完成配置審計並提交報告;
5、 對開發人員進行相關的組態管理培訓;
6、 識別軟體開發過程中存在的問題並擬出解決方案。
你是合格的組態管理員嗎?
一個高水平的組態管理人員,對Team Dev在整體上有非常重要的作用。如果在一個企業中實施了組態管理工具如ClearCase,但沒有專業的組態管理人員管理,就像一個曳引車安裝了一個平治的馬達,還是跑不快。早期在國內企業中,找一個合適的組態管理人員很困難,最後由系統管理人員來擔任。並且使用不同的組態管理工具,對組態管理人員的要求就不一樣,如VSS對組態管理人員的技術水平要求就較低。
按照組態管理的職責要求,一個合格的組態管理人員需要具備哪些素質呢?
1、職業道德是第一位的,這是由於組態管理人員負責管理軟體公司最為重要的資產。
2、軟體組態管理的專業知識,最好要精通一種組態管理工具,沒有工具是不可能實施軟體組態管理的,否則那隻能是效率極其低下的紙上談兵。
3、專案管理的知識,對於軟體開發流程非常熟悉。一般而言,最好要經曆幾個軟體項目的開發管理過程,或者擔任過專案經理,對軟體開發的全過程有比較清晰的瞭解;有軟體開發經驗可以增強說服力,降低實施的難度,並且能夠切身以開發人員的身份去體會組態管理,才能改進組態管理過程。
4、有一定的大局觀,有一定的IT背景知識,對系統(作業系統、網路、資料庫等方面)比較熟悉。
除了個人素質上的要求,在性格上也有一些共性的東西。
1)、溝通技巧:在部署和實施組態管理的時候,肯定會遇到一些抵觸,對於程式員而言,使用組態管理之前,沒有什麼約束,但是在實施後,會有一些約束,認為這並不是自己的工作。如果在使用中出現了問題,就需要組態管理人員進行溝通,並且能夠解決問題。
2)、穩重、細心、有耐心。組態管理工作需要和開發人員、測試人員、專案經理打交道,但是他們對於遵循組態管理流程和工具不會非常的熱心,因此需要組態管理人員能夠穩重、有耐心。
3)、能夠吵架。有的時候,如果溝通不行,就需要採取強迫的手段來保證具體配置工作的要求得到執行。記得在網上見到這樣的一句話:搞組態管理原來很好玩,就是要——凶~!
組態管理員的困惑
用友軟體工程公司的耿延煜現在擔任一個項目的組態管理員,她對於軟體組態管理人員的看法更有代表性。在用友軟體工程公司,採取的是一個項目設定一個組態管理人員,主要工作是項目產品的版本管理,並配合專案經理對項目中的文檔、代碼進行檢查。但是這個組態管理人員並不是專職的,在承擔組態管理職責之外,還會承擔一些項目的開發、測試工作。作為一個兼職的SCM人員,耿延煜認為,有兩個問題需要注意:
一是如何在工作任務緊張的時候保證組態管理工作?
作為一個組態管理人員,並不是僅僅從事組態管理工作,很多時候,會接受專案經理指派的開發工作,這個時候如何處理組態管理工作和開發工作的權重就非常重要,尤其是在一個項目處於緊要關頭的時候,開發進度緊,很多公司就忽視了組態管理,但是往往這個時候,組態管理才是最為重要的,並且這個時候出了問題,對於項目的影響會更大。因此在很多情況下,必須付出時間從事組態管理工作,如加班。出現了問題,組態管理人員必須立即進行修複。
二是定位模糊。很多SCM人員對自己的定位都比較模糊,沒有將自身置於一個專案管理者的角色。感覺自己只是項目組的一個無關緊要的角色。國內軟體開發中,向來就重開發人員,輕視測試人員,組態管理人員就更得不到重視了。然而,配置人員應該是一個專案經理的Backup,應該向專案經理發展。
組態管理員的最佳實務
對於組態管理人員的部門設定,鄧小年認為,一般國內大中型軟體公司在組態管理部門可以設定如下的三個職位:
1、組態管理經理:負責公司全面的組態管理方面的工作;
2、建立發布工程師:主要負責建立和發布,部署產品;
3、工具管理工程師:主要負責開發、維護組態管理工具,對工具的使用進行培訓。
考慮到我國的現實情況,在一個軟體公司中的每個項目專門設定一個SCM人員還不現實。從上面可以看出,組態管理員的最佳實務和推廣方式可以採用是“兼職+專職”的形式來進行。具體而言,可以這樣安排:
1、軟體公司在公司級必須有一個整體的組態管理解決方案和策略,對於各個具體開發的項目也有一個適合項目需要的組態管理策略。
2、公司級的SCM策略上,設定專職的組態管理人員,一般由水平較高的人員擔任,符合上面提到的組態管理員的素質要求。
3、項目級的SCM策略上,設定兼職的組態管理人員,一般可以由開發人員或者品質人員來兼任。
4、專職SCM人員和兼職SCM人員之間的溝通協調。並且對於SCM工具,如ClearCase,一般在前期部署的時候,任務比較緊張,在實施以後,操作就比較簡單,只需要一個兼職人員就可以了。通過專職SCM人員和兼職SCM人員之間不斷地反覆溝通,才能將一個SCM過程具體實施好。
實施——從老闆的角度思考
組態管理應該如何實施?軟體組態管理活動是一項支援性、保障性的工作,它本身並不直接為企業產生直接贏利的工作成果,它每一項活動都需要消耗企業的資源,還需要購置組態管理工具,這些都會導致企業生產成本的增加。因此對一個軟體公司來說,實施組態管理就需要從老闆的角度進行思考。
什麼是成功的組態管理?
一個沒有實施組態管理的軟體項目,常常出現的問題有:版本混亂、文檔不統一、工件遺缺等。這些問題歸根到底是軟體品質的問題。因此對於什麼是成功的軟體組態管理,一個最簡單的方法是比較組態管理實施活動前後,軟體產品的品質是不是得到了提高、Team Dev是不是能夠工作在一個有助於提高整體工作效率的組態管理平台上。
具體到組態管理中的每項活動,是否成功的標準是:這項活動是不是真正有助於我們實施組態管理的活動?它對於提高我們產品的品質有多大的協助?能否協助Team Dev更高效地工作?
組態管理流程再造
軟體組態管理的實施首先需要有一個規範的軟體開發流程,因此對於一個軟體公司而言,要實施組態管理,首先是需要對自身的軟體開發流程進行再造。再造水平的好壞決定了組態管理是否僅僅是版本控制,是否能夠有效實施組態管理。流程不好,也許就僅僅到達版本控制的水平,不能達到變更控制、過程管理等“組態管理”的較高水平上。
選擇合適的組態管理工具
有了組態管理流程,為了保證組態管理的效果、範圍和品質,就需要Application Configuration Manangement工具。對於如何選擇一個合適的組態管理工具,在這次的研討會上也是我們討論的熱點。我們認為,公司在選擇SCM工具的時候,可以遵循下面四個原則。
首先是工具的價格。一般國內中小型軟體企業都沒有足夠的資金來實施一些商業工具。因此就只能退而求其次了,採用一些變通的方法來實施。比如:對於變更管理,採用簽發變更單解決。有些公司採用一些簡單的MIS來管理,資料儲存到資料庫,能夠做到查詢、儲存等目的。
二是在功能上,滿足需要就可以,太過複雜的產品使用也麻煩,對組態管理人員的要求也高,價格也昂貴。工具只要符合需要就行,不必追求功能齊全。
三是效能。由於組態管理的都是開發中最為重要的資源,一旦崩潰,損失就會很大。因此組態管理工具的運行需要非常穩定,不出故障,出了故障應該有補救措施。
四是實施的過程是否順利,售後服務和支援人員是否完善。
正確實施組態管理工具
在實施組態管理工具的時候,工具必須和開發管理流程良好的結合起來,這樣才能保證工具的正確實施。而這點也是目前軟體公司在使用各種工具時一個最大的痛點。
1、組態管理應該更自動化
變更管理應該支援從項目開始到維護整個生命週期不同的變更類型;代碼的版本管理到發布應該一氣呵成;版本的配置關係可以簡單表現出來。這些方面雖然組態管理工具涉及到,但沒有一個工具能夠完全的自動化。很多時候,我們需要額外的工作來維護組態管理系統本身。可以說:項目總的複雜度不變,實施組態管理後,降低了軟體開發的複雜度,卻增加了管理的複雜度。因此組態管理的自動化非常重要。
2、組態管理應該基於流程
沒有流程來執行組態管理是不切實際的,而現有的組態管理工具大多支援流程的管理,但是流程不一定適合於每個公司。如ClearCase的UCM流程,雖然很好,但是很難定製,我們只能讓公司項目環境來適應這個工具,而不是讓工具來適應現有的開發環境,這樣的做法並不少最好的。組態管理工具不僅要支援流程,並且能夠定製流程。
3、策略和標準化更加容易使用
實施組態管理的時候,需要定義許多的標準,比如版本名稱規則、文檔命名規則、什麼時候check in、什麼時候建立分支等。目前的一些組態工具,都沒有提供這方面的專門定義,需要組態管理員另外寫指令碼或者程式來限制執行。這些地方都是需要改進的。