国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

專業(yè)學(xué)位研究生軟件工程能力培養(yǎng)探索

2022-03-25 04:44吳毅堅張?zhí)旄?/span>
軟件導(dǎo)刊 2022年3期
關(guān)鍵詞:測試用例軟件用戶

吳毅堅,彭 鑫,張?zhí)旄?/p>

(復(fù)旦大學(xué)計算機科學(xué)技術(shù)學(xué)院,上海 200438)

0 引言

自2002 年我國開展軟件工程專業(yè)碩士培養(yǎng)以來,各培養(yǎng)單位已為軟件和互聯(lián)網(wǎng)等相關(guān)行業(yè)輸送了大量優(yōu)秀的軟件開發(fā)人才[1]。當(dāng)前,軟件和互聯(lián)網(wǎng)企業(yè)對于產(chǎn)品創(chuàng)新、快速交付及質(zhì)量可信的要求越來越高。與此同時,敏捷開發(fā)、持續(xù)集成(Continuous Integration)、持續(xù)交付(Continuous Delivery)與開發(fā)運維一體化(DevOps)等軟件工程實踐日益成熟,并在企業(yè)中得到了廣泛應(yīng)用。因此,企業(yè)的軟件開發(fā)方式以及對從業(yè)人員軟件工程能力的要求也在逐漸發(fā)生改變。從個人開發(fā)能力來看,高質(zhì)量編碼已成為企業(yè)對軟件工程師的基本能力要求之一;從軟件開發(fā)過程來看,增量、迭代的敏捷開發(fā)以及持續(xù)集成和持續(xù)交付已經(jīng)成為主流;從開發(fā)工具和環(huán)境看,基于云的DevOps 開發(fā)環(huán)境以及軟件開發(fā)工具鏈成為主流,軟件開發(fā)工具和環(huán)境的云化成為趨勢。以上這些都使得企業(yè)對專業(yè)學(xué)位碩士畢業(yè)生的工程能力提出了新要求。與此同時,專業(yè)碩士生源來自不同的本科高校和專業(yè),在軟件開發(fā)能力和工程化素養(yǎng)方面的基礎(chǔ)參差不齊。

1 相關(guān)研究

專業(yè)學(xué)位研究生教學(xué)是近年來國內(nèi)外教學(xué)研究的熱點之一,教學(xué)研究人員針對研究生教學(xué)與企業(yè)需求的差距提出了適合不同教學(xué)目標(biāo)、具有不同教學(xué)特點的課程體系,從軟件工程知識體系教學(xué)到項目化實踐教學(xué)的融入進行了大量探索[1,5,7]。國內(nèi)各大高校近年來也對新工科建設(shè)中的軟件工程實踐教學(xué)開展了教學(xué)改革探索,例如依托基于云的軟件開發(fā)平臺,以軟件構(gòu)造為中心,通過實踐化教學(xué)幫助學(xué)生更好地理解軟件工程思想方法等[8]。然而,軟件技術(shù)的迅速發(fā)展仍然使得軟件工程研究生教學(xué)跟不上企業(yè)需求的變化,同時這些改革主要面向本科生教學(xué),在研究生教學(xué)中,在軟件工程實踐內(nèi)容的廣度和深度方面還需進一步加強。

Garousi 等[9]綜合分析了來自美國、加拿大、南非等12個國家的研究數(shù)據(jù),指出配置管理、軟件工程過程、設(shè)計、測試等是重要的知識點,但教學(xué)與企業(yè)需求的鴻溝較大,表明對軟件開發(fā)生命周期的全鏈條教學(xué),是專業(yè)學(xué)位研究生教學(xué)的重點之一;Moreno 等[10]給出了本科和研究生的課程體系與業(yè)界職業(yè)技能需求概貌,分析了職業(yè)技能需求在教學(xué)中的覆蓋性,指出技術(shù)領(lǐng)域的教學(xué)需要逐步轉(zhuǎn)向業(yè)務(wù)問題分析等方面,并且需要注意軟技能(例如溝通、合作)的教學(xué),但并沒有給出具體的項目化實踐設(shè)計方法和教學(xué)方式建議;Stahl 等[11]提出加強企業(yè)合作,通過來自企業(yè)和政府的利益相關(guān)者提供真實的軟件開發(fā)項目,讓學(xué)生接近真實需求,解決實際問題,但其研究聚焦于項目化學(xué)習(xí)設(shè)計以及業(yè)界指導(dǎo)教師的融入,而沒有結(jié)合具體的企業(yè)軟件開發(fā)平臺或開發(fā)方法開展深入的軟件工程實踐教學(xué)指導(dǎo);Gren[12]在軟件工程碩士研究生教學(xué)中通過翻轉(zhuǎn)課堂提升學(xué)生的學(xué)習(xí)效果,但其教學(xué)仍然是圍繞知識點,而沒有明確建立工程實踐與企業(yè)需求的聯(lián)系;Garcia 等[13]針對傳統(tǒng)軟件過程改進教學(xué),采用基于Web的工具提升學(xué)生的軟件過程實踐能力,但其教學(xué)內(nèi)容和工具支持主要圍繞傳統(tǒng)的能力成熟度模型集成(CMMI)開展,側(cè)重于過程評估與改進,與當(dāng)今業(yè)界廣泛采用的云開發(fā)平臺和持續(xù)集成、持續(xù)部署的軟件開發(fā)實踐仍有較大距離。

