【正文】
放、系統(tǒng)不出現(xiàn)不能預(yù)料的邊際效應(yīng)等) 契約式需求分析( Analysis for contract) ? 如果以契約的觀點(diǎn)來(lái)觀察系統(tǒng)的外部行為,我們不妨在契約式設(shè)計(jì)之上再引入契約式需求分析的概念,這樣契約式開(kāi)發(fā)顯得更為完整 ? 用例本質(zhì)上是表述目標(biāo)系統(tǒng)與其最終用戶之間交互的契約,它使得需求規(guī)格的定義變得更加精確和全面,而傳統(tǒng)的功能及質(zhì)量需求規(guī)格說(shuō)明往往容易遺漏前置條件、輸入格式等重要細(xì)節(jié) ? 用例強(qiáng)調(diào)實(shí)現(xiàn)體現(xiàn)了用戶利益的目標(biāo),在較低層面定義契約時(shí),同樣可以顯式地描述諸如一個(gè)類操作的目標(biāo) 契約式設(shè)計(jì)( Design by contract) ? 面向?qū)ο蟮姆治?、設(shè)計(jì)其首要問(wèn)題就是類的劃分與職責(zé)分配 ? 類的職責(zé)被確定后,通過(guò)定義類的不變式,限定對(duì)象的有效狀態(tài)空間;通過(guò)定義類操作的前置、后置條件和輸入輸出,精確地描述類的行為 ? 契約同樣有助于精確地表達(dá)對(duì)象間的協(xié)作,因?yàn)檫@些協(xié)作步驟將遵從一系列的契約 ? 契約式設(shè)計(jì)可以通過(guò)測(cè)試驅(qū)動(dòng)開(kāi)發(fā)等最佳實(shí)踐來(lái)驅(qū)使貫徹 契約式編程 ? 契約式編程要求客戶( client)代碼在調(diào)用服務(wù)( server)代碼時(shí)也要遵守契約,意味著雙方共同承擔(dān)使運(yùn)行獲得成功的責(zé)任,使得代碼間職責(zé)的分配更為均衡、合理,避免了服務(wù)代碼中防錯(cuò)式設(shè)計(jì)的過(guò)度蔓延 ? 在代碼中加入判別契約是否被遵守的語(yǔ)句(例如 assert),使得編碼中的缺陷( bug)能及時(shí)地暴露出來(lái) ? 契約式編程結(jié)合測(cè)試先行、單元測(cè)試等最佳實(shí)踐,是實(shí)現(xiàn)高質(zhì)量構(gòu)造( construct)的捷徑 測(cè)試驅(qū)動(dòng)開(kāi)發(fā) ? XP推薦測(cè)試先行,即先編寫測(cè)試代碼,之后以通過(guò)所有測(cè)試為目標(biāo)來(lái)驅(qū)動(dòng)實(shí)現(xiàn)源碼的開(kāi)發(fā),這通常也稱作 測(cè)試驅(qū)動(dòng)開(kāi)發(fā) ? 先編寫測(cè)試代碼,使得實(shí)施員對(duì)目標(biāo)源碼的外部行為能先建立明確無(wú)誤的理解,并有助于盡早發(fā)現(xiàn)設(shè)計(jì)上的缺陷(趕在實(shí)現(xiàn)之前,畢竟編寫測(cè)試代碼的開(kāi)銷較?。? ? 測(cè)試先行的實(shí)質(zhì),就是先通過(guò)測(cè)試代碼最精確地表達(dá)目標(biāo)代碼的契約(即定義其需求),隨后每次測(cè)試執(zhí)行都是為了驗(yàn)證源碼是否滿足了契約 單元測(cè)試 ? 單元測(cè)試比集成測(cè)試能更大限度地覆蓋單元的執(zhí)行路徑,是保證軟件質(zhì)量性價(jià)比最高的途徑 ? 單元測(cè)試代碼提供了目標(biāo)代碼最直接、便利和相對(duì)獨(dú)立的運(yùn)行上下文,方便代碼的調(diào)試和除錯(cuò) ? 單元測(cè)試在 XUnit等測(cè)試框架的支持下,最容易實(shí)現(xiàn)測(cè)試的自動(dòng)化,這也是 回歸測(cè)試所依賴的重要基礎(chǔ) ? 實(shí)施回歸測(cè)試,增強(qiáng)了項(xiàng)目的可視性,能及時(shí)提供反饋,極大地加強(qiáng)了開(kāi)發(fā)的可控性 單元測(cè)試編寫原則 ? 測(cè)試任何可能出錯(cuò)的地方, 對(duì)于明顯不太可能出錯(cuò)的方法(譬如 set 和 get這些非常簡(jiǎn)單的方法),單元測(cè)試幾乎沒(méi)有意義 ? 注意 測(cè)試邊界條件,比如未初始化、 NULL、最大最小值等,防止實(shí)現(xiàn)時(shí)忘記處理它們 ? 為目標(biāo)代碼編寫?yīng)毩⒌膯卧獪y(cè)試代碼,盡量不要與其它代碼產(chǎn)生依賴 ? 針對(duì)接口進(jìn)行測(cè)試 測(cè)試代碼示例 ? CPPUNIT_TEST_SUITE_REGISTRATION(conversation_test)。同時(shí)還表達(dá)了進(jìn)程視圖中的各個(gè)進(jìn)程具體分配到物理節(jié)點(diǎn)的映射關(guān)系 實(shí)施視圖 ? 實(shí)施視圖從軟件編譯與構(gòu)建的角度,描述系統(tǒng)實(shí)施構(gòu)件的組織結(jié)構(gòu)與依賴關(guān)系(主要是編譯依賴)。 ? 模型主要說(shuō)明進(jìn)程、線程的分類,系統(tǒng)構(gòu)架敏感的主要邊界類、控制類對(duì)象等在進(jìn)程、線程中的分布,以及它們之間的創(chuàng)建、交互與消息通訊關(guān)系等 部署視圖 ? 部署視圖從系統(tǒng)軟硬件物理配置的角度,描述系統(tǒng)的網(wǎng)絡(luò)邏輯拓?fù)浣Y(jié)構(gòu)。 ? 設(shè)計(jì)模型說(shuō)明了系統(tǒng)的組成元素、組織架構(gòu)和關(guān)系,并描述了各組成元素的協(xié)作以及狀態(tài)轉(zhuǎn)換關(guān)系等(通過(guò)用例實(shí)現(xiàn) Use Case Realization予以表達(dá))。 ? 通常應(yīng)選取用例模型中對(duì)系統(tǒng)構(gòu)架的內(nèi)容產(chǎn)生重大影響的應(yīng)用場(chǎng)景與用例集合,這些用例代表了系統(tǒng)主要的核心功能,往往決定了系統(tǒng)構(gòu)架的基本組成元素。bu ndle of Requ est a nd Res pons e:bun dle_ recv _sit e002。Cl ient ID = c30 2dep loy foll ow Msg Que ues:re ceiv e fo r Res pons e: res p_re ceiv e_c3 02。Cl ient ID = s30 2dep loy foll ow Msg Que ues:re ceiv e fo r Req uest : req _rec eive _s30 2。Cl ient ID = s20 1dep loy foll ow Msg Que ues:re ceiv e fo r Req uest : req _rec eive _s20 1。無(wú)線交易網(wǎng)關(guān)W i r e l e s s G a t e w a yW i r e l e s s T r a d e _ A p p銀行端業(yè)務(wù)前置機(jī)Cl ient ID = c10 2dep loy foll ow Msg Que ues:re ceiv e fo r Res pons e: res p_re ceiv e_c1 02。si teID = e nt00 0dep loy foll ow Msg Que ues:Si te i nflu x fo r Req uest and Res ponse : inf lux_ ent0 00。RUP過(guò)程與 UML模型驅(qū)動(dòng)開(kāi)發(fā)方法在證券研發(fā)項(xiàng)目中的應(yīng)用實(shí)踐 新思維金融軟件研發(fā)中心 軟件構(gòu)架師 胡協(xié)剛 內(nèi)容提要 ? 軟件開(kāi)發(fā)沒(méi)有銀彈 ? 統(tǒng)一通道平臺(tái) 開(kāi)發(fā)項(xiàng)目簡(jiǎn)介 ? 項(xiàng)目的開(kāi)發(fā)目錄結(jié)構(gòu)與 RUP核心工件 ? 貫穿全局的統(tǒng)一 UML模型 ? 用前景文檔定義目標(biāo)系統(tǒng) ? 軟件構(gòu)架文檔與 4+1視圖 ? 契約式開(kāi)發(fā)與單元測(cè)試 ? 自動(dòng)化構(gòu)建與持續(xù)集成 ? 迭代開(kāi)發(fā)模式 軟件開(kāi)發(fā)沒(méi)有銀彈 軟件項(xiàng)目復(fù)雜、不確定和高風(fēng)險(xiǎn) ? 軟件因其固有的復(fù)雜、不確定和高風(fēng)險(xiǎn)等屬性,使得其開(kāi)發(fā)活動(dòng)非常難以控制 ? 軟件產(chǎn)品用于解決一個(gè)或多個(gè)領(lǐng)域的現(xiàn)實(shí)問(wèn)題,不僅與其開(kāi)發(fā)者本身直接相關(guān),還牽涉到客戶、最終用戶、第三方伙伴等眾多涉眾,所謂眾口難調(diào),但一個(gè)成功的軟件必須能滿足多方面的需求 ? 軟件所依賴的核心技術(shù)、項(xiàng)目的開(kāi)發(fā)方法、軟件過(guò)程、項(xiàng)目管理和團(tuán)隊(duì)協(xié)作等,都是事關(guān)項(xiàng)目成敗的關(guān)鍵因素 CMMI與 RUP ? 根據(jù) CMMI的定義,軟件過(guò)程要達(dá)到第三成熟度等級(jí),需要實(shí)施十八個(gè)關(guān)鍵過(guò)程域;普通團(tuán)隊(duì)雖然不一定向此標(biāo)準(zhǔn)看齊,但實(shí)際上仍然涉及到這十八個(gè)關(guān)鍵過(guò)程域所涵蓋的近百項(xiàng)活動(dòng),只不過(guò)可能實(shí)施的力度較小、質(zhì)量不高、或者忽略了活動(dòng)本身的含義而已 ? RUP與 CMMI第三成熟度等級(jí)相對(duì)應(yīng),定義了九個(gè)核心準(zhǔn)則( Discipline),和幾百項(xiàng) 活動(dòng) ? 這還僅僅只是軟件過(guò)程的范疇,項(xiàng)目中人的管理、溝通以及具體的關(guān)鍵技術(shù)等等,其牽涉面將更廣 軟件開(kāi)發(fā)沒(méi)有銀彈 ? 諸多因素分屬不同的范疇,針對(duì)不同的問(wèn)題,需要應(yīng)用不同的技術(shù)、技能和方法,要求項(xiàng)目成員擁有不同的知識(shí)、素質(zhì)與背景 ? 沒(méi)有一種方法或途徑能夠解決軟件項(xiàng)目中所有的問(wèn)題,即所謂 “ 沒(méi)有銀彈 ” ,所以不要迷信存在所謂的一勞永逸的終極解決方案 成功意味著多方面的艱苦努力 ? 軟件項(xiàng)目適用于 “ 木桶原理 ” ,要獲得成功,必