要有效地進行進度控制,必須對影響進度的因素進行分析,事先或及時採取必要的措施,儘量縮小計劃進度與實際進度的偏差,實現對專案的主動控制。軟體開發專案中影響進度的因素很多,如人為因素、技術因素、資金因素、環境因素等等。在軟體開專案的實施中,人的因素是最重要的因素,技術的因素歸根到底也是人的因素。軟體開發專案進度控制常見問題主要是體現在對一些因素的考慮上。常見的問題有以下幾種情況:

1、80-20原則與過於樂觀的進度控制

80-20原則在軟體開發專案進度控制方面體現在:80%的專案工作可以在20%的時間內完成,而剩餘的20%的專案工作需要80%的時間。這個80%的專案工作不一定是在專案的前期,而可能是分佈在專案的各個階段,但是剩餘的20%左右的專案工作大部分是在後期。所以軟體開發在進入編碼階段後會給人一種“進展快速”的感覺,使得專案經理、專案團隊成員、使用者以及高層領導產生了過於樂觀的估計。有些領導看到軟體交付給使用者了,就一塊石頭落地“總算交差了”,同時又可能撤出一些被認為不必要的人力資源。但很多情況下這是為了對付使用者不合理的交付期限要求而採用的不得已的措施。這樣的結果是拖延了後期的工作,同時如果軟體還不成熟的話,會給使用者造成不好的影響。

2、範圍、質量因素對進度的影響

軟體開發專案比其他任何建設專案都會有更經常的變更,大概是因為軟體程式是一種“看不見”又“很容易修改”的東東吧,使用者是想改就改,造成需求的蔓延,專案經理有時還不知如何拒絕,加上要說“我能”的心理因素,一般都會答應修改。這樣集少成多,逐漸影響了專案進度。

如果某項工作在進度上表面上達到目標了,但經檢驗其質量沒有達到要求,則必然要透過返工等手段,增加人力資源的投入,增加時間的投入,實際上是拖延了進度。不管是從橫向或縱向來看,部分任務的質量會影響總體專案的進度,前面的一些任務質量中會影響到後面的一些任務質量。

3、資源、預算變更對進度的影響

資源,最主要的還是人力資源,有時某方面的人員不夠到位,或者在多個專案的情況下某方面的人員中途被抽到其他專案、或身兼多個專案、或在別的專案不能自拔無法投入本專案。還有一個很重要的資源,就是資訊資源,如某些國家標準、行業標準,使用者可能提供不了,而是需要去收集或購買,如果不能按時得到,就會影響需求分析、設計或編碼的工作。其他資源,如開發裝置或軟體沒有到貨,也會對進度造成影響。

預算其實就是一種資源,它的變更會影響某些資源的變更,從而對進度造成影響。

4、低估了軟體開發專案實現的條件

低估軟體開發專案實現的條件表現在低估技術難度、低估協調複雜度、低估環境因素這樣幾個方面。

首先是低估技術難度。軟體開發專案團隊成員,有時甚至是企業的高階專案主管也經常低估專案技術上的困難。低估技術難度實際上也就是高估人的能力,認為或希望專案會按照已經制定的樂觀專案計劃順利地實施,而實際則不然。軟體開發專案的高技術特點本身說明其實施中會有很多技術的難度,除了需要高水平的技術人員來實施外,還要考慮為解決某些效能問題而進行科研攻關和專案實驗;

其次,低估了協調複雜度,也低估了多個專案團隊參加專案時工作協調上的困難。軟體開發專案團隊成員比較強調個人的智慧、強調個性,這給專案工作協調帶來更多的複雜度。當一個大專案由很多子專案組成時,不僅會增加相互之間充分溝通交流的困難,更會增加專案協調和進度控制上的困難。

另外,企業高階專案主管和專案經理也經常低估環境因素,這些環境因素包括使用者環境、行業環境、組織環境、社會環境、經濟環境。低估這些條件,既有主觀的原因,也會有客觀的原因。對專案環境的瞭解程度不夠,造成沒有做好充分的準備。

5、專案狀態資訊收集的情況

