一個企業(yè)的管理,大公司有大公司的方式,小公司也有小公司的做法。如果把別人的經(jīng)驗生搬硬套到自己身上,可能會適得其反。同樣,管理一個軟件開發(fā)項目也一樣,大項目和小項目的方式也完全不一樣。如很多人認(rèn)為小型軟件開發(fā)項目不需要嚴(yán)格的管理,但事實上卻恰恰與此相反,小型軟件項目不單需要進(jìn)行項目管理,而且不能完全照搬大型軟件項目的管理方式和開發(fā)模式,應(yīng)該要遵循一種適合小型軟件項目的管理方式。
近期,我在負(fù)責(zé)的一個小型軟件開發(fā)過程中忽視了小型軟件項目的特點,結(jié)果是麻煩事情特別多,差點兒項目要以失敗告終。但從另一個角度來看,項目的大與小并沒有本質(zhì)的區(qū)別,很多方法是共通的,但必須要切合實際來靈活運(yùn)用。本文結(jié)合我在這個小型軟件開發(fā)項目中得到的經(jīng)驗和教訓(xùn),首先分析小型軟件開發(fā)項目中常見的問題,然后提出相應(yīng)的解決辦法。
一. 小型軟件開發(fā)項目中常犯的錯誤
小型軟件開發(fā)項目一般具有項目需求相對較少、人員較少、開發(fā)周期較短的特點。因此,小型軟件開發(fā)看起來都比較簡單,比較容易成功,因而人們往往忽視了小型軟件開發(fā)的管理,其實這是一種誤解。例如,由于人員較少分工不明確或由于開發(fā)周期較短忽視項目計劃和進(jìn)度表的控制,結(jié)果是經(jīng)常會出現(xiàn)開發(fā)流程混亂,重編碼輕設(shè)計,甚至到編碼完成后再回頭編寫各種文檔資料等現(xiàn)象。從我這次的開發(fā)經(jīng)驗看來,在小型軟件開發(fā)管理中容易犯以下的錯誤:
(1)沒有重視項目計劃,做和尚撞鐘
往往由于項目較小,便很草率地制定一個開發(fā)日程表,也沒有認(rèn)真地估計項目難度,結(jié)果是實際完成時間與估計完成時間往往有較大差別。還有人是這樣說計劃的:"計劃、計劃,紙上畫畫,墻上掛掛,計劃不如變化"。因此,由于觀念的不正確使到計劃管理經(jīng)常成為空話,特別是在小型軟件開發(fā)中影響計劃的因素太多時或加上想省事怕麻煩,結(jié)果計劃管理形同虛設(shè)了。
但是,軟件進(jìn)行項目管理的目的是綜合各種因素,制定合理的計劃,并通過計劃的實施,使其規(guī)范化,從而提高人員效率,降低項目成本。因此,軟件開發(fā)無論項目大小,其實都需要計劃過程。只是對于小型軟件項目來說,計劃階段可能切換的很快。例如,有時候項目負(fù)責(zé)人只是腦海里想一遍把計劃確定了。但項目負(fù)責(zé)人必須心里要清楚:有時候想省事兒,可能反而會更加費(fèi)事兒。俗語有云:一年之計在于春、一日之計在于晨。其意義不是說越早做越好,而是闡述一個目標(biāo)的實現(xiàn)需要盡早做規(guī)劃。
(2)沒有完整的開發(fā)文檔,無意之中增大項目風(fēng)險
一個完整的軟件開發(fā)項目應(yīng)包括有相當(dāng)多的相關(guān)文檔:例如項目開發(fā)計劃、軟件需求說明書、概要設(shè)計說明書、詳細(xì)設(shè)計說明書、開發(fā)進(jìn)度月報、測試計劃和開發(fā)總結(jié)報告等。而在實際中,許多小型軟件項目只有簡單的流水帳式的開發(fā)日志。常見的借口往往是以文檔滯后來解釋文檔的不健全,這似乎沒有什么不妥,而且好象還理直氣壯的。但如果將軟件項目叫做"工程"的話,再將其與建筑工程相比較,那我們也可以說:大樓有了,圖紙滯后,這是很可笑的。還有許多開發(fā)人員認(rèn)為軟件設(shè)計已經(jīng)在其腦子里完成了,在其意識里工作只是一堆需要敲出來的程序,既然能直接敲得出來,自然沒必要再做寫文檔的重復(fù)工作。
這樣做的結(jié)果使到設(shè)計思路和實現(xiàn)細(xì)節(jié)在項目團(tuán)隊內(nèi)的交流很困難,開發(fā)過程會由于需要大量嘗試性、重復(fù)性工作而變得緩慢,而且會出現(xiàn)許多意想不到的大大小小的問題,狼煙四起之時重要的工作變成了"救火"。所以,在小型軟件項目里會"救火"的技術(shù)人員會成為大家推崇和依賴的英雄。但這種"救火"式的行為終結(jié)果卻是項目延期成了普遍現(xiàn)象,產(chǎn)品質(zhì)量也得不到保證。另外,如果這個英雄半途離開,那沒有任何文檔支持的中間結(jié)果對其它人來說基本上是"一堆垃圾"而已,項目被迫中斷成了家常便飯。
(3)人員沒有技術(shù)分層,職責(zé)不清分工不明
許多小型軟件開發(fā)項目一直采用個人主義式的開發(fā)方式,決定了規(guī)范化開發(fā)方式的不被認(rèn)可。對規(guī)范化管理的淡漠,抑制了團(tuán)隊工作效率的提高,甚至扼殺了其生命。所以,小型軟件項目往往要求主要的項目人員從各個方面都得是非常出色的,不僅要全面地掌握系統(tǒng)架構(gòu)知識、具有業(yè)務(wù)分析和系統(tǒng)設(shè)計能力,而且還得是多種流行開發(fā)工具的專家、數(shù)據(jù)庫的專家、網(wǎng)絡(luò)配置的專家等,但這樣的全才和通才往往是可遇不可求的。
因此,小型軟件項目更需要做技術(shù)分層,例如系統(tǒng)分析員、需求分析師、程序員、測試員等。在項目開發(fā)中相應(yīng)的角色必須要有相應(yīng)的專業(yè)人員來擔(dān)當(dāng),當(dāng)然可依據(jù)項目規(guī)模大小和現(xiàn)有人員來合理配置。這里強(qiáng)調(diào)技術(shù)結(jié)構(gòu)分層和技術(shù)人員劃分,更多的是技術(shù)責(zé)任的明細(xì),而非具體個人的技術(shù)定位,將技術(shù)任務(wù)和相應(yīng)的責(zé)任劃分到具體的崗位、將崗位落實到具體的人,這與具體技術(shù)人員身兼數(shù)職是不矛盾的。
而我們經(jīng)?吹降氖窃谠S多小型軟件開發(fā)過程中,人員職責(zé)不清、分工不明的現(xiàn)象非常嚴(yán)重。有的甚至從調(diào)研到分析、設(shè)計,到開發(fā)、調(diào)試,再到測試一氣呵成。先不說工作量有多大,僅從項目的風(fēng)險來說是非?膳碌模挥谜f大限度發(fā)揮開發(fā)人員的長處了。
二. 小型軟件實行項目管理的方法和步驟
為什么小型軟件開發(fā)項目卻會面臨更多的失敗風(fēng)險呢?在我所負(fù)責(zé)的項目面臨下馬前的每一個夜晚,我的腦袋里一直在思考這個問題。也許是多日思考的沉淀,也許是思緒在不停的四處游蕩后的突發(fā)靈感。使我明白到原來決定小型軟件項目成敗的核心因素,是有沒有堅持進(jìn)行實行項目管理,F(xiàn)總結(jié)為以下幾個要點:
(1)樹立小型軟件開發(fā)也需要項目管理的理念項
但凡專業(yè)的軟件開發(fā)人員都學(xué)過《軟件工程》這門課,縱觀這些指導(dǎo)性的理論以及建議。我們應(yīng)該要樹立即使是小型軟件開發(fā)也應(yīng)該在一定程度不要違背開發(fā)理論,必須要遵從于工程化軟件理論的原則和方法,落實規(guī)范化的管理。否則,失敗的風(fēng)險將伴隨著整個開發(fā)過程,而且越到后期失敗的可能性會越大。
對小型軟件項目而言,急需的不是設(shè)計方法,也非分析方法,當(dāng)然也不是開發(fā)方法,而是管理方法。因此,無論項目大小都必須要遵循一定的項目管理步驟。從概念上講,軟件項目管理是為了使軟件開發(fā)能夠按照預(yù)定的成本、進(jìn)度、質(zhì)量順利完成,而對成本、人員、進(jìn)度、質(zhì)量、風(fēng)險等進(jìn)行分析和管理的活動。實際上,軟件項目管理的意義不僅僅如此,進(jìn)行軟件項目管理還有利于將"英雄"式的開發(fā)人員的個人開發(fā)能力轉(zhuǎn)化成團(tuán)隊的開發(fā)能力,團(tuán)隊的軟件開發(fā)能力越高,越能減小項目的開發(fā)風(fēng)險。