軟件開發是一個從概念的具體的過程,在這個過程中總是出現諸多不可控的因素,造成資源浪費、成本增加等,為了解決這些問題,從以往的經驗教訓中總結出一套用于管理軟件開發的流程體系。
軟件開發的出發點和落腳點都起源于需求,為實現該需求,我們該如何做才能在可控成本下將其實現呢?首先得從項目管理入手。
項目管理是個宏觀概念,主要由四個方面組成:人員、產品、過程和項目,雖然它們之間無順序之分,但我更愿意用層次化的模型刻畫它們之間的關系,如下圖。
人員構成是項目開發的基礎,一旦團隊組成便可以分工對產品進行開發,在開發過程中總是很難避免偏差的出現,但是如果偏差能夠通過管理手段及時糾正,就能很好完成項目。
雖然項目管理工作重心放在過程管理上,但是對其他三個方面的管理也需要把控好,避免因小失大。
(一)人員管理
在人員管理方面,首先需明確有哪些利益相關者?牽頭人、參與者及用戶等,不僅僅需要了解牽頭人的目標和確定用戶群體,更重要的是衡量參與者(項目管理者和開發團隊)是否有能力完成該項目。在人員管理中,最重要同樣也是最難的問題就是如何協調與溝通。每個團隊都需要在開發過程中不斷優化溝通方式,以達到高效開發目的。
(二)產品管理
軟件產品與硬件產品不同,只有在軟件產品開發出來,經驗市場及用戶的考驗,才能客觀評價其是否是一個好的產品。進行產品管理,從宏觀角度需要從兩方面入手:軟件范圍和問題分解。
需求總是無限的,但是人力、時間和資源是有限的,受這三方面的限制,必須明確軟件范圍,分析軟件產品將用于哪些環境下,有哪些約束。這個產品將為用戶提供哪些數據和功能。畫好大餅的范圍便可以對問題進行分解,這也就是分而治之的策略,將大模塊分解為小模塊,更有利于進行成本估算、控制,遇到偏差時,能夠快速響應解決。在問題分解這一過程,也是軟件需求分析的核心活動。
(三)過程管理
過程管理由選定過程模型開始,通過分析目標用戶和開發人員特點、產品的特性和軟件產品所處環境從而選擇過程模型。
過程模型通常用通用框架活動構成———溝通、策劃、建模、構建和部署。確定好過程框架活動后,再依次在每個過程下拆分任務集,這就是過程分解。過程模型的選擇靈活多變,需要具體事情具體分析。
(四)項目管理
開發一個項目,不能抱著破釜沉舟的態度進行,反而需要進行周密的預判、制定可靠的planB面對緊急情況。
預判什么?planB的內容是什么?
預判還得先劃分范圍,確定如何對產品進行度量開始,接著對項目進行估算,確保可行性,最后制定進度安排,設置里程碑,確保在有限條件下能夠完成項目。
planB也就是對軟件開發過程中可能出現的風險進行識別,并對每個存在作出預測及其可能產生的影響,從而計劃應對的方案。
在初創公司中,要實現整套項目管理流程是不太可能的,因為在前期需要花費大量時間和經歷對產品進行評估、評審,從管理層角度來看,是得不償失的。因此,初創公司的開發團隊往往選擇基于敏捷開發模型進行需求分析。由于前期缺乏一系列的評估過程,后期總需要大量時間、精力對產品進行維護。
成熟的公司的開發團隊有一套完整的項目管理體系,因為其產品體量大,若開發前沒有精密的計劃和評審,最后損失的不僅僅是時間和金錢,更多的是公司形象。