由於專案經理的經驗或素質原因,對專案狀態資訊收集的的掌握不足,及時性準確性完整性比較差。另外其它一些原因也會造成這種現象。某些專案團隊成員報喜不報憂,不希望別人知道自已工作的不好的情況,例如軟體程式的編制,可能會先編制一些表面的東西,現有介面,看起來好像完成任務了,實際上只是一個“原型系統”或演示系統。給領導造成比較樂觀的感覺。

如果專案經理或者管理團隊沒有及時地檢查發現這種情況,將對專案的進度造成嚴重的影響。當然,如果出現這種需要時時刻刻都互相提防的氛圍,管理人員就應該從管理的角度,從制度的角度檢討一下,進行改進,讓大家實事求是地進行溝通。溫伯格說:“無論你多麼聰明,離開了資訊,對專案進行成功的控制就是無源之水、無本之木。”

6、執行計劃的嚴格程度

沒有把計劃作為專案過程行動的基礎,而是把計劃放在一邊,比較隨意去做。例如對於專案團隊內部溝通或外部溝通,在計劃中要說明清楚人員、週期、方式、方法,不能遺漏,但在實際專案過程中,可能出現溝通沒有按時或沒有完整地達到所有專案干係人的情況。

若專案計劃本身有錯誤,執行錯誤的計劃肯定會產生錯誤。如,計劃制訂者在計劃系統框架設計考慮上的錯誤、進度安排上的失誤等。實際的專案實施中,除了這種錯誤之外,還可能因為專案執行上的錯誤,造成專案的麻煩。例如,專案的客戶及其他專案干係人沒有及時為專案中出現的情況採取必要的措施或者所採取的措施的不適合具體的情況、沒有效果或者有副作用等。另外,如果在專案中的某項工作(如某個子系統或模組、元件)被轉包給第三方開發後,不能進行有效的管理,也會造成進度上的延誤。

7、計劃變更調整的及時性

漸近明細是專案的特點,特別是對於軟體開發專案,並不是一個一成不變的過程。開始時的專案計劃可以先制定得比較粗一些,隨著專案的進展,特別是需求明確以後,專案的計劃就可以進一步的明確,這時候應該對專案計劃進行調整修訂,透過變更手續取得專案干係人的共識。計劃應該隨著專案的進展而逐漸細化、調整、修正。沒有及時調整的計劃或者是隨意的不負責任的計劃的專案是難以控制的。在高技術行業,日新月異是主要特點,因此計劃的制定需要在一定條件的限制和假設之下采用漸近明細的方式,隨著專案的進展進行不斷細化、調整、修正、完善。對於較為大型的軟體開發專案的工作分解結構可採用二次甚至多次 WBS 方法。即根據總體階段劃分的總體 WBS ,需求調研階段結束、概要設計完成後專門針對詳細設計或編碼階段的二次 WBS 。由於需求的功能點和設計的模組或元件之間並不是一一對應的關係,所以只有在概要設計完成以後才能準確地得到詳細設計或編碼階段的二次 WBS ,根據程式碼模組或元件的合理劃分而得出的二次 WBS 才能在詳細設計、編碼階段乃至測試階段起到有效把握和控制進度的作用。有些專案的需求或設計做得不夠詳細,無法對工作任務的分解、均衡分配和進度管理起參考作用,因此要隨著需求的細化和設計的明確,對專案的分工和進度進行及時的調整,使專案的計劃符合專案的變化,使專案的進度符合專案的計劃。

8、未考慮不可預見事件發生造成的影響

假設、約束、風險等考慮“不周”造成專案進度計劃中未考慮一些不可預見的事件發生。例如軟體開發專案還會因為專案資源特別是人力資源缺乏、人員生病、人員離職、專案團隊成員臨時有其他更緊急的任務造成人員流動等不可預見的事件對專案的進度控制造成影響(即專案按時完成是基於如下假設:人力資源不會缺乏、人員不會生病、人員不會流動)。企業環境、社會環境、天災人禍等事件對專案的進度控制造成影響。對專案的假設條件、約束條件、風險及其對策等對於進度的影響在專案計劃要進行充分的考慮,在專案進展過程中也要不斷地重新考慮有沒有新的情況,新的假設條件、約束條件、潛在風險會影響專案的進度。假設是透過努力可以直接解決的問題,而這些問題是一定要解決才能保證專案按計劃完成;約束一般是難以解決的問題,但可以透過其他途徑迴避或彌補、取捨,如犧牲進度、質量等等;假設與約束是針對比較明確會出現的情況,如果問題的出現具有不確定性,則應該在風險分析中列出,分析其出現的可能性、造成的影響、採取的措施。實際上像沒有考慮人的疾病、人員流動這些情況本身也不是什麼問題,因為任何人都不可能把所有以外的情況都考慮完整,實際上也沒有必要。但有些諸如下班或節假日的加班時間都被安排用於專案工作的情況就會造成更多的專案不確定性。在可能的情況下當然要對所有可能情況都做到有備無患,但是有的時候也要冒一定的風險,同時對於風險的防範也需要考慮如果防範的成本大於風險本身造成的損失和影響,則這種防範是沒有必要的。

