監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價(jià)咨詢管理系統(tǒng) | 工程設(shè)計(jì)管理系統(tǒng) | 簽約案例 | 購(gòu)買價(jià)格 | 在線試用 | 手機(jī)APP | 產(chǎn)品資料
X 關(guān)閉

軟件項(xiàng)目管理中所暴露的最大問(wèn)題

申請(qǐng)免費(fèi)試用、咨詢電話:400-8352-114

來(lái)源:泛普軟件

很多朋友都有過(guò)或者正在管理一個(gè)或者多個(gè)軟件項(xiàng)目,那么我的文章就從這個(gè)問(wèn)題開(kāi)始:如果單純從表象來(lái)說(shuō),軟件項(xiàng)目管理過(guò)程中暴露的最大問(wèn)題是什么?

不同的人的會(huì)有不同的答案,但是大致這樣的答案我想大部分人都是會(huì)認(rèn)可的,那就是“進(jìn)度拖延”。進(jìn)度拖延當(dāng)然是表象之一了,其他諸如質(zhì)量不過(guò)關(guān)、功能不完整等等,我覺(jué)得都是和進(jìn)度拖延密切相關(guān)的。很多項(xiàng)目經(jīng)理都想去做那些認(rèn)為是十分必要的事情,比如計(jì)劃、測(cè)試等,但是“沒(méi)有時(shí)間”。為什么會(huì)沒(méi)有時(shí)間?等到項(xiàng)目總結(jié)的時(shí)候,我們總會(huì)羅列出一大堆的理由試圖來(lái)說(shuō)服自己,說(shuō)服公司甚至說(shuō)服客戶。但是如果限定項(xiàng)目經(jīng)理只從自己身上找原因的話,我想問(wèn)題就不難找了。

這里,我用“豐田”的“五次為什么”方法來(lái)問(wèn)這個(gè)問(wèn)題,以及我覺(jué)得可能的回答:

一、為什么項(xiàng)目進(jìn)度會(huì)拖延?因?yàn)闆](méi)有按照項(xiàng)目計(jì)劃進(jìn)行!

二、為什么不按照項(xiàng)目計(jì)劃執(zhí)行?因?yàn)檫M(jìn)度總會(huì)有拖延,緩沖時(shí)間總會(huì)被用光。

三、為什么在計(jì)劃時(shí)候不規(guī)劃得更細(xì)更貼近現(xiàn)實(shí)一些呢?再細(xì)也總有額外的工作出現(xiàn)。

四、為什么不充分評(píng)估每一個(gè)工作,讓預(yù)料之外的工作盡可能少呢?因?yàn)榇_實(shí)無(wú)法評(píng)估下去了,很多認(rèn)為是原子級(jí)的工作都會(huì)產(chǎn)生出各種問(wèn)題。

五、沒(méi)有可以參考的其他項(xiàng)目的項(xiàng)目計(jì)劃嗎?因?yàn)閮蓚€(gè)項(xiàng)目的不同點(diǎn)太多,很難重用。

問(wèn)到這里,我想一般項(xiàng)目的核心問(wèn)題也就顯露在我們的面前。現(xiàn)在先不去談?wù)撨@個(gè)問(wèn)題,我們用幾個(gè)簡(jiǎn)單的例子讓他更生動(dòng)一些。

我們用一個(gè)非軟件的事情舉例,讓大家為這個(gè)例子作一個(gè)詳細(xì)的項(xiàng)目計(jì)劃并評(píng)估出最精確的時(shí)間。

例子1:請(qǐng)大家評(píng)估各自把我的這篇文章重新打一遍的時(shí)間。

這個(gè)例子最簡(jiǎn)單了,拿我自己來(lái)說(shuō),我打字速度為每分鐘30個(gè)漢字,所以這篇文章重新打一遍的時(shí)間就是文章的總字?jǐn)?shù)3000/30=100分鐘。加上中間休息的時(shí)間,最多就是120分鐘。

答案相當(dāng)準(zhǔn)確,我想也不會(huì)有太多人有異議,但是下一個(gè)例子可能就有些不一樣了。

例子2:請(qǐng)大家解開(kāi)下列的方程式:x2+px+q=0, p=2, q=1

初中的方程式阿,但是很多人可能忘記它的通用求解公式了,不過(guò)我們假設(shè)大家都知道這個(gè)求解公式:-p/2±sqrt(p2/4-q)。評(píng)估時(shí)間的時(shí)候我們首先要知道我們打開(kāi)計(jì)算器的時(shí)間,輸入數(shù)據(jù)的時(shí)間,抄錄結(jié)果,并且為了保證計(jì)算準(zhǔn)確,我們需要進(jìn)行驗(yàn)算。嗯,這樣估算時(shí)間的權(quán)威性恐怕不如例子1那樣令人信服了,而且我們經(jīng)常需要因?yàn)樗沐e(cuò)而重新計(jì)算,超時(shí)恐怕很難會(huì)避免。

