于麗
摘要:軟件架構(gòu)設(shè)計(jì)是軟件開發(fā)過程中非常關(guān)鍵的環(huán)節(jié),為了能夠及時(shí)應(yīng)對(duì)軟件開發(fā)中用戶需求的變化,應(yīng)當(dāng)采用方便快捷的輕量級(jí)開發(fā)模式。敏捷開發(fā)采用的是一種以人為核心的、循序漸進(jìn)的開發(fā)流程,能夠快速響應(yīng)軟件需求的變化,及時(shí)調(diào)整軟件架構(gòu)的設(shè)計(jì)思路,比較適應(yīng)動(dòng)態(tài)環(huán)境下的軟件開發(fā)。該文在對(duì)傳統(tǒng)開發(fā)流程和敏捷開發(fā)流程進(jìn)行分析比較的基礎(chǔ)上,對(duì)敏捷架構(gòu)設(shè)計(jì)中的關(guān)鍵技術(shù)進(jìn)行剖析,結(jié)合實(shí)際的項(xiàng)目提出了一種基于敏捷開發(fā)模式的軟件架構(gòu)設(shè)計(jì)方法。
關(guān)鍵詞:敏捷開發(fā)模式;軟件架構(gòu);重構(gòu)技術(shù);迭代
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2015)06-0091-02
軟件開發(fā)通常需要在完成問題的定義和規(guī)劃的基礎(chǔ)上,經(jīng)歷需求分析、軟件設(shè)計(jì)、編寫代碼和軟件測(cè)試等四個(gè)階段[1],其過程是一個(gè)復(fù)雜、甚至循環(huán)反復(fù)的過程。傳統(tǒng)的開發(fā)方法通常需要在進(jìn)行具體的開發(fā)之前確定用戶的全部需求,然后據(jù)此制定一個(gè)跨越整個(gè)軟件項(xiàng)目開發(fā)周期的詳細(xì)計(jì)劃,之后的開發(fā)過程均以此為依據(jù)。這種開發(fā)模式的優(yōu)點(diǎn)是可以很好地保持整個(gè)軟件設(shè)計(jì)的一致性,而缺點(diǎn)就是一旦情況發(fā)生改變,需要調(diào)整框架結(jié)構(gòu),這個(gè)詳細(xì)的計(jì)劃就有可能作廢,導(dǎo)致產(chǎn)生大量的沒有應(yīng)用價(jià)值的復(fù)雜文檔,無(wú)謂地提高了軟件開發(fā)的成本和難度。為了規(guī)避上述這些傳統(tǒng)的重型開發(fā)方法的弊端,近年來(lái)出現(xiàn)一種新的輕量級(jí)軟件開發(fā)方法——敏捷開發(fā)方法,該方法是一種典型的輕型軟件開發(fā)方法,它集眾多輕型軟件開發(fā)方法的優(yōu)點(diǎn),強(qiáng)調(diào)以人為本,突出“適應(yīng)性”的特點(diǎn)[2],能夠快速根據(jù)軟件開發(fā)過程中的各種變化及時(shí)作出調(diào)整,最大限度降低軟件開發(fā)的成本和風(fēng)險(xiǎn)。
本文在比較敏捷開發(fā)與傳統(tǒng)開發(fā)方法的優(yōu)缺點(diǎn)的基礎(chǔ)上,分析了敏捷開發(fā)模式的核心思想和設(shè)計(jì)理念,結(jié)合具體項(xiàng)目探討了基于敏捷開發(fā)模式的軟件架構(gòu)的設(shè)計(jì)方法,包括采用的設(shè)計(jì)技術(shù)、構(gòu)建思路和執(zhí)行規(guī)范等。
1 敏捷開發(fā)模式與傳統(tǒng)開發(fā)方法的比較
敏捷開發(fā)是近來(lái)備受關(guān)注的軟件開發(fā)方法,它是一種基于迭代思想的軟件開發(fā)方式,以人為核心驅(qū)動(dòng)整個(gè)軟件開發(fā)流程的實(shí)施和推進(jìn),它是管理軟件開發(fā)過程的一種新方法和新思路。在敏捷軟件開發(fā)中,軟件項(xiàng)目被劃分成若干個(gè)子項(xiàng)目,通過多次迭代細(xì)化完成,每次迭代都有明確的目標(biāo)并能快速交付可運(yùn)行的軟件[3]。敏捷開發(fā)側(cè)重概念和軟件架構(gòu)的設(shè)計(jì)而簡(jiǎn)化軟件的詳細(xì)設(shè)計(jì)部分,為后期留下調(diào)整的空間。采用敏捷開發(fā)的軟件項(xiàng)目時(shí),其軟件架構(gòu)在初期的設(shè)計(jì)只是做到剛好滿足需求即可,后期根據(jù)對(duì)于軟件需求的理解和更新需求,采用重構(gòu)技術(shù)逐步調(diào)整設(shè)計(jì)。敏捷開發(fā)由一組簡(jiǎn)單卻相互依賴的實(shí)踐步驟結(jié)合而形成的有機(jī)整體,突出了存在于“人”之間的關(guān)聯(lián),包括程序員之間的溝通、開發(fā)團(tuán)隊(duì)與客戶之間的反饋,注重雙方創(chuàng)新的勇氣和軟件系統(tǒng)的簡(jiǎn)單 [4]。通常從軟件項(xiàng)目啟動(dòng)之初,就強(qiáng)調(diào)通過周期性的軟件測(cè)試來(lái)獲得需求反饋,程序員盡可能早地把軟件初稿交給客戶使用,并配合客戶通過使用該軟件發(fā)現(xiàn)其中的漏洞,進(jìn)而對(duì)軟件的初稿進(jìn)行優(yōu)化,同時(shí)及時(shí)應(yīng)對(duì)客戶對(duì)軟件提出的新的需求。表1顯示了敏捷開發(fā)模式與傳統(tǒng)開發(fā)方法的區(qū)別和優(yōu)勢(shì)。
表1 敏捷開發(fā)模式與傳統(tǒng)開發(fā)模式的比較
[開發(fā)階段\&方法對(duì)比\&敏捷開發(fā)模式\&傳統(tǒng)開發(fā)模式\&需求分析\&將用戶需求進(jìn)行分解,形成開發(fā)故事,通過迭代細(xì)化,增加新的用戶故事\&開發(fā)初始階段獲取用戶需求,制作詳細(xì)的需求分析文檔,該文檔指導(dǎo)整個(gè)開發(fā)周期\&軟件設(shè)計(jì)\&根據(jù)客戶的當(dāng)前需求進(jìn)行設(shè)計(jì),最簡(jiǎn)單的既是最好的,不過分構(gòu)建,不做預(yù)先設(shè)計(jì)\&獲得用戶需求文檔后,嚴(yán)格按照文檔實(shí)施設(shè)計(jì)\&代碼編寫\&利用重構(gòu)技術(shù)簡(jiǎn)化代碼,編程人員與測(cè)試人員結(jié)對(duì)編寫通過測(cè)試的代碼,持續(xù)集成\&由編程人員編寫,由測(cè)試人員對(duì)代碼進(jìn)行審核\&軟件測(cè)試\&在編寫代碼之前先編寫測(cè)試代碼,自動(dòng)化完成測(cè)試\&編碼完成后單獨(dú)進(jìn)行各種測(cè)試\&]
從表1可以看出,敏捷開發(fā)對(duì)傳統(tǒng)的軟件開發(fā)的四個(gè)階段都進(jìn)行了相應(yīng)的改進(jìn),模糊了“階段”的概念,避免了傳統(tǒng)軟件開發(fā)方法的繁瑣和死板,使其更加靈活,可以及時(shí)響應(yīng)客戶的最新需求動(dòng)態(tài)調(diào)整開發(fā)過程和軟件架構(gòu),將簡(jiǎn)單的、不多的開發(fā)步驟不斷迭代細(xì)化、優(yōu)化改進(jìn)為用戶最為滿意的結(jié)果。
2 基于敏捷開發(fā)模式的軟件架構(gòu)設(shè)計(jì)
通過前面的分析,基于敏捷開發(fā)的架構(gòu)設(shè)計(jì)包括三方面的核心要素:一是敏捷架構(gòu)設(shè)計(jì)的整體思路;二是敏捷架構(gòu)設(shè)計(jì)所采用的關(guān)鍵技術(shù);三是設(shè)計(jì)和執(zhí)行過程的規(guī)范化管理。
2.1 設(shè)計(jì)思路
敏捷開發(fā)的突出優(yōu)勢(shì)在于以快速的、增量式的開發(fā)方式,第一時(shí)間將可工作的軟件交付客戶手中,然后根據(jù)與客戶的交流,反饋軟件的使用情況,根據(jù)客戶需求調(diào)整軟件結(jié)構(gòu)。它是一種始終以人為核心的,迭代升華、循序漸進(jìn)的開發(fā)方法,這一思想貫穿敏捷軟件開發(fā)的方方面面。對(duì)于軟件架構(gòu)的設(shè)計(jì)也遵循這一原則,圖1顯示了基于敏捷開發(fā)模式的軟件架構(gòu)設(shè)計(jì)過程。
從圖1可以看出,敏捷型軟件的開發(fā)過程也是軟件功能逐漸完善,版本逐漸升級(jí)的過程。換句話說,敏捷開發(fā)中架構(gòu)設(shè)計(jì)采用的是進(jìn)化式的設(shè)計(jì)方法,即在軟件開發(fā)的整個(gè)周期中,通過一次又一次的迭代細(xì)化來(lái)修改、完善和充實(shí)設(shè)計(jì)方案,使得架構(gòu)獲得最優(yōu)化,最大限度滿足客戶對(duì)軟件的需求。需要注意的是,采用進(jìn)化式的軟件架構(gòu)方法應(yīng)遵循三個(gè)原則:1)當(dāng)前迭代架構(gòu)的設(shè)計(jì)應(yīng)當(dāng)最大限度避免傷害已經(jīng)實(shí)現(xiàn)的架構(gòu)和功能;2)當(dāng)前迭代架構(gòu)的實(shí)際應(yīng)當(dāng)與鄰域模型始終保持一致,避免鄰域誤解而造成開發(fā)成本的增加;3)架構(gòu)設(shè)計(jì)要完整,架構(gòu)模型的各個(gè)層次應(yīng)當(dāng)統(tǒng)一。
在敏捷開發(fā)中,每一次迭代的架構(gòu)設(shè)計(jì)過程大概需要經(jīng)過6個(gè)環(huán)節(jié),首先根據(jù)用戶的整體需求提取出當(dāng)前迭代中的需求,然后進(jìn)行鄰域建模,隨后根據(jù)該模型進(jìn)行概念性架構(gòu)設(shè)計(jì),若此次設(shè)計(jì)符合客戶需求,下一步進(jìn)行軟件架構(gòu)的細(xì)化,之后是對(duì)該架構(gòu)設(shè)計(jì)進(jìn)行用戶的驗(yàn)證,如果用戶的需求發(fā)生變化,則重新進(jìn)行第一階段的需求分析。
2.2關(guān)鍵技術(shù)
敏捷開發(fā)中的關(guān)鍵技術(shù)有兩個(gè)方面,一是重構(gòu)技術(shù),在敏捷開發(fā)中就是通過重構(gòu)技術(shù)快速適應(yīng)不斷變化和頻頻變更的設(shè)計(jì)環(huán)境的。所謂重構(gòu),就是充分利用軟件現(xiàn)有的功能,通過對(duì)整體架構(gòu)和程序代碼的局部調(diào)整,提高軟件質(zhì)量和性能,使軟件架構(gòu)的設(shè)計(jì)模式更加合理化,提高軟件的延伸性。本質(zhì)上說,重構(gòu)就是在盡量保留軟件現(xiàn)有功能的基礎(chǔ)調(diào)整軟件的內(nèi)部結(jié)構(gòu),降低軟件的升級(jí)成本。重構(gòu)技術(shù)貫穿軟件開發(fā)的整個(gè)過程,包括架構(gòu)重構(gòu)、設(shè)計(jì)重構(gòu)、代碼重構(gòu)和業(yè)務(wù)重構(gòu)等[5]。二是設(shè)計(jì)模式,在軟件的重構(gòu)過程中,通常使用設(shè)計(jì)模式來(lái)改進(jìn)已有的設(shè)計(jì)。設(shè)計(jì)模式實(shí)際上是眾多軟件開發(fā)人員在開發(fā)過程總結(jié)出來(lái)的技巧和設(shè)計(jì)經(jīng)驗(yàn),可以反復(fù)借鑒。在敏捷開發(fā)中,代碼重構(gòu)階段可以借助設(shè)計(jì)模式,使程序更加可靠和便于理解。敏捷開發(fā)中的設(shè)計(jì)模式如圖2所示。
2.3 過程管理
根據(jù)敏捷開發(fā)的簡(jiǎn)單、溝通、反饋、勇氣、快速交付可工作軟件等基本原則,一個(gè)成功的敏捷架構(gòu)需要開發(fā)團(tuán)隊(duì)相互合作共同完成以下四個(gè)步驟:第一,由產(chǎn)品負(fù)責(zé)人制定產(chǎn)品列表,并對(duì)列表中用戶故事按照優(yōu)先級(jí)進(jìn)行排序,然后從中選擇一組作為當(dāng)前設(shè)計(jì)目標(biāo),羅列出其中的子任務(wù);第二,由架構(gòu)師制定初始架構(gòu),包括架構(gòu)愿景的確立、架構(gòu)樣式的定位和設(shè)計(jì)模式的建立等;第三,架構(gòu)師和團(tuán)隊(duì)增量維護(hù)架構(gòu),即在客戶對(duì)于交付的產(chǎn)品有新的需求或者需求發(fā)生改變時(shí),應(yīng)及時(shí)給予響應(yīng),架構(gòu)師應(yīng)當(dāng)與團(tuán)隊(duì)之間不斷進(jìn)行溝通,促進(jìn)整個(gè)團(tuán)隊(duì)與整體架構(gòu)的認(rèn)識(shí),通過重構(gòu)的方式增量維護(hù)架構(gòu);第四,確定每次迭代架構(gòu)增量?jī)?nèi)容,通過架構(gòu)師和團(tuán)隊(duì)成員的溝通,獲得對(duì)于架構(gòu)的反饋意見,獲得新增的架構(gòu)內(nèi)容。
一般來(lái)說,所有的建模都是在白板上完成的“足夠”的建模,通過以上四個(gè)步驟,模型會(huì)隨著每次迭代慢慢成長(zhǎng)、逐步改進(jìn),最終完全符合用戶的需求。
3 敏捷開發(fā)模式在“在線教學(xué)系統(tǒng)”項(xiàng)目軟件架構(gòu)中的應(yīng)用
該在線教學(xué)系統(tǒng)是一個(gè)面向高職院校的中小型軟件開發(fā)項(xiàng)目,由于項(xiàng)目的開發(fā)周期較短,用戶需求不明確,因而該系統(tǒng)的客戶需求極可能發(fā)生變化,此種情況下,采用簡(jiǎn)單快捷、適應(yīng)能力強(qiáng)的輕型敏捷開發(fā)模式再合適不過。下面結(jié)合該項(xiàng)目的開發(fā)實(shí)際闡述敏捷軟件開發(fā)方法的具體應(yīng)用。
3.1 初始化功能模塊的確定
敏捷軟件開發(fā)強(qiáng)調(diào)現(xiàn)場(chǎng)客戶的參與。在軟件開發(fā)過程中,開發(fā)人員隨時(shí)與該軟件的主要客戶,如教師、學(xué)生登溝通相關(guān)業(yè)務(wù)問題、、匯報(bào)項(xiàng)目進(jìn)展情況,并獲得反饋與支持。根據(jù)此項(xiàng)目的用戶需求,確定了最初的用戶故事,選擇在線考試子模塊為優(yōu)先實(shí)現(xiàn)的功能模塊,如圖3所示。
3.2 迭代式開發(fā)
軟件開發(fā)小組根據(jù)架構(gòu)師提出的初始軟件架構(gòu),由編程人員和測(cè)試人員兩兩結(jié)對(duì)共同進(jìn)行軟件的設(shè)計(jì)、編碼和測(cè)試,整個(gè)過程遵循簡(jiǎn)單、重構(gòu)、集體所有的原則, 便于優(yōu)化系統(tǒng)內(nèi)部結(jié)構(gòu)以消除冗余,提高代碼的質(zhì)量和可讀性。開發(fā)人員應(yīng)當(dāng)盡快將初始的架構(gòu)予以實(shí)現(xiàn)并交付客戶試用,獲得反饋意見。根據(jù)用戶的反饋信息,在“在線教學(xué)系統(tǒng)”項(xiàng)目中,在線考試子模塊需要增加身份驗(yàn)證模塊、輸入有效性驗(yàn)證以及信息加密存儲(chǔ)等系統(tǒng)安全性設(shè)計(jì)內(nèi)容。
3.3 小型發(fā)布
敏捷軟件開發(fā)要求結(jié)合業(yè)務(wù)和技術(shù)情況,快速交付可工作的產(chǎn)品,并確定下一次發(fā)布的范圍,即小型發(fā)。結(jié)合本系統(tǒng)的開發(fā)時(shí)間要求,整個(gè)開發(fā)周期的發(fā)布計(jì)劃如表2 所示。
4 結(jié)束語(yǔ)
本文詳細(xì)分析了敏捷開發(fā)模式中軟件架構(gòu)的設(shè)計(jì)方法,并系統(tǒng)闡述了敏捷開發(fā)實(shí)際軟件開發(fā)案例“在線教學(xué)系統(tǒng)”項(xiàng)目中的應(yīng)用,充分顯示了敏捷開發(fā)的簡(jiǎn)潔性和靈活性的特點(diǎn)。
參考文獻(xiàn):
[1] 張海藩. 軟件工程[M]. 北京:清華大學(xué)出版社,2010.
[2] 李白樺. 學(xué)生管理信息系統(tǒng)的敏捷開發(fā)[J].大連鐵道學(xué)院學(xué)報(bào),2006,27(4):60-62,68.
[3] 李聲威, 王愛景, 譚紅星. 敏捷開發(fā)中軟件架構(gòu)設(shè)計(jì)與實(shí)踐[J]. 電腦與信息技術(shù),2015,23(3):1-4,11.
[4] 劉朝霞. 基于敏捷軟件模式的在線教學(xué)系統(tǒng)研究與開發(fā)[J].天津科技大學(xué)學(xué)報(bào),2009,24(2):63-66,73.
[5] 白玲.敏捷開發(fā)下的重構(gòu)技術(shù)[J]. 中小企業(yè)管理與科技,2014(11):245-246.