商 琦
(蘇州工業園區服務外包職業學院 信息工程學院,江蘇 蘇州 215123)
面向軟件服務的實訓課程教學,以培養復合技能型人才為培養目標,在國內外高等院校都已經廣泛開展。國內陸續引進國外先進的實訓教學理念,但由于教學理念與經濟發展的不同,只能在借鑒的基礎上創新,于是出現了實訓課程、面向企業的課程、面向證書的課程等有益的改革嘗試[1-2],但教學過程中普遍存在以下問題:
(1) 實訓任務一次性布置,學生難以理解;
(2) 教學方式單一,師生互動不充分;
(3) 任務團隊成員之間的溝通、協作程度不夠;
(4) 教學過程難以管理,無法形成教學反饋閉環;
(5) 實訓進度難以控制、調整。
由此可見,即使采用諸如任務驅動教學、項目驅動教學或者實踐驅動教學的教學方法,也很難有效地解決上述問題,從而無法達到精準、高效教學的目標。
敏捷方法是遵循敏捷原則的靈活過程[3-4],針對需求模糊或者快速多變的情況,敏捷方法強調以人為本,鼓勵團隊成員在高度協作中使用迭代方式進行任務的增量開發,快速地檢驗項目中的不足并及時改進完善,從而不斷地向客戶及時交付有價值的工作成果,提高團隊成員的成就感和凝聚力。
結合高職院校課程的教學特點以及學生學情特點,嘗試性地提出敏捷教學的概念,即把企業敏捷軟件管理的方法,應用到高職院校特定課程的教學過程中,使學生按照敏捷開發的方法在“做中學,學中做”。但是,在實施敏捷教學之前,不得不認真思考并回答以下問題:
(1) 能否把敏捷方法應用于高職院校的課程教學?
(2) 如果可以,哪些課程適用?哪些課程不適用?
(3) 如果可以,全盤照搬,還是局部應用?
(4) 如果可以,學生在實訓周期可以獲得哪些教學成就?
要回答上述問題,首先應對敏捷教學進行可行性分析,用科學有效的理論和實踐方法,對敏捷教學進行分析與考量,以得出其是否可行的結論。
高職院校學生由于基礎較差,底子較薄,因此,把敏捷方法引入教學環節,進行敏捷教學可行性分析的前提就是要摸清高職院校學生的學情,以便得出敏捷教學在高職是否能順利實施的結論。
經過大量的問卷調研和隨機訪談,發現高職院校的學生普遍存在以下問題:
(1) 學習態度不夠認真;
(2) 可持續性學習能力較差;
(3) 學習積極性不高,興趣未得到有效調動;
(4) 對傳統授課方式和形式在情緒上有厭倦和抵觸情緒。
學生學情是客觀存在的。高職院校課程的教學活動,特別是工程實踐類課程的教學,應當充分考慮學生學情,做到因材施教,精準教學。教學形式、教學方法和教學手段都可以有創新,同時應當增加實訓環節的課時分配和互動分享。
經典的敏捷開發角色包括Product Owner,Master和Team Member三種角色[5]。
Product Owner:把實訓任務分解成若干子任務,并確定每個子任務的優先級和完成期限。
在教學實踐中,教師完成三種角色的轉換。
Master:帶領項目團隊按照敏捷開發的流程實施,并排除與敏捷無關的障礙和干擾,使團隊能夠朝著既定目標推進。
Team Member:把子任務再次分解成若干迭代任務,評估每個迭代任務的實施時間,并通過結對編碼的方式,完成實訓任務。團隊成員通過“編碼—測試—發布”的方式迭代開發,持續集成,最終交付可運行的軟件版本。
在教學實踐中通常只有教師和學生兩種角色,因此,這兩種角色與Product Owner、Master和Team Member角色已經不是簡單的一對一關系。圖1顯示了教學實踐角色與經典敏捷角色之間的對應關系。當學生團隊還未形成自組織團隊的情況下(圖1中的實線箭頭),教師布置任務后必須指導學生團隊按照敏捷流程實施。因此,教師既充當Product Owner角色,又充當Master角色。當學生團隊在教師指導下已經形成自組織團隊時(圖1中的虛線箭頭),教師應當適時退出Master角色,并轉交由學生團隊中的成員擔任。

