玉溪師范學(xué)院信息技術(shù)工程學(xué)院 楊 揚(yáng) 韓 杰
敏捷軟件開發(fā)過(guò)程建側(cè)重于開發(fā)成員的協(xié)作開發(fā)、協(xié)作機(jī)制的建立和實(shí)際的開發(fā)步驟,是基于構(gòu)想、探討和適應(yīng)的基礎(chǔ)之上。敏捷開發(fā)的目標(biāo)不是“重復(fù)”的過(guò)程,而是“可靠”的過(guò)程[1],以上特性使得如今敏捷開發(fā)頗受中小型開發(fā)團(tuán)隊(duì)的青睞。
早期的軟件開發(fā)充滿著個(gè)人主觀色彩,缺乏相關(guān)規(guī)范標(biāo)準(zhǔn),但經(jīng)歷了60年代的軟件危機(jī)之后,采用軟件工程原理來(lái)組織開發(fā)軟件項(xiàng)目成為業(yè)內(nèi)一種重要手段。但在隨后的時(shí)間里,軟件工程知識(shí)體系正被不斷發(fā)展和完善,在進(jìn)入90年代以后,卡耐基梅隆大學(xué)軟件學(xué)院推出CMM[2],為軟件開發(fā)過(guò)程提出了明確的管理衡量標(biāo)準(zhǔn)。許多人認(rèn)為,隨著軟件開發(fā)的各個(gè)方面中不斷增多的規(guī)則和方法,程序員能更好的開發(fā)出軟件產(chǎn)品。但隨著越來(lái)越多的規(guī)則和方法的加入,軟件工程變得龐大和復(fù)雜,在現(xiàn)行的實(shí)際環(huán)境下,軟件開發(fā)如果遵循那些詳細(xì)制定的規(guī)則和方法是非常困難的,過(guò)于復(fù)雜且難以理解的開發(fā)流程和規(guī)則,使得完全使用傳統(tǒng)軟件工程方法來(lái)開發(fā)軟件產(chǎn)品變得越來(lái)越難以實(shí)現(xiàn)。為了完成開發(fā)計(jì)劃,開發(fā)者往往會(huì)省略一些流程以節(jié)省時(shí)間,程序員越來(lái)越希望制定出一套更簡(jiǎn)潔的開發(fā)流程和規(guī)則,刪除一些不必要的步驟以應(yīng)對(duì)不同的開發(fā)需求,從而讓軟件開發(fā)變得更靈活、快速,而敏捷開發(fā)正是因此而誕生的。
敏捷方法是一種在面對(duì)不斷變化的需求中,采用以人為本、迭代、循序漸進(jìn)的方式快速開發(fā)軟件產(chǎn)品的方法。為獲取這種敏捷性,在開發(fā)過(guò)程中應(yīng)把軟件項(xiàng)目分割為多個(gè)子項(xiàng)目,采用必要的紀(jì)律和反饋實(shí)踐,保證每個(gè)子項(xiàng)目的完整性,具備集成和執(zhí)行的特性,從而體現(xiàn)讓整個(gè)軟件項(xiàng)目具有靈活、適應(yīng)性的設(shè)計(jì)原則和設(shè)計(jì)模式。
當(dāng)前,常見的敏捷方法有極限編程(XP eXtreme Programming)、SCRUM、動(dòng)態(tài)系統(tǒng)開發(fā)方法(DSDM Dynamic System Development Method)、水晶方法(Crystal Methodologies)、自適應(yīng)軟件開發(fā)(ASD Adaptive Software Development)、特征驅(qū)動(dòng)軟件開發(fā)(FDD Feature Driven Development)、開放式源代碼(Open Source)等[3]。其中XP以它特有方式,大受青睞。
1999年,Kent Beek提出了“極限編程(XP)”這一創(chuàng)新理念[4]。進(jìn)入21世紀(jì)以來(lái),極限編程成為最流行的敏捷方法,多使用于為中小企業(yè)開發(fā)需求處于快速變化的軟件。XP提供了一個(gè)全局的、價(jià)值驅(qū)動(dòng)的開發(fā)過(guò)程視圖,體現(xiàn)了4個(gè)價(jià)值目標(biāo):交流(communication),簡(jiǎn)單(simplicity),反饋(feedback)和勇氣(courage),并遵循5個(gè)原則:快速反饋、簡(jiǎn)單假設(shè)、逐步修改、提倡更改和優(yōu)質(zhì)工作[5]。
本次校友網(wǎng)站的開發(fā)是玉溪師范學(xué)院2011年大學(xué)生科研立項(xiàng)的項(xiàng)目之一,筆者作為指導(dǎo)教師首先考慮到的問(wèn)題就是組員均為缺少實(shí)際開發(fā)經(jīng)驗(yàn)的學(xué)生,若采用傳統(tǒng)的軟件開發(fā)方式,極有可能讓學(xué)生在冗長(zhǎng)復(fù)雜的開發(fā)流程中失去興趣,從而影響項(xiàng)目進(jìn)度與質(zhì)量。而極限編程作為一種輕量、高效、低風(fēng)險(xiǎn)、可預(yù)測(cè)且充滿樂趣的軟件開發(fā)方式,更適合作為本次校友網(wǎng)站的開發(fā)模式。校友網(wǎng)站的開發(fā)目的,是為建立一個(gè)能讓各級(jí)校友溝通交流的平臺(tái)。因此開發(fā)出的校友網(wǎng)系統(tǒng)應(yīng)貼切符合學(xué)生的應(yīng)用需求,但在校學(xué)生對(duì)校友網(wǎng)的功能需求是一個(gè)籠統(tǒng)而模糊的概念,并且人數(shù)眾多、喜好各異,若要能短期獲得符合公眾真實(shí)意愿的需求分析是非常不現(xiàn)實(shí)的。而XP中快速反饋、逐步修改的理念正好讓組員能不斷收集完善學(xué)生需求,并修改反饋到系統(tǒng)中去。
圖1 需求分析流程圖
圖2 校友網(wǎng)基本業(yè)務(wù)流程
圖4 后臺(tái)系統(tǒng)管理展示
圖3 校友網(wǎng)系統(tǒng)功能模塊
按照敏捷建模的思路,設(shè)計(jì)了圖1所示的需求分析以及總結(jié)流程。通過(guò)對(duì)各個(gè)模塊的建模應(yīng)用,作為下一階段的建模基礎(chǔ)。通過(guò)模塊間的相互舉證,確保需求獲取的準(zhǔn)確和高效。用戶故事(Story)是極限編程(XP)中的重要方法之一,體現(xiàn)了交流、反饋、簡(jiǎn)單等原則,它通過(guò)精簡(jiǎn)、獨(dú)立、可靠的素材替代描述,提高溝通效果。
在校友網(wǎng)系統(tǒng)的需求收集過(guò)程中,為了使學(xué)生能夠更好地表達(dá)他們的需求,需求獲取分為兩個(gè)階段:第一階段采用問(wèn)卷調(diào)查方式,對(duì)不同專業(yè)和年級(jí)的學(xué)生以及部分教師發(fā)放問(wèn)卷,并抽取問(wèn)卷中類似需求的學(xué)生進(jìn)行歸類;第二階段,通過(guò)整體分析問(wèn)卷,隨機(jī)抽取同一類的部分學(xué)生完成設(shè)計(jì)人員所設(shè)計(jì)的任務(wù),期間不斷溝通,詢問(wèn)用戶的想法和意圖,完善用戶需求。業(yè)務(wù)流程建模在需求獲取后,對(duì)需求信息進(jìn)行分析與細(xì)化,將業(yè)務(wù)流程進(jìn)行提取與整理讓其能體現(xiàn)的整個(gè)系統(tǒng)的業(yè)務(wù)處理過(guò)程,使用戶理解全局的邏輯。用戶也能確認(rèn)是否存在遺漏和特殊流程,從而生成了如圖2所示校友網(wǎng)基本業(yè)務(wù)流程。
建模作為敏捷開發(fā)的核心,體現(xiàn)在這里就是關(guān)于角色的規(guī)劃。通過(guò)對(duì)基本業(yè)務(wù)流程進(jìn)行收集整理后,按照特定的角色對(duì)操作整理從而對(duì)產(chǎn)品經(jīng)行實(shí)例建模,根據(jù)圖2進(jìn)行角色設(shè)計(jì),并分析設(shè)計(jì)該系統(tǒng)的三類角色:系統(tǒng)管理員、游客、注冊(cè)校友。
游客,未進(jìn)行系統(tǒng)注冊(cè)的校友或其他在網(wǎng)絡(luò)上瀏覽該系統(tǒng)的人員,游客可以正確瀏覽系統(tǒng)前臺(tái)所有模塊。
注冊(cè)校友,游客通過(guò)在校學(xué)號(hào)進(jìn)行系統(tǒng)注冊(cè)成為注冊(cè)校友,注冊(cè)校友享有游客權(quán)限外,應(yīng)具有個(gè)性化的個(gè)人空間,并且能進(jìn)入后臺(tái)進(jìn)行個(gè)人信息的管理。系統(tǒng)管理員,系統(tǒng)管理員是保障校友網(wǎng)系統(tǒng)運(yùn)行所需要的技術(shù)支持和管理維護(hù)人員,應(yīng)具有對(duì)各管理模塊的管理權(quán)限,從而對(duì)系統(tǒng)前臺(tái)各模塊的內(nèi)容進(jìn)行添加、編輯、刪除。
通過(guò)對(duì)業(yè)務(wù)流程進(jìn)行整理后,按照特定的角色實(shí)施操作整理,就可對(duì)產(chǎn)品的進(jìn)行實(shí)例建模,實(shí)例模型是利用對(duì)實(shí)例和角色的簡(jiǎn)單描述并對(duì)產(chǎn)品需求進(jìn)行模型化解釋,從而確定問(wèn)題領(lǐng)域的作用。在實(shí)例建模過(guò)程后,不需給出任務(wù)操作細(xì)節(jié),含有基本的描述即可。在校友網(wǎng)系統(tǒng)業(yè)務(wù)流程建模后可以發(fā)現(xiàn),除特定的角色的實(shí)例復(fù)雜之外,其余角色用例建模都較為簡(jiǎn)單,在后續(xù)功能模塊的設(shè)計(jì)進(jìn)行上,能夠得到充分的利用,提高效率。最終我們得出了圖3所示整個(gè)校友網(wǎng)的功能流程圖。
在系統(tǒng)開發(fā)過(guò)程中考慮到今后服務(wù)器負(fù)載和開發(fā)與維護(hù)成本,以及基于XP中逐步修改、提倡更改的原則,對(duì)平臺(tái)設(shè)計(jì)采用了基于B/S應(yīng)用的.NET三層架構(gòu)。.NET三層架構(gòu),是在客戶端與數(shù)據(jù)庫(kù)之間加入一個(gè)“中間層”。實(shí)際項(xiàng)目開發(fā)過(guò)程中,整個(gè)項(xiàng)目分為三層架構(gòu)分別包含:表示層(UI)、業(yè)務(wù)邏輯層(BLL)和數(shù)據(jù)訪問(wèn)層(DAL)。
表示層(UI):負(fù)責(zé)數(shù)據(jù)展示,將數(shù)據(jù)傳遞給業(yè)務(wù)邏輯層,為用戶提供交互操作界面。
業(yè)務(wù)邏輯層(BLL):負(fù)責(zé)關(guān)鍵業(yè)務(wù)處理和數(shù)據(jù)傳遞。復(fù)雜邏輯判斷和數(shù)據(jù)庫(kù)的數(shù)據(jù)驗(yàn)證都需要在此進(jìn)行處理,并反饋用戶數(shù)據(jù)和相關(guān)邏輯處理。
數(shù)據(jù)訪問(wèn)層(DAL):實(shí)現(xiàn)數(shù)據(jù)保存與讀取,負(fù)責(zé)數(shù)據(jù)庫(kù)數(shù)據(jù)訪問(wèn)。主要為業(yè)務(wù)邏輯層提供數(shù)據(jù),根據(jù)輸入數(shù)據(jù)來(lái)操作數(shù)據(jù)庫(kù)。
為了保證項(xiàng)目開發(fā)效率,我們?cè)陧?xiàng)目中建了BLL,DAL,DBUtility,Model四個(gè)類庫(kù)和一個(gè)web界面。命名為:業(yè)務(wù)邏輯層(Business Logic Layer):BLL,命名空間設(shè)置為Maticsoft.BLL數(shù)據(jù)訪問(wèn)層(Data Access Layer):DAL,命名空間設(shè)置為Maticsoft.DAL數(shù)據(jù)層基類:DBUtility,命名空間設(shè)置為Maticsoft.DBUtility,此外為了保證了數(shù)據(jù)傳遞的效率,添加了一個(gè)類庫(kù),貫穿于整個(gè)三層架構(gòu)中的,命名為Model為實(shí)體類。其中封裝的每個(gè)類對(duì)應(yīng)著一個(gè)實(shí)體類,通常為數(shù)據(jù)庫(kù)中的一個(gè)表,將表中字段都封裝成共有屬性。這樣三層架構(gòu)的搭建完成并有著如下關(guān)系:表示層←業(yè)務(wù)邏輯層←數(shù)據(jù)訪問(wèn)層,他們之間的數(shù)據(jù)傳遞是雙向的,并且通常借助實(shí)體類傳遞數(shù)據(jù)。這樣設(shè)計(jì)有幾個(gè)優(yōu)點(diǎn):
(1)易于項(xiàng)目修改和維護(hù)。
(2)易于擴(kuò)展,今后如有改動(dòng)只需將原有類庫(kù)添加即可。
(3)易于合并和代碼的重復(fù)使用。
圖4展示了開發(fā)完成后的后臺(tái)管理系統(tǒng)界面,其余界面由于篇幅關(guān)系不作展示,目前該項(xiàng)目處于結(jié)題階段,未對(duì)外開放。結(jié)題后可登陸玉溪師范學(xué)院網(wǎng)站(www.yxnu.net)進(jìn)行訪問(wèn)。
本文介紹了使用敏捷開發(fā)思想快速開發(fā)校友網(wǎng)系統(tǒng)的過(guò)程,確保系統(tǒng)開發(fā)按期完成,并通過(guò)用戶故事和原型迭代分析,完善了系統(tǒng)功能模塊,保證軟件質(zhì)量。實(shí)踐證明:應(yīng)對(duì)開發(fā)過(guò)程中學(xué)生不斷反饋引發(fā)的需求不斷變化,敏捷開發(fā)及極限編程的思想不失為一種明智選擇,由于篇幅關(guān)系,本文未能反映采用敏捷思想的軟件測(cè)試環(huán)節(jié)的過(guò)程,但作為敏捷開發(fā)中一個(gè)重要環(huán)節(jié),不斷的測(cè)試與反饋才能促使系統(tǒng)的改進(jìn)才能保證軟件質(zhì)量。
[1]趙熙朝.敏捷軟件開發(fā)過(guò)程改進(jìn)的行動(dòng)框架[J].Software Engineering and Standardization.2007.
[2]RobertC.Martin.敏捷軟件開發(fā):原則、模式與實(shí)踐[M].北京:清華大學(xué)出版社,2003.
[3]張友生.系統(tǒng)分析師技術(shù)指南[M].北京:清華大學(xué)出版社,2007.
[4]Kent Beck.Extreme Programming Explained[M].北京:機(jī)械工業(yè)出版社,1999.
[5]Sillitti A Succi G.Source Code Repositories and Agile Methods .Extreme programming and Agile Processes in Software Engineering:6th International Conference XP[C].2005.