包 瓊
(湖北經(jīng)濟(jì)學(xué)院 信息與通信工程學(xué)院,湖北 武漢 430205)
《軟件工程》是軟件工程專業(yè)與計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)必修課程。該課程在學(xué)生具備一定的編程能力、已完成對(duì)數(shù)據(jù)庫基本原理學(xué)習(xí)的基礎(chǔ)上開設(shè)。通過課程學(xué)習(xí),學(xué)生應(yīng)該對(duì)項(xiàng)目開發(fā)的各個(gè)階段任務(wù)之間關(guān)系有所了解,能綜合運(yùn)用已有知識(shí)對(duì)現(xiàn)實(shí)問題進(jìn)行分析與設(shè)計(jì),并解決問題,具備一定的團(tuán)隊(duì)協(xié)作與文檔書寫能力。
大數(shù)據(jù)、云計(jì)算、人工智能技術(shù)的發(fā)展,對(duì)軟件工程人才培養(yǎng)提出了更高的要求[1]。2013年,隨著以“成果為導(dǎo)向、學(xué)生為中心、持續(xù)改進(jìn)”為理念的工程教育專業(yè)認(rèn)證的引入,軟件工程教育目標(biāo)將更加側(cè)重于對(duì)學(xué)生能力與教學(xué)產(chǎn)出方面的評(píng)價(jià)[2]。在教學(xué)過程中應(yīng)更關(guān)注:Get What(取得什么學(xué)習(xí)成果)、Why Get(為什么需要取得這些成果)、How Get(如何取得成果)與How Know(如何知道取得了學(xué)習(xí)成果)。
《軟件工程》基本理論的學(xué)習(xí),學(xué)生完全可以通過MOOC、網(wǎng)絡(luò)資源進(jìn)行。然而,目前的MOOC、網(wǎng)絡(luò)資源依然不能很好解決學(xué)生對(duì)軟件開發(fā)過程實(shí)質(zhì)的理解,基本理論的理解必須依托工程實(shí)踐。網(wǎng)上教學(xué)資源可以作為對(duì)課內(nèi)教學(xué)的補(bǔ)充,但是還不具備取代課內(nèi)教學(xué)的能力。
《軟件工程》課程教學(xué)相對(duì)《程序設(shè)計(jì)語言》顯得抽象、理論性更強(qiáng)。計(jì)算機(jī)語言類課程所解決的問題規(guī)模相對(duì)較小,一般能在較短時(shí)間周期看到一個(gè)簡(jiǎn)單問題的解決,因此學(xué)生比較容易獲得成就感。而反觀《軟件工程》課程,需要學(xué)生思考與解決的問題復(fù)雜度要高很多,導(dǎo)致成就感的獲得周期相對(duì)會(huì)長(zhǎng)很多。因此,有些學(xué)生還沒有堅(jiān)持到最后成果就中途放棄了。所以,《軟件工程》課程教學(xué)與程序設(shè)計(jì)類課程教學(xué)有著明顯不同。后者成就感獲得是短、頻、快,而前者成就感的獲得正好相反。
因此,如何適應(yīng)學(xué)習(xí)主體學(xué)習(xí)特點(diǎn),改善成就感獲得,調(diào)動(dòng)主觀能動(dòng)性,成為衡量《軟件工程》課程教學(xué)內(nèi)容與方法設(shè)計(jì)的重要指標(biāo)。
軟件開發(fā)技術(shù)更新突飛猛進(jìn),各種開發(fā)框架層出不窮,簡(jiǎn)化了開發(fā)者開發(fā)難度、提升了開發(fā)效率。同時(shí)學(xué)生需要不斷學(xué)習(xí)新的開發(fā)知識(shí)。目前應(yīng)用開發(fā)從基于Web應(yīng)用開發(fā),到手機(jī)APP開發(fā),到熱門微信小程序開發(fā)等等。隨著軟件應(yīng)用迅速普及,軟件朝著更小規(guī)模體量、更快速的開發(fā)發(fā)展。開發(fā)的短周期、開發(fā)過程的快速迭代、持續(xù)的交付與集成,成為現(xiàn)代軟件開發(fā)的顯著特點(diǎn)。傳統(tǒng)教學(xué)明顯不能滿足現(xiàn)代軟件開發(fā)變化。因此,對(duì)《軟件工程》教學(xué)內(nèi)容取舍提出了更高要求。如何兼顧軟件工程基本內(nèi)容體系完整性,又能結(jié)合現(xiàn)代軟件開發(fā)特點(diǎn),將內(nèi)容有效地融合到案例中,體現(xiàn)軟件開發(fā)基本原則,成為教學(xué)設(shè)計(jì)中需要考慮的重要問題。
基本能力培養(yǎng)需要以課程知識(shí)為載體,通過教學(xué)活動(dòng)完成[3]。本文圍繞“成果為導(dǎo)向、學(xué)生為中心、持續(xù)改進(jìn)”的理念,對(duì)《軟件工程》教學(xué)方法進(jìn)行了改進(jìn)。
以軟件需求分析部分教學(xué)為例,理解用戶需求,真實(shí)有效的例子非常重要。教學(xué)中選用真實(shí)網(wǎng)絡(luò)教學(xué)平臺(tái)的作業(yè)提交與批改作為實(shí)際案例進(jìn)行分析。
這個(gè)案例的好處是:①它是一個(gè)真實(shí)的系統(tǒng),學(xué)生往往比較容易接納;②它是一個(gè)商業(yè)系統(tǒng),具有一定的復(fù)雜性;③使用該案例,可以分別接觸到教師端與學(xué)生端兩個(gè)不同角色,可以幫助學(xué)生有效理解不同角色對(duì)于系統(tǒng)的不同需求。
該案例很好切合了需求分析環(huán)節(jié)教學(xué)中關(guān)于通過現(xiàn)有系統(tǒng)獲取用戶需求的要求。通過一段時(shí)間的共同使用,學(xué)生可以在教師的提示與引導(dǎo)下,詳細(xì)描述該系統(tǒng)提供的功能及對(duì)應(yīng)的用戶需求。
在該系統(tǒng)使用過程中,學(xué)生與教師一起發(fā)現(xiàn)了一些系統(tǒng)存在的問題,引發(fā)共同思考:①對(duì)于優(yōu)秀作業(yè),教師想通過討論組方式進(jìn)行轉(zhuǎn)發(fā),可是相關(guān)附件不能一起轉(zhuǎn)發(fā),這時(shí)就產(chǎn)生了用戶新的需求;②通過系統(tǒng)對(duì)提交作業(yè)進(jìn)行互評(píng)時(shí),哪些人參與互評(píng)?這就產(chǎn)生了對(duì)業(yè)務(wù)規(guī)則詳細(xì)定義的要求;③如果作業(yè)提交日期修改了,會(huì)對(duì)互評(píng)有什么影響?這時(shí),產(chǎn)生了新的思考,軟件功能與業(yè)務(wù)流程處理之間的矛盾如何協(xié)調(diào)。如果軟件設(shè)置過于隨便,可能會(huì)對(duì)某些業(yè)務(wù)流程的實(shí)際執(zhí)行產(chǎn)生非預(yù)期干擾甚至錯(cuò)誤。
在這個(gè)真實(shí)案例中,學(xué)生擺脫了編程技術(shù)束縛,將重點(diǎn)落到了需求分析上。最后,學(xué)生給出了作業(yè)提交與批改系統(tǒng)的詳細(xì)需求列表,并根據(jù)自己的思考發(fā)現(xiàn)問題,提出了新的需求。在這個(gè)過程中,學(xué)生積極主動(dòng)參與、思考,教師充分調(diào)動(dòng)了學(xué)生的主觀能動(dòng)性,在有效課堂時(shí)間內(nèi)實(shí)現(xiàn)了師生互動(dòng)、生生互動(dòng)。
軟件開發(fā)各階段的工作之間都是有一定聯(lián)系的。如何通過有效的教學(xué)設(shè)計(jì),在有限時(shí)間空間范圍內(nèi),讓學(xué)生體會(huì)并感受到軟件開發(fā)階段之間的聯(lián)系、前后關(guān)系,是一個(gè)很大的挑戰(zhàn)。
在教學(xué)過程中,圍繞模擬自動(dòng)售貨機(jī)案例進(jìn)行了相關(guān)設(shè)計(jì)。對(duì)于自動(dòng)售貨機(jī)案例,按照用戶不同需求定位,給出了3個(gè)不同層次的系統(tǒng)需求,簡(jiǎn)化描述如下:
Level1:定位為最基本的單臺(tái)自動(dòng)售貨機(jī),能夠完成商品的選擇、投幣、出貨、找零環(huán)節(jié),單次交易只能購買一件商品;能進(jìn)行商品補(bǔ)貨。
Level2:定位為能夠?qū)r(jià)格進(jìn)行自由調(diào)整的售貨機(jī),除了支持投幣付款,還支持其它電子貨幣付款方式,一次交易可購買多個(gè)商品;能進(jìn)行商品補(bǔ)貨。
Level3:定位整個(gè)城市的自動(dòng)售貨機(jī)系統(tǒng),通過網(wǎng)絡(luò)可以實(shí)現(xiàn)銷售情況統(tǒng)計(jì),能夠?qū)κ圬洐C(jī)上貨商品與數(shù)量進(jìn)行建議,調(diào)整商品配備。
不同需求對(duì)應(yīng)的關(guān)注點(diǎn)有所不同,對(duì)于學(xué)生綜合能力要求也有所不同。具體區(qū)別如表1所示。
表1 不同層級(jí)需求的關(guān)注點(diǎn)及能力支撐對(duì)照
層次定位不同,難度與復(fù)雜度逐層遞增,設(shè)計(jì)與實(shí)現(xiàn)時(shí)采用的技術(shù)手段也不同。對(duì)于不同能力的學(xué)生,分配不同層次定位進(jìn)行模擬系統(tǒng)開發(fā)。具體設(shè)計(jì)與實(shí)現(xiàn)采用開放方式,由學(xué)生自行選擇不同的設(shè)計(jì)與實(shí)現(xiàn)方式。學(xué)生在系統(tǒng)實(shí)現(xiàn)過程中可以根據(jù)需要采用不同方式進(jìn)行設(shè)計(jì)與實(shí)現(xiàn)。比如:有學(xué)生可能采用數(shù)據(jù)庫存儲(chǔ)相關(guān)信息,有學(xué)生可能采用文件存儲(chǔ)相關(guān)信息,有學(xué)生可能直接在代碼中設(shè)置信息,有學(xué)生可能采用圖形界面實(shí)現(xiàn),有學(xué)生可能采用命令行方式實(shí)現(xiàn),有學(xué)生采用C++實(shí)現(xiàn),有學(xué)生采用Java實(shí)現(xiàn)。最后結(jié)果可能五花八門,但是核心就是需求。
這種發(fā)散式學(xué)習(xí)實(shí)踐過程,通過所有人參與,可以得到多樣性的系統(tǒng)實(shí)現(xiàn)案例。學(xué)生通過測(cè)試與使用其他人開發(fā)的系統(tǒng),發(fā)現(xiàn)不同系統(tǒng)之間的差異,然后與特定需求進(jìn)行對(duì)比,找到用戶需求與實(shí)際開發(fā)之間存在偏差的原因,對(duì)照系統(tǒng)思考需求細(xì)節(jié)對(duì)系統(tǒng)實(shí)現(xiàn)的影響。學(xué)生通過對(duì)比不同設(shè)計(jì)與實(shí)現(xiàn),發(fā)現(xiàn)各種方案優(yōu)劣,完成一個(gè)比較學(xué)習(xí)的過程。這個(gè)學(xué)習(xí)過程以及收獲是網(wǎng)絡(luò)學(xué)習(xí)資源無法替代的,即群體學(xué)習(xí)過程往往優(yōu)于個(gè)體孤立學(xué)習(xí)。
軟件工程教學(xué)定位與程序設(shè)計(jì)語言或某種開發(fā)技能教學(xué)定位不同,是站在更高層次上理解軟件開發(fā)各環(huán)節(jié)間的聯(lián)系,但又植根于具體項(xiàng)目開發(fā)。因此,選取合適復(fù)雜度的案例并進(jìn)行適當(dāng)教學(xué)過程設(shè)計(jì),能讓學(xué)生有效參與案例分析、設(shè)計(jì)與實(shí)現(xiàn),并通過調(diào)動(dòng)群體學(xué)習(xí)的多樣性,達(dá)成有效成果。