9、程式設計師方面的因素對進度的影響

程式設計師方面有兩種常見的心態影響了進度的控制:一是技術完美主義、二是自尊心。

技術完美主義的常見現象是,有些程式設計師由於進度壓力、經驗等方面的原因,會匆忙先做編碼等具體的事情,等做到一定程度後會想到一些更好的構思,或者看到一些更好的技術的介紹,或者是覺得外部構架可以更加美化,或者是覺得內部構架可以更加最佳化,這樣他們會私下或公開對軟體進行調整,去嘗試一下新的技術。而是否使用這些新的技術對完成專案本身的目標並沒有影響,相反可能帶來不確定的隱患。這種做法不是以使用者的需求為本、或以專案團隊的總體目標為本,可能對軟體開發進度造成較大的影響。

自尊心的常見想象是,有些程式設計師在遇到一些自已無法解決的問題時,傾向於靠自已摸索,而不願去問周圍那些經驗更為豐富的人。有些人也許會透過聊天室等方式匿名地向別人求教。如果運氣好會很快地解決,否則要花很多實踐摸索。而如果向周圍的人求教,可能摸索幾天的問題別人早就解決了。

10、未考慮軟體開發過程的迴圈、迭代特性

對軟體開發的各個過程分類過於精細,制定進度計劃時各項工作過於緊湊、沒有彈性,造成的後果是,定期提交專案進度階段報告的制度只有在表面上起到效果,按照計劃的時間表提交階段成果也只是在表面上起到效果。因為“上有政策、下有對策”,強行的規定會使人產生一些錯誤的認識:如在專案計劃中“規定”某個時間只能做某某類別的事情,那麼嚴格執行的後果就是編碼階段就不能修改文件;另外錯誤的“里程碑”概念可能會使大家輕易地相信上一個階段的工作成果都是“透過評審”最終定稿了,而實際上可能只是因為時間到了該提交的人提交、該評審的人評審了。如果上下階段是不同的人就根本不會去檢查其中是否還有錯誤;如果上下階段是同一個人,就可能非正式地修改上一階段的錯誤,但佔用的時間和精力卻是下一階段的,並且這樣的修改時沒有記錄的。這樣關於階段進度控制的措施實際上只是在表面上有效。最為普遍的情況是,使用者在合同中限定了提交軟體系統的時間,實際上這個時間對完成專案任務來說是遠遠不夠的,但計劃只能按照合同來進行,所以要不使用者讓步,要不只能按照時間的約定提交實際上還未完成的軟體系統,完成系統的安裝,但這時候的“完成階段任務”只是一個表面現象,系統雖然安裝了,但可能是沒有經過嚴格徹底測試的,也可能是隻完成了部分的功能,省略了某些功能,有些是整塊功能省略,有的是省略了某些功能的某個過程,如資料錄入裡面隱含的資料錄入前預設值設定、資料錄入檢驗等功能,而是實現了比較粗糙的功能。這樣,系統交付並不意味著專案的完成,而在專案交付之後還要花更多的時間。

11、其他因素

以上這些因素是影響專案進度的幾個主要方面,除此之外還有很多其他的影響因素。其實最主要的因素還是人的因素,這裡的人包括所有與專案相關的人。專案經理的素質、管理者的水平、使用者的因素、專案成員的因素等等,都會對專案進度造成影響,這是因為由於軟體開發的特性。因為篇幅有限無法一一列舉,只能在此分析一些常見的因素。

