国产毛片午夜福利,国产黄网,国产亚洲天堂,97国产精品

  •  
    軟件過程常見問題及原因分析
    發(fā)布時間:2008-05-22   瀏覽次數(shù):1182656
    軟件過程常見問題及原因分析 軟件外包是時下的一個熱門話題,被我國不少軟件企業(yè)視為一座金礦,而CMM被人們認(rèn)為是進(jìn)入這個市場的敲門磚,為了拿到那張代表資格的CMM認(rèn)證證書,不少企業(yè)甚至不惜投入數(shù)百萬之巨。事實(shí)上,拿到CMM認(rèn)證在國外并不代表企業(yè)能提供一個合格的軟件,的軟件專家、擁有組件技術(shù)、用例技術(shù)等多項(xiàng)發(fā)明、與Grady Booch、James Rumbaugh一起被稱為UML之父的Ivar Jacobson博士在近期訪華期間一再提醒中國的軟件企業(yè),謹(jǐn)防掉入CMM陷阱。   CMM/CMMI的缺點(diǎn)   CMM/CMMI最早起源于美國國防部。為了改變在采購過程中頻繁地采購到大量不合格軟件的局面,美國國防部需要一種評估軟件質(zhì)量的方法,這是要求軟件企業(yè)進(jìn)行CMM/CMMI認(rèn)證。然而,CMM/CMMI真正解決這個問題了嗎?   CMM/CMMI被認(rèn)為是一種最成熟、最有效地提高軟件工程化水平的方法和標(biāo)準(zhǔn),用來評估和改進(jìn)過程,它是一個描述在軟件開發(fā)過程中有待改進(jìn)的關(guān)鍵因素的框架,描述了一個能用漸進(jìn)方式進(jìn)行改進(jìn)的途徑。它為軟件過程改進(jìn)提供一個基礎(chǔ),將軟件開發(fā)從一個相對來說隨意、不成熟的過程變成非常成熟的、有規(guī)律的、可管理的過程。   然而,CMM/CMMI也有一些與身俱來的缺點(diǎn)不容忽視。比如,CMM/CMMI的評估耗資不菲,一個CMM2級評估可能達(dá)到數(shù)百萬之巨,而且耗時很長,過程十分復(fù)雜,常常導(dǎo)致效果不太理想。不少企業(yè)的認(rèn)證流于形式,評估完成后只留下一大堆文檔,而真正的軟件開發(fā)過程卻依然故我。而且,CMM/CMMI只告訴我們應(yīng)該怎么做,而沒有具體地告訴如何做。比如說,它要求必須改進(jìn)需求管理,那么到底該如何做需求管理?CMM/CMMI沒有提供答案。   還有最重要的一點(diǎn)是,不少軟件企業(yè)陷入了一個誤區(qū),以為單單通過CMM/CMMI評估可以解決軟件質(zhì)量不高的問題,而忽略了軟件過程這一真正改善軟件質(zhì)量的環(huán)節(jié)。事實(shí)上,完全有可能出現(xiàn)這樣的情況:軟件成熟度為CMM 1級或2級的企業(yè)開發(fā)出的軟件是真正好用的,而有的企業(yè)即使通過了CMM 5級認(rèn)證,也無法保證它交付好的軟件。最糟糕的情形是,如果采用不好的軟件過程,通過CMM/CMMI的成熟度級別越高,只會使軟件企業(yè)生產(chǎn)差勁軟件的過程變得更加有效率,而不是使企業(yè)開發(fā)出更好的軟件。   Ivar Jacobson認(rèn)為,好的軟件過程首先一定是基于組件的,在此基礎(chǔ)之上,還要符合迭代開發(fā)、用例驅(qū)動開發(fā)和以架構(gòu)為中心的這三個實(shí)踐。   合理的軟件過程是軟件質(zhì)量的基礎(chǔ)   為什么會是這樣呢,Ivar Jacobson舉了一個非常形象的例子。這是一個農(nóng)夫和他的奶牛的故事。在奶牛喝水的途中(稱為“牛路”)有一片莊稼地,牛會吃掉很多莊稼。農(nóng)夫看到這種情況后,意識到必須對奶牛喝水的過程進(jìn)行改進(jìn),所以他在這條道路上鋪上了瀝青。結(jié)果,農(nóng)夫得到了一個好的“牛路”,牛走得更快了,但是并沒有真正解決牛吃莊稼的問題。它應(yīng)該有更好的方式,是為牛喝水尋找一條全新的道路。   軟件企業(yè)利用CMM框架進(jìn)行軟件質(zhì)量控制的過程,像是這個農(nóng)夫?yàn)榕B蜂仦r青。對于軟件企業(yè)來說,如果從一個錯誤的軟件過程開始,即使你在這個上面再改進(jìn),得到的永遠(yuǎn)只是“牛路”。這里更應(yīng)該考慮的是要選擇一條更好的路,也是從一開始時,采用能夠開發(fā)出好的軟件的過程。然后在這個軟件過程的基礎(chǔ)上,對這個軟件進(jìn)行度量,改進(jìn)這個軟件的過程,也是進(jìn)行CMM/CMMI要求的改進(jìn)。   Ivar Jacobson博士認(rèn)為,從一個不良的軟件過程出發(fā),在此基礎(chǔ)上進(jìn)行改進(jìn),實(shí)際上會把軟件開發(fā)變得更糟糕,因?yàn)槟惆衍浖_發(fā)過程固化了,使日后再想對它進(jìn)行改造,變得更加困難。正確的方法是,先要有一個好的軟件過程,這是不容易的,但是值得做的事情。Ivar Jacobson說,“把一個好的軟件過程變得可度量非常容易,但是把一個可度量的軟件過程變成一個好的軟件過程卻很難”。也是說,只有把一個好的軟件過程,即能夠開發(fā)出好的軟件的過程變得可度量才是有益的。而把一個已經(jīng)經(jīng)過CMMI改進(jìn)的、可度量的過程變成一個真正的能夠開發(fā)出好軟件的過程,這是幾乎不可能的事情。   那么什么是一個好的軟件過程?Ivar Jacobson建議從以下幾個方面進(jìn)行辨別:,壞的過程關(guān)注文檔上,而好的過程關(guān)注在可執(zhí)行的程序或者系統(tǒng)上;第二,壞的過程延誤了揭露風(fēng)險的時間,而好的過程一開始把自己暴露在風(fēng)險之下,并及時解決它;第三,壞的過程在項(xiàng)目的才能夠驗(yàn)證這個項(xiàng)目的質(zhì)量,而好的過程其質(zhì)量是每時每刻都能夠得到驗(yàn)證的;第四,壞的過程有一個非常復(fù)雜的跟蹤關(guān)系矩陣,從需求到代碼需要一個非常復(fù)雜的矩陣,而好的過程,卻是一個無縫鏈接;第五,在面對變更時,壞的軟件很脆弱,好的軟件會很健壯。   Ivar Jacobson提醒軟件開發(fā)人員要做聰明的農(nóng)夫,首先得到一個正確的軟件過程;然后,再考慮去度量它、定義它。因?yàn)檐浖?xiàng)目管理的本質(zhì)不是能否描述并度量軟件過程以及過程到底怎么樣,而是首先關(guān)注軟件,你是否能很好地開發(fā)出合格軟件。重點(diǎn)是得到結(jié)果,通過軟件過程得到這個結(jié)果,也是交付的軟件產(chǎn)品。 觀點(diǎn)碰撞   敏捷開發(fā)企圖終結(jié)軟件危機(jī)   如今在軟件開發(fā)領(lǐng)域占主流地位的傳統(tǒng)軟件工程學(xué)思想是大約在世紀(jì)60年代伴隨著“軟件危機(jī)”言論的出現(xiàn)而誕生的。所謂軟件危機(jī)是指在計算機(jī)軟件的開發(fā)和維護(hù)過程中所遇到的一系列嚴(yán)重問題,它包含兩方面內(nèi)容:一是如何開發(fā)軟件,以滿足不斷增長、日趨復(fù)雜的需求;二是如何維護(hù)數(shù)量不斷膨脹的軟件產(chǎn)品。的確,傳統(tǒng)軟件工程學(xué)思想的誕生,把軟件開發(fā)活動按照工程化的原則和方法進(jìn)行組織,并一度被認(rèn)為是擺脫軟件危機(jī)的一個主要出路。   但是,數(shù)十年后的,人們對于軟件危機(jī)的“恐懼”仍沒有絲毫減弱,相反隨著軟件系統(tǒng)的急速膨脹而越發(fā)不可收拾了:對軟件開發(fā)成本和進(jìn)度的估計常常不準(zhǔn)確,開發(fā)成本超出預(yù)算,實(shí)際進(jìn)度比預(yù)定計劃一再拖延的現(xiàn)象并不罕見;用戶對“已完成”系統(tǒng)不滿意的現(xiàn)象也經(jīng)常發(fā)生;軟件產(chǎn)品的質(zhì)量往往靠不住,Bug一大堆,補(bǔ)丁一個接一個;等等。于是,無論是產(chǎn)業(yè)界還是理論界,都開始對傳統(tǒng)軟件工程學(xué)思想產(chǎn)生懷疑,甚至背叛。因此,關(guān)于軟件到底是“工程”還是“藝術(shù)”的討論一度風(fēng)靡全球。而以迭代式循序漸進(jìn)開發(fā)方式為主,以“人”為核心的敏捷開發(fā)方法是在這樣的背景下產(chǎn)生的,它背叛了傳統(tǒng)軟件工程學(xué)中以“過程”為核心,把設(shè)計和開發(fā)盡可能分開,盡量弱化“人”在整個工程中地位的思想。   近日,當(dāng)世界軟件開發(fā)領(lǐng)域影響力的五位大師之一、敏捷軟件開發(fā)方法的早期開拓者馬丁·福勒先生來華與國內(nèi)軟件高手論道之際,北京大學(xué)軟件學(xué)院院長陣鐘老師再次將軟件是“工程”還是“藝術(shù)”這一問題擺到了桌面上。而這位軟件教父似乎對這一問題早有深入思考,他認(rèn)為,這一爭論的核心應(yīng)該在于軟件設(shè)計是否要與軟件開發(fā)分開,這也正是傳統(tǒng)工程化軟件開發(fā)方法與敏捷軟件開發(fā)方法的重要區(qū)別。   作為敏捷軟件開發(fā)方法的推動者,馬丁先生認(rèn)為,軟件設(shè)計應(yīng)該和軟件開發(fā)緊密結(jié)合在一起,采用迭代式開發(fā)。軟件開發(fā)不能被認(rèn)為是一個既定的過程,因?yàn)檐浖_發(fā)中有太多的變化出現(xiàn),既定的過程設(shè)置不可能達(dá)到合適的預(yù)想結(jié)果。由于需求變化、技術(shù)更新、人員流動等問題的存在,許多軟件設(shè)計工作應(yīng)該在軟件開發(fā)到一定程度的時候才能進(jìn)行,兩者不應(yīng)該在順序上嚴(yán)格分開。他說:“至于從哲學(xué)的角度講,到底軟件開發(fā)活動是藝術(shù)還是工程呢?我很難清晰地界定,也許都是或者都不是。也許我們應(yīng)該把軟件開發(fā)活動當(dāng)做一個獨(dú)立的東西來對待!   由此看來,馬丁先生既不認(rèn)為軟件開發(fā)活動應(yīng)該是一個先進(jìn)行設(shè)計,然后根據(jù)“設(shè)計圖紙”進(jìn)行構(gòu)建的工程化過程,也不認(rèn)為軟件開發(fā)應(yīng)該是完全依賴于開發(fā)者頭腦中隨時蹦出的靈感的藝術(shù)活動,因?yàn)檫@兩種傾向在人類數(shù)十年的軟件開發(fā)實(shí)踐中已經(jīng)被證明都不甚完美。而他企圖在兩者之間找到一個均衡點(diǎn),這個均衡點(diǎn)也許正是真正解決“軟件危機(jī)”的突破口。   據(jù)了解,敏捷開發(fā)實(shí)際上包括了許多的軟件開發(fā)習(xí)慣。首先,這種方法改變了軟件測試的流程,在編寫代碼前進(jìn)行測試,減少了開發(fā)風(fēng)險;其次,可以對軟件進(jìn)行持續(xù)集成,即每個小時都在集成,任何部件間的沖突都可以隨時解決;此外,這種方法的“動態(tài)規(guī)劃”和“重構(gòu)”做法,意味著開發(fā)者可以對軟件架構(gòu)進(jìn)行持續(xù)改進(jìn),可以根據(jù)用戶的需求隨時進(jìn)行改進(jìn),而利用傳統(tǒng)的軟件開發(fā)方法則很難對軟件的架構(gòu)進(jìn)行調(diào)整,同時也會造成成本的大幅增加。
    立即預(yù)約