潘立瓊 朱學(xué)穎 余久久 肖 剛
(安徽三聯(lián)學(xué)院 計(jì)算機(jī)工程學(xué)院,安徽 合肥 230601)
軟件敏捷方法以用戶的需求進(jìn)化為核心,采用迭代(循序漸進(jìn))的方式完成軟件開(kāi)發(fā),其強(qiáng)調(diào)快速性及適應(yīng)性。一個(gè)軟件項(xiàng)目(產(chǎn)品)在構(gòu)建初期被切分成若干個(gè)子項(xiàng)目,各個(gè)子項(xiàng)目在經(jīng)過(guò)測(cè)試后具備可視化、可集成和運(yùn)行使用的特征[1]。換言之,敏捷方法就是把一個(gè)軟件系統(tǒng)劃分為多個(gè)相互聯(lián)系,但也可獨(dú)立運(yùn)行的子系統(tǒng),并分別完成開(kāi)發(fā)過(guò)程,而在此期間整個(gè)軟件一直處于可使用(運(yùn)行)狀態(tài)。隨著敏捷方法的發(fā)展,業(yè)內(nèi)出現(xiàn)了Scrum(迭代式增量軟件開(kāi)發(fā)過(guò)程)、XP(極限編程)、Crystal、FDD(特性驅(qū)動(dòng)開(kāi)發(fā))、精益軟件開(kāi)發(fā)、ASD(適應(yīng)性軟件開(kāi)發(fā))、DSD(動(dòng)態(tài)系統(tǒng)開(kāi)發(fā))、AUP(敏捷統(tǒng)一過(guò)程)等諸多基于敏捷的軟件開(kāi)發(fā)模式(模型)。其中Scrum已廣泛應(yīng)用于各類(lèi)輕量級(jí)軟件開(kāi)發(fā)項(xiàng)目中,其具有的快速及適應(yīng)性過(guò)程取代傳統(tǒng)開(kāi)發(fā)方式中需求、設(shè)計(jì)、編碼及實(shí)現(xiàn)的僵化流程風(fēng)格[2]。Scrum已成為當(dāng)前主流的軟件敏捷方法。
在“互聯(lián)網(wǎng)+”教育的時(shí)代背景下,“以教為中心”已逐漸被“以學(xué)為中心”的教學(xué)理念所取代。伴隨著大數(shù)據(jù)及互聯(lián)網(wǎng)技術(shù)的發(fā)展,以及MOOC(大規(guī)模在線開(kāi)放課程)/SPOC(小規(guī)模限制性在線課程)等新型教學(xué)模式的出現(xiàn),更展示出互聯(lián)網(wǎng)學(xué)習(xí)的發(fā)展方向。自主學(xué)習(xí)系統(tǒng)讓學(xué)生努力汲取更多科技知識(shí)的同時(shí),也拓展了傳統(tǒng)校園的界限,加之設(shè)計(jì)本身也充滿了自己的個(gè)性,并且擁有龐大網(wǎng)絡(luò)資源庫(kù),使學(xué)習(xí)環(huán)境多元化,讓學(xué)習(xí)更隨意、更隨性[3]。目前,將智能移動(dòng)終端作為學(xué)習(xí)工具進(jìn)行移動(dòng)學(xué)習(xí),對(duì)于學(xué)習(xí)者來(lái)說(shuō)方便攜帶,情境性強(qiáng),同時(shí),滿足學(xué)習(xí)者利用碎片化時(shí)間隨時(shí)隨地進(jìn)行學(xué)習(xí)的需求[4]。Android智能終端作為一種主流學(xué)習(xí)工具,被廣泛運(yùn)用于越來(lái)越多的移動(dòng)自主學(xué)習(xí)環(huán)節(jié)。
本文運(yùn)用Scrum敏捷方法,設(shè)計(jì)并實(shí)現(xiàn)出一個(gè)基于Android手機(jī)客戶端的軟件測(cè)試課程自主學(xué)習(xí)系統(tǒng),為校內(nèi)學(xué)生開(kāi)展自主學(xué)習(xí)活動(dòng)提供服務(wù)。該系統(tǒng)采用J2EE架構(gòu)的SSH(Spring-Struts-Hibernate)三層組合框架,面向本地校園SPOC活動(dòng)。把課堂教學(xué)與課程資源相融合,能夠?qū)崿F(xiàn)課程資源分享,以及教師與學(xué)生、學(xué)生與學(xué)生之間互動(dòng)交流于一體,將SPOC充分應(yīng)用于該課程的混合學(xué)習(xí)活動(dòng)中[5]。
Scrum是目前IT業(yè)界采用較多的軟件敏捷開(kāi)發(fā)方法,其執(zhí)行流程如圖1所示。Scrum主要涉及三個(gè)角色:產(chǎn)品負(fù)責(zé)人(產(chǎn)品經(jīng)理)、Scrum開(kāi)發(fā)團(tuán)隊(duì)和Scrum Master(為Scrum開(kāi)發(fā)團(tuán)隊(duì)提供有效指導(dǎo)與服務(wù)的負(fù)責(zé)人)。在Scrum執(zhí)行流程中,強(qiáng)調(diào)快速提煉出用戶需求,以用戶故事的形式加以表述(“誰(shuí)”使用系統(tǒng)的“什么功能”,能夠?qū)崿F(xiàn)“什么用戶價(jià)值”),即從用戶使用的角度來(lái)描述用戶所期望擬開(kāi)發(fā)系統(tǒng)能夠?qū)崿F(xiàn)的業(yè)務(wù)功能。
圖1 Scrum執(zhí)行流程
此外,Sprint在Scrum流程中指代工作(迭代)周期,一個(gè)Sprint通常不超過(guò)4周時(shí)間。在Scrum流程中,把整個(gè)軟件產(chǎn)品的開(kāi)發(fā)過(guò)程分解成若干個(gè)Sprint(迭代)周期。Sprint周期一旦確定,將保持不變(除非有很大的風(fēng)險(xiǎn)產(chǎn)生,不得不做調(diào)整時(shí))。當(dāng)每一個(gè)Sprint結(jié)束后,必須要發(fā)布(產(chǎn)生)一個(gè)基于原軟件產(chǎn)品基礎(chǔ)上的、可運(yùn)行的、可用的、能夠?qū)崿F(xiàn)用戶價(jià)值的軟件產(chǎn)品增量。在一些敏捷項(xiàng)目管理平臺(tái)中,新的Sprint在上一個(gè)Sprint完成發(fā)布之后,將會(huì)立即啟動(dòng)迭代[6]。
Android平臺(tái)是Google公司發(fā)布的一款手機(jī)系統(tǒng)平臺(tái),采用四層軟件疊層架構(gòu),基于Linux內(nèi)核,自底向上分別是Linux核心層、中間層(包含各種函數(shù)庫(kù)及Java本地運(yùn)行環(huán)境)、框架層(提供使用Java語(yǔ)言編寫(xiě)的應(yīng)用軟件及其框架設(shè)計(jì))、應(yīng)用層(包含用戶實(shí)際上網(wǎng)、使用電話、發(fā)短信等功能)[7]。Android平臺(tái)使用便捷,優(yōu)點(diǎn)明顯,是一個(gè)非常適用于各類(lèi)軟件信息化及應(yīng)用服務(wù)的平臺(tái),具有廣闊的應(yīng)用前景[8]。
SSH(Spring-Struts-Hibernate)是一個(gè)基于J2EE的適用于中、小型Web應(yīng)用系統(tǒng)的輕量級(jí)三層組合框架,能較好地實(shí)現(xiàn)網(wǎng)絡(luò)及系統(tǒng)管理等功能??蛻舳耸褂肁ndroid平臺(tái)開(kāi)發(fā)完成與服務(wù)器端的數(shù)據(jù)交互,以及自身的網(wǎng)絡(luò)通信服務(wù)、數(shù)據(jù)庫(kù)管理等[7]。Android客戶端與服務(wù)器端運(yùn)用了HTTP通信協(xié)議,通過(guò)無(wú)線網(wǎng)絡(luò)與Android手機(jī)客戶端完成數(shù)據(jù)交互,使整個(gè)服務(wù)器端的擴(kuò)展性、穩(wěn)定性及可維護(hù)性得到保證[9]。本自主學(xué)習(xí)系統(tǒng)采用SSH架構(gòu)設(shè)計(jì),如圖2所示。
自主學(xué)習(xí)系統(tǒng)在實(shí)際使用時(shí),會(huì)大量數(shù)據(jù)以Web頁(yè)面形式在Android手機(jī)上分頁(yè)顯示,所以本系統(tǒng)采用了GirdView自動(dòng)分頁(yè)技術(shù)。為實(shí)現(xiàn)帶緩存的數(shù)據(jù)分頁(yè)顯示,可開(kāi)啟SqlDataSomw數(shù)據(jù)源的“允許緩存”屬性,以提高Web應(yīng)用程序擴(kuò)展性及程序的運(yùn)行效率,并降低開(kāi)發(fā)成本[10]。
圖2 系統(tǒng)架構(gòu)圖
本系統(tǒng)開(kāi)發(fā)采用如圖1所示的Scrum敏捷方法,整個(gè)系統(tǒng)開(kāi)發(fā)時(shí)間為2個(gè)月。由于用戶需求的變更,在此期間共進(jìn)行了4次迭代開(kāi)發(fā),也就是說(shuō)一共產(chǎn)生了4個(gè)Sprint周期,每一個(gè)Sprint周期持續(xù)大約2周時(shí)間,在每一個(gè)Sprint結(jié)束之后都能在線產(chǎn)生(發(fā)布)一個(gè)可測(cè)試的、且運(yùn)行穩(wěn)定的系統(tǒng)版本?;谄蓿@里僅介紹關(guān)于該自主學(xué)習(xí)系統(tǒng)在第一個(gè)Sprint周期的開(kāi)發(fā)過(guò)程。
在開(kāi)發(fā)團(tuán)隊(duì)方面,本系統(tǒng)Scrum開(kāi)發(fā)團(tuán)隊(duì)一共4人,包括1名系統(tǒng)分析師、2名程序員、1名軟件界面設(shè)計(jì)人員。作者本人充當(dāng)項(xiàng)目負(fù)責(zé)人(產(chǎn)品經(jīng)理)角色,負(fù)責(zé)把用戶需求細(xì)化為擬開(kāi)發(fā)軟件產(chǎn)品的待辦事項(xiàng)列表(Product Backlog)以及用戶需求的變更,同時(shí),也兼任系統(tǒng)設(shè)計(jì)與分析工作。相關(guān)部門(mén)領(lǐng)導(dǎo)擔(dān)任Scrum Master的職責(zé),為Scrum開(kāi)發(fā)團(tuán)隊(duì)提供有效的技術(shù)保障與服務(wù)。
由于開(kāi)發(fā)初期沒(méi)有充裕的時(shí)間使開(kāi)發(fā)團(tuán)隊(duì)完成對(duì)整個(gè)系統(tǒng)的功能需求分析,加之用戶需求認(rèn)知情況也是逐步完善的,也就是說(shuō)實(shí)際上用戶對(duì)該系統(tǒng)所需實(shí)現(xiàn)的功能也無(wú)法一次性確定。因此,從項(xiàng)目負(fù)責(zé)人(產(chǎn)品經(jīng)理)的角度,在每一次Sprint開(kāi)展之前只需要充分了解本次迭代開(kāi)發(fā)需要為用戶實(shí)現(xiàn)系統(tǒng)(產(chǎn)品)哪方面的價(jià)值,用戶需要做的工作是什么,本次迭代的時(shí)間、工作如何完成等。主要內(nèi)容包含:提煉用戶需求,以用戶故事的形式概括產(chǎn)品的待辦事項(xiàng)列表,對(duì)每一個(gè)待辦事項(xiàng)設(shè)置優(yōu)先級(jí);確認(rèn)本次Sprint最終的任務(wù)列表并將信息傳達(dá)給項(xiàng)目干系人,把用戶故事中的每一個(gè)條目細(xì)化成為獨(dú)立可執(zhí)行的開(kāi)發(fā)任務(wù)(Task)為Scrum開(kāi)發(fā)團(tuán)隊(duì)中每一個(gè)成員分配各自的任務(wù),團(tuán)隊(duì)內(nèi)部討論最優(yōu)的工作流程等。根據(jù)與用戶溝通,結(jié)合本項(xiàng)目敏捷開(kāi)發(fā)實(shí)際,摒棄了傳統(tǒng)的需求分析過(guò)程,Scrum開(kāi)發(fā)團(tuán)隊(duì)把在第一個(gè)Sprint中所需要實(shí)現(xiàn)出的用戶需求及其對(duì)應(yīng)開(kāi)發(fā)任務(wù),以用戶故事列表的形式制定出,如表1所示。同樣,在本次Sprint中開(kāi)發(fā)所涉及到的數(shù)據(jù)庫(kù)表有用戶信息表,課程資源表、發(fā)帖及回帖表等,因篇幅所限,這里不予列出。整個(gè)Sprint持續(xù)時(shí)間為2周時(shí)間。
表1 開(kāi)發(fā)任務(wù)列表
在本次Sprint迭代開(kāi)發(fā)中,要求Scrum開(kāi)發(fā)團(tuán)隊(duì)在搭建SSH三層系統(tǒng)架構(gòu)基礎(chǔ)上,能在Android客戶端上快速實(shí)現(xiàn)一個(gè)簡(jiǎn)單的課程自主系統(tǒng),只要求能夠?qū)崿F(xiàn)表1所示的各項(xiàng)功能。此外,要求在本次Sprint中同時(shí)定義了系統(tǒng)的各個(gè)數(shù)據(jù)表結(jié)構(gòu),形成一個(gè)快速的、可運(yùn)行的系統(tǒng)(版本),及時(shí)上線發(fā)布。下頁(yè)圖3—6分別展示了該系統(tǒng)的用戶登錄、用戶注冊(cè)、新建課程資料、論壇交流界面。在Scrum敏捷方法中,開(kāi)發(fā)團(tuán)隊(duì)是一個(gè)技術(shù)能力綜合型團(tuán)隊(duì),并不區(qū)分明顯的軟件開(kāi)發(fā)與軟件測(cè)試崗位。也就是說(shuō),需要對(duì)每一個(gè)開(kāi)發(fā)任務(wù)經(jīng)過(guò)充分測(cè)試,以保證每個(gè)功能模塊都能通過(guò)單元測(cè)試,并且能被依次集成,整個(gè)系統(tǒng)始終處于可運(yùn)行狀態(tài)。
在本次Sprint中關(guān)于項(xiàng)目管理方面,實(shí)際上項(xiàng)目組主要召開(kāi)了三種類(lèi)型的會(huì)議,以保障Scrum敏捷方法的有效實(shí)施。首先,每天清晨,Scrum開(kāi)發(fā)團(tuán)隊(duì)定期召開(kāi)一個(gè)15分鐘左右的“每日站會(huì)”,即每位成員站著簡(jiǎn)要匯報(bào)“昨天完成了什么,遇到什么問(wèn)題,今天要做什么。”,形成固定的會(huì)議制度。其次,在本次Sprint結(jié)束后由項(xiàng)目負(fù)責(zé)人主持召開(kāi)一個(gè)評(píng)審會(huì)議,用于對(duì)本次Sprint中迭代開(kāi)發(fā)的成果進(jìn)行評(píng)審,便于發(fā)現(xiàn)問(wèn)題并及時(shí)糾正。最后,在本次Sprint結(jié)束后還要確定在下一個(gè)迭代中要完成的用戶故事及其開(kāi)發(fā)任務(wù),即計(jì)劃會(huì)議。開(kāi)發(fā)團(tuán)隊(duì)根據(jù)產(chǎn)品負(fù)責(zé)人排定的優(yōu)先級(jí),選擇下一迭代任務(wù),對(duì)選定的任務(wù)進(jìn)行進(jìn)一步的細(xì)化,并確定細(xì)化后的每項(xiàng)具體負(fù)責(zé)人[11]。例如,在即將進(jìn)行的為期2周的下一個(gè)Sprint中,按照與用戶溝通的結(jié)果,需要完成自主學(xué)習(xí)系統(tǒng)的課程考試功能。在大學(xué)軟件測(cè)試課程學(xué)習(xí)內(nèi)容基礎(chǔ)上,增添課程考試功能,要求該功能實(shí)現(xiàn)后能夠在原系統(tǒng)的基礎(chǔ)上直接(增量)集成,形成一個(gè)新的系統(tǒng)(版本)并發(fā)布給用戶。例如,圖7為該新增功能中需要實(shí)現(xiàn)的“創(chuàng)建試題”任務(wù)的界面。
圖3 用戶登錄界面
圖4 用戶注冊(cè)界面
圖5 新建課程資料界面
圖7 創(chuàng)建試題界面
圖6 論壇交流界面
本自主學(xué)習(xí)系統(tǒng)充分運(yùn)用基于Scrum敏捷方法,通過(guò)4個(gè)Sprint迭代周期,總共持續(xù)大約8周的時(shí)間,線上快速發(fā)布V1.0版本,初步完成了用戶對(duì)系統(tǒng)的期望價(jià)值,即為校園學(xué)生通過(guò)Android手機(jī)實(shí)現(xiàn)課外自主學(xué)習(xí)大學(xué)軟件測(cè)試課程的目的。目前,系統(tǒng)頁(yè)面展示流暢,運(yùn)行穩(wěn)定,較好地完成學(xué)生用戶注冊(cè)與登陸、選擇課程資源學(xué)習(xí)、習(xí)題測(cè)試與管理、在線交流與論壇等各項(xiàng)指標(biāo)。目前,該系統(tǒng)已作本地面向小范圍學(xué)習(xí)人群的軟件測(cè)試課程SPOC學(xué)習(xí)工具,能充分融入到線上+線下的混合學(xué)習(xí)活動(dòng)中。通過(guò)與用戶反復(fù)溝通,該系統(tǒng)面向SPOC方面的一些細(xì)節(jié)性功能(例如個(gè)性化信息推送、學(xué)習(xí)評(píng)價(jià)、在線考勤與管理、學(xué)習(xí)數(shù)據(jù)分析等)還將會(huì)以Scrum敏捷開(kāi)發(fā)方式,在后面的版本中陸續(xù)添加與完善。
在未來(lái)的工作中,還需要對(duì)該系統(tǒng)就兩個(gè)方面進(jìn)行后續(xù)研究。一方面,是對(duì)外接口與系統(tǒng)集成,如何通過(guò)把系統(tǒng)與本地校園內(nèi)與其他應(yīng)用系統(tǒng)(如教務(wù)系統(tǒng)、學(xué)生管理系統(tǒng)等)有效集成,實(shí)現(xiàn)數(shù)據(jù)交換及自主學(xué)習(xí)功能的擴(kuò)展。例如,與校園內(nèi)部統(tǒng)一身份認(rèn)證平臺(tái)實(shí)現(xiàn)校內(nèi)統(tǒng)一身份認(rèn)證,集成郵件系統(tǒng)和第三方社交系統(tǒng)(如微信、QQ)等[12]。另一方面,還要從促進(jìn)學(xué)生的學(xué)習(xí)積極性出發(fā),因?yàn)樽灾鲗W(xué)習(xí)活動(dòng)的成效很大程度上取決于學(xué)生的認(rèn)知能力和學(xué)習(xí)興趣,例如,可以把起到激勵(lì)學(xué)習(xí)活動(dòng)的學(xué)習(xí)游戲程序集成到系統(tǒng)中,添加在線小游戲(實(shí)行學(xué)習(xí)關(guān)卡計(jì)分獎(jiǎng)勵(lì)策略),在間隙之余讓學(xué)生放松精神,提高學(xué)生的學(xué)習(xí)興趣[3]。
從用戶使用價(jià)值出發(fā),采用基于Scrum敏捷方法開(kāi)發(fā)Android客戶端平臺(tái)的課程自主學(xué)習(xí)系統(tǒng),不僅縮短了開(kāi)發(fā)周期,而且能較好地適應(yīng)變化的用戶需求,進(jìn)一步提升用戶的滿意度。該系統(tǒng)能緊密結(jié)合本地校園學(xué)習(xí)環(huán)境,也為當(dāng)前開(kāi)展大學(xué)軟件測(cè)試課程SPOC混合學(xué)習(xí)活動(dòng)提供了有力的支撐。本文采用的基于Scrum敏捷方法也為同類(lèi)校園Web學(xué)習(xí)系統(tǒng)(平臺(tái))的敏捷開(kāi)發(fā)提供了一個(gè)可充分借鑒的案例。