圖1 敏捷教學角色與敏捷經典角色的對應關系
敏捷教學按照“編碼—測試—發布”的形式迭代實施。教師作為Product Owner,把教學內容以實訓任務的形式布置給學生,通過學生團隊的頭腦風暴和任務認領,從而完成實訓任務的需求理解,并開始結對編程。學生團隊每完成一個認領的任務都要進行單元測試和集成測試,最后把任務打包發布。
從表1中看出,敏捷教學流程與敏捷經典流程中各單元的對應關系,以及敏捷教學實施主體、實施地點、實施角色、實施對象、迭代流程和迭代手段等單元在敏捷教學流程與敏捷經典流程中均存在映射關系。

表1 敏捷教學流程與敏捷經典流程中各單元的對應關系
應該強調的是,這種對應關系并非機械的、死板的對應,而應當允許根據學生學情和課程固有的特點進行動態調整,從而使得敏捷教學實施效果達到最優。對于高職院校的學生,建議在迭代流程實施之前增加頭腦風暴和測試用例編寫環節,一方面可以使學生更加深刻地理解敏捷教學項目需求,另一方面可以為后續迭代的測試提供相應的用例。
以Android通訊錄開發實訓任務為例,來詳述敏捷教學在軟件實訓課程教學中的具體應用。假設,該實訓任務需要實現以下功能:
(1) 在Android主界面上動態顯示聯系人列表;
(2) Android主界面接收用戶觸發操作選項菜單;
(3) 在數據庫中添加聯系人、刪除聯系人、編輯聯系人和查詢聯系人;
(4) 在Android主界面上實時更新和美化渲染。
敏捷教學流程如下所述:
步驟一:為了更好地體現敏捷教學形式和手段,需要準備以下工具:
A.一塊白板(也稱故事墻),白板上繪制一張表格,包括TO DO、IN PROGRESS、DONE三欄,分別表示將要實施的實訓任務、正在實施的實訓任務和已經實施完成的實訓任務。
B.若干小紙片(也稱用戶故事),張貼在白板上。
步驟二:授課教師把實訓任務分解成若干子任務,并設定優先順序、子任務計劃開始時間和完成時間,形成Product Backlog列表,如表2所示。

表2 實訓任務分解后形成的Product Backlog列表
步驟三:實訓團隊根據表2中的Backlog項分解成若干迭代子任務Sprint Backlog,并估算出每個Sprint Backlog開發所需的時間,形成Sprint Backlog列表,如表3所示。
估算的時間單位為人課,對實訓團隊而言,當前Sprint Backlog的估算時間為M*N,其中M為完成當前迭代需要的課時數,N為該實訓團隊成員人數。
在預估時間的時候,實訓團隊采用頭腦風暴的形式,當團隊成員彼此估算的時間相差過大的時候,需要重新估算,同時每個成員需要解釋為何需要用該時間來完成迭代任務。只有所有成員的意見達成一致,那么該時間才能成為真實的預估時間,充分體現了敏捷開發中團隊的自組織架構。
實訓團隊還應當根據每個迭代子任務Sprint Backlog構建相應的測試用例。
步驟四:團隊成員開始迭代開發過程,即循環實施“編碼—測試—發布”的過程,如圖2所示。應當明確的是,企業中敏捷開發強調實施的結果,而敏捷教學實施則強調實施的過程。因此,敏捷迭代手段更多的應當強化結對編程、代碼重構和代碼走查等環節,而弱化對持續集成和持續發布等環節。

表3 Backlog項分解后形成的Sprint Backlog列表