不可否認,軟體開發專案進度可控性還是帶有一定運氣成分的。特別是需要使用者配合的那些軟體開發專案,其可控性與使用者的成熟度、軟體應用領域的成熟程度和行業標準規範的完備程度有很大關係。關於可控性方面會涉及到一些與客戶打交道經驗,雖然我們說,顧客是上帝、以顧客為中心,但並不是說我們要把主導權交給他們,而關鍵是我們如何去主導、引導、把握。因此,專案控制的好壞與相關人員人際關係方面的經驗也有關係。

儘管存在很多不可控的因素,我們的任務是首先分清哪些是可以控制的,哪些是我們不能控制的。專案經理一是要儘量擴大可控的領域,減少不可控的領域,二是不要在“不可控”上花太多時間,而是多花一些時間把可控的工作控制好,做好防範措施,減輕不可控因素對專案進度的影響。

專案進入實施階段後,專案經理的幾乎所有的活動都是圍繞進度展開的。進度控制的目標與成本控制的目標和質量控制的目標是對立統一的關係。專案的進度、質量和成本構成一個相互制約的三角關係,需要專案經理去平衡。

二、專案進度控制的目的

專案進度控制和監督的目的是:增強專案進度的透明度,以便當專案進展與專案計劃出現嚴重偏差時可以採取適當的糾正或預防措施。已經歸檔和釋出的專案計劃是專案控制和監督中活動、溝通、採取糾正和預防措施的基礎。

1、根據計劃進行監控

專案控制的第一個目的是根據計劃對專案的各項活動進行監控,即根據已經制定並取得共識的軟體開發專案計劃來監控專案的實際表現和進度。為此應該根據專案計劃來監控專案計劃引數的實際值,這些引數包括進度表、專案成本、工作量、工作產品和任務的屬性、使用的資源、專案成員的知識和技能;根據專案計劃來監控專案團隊所作的承諾是否已經或可能兌現、原來的確定的風險是否可以避免或減少損失,是否有新的風險出現;根據專案計劃來收集、管理、使用專案資料;根據計劃監督專案干係人的參與情況,監控各項任務承擔人的參與活動;定期進行必要的進度評審,確定專案是否存在重大偏差、跟蹤變更請求和問題報告直到變更或問題得到解決;在專案的里程碑對專案的成果進行評審。

2、管理糾正和預防措施

專案控制的另外一個目的是管理糾正和預防措施,即當專案進度或者結果已經或即將與計劃有嚴重偏差時,對需要採取的糾正或預防措施進行管理。為此應當收集並且分析專案進行中可能存在的問題,並以此確定解決這些問題的糾正或預防措施;對已經確定的問題採取糾正和預防措施;監控要實施的糾正和預防措施,分析措施採取以後的結果,判斷這些措施的有效性,確定和記錄糾正與計劃結果存在偏差的問題而採取的必要且合適的措施。

專案執行過程中僅僅靠最初建立的一份“完善”的基準計劃是不夠的,最好的計劃也未必會一直有效。根據專案任務漸進明晰的特點,特別是軟體開發專案的特點,在專案進行過程中,肯定需要在適當和必要的時候對專案進行變更控制,這種控制過程包括定期蒐集有關專案進展情況的資訊,把實際進展情況與計劃進展情況進行對比;如果實際進展情況比計劃進展情況有差距,或可能會有差距,就應當採取糾正或預防措施。變更控制應當在專案期間定期進行,這裡所說的變更控制不一定要進行真正的變更,而是說要定期對變更進行控制。

如果在專案生命週期內的某一時間點,把實際進度與計劃中約定的進度相比對,顯示出專案已經延誤或即將延誤、超出預算目標或不符合質量要求,就必須採取糾正或預防措施使專案回到正軌上來,重新符合計劃的安排要求。在已做出執行糾正或預防措施的決定之前,應評估一下糾正與預防措施的有效性和無副作用性,以確保糾正措施使專案回到專案的工作範圍、時間和預算約束內,並對專案的其他目標不會造成太大的影響。

3、在各種專案目標中進行平衡

