虛假的項(xiàng)目進(jìn)度該緩行了

發(fā)布日期:
2017-04-14

瀏覽次數(shù):

作為漢捷咨詢顧問,我在研發(fā)咨詢工作中遇到一些企業(yè),有的會(huì)說:“在我們公司,軟件項(xiàng)目的進(jìn)度不是問題,比如要求兩個(gè)月交付,開發(fā)人員全力以赴,最后總是準(zhǔn)時(shí)交付?!边@是真的嗎?我當(dāng)然不會(huì)幼稚地信以為真。再進(jìn)一步交流會(huì)發(fā)現(xiàn),雖然項(xiàng)目準(zhǔn)時(shí)交付了軟件,然而需求文檔、設(shè)計(jì)文檔一概沒有,并且交付后,因?yàn)橘|(zhì)量問題,用戶無法使用,還需要四個(gè)月的時(shí)間不停地修補(bǔ),之后用戶才真正地使用上。那么項(xiàng)目實(shí)際進(jìn)度到底是四個(gè)月,還是六個(gè)月呢?

我們?cè)賮砜匆幌卤黄毡榻邮艿能浖亩x: 軟件(software)是計(jì)算機(jī)系統(tǒng)中與硬件(hardware)相互依存的另一部分,它包括程序(program)、相關(guān)數(shù)據(jù)(data)及其說明文檔(document)。

很多人都有體會(huì),在大學(xué)實(shí)驗(yàn)室寫出的代碼和在企業(yè)做出的軟件絕對(duì)是兩回事:在實(shí)驗(yàn)室的代碼根本無法稱為軟件產(chǎn)品,沒有文檔,沒有大量的用戶,代碼的非功能特性也很少考慮,如可靠性,開發(fā)過程也不會(huì)按照軟件工程方法進(jìn)行的。與《人件》齊名的另一本軟件工程經(jīng)典之作《人月神話》這樣描述什么是真正有用的軟件產(chǎn)品:

報(bào)紙上經(jīng)常會(huì)出現(xiàn)這樣的新聞,講述兩個(gè)程序員如何在經(jīng)改造的簡(jiǎn)陋車庫(kù)中,編出了超過大型團(tuán)隊(duì)工作量的重要程序。接著,每個(gè)編程人員準(zhǔn)備相信這樣的神話,因?yàn)樗雷阅芤猿^產(chǎn)業(yè)化團(tuán)隊(duì)的1000代碼行/年的生產(chǎn)率來開發(fā)任何程序。

為什么不是所有的產(chǎn)業(yè)化隊(duì)伍都會(huì)被這種專注的二人組合所替代?我們必須看一下產(chǎn)出的是什么。

虛假的項(xiàng)目進(jìn)度該緩行了

圖1.1:編程系統(tǒng)產(chǎn)品的演進(jìn)

在圖1.1的左上部分是程序(Program)。它本身是完整的,可以由作者在所開發(fā)的系統(tǒng)平臺(tái)上運(yùn)行。它通常是車庫(kù)中產(chǎn)出的產(chǎn)品,以及作為單個(gè)程序員生產(chǎn)率的評(píng)估標(biāo)準(zhǔn)。

有兩種途徑可以使程序轉(zhuǎn)變成更有用的,但是成本更高的東西,它們表現(xiàn)為圖中的邊界。

水平邊界以下,程序變成編程產(chǎn)品(Programming Product)。這是可以被任何人運(yùn)行、測(cè)試、修復(fù)和擴(kuò)展的程序。它可以運(yùn)行在多種操作系統(tǒng)平臺(tái)上,供多套數(shù)據(jù)使用。要成為通用的編程產(chǎn)品,程序必須按照普遍認(rèn)可的風(fēng)格來編寫,特別是輸入的范圍和形式必須擴(kuò)展,以適用于所有可以合理使用的基本算法。接著,對(duì)程序進(jìn)行徹底測(cè)試,確保它的穩(wěn)定性和可靠性,使其值得信賴。這就意味著必須準(zhǔn)備、運(yùn)行和記錄詳盡的測(cè)試用例庫(kù),用來檢查輸入的邊界和范圍。此外,要將程序提升為程序產(chǎn)品,還需要有完備的文檔,每個(gè)人都可以加以使用、修復(fù)和擴(kuò)展。經(jīng)驗(yàn)數(shù)據(jù)表明,相同功能的編程產(chǎn)品的成本,至少是已經(jīng)過測(cè)試的程序的三倍。?