由此可以看出,通過與企業(yè)合作開展基于云開發(fā)平臺的軟件工程實踐教學(xué),并圍繞軟件開發(fā)全生命周期開展用戶故事編寫、開發(fā)迭代安排、持續(xù)集成、自動化測試、持續(xù)部署的現(xiàn)代化軟件過程實踐,是一種面向軟件工程專業(yè)學(xué)位研究生的新的教學(xué)嘗試。

為此,復(fù)旦大學(xué)計算機科學(xué)技術(shù)學(xué)院通過集中開設(shè)的軟件過程課程開展了面向?qū)I(yè)學(xué)位研究生的軟件工程能力培養(yǎng)探索。這種軟件工程能力培養(yǎng)是對本科軟件工程實踐化教學(xué)與工程能力培養(yǎng)的進一步強化,其目的是面向軟件和互聯(lián)網(wǎng)等相關(guān)行業(yè)輸送適應(yīng)于工程化與規(guī)?;浖_發(fā)要求的高端軟件開發(fā)及管理人才[2-5]。按照這一要求,本文依托軟件開發(fā)平臺DevCloud[6]并引入敏捷開發(fā)方法,以及測試驅(qū)動開發(fā)、持續(xù)集成、開發(fā)運維一體化等業(yè)界實踐,通過課程項目開展實踐化教學(xué),以提升專業(yè)學(xué)位研究生的軟件工程能力。

2 課程設(shè)計

2.1 課程建設(shè)思路

作為專業(yè)學(xué)位研究生的主要課程之一,軟件過程課程面向計算機科學(xué)技術(shù)學(xué)院和軟件學(xué)院的所有專業(yè)學(xué)位研究生開設(shè)。本文首先對當(dāng)前專業(yè)學(xué)位研究生的總體軟件工程能力水平進行了初步排摸,以便對課程內(nèi)容、難度、形式等進行精準(zhǔn)定位與設(shè)計。

通過調(diào)研發(fā)現(xiàn):①專業(yè)學(xué)位研究生的軟件開發(fā)能力參差不齊。有些學(xué)生在本科接受過較為系統(tǒng)的軟件開發(fā)能力訓(xùn)練,開發(fā)能力較強,而有些則明顯缺乏相關(guān)訓(xùn)練。有一些研究生具有一定工作經(jīng)驗,但已不參與實際軟件開發(fā),而側(cè)重于管理工作;②學(xué)生對現(xiàn)代企業(yè)軟件開發(fā)前沿實踐了解較少。由于缺乏在相關(guān)軟件開發(fā)項目中的鍛煉,大部分學(xué)生的技術(shù)水平仍停留在本科課程項目實踐水平,以小型編程項目為主,而缺少敏捷開發(fā)、測試驅(qū)動開發(fā)、代碼質(zhì)量管理、持續(xù)集成等現(xiàn)代工程實踐經(jīng)驗;③學(xué)生現(xiàn)有技術(shù)棧差異較大。由于研究方向和技術(shù)背景各不相同,學(xué)生們掌握的編程語言、技術(shù)框架、前后端開發(fā)技能等差別較大,因此對后續(xù)課程項目的設(shè)計帶來了挑戰(zhàn);④學(xué)生日常有科研任務(wù)和其他課程學(xué)習(xí)任務(wù),時間安排往往比較緊湊,對每門課實踐任務(wù)的安排需配合學(xué)生的可用時間。

為此,針對專業(yè)學(xué)位研究生的技術(shù)能力、實踐能力和研究方向差異等問題,軟件過程課程的總體建設(shè)思路是以軟件工程能力培養(yǎng)為導(dǎo)向,以現(xiàn)代軟件工程實踐為抓手,引入云開發(fā)平臺,引導(dǎo)學(xué)生在實際軟件開發(fā)項目中逐步熟悉企業(yè)軟件開發(fā)的質(zhì)量要求以及敏捷開發(fā)方法,關(guān)注代碼質(zhì)量,并嘗試開展基于持續(xù)集成和開發(fā)運維一體化的業(yè)界典型實踐。

