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