公司在發(fā)展的同時,也會積蓄一些各方面經(jīng)驗。列出所有的經(jīng)驗,按其分類。系統(tǒng)分析中的經(jīng)驗提供給系統(tǒng)分析,設(shè)計人員中的經(jīng)驗提供給管理人員,技術(shù)中的經(jīng)驗提供給開發(fā)員。這樣我們會有更多的時間花在新的錯誤的防范上面。開發(fā)出來的系統(tǒng)會一個比一個好。
2)風(fēng)險管理:
下面先看一下來自一段網(wǎng)上的文章吧!
“一般認(rèn)為賭博是在冒險。拉斯維加斯老虎機(jī)的設(shè)計者將老虎機(jī)的大賠付率定為97%,即你花時間,往老虎機(jī)里塞進(jìn)100元,多只能贏回970元。
但是,如果比起軟件開發(fā)所冒險,拉斯維加斯的賭博簡直可以稱為“安全的冒險”了。軟件項目所面臨的不斷變換的用戶需求、糟糕的計劃與估算、不可信賴的承包人、欠缺的管理經(jīng)驗、人員問題、傷筋動骨的技術(shù)失敗、性能欠佳...等等不勝枚舉的風(fēng)險,使大型項目按時完成的概率幾乎為0,大型項目被取消的概率和賭博一樣成敗參半(Jones 1991)。”
所以項目開發(fā)中對風(fēng)險進(jìn)行控制管理大大提高了軟件開發(fā)的成功性。軟件風(fēng)險管理工作是在風(fēng)險成為影響軟件項目成功的威脅之前,識別、著手處理并消除風(fēng)險的源頭。一般我們可以在幾個層次上定位、管理風(fēng)險。
1) 危機(jī)管理---救火模式,是在風(fēng)險已經(jīng)造成麻煩后才著手處理它們。
2) 失敗處理---察覺到了風(fēng)險并迅速做出反應(yīng),但只是在風(fēng)險發(fā)生之后。
3) 風(fēng)險緩解---事先制定好風(fēng)險發(fā)生后的補(bǔ)救措施,但不做任何防范措施。
4) 著力預(yù)防---將風(fēng)險識別與風(fēng)險防范作為軟件項目的一部分加以規(guī)劃和執(zhí)行。
5) 消滅根源---識別和消除可能產(chǎn)生風(fēng)險的根源。
1、2、3項都是被動進(jìn)行的,亡羊補(bǔ)牢,為時已完。所以我們應(yīng)當(dāng)著力于預(yù)防風(fēng)險,更好的是消除風(fēng)險根源。
風(fēng)險管理由風(fēng)險評估和風(fēng)險控制。而風(fēng)險評估由風(fēng)險識別、風(fēng)險分析和風(fēng)險優(yōu)先級組成:
● 風(fēng)險識別:是提出一個潛在破壞項目進(jìn)度的風(fēng)險列表,像生成錯誤列表一樣。
● 風(fēng)險分析:評估每一個風(fēng)險出現(xiàn)的可能性及其影響,判定風(fēng)險的級別。
● 風(fēng)險優(yōu)先級:按風(fēng)險影響大小排出一個風(fēng)險優(yōu)先級,這個風(fēng)險列表將作為風(fēng)險控制的基礎(chǔ)。
風(fēng)險控制由風(fēng)險管理計劃,風(fēng)險化解和風(fēng)險監(jiān)控組成。
● 風(fēng)險管理計劃:制定一個應(yīng)對每個重要風(fēng)險的方案,同時確保每一個單獨的風(fēng)險管理計劃之間以及與整體項目計劃之間相一致。
● 風(fēng)險化解:每個重要風(fēng)險所對應(yīng)計劃的執(zhí)行。
● 風(fēng)險監(jiān)控:是對解決風(fēng)險的過程進(jìn)行監(jiān)控,風(fēng)險監(jiān)控還可以包括識別新的風(fēng)險并將其反饋到正在進(jìn)行的風(fēng)險管理進(jìn)程中等方面的工作。
現(xiàn)在以我以前做的項目來說明一下我是怎樣進(jìn)行風(fēng)險管理的。
接到項目對項目進(jìn)行調(diào)研工作,在調(diào)研中要注意到克服錯誤列表中的錯誤。調(diào)研完成后,寫需求說明書初稿(一般根據(jù)情況至少給出兩個以上的方案),為客戶進(jìn)行講解,結(jié)合客戶意見再次進(jìn)行修改。把修改后的說明書和同事進(jìn)行討論,再次進(jìn)行修改。在此期間寫出總體設(shè)計的初稿(大的框架)。后再為客戶講解,再次修改少量的功能?蛻舸_定需求滿足后可進(jìn)行總體設(shè)計了。在生成需求分析的同時,注意列出需求中存在的風(fēng)險。如:需求改變問題、需求定義欠佳等風(fēng)險。在進(jìn)行總體設(shè)計時,多和客戶交流。因為在總體設(shè)計中修改需求比在詳細(xì)設(shè)計中修改要容易比在編碼階段修改更加容易了。之后生成總體設(shè)計說明書。同時在總體設(shè)計中也要對一些不定的因素進(jìn)行風(fēng)險監(jiān)控。列出風(fēng)險列表。根據(jù)總體設(shè)計說明書可以開始詳細(xì)設(shè)計了。在詳細(xì)設(shè)計中除了要考慮系統(tǒng)設(shè)計外還要考慮一些技術(shù)風(fēng)險問題。把很難預(yù)見的問題列到風(fēng)險列表中。注意,從需求分析到詳細(xì)設(shè)計,隨著系統(tǒng)開發(fā)的進(jìn)度, 以前不明的因素將會慢慢顯露。同時也會出現(xiàn)新的不明因素。這樣讓我們必須在整個設(shè)計開發(fā)過程中進(jìn)行風(fēng)險監(jiān)控、風(fēng)險識別、風(fēng)險分析和風(fēng)險化解工作。同理,在編碼中也同樣處理。在開發(fā)過程中根據(jù)分析不同,把風(fēng)險按階段分為需求分析階段風(fēng)險、總體設(shè)計階段風(fēng)險、詳細(xì)設(shè)計階段風(fēng)險和編碼階段風(fēng)險。并交由此階段的人員進(jìn)行監(jiān)控和化解。同時,如果在化解安全區(qū)(規(guī)定解決問題的時間段中)內(nèi)無法完成解決,則提交專家組(包括到外請的專家顧問)解決( 我們一般是在周五下午的討論會上進(jìn)行)。當(dāng)然軟件開發(fā)中所碰到的風(fēng)險是很多的。但不可能完全同時進(jìn)行風(fēng)險監(jiān)控的。通常是把風(fēng)險列表中認(rèn)為會發(fā)生的風(fēng)險乘損失的大小后的大數(shù)進(jìn)行嚴(yán)格的監(jiān)控起來。隨著開發(fā)進(jìn)度,風(fēng)險是在變化的,所以風(fēng)險列表可能會增加也可能會減少。只要風(fēng)險管理好了。系統(tǒng)成功了一大半。
3)人員管理:
不同人員之間經(jīng)驗的不同導(dǎo)致績效差別是有目共睹的,大家可能對不同開發(fā)人員之間生產(chǎn)效率差距達(dá)10:1的觀點較為熟悉,大家也知道一些明確激勵措施所帶來的正面影響。所以人員管理在軟件項目中也有較重的分量。很清楚,人力因素極大地影響著生產(chǎn)效率,同時任何關(guān)注提高生產(chǎn)效率的組織首先必須有一套良好的人員激勵、團(tuán)隊合作、員工選擇及培訓(xùn)的機(jī)制。這樣才能充分發(fā)揮人員的自身能動性。為公司創(chuàng)造更多的價值。
除了以上幾個面的管理外還有其它方面的管理也決定軟件項目的成功與否。如:團(tuán)隊合作、團(tuán)隊結(jié)構(gòu)、生產(chǎn)率工具等等。這里不多說。大家還是抽空多看看書。因為只要你選擇了從事計算機(jī)工作,你選擇了永不能停止的學(xué)習(xí)、學(xué)習(xí),再學(xué)習(xí)。否則你將被淘汰。這是多么殘酷但又多么現(xiàn)實的事呀!
三、在項目開發(fā)中軟件工程VS項目管理:
開發(fā)員對軟件工程是多么熟悉的呀!為什么會有這么熟悉呢?因為現(xiàn)在的項目要求開發(fā)員“按章辦事”。否則充其量也只是一部編程機(jī)器。上面已講了軟件工程的重要性,這里不多說,F(xiàn)在打個比喻,如果把軟件工程比做音樂家,那項目管理是音樂指揮家。一個好的音樂家一個人能奏出動聽的音樂,但一群好的音樂家在一起不一定能揍出好的交響樂。它還必須有一位好的指揮家。軟件開發(fā)也是一樣的,有好的程序員只是前提條件,要開發(fā)出好的軟件,還要有一個好的管理。