基于該思路,本文遵循以下具體原則開展課程教學(xué)設(shè)計:

(1)項目驅(qū)動,強調(diào)實踐。針對學(xué)生們所熟悉的業(yè)務(wù)領(lǐng)域設(shè)計軟件開發(fā)項目,采用小組化點對點輔導(dǎo)方式開展工程開發(fā)實踐指導(dǎo),以提升學(xué)生的高質(zhì)量編碼能力和增量迭代的軟件過程能力。

(2)云平臺賦能,借力企業(yè)。借助企業(yè)級云開發(fā)平臺,對接現(xiàn)代企業(yè)軟件產(chǎn)品的開發(fā)運維一體化實踐,在教學(xué)實踐內(nèi)容安排過程中充分聽取企業(yè)專家建議,精細設(shè)計實踐內(nèi)容環(huán)節(jié)。

(3)理論先行,持續(xù)改進。理論聯(lián)系實際,在講授方法理論的基礎(chǔ)上,推動學(xué)生在實踐中理解軟件過程管理與改進的要點,聚焦敏捷開發(fā)方法,重點提升學(xué)生在軟件開發(fā)中的代碼質(zhì)量意識和軟件產(chǎn)品持續(xù)集成意識,發(fā)現(xiàn)軟件過程管理中的不足并持續(xù)改進。

2.2 教學(xué)安排

課程教學(xué)主要由方法理論和項目實踐兩部分組成。在方法理論部分,在對傳統(tǒng)的軟件過程模型、過程評估、過程改進方法進行簡要概述的基礎(chǔ)上,重點聚焦當(dāng)前企業(yè)實踐中常用的敏捷方法、代碼質(zhì)量保障、持續(xù)集成與持續(xù)交付、開發(fā)運維一體化等實踐內(nèi)容,梳理Scrum 方法、用戶故事編寫、測試驅(qū)動開發(fā)、代碼評審、代碼靜態(tài)掃描與門禁等關(guān)鍵知識點,并且結(jié)合業(yè)務(wù)案例、代碼案例等組織課堂教學(xué)內(nèi)容,開展大班集中教學(xué)。在項目實踐部分,采取每小組5 人的實踐形式,針對一個給定的網(wǎng)上商城Web 應(yīng)用項目進行功能增強與架構(gòu)改進,并采取課堂現(xiàn)場分組指導(dǎo)與線上微信群問答相結(jié)合的方式,輪流開展小組教學(xué)活動。這種“大班教學(xué)、小班實踐”的教學(xué)方式,對于學(xué)生專業(yè)背景差別大、實踐能力參差不齊的情況具有良好的適應(yīng)性[14]。

考慮到課程本身的工程管理與實踐導(dǎo)向特性,方法理論和項目實踐的教學(xué)課時比例安排為1∶1。在實際教學(xué)中,理論課與實踐課內(nèi)容穿插進行,以提升理論聯(lián)系實際的效果。基于這樣的考慮,研究生軟件過程課程整體教學(xué)安排如表1 所示。課程共有54 學(xué)時,時間為16 教學(xué)周,每周3 課時,另有2 個考試周用于實踐項目完善與課程論文撰寫(未在表格中列出)。課程前4 周進行集中的課堂理論教學(xué),以奠定學(xué)生的理論基礎(chǔ);然后進行3 周的小組實踐,并且每周安排至少與課堂相當(dāng)?shù)恼n后時間開展項目集中開發(fā)與討論(具體形式將在1.3 節(jié)中介紹);在接下來的3 周里,結(jié)合之前實踐中所發(fā)現(xiàn)的問題,連續(xù)開展課堂理論教學(xué),并要求學(xué)生結(jié)合相關(guān)理論嘗試解決項目中出現(xiàn)的過程管理問題;之后又是連續(xù)3 周的小組實踐,以及1 次理論課;最后是2 周的課程實踐項目期末匯報。

在這種教學(xué)安排下,雖然理論內(nèi)容相對壓縮,但教師可更集中地講授關(guān)鍵知識點,結(jié)合代碼案例把知識講深、講透。同時,所增加的現(xiàn)場實踐與分組討論內(nèi)容,可讓教師和助教與各個實踐小組進行深入探討,發(fā)現(xiàn)各組開發(fā)實踐中的具體問題,并結(jié)合不同小組的技術(shù)特點給出針對性建議。

Table 1 Program arrangements of software process course表1 軟件過程課程安排

2.3 教學(xué)內(nèi)容設(shè)計

在教學(xué)中的理論講授內(nèi)容主要為以下3 部分:

