軟件項目管理中的十個誤區

隨着計算機硬件水平的不斷提高,計算機軟件的規模和複雜度也隨之增加。計算機軟件開發從“個人英雄”時代向團隊時代邁進,計算機軟件項目的管理也從“作坊式”管理向“軟件工廠式”管理邁進。這就要求軟件開發人員特別是軟件項目管理人員更深一步地理解和掌握現代軟件工程的理論方法,完成思想觀念上的轉變。筆者在此分析了10個在現代項目管理中思想觀念上容易陷入的誤區,希望能夠拋磚引玉,引發大家更多的思索和討論。

誤區1:在項目的需求分析階段,開發方與客戶方在各種的問題的基本輪廓上達成一致即可,具體細節可以在以後填充。因爲無論開始時有多麼細緻,以後對需求的修改幾乎是必然的。分析:這是一種非常危險的思想。實際上許多軟件項目失敗的最主要的原因就是需求階段對問題的描述不夠細緻,導致後來預算超出或者時間進度達不到要求。正確的做法是:在項目需求分析階段,雙方必須全面地儘可能細緻地討論項目的應用背景、功能要求、性能要求、操作界面要求、與其他軟件的接口要求,以及對項目進行評估的各種評價標準。並且,在需求分析結束以後,雙方還要建立可以直接聯繫的渠道,以儘早地對需求變動問題進行溝通。(範圍的核實和項目驗收都要根據範圍基準進行。因此前期的範圍說明書和範圍的基線至關重要)

誤區2:軟件項目的需求可以持續不斷的改變,而且這些改變可很容易地被實現。分析:的確,在具體實際中由於種種原因客戶方很難在需求分析階段全面而準確地描述所有問題。隨着開發進度的推進,往往會有一些需求的改變。而現代軟件工程理論也利用軟件的靈活性特點通過各種方式來適應這種情況。不過,這並不表明“軟件項目的需求可以持續不斷的改變,而且這些改變可很容易地被實現”。實踐表明:隨着開發進度的推進,實現軟件需求更改所需要的代價呈指數形式增長。假定在需求分析階段實現需求更改需要花費1倍的代價;那麼,在系統設計和編碼階段,需要花費1.5-6倍的代價;在系統測試階段需要花費10-20倍的代價;在軟件版本發佈以後,甚至可能要花費60-100倍的代價。由此可見,在項目開展過程中,軟件需求的改變應當儘量早地提出。這樣纔可能花費少,容易被實現。(不應該稱爲誤區了,現在估計誰都不會認爲需求可以持續不斷改變)

誤區3:軟件程序主要由代碼組成,因此編碼階段是整個軟件項目的最重要的階段,應該給與大量的時間,並且集中主要的資源。分析:與以前相比,由於軟件的規模和複雜度的增加,以及半自動化軟件代碼開發平臺的出現,現代軟件項目管理的中心發生了轉移——不是着重編碼階段,而是着重系統總體/詳細設計階段。一般說來,在現代軟件項目管理中各種資源的合理分配比例是:項目論證、風險評估階段3% ,項目需求分析階段8%,系統總體/詳細設計階段45%,編碼階段10%,系統測試階段34%。(這個跟軟件項目的規模密切相關。對於規模小於2萬行代碼的,或者說採用敏捷或快速開發的,或者說架構已經確定的改進型號項目,編碼時間至少要佔30%;而對於源代碼規模超過50萬行的大型軟件項目,重點則是在需求和系統設計上面,編碼時間一般爲10%)

誤區4:爲了便於代碼的維護修改,在系統的詳細設計階段文檔工作應該做到寫出所有程序的僞碼。分析:通常僞碼的最大作用是對程序的算法流程進行描述,便於人們深入瞭解程序的功能和實現過程。可見,在一定程度上僞碼的確有利於對程序代碼的維護和修改。但是,我們知道爲了保證項目文檔和程序代碼的一一對應關係,維護程序代碼的時候同時需要對項目文檔進行維護。僞碼和程序代碼是非常接近的,對僞碼進行維護的話,相當於進行了2倍的程序代碼維護。工作量是很大的。所以切合實際的方式應該是對一般的程序文檔做到程序流程圖即可,對於涉及了較複雜算法的才需要僞碼。(應該深刻理解源代碼就是設計的一些重點觀點和思路,因此詳細設計輸出的代碼模型一般是不拋棄的,編碼人員可以直接在該代碼模型基礎上進行編碼)