圖2 迭代實施“編碼—測試—發布”的過程
A.在編碼階段,實訓團隊成員可以通過結對的方式進行編碼,當某個成員在編碼時發生語法或者邏輯錯誤的時候,那么與之結對的成員可以及時發現并改正,從而大大提高團隊編碼的效率和質量;在編碼進行中或結束后,實訓團隊成員可以通過代碼走查或者代碼解釋的方式提升編碼質量,最后生成迭代子任務軟件版本。
B.在測試階段,實訓團隊成員基于JUnit在Eclipse上對編碼階段生成的軟件版本進行單元測試,測試通過后對版本進行集成測試。在測試過程中發現的各種缺陷,分析原因和解決方案,在保證測試通過的前提下,修改完善編碼。
C.在發布階段,對測試通過的任務,進行運行并發布該迭代開發對應的軟件版本。這個步驟是必需的,因為后續迭代都是在前一個迭代發布的版本基礎之上進行的,會直接影響到后續的迭代過程。
上述A到C的過程是一個不斷循環的過程,直到所有的Sprint Backlog都迭代完成。
步驟五:實訓團隊成員每天在敏捷開發之前都要召開例會,所有的實訓團隊成員站到故事墻前,把已經完成的迭代開發子任務移動到DONE欄,把今天要開始做的子任務從TO DO欄移動到IN PROGRESS欄。這樣,授課教師不僅能夠實時觀察到每個實訓團隊實施的進展,還能清楚地發現哪些Sprint Backlog在開發過程中遇到了困難或者難度較大,從而可以有針對性地講解。實訓團隊成員的匯報內容應當包括:
A.昨天完成了哪些Sprint Backlog;
B.今天要實施哪些Sprint Backlog;
C.在迭代開發過程中遇到的問題或者解決方案;
D.是否需要得到老師或者其他團隊的幫助。
步驟六:在所有的Sprint Backlog都實施完成后,所有實訓團隊會召開分享會。在分享會上,每個實訓團隊展示軟件版本,分享實施過程中遇到的問題、解決問題的方案,以及相關的經驗。分享會上,授課教師會提出若干發散性問題與每個實訓團隊進行交流。這樣,教師與學生,學生與學生之間的項目交流將得到進一步增強,收獲更大。
本文創造性地把企業敏捷軟件開發模式,引入高職院校軟件實訓課程的教學管理中,提出“敏捷教學”理念和思路作為教學改革的一種創新嘗試和探索。通過深入分析高職院校學生學情和敏捷教學單元與經典敏捷軟件開發單元的對應關系,得出敏捷教學科學、可行的結論,并以Android軟件開發實訓課程為例,闡述敏捷教學的一般流程。
表4為敏捷教學實施后較實施前所取得的有益效果。可以看出,敏捷教學的引入,學生對于實訓任務的理解更加透徹,實施的積極性普遍提升,實施效率和代碼質量明顯提高;與此同時,授課教師對學生的實施狀況的實時跟蹤,能及時調整教學進度和內容,形成教學閉環,提高教學質量。

表4 敏捷教學實施后較實施前所取得的有益效果
“敏捷教學”為高職院校課程教學提供了一種新的模式和方法,作為一種探索與嘗試,具有較大的實踐意義和推廣意義。在教學實踐反饋良好的前提下,建議推廣應用到高職院校所有以工程技術為背景的課程教學體系中,以檢驗其教學實施效果。
[1] Pérez-Castillo R, García F, Piattini M. A Practical Teaching Experience about Software Reengineering[J]. Procedia, Social and Behavioral Sciences. 2014:254-260.
[2] Bai E J, Lin D L. The Enterprise Oriented Computer Graphic Design Courses Construction of Practice Teaching System[J]. Advanced Materials Research. 2014: 5237-5240.
[3] Almasri, Ammar Khader, A PROPOSED HYBRID AGILE FRAMEWORK MODEL FOR MOBILE APPLICATIONS DEVELOPMENT[J].International journal of software engineering & applications, 2016,7(2): 1-9.
[4] De Amescua, Antonio, An agile framework definition for creating an engineering massive open online course from scratch: A case study[J]. International Journal of Engineering Education. 2016,5(32): 2260-2273.
[5] Read A, Derrick D C, Ligon G S. Developing Entrepreneurial Skills in IT Courses: The Role of Agile Software Development Practices in Producing Successful Student Initiated Products[C]. IEEE Computer Society: 47th Hawaii International Conference on System Science. 2014: 201-209.