(1)需求管理。盡管研究生們在本科階段學(xué)習(xí)過需求分析的基本方法,但大多數(shù)學(xué)生沒有在現(xiàn)代企業(yè)的軟件開發(fā)項目經(jīng)驗,因此敏捷方法下的需求分析和管理方法是本課程的講授重點。課程重點闡述如何采用用戶故事方法快速獲取軟件項目的范圍、驗收標(biāo)準(zhǔn)及迭代計劃,并通過Scrum 方法推進迭代增量開發(fā)。

(2)基于過程的質(zhì)量管理。質(zhì)量管理是軟件開發(fā)過程的核心目標(biāo)。在該課程中,質(zhì)量管理主要從代碼質(zhì)量管理、測試驅(qū)動開發(fā)、版本管理與分支策略等幾方面分別展開。在相關(guān)技術(shù)介紹中,特別強調(diào)了在開發(fā)過程中如何利用自動化代碼掃描、自動化測試等技術(shù)在開發(fā)過程中持續(xù)保障代碼質(zhì)量。自動化技術(shù)的應(yīng)用不僅需要管理能力,而且依賴于良好的軟件設(shè)計、軟件架構(gòu)等軟件內(nèi)在的質(zhì)量水平。因此,該部分課程內(nèi)容既包含了對質(zhì)量要素的講解,又重點講解了如何通過代碼審核、重構(gòu)、測試驅(qū)動等開發(fā)方法提高軟件的內(nèi)在質(zhì)量,讓學(xué)生理解內(nèi)在質(zhì)量與自動化技術(shù)、持續(xù)交付之間的關(guān)聯(lián)。

(3)軟件交付管理。該部分內(nèi)容已接近課程尾聲,其目的是從開發(fā)過程整體的角度,將測試先行、自動化質(zhì)量保障等單點技術(shù)提升為基于云平臺的持續(xù)集成、持續(xù)交付及開發(fā)運維一體化的現(xiàn)代軟件開發(fā)流程,使學(xué)生對整體的軟件過程有進一步認(rèn)識。具體教學(xué)內(nèi)容主要包括軟件交付的反模式和原則、配置管理、自動化流水線與持續(xù)交付。軟件交付的反模式是業(yè)界常見的導(dǎo)致交付困難的各種問題的總結(jié),由此導(dǎo)出如何提升交付頻率的原則和方法,進而從依賴管理、部署配置、應(yīng)用程序參數(shù)配置、環(huán)境管理、數(shù)據(jù)管理等方面介紹面向過程管理的配置管理要素。最后以持續(xù)交付為抓手,介紹構(gòu)建部署自動化流水線的方法及其腳本化方法,并結(jié)合案例闡明其作用。其中自動化流水線與云平臺結(jié)合,講授為何需要持續(xù)交付、如何達到持續(xù)交付,以及為何持續(xù)交付會將傳統(tǒng)軟件過程研究延伸到軟件運維階段,建立起開發(fā)運維一體化格局。

基于上述課程內(nèi)容,同時考慮到學(xué)生實際技術(shù)水平,本文配合相關(guān)講授內(nèi)容設(shè)計了具體課程實踐項目,使學(xué)生學(xué)以致用。

3 項目實踐

軟件過程管理課程實踐圍繞理論教學(xué)內(nèi)容開展,以敏捷方法以及測試驅(qū)動開發(fā)、持續(xù)集成和開發(fā)運維一體化為實踐設(shè)計主要目標(biāo),充分利用DevCloud的過程管理功能,引導(dǎo)學(xué)生開展分組實踐。

3.1 實踐內(nèi)容設(shè)計

在平衡實踐內(nèi)容復(fù)雜度與學(xué)生整體學(xué)業(yè)負擔(dān)的基礎(chǔ)上,課程采用維護式開發(fā)實踐內(nèi)容,即給定一個現(xiàn)有的軟件項目代碼,要求學(xué)生為該項目開發(fā)新功能以及修復(fù)原有缺陷。本文采用課程建設(shè)企業(yè)合作伙伴提供的一個名為“托馬斯零食商城”的Web 應(yīng)用項目,要求學(xué)生在該項目基礎(chǔ)上擴展新功能,例如購物可用積分抵扣金額、退貨、對接外部物流系統(tǒng)、定制促銷活動等。開發(fā)這些功能都需要有一定工作量,且學(xué)生較易理解其業(yè)務(wù)意義和價值,可比較清晰地描述出其驗收規(guī)則。