誤區5:既然在項目人員配置中設置了專門的測試人員,那麼軟件所有的內部測試工作全部應該由測試人員完成。分析:軟件程序測試可以分爲“白盒法”和“黑盒法”兩種方式。由於使用“白盒法”對測試人員各方面素質的種種要求,在進行程序測試時測試人員總是最優先使用“黑盒法”。他們的工作方式往往是先對程序進行“黑盒法”測試;如果測試沒有通過,不得已這才考慮對程序代碼進行“白盒法”測試。顯然,這種對“白盒法”有意無意的“逃避”,對軟件的可靠性和穩定性構成了威脅。如何解決這個問題?一方面需要提高對測試人員的要求,另一方面也需要程序員完成部分的“白盒法”測試(實際上,程序員往往也是進行“白盒法”測試的最佳人選)。(估計很少有人這樣認爲,所以不應該稱爲誤區)

誤區6:軟件項目管理只是相關技術部門的事情,與公司其他部門無關。分析:在競爭日益激烈的今天,軟件項目規模大、複雜度高而且時間要求緊迫。要想提高公司的軟件項目管理水平,這就需要提高公司的整體參與意識,需要公司各個部門協同作戰。例如需要會計部門協助進行項目預算,財務管理和費用控制;需要研究部門(技術委員會)指派專家協助進行各種風險評估,提供技術指導;需要後勤部門提供各種保障。(干係人管理很重要,同時CMMI強調的集成項目管理也說明了這一點)

誤區7:在開發進度滯後的情況下,可以聘請更多的程序員加入到開發團隊中,通過增加人力資源來趕上進度。分析:在注重團隊開發的時代,開發方應該根據目前的軟件項目管理水平慎重考慮這個做法。如果新加入的程序員對目前軟件項目的應用行業有一定了解,並且可以很快適應了開發方的項目管理方式、軟件開發風格、團隊協作氛圍;那麼“新人”的加入是有益的。否則,可能會“好心好意做壞事”。因爲儘管其個人能力很高,但是爲了使其與大家一起協同工作,開發團隊不得不分出人手對其進行與項目有關的技術/業務培訓,更重要的(也是難度最大的)是還要引導其融入團隊。這可能需要花費開發團隊許多時間和精力,很有可能使項目進度更慢。(可以辯證的看,組織的成熟度越高,複用越高,該方法纔是可能的方法)

誤區8:技術骨幹應該成爲項目的項目經理,項目經理一定是所有項目成員中薪水最高的。分析:在“軟件作坊”時代,這是一種普遍使用而且效果不錯的方法;而在“軟件工廠”時代,這種方法卻帶來各種問題,有時甚至直接導致項目失敗。究其原因這主要是因爲隨着現代軟件開發分工的細化,對項目經理的要求也發生了根本的改變——最注重的不是其對某項專業技術的掌握程度,而是其組織、領導、協調開發團隊的能力(當然,可以兩者均突出最好)。至於項目經理的薪水問題,這和定薪制度有很大關係。通常,項目經理執行的是管理人員的薪酬體系,而其他人員執行的是技術人員的薪酬體系。項目經理的薪水在項目成員中是比較高的,但不一定是最高的。有時候,爲了激勵技術人員,項目中的技術骨幹得到的酬勞比項目經理要高。(這裏跟工種無關,更相關的是效率和產出,但去很難推行)

誤區9:只有項目經理以及部門主管纔會關心項目整體進度,程序員只關心自己的開發進度。分析:這是一種“官僚”的想法。實際上程序員作爲團隊中的一員,他不僅僅是在打一份工,更重要的是在參與一件“作品”的創作。在體味工作的辛苦的同時,程序員更重要的是要享受創作的快感。項目經理不應該漠視程序員對“成就感”的追求,應該向每一個人詳細描述最終“ 作品”將會如何美妙和令人興奮,並且在到達最終目標的路上設立一系列的里程碑。每當項目整體推進到一個里程碑的時候,項目經理應該把這個消息告訴每一位項目成員。實際上,這不僅僅可以讓所有的項目成員享受到階段勝利的喜悅,還可以激發大家更大的工作熱情,提高工作效率。

誤區10:爲了保證項目繼續,爲了留住核心程序員,加薪吧。分析:加薪可以說是很多企業在挽留程序員時所使用的常用方法。這一招可能暫時奏效,不過往往是人留下來了,但副作用也來了——加薪的人未必見得多幹活,沒有加薪的人卻開始消極怠工了。其實,項目的進行過多地依賴程序員的個人技術是“作坊”時代沿襲下來的“陋習”。既然IT行業人員的流動是無法控制的,現在項目的執行應該更加註重團體的力量,應該更多的考慮公司整體技術水平和核心技術能力。例如形成公司自己的專家知識庫,類/函數庫,第三方控件庫,擁有自主版權的開發平臺等。另外,實際上程序員萌生去意的原因很大程度上不是薪水,而是缺少激勵和尊重。這需要項目經理使用“老土”一點的辦法,找適當的時機對程序員做一做思想工作,向其描述項目的美好未來,讓其感受關心和尊重。總之,要從多方面着手保證項目的順利開展,而不是簡單地加薪。 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章