國家示範性軟體學院系列教材 點選檢視第二章 點選檢視第三章 軟體項目管理案例教程(第4版)

韓萬江 姜立新 編著
機械工業出版社China Machine Press
第1章 軟體項目管理概述
1.1 項目與軟體項目
資訊産業是目前發展較快的行業,也是對社會影響較大的行業之一,“軟體”“項目”“軟體項目”等概念已經越來越被大家所熟悉,并且普遍存在于我們生活或者社會的各個方面。軟體行業是一個極具挑戰性和創造性的行業,而軟體項目管理也是一項具有挑戰性的工作,同時也是保證項目成功的必要手段。
1.1.1 項目及其特征
人類社會和日常生活中有很多種活動,然而有的活動我們稱之為項目,有的則不能稱為項目。項目(project)就是為了創造一個唯一的産品或提供一個唯一的服務而進行的臨時性的努力;是以一套獨特而互相聯系的任務為前提,有效地利用資源,在一定時間内滿足一系列特定目标的多項相關工作的總稱。一般來說,日常運作和項目是兩種主要的活動。它們雖然有共同點,例如,它們都需要由人來完成,均受到有限資源的限制,均需要計劃、執行、控制,但是項目是組織層次上進行的具有時限性和唯一性的工作,也許需要一個人,也許涉及成千上萬的人,也許需要100小時完成,也許要用10年完成,等等。“上班”“批量生産”“每天的衛生保潔”等屬于日常運作,不是項目。項目與日常運作的不同是:項目是一次性的,日常運作是重複進行的;項目是以目标為導向的,日常運作是通過效率和有效性展現的;項目是通過項目經理及其團隊工作完成的,日常運作是職能式的線性管理;項目存在大量的變更管理,日常運作基本保持持續的連貫性。下面介紹項目所具有的特征。
1)目标性。項目的目的在于得到特定的結果,即項目是面向目标的。其結果可能是一種産品,也可能是一種服務。目标貫穿于項目始終,一系列的項目計劃和實施活動都是圍繞這些目标進行的。例如,一個軟體項目的最終目标可以是開發一個學生成績管理系統。
2)相關性。項目的複雜性是固有的,一個項目有很多彼此相關的活動,例如,某些活動在其他活動完成之前不能啟動,而另一些活動必須并行實施,如果這些活動互相之間不能協調地開展,就不能達到整個項目的目标。
3)臨時性。項目的臨時性是指項目有明确的起點和終點。臨時性并不意味着項目的持續時間短,而是指項目要在一個限定的期間内完成,是一種臨時性的任務。當項目的目标達到時,意味着項目任務完成。項目管理中的很大一部分精力是用來保證在預定時間内完成項目任務,為此而制定項目計劃進度表,辨別任務何時開始、何時結束。項目任務不同于批量生産。批量生産是相同的産品連續生産,取決于要求的生産量,當生産任務完成時,生産線停止運作,這種連續生産不是項目。
4)獨特性。在一定程度上,項目與項目之間沒有重複性,每個項目都有其獨自的特點。每一個項目都是唯一的。如果一位工程師正在按照規範建造第50棟農場式的住宅,其獨特性一定很低,它的基本部分與已經造好的第49棟是相同的,如果說其有特殊性,也隻是在于其地基的土壤不同,使用了一個新的熱水器,請了幾位新木工,等等。然而,如果要為新一代計算機設計作業系統,則該工作必然會有很強的獨特性,因為這個項目以前沒有做過,可供參考的經驗并不多。
5)資源限制性。每一項目都需要運用各種資源作為實施的保證,而資源是有限的,是以資源是項目成功實施的一個限制條件。
6)不确定性。一個項目開始前,應當在一定的假定和預算基礎上制定一份計劃,但是,在項目的具體實施中,外部因素和内部因素總是會發生一些變化,會存在一定的風險和很多不确定性因素,是以項目具有不确定性。
1.1.2 項目群與項目、項目與子項目的關系
項目群也稱為大型項目(program),是通過協調來進行統一管理的一組互相聯系的項目,它本身可能不是項目。許多大型項目通常包括持續運作的活動。一個大型項目可以了解為比項目高一級别的大項目,如“863計劃”“星火計劃”“登月計劃”“阿波羅登月計劃”等。以“863計劃”為例,它的目标是趕超世界先進水準,集中資源重點投入,争取在我國部分有優勢的高科技領域有所突破,為我國在21世紀的經濟發展和國防安全創造條件。這樣的目标是戰略性的,很難具體化,但它可以通過一系列的具體項目去實施。子項目(subproject)是将項目分解成更小的機關,以便更好地控制項目。項目中的某一階段可以是一個單獨的項目,也可以是一個子項目,一個子項目可以轉包給外部機構的一個單元。在實際工作中,子項目的劃分是很靈活的,可以視項目的需要而定。可以按照階段劃分子項目,如一期項目、二期項目……也可以按照項目的組成部分劃分子項目。
1.1.3 軟體項目
軟體是計算機系統中與硬體互相依存的部分,是包括程式、資料及其相關文檔的完整集合。其中,程式是按事先設計的功能和性能要求執行的指令序列;資料是使程式能正常操縱資訊的資料結構;文檔是與程式開發、維護和使用有關的圖文材料。軟體項目除了具備項目的基本特征之外,還有如下特點。
1)軟體是一種邏輯實體而非具體的實體實體,具有抽象性,這使得軟體與其他的諸如硬體或者工程類項目有很多的不同之處。
2)軟體的生産與硬體不同,開發過程中沒有明顯的制造過程,也不存在重複生産過程。
3)軟體沒有硬體的機械磨損和老化問題,然而,軟體存在退化問題。在軟體的生存期中,軟體環境的變化導緻軟體的失效率提高。
4)軟體的開發受到計算機系統的限制,對計算機系統有不同程度的依賴。
5)軟體開發至今沒有擺脫手工的開發模式,軟體産品基本上是“定制的”,無法利用現有的軟體元件組裝成所需要的軟體。
6)軟體本身是複雜的,其複雜性來自應用領域實際問題的複雜性和應用軟體技術的複雜性。
7)軟體的成本相當高昂,軟體開發需要投入大量資金和高強度的腦力勞動,是以成本比較高。
8)很多軟體工作涉及社會的因素,例如,許多軟體開發受到機構、體系和管理方式等方面的限制。
軟體項目是一種特殊的項目,它創造的唯一産品或者服務是邏輯載體,沒有具體的形狀和尺寸,隻有邏輯的規模和運作的效果。軟體項目不同于其他項目,軟體是一個新領域而且涉及的因素比較多,管理比較複雜。目前,軟體項目的開發遠遠沒有其他領域的項目規範,很多的理論還不适用于所有軟體項目,經驗在軟體項目中仍起很大的作用。軟體項目由互相作用的各個系統組成,系統包括彼此互相作用的部分。軟體項目涉及的因素越多,彼此之間的互相作用就越大。另外,變更也是軟體項目中常見的現象,如需求的變更、設計的變更、技術的變更、社會環境的變更等,這些均說明了軟體項目管理的複雜性。項目的獨特性和臨時性決定項目是漸進明細的,軟體項目更是如此,因為軟體項目比其他項目有更大的獨特性。“漸進明細”表明項目的定義會随着項目團隊成員對項目、産品等的了解和認識的逐漸加深而得到逐漸深入的描述。軟體行業是一個極具挑戰性和創造性的行業,軟體開發是一項複雜的系統工程,牽涉各方面的因素。軟體項目的特征包括需求的不确定性和開發過程中存在技術風險。在實際工作中,經常會出現各種各樣的問題,甚至軟體項目會面臨失敗。如何總結、分析失敗的原因并得出有益的教訓,是今後項目取得成功的關鍵。
1.1.4 軟體項目組成要素
簡單地說,項目就是在既定的資源和要求的限制下,為實作某種目的而互相聯系的一次性工作任務。一個軟體項目的要素包括軟體開發的過程、軟體開發的結果、軟體開發賴以生存的資源及軟體項目的特定委托人(或者說是客戶,既是項目結果的需求者,也是項目實施的資金提供者)。
1.1.5 項目目标實作的制約因素
項目目标就是在一定時間、預算内完成項目範圍内的事項,以使客戶滿意。一個成功的項目應該在項目允許的範圍内滿足成本、進度要求,并達到客戶滿意的産品品質。是以,項目目标的實作受4個因素制約:項目範圍、成本、進度計劃和客戶滿意度,如圖11所示。項目範圍是為使客戶滿意必須做的所有工作。成本是完成項目所需要的費用。進度計劃安排每項任務的起止時間及所需的資源等,為項目描繪一個過程藍圖。客戶滿意度取決于所傳遞成果的品質,隻有客戶滿意才可以更快地結束項目,否則會導緻項目的拖延,進而增加額外的費用。
1.2 項目管理
項目普遍存在于人們的工作和生活中,如何管理這些項目是一項需要研究的任務。項目管理起源于美國,20世紀40~50年代主要應用于國防和軍工項目,後來廣泛應用于工商、金融、資訊等産業及行政管理領域。目前,項目管理已經成為綜合多門學科的新興研究領域,其理論來自項目管理的工作實踐。項目管理是指把各種系統、方法和人員結合在一起,在規定的時間、預算和品質目标範圍内完成項目的各項工作。對于一個組織的管理而言,項目管理主要包括3個部分,即戰略管理、運作管理、項目管理。
- 戰略管理(strategy management)是從宏觀上幫助企業明确和把握發展方向的管理。
- 運作管理(operation management)是對日常性、重複性工作的管理。
- 項目管理(project management)是對一次性、創新性工作的管理。
項目是企業的最小盈利機關,項目管理自然成為構築企業利潤的基石,從這種意義上說,項目管理是企業的核心競争力所在。由于項目管理具有效率高、反應靈敏的優點,是以更多的企業希望采取項目式管理(management by project)的方式,及時響應使用者需求,使管理更高效,進而提高企業的管理品質。
實施項目管理可以提高項目的效益。這裡所指的效益是一個綜合性名額,包括低風險、高産出等。是以,不難得出我們在實施項目管理時應該掌握的度,即引入項目管理所産生的效益減去項目管理的實施成本後必須大于未引入項目管理時的效益。由于項目管理的效益與項目管理的複雜度(項目管理的成本)并非線性相關,是以項目管理的複雜度必然存在一個最優值,這就是我們應該掌握的度,這個度被大家認可并且能夠被準确地了解和實施。
1.2.1 項目管理背景
随着世界由工業時代進入資訊時代,時空概念的根本改變加劇了項目的複雜性和可變性。項目涉及的範圍和時間、空間跨度都在以空前的速度擴大。而随着行業競争的加劇,項目隻有在最少時間、最低成本的情況下完成才有意義。項目本身的複雜性和巨大風險及在分工合作中個人經驗的不确定性,使個人經驗已無法確定項目的成功或按時完成。
項目管理是20世紀50年代後期發展起來的一種計劃管理方法,它一出現就引起廣泛關注。1957年,美國杜邦公司把這種方法應用于裝置維修,把維修停工時間由125小時銳減為78小時。1958年,美國人在北極星飛彈設計中應用項目管理技術,把設計完成時間縮短了兩年。由于項目管理在運作方式和管理思維模式上最大限度地利用了内外資源,從根本上改善了管理人員的工作程式,提高了效率,降低了風險,是以自20世紀60年代以來它被廣泛運用于航空航天、國防、資訊、建築、能源、化工、制造、環保、交通運輸、金融、營銷、服務、法律等行業。它不僅适用于大公司,而且适用于小型企業。目前,在全球發達國家的政府部門和企業機構中,項目管理已成為運作的中心模式。
1.2.2 項目管理定義
項目管理是指一定的主體,為了實作其目标,利用各種有效的手段,對執行中的項目周期的各階段工作進行計劃、組織、協調、指揮、控制,以取得良好經濟效益的各項活動的總和。通過項目各方幹系人的合作,把各種資源應用于項目,以實作項目的目标,使項目幹系人的需求得到不同程度的滿足。是以,項目管理是一系列伴随着項目的進行而進行的管理行為,目的是確定項目能夠達到期望結果。要想滿足項目幹系人的需求和期望,達到項目目标,需要在下面這些互相有沖突的要求之間尋求平衡:
1)範圍、時間、成本和品質。
2)有不同需求和期望的項目幹系人。
3)明确表示出來的要求(需求)和未明确表達的要求(期望)。
項目管理有時被描述為對連續性操作進行管理的組織方法。這種方法,更準确地說應該稱為“由項目實施的管理”,它是将連續性操作的許多方面作為項目來對待,以便對其可以采用項目管理的方法。是以,對于一個通過項目實施管理的組織而言,其對項目管理的認識顯然是非常重要的。項目管理是要求在項目活動中運用知識、技能、工具和技術,以便達到項目目标的活動。項目管理類似飛彈發射的控制過程,需要一開始設定好目标,然後在飛行中鎖定目标,同時不斷調整飛彈的方向,使之不能偏離正常的軌道,最終擊中目标。軟體項目管理是為了使軟體項目能夠按照預定的成本、進度、品質順利完成,而對成本、人員、進度、品質、風險等進行分析和管理的活動。
1.2.3 軟體項目管理的特征及重要性
軟體項目管理是軟體工程的重要組成部分,它能確定軟體項目滿足預算、成本等限制,送出高品質的軟體産品。好的項目管理不能保證項目成功,但是不好的項目管理一定會造成項目失敗,如軟體可能會延遲,成本可能超支,或者項目無法滿足客戶的期望。
目前社會的特點是“變化”,而這種變化在資訊産業中展現得尤為突出:技術創新速度越來越快,使用者需求與市場不斷變化,人員流動也大大加快。在這種環境下,企業需要應對的變化及由此帶來的挑戰大大增加,也給管理帶來了很多問題和挑戰。目前軟體開發面臨很多問題,例如:
1)在有限的時間、資金下,要滿足不斷增長的軟體産品品質要求。
2)開發的環境日益複雜,代碼共享日益困難,需跨越的平台增多。
3)程式的規模越來越大。
4)軟體的重用性需求提高。
5)軟體的維護越來越困難。
是以,軟體項目管理顯得更為重要。軟體項目管理是在20世紀70年代中期由美國提出的,當時美國國防部專門研究了軟體開發不能按時送出、預算超支和品質達不到使用者要求的原因,結果發現70%的項目是由管理不善引起的,而非技術原因。于是,軟體開發者開始逐漸重視軟體開發中的各項管理問題。
軟體項目管理和其他項目管理相比具有以下特殊性。
1)軟體是純知識産品,其開發進度和品質很難估計和度量,生産效率也難以預測和保證。與普通的項目不同,軟體項目的傳遞成果事先看不見,并且難以度量,特别是很多應用軟體項目已經不再是業務流程的電子化,而是同時涉及業務流程再造或業務創新。是以,在項目早期,客戶很難描述清楚需要送出的軟體産品,但這一點對軟體項目的成敗又是至關重要的。與此沖突的是,公司一般安排市場銷售人員負責談判,其重點是迅速簽約,而不是如何傳遞,甚至為了盡早簽約而過度承諾,遇到模糊問題時也怕因為解釋而節外生枝,是以避而不談,而甲方為了保留回旋餘地,也不願意說得太清楚,更不願意主動提出來(因為甲方還有最終驗收的主動權)。等到項目經理一旦接手項目,所有這些沒有說清楚的隐患和口頭承諾都将暴露出來,并最終由項目經理承擔。
2)項目周期長,複雜度高,變數多。軟體項目的傳遞周期一般比較長,一些大型項目的周期可以達到2年以上。這樣長的時間跨度内可能發生各種變化。軟體系統的複雜性導緻了開發過程中各種風險的難以預見和控制。從外部來看,商業環境、政策法規變化會對項目範圍、需求造成重大影響。例如,作者曾經從事的金融項目臨近上線時,國家推出了“利息稅”政策,造成整個系統的大幅變更。從内部來看,組織結構、人事變動等對項目的影響更加直接。有時,伴随着新的上司到任,其思路的變化,甚至對項目的重視程度的變化,都可能直接影響項目的成敗。
3)軟體需要滿足一群人的期望。軟體項目提供的實際上是一種服務,服務品質不僅僅是最終傳遞的品質,更重要的是客戶的體驗。實際上,項目中的“客戶”不是一個人,而是一群人。他們可能來自多個部門,并且對項目的關注點不同,在項目中的利益也不同。是以,當我們談到滿足“客戶需求”時,實際的意思是滿足一群想法和利益各不相同的人的需求。
是以,進行軟體項目管理是必要的。軟體項目管理的根本目的是讓軟體項目尤其是大型項目的生命周期能在管理者的控制之下,以預定成本按期、按質地完成軟體項目,并且傳遞使用者使用。而研究軟體項目管理是為了從已有的成功或失敗的案例中總結出能夠指導今後開發的通用原則、方法,以避免重犯前人的錯誤。
實際上,軟體項目管理的意義不僅僅如此,進行軟體項目管理有利于将開發人員的個人開發能力轉化成企業的開發能力,企業的軟體開發能力越高,表明企業的軟體生産越趨于成熟,企業越能夠穩定發展,進而減小開發風險。
1.3 項目管理知識體系
以前,有人認為項目管理是一種“意外的職業”。因為常常是人們在項目中先承擔了項目責任(可能從技術開發開始),然後随着項目經驗的逐漸豐富,最後順理成章地當上項目經理。由此看來,管理一個項目的有關知識不是通過系統學習得來的,而是在實踐中摸索出來的,然而在摸索的過程可能會導緻嚴重損失。近年來,在減小項目管理意外性方面已經有了很大進步。很多企業的決策者日益認識到項目管理方法可以幫助他們在複雜的競争環境中取得成功。為了減少項目管理的意外性,許多機構或者企業開始要求雇員系統地學習項目管理技術,努力成為經認證合格的項目管理人員。
項目管理專業人員資格(Project Management Professional,PMP)是美國項目管理學會(Project Management Institute,PMI)開發并負責組織實施的一種專業資格認證。PMP認證可以為個人的事業發展帶來很多好處。該項認證已經獲得世界上100多個國家的承認,可以說是目前全球認可程度很高的項目管理專業認證,也是項目管理資格的重要标志之一,具有國際權威性。在世界很多國家,特别是發達國家,PMP已經被認為是合格項目管理的标志之一。
項目管理知識體系(Project Management Body Of Knowledge,PMBOK)是由PMI組織開發的一套關于項目管理的知識體系。它是PMP考試的關鍵材料,為所有的項目管理提供了一個知識架構。
項目管理知識體系(PMBOK 2017)包括項目管理的10個知識領域、5個标準化過程組及49個子產品。這10個知識領域分别是:項目內建管理(project integration management),項目範圍管理(project scope management),項目進度管理(project schedule management),項目成本管理(project cost management),項目品質管理(project quality management),項目資源管理(project resource management),項目溝通管理(project communication management),項目風險管理(project risk management),項目采購管理(project procurement management),項目幹系人管理(project stakeholder management)。10個知識領域包括的管理要素如圖1-2所示。
1.3.1 項目管理的知識領域
項目管理的知識領域分布在項目進展過程中的各個階段,它們的關系可以這樣描述:
- 為了成功實作項目的目标,首先必須設定項目的工作和管理範圍,即項目範圍管理(what to do)。
- 為了正确實施項目,需要對項目的時間、品質、成本三大目标進行分解,即項目進度管理(when)、項目品質管理(how good)、項目成本管理(how much)。
- 在項目實施過程中,需要投入足夠的人力、物力,即項目資源管理(people and motivation)、項目采購管理(partner)。
- 為了對項目團隊人員進行管理,讓大家目标一緻地完成項目,需要溝通,即項目溝通管理和項目幹系人(相關方)管理(understand and be understood)。
- 項目在實施過程中會遇到各種風險,是以要進行風險管理,即項目風險管理。
- 項目管理一定要協調各個方面,不能隻顧局部的利益和細節,是以需要內建管理,即項目內建管理。
項目管理的知識領域具體描述如下。
1.項目內建管理
項目內建管理包括為識别、定義、組合、統一和協調各項目管理過程組的各個過程和活動而開展的過程與活動,如圖1-3所示。項目內建管理貫穿于項目的全過程,在項目的整個生命周期内,協調管理其他各管理知識域,将項目管理的方方面面內建為一個有機整體,保證項目總目标的實作。項目內建管理的目标在于對項目中的不同組成元素進行正确、高效的協調,而不是對所有項目組成元素進行簡單相加。
2.項目範圍管理
項目範圍是為了傳遞具有特定屬性和功能的産品而必須完成的工作。項目範圍管理包括確定項目做且隻做所需的全部工作以成功完成項目的各個過程,如圖1-4所示。範圍管理主要定義項目需要完成的工作,確定項目包含且隻包含所有需要完成的工作。範圍管理定義可以控制項目包含什麼内容和不包含什麼内容。
3.項目進度管理
項目進度管理包括為管理項目按時完成所需的各個過程,如圖1-5所示。按時送出項目是項目經理的較大挑戰之一,時間是靈活性最小的控制元素,進度是導緻項目沖突的最主要原因,尤其在項目的後期,是以項目管理者學習進度管理過程尤為重要。
4.項目成本管理
項目成本管理包括為使項目在準許的預算内完成而對成本進行規劃、估算、預算、融資、籌資、管理和控制的各個過程,是在項目具體實施過程中為確定完成項目所花費的實際成本不超過預算而開展的管理活動,如圖1-6所示。
5.項目品質管理
項目品質管理包括把組織的品質政策應用于規劃、管理、控制項目和産品的品質要求,以滿足相關方的期望的各個過程,如圖1-7所示。項目品質管理要求保證該項目能夠兌現它關于滿足各種需求的承諾,涵蓋與決定品質工作的政策、目标和責任的管理功能有關的各種活動。
6.項目資源管理
項目資源管理包括識别、擷取和管理所需資源以成功完成項目的各個過程,如圖1-8所示。
7.項目溝通管理
項目溝通管理包括為確定項目資訊及時且恰當地規劃、收集、生成、釋出、存儲、檢索、管理、控制、監督和最終處置所需的各個過程,如圖1-9所示。項目溝通管理确定項目人員的溝通需求和需要的資訊,即确定誰需要什麼資訊、什麼時候需要以及如何擷取這些資訊。
8.項目風險管理
項目風險管理包括規劃風險管理、識别風險、實施風險分析、規劃風險應對、實施風險應對和監督風險的各個過程,如圖1-10所示。項目風險管理是決定采用什麼方法和如何規劃項目風險的活動,是指對項目風險從識别到分析乃至采取應對措施等一系列過程。它包括将積極因素所産生的影響最大化和使消極因素産生的影響最小化兩方面内容。
9.項目采購管理
項目采購管理包括從項目團隊外部采購或擷取所需産品、服務或成果的各個過程,如圖1-11所示。為了滿足項目的需求,項目組織需要從外部擷取某些産品,這就是采購。采購的意義是廣義的,可能是采購物品,也可能是采購服務(如軟體開發等),還包括收集有關産品的資訊,進行擇優選購。
10.項目幹系人管理
項目幹系人管理也稱為項目相關方管理,包括用于開展下列工作的各個過程:識别影響或受項目影響的人員、團隊或組織,分析相關方對項目的期望和影響,制定合适的管理政策來有效調動相關方參與項目決策和執行,如圖1-12所示。
項目幹系人管理主要通過溝通管理滿足項目相關人員的需求和期望,同時解決問題。幹系人管理還關注與相關方的持續溝通,以便了解相關方的需要和期望,解決實際發生的問題,管理利益沖突,促進相關方合理參與項目決策和活動。應該把相關方滿意度作為一個關鍵的項目目标來進行管理。
1.3.2 标準化過程組
按照項目管理生命周期,項目管理知識體系分為5個标準化過程組,也稱為項目管理生命周期的5個階段,即啟動過程組、計劃過程組、執行過程組、控制過程組、收尾過程組(見圖1-13)。每個标準化過程組由一個或多個過程組成。它們的關系定義如下。
1)啟動過程組:主要确定一個項目或一個階段可以開始了,并要求着手實行;定義和授權項目或者項目的某個階段。
2)計劃過程組:為完成項目所要達到的商業要求而進行的實際可行的工作計劃的設計、維護,確定實作項目的既定商業目标。計劃基準是後面跟蹤和監控的基礎。
3)執行過程組:根據制定的基準計劃,協調人力和其他資源,執行項目管理計劃或相關的子計劃。執行過程存在兩個方面的輸入,一個是根據原來的基準來執行,另一個是根據監控中發現的變更來執行。主要變更必須在整體變更控制得到準許後才能夠執行。
4)控制過程組:通過監督和檢測過程確定項目達到目标,必要時采取一些修正措施。內建變更控制是一個重要的過程。
5)收尾過程組:取得項目或階段的正式認可并且有序地結束該項目或階段。向客戶送出相關産品,釋出相關的結束報告,更新組織過程資産并釋放資源。
各個過程組通過其結果進行連接配接,一個過程組的結果或輸出是另一個過程組的輸入。其中,計劃過程組、執行過程組和控制過程組是核心管理過程組。表1-1所示為PMBOK的5個标準化過程組、10個知識領域、49個子產品之間的關系。
1.4 軟體項目管理知識體系
1.4.1 軟體過程定義
所謂過程,簡單來說就是人們做事情的一種固有的方式。做任何事情都存在過程,小到日常生活中的瑣事,大到工程項目。對于做一件事,有相關經驗的人對完成這件事的過程很了解,會知道完成這件事需要經曆幾個步驟,每個步驟都完成什麼事,需要什麼樣的資源和什麼樣的技術,等等,因而可以順利地完成工作。沒有經驗的人對過程不了解,就會有無從着手的感覺。如圖1-14所示,如果項目人員将關注點隻放在最終産品上,不關注期間的開發過程,那麼不同的開發隊伍或者個人可能會采用不同的開發過程,結果是開發的産品品質是不同的,有的品質好,有的品質差,這完全依賴于個人的素質和能力。
反之,如圖1-15所示,如果項目人員将項目的關注點放在項目的開發過程上,不管誰來做,也不管需求是什麼,均采用統一的開發過程,即企業的關注點在過程,則經過同一企業過程開發的軟體,其産品品質是一樣的。可以通過不斷提高過程的品質來提高産品的品質。這個過程是公司能力的展現,是不依賴于個人的。也就是說,産品的品質依賴于企業的過程能力,不依賴于個人能力。
軟體過程不能簡單地了解為軟體産品的開發流程,因為我們要管理的并不隻是軟體産品開發的活動序列,而是軟體開發的最佳實踐。軟體過程包括流程、技術、産品、活動間關系、角色、工具等,是軟體開發過程中各方面因素的有機結合。是以,在軟體過程管理中,首先要進行過程定義,将過程以一種合理的方式描述出來,并建立起企業内部的過程庫,使過程成為企業内部可以重用的共享資源。對于過程,要不斷地進行改進,以不斷地改善和規範過程,進而幫助企業提高生産力。如果将一個軟體生産類比為一個工廠的生産,那麼生産線就是過程,産品按照生産線的規定過程進行生産。
軟體開發的風險之是以大,是因為軟體過程能力低,其中關鍵的問題在于軟體開發組織不能很好地管理其軟體過程,為此必須強調和加強軟體開發過程的控制和管理。軟體項目的開發過程主要有系統調研、需求分析、概要設計、詳細設計、編碼、測試、實施與維護等。不同軟體項目的過程大體相同,但不同項目的每一個過程所包含的一系列具體的開發活動(子過程)千差萬别,而且不同的項目組采用不同的開發技術,使用不同的技術路線,其開發過程的側重點也不一樣。是以,項目經理在軟體項目開發前,需根據所開發的軟體項目和項目組的實際情況,建立起一個穩定、可控的軟體開發過程模型,并按照該過程來進行軟體開發,這是項目成功的基本保證。
軟體過程是極其複雜的過程。我們知道,軟體是由需求驅動的,有了使用者應用的實際需求才會引發開發一個軟體産品。軟體産品從需求的出現到最終産品的出現,要經曆一個複雜的開發過程。軟體産品在使用時要根據需求的變更進行不斷的修改,這稱為軟體維護。我們把用于從事軟體開發及維護的全部技術、方法、活動、工具,以及它們之間的互相變換統稱為軟體過程。由此可見,軟體過程的外延非常大,包含的内容非常多。對于一個軟體開發機構來說,做過一個軟體項目,無論成功與否,都能夠或多或少地從中總結出一些經驗。做過的項目越多,其經驗越豐富,特别是一個成功的開發項目,從中可以總結出一些完善的過程,我們稱之為最佳實踐(best practice)。最佳實踐開始是存放在成功者的頭腦中的,很難在機構内部共享和重複利用并發揮其應有的效能。長期以來,這些本應從屬于機構的巨大的财富被人們所忽視,這無形中給機構帶來了巨大的損失,當人員流動時,這種企業的财富也随之流失,并且使這種财富無法被其他的項目再利用。過程管理就是對最佳實踐進行有效的積累,形成可重複的過程,使最佳實踐可以在機構内部共享。過程管理的主要内容包括過程定義與過程改進。過程定義是對最佳實踐加以總結,以形成一套穩定的、可重複的軟體過程。過程改進是根據實踐對過程中有偏差或不切合實際的地方進行優化的活動。通過實施過程管理,軟體開發機構可以逐漸提高其軟體過程能力,從根本上提高軟體生産能力。
1.4.2 過程管理在軟體項目中的作用
前面介紹了過程在軟體開發中的重要性。對于軟體這種産品來講,軟體過程具有非常重要的意義。對于一件家具,其品質好主要有兩方面的因素:一是用于生産這件家具的材料的品質要好,否則很難有好的家具;二是生産的加工工藝要好。早期的家具是以手工制造為主的,由于工匠的手藝不同,産品的品質參差不齊。随着技術的不斷發展,材料方面得到了進一步的提高,同時在産品的加工上更多地引入了高技術含量的木工機械,是以産品的加工能力和品質的穩定性都得到了很大程度的提高。軟體産品在生産上有一定的特殊性。首先,軟體産品沒有實體的存在實體,它完全是高度邏輯化的聚合體,是以在品質因素的構成上不存在材料品質的因素,因而,在生産過程中唯一影響産品品質的是産品的生産工藝。生産工藝在軟體工程中的術語就是軟體過程。軟體過程管理對軟體産業的發展非常重要。軟體産業發展中的重要問題是要注重循序漸進地積累,不僅積累技術實踐,更為重要的是積累我們所欠缺的管理實踐,這樣才能保證企業生産力持續發展,滿足業務發展的需要。軟體過程管理有助于軟體組織對過程資産進行有效管理,使之可以重用于實際項目中,并結合從項目中擷取的過程的實際應用結果來不斷地改進過程。這樣軟體組織能夠有能力改變自身的命運,将它從維系在一個或幾個個體身上變成維系在企業内部的管理上。過程管理讓軟體組織直覺感覺到的最明顯的轉變就是軟體項目中的所有成員的位置可以替換。
1.4.3 過程管理與項目管理知識體系的關系
顧名思義,過程管理就是對過程進行管理,其目的是要讓過程能夠被共享、重用,并得到持續改進。在軟體行業,要管理的是軟體過程。過程管理與項目管理在軟體組織中是兩項重要的管理,項目管理用于保證項目的成功,而過程管理用于管理最佳實踐。這兩項管理并不是互相孤立的,而是有機地、緊密地相結合的。圖1-16中展現的是過程管理和項目管理的基本關系。過程管理的成果即軟體過程可以輔助項目管理的工作,在項目的計劃階段,項目計劃的最佳參考是過去的類似項目中的實踐經驗,這些内容通過過程管理成為工作成果,這些成果對于一個項目的準确估算和合理計劃非常有幫助。合理的計劃是項目成功管理的基礎。在項目計劃的執行過程中,計劃将根據實際情況不斷地調整,直到項目結束時,項目計劃才能真正穩定下來。這份計劃及其變更曆史是過程管理中的過程改進的最有價值的參考。在國外的成熟的軟體組織内部,每個項目開發完成後必須提供“軟體過程改進建議”文檔,這是從軟體開發項目的過程中提煉出來的對軟體過程改進的建議。過程的改進注重從項目的實際經驗中不斷地将最佳實踐提煉出來。
所有的軟體過程構成了軟體項目管理的過程體系,對應PMBOK的5個過程組、10個知識領域。大家最熟悉的過程組應該是執行過程組,如需求分析過程、設計過程、編碼過程、測試過程等,如圖1-17所示。計劃過程組有範圍計劃、進度計劃、成本計劃、品質計劃等,控制過程組與計劃過程組是一一對應的,控制的對象就是執行過程。當然,軟體項目管理同樣有初始過程和結束過程。這樣就形成了軟體項目管理的過程體系。目前軟體項目管理過程沒有公認的體系标準,具體項目可以有适合自己的過程要求。
1.5 靈活項目管理
1.5.1 軟體項目面臨的挑戰
軟體項目是一類特殊項目,它是腦力成果,而且依賴使用者需求,具有不斷變化的特征。軟體開發具有唯一性,是一次性的,這些都決定了軟體項目全部工程化有一定的難度。從系統角度看軟體項目,傳統軟體開發面臨很多挑戰,如品質問題、測試問題、使用者問題、進度問題、成本問題、團隊的溝通問題等。是以,軟體項目需要快速的開發過程,快速變化的環境要求快速的開發和快速的送出,這促進了靈活模型的産生。靈活軟體開發(agile software development)是一個靈活的開發方法,用于在一個動态的環境中向幹系人快速傳遞産品。其主要特點是關注持續地傳遞價值,通過疊代和快速的使用者回報管理不确定性和應對變更。
由于高新技術的出現及技術更疊越來越快,産品的生命周期日益縮短。企業要面對新的競争環境,抓住市場機遇,迅速開發出使用者所需要的産品,就必須實作靈活反應。與此同時,業界不斷探尋适合軟體項目的開發模式,其中,靈活軟體開發模式越來越得到大家的關注和采用。
高度不确定的項目變化速度快,複雜性和風險也高。這些特點可能會給傳統預測法帶來問題。傳統預測法旨在預先确定大部分需求,并通過變更請求過程控制變更。而靈活方法的出現是為了在短時間内探讨可行性,根據評估和回報快速調整。
1.5.2 靈活思維
2001年年初,許多公司的軟體團隊陷入了不斷增長的過程的泥潭,一批業界專家聚集在一起概括出一些可以讓軟體開發團隊能快速工作、響應變化的價值觀和原則,他們稱自己為靈活聯盟。在随後的幾個月中,他們發表了一份價值觀聲明,即《靈活宣言》(The Agile Manifesto),涉及靈活模型核心價值,内容如下。
- 個體和互動勝過過程和工具(individual and interaction over process and tool)。
- 可以工作的軟體勝過面面俱到的文檔(working software over comprehensive documentation)。
- 客戶合作勝過合同談判(customer collaboration over contract negotiation)。
- 響應變化勝過遵循計劃(responding to change over following a plan)。
靈活宣言代表了靈活的核心價值。靈活模型是靈活組織提出的一個靈活快速開發方法,可以應對迅速變化的需求,是一種疊代、循序漸進的開發方法。是以,靈活開發過程是慢慢改進的,而非一蹴而就的。靈活模型的4個核心價值對應12個靈活原則,具體如下所示。
1)最先要做的是通過盡早地、持續地傳遞有價值的軟體來使客戶滿意。
2)即使到了開發的後期,也歡迎改變需求。靈活過程利用适應變化來為客戶創造競争優勢。
3)經常性地傳遞可以工作的軟體,傳遞的間隔可以從幾個星期到幾個月,傳遞的時間間隔越短越好。
4)在整個項目開發期間,業務人員和開發人員盡可能地在一起工作。
5)圍繞被激勵起來的個體組成團隊來建構項目,給他們提供所需的環境與支援,并且信任他們能夠完成工作。
6)在團隊内部及團隊之間,最有效果并且最有效率的傳遞資訊的方式就是面對面的交流。
7)可以工作的軟體是首要的進度度量标準。
8)靈活過程提倡平穩的開發。發起人、開發者和使用者應該能夠保持一個長期的、恒定的開發速度。
9)不斷地關注優秀的技能和好的設計會增強靈活的能力。
10)簡單——使未完成的工作最大化的藝術,是根本的。
11)最好的架構、需求和設計出自于自組織的團隊。
12)每隔一定的時間,團隊會在如何才能更有效地工作方面進行檢討,然後相應地調整自己的行為。
可以看到,第1個原則強調盡早持續送出有價值的軟體,第2個原則強調适應需求變更,第3個原則強調短周期送出,第4個原則強調客戶參與開發,其他以此類推。盡管這些原則源自軟體行業,但已經擴充到許多其他行業。這種思維模式、價值觀和原則定義了靈活方法的組成部分。今天所使用的各種靈活方法都植根于靈活思維模式、價值觀和原則,它們之間的關系如圖1-18所示。
圖1-18是在艾哈邁德·西德基啟發下提出的模式,它将靈活明确表述為一種思維模式,由《靈活宣言》的價值觀所界定,受《靈活宣言》原則指導,并通過各種實踐實作。總之,靈活方法是一個囊括了各種架構和方法的術語,它指的是符合《靈活宣言》價值觀和原則的任何方法、技術、架構、手段或實踐。靈活思維主要展現在快速傳遞成果并獲得早期回報,同時強調以一種透明的方式工作。例如,在圖1-19中,第一種方式是比較模糊的項目管理方式,而第二種方式則更加透明和具體。
靈活軟體開發是一種面臨迅速變化的需求快速開發軟體的能力,是對傳統生存期模型的挑戰,也是對複雜過程管理的挑戰;是一種以人為核心的、疊代的、循序漸進的開發方法;是一種輕量級的軟體開發方法。傳統軟體開發更傾向于不考慮項目後續需求的變化,在項目開始時預測使用者需求,然後當機需求,制定相應的開發計劃,再按照計劃執行。與之形成鮮明對比的是,靈活軟體開發通過不斷的使用者回報動态調整需求,最終達成目标。這種自适應的特性使得靈活開發的産品更符合實際需求,如圖1-20所示。
随着雲技術和靈活思路的發展,雲原生(cloud native)産生了。雲原生是Matt Stine提出的一個概念,它是一個思想的集合,包括DevOps、持續傳遞(continuous delivery)、微服務(micro service)、靈活基礎設施(agile infrastructure)、康威定律(Conways law)等。雲原生包含了一組應用的模式,用于幫助企業快速、持續、可靠、規模化地傳遞業務軟體。雲原生由微服務架構、DevOps和以容器為代表的靈活基礎架構組成。
1.6 本書的組織結構
軟體項目管理不同于其他領域的項目管理,有很多的特殊性。軟體工程遠遠沒有建築工程等領域規範化,經驗在軟體項目管理中起很重要的作用。
本書分為5篇,前4篇代表軟體項目管理的4個階段,即項目初始、項目計劃、項目執行控制、項目結束,如圖1-21所示。最後是“項目實踐”篇。項目計劃和項目執行控制是項目管理最重要的兩項任務。在項目的前期,項目經理完成項目初始和項目計劃階段的工作,這個階段的重點是明确項目的範圍和需求,并據此計劃項目的活動,進行項目的估算和資源配置設定、進度表的排定等。在項目計劃完成後,整個項目團隊按照計劃的安排來完成各項工作。在工作進展的過程中,項目經理要通過多種途徑來了解項目的實際進展情況,并檢查與項目計劃之間是否存在偏差。出現偏差意味着工作沒有按照計劃的預期來進行,這有可能對項目的最終結果産生重大影響,是以需要及時調整項目計劃。調整計劃要具體問題具體分析,先要找到問題發生的原因,然後給出相應的應對措施。在實際項目的進展過程中,計劃工作與跟蹤工作會交替進行,核心是圍繞着最終的項目目标。
1.項目初始
項目初始是軟體項目管理的第一個階段,包括項目立項、招投标、合同(或者協定)的确定,明确軟體要完成的主要功能,以及項目開發的階段周期等。是以,“項目初始”篇又分兩章,主要内容包括項目确立、生存期模型,如圖1-22所示。
2.項目計劃
項目計劃是建立項目行動指南的基準,包括對軟體項目的估算、風險分析、進度規劃、團隊人員的選擇與配備、産品品質規劃等,用于指導項目的程序發展。軟體項目的預算可提供一個控制項目成本的尺度,為将來的評估提供參考,是項目進度安排的依據。最後形成的項目計劃書将作為跟蹤控制的依據。是以,“項目計劃”篇依次講述了範圍計劃、成本計劃、進度計劃、品質計劃、配置管理計劃、團隊計劃、風險計劃、合同計劃等,如圖1-23所示。
3.項目執行控制
一旦建立了基準計劃就必須按照計劃執行,包括按計劃執行項目和控制項目,以使項目在預算内按進度并使顧客滿意地完成。在這個階段,項目管理過程包括測量實際的程序,并與計劃程序相比較,同時發現計劃的不當之處。為了測量實際的程序,掌握實際上已經開始或結束的任務、已投入的資金等很重要。如果實際程序與計劃程序的比較顯示出項目落後于計劃、超出預算或沒有達到技術要求,就應該采取糾正措施,以使項目能恢複到正常軌道,或者更正計劃的不合理之處。
是以,項目執行控制是對所有計劃執行控制的過程。“項目執行控制”篇又分3章,主要内容包括內建計劃執行控制、核心計劃執行控制、輔助計劃執行控制,如圖1-24所示。
4.項目結束
項目管理的最後環節是項目的結束過程。項目的特征之一是它的一次性。項目結束期的主要工作是适時地做出項目終止的決策,确認項目實施的各項成果,進行項目的交接和清算等,同時對項目進行最後評審,并對項目進行總結。項目結束路線圖如圖1-25所示。
5.項目實踐
為了配合課程的實踐環節,本書要求學生針對“軟體項目管理線上學習網站”(簡稱SPM)這個情景項目完成項目管理實踐。将學生進行分組,每組5人,每組代表一個團隊,并且每個團隊有自己的名稱,學生以團隊形式完成這個情景項目的項目管理實踐環節。
1.7 小結
本章講述了軟體項目管理的概念、特點、過程及其重要性。過程管理在軟體項目管理中起重要作用,通過不斷地優化和規範過程,可以幫助企業提高軟體的生産能力。軟體項目管理包括4個階段:項目初始、項目計劃、項目執行控制和項目結束。另外,本章闡述了項目管理知識體系(PMBOK),給出了軟體項目管理的知識體系,同時介紹了靈活項目管理概念。最後,本章給出了軟體項目管理的路線圖。
記住:對軟體項目的了解越深刻,項目開發和管理的經驗越多,就越能管理好項目。項目管理是漸進明細的過程,它是一門靈活性和實踐性很強的學科,不可死記硬背,項目管理沒有唯一的标準,隻有最适合特定項目的管理方法。
1.8 練習題
一、填空題
1.靈活模型包括 個核心價值,對應 個靈活原則。
2.項目管理包括 、 、 、 、 5個過程組。
二、判斷題
1.搬家屬于項目。( )
2.項目是為了創造一個唯一的産品或提供一個唯一的服務而進行的永久性的努力。( )
3.過程管理的目的是要讓過程能夠被共享、複用,并得到持續的改進。( )
4.項目具有臨時性的特征。( )
5.日常運作存在大量的變更管理,而項目基本保持連貫性。( )
6.項目開發過程中可以無限制地使用資源。( )
7.相比傳統開發的預測性過程,靈活開發屬于自适應過程。( )
三、選擇題
1.下列選項中不是項目與日常運作的差別的是( )。
A.項目是以目标為導向的,日常運作是通過效率和有效性展現的
B.項目是通過項目經理及其團隊工作完成的,而日常運作是職能式的線性管理
C.項目需要有專業知識的人來完成,而日常運作的完成無須特定專業知識
D.項目是一次性的,日常運作是重複進行的
2.以下都是日常運作和項目的共同之處,除了( )。
A.由人來做
B.受制于有限的資源
C.需要規劃、執行和控制
D.都是重複性工作
3.下面選項中不是PMBOK的知識域的是( )。
A.招聘管理
B.品質管理
C.範圍管理
D.風險管理
4.下列選項中屬于項目的是( )。
A.上課
B.社群保安
C.野餐活動
D.每天的衛生保潔
5.下列選項中正确的是( )。
A.一個項目具有明确的目标而且周期不限
B.一個項目一旦确定就不會發生變更
C.每個項目都有自己的獨特性
D.項目都是一次性地由項目經理獨自完成
6.( )是為了創造一個唯一的産品或提供一個唯一的服務而進行的臨時性的努力。
A.過程
B.項目
C.項目群
D.組合
7.下面選項中不是《靈活宣言》中的内容的是( )。
A.個體和互動勝過過程和工具
B.可以工作的軟體勝過面面俱到的文檔
C.靈活開發過程是自适應的過程
D.響應變化勝過遵循計劃
8.下列活動中不是項目的是( )。
A.野餐活動
B.集體婚禮
C.上課
D.開發作業系統
9.下列選項中不是項目特征的是( )。
A.項目具有明确的目标
B.項目具有限定的周期
C.項目可以重複進行
D.項目對資源成本具有限制性
四、問答題
1.項目管理知識體系(PMBOK)包括哪10個知識領域?
2.請簡述項目管理的5個過程組及其關系。
3.項目的特征是什麼?