例子3:請(qǐng)大家按照我的引言,結(jié)合自己的項(xiàng)目實(shí)踐,重新寫一篇吧。

嚯!如果誰(shuí)能準(zhǔn)確估算這個(gè)時(shí)間,就應(yīng)該是高手了??纯次覀?yōu)榱送瓿衫?需要我們作多少事情吧:制定寫作提綱,勾畫寫作內(nèi)容,評(píng)估打字速度和每一個(gè)內(nèi)容的量…依我看,不用計(jì)算了,計(jì)算再多,這個(gè)工作的進(jìn)度依然會(huì)被拖延。

這三個(gè)例子有區(qū)別嗎?當(dāng)然有!例子1的估算方法大家都掌握,而且執(zhí)行過(guò)程中的變數(shù)最少,因?yàn)椴⒉恍枰覀內(nèi)プ鋈魏蔚奶剿鬟^(guò)程(猜某個(gè)字的五筆字型不算,至少我用微軟拼音)。例子2的不同點(diǎn)是解題的方法需要外部因素的介入,而且這個(gè)技術(shù)并不是每個(gè)人都掌握(或者記得),最重要的特點(diǎn)是每一個(gè)步驟我們都需要去估算它完成所需要的時(shí)間,如果我們已經(jīng)計(jì)算過(guò)一次了,當(dāng)然第二次就會(huì)估算的更準(zhǔn)確一些??墒乾F(xiàn)實(shí)生活中的項(xiàng)目很少會(huì)給你機(jī)會(huì)重新做一遍。

當(dāng)你完成項(xiàng)目之后,跟這個(gè)特定項(xiàng)目相關(guān)的各種方法也就失去了它的作用,它唯一的價(jià)值就是潛入你的記憶中,成為所謂的“項(xiàng)目經(jīng)驗(yàn)”,而這個(gè)“經(jīng)驗(yàn)”也常常會(huì)在下一個(gè)項(xiàng)目水土不服。相比而言,例子2好歹是一些看得見(jiàn)摸得著的動(dòng)作,評(píng)估起來(lái)也會(huì)有一點(diǎn)依據(jù),而例子3則幾乎是一個(gè)純粹的大腦運(yùn)動(dòng),要讓大家憑空組裝成一篇好看的文章,我看這個(gè)進(jìn)度要估算也太難了,誰(shuí)知道為了一個(gè)內(nèi)容,我們要反復(fù)推敲甚至發(fā)呆多少時(shí)間呢?!

我們把話題拉回到篇首的五次為什么上來(lái)。軟件項(xiàng)目甚至其他項(xiàng)目能夠按時(shí)完成的最主要一點(diǎn)就是要做好“計(jì)劃”,能否規(guī)劃一個(gè)符合實(shí)際的項(xiàng)目計(jì)劃,是項(xiàng)目成敗最大的晴雨表。

要讓項(xiàng)目計(jì)劃貼近現(xiàn)實(shí),首先我們需要把項(xiàng)目中所有的工作都羅列出來(lái),然后把每一個(gè)步驟地工作進(jìn)行細(xì)分,以致細(xì)分到“原子級(jí)”,也就是不能再分的程度,從軟件項(xiàng)目來(lái)看,就是分到“文件”,分到“類”甚至分到“函數(shù)”級(jí)別。然后對(duì)這些“原子級(jí)別”的工作進(jìn)行評(píng)估時(shí)間,累計(jì)綜合,最后乘上一個(gè)系數(shù)(一般是2),就是最終項(xiàng)目所要花費(fèi)的時(shí)間了

說(shuō)起來(lái)容易,做起來(lái)難!光是要求把工作細(xì)分到原子級(jí),就已經(jīng)足以讓一大批項(xiàng)目經(jīng)理當(dāng)場(chǎng)暈倒了。

我們?cè)倩貋?lái)看例子2,如果解題的人忘記了這個(gè)求解的公式的話,前面估算的進(jìn)度是否需要調(diào)整呢?回答是肯定的。這樣的時(shí)間計(jì)算就需要考慮尋找資料的時(shí)間,只要找到公式,計(jì)算出結(jié)果就不是問(wèn)題了,而找公式所花費(fèi)的時(shí)間,在有通暢的網(wǎng)絡(luò)連接情況下,包括網(wǎng)絡(luò)搜索、詢問(wèn)同事等等方法,一個(gè)小時(shí)足矣!

如果說(shuō)光是找一個(gè)公式就需要額外的一個(gè)小時(shí)的話,把例子2的題目修改成計(jì)算“傅立葉”