為兼顧學(xué)生的技術(shù)基礎(chǔ),本文選擇的“托馬斯零食商城”是一個采用了較老架構(gòu)(J2EE、JSP+Servlet)的Web 系統(tǒng),大部分學(xué)生可較容易讀懂其代碼。但由于該架構(gòu)是前后端耦合的,考慮到目前有更優(yōu)秀的架構(gòu),因此給學(xué)生提供了兩個選項:學(xué)生可在該項目架構(gòu)基礎(chǔ)上進行局部擴展與優(yōu)化,也可完全從頭做起,采用本小組最熟悉的架構(gòu)從頭進行開發(fā)。通過這樣的設(shè)計,讓不同技術(shù)能力的學(xué)生都能盡可能聚焦于新功能迭代增量開發(fā)以及對敏捷開發(fā)方法、持續(xù)集成等教學(xué)目標(biāo)的實踐。學(xué)生可根據(jù)小組成員的能力自主進行決策,決定是更換架構(gòu)(例如業(yè)界常用的前后端分離架構(gòu)),還是在原架構(gòu)上進行局部改良。

通過加入一系列新需求,明確每個需求所表達的客戶原始出發(fā)點,讓學(xué)生體會到什么是高價值需求,如何完整描述用戶故事及其驗收測試用例,并合理安排產(chǎn)品交付計劃和迭代計劃,圍繞用戶故事列表(或用戶故事地圖)逐項交付。

實踐項目采用DevCloud 作為開發(fā)過程管理平臺,利用其需求思維導(dǎo)圖、用戶故事編寫、迭代管理、代碼靜態(tài)檢查、云端編譯構(gòu)建、云端部署、流水線構(gòu)建部署等功能,開展全流程實踐。具體實踐的分步要求是:①學(xué)生按5 人分組,要求學(xué)生先熟悉該系統(tǒng)代碼基本結(jié)構(gòu),實現(xiàn)基于Dev-Cloud的代碼托管;②教師以客戶身份提出不同功能需求,要求學(xué)生給出用戶故事,在DevCloud 上用用戶故事樹(思維導(dǎo)圖)的形式進行組織;③學(xué)生討論用戶故事,并初步確定交付計劃和首次迭代計劃;④針對首次迭代計劃討論用戶故事細節(jié),給出可運行的驗收測試用例,并細分任務(wù);⑤在開發(fā)過程中圍繞用戶故事交付,采用測試先行的思想編寫代碼,保障代碼質(zhì)量;⑥選擇合適的分支策略,利用DevCloud 實現(xiàn)自動化編譯構(gòu)建、部署,進而集成代碼掃描、自動化測試能力到流水線上。

3.2 實踐教學(xué)形式設(shè)計

課程實踐教學(xué)采用小班形式,考慮到實踐效果,項目實踐小組成員數(shù)量限定不超過5 人。由于選課人數(shù)較多,實踐小組數(shù)量也較多,因此要保證教師與各小組交流效果,在有限的課時條件下就必須采用分批現(xiàn)場指導(dǎo)的方式。

實踐課程時間為連續(xù)3 周,每次要求1/3的小組到課堂現(xiàn)場進行分組交流,其他小組則自行在課外組織集中討論與開發(fā),并在DevCloud 上及時更新交付計劃、迭代計劃及任務(wù)看板墻。通過該方式,在每輪項目實踐過程中,每組都會有10~15min的時間與教師進行面對面交流,并且教師可在課堂上及課程微信群中直接指出一些共性問題。

采用這種實踐組織形式的優(yōu)勢在于教師可對每小組進行針對性指導(dǎo),深入發(fā)現(xiàn)其實踐中的問題,并補充大班授課中被學(xué)生忽略的一些地方。但這種方式本身也極具挑戰(zhàn)性,主要體現(xiàn)在教師需持續(xù)與學(xué)生互動,以及在課外進行自行討論的小組需及時更新開發(fā)進度并報告討論效果。

根據(jù)上文所述的課程總體安排,項目實踐討論采用“2+1”的形式,即兩輪現(xiàn)場開發(fā)討論加一次期末匯報總結(jié)。第一輪現(xiàn)場開發(fā)討論聚焦以用戶故事獲取需求,重點實踐如何采用用戶故事來快速記錄需求,并且明確系統(tǒng)的大致邊界。學(xué)生不僅需要準(zhǔn)確理解用戶故事的描述方法,而且需要實踐如何在開發(fā)過程中充分溝通用戶故事的細節(jié),并且將用戶故事的交付驗收表達為驗收測試用例。

第二輪現(xiàn)場開發(fā)討論聚焦于開發(fā)編碼過程中的質(zhì)量管理,包括測試先行、自動化測試、代碼質(zhì)量評審與掃描、云端構(gòu)建與部署等。學(xué)生需要選擇高價值的用戶故事開展完整的能力交付實踐,實現(xiàn)所開發(fā)功能的完整業(yè)務(wù)價值。在此過程中,需要靈活運用自動化測試技術(shù)以保證所實現(xiàn)用戶故事的正確性和價值,并且盡量提升集成、構(gòu)建頻度,使系統(tǒng)盡可能隨時處于可發(fā)布、可交付的狀態(tài)。

