就了事了。作為項目干系人之內(nèi)的項目組其他成員,對需求的有效性也起到某種程度的驗證作用。雖然軟件項目的生命周期按照各種開發(fā)模型有不同階段的劃分,但每個階段的結(jié)束不是簡單地把階段工作成果塞給下一階段的成員就可以了。特別是高科技的軟件開發(fā)項目,上一階段的工作成果往往要通過多次的溝通才能更為清晰地被下一階段成員接受,其有效性、合理性也要被下一階段的工作所檢驗,通過檢驗有時也有必要對上一階段的工作結(jié)果進行相應(yīng)的調(diào)整,需求更是如此。因此,無論是同一階段不同人員之間,或是不同階段人員之間都應(yīng)根據(jù)需要相互協(xié)作,相互配合,共同完成軟件開發(fā)任務(wù)。
二、在軟件工程的方位內(nèi),盡量減少需求變更的影響
系統(tǒng)的各模塊應(yīng)該設(shè)計成送耦合的,采用OO 技術(shù)可以建立易于改變和加強可重用性的軟件系統(tǒng)。對于OO 技術(shù),我想現(xiàn)在已經(jīng)不是什么陌生的概念:
1 封裝(Encapsulation )可以把問題影響的范圍縮小,外部的變化要求對系統(tǒng)的影響可以限定到某個類層次或某些類層次中,從而改變系統(tǒng)的一部分相對簡單;
2 繼承(Inheritance )可以使改變基于原有技術(shù)基礎(chǔ),很大程度上減少重復(fù)開發(fā)工作;
3 多態(tài)(Polymorphism )的應(yīng)用可以使開發(fā)和設(shè)計人員在相對統(tǒng)一的接口下更改系統(tǒng)的實現(xiàn)細(xì)節(jié),從而改變系統(tǒng)的行為;
4 而且由于對OO 的類體系結(jié)構(gòu)業(yè)界有非常清楚明晰的描述方式,就是目前規(guī)范的描述語言-UML ,非常易于被開發(fā)組的理解并達成共識,促進開發(fā)組成員之間的合作以及加強軟件開發(fā)工作的可延續(xù)性;
可見本身即是一種增強軟件可維護性、健壯性以及保持設(shè)計穩(wěn)定性的一種分析和設(shè)計方法,本身可以在一定程度上快速對需求變更進行反應(yīng),并可相對減少需求變更需要的成本。(OO 的意義在于分析和設(shè)計軟件系統(tǒng)的思考方式,以及建立對象庫以后的軟件重用將給軟件系統(tǒng)的開發(fā)帶來質(zhì)的改變,但是在建立OO 開發(fā)體系之前的過程,一定會是一段荊棘遍布的路,需要付出加倍的努力以及達成思想的轉(zhuǎn)變。這里還有一個誤區(qū)需要澄清的是很多人以為用了C++,PB ,VB ,DELPHI 就是面向?qū)ο蟮拈_發(fā)了,其實只是用了一些面向?qū)ο蟮墓ぞ撸亲永锶匀皇墙Y(jié)構(gòu)化的分析和設(shè)計方法,套上一層OOP 的外殼而已。)
可擴展性設(shè)計(Extensible-Design )
其次,從我們可以控制的軟件設(shè)計來說,怎樣進行合適的設(shè)計才能最大程度減少需求變更帶來的代價?
也許有人說,我的設(shè)計極為靈活,我已經(jīng)預(yù)計了客戶可能提出的要求,并設(shè)計幾種應(yīng)對的方式,到時候客戶提出來,呵呵,我已經(jīng)解決了。這樣的想法不錯,至少比僵硬的設(shè)計強,但是誰可以保證設(shè)計者可以預(yù)知以后的需求變化?而同時為了達到這種靈活(萬能/多能?)的設(shè)計,設(shè)計將變得復(fù)雜,而且可能那些多余的設(shè)計從來不會被用到?復(fù)雜的設(shè)計將增加實現(xiàn)的難度和提高成本,并有可能帶來潛在的Bug ,使得系統(tǒng)難以維護。
設(shè)計的思想應(yīng)該有一些小小的轉(zhuǎn)變,那就是,設(shè)計確實要靈活,但是要體現(xiàn)在可擴展性上面,也就是說,設(shè)計可以簡單,但是一定要易于轉(zhuǎn)變,需要給出便于改變的接口,這一點很重要。
例如,現(xiàn)在有一個類叫做TCPConnection ,來代表計算機網(wǎng)絡(luò)通信中典型的TCP 連接,對于這個連接而言,它可能處于以下幾種狀態(tài):Established (連接已建立),Listening (正在偵聽),Closed (連接關(guān)閉)。一個連接對象需要從其他的對象接受請求,至于它的反應(yīng)則決定于連接對象所處的狀態(tài),對于(打開連接的請求),如果是在連接關(guān)閉狀態(tài),則進行Open (),處于其他狀態(tài)則
項目經(jīng)理勝任力免費測評PMQ上線啦!快來測測你排多少名吧~
http://opto-elec.com.cn/pmqhd/index.html