如果經過評估確定專案確實已無法控制,就應當下定決心以犧牲軟體功能範圍、工作成果範圍(如某些中間文件)、成本預算、進度計劃或軟體質量中的某一專案標為代價,來保住專案最重要的那些目標,在各種專案目標中進行平衡,最終確定一個最合適的解決方案。有效的專案控制的關鍵是定期及時測量實際程序,並與計劃程序相比較,如有必要就立即採取糾正或預防措施。指望不採取糾正和干預措施,問題就自行消失的想法是不現實的。問題越早發現就越好改正,造成的影響和損失越小。問題越提前發現就越好採取預防措施,可以用最小的代價避免造成損失。基於專案實際進展情況,就有可能準確預測專案進度計劃和成本預算的實施情況,以便順利完成專案。如果這些專案引數超出專案目標的限制範圍,就必須馬上採取糾正措施;如果發現這些專案引數有超出專案目標的限制範圍的趨勢,就必須馬上採取預防措施。

軟體開發專案實施中進度控制是專案管理的關鍵,若某個分項或階段實施的進度沒有把握好,則會影響整個專案的進度,因此應當儘可能地排除或減少干擾因素對進度的影響,確保專案實施的進度。

三、軟體開發專案常用進度控制措施

1、專案進度控制的前提

專案進度控制的前提是有效地專案計劃和充分掌握第一手實際資訊,在此前提下,透過實際值與計劃值進行比較,檢查、分析、評價專案進度。透過溝通、肯定、批評、獎勵、懲罰、經濟等不同手段,對專案進度進行監督、督促、影響、制約。及時發現偏差,及時予以糾正;提前預測偏差,提前予以預防。

在進行專案進度控制時,必須落實專案團隊之內或之外進度控制人員的組成,明確具體的控制任務和管理職責。要制定進度控制的方法,要選擇適用的進度預測分析和進度統計技術或工具。要明確專案進度資訊的報告、溝通、反饋、以及資訊管理制度。

專案進度控制應該由部門經理和專案監控人員共同進行,之所以需要部門經理參與,是因為部門經理負責專案一般要負責一定人事行政的責任,如成員的考核、升遷、發展等。他們只有透過軟體開發專案才能更好地瞭解專案成員,專案也只用透過對他們有切身利益的管理者參與管理才會更加有效。

2、專案進度控制主要手段

專案計劃書:作為專案進度控制的基準和依據,專案負責人負責製作專案計劃書。專案進度監控人員根據專案計劃書對專案的階段成果完成情況進行監控,如果由於某些原因階段成果提前或延後完成,專案負責人應提前申請並做好開發計劃的變更。對於專案進度延後的,應當分析產生進度延後的原因、確定糾正偏差的對策、採取糾正偏差的措施,在確定的期限內消除專案進度與專案計劃之間的偏差。專案計劃書應當根據專案的進展情況進行調整,以保證基準和依據的新鮮性、有效性。

專案階段情況彙報與計劃:專案負責人按照預定的每個階段點(根據專案的實際情況可以是每週、每雙週、每月、每雙月、每季、每旬等等)定期在與專案成員和其他相關人員充分溝通後,向相關管理人員和管理部門提交一份書面專案階段工作彙報與計劃,內容包括:

a、對上一階段計劃執行情況的描述

b、下一階段的工作計劃安排

c、已經解決的問題和遺留的問題

d、資源申請、需要協調的事情及其人員

e、其他需要處理的問題

這些彙報將存檔,作為對專案進行考核的重要材料。

在計劃制定時就要確定專案總進度目標與分進度目標;在專案進展的全過程中,進行計劃進度與實際進度的比較,及時發現偏離,及時採取措施糾正或者預防;協調專案參與人員之間的進度關係。

在專案計劃執行中,做好這樣幾個方面的工作:

檢查並掌握專案實際進度資訊。對反映實際進度的各種資料進行記載並作為檢查和調整專案計劃的依據,積累資料,總結分析,不斷提高計劃編制、專案管理、進度控制水平。

做好專案計劃執行中的檢查與分析。透過檢查,分析計劃提前或拖後的主要原因。專案計劃的定期檢查是監督計劃執行的最有效的方法。

及時制定實施調整與補救措施。調整的目的是根據實際進度情況,對專案計劃作必要的修正,使之符合變化的實際情況,以保證專案目標其順利實現。由於初期編制專案計劃時考慮不周,或因其他原因需要增加某些工作時就需要重新調整專案計劃中的網路邏輯,計算調整後的各時間引數、關鍵線路和工期。