回到圖中,垂直邊界的右邊,程序變成編程系統(tǒng)(Programming System)中的一個(gè)構(gòu)件單元。它是在功能上能相互協(xié)作的程序集合,具有規(guī)范的格式,可以進(jìn)行交互,并可以用來組裝和搭建整個(gè)系統(tǒng)。要成為系統(tǒng)構(gòu)件,程序必須按照一定的要求編制,使輸入和輸出在語(yǔ)法和語(yǔ)義上與精確定義的接口一致。同時(shí)程序還要符合預(yù)先定義的資源限制——內(nèi)存空間、輸入輸出設(shè)備、計(jì)算機(jī)時(shí)間。最后,程序必須同其它系統(tǒng)構(gòu)件單元一道,以任何能想象到的組合進(jìn)行測(cè)試。由于測(cè)試用例會(huì)隨著組合不斷增加,所以測(cè)試的范圍非常廣。因?yàn)橐恍┮庀氩坏降慕换?huì)產(chǎn)生許多不易察覺的bug,測(cè)試工作將會(huì)非常耗時(shí),因此相同功能的編程系統(tǒng)構(gòu)件的成本至少是獨(dú)立程序的三倍。如果系統(tǒng)有大量的組成單元,成本還會(huì)更高。

圖1.1的右下部分代表編程系統(tǒng)產(chǎn)品(Programming Systems Product)。和以上的所有的情況都不同的是,它的成本高達(dá)九倍。然而,只有它才是真正有用的產(chǎn)品,是大多數(shù)系統(tǒng)開發(fā)的目標(biāo)。

因此,在很多企業(yè),號(hào)稱以多高的效率完成了某軟件產(chǎn)品開發(fā),其實(shí),完成的是更像上面所描述的程序(program),或者類似于大學(xué)實(shí)驗(yàn)室開發(fā)出產(chǎn)品,如果把程序再變成有用的變成系統(tǒng)產(chǎn)品,則要花費(fèi)數(shù)倍的時(shí)間。如果以生產(chǎn)出“程序”作為項(xiàng)目結(jié)束的標(biāo)志,那么這樣這個(gè)看起來很讓人滿意項(xiàng)目進(jìn)度只不過是個(gè)虛假的進(jìn)度,它與項(xiàng)目真正的完成所需要的時(shí)間還有非常大差距。

虛假的進(jìn)度,在很多情況是因?yàn)榈古胚M(jìn)度計(jì)劃導(dǎo)致,客戶或者管理層要求四個(gè)月完成項(xiàng)目,那么項(xiàng)目要做出一個(gè)四月完成的進(jìn)度計(jì)劃;如果客戶或者管理層要求兩個(gè)月完成項(xiàng)目,那么項(xiàng)目就要做出一個(gè)兩月完成的進(jìn)度計(jì)劃。接下來,項(xiàng)目會(huì)想方設(shè)法按時(shí)“結(jié)束”這樣項(xiàng)目。當(dāng)然這些項(xiàng)目“結(jié)束”的標(biāo)志是代碼已經(jīng)寫完了,至于代碼是否滿足客戶的需求以及并要的文檔工作都是被挪到項(xiàng)目范圍之外去考慮了。

虛假的項(xiàng)目進(jìn)度掩藏了項(xiàng)目的開發(fā)問題,特別是項(xiàng)目開發(fā)效率問題。被虛假的進(jìn)度所迷惑,大家看不清項(xiàng)目的實(shí)際進(jìn)度和實(shí)際成本。我遇到一個(gè)企業(yè),有個(gè)五萬元的小項(xiàng)目,他們宣稱兩個(gè)人兩個(gè)月完成了,但實(shí)質(zhì)上后續(xù)投入了至少一人年的工作量在不斷地完善那兩個(gè)月完成的那個(gè)半成品。如果以總的實(shí)際的工作量來算,這個(gè)項(xiàng)目不知倒貼了多少錢!

虛假的項(xiàng)目進(jìn)度最大的危害是它變成了混亂的借口,如果要進(jìn)行研發(fā)管理變革,進(jìn)行規(guī)范化開發(fā),一些常常會(huì)說:“有流程是好,可是流程會(huì)降低我們的開發(fā)效率,而我們項(xiàng)目進(jìn)度要求又非常高!”只有揭穿在混亂中開發(fā)的項(xiàng)目進(jìn)度的虛假性,研發(fā)變革才成為可能。

最后,在到處充斥著虛假項(xiàng)目進(jìn)度的企業(yè),不會(huì)孕育出“第一次把事情做好”的文化,質(zhì)量和效率都不會(huì)在這樣的企業(yè)中生根發(fā)芽;相反,會(huì)滋生隱瞞、欺騙、浮夸,蒙蔽了管理層的雙眼,讓團(tuán)隊(duì)斗志,讓優(yōu)秀員工心灰意冷。

虛假的項(xiàng)目進(jìn)度該緩行了!

相關(guān)推薦