變換(非編程計(jì)算)又需要多少時(shí)間呢?顯然跟解二元一次方程又不是一個(gè)數(shù)量級(jí)的工作了,我們除了尋找資料之外,大部分人還需要學(xué)習(xí),沒(méi)有高等數(shù)學(xué)基礎(chǔ)的人恐怕更需要加入“研究”了。

從例子2就可以總結(jié)出如下幾個(gè)現(xiàn)象:工作與工作之間可以有層次關(guān)系的,一個(gè)看似很簡(jiǎn)單的工作,很可能會(huì)隱含著巨大的工作量,在某些先決條件沒(méi)有或者準(zhǔn)備不足的情況下尤其如此。要準(zhǔn)確估算一個(gè)工作所用的時(shí)間,首先我們就要把“折疊”起來(lái)的“工作樹(shù)”盡可能完全“展開(kāi)”,其次就必須要遏制工作中的“學(xué)習(xí)”、“研究”甚至“查詢搜索”的工作量。總之,在實(shí)際項(xiàng)目開(kāi)展的時(shí)候,就要盡可能讓所有的工作都是單純的,可以預(yù)測(cè)的,并且盡可能排除那些不可控、不可靠的因素。

換句話說(shuō),項(xiàng)目的每一個(gè)工作與時(shí)間的關(guān)系都必須是“線性”的。如果實(shí)在不能排除“非線性”的工作,也必須在“可控”的范圍內(nèi),項(xiàng)目?jī)?nèi)部不允許有“不可控”的“非線性”因素存在。

一句話: 腦筋動(dòng)得越多,事情做得越慢!

到底項(xiàng)目中究竟有多少因素是屬于“不可控”呢?哪些又是屬于“可控”的?哪些屬于“線性”因素?要回答這個(gè)問(wèn)題,我們首先來(lái)看一下我們目前的軟件開(kāi)發(fā)方式和流程吧:

(一)接單簽訂合同

(二)需求調(diào)研、分析

(三)架構(gòu)設(shè)計(jì)、概要設(shè)計(jì)

(四)詳細(xì)設(shè)計(jì)

(五)編碼、測(cè)試

(六)交付、維護(hù)

大致六個(gè)步驟,其中三四五是和我們談得開(kāi)發(fā)過(guò)程相關(guān)聯(lián)(其他部分我會(huì)在以后的系列文章中討論)。首先我們看第三點(diǎn)和第四點(diǎn),他們統(tǒng)稱為“設(shè)計(jì)”,參考文獻(xiàn)2中給出的“設(shè)計(jì)”階段的目標(biāo)是解決四方面的問(wèn)題:數(shù)據(jù)結(jié)構(gòu),軟件體系結(jié)構(gòu),過(guò)程細(xì)節(jié),接口性質(zhì)。

有經(jīng)驗(yàn)的讀者我想已經(jīng)看出來(lái)了,傳統(tǒng)的“設(shè)計(jì)”所解決的問(wèn)題,有相當(dāng)一部分應(yīng)該歸納為現(xiàn)在的“架構(gòu)”范圍內(nèi)。軟件架構(gòu)涉及的范圍主要包括如下:

(一)應(yīng)用程序的層次劃分(比如界面層,存儲(chǔ)層等),

(二)部分應(yīng)用程序模塊的劃分(比如初始化模塊,配置模塊,權(quán)限模塊等),

(三)部分應(yīng)用程序模塊的實(shí)現(xiàn)(權(quán)限、用戶、組織機(jī)構(gòu)管理等),

(四)函數(shù)庫(kù)的實(shí)現(xiàn),

(五)各模塊、層之間的相互關(guān)系和通訊機(jī)制,

(六)相關(guān)的部分?jǐn)?shù)據(jù)結(jié)構(gòu)定義。

如此可見(jiàn),上文中的第三和第四點(diǎn)最重要和最基礎(chǔ)的工作基本就在“架構(gòu)”范圍內(nèi),剩下的工作,基本就是跟具體業(yè)務(wù)相關(guān)的了。

在上文的三個(gè)“xx設(shè)計(jì)”中,架構(gòu)設(shè)計(jì)的時(shí)間最難控制和估算,概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)因?yàn)榫褪侵苯訌男枨髼l目演化而來(lái),而且容易細(xì)化(以后我會(huì)有文章專門討論),所以雖然也是屬于“設(shè)計(jì)”這種“非線性”工作,但是“可控性”要比“架構(gòu)”強(qiáng)很多。從個(gè)人的項(xiàng)目維護(hù)經(jīng)驗(yàn)來(lái)看,維護(hù)過(guò)程中產(chǎn)生的問(wèn)題,有相當(dāng)一部分是因?yàn)橛脩粜枨笸黄屏嗽燃軜?gòu)的能力所致,而正是這種問(wèn)題,才是拖延時(shí)間最長(zhǎng),引起客戶反映最強(qiáng)烈,也是維護(hù)人員最痛苦最頭痛的問(wèn)題。因此,“架構(gòu)設(shè)計(jì)”我把它歸類到“非線性”工作中,而且是“難點(diǎn)”工作。