在最后的期末匯報環(huán)節(jié)中,要求每個實踐小組用10 分鐘時間重點展示系統(tǒng)開發(fā)維護交付上線的效果、用戶故事交付情況、開發(fā)過程中的單元測試和自動化測試實踐情況以及采用云平臺開展增量迭代開發(fā)、流水線構(gòu)建部署的實踐情況。

4 工程實踐導(dǎo)向教學(xué)效果

該教學(xué)方式在復(fù)旦大學(xué)計算機科學(xué)技術(shù)學(xué)院和軟件學(xué)院的專業(yè)學(xué)位研究生培養(yǎng)中取得了良好效果。由于同時面向不同研究方向的專業(yè)學(xué)位研究生,其軟件開發(fā)技術(shù)基礎(chǔ)和工程應(yīng)用能力不同,因此學(xué)生普遍反映課程實踐項目對其有一定壓力,但對于其理解軟件工程理論及培養(yǎng)工程化開發(fā)能力有很大幫助。

4.1 分小組差異化實踐指導(dǎo)效果

由于選課人數(shù)較多(每個選課班的人數(shù)在120 人以上),而為了保證實踐效果,每組規(guī)模被限制在5 人,因此每個選課班的實踐項目小組有30 多個。因各個小組的技術(shù)能力和技術(shù)棧差別較大,所以不同小組針對待開發(fā)與改造的系統(tǒng),選擇了不同的架構(gòu)策略。實踐中發(fā)現(xiàn),大約1/3的小組選擇了成員更熟悉的軟件開發(fā)技術(shù)與架構(gòu),例如StringBoot+Vue,以便更好地發(fā)揮小組人員的開發(fā)技能特長,而其他2/3的小組則在原Servlet+JSP的開發(fā)方式上進行改進,以尋求盡可能少的開發(fā)工作量,此技術(shù)選擇分布基本符合預(yù)期。在選擇更換開發(fā)架構(gòu)的小組中,通常由于前后端分離和引入了Maven 等依賴管理工具,能更好地開展自動化單元測試和基于接口的驗收測試。而對于采用原始架構(gòu)的小組而言,盡管代碼改動少,但架構(gòu)較老,造成自動化單元測試需要采用手工編寫腳本的方式,而且僅能對新增功能的代碼進行測試,學(xué)生需要進行一定探索,因此有一些難度。

通過兩輪差異化的分組實踐指導(dǎo),教師可更深入地了解每個小組的開發(fā)狀態(tài)、學(xué)生對基礎(chǔ)概念的理解情況以及小組技術(shù)選型,并幫助小組進行必要的技術(shù)評估。由于各個小組對課堂上講授的一些基礎(chǔ)概念的認(rèn)知與實踐可能出現(xiàn)偏差,教師通過與學(xué)生面對面的交流能充分發(fā)現(xiàn)問題并予以指導(dǎo)。

由于采用個性化、差異化的指導(dǎo)方式,學(xué)生有更多機會與教師直接對話,在開發(fā)實踐中也有更好的參與感。絕大部分小組都反饋了在開發(fā)過程中遇到的具體問題,例如如何書寫用戶故事,如何編寫自動化驗收測試用例,如何將代碼提交與代碼檢查、編譯構(gòu)建聯(lián)動起來等。通過與教師的面對面交流,學(xué)生能更準(zhǔn)確地提出在大班理論教學(xué)中難以發(fā)現(xiàn)的問題,從而更好地開展軟件過程管理實踐。

實踐過程中還發(fā)現(xiàn)個別具有初步團隊開發(fā)經(jīng)驗、但非軟件工程專業(yè)出身的學(xué)生對所講授的軟件過程方法非常感興趣,這體現(xiàn)了業(yè)界一些小團隊的開發(fā)方法仍然相對落后,需要采用先進的開發(fā)過程進行優(yōu)化。根據(jù)這些學(xué)生的反饋,其將所學(xué)知識應(yīng)用于實際軟件開發(fā)項目中,逐步推行用戶故事、驗收測試等具體技術(shù),已經(jīng)在明確開發(fā)需求、把握與推進開發(fā)進度等方面產(chǎn)生了積極效果。

通過這些學(xué)生的反饋可以看到,本課程講授的理論方法和實踐技能與企業(yè)實際需求相符,對于提升開發(fā)管理人員在實際軟件開發(fā)項目中的管理水平也有一定幫助,因此能更好地使專業(yè)學(xué)位研究生的開發(fā)技能與企業(yè)需求對接。

