整合式開發(fā)環(huán)境(Integrated Development Environment,IDE)以往僅扮演工具的角色,但近來面對(duì)軟件在商業(yè)應(yīng)用日趨復(fù)雜所帶來的「突顯特性(Emergent Property)」,這類性質(zhì)難以在項(xiàng)目初期事前預(yù)測(cè),卻影響著上線后整體系統(tǒng)運(yùn)作的穩(wěn)定性與可靠度,而這也是客戶非常在意的兩個(gè)結(jié)案重點(diǎn)。
微軟去年底發(fā)表Visual Studio 2005(后續(xù)文章中簡(jiǎn)稱為VS2005)試圖協(xié)助企業(yè)開發(fā)穩(wěn)固可靠的軟件,首次在單一工具內(nèi)建開發(fā)方法(樂譜)與項(xiàng)目管理(指揮),讓旗下原有的 Visual Studio產(chǎn)品脫胎換骨,成為不折不扣的計(jì)算機(jī)輔助軟件工程工具(Computer-Aided Software Engineering Tools,CASE Tools)。對(duì)同級(jí)解決方案供貨商如IBM或Borland而言,或許不算是新鮮事,但微軟的創(chuàng)新在于它僅用一個(gè)工具就辦到了!
以軟件工程為主的開發(fā)方法,目的是讓企業(yè)能以合乎成本效益的方式,有效地控管軟件開發(fā)與質(zhì)量。然而,軟件工程從70年代中期便提出,截至目前為止并未讓本土的軟件產(chǎn)業(yè)帶來競(jìng)爭(zhēng)力的變革,探究其成因是軟件工程本身為抽象概念,難以落實(shí)在現(xiàn)實(shí)開發(fā)作業(yè)流程。微軟突破從抽象到具體的實(shí)踐管道,以VS2005結(jié)合軟件工程與項(xiàng)目管理,包裝成為軟件開發(fā)生命周期(Software Development Life Cycle,SDLC)。雖然后續(xù)效益有待觀察,但勢(shì)必對(duì)現(xiàn)今開發(fā)現(xiàn)況帶來沖擊。這些沖擊包括:
1.首當(dāng)其沖的是否適合使用軟件工程這類結(jié)構(gòu)性的開發(fā)方法,在企業(yè)組織與成本上重新變革。
2.接下來是VS2005 Express免費(fèi)版,在Eclipse開發(fā)平臺(tái)或PHP、Java語言陣營(yíng)投下震撼彈,讓猶豫不決的初學(xué)者琵琶別抱。
3.最后是結(jié)合自家的SQL Server 2005,使得程序設(shè)計(jì)師或數(shù)據(jù)庫(kù)管理員可以使用.NET語言撰寫數(shù)據(jù)庫(kù)查詢語法,并改進(jìn)以往數(shù)據(jù)庫(kù)程序無法偵錯(cuò)的缺點(diǎn),甚至可完成軟件開發(fā)生命周期。
這都將是此篇文章中所要探討的問題,但我們先簡(jiǎn)述目前企業(yè)面對(duì)軟件開發(fā)的幾個(gè)問題:
?。④浖?xiàng)目充斥漫無章法的管理制度與開發(fā)流程"
如果軟件項(xiàng)目主管比喻為樂團(tuán)指揮,那么項(xiàng)目經(jīng)理像是握著指揮棒卻沒有指揮權(quán)力的角色,缺乏協(xié)調(diào)的操舵手,樂團(tuán)如何能彈出和諧的交響樂?簡(jiǎn)單地說,本土的軟件項(xiàng)目常出現(xiàn)外行領(lǐng)導(dǎo)內(nèi)行的窘境。企業(yè)主管常直覺上會(huì)選擇擅長(zhǎng)溝通的人負(fù)責(zé)管理軟件項(xiàng)目,讓擁有技術(shù)的資深工程師負(fù)責(zé)執(zhí)行,卻在無意中產(chǎn)生角色上的矛盾,前者不一定懂技術(shù)卻得領(lǐng)導(dǎo)技術(shù)團(tuán)隊(duì),而后者掌握關(guān)鍵的領(lǐng)域知識(shí)(Domain Know-How)卻無法決策。此外,主管或項(xiàng)目經(jīng)理與客戶討論軟件功能變更時(shí),資深工程師常被排除在外,通常是事后被迫接受客戶天馬行空的附加功能,最后只能概括承受,結(jié)果是寧愿敷衍了事、犧牲質(zhì)量,也不愿冒險(xiǎn)更動(dòng)架構(gòu)設(shè)計(jì)。主管總因?yàn)轫?xiàng)目的高失敗率與客戶的抱怨而失眠,他們不禁思考:
1.哪一種開發(fā)方法能兼顧技術(shù)與管理層面?
2.如何更有效地讓項(xiàng)目經(jīng)理與技術(shù)人員彼此間信息互通與共享?
3.軟件開發(fā)方向與質(zhì)量現(xiàn)況如何了?
4.是否工程師正處于高負(fù)荷量工作?是否有人偷雞摸狗?
5.客戶無預(yù)期地變更功能時(shí),項(xiàng)目經(jīng)理應(yīng)如何控管?
6.人員異動(dòng)或流程變更時(shí),項(xiàng)目應(yīng)如何接續(xù)?……諸如此類的問題
有趣的是,這原本不應(yīng)該是開發(fā)工具會(huì)提問的問題!反而是管理的弊病,微軟卻反其道而行,企圖說服企業(yè)導(dǎo)入制度化的開發(fā)工具,解決管理人員上(指揮)的問題。
接下來,微軟更具野心要解決團(tuán)隊(duì)協(xié)同開發(fā)(樂譜)方法的困難。目前企業(yè)因商業(yè)競(jìng)爭(zhēng)全球化導(dǎo)致產(chǎn)品供應(yīng)煉錯(cuò)綜復(fù)雜,顧客則因?yàn)槭袌?chǎng)供過于求使得選擇多樣化,卻讓企業(yè)難以了解客戶的需求究竟是什么,造成商業(yè)應(yīng)用軟件高度復(fù)雜,超越小型組織單打獨(dú)斗的開發(fā)能力,而不得不朝向大型團(tuán)隊(duì)合作的模式。這使得軟件開發(fā)面臨的全新的問題與挑戰(zhàn),起先從工具、再跨越到流程規(guī)范、并延伸到組織、最后必須采用企業(yè)化管理。然而,軟件項(xiàng)目高失敗率仍是企業(yè)主管揮之不去的夢(mèng)魘,不斷尋找嚴(yán)謹(jǐn)?shù)拈_發(fā)流程方法論以有效控制軟件變異性,而不是阻止軟件改變功能。微軟能夠在VS2005中內(nèi)建開發(fā)方法,并強(qiáng)調(diào)平臺(tái)化的高度整合與彈性,讓使用者在操作工具時(shí),不知不覺便完成制度化流程與項(xiàng)目控管等。
軟件項(xiàng)目缺少量身訂作的管理工具
「巧婦難為無米之炊」,企業(yè)主管面對(duì)軟件項(xiàng)目的多樣性??酂o適切的工具,包括各種技術(shù)專精人才的溝通與信息共享、為解決組織管理而造成流程上迭床架屋的復(fù)雜性,以及軟件項(xiàng)目的特殊性造成其產(chǎn)出物(artifacts)異于其它項(xiàng)目,這些創(chuàng)意的產(chǎn)出物都是軟件工程師的藝術(shù)杰作,其商業(yè)價(jià)值隱藏在程序代碼的字里行間,不僅難以量化管理,更難以衡量。就像生活外圍看似平凡無奇的石頭,卻是現(xiàn)在計(jì)算機(jī)主要的組成材料:硅的重要來源,而軟件工程師的價(jià)值,就在于他們有能力將商業(yè)邏輯轉(zhuǎn)換為程序代碼(將平凡的石頭提煉成芯片)。當(dāng)然,如果硅谷的軟件工程師因?yàn)榕^散發(fā)而視為藝術(shù)家(或者怪胎),那么不難想象項(xiàng)目經(jīng)理如何有通天的本領(lǐng)來控管這群怪胎的產(chǎn)出物了。
目前業(yè)界的解決方法,既然管不了程序的運(yùn)作結(jié)果,那么就管理程序代碼。就像工地的工頭一樣,與其擔(dān)心工人砌磚頭的過程中將城堡蓋成榻榻米,不如管好每一塊磚頭在堆砌時(shí)的去向,如果這樣還會(huì)蓋出榻榻米,就是項(xiàng)目經(jīng)理的錯(cuò)誤了。只是長(zhǎng)久以來,項(xiàng)目管理工具(例如Project)一直著重在時(shí)程與成本等企業(yè)管理項(xiàng)目上,少有針對(duì)軟件開發(fā)特殊領(lǐng)域的專屬工具。相對(duì)地,軟件項(xiàng)目管理工具雖然管理程序代碼,卻難以控管成本、資源、任務(wù)指派、進(jìn)度追蹤與績(jī)效等,讓軟件開發(fā)與項(xiàng)目管理一直是兩條并行線式的發(fā)展,缺少交集。
開發(fā)方法允許可控制的變動(dòng),而不是阻撓改變
開發(fā)方法的重要性最容易發(fā)生在團(tuán)隊(duì)開發(fā)上,對(duì)非技術(shù)背景的人而言,一個(gè)軟件工程師在計(jì)算機(jī)屏幕上畫出一只恐龍是很神奇的事,但對(duì)管理軟件團(tuán)隊(duì)的項(xiàng)目經(jīng)理而言,10個(gè)工程師可能畫出10種長(zhǎng)相、外型與行為都不同恐龍,如果缺少開發(fā)方法的規(guī)范,這些恐龍可能也無法湊成一部侏羅紀(jì)公園電影。開發(fā)方法像是電影劇本(或交響樂譜),但這個(gè)劇本不是用來限制藝術(shù)型式創(chuàng)作,而是讓創(chuàng)意朝向特定走向,避免發(fā)散與失控,這個(gè)方向就是客戶需求。此外,也不至于抹煞軟件工程師的創(chuàng)意。項(xiàng)目經(jīng)理就像好來塢優(yōu)秀導(dǎo)演一樣,要挑一本適合工程師演出,又深得客戶感動(dòng)的劇本。這在軟件開發(fā)項(xiàng)目上越來越重要,傳統(tǒng)常因?yàn)槿鄙龠m當(dāng)?shù)拈_發(fā)方法引導(dǎo),軟件項(xiàng)目便常出現(xiàn)脫稿演出,甚至偏離客戶需求方向。此時(shí),項(xiàng)目經(jīng)理只好不斷與客戶溝通,甚至隱瞞失控的問題,說服客戶達(dá)成共識(shí)讓項(xiàng)目勉強(qiáng)結(jié)案。
整合式開發(fā)環(huán)境供貨商著重技術(shù)層面的改版
整合式開發(fā)環(huán)境供貨商長(zhǎng)久以來,改版的動(dòng)機(jī)都在跟上最新技術(shù),例如微軟推出.Net Framework 2.0或Sun制定J2SE 1.5與EJB 3.0時(shí),廠商便急著將新功能納入工具中,但這正與使用者需求背道而馳。
企業(yè)并不急著應(yīng)用新功能,依新技術(shù)改版的工具不僅無法吸引他們,反而使人們更慌張,因?yàn)檫@反應(yīng)著舊有應(yīng)用程序升級(jí)的壓力,以及人員培訓(xùn)的成本等(縱使這些應(yīng)用軟件原本很穩(wěn)定地運(yùn)作)。簡(jiǎn)單地說,軟件升級(jí)與改版應(yīng)由企業(yè)自行決定,但現(xiàn)實(shí)上都是供貨商強(qiáng)迫下的結(jié)果,可是我們不禁問,供貨商怎么會(huì)比使用者更了解何時(shí)應(yīng)升級(jí)?以及為何要升級(jí)?
然而,企業(yè)所面對(duì)的是應(yīng)用軟件維護(hù)問題,特別是人員異動(dòng)或職務(wù)調(diào)整,以及客戶變更需求或增修功能時(shí),如何更有效率地管理。不要忘了,軟件維護(hù)過程中就算技術(shù)不變,技術(shù)人員的異動(dòng)還是會(huì)提高維護(hù)的成本與困難度。讓商業(yè)運(yùn)作不停擺,如同交響樂團(tuán)里,就算換了樂手或指揮,還是得向觀眾演奏出協(xié)調(diào)的樂曲。
“注重團(tuán)隊(duì)開發(fā)而備受矚目”
微軟在新一代的Visual Studio 2005,不但扮演著延續(xù)Visual Studio這個(gè)開發(fā)工具承先啟后的生命,此次改版更注重團(tuán)隊(duì)開發(fā)與開發(fā)方法,不再執(zhí)著于技術(shù)上提升。簡(jiǎn)單地說,讓軟件更容易管理比起更容易開發(fā)顯得重要些,而且企業(yè)主管更在意前一點(diǎn),他們也正是決定掏腰包的人,只有工程師會(huì)喜歡后者,只是更容易撰寫程序并無法降低人力成本。VS2005重要改變是平臺(tái)化與涵蓋軟件開發(fā)生命周期,接下來我們將會(huì)分析這些改變所帶來的影響。
由開發(fā)工具到開發(fā)與管理平臺(tái)
VS2005在開發(fā)工具部份強(qiáng)化原始程序代碼管控與自動(dòng)化建構(gòu)的功能,再納入工作項(xiàng)目追蹤、項(xiàng)目入口網(wǎng)站與報(bào)表等管理功能,整合成軟件開發(fā)團(tuán)隊(duì)協(xié)同運(yùn)作所設(shè)計(jì)之共通平臺(tái)。
由程序撰寫到軟件開發(fā)生命周期
微軟本身為開發(fā)工具供貨商,在整合式開發(fā)環(huán)境發(fā)展歷史中也創(chuàng)下許多革新,包括可視化設(shè)計(jì)、主從式架構(gòu)與分布式架構(gòu),雖然也為微軟培育出百萬名以上的. NET程序設(shè)計(jì)師,但這些階段的演進(jìn)都離不開程序撰寫的范疇,轉(zhuǎn)入VS2005后邁向另一個(gè)轉(zhuǎn)折點(diǎn):軟件開發(fā)生命周期,讓單一產(chǎn)品實(shí)作抽象的軟件工程方法論。
“何謂好的軟件?”
Ian Sommerville在「軟件工程(Sofware Engineering)」一書中提到,所謂的好軟件必須具備以下4種性質(zhì):
| 特性 | 說明 |
| 可維護(hù)性(Maintainability) | 完成后的軟件必須能夠?qū)︻櫩偷男枨蟾淖冞M(jìn)行軟件的演進(jìn)與維護(hù),這是一項(xiàng)非常重要的特性,因?yàn)樵谧儎?dòng)的商業(yè)環(huán)境中,軟件的改變是無法避免的結(jié)果。 |
| 可保護(hù)性(Dependability) | 軟件的可保護(hù)性包括可靠性、防護(hù)性與安全性。系統(tǒng)發(fā)生故障時(shí),可信任的軟件不應(yīng)該會(huì)造成實(shí)體或經(jīng)濟(jì)上的損失。 |
| 效率(Efficiency) | 軟件不應(yīng)該浪費(fèi)系統(tǒng)資源,例如處理器與內(nèi)存。因此,效率包含了響應(yīng)能力、處理時(shí)間、內(nèi)存使用率等。 |
| 可用性(Usability) | 軟件必須能夠讓設(shè)計(jì)的對(duì)象容易使用,不用花太多功夫,這表示它必須有適當(dāng)?shù)氖褂媒涌谂c說明文件。 |