我看到很多的公司軟件部門都叫做“研發(fā)部”,用英文說(shuō)就是research and development的部門,但是我很少看到有公司把research和development分開(kāi)做兩個(gè)部門的。這有什么關(guān)系呢?從上文我們可以看到,研究是一種非常耗費(fèi)資源的工作,而且風(fēng)險(xiǎn)(尤其是技術(shù)風(fēng)險(xiǎn))很大,很可能因?yàn)橐粋€(gè)小技術(shù)難題不能突破而導(dǎo)致整個(gè)架構(gòu)推翻重來(lái),而開(kāi)發(fā)的風(fēng)險(xiǎn)則要小得多,可控得多;另外一個(gè)大的區(qū)別就是研究并不直接創(chuàng)造價(jià)值,而開(kāi)發(fā)則跟公司的收入密切相關(guān)?;谶@兩個(gè)理由,就足夠把“研究”和“開(kāi)發(fā)”完全分開(kāi)成兩個(gè)部門了。其他當(dāng)然還有許多的區(qū)別,比如考核方式等。

分開(kāi)之后的工作如何分配?很簡(jiǎn)單,就是把“軟件架構(gòu)”和其他有難度的“非線性”工作統(tǒng)統(tǒng)交給高手云集的“研究”部門去做;具體項(xiàng)目相關(guān)的業(yè)務(wù)和實(shí)現(xiàn)(“線性”的工作)交由“開(kāi)發(fā)”部門去做,因?yàn)樗麄儗?duì)技術(shù)要求不高,而且成本較低。說(shuō)到這里,我是不是在主張每一個(gè)公司都需要專人去“研究”技術(shù)呢?恰恰相反,我主張大部分公司都不需要設(shè)立“研究”部門,至少大部分公司不要去研制甚至試圖研制所謂“自己的”軟件架構(gòu)。因?yàn)檐浖軜?gòu)相比具體業(yè)務(wù)有一定的獨(dú)立性,并沒(méi)有一種“特別適合”于某類業(yè)務(wù)的“軟件架構(gòu)”存在,即使有,它也是應(yīng)該經(jīng)過(guò)N個(gè)項(xiàng)目的M年考驗(yàn)之后才會(huì)出現(xiàn)(N*M>10年)。我相信SAP會(huì)有這樣的架構(gòu),但是國(guó)內(nèi)公司基本不會(huì)有(也許有,但是請(qǐng)大家理解我的懷疑)?,F(xiàn)在市面上有很多開(kāi)源的架構(gòu)存在,選一個(gè)吧,然后去培訓(xùn)你的員工,不斷地培訓(xùn),指導(dǎo)他們能夠熟練地將這個(gè)架構(gòu)應(yīng)用到項(xiàng)目中去為止,即使這樣,你的總花費(fèi)也還遠(yuǎn)遠(yuǎn)小于請(qǐng)一個(gè)“高手”開(kāi)發(fā)一個(gè)失敗架構(gòu)的投入。

如何來(lái)選擇一個(gè)現(xiàn)成的架構(gòu)已經(jīng)不在文章討論范圍之內(nèi)了,因?yàn)槲医酉聛?lái)要談的是“如何開(kāi)發(fā)一個(gè)自己的架構(gòu)”,不過(guò)也不用慌,如果你的開(kāi)發(fā)語(yǔ)言是java的話,那么恭喜你,很多好用的開(kāi)源架構(gòu)都是java的,比如spring MVC,struts/webwork,tapestry;如果你用的是.net平臺(tái),那么微軟已經(jīng)幫你做了一個(gè)淺層的封裝,或者干脆用.net的petshop或者Duwamish的架構(gòu)就可以了。(IT專家網(wǎng))

發(fā)布:2007-04-25 16:47    編輯:泛普軟件 · xiaona    [打印此頁(yè)]    [關(guān)閉]
相關(guān)文章:

泛普泛普博客其他應(yīng)用

泛普OA商務(wù)合同 泛普OA需求調(diào)研 泛普OA實(shí)施方案 泛普OA項(xiàng)目啟動(dòng) 泛普網(wǎng)絡(luò)硬件配置 泛普OA部署安裝 泛普流程模板表單 OA系統(tǒng)二次開(kāi)發(fā) 泛普常見(jiàn)問(wèn)題解決 泛普OA操作手冊(cè) 泛普軟件項(xiàng)目驗(yàn)收 泛普培訓(xùn)推廣上線 泛普OA售后服務(wù) 泛普新聞 泛普期刊 泛普博客