4.2 實踐中反映的主要問題

在實際教學(xué)中,各個項目小組對知識的掌握情況存在一些共性問題,主要包括以下幾個方面:

(1)對用戶故事的理解不準(zhǔn)確,沒有抓住用戶業(yè)務(wù)價值。由于學(xué)生們習(xí)慣于按功能進行開發(fā),因此往往傾向于從技術(shù)角度思考實現(xiàn)細節(jié),而非該功能對用戶而言的業(yè)務(wù)價值。例如,“購物者能通過購物獲得積分”這一需求,從購物者角度而言,需要完成購物后正確累計積分的功能;從商城平臺角度而言,需要對積分與消費情況按照商家和用戶分別進行統(tǒng)計,從而更好地定義營銷策略;從商家角度而言,則希望與商城平臺計算積分抵扣情況,從而獲得自身銷售收益。這3 種情況分別會產(chǎn)生3 個不同的用戶故事,需要實現(xiàn)各自的業(yè)務(wù)價值。但學(xué)生往往只從“購物者”這一個視角加以考慮,從而很難回答購物積分到底有什么業(yè)務(wù)價值。

(2)缺乏驗收測試用例來定義用戶故事的完成標(biāo)準(zhǔn)。為實現(xiàn)“購物者購物獲取積分”這一用戶故事,在實際開發(fā)過程中,如何利用驗收測試用例來定義完成這一用戶故事的標(biāo)準(zhǔn),對學(xué)生而言也是一個挑戰(zhàn)。學(xué)生通常會在討論匯報時,通過界面展示購物獲取積分的功能界面,而不會展示采用了哪些驗收測試用例,并且讓其自動運行來確保相關(guān)功能的正確性。也正是因為缺少驗收測試用例,無法進行對用戶故事的回歸測試,造成一些小組碰到重復(fù)出現(xiàn)的功能缺陷。而完成相關(guān)驗收測試用例的小組成員表示,驗收測試用例對開發(fā)過程中判斷迭代的完成起到了重要作用,將來也可更好地利用驗收測試用例來明確定義業(yè)務(wù)功能的邊界。

(3)測試用例編寫不足,難以推進持續(xù)集成和持續(xù)交付。在項目開發(fā)中,不僅用戶故事的驗收測試用例不足,單元測試也不足。學(xué)生對測試金字塔[15]需要大量自動化的底層單元測試缺乏直觀理解,沒有認(rèn)識到自動化測試與自動化部署流水線、持續(xù)集成和持續(xù)交付之間的關(guān)系,對自動化測試的重視程度不足。對此,教師通過實際項目中的具體需求案例進行說明,使學(xué)生了解驗收測試和單元測試對于保障軟件質(zhì)量的實際作用。同時,由于開發(fā)經(jīng)驗的缺乏,一些學(xué)生沒有在自己的軟件項目中編寫過測試用例,更沒有在持續(xù)集成環(huán)境中自動運行測試用例的經(jīng)驗。由于測試框架使用和編寫基本測試用例并不屬于本課程教學(xué)范圍,因此給一些學(xué)生的實踐造成了困難。為此,在分組實踐中,教師對各組實踐遇到的問題進行講解,同時各個小組通過自行學(xué)習(xí)測試技術(shù),提升測試效果。

(4)DevCloud的使用問題。在DevCloud 使用過程中,學(xué)生會提出一些平臺功能與敏捷開發(fā)理論差異的問題。例如,DevCloud的需求思維導(dǎo)圖通過“史詩故事”(epic)、“特性”(feature)、“故事”(story)、“任務(wù)”(task)4 個級別進行描述,但學(xué)生對于這些概念,特別是“特性”的概念并不理解。因為在以用戶故事為主導(dǎo)的分析方法中,往往不會特意強調(diào)“特性”的概念,因此需要結(jié)合實際案例說明如何定義“特性”,以及如何利用這一層抽象結(jié)構(gòu)更好地組織需求。

(5)迭代周期安排問題。敏捷開發(fā)所需的固定時間段(fixed timebox)開發(fā)與學(xué)生的日常學(xué)習(xí)時間往往會有沖突。由于學(xué)生需要完成其他課程以及進行各自的科研項目開發(fā),因此難以建立全時工作量的迭代交付節(jié)奏。為此,教師會建議時間沖突嚴(yán)重的小組靈活運用估算方法,尋找最小業(yè)務(wù)價值點,以便在最短時間內(nèi)完成價值交付。

5 教學(xué)反思與可能的改進方向

