軟件開發(fā)是一項復(fù)雜的工作,對于軟件開發(fā)的管理和控制,發(fā)展出一門專門的學(xué)科:軟件工程。在這方面有許多的國家標(biāo)準(zhǔn)和國際標(biāo)準(zhǔn)。但軟件工程更多的是從技術(shù)的角度來規(guī)范軟件開發(fā)的管理和控制,本文試圖從管理者和實踐的角度來闡述一些軟件開發(fā)的管理和控制所應(yīng)遵循的基本原則。
在軟件開發(fā)項目中經(jīng)常出現(xiàn)二種極端情況:一種是創(chuàng)造了新的生產(chǎn)率和質(zhì)量的紀(jì)錄;一種則完全是一場災(zāi)難,不是被取消就是拖延很長時間。通過提煉這些成功和失敗的例子,軟件項目成功或失敗的根本原因可能會更清晰一些。
在討論這些原因之前,我們先來定義一下什么情況可以稱為失敗的軟件項目。
1. 由于費用超支或計劃執(zhí)行超時而終止。
2. 完成計劃的時間或費用超過了原計劃的50%。
3. 由于質(zhì)量或性能上的原因引起和客戶的糾紛。
下面我們將按其影響大小的順序排列說明5種錯誤的實踐方式。
錯誤1:沒有軟件開發(fā)的歷史數(shù)據(jù)
缺乏軟件開發(fā)的歷史數(shù)據(jù)是大多數(shù)軟件項目失敗的關(guān)鍵所在, 這樣的結(jié)論也許使很多人感到吃驚,但事實就是如此。沒有一個可靠的軟件開發(fā)的歷史數(shù)據(jù)會使項目經(jīng)理,程序員,客戶對于軟件開發(fā)的過程缺少清醒的認(rèn)識。
假設(shè)現(xiàn)在你正在管理一個軟件項目,而這個項目還沒有一個公司在36個月內(nèi)完成。作為一個負(fù)責(zé)的經(jīng)理,你作了一個比較細(xì)致和保守的估計,然后告訴你的客戶和你的手下說你認(rèn)為這個項目需要36-38個月完成。然而常常有這樣的情況發(fā)生:你的客戶和程序員要求把時間壓縮到18個月??蛻粢环矫嫦M浖M早投入使用而產(chǎn)生經(jīng)濟(jì)效益,一方面也想壓縮項目時間作為一個討價還價的籌碼;而程序員一方面可能過于自信,一方面盡早結(jié)束項目也能使他們多賺點錢。而此時你的手頭上也沒有一個可靠的軟件開發(fā)的歷史數(shù)據(jù),在他們的壓力下你同意了18個月的計劃,于是一場災(zāi)難開始了。在項目的開始階段你發(fā)現(xiàn)計劃被拖延了,于是開始向程序員們施加壓力,要求他們加快進(jìn)度,程序員為了追求進(jìn)度而不得不把其它指標(biāo)放在一邊,這些問題不斷的積累下來而項目經(jīng)理卻蒙在鼓里。到了項目中后期這些質(zhì)量問題會不斷暴露出來,而且互相關(guān)聯(lián)并且難以解決,甚至有些是系統(tǒng)設(shè)計的問題,這時才發(fā)現(xiàn)好多模塊要推倒重來,18個月完成計劃變成了天方夜譚。雖然上面只是一個虛擬的例子,但在實際中這種情況比比皆是。問題的關(guān)鍵就在于軟件開發(fā)的歷史數(shù)據(jù)是反映軟件開發(fā)隊伍的能力的標(biāo)尺,沒有了這個標(biāo)尺,就無法對軟件的開發(fā)過程有一個清醒的認(rèn)識。
錯誤2:不重視使用軟件費用估值工具軟件和計劃工具軟件
國內(nèi)的軟件公司大多數(shù)是處在“十幾條槍,一個手工作坊”的水平上,在承接軟件開發(fā)的項目之后往往是幾位骨干人物討論之后對費用和進(jìn)度作一個大致的估計,然后就開始進(jìn)入項目的執(zhí)行。這種方法帶有明顯的主觀性。在作一個精確的軟件費用估計和作一個比較現(xiàn)實的項目開發(fā)計劃時需要考慮許多因素。對于一個大的軟件項目,用手工作費用估計和作計劃是不能勝任的?,F(xiàn)在國外市場上有大約50種商業(yè)軟件費用估計工具包和大約100種商業(yè)項目計劃工具包,使用他們作精確的估計比手工的估計更可能獲得成功。常用的軟件費用估計工具軟件有Checkpoint,Colomo,Estimacs,Price_s,Slim。 常用的項目管理軟件有MSProject,Primavera,Project Manager*s Workbench, Timeline。把這二種工具軟件聯(lián)合使用可以互為補(bǔ)充,幫助經(jīng)理駁回客戶和程序員的無理要求并且能精確的控制項目的執(zhí)行。
錯誤3:忽視用戶的需求的變動
盡管最初的用戶需求在簽定開發(fā)合同時已經(jīng)包含在需求說明書中, 但在整個開發(fā)周期中期望用戶的需求一直保持不變是不大可能的,因為用戶對于如何應(yīng)用計算機(jī)軟件并沒有一個成熟的經(jīng)驗。在項目進(jìn)行中用戶的需求會不斷的增長,一般情況下用戶的需求以每月1%的速率增加,如果一個項目在12個月內(nèi)完成,最終將有超過10%的改動,如果項目要持續(xù)36個月,最后將增加1/3的功能。每月1%也只是一個經(jīng)驗數(shù)據(jù),一個缺乏計算機(jī)應(yīng)用經(jīng)驗的用戶會更頻繁的改變和增加他的要求。因此在作項目的費用和時間估計時一定要考慮用戶需求的變化。一種比較明智的方法是在簽定開發(fā)合同時把用戶需求的改動和經(jīng)濟(jì)利益掛鉤,如果用戶增加或改動了需求,那么軟件的交付日期可以推遲,費用也應(yīng)增加。
錯誤4:忽視監(jiān)督項目的進(jìn)度
到目前為止,軟件產(chǎn)業(yè)還沒有一個標(biāo)準(zhǔn)的項目進(jìn)度的檢查標(biāo)準(zhǔn)。一個比較清晰的尺度是用已經(jīng)實現(xiàn)的軟件功能反映項目的進(jìn)度。但這種方法是否就是最科學(xué)的衡量標(biāo)準(zhǔn),現(xiàn)在還不能定論,畢竟在一個軟件項目中軟件功能只是一個主要而非全部的任務(wù)。因此一個項目經(jīng)理在監(jiān)控項目執(zhí)行時不應(yīng)該只關(guān)注實現(xiàn)的軟件功能,還要關(guān)心文檔,測試,技術(shù)支持這些因素。在實際工作中我們經(jīng)常聽到經(jīng)理或程序員說這樣的話:“項目已經(jīng)完成了90%”,這種結(jié)論帶有明顯的主觀性,一個優(yōu)秀的項目經(jīng)理不應(yīng)該被手下的判斷所迷惑,而應(yīng)該按照一個比較客觀的標(biāo)準(zhǔn)去深入檢查。
錯誤5:忽視設(shè)計復(fù)查和代碼復(fù)查
很多程序員習(xí)慣于這樣一種工作方式:只做不想。他們更關(guān)心每天可以寫多少行代碼,完成幾個模塊。在這種態(tài)度下,他們都很不愿意復(fù)查自己的工作,而習(xí)慣于在軟件測試階段把隱藏的錯誤改正過來。但設(shè)計復(fù)查和代碼復(fù)查在大型的軟件項目中已經(jīng)有30年的應(yīng)用歷史,而且已經(jīng)被證明在設(shè)計和代碼編寫階段的復(fù)查比軟件測試更能有效的消除錯誤,一些經(jīng)驗數(shù)據(jù)表明,在設(shè)計和代碼復(fù)查時發(fā)現(xiàn)的錯誤是在同等工作量下軟件測試發(fā)現(xiàn)的錯誤的兩倍。
結(jié)論:
軟件開發(fā)是一個帶有一定風(fēng)險的工作,為了把風(fēng)險降到最低, 在項目的執(zhí)行中項目經(jīng)理必須嚴(yán)格的監(jiān)督項目的進(jìn)度,對程序員不愿復(fù)查的壞習(xí)慣要給予糾正。項目經(jīng)理必須要從軟件開發(fā)的歷史數(shù)據(jù)和輔助工具包提供的數(shù)據(jù)中作出精確的估計,在作估計時他應(yīng)該考慮為不斷變化的用戶需求留出富余量。
在軟件開發(fā)項目中經(jīng)常出現(xiàn)二種極端情況:一種是創(chuàng)造了新的生產(chǎn)率和質(zhì)量的紀(jì)錄;一種則完全是一場災(zāi)難,不是被取消就是拖延很長時間。通過提煉這些成功和失敗的例子,軟件項目成功或失敗的根本原因可能會更清晰一些。
在討論這些原因之前,我們先來定義一下什么情況可以稱為失敗的軟件項目。
1. 由于費用超支或計劃執(zhí)行超時而終止。
2. 完成計劃的時間或費用超過了原計劃的50%。
3. 由于質(zhì)量或性能上的原因引起和客戶的糾紛。
下面我們將按其影響大小的順序排列說明5種錯誤的實踐方式。
錯誤1:沒有軟件開發(fā)的歷史數(shù)據(jù)
缺乏軟件開發(fā)的歷史數(shù)據(jù)是大多數(shù)軟件項目失敗的關(guān)鍵所在, 這樣的結(jié)論也許使很多人感到吃驚,但事實就是如此。沒有一個可靠的軟件開發(fā)的歷史數(shù)據(jù)會使項目經(jīng)理,程序員,客戶對于軟件開發(fā)的過程缺少清醒的認(rèn)識。
假設(shè)現(xiàn)在你正在管理一個軟件項目,而這個項目還沒有一個公司在36個月內(nèi)完成。作為一個負(fù)責(zé)的經(jīng)理,你作了一個比較細(xì)致和保守的估計,然后告訴你的客戶和你的手下說你認(rèn)為這個項目需要36-38個月完成。然而常常有這樣的情況發(fā)生:你的客戶和程序員要求把時間壓縮到18個月??蛻粢环矫嫦M浖M早投入使用而產(chǎn)生經(jīng)濟(jì)效益,一方面也想壓縮項目時間作為一個討價還價的籌碼;而程序員一方面可能過于自信,一方面盡早結(jié)束項目也能使他們多賺點錢。而此時你的手頭上也沒有一個可靠的軟件開發(fā)的歷史數(shù)據(jù),在他們的壓力下你同意了18個月的計劃,于是一場災(zāi)難開始了。在項目的開始階段你發(fā)現(xiàn)計劃被拖延了,于是開始向程序員們施加壓力,要求他們加快進(jìn)度,程序員為了追求進(jìn)度而不得不把其它指標(biāo)放在一邊,這些問題不斷的積累下來而項目經(jīng)理卻蒙在鼓里。到了項目中后期這些質(zhì)量問題會不斷暴露出來,而且互相關(guān)聯(lián)并且難以解決,甚至有些是系統(tǒng)設(shè)計的問題,這時才發(fā)現(xiàn)好多模塊要推倒重來,18個月完成計劃變成了天方夜譚。雖然上面只是一個虛擬的例子,但在實際中這種情況比比皆是。問題的關(guān)鍵就在于軟件開發(fā)的歷史數(shù)據(jù)是反映軟件開發(fā)隊伍的能力的標(biāo)尺,沒有了這個標(biāo)尺,就無法對軟件的開發(fā)過程有一個清醒的認(rèn)識。
錯誤2:不重視使用軟件費用估值工具軟件和計劃工具軟件
國內(nèi)的軟件公司大多數(shù)是處在“十幾條槍,一個手工作坊”的水平上,在承接軟件開發(fā)的項目之后往往是幾位骨干人物討論之后對費用和進(jìn)度作一個大致的估計,然后就開始進(jìn)入項目的執(zhí)行。這種方法帶有明顯的主觀性。在作一個精確的軟件費用估計和作一個比較現(xiàn)實的項目開發(fā)計劃時需要考慮許多因素。對于一個大的軟件項目,用手工作費用估計和作計劃是不能勝任的?,F(xiàn)在國外市場上有大約50種商業(yè)軟件費用估計工具包和大約100種商業(yè)項目計劃工具包,使用他們作精確的估計比手工的估計更可能獲得成功。常用的軟件費用估計工具軟件有Checkpoint,Colomo,Estimacs,Price_s,Slim。 常用的項目管理軟件有MSProject,Primavera,Project Manager*s Workbench, Timeline。把這二種工具軟件聯(lián)合使用可以互為補(bǔ)充,幫助經(jīng)理駁回客戶和程序員的無理要求并且能精確的控制項目的執(zhí)行。
錯誤3:忽視用戶的需求的變動
盡管最初的用戶需求在簽定開發(fā)合同時已經(jīng)包含在需求說明書中, 但在整個開發(fā)周期中期望用戶的需求一直保持不變是不大可能的,因為用戶對于如何應(yīng)用計算機(jī)軟件并沒有一個成熟的經(jīng)驗。在項目進(jìn)行中用戶的需求會不斷的增長,一般情況下用戶的需求以每月1%的速率增加,如果一個項目在12個月內(nèi)完成,最終將有超過10%的改動,如果項目要持續(xù)36個月,最后將增加1/3的功能。每月1%也只是一個經(jīng)驗數(shù)據(jù),一個缺乏計算機(jī)應(yīng)用經(jīng)驗的用戶會更頻繁的改變和增加他的要求。因此在作項目的費用和時間估計時一定要考慮用戶需求的變化。一種比較明智的方法是在簽定開發(fā)合同時把用戶需求的改動和經(jīng)濟(jì)利益掛鉤,如果用戶增加或改動了需求,那么軟件的交付日期可以推遲,費用也應(yīng)增加。
錯誤4:忽視監(jiān)督項目的進(jìn)度
到目前為止,軟件產(chǎn)業(yè)還沒有一個標(biāo)準(zhǔn)的項目進(jìn)度的檢查標(biāo)準(zhǔn)。一個比較清晰的尺度是用已經(jīng)實現(xiàn)的軟件功能反映項目的進(jìn)度。但這種方法是否就是最科學(xué)的衡量標(biāo)準(zhǔn),現(xiàn)在還不能定論,畢竟在一個軟件項目中軟件功能只是一個主要而非全部的任務(wù)。因此一個項目經(jīng)理在監(jiān)控項目執(zhí)行時不應(yīng)該只關(guān)注實現(xiàn)的軟件功能,還要關(guān)心文檔,測試,技術(shù)支持這些因素。在實際工作中我們經(jīng)常聽到經(jīng)理或程序員說這樣的話:“項目已經(jīng)完成了90%”,這種結(jié)論帶有明顯的主觀性,一個優(yōu)秀的項目經(jīng)理不應(yīng)該被手下的判斷所迷惑,而應(yīng)該按照一個比較客觀的標(biāo)準(zhǔn)去深入檢查。
錯誤5:忽視設(shè)計復(fù)查和代碼復(fù)查
很多程序員習(xí)慣于這樣一種工作方式:只做不想。他們更關(guān)心每天可以寫多少行代碼,完成幾個模塊。在這種態(tài)度下,他們都很不愿意復(fù)查自己的工作,而習(xí)慣于在軟件測試階段把隱藏的錯誤改正過來。但設(shè)計復(fù)查和代碼復(fù)查在大型的軟件項目中已經(jīng)有30年的應(yīng)用歷史,而且已經(jīng)被證明在設(shè)計和代碼編寫階段的復(fù)查比軟件測試更能有效的消除錯誤,一些經(jīng)驗數(shù)據(jù)表明,在設(shè)計和代碼復(fù)查時發(fā)現(xiàn)的錯誤是在同等工作量下軟件測試發(fā)現(xiàn)的錯誤的兩倍。
結(jié)論:
軟件開發(fā)是一個帶有一定風(fēng)險的工作,為了把風(fēng)險降到最低, 在項目的執(zhí)行中項目經(jīng)理必須嚴(yán)格的監(jiān)督項目的進(jìn)度,對程序員不愿復(fù)查的壞習(xí)慣要給予糾正。項目經(jīng)理必須要從軟件開發(fā)的歷史數(shù)據(jù)和輔助工具包提供的數(shù)據(jù)中作出精確的估計,在作估計時他應(yīng)該考慮為不斷變化的用戶需求留出富余量。

