能、可用性和產(chǎn)品質(zhì)量。
5、開發(fā)環(huán)境的保護(hù)與基礎(chǔ)設(shè)施的維護(hù)。
兵家云:天時(shí)、地利、人和。沒有一個(gè)好的開發(fā)環(huán)境,很難想象開發(fā)人員能夠高效率的工作。開發(fā)環(huán)境必須是相對(duì)獨(dú)立,又利于交流與溝通的工作室。具體的說,項(xiàng)目組的工作環(huán)境必須拒絕項(xiàng)目無關(guān)人員的干擾與破壞,但卻無阻于項(xiàng)目成員,特別是同一小組成員的交流。此外,會(huì)議室的數(shù)量非常重要。我在管理一個(gè)項(xiàng)目時(shí),竟然常常為尋找會(huì)議室而東奔西走,將大量的時(shí)間浪費(fèi)在會(huì)議準(zhǔn)備上。此外,服務(wù)器、客戶機(jī)、網(wǎng)絡(luò)、打印機(jī)、白板、卡片,以及開發(fā)工具和軟件,例如IDE開發(fā)環(huán)境、版本控制工具、Bug管理工具等,都需要在團(tuán)隊(duì)建立之初就要準(zhǔn)備好。對(duì)于計(jì)算機(jī)、網(wǎng)絡(luò)和相關(guān)工具,則必須保證在項(xiàng)目開發(fā)期間的穩(wěn)定性、暢通性。我曾經(jīng)在項(xiàng)目開發(fā)中,因?yàn)榫W(wǎng)絡(luò)中斷、病毒侵襲以及服務(wù)器壞掉從而破壞了SVN的版本管理等諸多突發(fā)事件,讓我在本來就緊張的開發(fā)時(shí)間里,犧牲了不低于三天的時(shí)間,真是讓我抓狂不已!所以說,一個(gè)好的網(wǎng)絡(luò)管理中心、一個(gè)好的配置管理員,在關(guān)鍵時(shí)刻,可以抵得上半打高效的開發(fā)人員呢。如果你在項(xiàng)目開發(fā)過程中,頻繁遭遇這樣的問題,我的忠告是,趕緊準(zhǔn)備換一家公司吧。
6、合理控制需求變更。
需求變更是軟件開發(fā)必然遭遇的暴風(fēng)雪,也是導(dǎo)致“沒有銀彈”的淵藪。傳統(tǒng)的瀑布開發(fā)模型在項(xiàng)目后期遭遇需求變更時(shí),只能束手無策,但RUP與敏捷方法卻能夠坦然面對(duì)需求的變更,Kent Beck甚至在敏捷開發(fā)中提出了擁抱變化,真是足夠勇敢與足夠信心的宣言??!在軟件開發(fā)中,若要應(yīng)對(duì)軟件開發(fā),一般的做法是合理設(shè)計(jì),以求系統(tǒng)與架構(gòu)具有足夠的可擴(kuò)展性;其次則是采用迭代的開發(fā)方式,通過定期甚至是短周期地交付可工作的產(chǎn)品,以印證需求與實(shí)現(xiàn)是否一致。同時(shí),在項(xiàng)目中通過引入客戶的積極參與,使得項(xiàng)目組與客戶的交流能夠暢通無阻,從而避免因?yàn)楦糸u而導(dǎo)致需求分析產(chǎn)生的誤差,以及需求變更無法及時(shí)提出。此外,利用原型快速開發(fā)方式,可以盡快地交付一個(gè)無具體實(shí)現(xiàn)的產(chǎn)品框架或原型,以驗(yàn)證業(yè)務(wù)規(guī)則、業(yè)務(wù)流程以及客戶對(duì)GUI的要求。然而,需求變更絕對(duì)不能無休止地進(jìn)行,這會(huì)導(dǎo)致迭代的永無眠日。即使是敏捷開發(fā),我們?nèi)匀灰O(shè)定客戶委托事項(xiàng)的基本線,一旦超出這一基本線,變更委員會(huì)(CCB)或其他擔(dān)負(fù)這一職責(zé)的角色就必須提出異議,與客戶協(xié)商或探討這種變更是否是必須的??刂菩枨笞兏囊粋€(gè)實(shí)踐是,獲得客戶對(duì)分析出來的功能點(diǎn)的書面確認(rèn)。雖然在發(fā)生變更時(shí),客戶的意見甚至可以無視這種書面文章,但至少可以在與客戶的談判中搶得先機(jī)。根據(jù)Mark Lines所說,通過變更控制的增強(qiáng)還可以降低項(xiàng)目風(fēng)險(xiǎn)。確實(shí)如此,在與客戶談判中,我們要學(xué)會(huì)說出“拒絕”兩個(gè)字。當(dāng)然,在對(duì)需求變更做出決定性意見之前,必須分析判斷這樣的變更是否合理,是否必要,或者優(yōu)先級(jí)高。一種折中的辦法則是,欣然承諾此次變更,但需要延遲最后期限,或者放在下一次版本迭代之后。
7、預(yù)先評(píng)估風(fēng)險(xiǎn)。
風(fēng)險(xiǎn)無處不在。Cockburn將軟件開發(fā)形容為攀巖或者穿越沼澤,已經(jīng)充分說明了軟件開發(fā)過程中的風(fēng)險(xiǎn)。孫子兵法云:夫未戰(zhàn)而廟算勝者,得算多也;未戰(zhàn)而廟算不勝者,得算少也。先預(yù)先著失敗的可能,方能夠謹(jǐn)慎地做好各種準(zhǔn)備,考慮各種風(fēng)險(xiǎn)以及驅(qū)避措施,方能夠最大可能地取得勝利。軟件開發(fā)的風(fēng)險(xiǎn)有很多,其中至關(guān)重要的是進(jìn)度風(fēng)險(xiǎn)、技術(shù)風(fēng)險(xiǎn)、需求變更風(fēng)險(xiǎn)、成員變動(dòng)風(fēng)險(xiǎn)。
軟件是可以度量的嗎?看起來是,因?yàn)橐呀?jīng)有了很多方法來完成軟件的度量。從控制學(xué)的理論來看,你無法控制那些你無法度量的。因而軟件度量對(duì)于控制軟件開發(fā)而言,就成為了關(guān)鍵。軟件度量甚至因此成為了