❶ 軟體需求分析有哪些方法
軟體需求分析免費下載
鏈接:https://pan..com/s/1qNBwqvbRS5ziBSIeanLQAQ
需求分析也稱為軟體需求分析、系統需求分析或需求分析工程等,是開發人員經過深入細致的調研和分析,准確理解用戶和項目的功能、性能、可靠性等具體要求,將用戶非形式的需求表述轉化為完整的需求定義,從而確定系統必須做什麼的過程。
❷ 如何進行軟體需求分析
軟體需求分析免費下載
鏈接:https://pan..com/s/1qNBwqvbRS5ziBSIeanLQAQ
需求分析也稱為軟體需求分析、系統需求分析或需求分析工程等,是開發人員經過深入細致的調研和分析,准確理解用戶和項目的功能、性能、可靠性等具體要求,將用戶非形式的需求表述轉化為完整的需求定義,從而確定系統必須做什麼的過程。
❸ 軟體需求的分析方法
軟體需求分析方法大體分為如下四類:結構化方法、面向對象方法、面向控制方法和面向數據方法。限於篇幅,將主要從結構化方法和面向對象方法以及RUP三個方面進行簡要的探討。 面向對象(Object Oriented, OO)的方法把分析建立在系統對象以及對象間交互的基礎之上,使得我們能以3個最基本的方法框架——對象及其屬性、分類結構和集合結構來定義和溝通需求。面向對象的問題分析模型從3個側面進行描述,即對象模型(對象的靜態結構)、動態模型(對象相互作用的順序)和功能模型(數據變換及功能依存關系)。需求工程的抽象原則、層次原則和分割原則同樣適用於面向對象方法,即對象抽象與功能抽象原則是一樣的,也是從高級到低級、從邏輯到物理,逐級細分.每一級抽象都重復對象建模(對象識別)一動態建模(事件識別)一功能建模(操作識別)的過程,直到每一個對象實例在物理(程序編碼)上全部實現為止。
面向對象需求分析(OORA)利用一些基本概念來建立相應模型,以表達目標系統的不同側面。盡管不同的方法所採用的具體模型不盡相同,但都無外乎用如下五個基本模型來描述軟體需求:
整體—部分模型:該模型描述對象(類)是如何由簡單的對象(類)構成的。將一個復雜對象(類)描述成一個由交互作用的若干對象(類)構成的結構的能力是OO途徑的突出優點。該模型亦稱聚合模型。
分類模型:分類模型描述類之間的繼承關系。與聚合關系不同,它說明的是一個類可以繼承另一個或另一些類的成分,以實現類中成分的復用。
類—對象模型:分析過程必須描述屬於每個類的對象所具有的行為,這種行為描述的詳細程度可以根據具體情況而定。既可以只說明行為的輸入、輸出和功能,也可以採用比較形式的途徑來精確地描述其輸入、輸出及其相應的類型甚至使用偽碼或小說明的形式來詳細刻畫。
對象交互模型:一個面向對象的系統模型必須描述其中對象的交互方法。如前所述,對象交互是通過消息傳遞來實現的。事實人對象交互也可看作是對象行為之間的引用關系。因此,對象交互模型就要刻畫對象之間的消息流。對應於不同的詳細程度,有不同的消息流描述分析,分析人員應根據具體館況而選擇。一般地,一個詳細的對象交互模型能夠說明對象之間的消息及其流向,並且同時說明該消息將激活的對象及行為。一個不太詳細的對象交互模型可以只說明對象之間有消息,並指明其流向即可。還有一種狀況就是介於此兩者之間。
狀態模型:在狀態模型中,把一個對象看作是一個有限狀態機,由一個狀態到另一狀態的轉變稱作狀態轉換。狀態模型將對象的行為描述成其不同狀態之間的通路。它也可以刻畫動態系統中對象的創建和廢除,並稱由對象的創建到對象的廢除狀態之間的退路為對象的生存期。
狀態模型既可以用狀態轉換因的圖形化手段,又可用決策表或稱決策矩陣的形式來表。 RUP(Rational Unified Process)是Rational公司開發和維護的過程產品。RUP是工程化的軟體開發過程,它提供了在開發機構中分派任務和責任的紀律化方法。RUP不僅僅是一個簡單的過程,而是一個通用的過程框架,可用於各種不同類型的軟體系統、各種不同的應用領域、各種不同類型的組織、各種不同的功能級別以及各種不同的項目規模。RUP的突出特點可以由以下三個關鍵詞來體現——用例驅動、以構架為中心、迭代和增量的。這些是RUP所特有的,也是同等重要的。構架提供了一種結構來指導迭代過程中的工作,而用例則確定了目標井驅動每次迭代的工作。
進行需求分析的基礎是要獲得用戶的需要,為了完成這一工作,必須建立業務模型,通過描述業務規則、業務邏輯,明確業務過程並對其進行規范、優化。對於一個系統,在建立業務模型時,應從3個方面來描述其特性:功能、行為、數據,對應於這些特性。 基於上述分析可知,結構化分析方法與面向對象分析方法的區別主要體現在兩個方面:
* 將系統分解成於系統的方式不同。前者將系統描述成一組交互作用的處理,後者則描述成一組交互作用的對象。
* 子系統之間的交互關系的描述方式不一樣。前者加工之間的交互是通過不太精確的數據流來表示的,而後者對象之間通過消息傳遞交互關系。
因此,面向對象軟體需求分析的結果能更好地刻畫現實世界,處理復雜問題,對象比過程更具有穩定性,便於維護與復用。
❹ 軟體分析的方法經歷了怎樣一個發展過程
用例分析法
用例分析法,是來自面向對象的分析方法。用例描述系統的用戶和系統本身之間的交互過程,從而對如何使用系統提供了一種詳細的陳述,獲得對系統需求的了解。用例分析,是獲取系統功能需求的一個重要技術。
用例中,用戶術語叫actor。用戶不必是真的人,如果要開發的系統系統對另外一個計算機系統提供服務,那麼,另一個系統就是這個系統的用戶。
一個用例有多個場景組成,一個用例中,所有的場景有著相同的用戶目標。一般包括一個主成功場景和幾個附加的擴展場景,例如在一個網上超市系統,「購物過程」是一個用例,這個用例中,共同的用戶目標就是完成購物。但這個目標可能成功完成,也可能因為什麼原因而失敗。這樣,就有成功實現購物的主場景,還有多個購物失敗的場景:如信用卡失敗,貨物售空等等。
用例中的一個復雜的步驟可能是另一個用例。這就是用例之間的包含關系。
UML用例圖重點說明兩種關系:
用戶和用例的關系。就是那個用戶啟動了哪個用例。
多個用例之間的關系。比如,一個用例包含了其他的用例
用例的幾乎全部的價值在於內容。用例圖本身的價值不大。你在使用用例進行分析的時候,不必過多的致力與用例圖,應該關注與用例的正文內容。這才是這種技術的真正價值所在。
除了簡單的包含關系,UML中還定義了其他的許多關系。但我認為,除了包含關系,以外的其他關系都可以忽略。其他關系除了導致混亂和復雜,幾乎沒有什麼價值。
千萬不要把用例做的太復雜,通常做的過少比做的過多危害要小。如果做的太少,一個短小易讀的文檔,構成發問的起點。如果做的更多,任何人對它將難以閱讀,難以理解。
用例可以按照等級劃分,分為系統用例和業務用例。系統用例重點說明軟體系統的交互,業務用例討論的是一種業務如何響應來自客戶的事件。
還有一種更詳細的分級方法:海級用例,魚級用例和風箏級用例。海級用例描述主參與者和系統之間的一次完整交互,不是任何其他交互過程中的一個步驟。包含在海級內的用例是魚級用例。更高級別的風箏級用例,風箏級用例就是上面的業務用例。如果適應更廣泛的業務交互。
數據流分析法
這個方法來自傳統的結構化分析方法。使用數據流圖描述系統的數據處理模型。
注意:數據流圖描繪的是系統的邏輯模型,圖中沒有具體的物理元素,只是描述信息在系統中流動和處理的情況。
數據流圖在分析和設計的前期使用,數據流圖中的處理,是邏輯上存在的一個過程,開始時不要考慮對應任何具體的軟體實體(不要把處理當成了模塊)。在輸入數據和輸出數據確定的情況下,需要什麼樣的處理,才能由輸入產生輸出?--通過這種思路獲得對系統功能需求的理解。最終究竟由哪個軟體實體來承擔一個處理,是設計階段的事情。最終,有可能一個處理最終由多個軟體實體承擔,也由可能,多個處理由一個軟體實體承擔。甚至可能,某些處理是人工的過程,最終不對應任何的軟體實體---哪部分處理通過用戶手工完成,也是設計的內容。
數據流圖中的數據存儲也不是實際存在的物理實體。
數據流圖的基本要點是描述「做什麼」而不是「如何做」。數據流圖的意義在於分析,而不在於設計。避免數據流圖中的設計的味道。
許多人畫不好數據流圖,是因為在畫數據流圖的過程中。因為他們把數據處理想像成模塊或者對象,把數據存儲看成了具體的數據文件或者資料庫。
另外不要在數據流圖中,表現分支和循環,這樣會造成混亂,畫不出正確的數據流圖。數據流圖中,描繪所有可能的數據流向,而不應該描繪出現某個數據流的條件。--有時候你可把判斷條件當成是輸入的數據。
面向對象與數據流分析
是否可以在面向對象設計中使用數據流分析法,是一個有爭議的話題。大部分講面向對象設計方法的書,都反對在面向對象的方法中使用傳統的結構化的方法。我個人認為,可以使用,但要小心使用。有下面的理由:
數據流圖,涉及了系統內部的分析。而用例分析方法不涉及系統的內部。只通過用例分析系統,總是覺得分析的不夠徹底。
有些系統,本身就是一數據處理為主要任務的,應用的邏輯集中在數據的處理上而不是交互的過程上,不適合使用用例分析法。
數據流圖流傳很久,容易被人看懂,容易在交流中使用。而用例圖使用的人少,許多人對它不熟悉。
在面向對象的設計方法中,使用數據流圖分析後,就要在數據流圖的基礎上抽象對象,數據流圖上的每種元素:數據流,數據存儲;外部實體和數據處理,都可能用來抽象對象。
一般的意義下,在面向對象的程序中,對象或類構成了系統的邏輯結構。而模塊反應了系統的物理結構。模塊的概念往往和具體的編程語言相關,比如在C++中,模塊對應獨立的編譯單元。一個編譯單元中,包含一個或多個緊密相關的類實現。
模塊是一個很不精確的概念。在實際的交流中,甚至在一些正式的文檔上,模塊可能代表任何的軟體實體。特別是在結構化設計方法裡面,模塊可以是單獨命名的,可以通過名字來訪問的任何程序對象的集合,過程,函數,子程序,宏都可以作為模塊。對這種不準確的概念,應該怎樣辦,應該從狹隘的概念中解放出來,應該「求其意而忘其形」。
但要注意:在面向對象的設計過程中,使用數據流圖確實是危險的。注意下面的兩點:
在面向對象的設計過程中使用數據流圖,注意不要回到結構化設計的路子上。
數據流圖,最主要的功能是分析,是幫助程序員理解需求,千萬不要在讓數據流圖有了設計的味道。
JACKSON分析方法
JACKSON方法是一套完成的分析和設計方法。Jackson認為有三種形式的數據結構。、順序、選擇和重復。三種數據結構可以進行任意嵌套,組合。形成復雜的結構體系。JACKSON方法的從目標系統的輸入、輸出數據結構入手,導出程序框架結構,再補充其它細節,就可得到完整的描述程序結構的JACKSON圖。
我在實際中,我沒有完整的使用過JACKSON方法(實際上,我也沒有系統的學習過這種方法)。我只在分析階段,經常使用JACKSON圖描述復雜的要處理的數據的邏輯結構。我把這種只把JACKSON方法用來做分析的方法,稱為JACKSON方法。
JACKSON方法的主要思路,就是:通過對要處理的復雜數據,繪制JACKSON圖進行分析,了解需求。
另外,除了使用JACKSON圖來完成分析,我還使用過JACKSON圖,來描述過復雜配置文件的文件結構。因為JACKSON圖關注與數據的邏輯結構,而不比關心數據的具體存在形式。用來設計配置文件的格式,挺合適的。
在中國移動數據網管系統中。我就使用了這種圖來設計數據轉換配置文件的數據結構。最終,配置文件使用了XML文件。
根據實際情況選擇分析方法
交互型的系統:系統和外部有復雜的交互過程,適合使用用例分析法。有圖形界面的軟體或者服務端常是這種情況。
對數據處理性的系統,可能存在復雜的數據處理流程,系統要求有復雜的數據處理過程,對這樣的,適合使用數據流的分析。
如果被處理數據,有復雜的結構,就適合使用面向數據結構的分析方法。在同一個項目中,可能使用到多種分析方法。
❺ 如何對正在實施的軟體系統(項目)進行問題分析和評估
轉載,供參考。
軟體開發項目進度控制
一、影響軟體開發項目進度的因素
要有效地進行進度控制,必須對影響進度的因素進行分析,事先或及時採取必要的措施,盡量縮小計劃進度與實際進度的偏差,實現對項目的主動控制。軟體開發項目中影響進度的因素很多,如人為因素、技術因素、資金因素、環境因素等等。在軟體開項目的實施中,人的因素是最重要的因素,技術的因素歸根到底也是人的因素。軟體開發項目進度控制常見問題主要是體現在對一些因素的考慮上。常見的問題有以下幾種情況:
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原則,在某些項目進度延遲的情況下增加人手,有可能會使項目的進度更加延後。因為對於新加入本項目的員工來說,對項目相關背景、需求、設計的培訓、對項目環境的熟悉和項目團隊成員之間的溝通路徑的增加,可能會使項目的工作效率急劇下跌。而加班造成的疲勞會再次使工作效率降低。增加激勵會造成工作成本卻不斷的向上攀升。這些措施並不是完全不可取,而是項目經理要考慮適度原則。最好是要全面分析項目進度延遲的原因,如果確實是不合理的項目交付時限要求,就應當通過溝通變更為合理的項目時限要求,以免因為這樣一個不合理的時限要求造成對軟體質量或團隊成員心理上的負面影響,最終導致項目最終的失敗。否則應從技術、團隊成員心態、環境等方面查找原因,找到提高效率、加快進度的方法。