小的結(jié)構(gòu)文檔:源代碼是文件
除了API文檔,微軟不對(duì)其產(chǎn)品結(jié)構(gòu)生成相應(yīng)的文檔,雖然有時(shí)高級(jí)開發(fā)員可能會(huì)寫下高層結(jié)構(gòu)。對(duì)復(fù)雜的特性,許多開發(fā)員在某些點(diǎn)記錄并復(fù)查特定于他們所負(fù)責(zé)的結(jié)構(gòu)細(xì)節(jié),但此工作是可選的,并不強(qiáng)制執(zhí)行。除了源代碼文件與特性說明,為數(shù)不多的組為新程序員準(zhǔn)務(wù)了描繪某層結(jié)構(gòu)的文檔(主要的數(shù)據(jù)結(jié)構(gòu),如何工作等等)。但是這些文件并不時(shí)常更新,經(jīng)理們也不要求項(xiàng)目組生成此類內(nèi)部文檔。在有關(guān)的說明文件中,并不涉及實(shí)現(xiàn)問題。開發(fā)員應(yīng)該知道如何去實(shí)現(xiàn),或者能夠去學(xué)會(huì)。記錄的關(guān)于結(jié)構(gòu)的文檔如此之少是因?yàn)?ldquo;一個(gè)開發(fā)員的工作是編寫我們要賣的代碼,而不是花時(shí)間寫高水平的設(shè)計(jì)文件”,“設(shè)計(jì)文件不應(yīng)與源代碼分離”。分割代碼與“保持事情的簡(jiǎn)單”。
特性小組和作為"內(nèi)容專家"的小組領(lǐng)導(dǎo)
特性小組一般由一個(gè)領(lǐng)導(dǎo)和3至8名開發(fā)人員組成,工作于相關(guān)的特性領(lǐng)域。小組的規(guī)模常常視小組領(lǐng)導(dǎo)的經(jīng)驗(yàn)和能力而定。特性小組領(lǐng)導(dǎo)向項(xiàng)目開發(fā)領(lǐng)導(dǎo)匯報(bào)并負(fù)責(zé)項(xiàng)目的全部開發(fā)工作;而項(xiàng)目開發(fā)領(lǐng)導(dǎo)則擁有對(duì)產(chǎn)品的更為全局性的觀點(diǎn),從而有可能發(fā)現(xiàn)不互相關(guān)聯(lián)的問題。在特性小組中的每個(gè)人均是此領(lǐng)域的“專家”,他們了解如何使用產(chǎn)品、了解競(jìng)爭(zhēng)對(duì)手的產(chǎn)品、了解未來將向何處去。通常為便于交流,提高軟件的組織結(jié)構(gòu)(軟件傾向于映射出構(gòu)造它的組織的結(jié)構(gòu)),應(yīng)保持特性小組的小規(guī)模。
原則五:靠個(gè)人負(fù)責(zé)和固定項(xiàng)目資源實(shí)旋控制
對(duì)于軟件項(xiàng)目而言,精確估計(jì)產(chǎn)品的開發(fā)與交付進(jìn)度是很困難的。對(duì)此微軟采取的方法是將進(jìn)度安排和工作管理的責(zé)任推到底層,即單個(gè)的開發(fā)人員和測(cè)試人員那兒去。這保證了每個(gè)人除了作為小組的一部分外,還負(fù)有個(gè)人的責(zé)任。單獨(dú)的開發(fā)人員設(shè)立他們自已的進(jìn)度表,程序經(jīng)理把單獨(dú)的進(jìn)度表匯總起來,再加上緩沖時(shí)間,以制定出一個(gè)全面的項(xiàng)目進(jìn)度表。頂層的總經(jīng)理也固定人員與時(shí)間等基本資源,以確保項(xiàng)目集中并限制其努力與創(chuàng)造程序。
關(guān)鍵的目標(biāo),尤其對(duì)應(yīng)用軟件,是指明產(chǎn)品的目標(biāo)出品日并爭(zhēng)取盡可能長(zhǎng)久地堅(jiān)持它。程序經(jīng)理和開發(fā)員從出品日回溯,規(guī)定中間的項(xiàng)目里程碑的日期。這個(gè)“固定的出品日法“的中心在開發(fā)員身上。以避免因?yàn)轫?xiàng)目沒有固定的結(jié)束點(diǎn),導(dǎo)致在終無用的設(shè)計(jì)、再設(shè)計(jì)和測(cè)試的循環(huán)中消耗一年或更多的時(shí)間。
開發(fā)人員做出他們自已的進(jìn)度估計(jì)
“日期設(shè)定方法"。但是開發(fā)人員一般會(huì)做出較樂觀的估計(jì),因此開發(fā)經(jīng)理還需對(duì)他們所提供的日期進(jìn)行調(diào)整并加上緩沖時(shí)間以避免因因信息不完全而出現(xiàn)的問題。微軟這種制定進(jìn)度的方法的優(yōu)點(diǎn)在于:它從人們那兒得到更多的合作,因?yàn)槿掌谑亲砸讯ǖ模皇墙?jīng)理定的;進(jìn)度總是富有進(jìn)取性,因?yàn)殚_發(fā)人員不可避免地會(huì)低估他們真正需要的時(shí)間。
對(duì)細(xì)致的任務(wù)的進(jìn)度估計(jì)
微軟的第二個(gè)進(jìn)度安排方法是:對(duì)要完成的任務(wù)做非常詳盡的考慮,在此基礎(chǔ)上請(qǐng)開發(fā)人員給出他們對(duì)“實(shí)現(xiàn)”的估計(jì),以此力圖“促使”更加現(xiàn)實(shí)主義并避免過度低估。
通常微軟把任務(wù)細(xì)化到4小時(shí)(半天)到3天之間。對(duì)于準(zhǔn)確進(jìn)度的安排,微軟的經(jīng)理是這樣認(rèn)識(shí)的:“任何任務(wù)只要超過一星期,那人們一定沒有充分地全盤考慮它。任何任務(wù)某人估計(jì)只用少于半天可完成,則他對(duì)它考慮得太多了。他應(yīng)該用更多的時(shí)間去編程,更少的時(shí)間來考慮”。對(duì)于類似類于Windows NT之類的操作系統(tǒng)而言,進(jìn)度安排更加困難,對(duì)其一般以幾天或者半周為工作單位進(jìn)行進(jìn)度估計(jì)。
安排開發(fā)人員與小組進(jìn)度時(shí)的心理學(xué)
當(dāng)項(xiàng)目變大時(shí),微軟把員工分成小組。然后經(jīng)理把進(jìn)度的責(zé)任和所有權(quán)盡可能地分發(fā)下去,直到小組和個(gè)人;這使二者都產(chǎn)生了一種擁用工作的感覺。它還在小組中,個(gè)人中,尤其是小組領(lǐng)導(dǎo)中造成強(qiáng)烈的跟上其它同事預(yù)計(jì)進(jìn)度的壓力,因?yàn)榻?jīng)理可能再平衡進(jìn)度,從落后的小組或個(gè)人手中拿走工作。這樣,同事間的壓力使經(jīng)理不需要太多的努力可以對(duì)個(gè)人或單個(gè)小組的進(jìn)程實(shí)施嚴(yán)格控制。
"固定的"出品日( RTM: Release To Manufacture)
為了把創(chuàng)造力約束在時(shí)間限制之中,微軟現(xiàn)在在新產(chǎn)品或者產(chǎn)品新版本開始前爭(zhēng)取固定出品日,至少是有出品日的內(nèi)部目標(biāo)。這給人們施加砍去特性和集中在一個(gè)項(xiàng)目上的壓力,逼迫他們?nèi)タ嗫嗨伎紤?yīng)將哪個(gè)新特性加入產(chǎn)品中。雖然終產(chǎn)品的交付目標(biāo)可能是由高級(jí)執(zhí)行人員設(shè)定,但是開發(fā)人員與小組仍然設(shè)定他們自已的進(jìn)度表。
微軟一般根據(jù)預(yù)先的時(shí)間進(jìn)度的大致估計(jì)出一個(gè)RTM日期,然后向前回溯相應(yīng)的各個(gè)Milestone日期,如RC、Beta、Tree Lock、UI Freeze、Feature Complete以及CC(Code Complete)等等各個(gè)Milestone的相應(yīng)日期。制定出十分詳盡的產(chǎn)品研究開發(fā)時(shí)間進(jìn)度表,產(chǎn)品開發(fā)組的各個(gè)成員以這個(gè)進(jìn)度表為目標(biāo)統(tǒng)一協(xié)調(diào)工作。微軟十分強(qiáng)調(diào)軟件開發(fā)過程中的Teamwork Spirits,這種理念貫穿在微軟各個(gè)產(chǎn)品開發(fā)的各個(gè)階段。這也是微軟得以成功的一個(gè)十分重要的原因。
小結(jié):同步-穩(wěn)定開發(fā)法
計(jì)劃階段
定義產(chǎn)品的想象性描述、說明與進(jìn)度
想象性描述 產(chǎn)品和程序管理部門運(yùn)用廣泛的顧客意見來確定和優(yōu)化產(chǎn)品的特性。
說明文件 基于想象性描述,程序管理部門與開發(fā)組定義特性的功能,結(jié)構(gòu)問題,以及各部分間的相關(guān)性。
制訂進(jìn)度表與構(gòu)造特性小組 其于說明文件,程序管理部門協(xié)調(diào)進(jìn)度表,安排出特性小組,每個(gè)小組包括大約1名程序經(jīng)理,3 - 8個(gè)開發(fā)員,3 - 8個(gè)測(cè)試員(以1:1比例與開發(fā)員平行工作。)
開發(fā)階段
用3 - 4個(gè)順序的子項(xiàng)目,每個(gè)產(chǎn)生一個(gè)里程碑式的產(chǎn)品發(fā)送,來完成特性的開發(fā)。程序經(jīng)理協(xié)調(diào)開發(fā)過程。開發(fā)員設(shè)計(jì)、編碼、調(diào)試。測(cè)試員與開發(fā)員配對(duì),不斷進(jìn)行測(cè)試。
子項(xiàng)目1 前1/3的特性:重要的特性與共享的構(gòu)件。
子項(xiàng)目2中間1/3的特性。
子項(xiàng)目3后1/3的特性:不重要的特性。
穩(wěn)定化階段
全面的內(nèi)外部測(cè)試,后的產(chǎn)品穩(wěn)定化以及發(fā)貨。程序經(jīng)理協(xié)調(diào)OEM與ISV,監(jiān)督從顧客得到的信息反饋。開發(fā)員進(jìn)行后的調(diào)試與代碼穩(wěn)定化。測(cè)試員發(fā)現(xiàn)并清除錯(cuò)誤。
內(nèi)部測(cè)試 公司內(nèi)部對(duì)整個(gè)產(chǎn)品做詳盡的測(cè)試。
外部測(cè)試 公司外在的"β"測(cè)試點(diǎn),象OEM,ISV以及終用戶處對(duì)整個(gè)產(chǎn)品做詳盡的測(cè)試。
發(fā)貨準(zhǔn)備 為批量生產(chǎn)準(zhǔn)備發(fā)布后的“金盤”(Golden Disk)與文檔,制作之前,還需要進(jìn)行各種嚴(yán)格的檢查:如政治敏感性術(shù)語檢查、病毒檢查、文件相關(guān)性檢查等。