3、進度控制內容

從內容上看,軟體開發專案進度控制主要表現在組織管理、技術管理和資訊管理等這幾個方面。組織管理包括這樣幾個內容:

(1)專案經理監督並控制專案進展情況;

(2)進行專案分解,如按專案結構分,按專案進展階段分,按合同結構分,並建立編碼體系;

(3)制訂進度協調製度,確定協調會議時間,參加人員等;

(4)對影響進度的干擾因素和潛在風險進行分析。

技術管理與人員管理有非常密切的關係。軟體開發專案的技術難度需要引起重視,有些技術問題可能需要特殊的人員,可能需要花時間攻克一些技術問題,技術措施就是預測技術問題並制訂相應的應對措施。控制的好壞直接影響專案實施進度。

在軟體開發專案中,合同措施通常不由專案團隊負責,企業有專門的合同管理部門負責專案的轉包、合同期與進度計劃的協調等。專案經理應該及時掌握這些工作轉包的情況,按計劃透過計劃進度與實際進度的動態比較,定期向客戶提供比較可靠的報告等。

軟體開發專案進度控制的資訊管理主要體現在編制、調整專案進度控制計劃時對專案資訊的掌握上。這些資訊主要是:預測資訊,即對分項和分階段工作的技術難度、風險、工作量、邏輯關係等進行預測;決策資訊,即對實施中出現的計劃之外的新情況進行應對並做出決策。參與軟體開發專案決策的有專案經理、企業專案主管及客戶的相關負責人;統計資訊,軟體開發專案中統計工作主要由參與專案實施的人員自已做,再由專案經理或指定人員檢查核實。透過收集、整理和分析,寫出專案進展分析報告。根據實際情況,可以按日、周、月等時間要求對進度進行統計和稽核,這是進度控制所必須的。

4、不同階段的專案進度控制

從專案進度控制的階段上看,軟體開發專案進度控制主要有:專案準備階段進度控制,需求分析和設計階段進度控制,實施階段進度控制等這幾個部分。

準備階段進度控制任務是:向業主提供有關專案資訊,協助業主確定工期總目標;編制階段計劃和專案總進度計劃;控制該計劃的執行;

需求分析和設計階段控制的任務是:編制與使用者的溝通計劃、需求分析工作進度計劃、設計工作進度計劃,控制相關計劃的執行等。

實施階段進度控制的任務是:編制實施總進度計劃並控制其執行;編制實施計劃並控制其執行等。由甲乙雙方協調進度計劃的編制、調整並採取措施確保進度目標的實施。

為了及時地發現和處理計劃執行中發生的各種問題,就必須加強專案的專案的協同工作。協同工作是組織專案計劃實現的重要環節。它要為專案計劃順利執行創造各種必要的條件,以適應專案實施情況的變化。

5、關於進度落後時的“趕工”措施

進度落後的情況下,有幾種措施來彌補,如加人、加班、加激勵等等,這些都是增加資源而又未必會見效的方法。根據Brooks原則,在某些專案進度延遲的情況下增加人手,有可能會使專案的進度更加延後。因為對於新加入本專案的員工來說,對專案相關背景、需求、設計的培訓、對專案環境的熟悉和專案團隊成員之間的溝通路徑的增加,可能會使專案的工作效率急劇下跌。而加班造成的疲勞會再次使工作效率降低。增加激勵會造成工作成本卻不斷的向上攀升。這些措施並不是完全不可取,而是專案經理要考慮適度原則。最好是要全面分析專案進度延遲的原因,如果確實是不合理的專案交付時限要求,就應當透過溝通變更為合理的專案時限要求,以免因為這樣一個不合理的時限要求造成對軟體質量或團隊成員心理上的負面影響,最終導致專案最終的失敗。否則應從技術、團隊成員心態、環境等方面查詢原因,找到提高效率、加快進度的方法。

其它小說相關閱讀More+

再見了,膽小鬼

去不了的海

拾光:風起相識

Riposo

系統覺醒自動回收無限加點

戲天鴿

陳總,你老婆馬甲又掉了

請深處

重生六零:像星辰一樣愛你

有金金

柯南,現世輪迴進行中

皖魂