本文首次嘗試從軟件過程的角度,系統(tǒng)地將云開發(fā)平臺中的用戶故事、迭代管理、任務(wù)管理、持續(xù)集成、流水線構(gòu)建發(fā)布等能力融入軟件開發(fā)過程的研究生教學(xué),課程內(nèi)容安排特別是實踐安排還有改進的空間。通過反思課程教學(xué)全過程,總結(jié)出一些可改進的方向:

(1)選擇架構(gòu)更貼近現(xiàn)代開發(fā)技術(shù)的項目作為實踐項目。在選擇“托馬斯零食商城”時,原本預(yù)計學(xué)生對其代碼會比較容易讀懂,但實際上,由于學(xué)生技術(shù)水平各不相同,仍然有一部分學(xué)生并不能很順暢地理解該項目。對這些學(xué)生而言,學(xué)習(xí)更新的軟件架構(gòu)顯然更加有價值。因此,總體而言,選擇諸如前后端分離的主流軟件架構(gòu)可令學(xué)生更有學(xué)習(xí)動力。

(2)預(yù)先準(zhǔn)備更多單元測試用例作為樣例,為學(xué)生提供參照。大量可自動化運行的單元測試是持續(xù)集成的重要組成部分,學(xué)生對于單元測試的陌生感往往是推進持續(xù)集成的主要困難,如果在代碼中預(yù)先準(zhǔn)備一些可自動運行的單元測試用例以及面向用戶故事的自動化驗收測試用例,學(xué)生在改造和新增相關(guān)功能時會有更好的參照,學(xué)習(xí)效率也能提高。

(3)持續(xù)要求學(xué)生使用云開發(fā)平臺管理整個開發(fā)過程,哪怕學(xué)生無法保證足夠的項目開發(fā)時間。在實踐中,特別是開發(fā)后期,本應(yīng)通過看板墻進行管理的開發(fā)任務(wù)開始不再活躍,這可能與團隊的工作模式以及團隊缺少Scrum Master 這一角色有關(guān)。作為系統(tǒng)教授軟件過程的課程,應(yīng)當(dāng)時刻要求任務(wù)看板墻中的任務(wù)是活躍和清晰的,否則增量迭代與持續(xù)集成將難以維持。

6 結(jié)語

專業(yè)學(xué)位研究生的工程管理類課程如何對接企業(yè)實際需求,培養(yǎng)學(xué)生的軟件工程實戰(zhàn)能力,是該類課程建設(shè)的重要問題之一。云平臺賦能的軟件過程管理課程聚焦于基于用戶故事的敏捷方法、測試驅(qū)動開發(fā)、持續(xù)集成和DevOps 實踐,采用DevCloud 作為開發(fā)過程管理平臺,圍繞軟件開發(fā)全生命周期,引導(dǎo)學(xué)生從編寫用戶故事入手,增量迭代地交付用戶關(guān)注的業(yè)務(wù)價值,并開展測試驅(qū)動開發(fā)、流水線構(gòu)建部署以及持續(xù)集成與持續(xù)發(fā)布的實踐,通過理論牽引、強化實踐的方式,讓專業(yè)學(xué)位研究生對現(xiàn)代軟件開發(fā)過程管理的要素有更加深刻的理解,并融入日常開發(fā)實踐中。今后,還將進一步考慮采用新的實踐項目或便于學(xué)生理解業(yè)務(wù)的開源項目,加強任務(wù)看板墻管理,更加突出持續(xù)集成與持續(xù)交付的實踐,使專業(yè)學(xué)位研究生能更好地適應(yīng)現(xiàn)代軟件企業(yè)的工程化軟件開發(fā)需求。

猜你喜歡
測試用例軟件用戶
禪宗軟件
基于SmartUnit的安全通信系統(tǒng)單元測試用例自動生成
軟件對對碰
基于混合遺傳算法的回歸測試用例集最小化研究
關(guān)注用戶
關(guān)注用戶
關(guān)注用戶
基于依賴結(jié)構(gòu)的測試用例優(yōu)先級技術(shù)
如何獲取一億海外用戶
談軟件的破解與保護
宁武县| 哈尔滨市| 铁力市| 龙门县| 余姚市| 靖远县| 温宿县| 光泽县| 密云县| 夏邑县| 永年县| 华容县| 萨嘎县| 城市| 泰宁县| 河源市| 拉孜县| 九龙县| 澄迈县| 双峰县| 平湖市| 行唐县| 扶风县| 华容县| 宝山区| 台南县| 乐山市| 昆山市| 青海省| 南康市| 玉溪市| 广宗县| 白水县| 昭觉县| 靖宇县| 易门县| 崇阳县| 沾益县| 错那县| 麻栗坡县| 嘉义县|