張 程,古 平,劉慧君
(重慶大學(xué) 計(jì)算機(jī)學(xué)院,重慶 400030)
軟件工程課程是計(jì)算機(jī)科學(xué)與技術(shù)方向的核心專(zhuān)業(yè)課程,主要從基本原理、開(kāi)發(fā)方法、開(kāi)發(fā)工具等幾個(gè)方面講述軟件開(kāi)發(fā)的全過(guò)程,是計(jì)算機(jī)相關(guān)專(zhuān)業(yè)的重要專(zhuān)業(yè)課程。然而,在軟件工程課程實(shí)際教學(xué)過(guò)程中,其教學(xué)效果并不令人滿(mǎn)意,教與學(xué)的付出和收獲沒(méi)有成正比,難以實(shí)現(xiàn)該課程的教學(xué)目的和預(yù)期教學(xué)效果,尤其是學(xué)生對(duì)于理論教學(xué)內(nèi)容的掌握和理解,往往低于預(yù)期。如何提高學(xué)生對(duì)軟件工程知識(shí)點(diǎn)的理解能力和運(yùn)用能力,是軟件工程課程任課教師一直努力和關(guān)注的方向。
軟件工程是一門(mén)理論性、實(shí)踐性和工程性都很強(qiáng)的課程。新技術(shù)、新理論的不斷提出,使得軟件工程知識(shí)點(diǎn)急劇膨脹,內(nèi)容多,更新快[1]。一方面,授課教師在兼顧課時(shí)的同時(shí)要更新和補(bǔ)充更多的教學(xué)內(nèi)容;另一方面,學(xué)生連續(xù)接受幾種不同的開(kāi)發(fā)思想和方法,對(duì)于各種方法之間的利弊和取舍難以真正把握,給學(xué)生真正學(xué)會(huì)和運(yùn)用軟件工程的方法和技術(shù)帶來(lái)困擾[2]。
案例式教學(xué)是當(dāng)前軟件工程課堂教學(xué)的一個(gè)重要手段[3],但是案例式教學(xué)在軟件工程課程教學(xué)中的局限性主要體現(xiàn)在案例的選擇上。一類(lèi)是簡(jiǎn)單易懂的案例,如圖書(shū)管理系統(tǒng)、教學(xué)管理系統(tǒng);另一類(lèi)是典型的真實(shí)案例,如清單類(lèi)App、項(xiàng)目管理類(lèi)App甚至支付寶等。學(xué)生對(duì)于簡(jiǎn)單易懂的案例能夠理解,卻無(wú)法與自己的實(shí)踐項(xiàng)目建立對(duì)應(yīng)關(guān)系或轉(zhuǎn)換。真實(shí)案例與知識(shí)點(diǎn)的相關(guān)性或緊密程度不佳,且外部影響因素多,因此給學(xué)生理解知識(shí)點(diǎn)帶來(lái)困惑。
項(xiàng)目驅(qū)動(dòng)式教學(xué)也是近幾年廣泛采用的教學(xué)手段[4-9],但是很多學(xué)生為確保好成績(jī),會(huì)選擇一些簡(jiǎn)單、易于開(kāi)發(fā)的管理類(lèi)項(xiàng)目,而在未來(lái)的實(shí)際應(yīng)用中幾乎不會(huì)有同等難度層次的類(lèi)似開(kāi)發(fā)。同時(shí),管理類(lèi)項(xiàng)目也限制了授課教師在知識(shí)點(diǎn)講授過(guò)程中的全面性和應(yīng)用性,給學(xué)生造成軟件工程課程的知識(shí)技能僅適用于管理類(lèi)軟件項(xiàng)目開(kāi)發(fā)的印象,而一旦面對(duì)其他類(lèi)型軟件開(kāi)發(fā),就不知道如何應(yīng)用課程知識(shí)和技術(shù)予以解決處理。
研討式教學(xué)中發(fā)現(xiàn),學(xué)生在研討時(shí)常常是對(duì)研討內(nèi)容的表面論述和泛泛而談,缺乏深刻理解。以“阿里云存儲(chǔ)技術(shù)”研討為例,參與研討的學(xué)生通過(guò)阿里云網(wǎng)站、知乎等收集素材和信息,對(duì)其對(duì)象存儲(chǔ)、表格存儲(chǔ)、塊存儲(chǔ)、文件存儲(chǔ)等進(jìn)行分類(lèi)介紹,而對(duì)更有意義的存儲(chǔ)對(duì)比、適用性選擇等幾乎未涉及。這樣的研討效果遠(yuǎn)沒(méi)達(dá)到題目設(shè)計(jì)的要求,一個(gè)重要原因就是學(xué)生對(duì)題目涉及內(nèi)容沒(méi)有切身體驗(yàn),無(wú)法深刻理解題目?jī)?nèi)容。
軟件工程課程實(shí)踐通常在學(xué)期末以課程設(shè)計(jì)方式進(jìn)行,多門(mén)課程的課程設(shè)計(jì)都集中在這一階段,壓縮了軟件工程課程設(shè)計(jì)的可用時(shí)間;同時(shí),2周的開(kāi)發(fā)時(shí)間也限制了學(xué)生能獨(dú)立完成的軟件內(nèi)容。因此,課程設(shè)計(jì)的題目很多是“圖書(shū)管理系統(tǒng)”“宿舍管理系統(tǒng)”“貪吃蛇”“俄羅斯方塊”等簡(jiǎn)單開(kāi)發(fā)項(xiàng)目。這些項(xiàng)目限制了學(xué)生對(duì)開(kāi)發(fā)技術(shù)和開(kāi)發(fā)過(guò)程的思考和理解,造成課程實(shí)踐與理論知識(shí)脫節(jié)。
通過(guò)對(duì)我校計(jì)算機(jī)學(xué)院學(xué)生的調(diào)查發(fā)現(xiàn),選修軟件工程課程的學(xué)生中超過(guò)50%以上參與了各種競(jìng)賽項(xiàng)目或創(chuàng)新實(shí)踐項(xiàng)目,而這些項(xiàng)目絕大部分與軟件開(kāi)發(fā)緊密相關(guān),因此在軟件工程課程教學(xué)中引入競(jìng)賽項(xiàng)目,是解決案例化及項(xiàng)目驅(qū)動(dòng)教學(xué)問(wèn)題的重要手段。教師可以在軟件工程課程開(kāi)始階段收集學(xué)生參與的競(jìng)賽項(xiàng)目或其他項(xiàng)目題目,并讓學(xué)生用一段話(huà)描述自己的項(xiàng)目意圖和主要內(nèi)容,以此為基礎(chǔ)進(jìn)行針對(duì)性的案例化和項(xiàng)目驅(qū)動(dòng)式教學(xué)。
在軟件工程課堂理論教學(xué)中,有很多的一級(jí)知識(shí)點(diǎn)或者二級(jí)知識(shí)點(diǎn)都可以應(yīng)用案例化教學(xué)進(jìn)行闡述,而以往在選擇案例講解知識(shí)點(diǎn)的過(guò)程中,學(xué)生對(duì)于案例中知識(shí)點(diǎn)的理解不夠深刻,存在浮于表面的問(wèn)題。通過(guò)收集學(xué)生親身參與的項(xiàng)目題目和內(nèi)容,可以從這些項(xiàng)目中選擇適用于某知識(shí)點(diǎn)的案例,并以此為基礎(chǔ)進(jìn)行該知識(shí)點(diǎn)講解。在上課之前,先請(qǐng)?jiān)擁?xiàng)目的學(xué)生事先預(yù)習(xí)這部分知識(shí)點(diǎn)內(nèi)容,然后結(jié)合自身的理解對(duì)該項(xiàng)目應(yīng)用這個(gè)知識(shí)點(diǎn)與否進(jìn)行考慮,并在班上進(jìn)行講解。最后,教師對(duì)這部分知識(shí)點(diǎn)和這個(gè)項(xiàng)目進(jìn)行講評(píng),如此便能夠加深學(xué)生對(duì)這類(lèi)知識(shí)點(diǎn)的理解和認(rèn)識(shí)。由于學(xué)生親身參與了競(jìng)賽項(xiàng)目,因此同學(xué)之間不存在溝通障礙,知識(shí)點(diǎn)轉(zhuǎn)換方式也更能夠被學(xué)生接受,而且全班60多名學(xué)生往往有不少于15個(gè)項(xiàng)目,也使得軟件工程課程中的案例豐富多彩且易于理解。
以某組學(xué)生的計(jì)算機(jī)大賽題目“馨家”為例,當(dāng)課程講述到用例圖的繪制和User Story轉(zhuǎn)換過(guò)程時(shí),該組學(xué)生會(huì)結(jié)合他們?cè)凇败凹摇表?xiàng)目中的用例分析來(lái)講述某個(gè)場(chǎng)景的Story,并基于這個(gè)故事畫(huà)出對(duì)應(yīng)的用例圖,然后針對(duì)這個(gè)Story和轉(zhuǎn)換的用例圖進(jìn)行講評(píng)和修改完善。這樣的過(guò)程可以加深學(xué)生對(duì)于從Story中轉(zhuǎn)換用例圖的方法和過(guò)程的理解,也更有代入感。
由于軟件工程課程自身的特點(diǎn),可把軟件開(kāi)發(fā)的全過(guò)程分解成多個(gè)章節(jié)進(jìn)行講述,而主要的章節(jié)順序也基本是軟件過(guò)程、需求分析與設(shè)計(jì)、軟件質(zhì)量管理、軟件項(xiàng)目管理與配置管理幾個(gè)部分,這樣基本跟軟件開(kāi)發(fā)過(guò)程保持一致。在實(shí)際教學(xué)過(guò)程中,首先講述軟件過(guò)程及軟件項(xiàng)目分組策略,同時(shí)重點(diǎn)介紹敏捷開(kāi)發(fā)和其他一些適用于中小型項(xiàng)目的過(guò)程化管理方法(同時(shí)介紹甘特圖);然后再對(duì)需求分析與設(shè)計(jì)(結(jié)合UML的相關(guān)圖形化工具)、軟件系統(tǒng)架構(gòu)設(shè)計(jì)、編碼實(shí)現(xiàn)的語(yǔ)言選擇和編碼風(fēng)格、軟件測(cè)試幾個(gè)部分按順序進(jìn)行軟件工程課堂教學(xué);最后介紹軟件配置管理和軟件項(xiàng)目管理的相關(guān)知識(shí),讓學(xué)生在學(xué)習(xí)過(guò)程中結(jié)合自己參與的項(xiàng)目進(jìn)行分析和操作,并根據(jù)每個(gè)階段的內(nèi)容提交相關(guān)文檔,如項(xiàng)目分工甘特圖、項(xiàng)目需求分析說(shuō)明書(shū)、項(xiàng)目UML設(shè)計(jì)圖、部分模塊開(kāi)發(fā)代碼、測(cè)試報(bào)告等。雖然針對(duì)同一個(gè)作業(yè)要求提交的文檔各不相同,加大了教師批改的工作量,但是對(duì)于學(xué)生而言,他們真正在軟件工程課程學(xué)習(xí)中理解了軟件開(kāi)發(fā)的過(guò)程化管理和相關(guān)知識(shí)技術(shù),并學(xué)會(huì)了在自己的真實(shí)項(xiàng)目中應(yīng)用軟件工程的理論和技術(shù)。隨著課程學(xué)習(xí)結(jié)束,學(xué)生項(xiàng)目開(kāi)發(fā)的主要工作也隨之完成,學(xué)生對(duì)這樣的教學(xué)方式表示認(rèn)同和獲益匪淺。
以1.4節(jié)中提到的“阿里云存儲(chǔ)技術(shù)”研討題目為例,在引入競(jìng)賽驅(qū)動(dòng)的項(xiàng)目式軟件工程課程教學(xué)方法后,選擇進(jìn)行App項(xiàng)目開(kāi)發(fā)的小組負(fù)責(zé)這個(gè)研討題目。在軟件體系架構(gòu)設(shè)計(jì)階段,教師與該組學(xué)生共同設(shè)計(jì)該項(xiàng)目的體系結(jié)構(gòu),并分析其可能存在的數(shù)據(jù)存儲(chǔ)內(nèi)容,然后很明確地告訴學(xué)生在該項(xiàng)目實(shí)現(xiàn)時(shí)必須用到阿里云的云存儲(chǔ)。這樣,該組學(xué)生在項(xiàng)目開(kāi)發(fā)時(shí)就會(huì)主動(dòng)分析阿里云存儲(chǔ)技術(shù),決策到底哪種或哪幾種阿里云存儲(chǔ)技術(shù)會(huì)在該項(xiàng)目中被使用,與教師交流后,甚至可以在研討前完成部分云存儲(chǔ)代碼的開(kāi)發(fā)。在進(jìn)行該題目研討時(shí),該組學(xué)生對(duì)這個(gè)題目的內(nèi)容有了充分體會(huì)和理解,使得整個(gè)研討內(nèi)容詳盡、表述清晰,并且充分達(dá)到了研討式教學(xué)的目的。
由于在軟件工程的課堂教學(xué)中已經(jīng)讓學(xué)生進(jìn)行分組工作,并且每個(gè)組都有自己切實(shí)可行的軟件開(kāi)發(fā)項(xiàng)目,因此在課堂教學(xué)過(guò)程中,該軟件開(kāi)發(fā)項(xiàng)目各個(gè)階段的開(kāi)發(fā)內(nèi)容和相關(guān)文檔也都得以完成并且以作業(yè)的方式提交,確保了相關(guān)文檔的質(zhì)量。軟件工程課程設(shè)計(jì)作為課堂教學(xué)結(jié)束后的集中實(shí)踐教學(xué)階段,更多地側(cè)重于最后階段的編碼實(shí)現(xiàn)和模塊整合工作以及配套的系統(tǒng)測(cè)試,從而使得課程設(shè)計(jì)不再脫離課堂教學(xué)存在,而真正成為軟件工程課堂教學(xué)的延續(xù)和收尾。軟件工程課程實(shí)踐教學(xué)環(huán)節(jié)的內(nèi)容不再枯燥無(wú)味,學(xué)生也不再抱怨2周時(shí)間無(wú)法完成一個(gè)有一定規(guī)模的軟件產(chǎn)品,因?yàn)檎麑W(xué)期的時(shí)間都用在了完成這個(gè)軟件產(chǎn)品上。
將競(jìng)賽驅(qū)動(dòng)的項(xiàng)目式教學(xué)方法引入軟件工程課程的教學(xué)中,使軟件工程課程不再只有理論,而是看得著、摸得到、有體會(huì)、能接觸的教學(xué)課程。學(xué)生在學(xué)習(xí)理論知識(shí)和技術(shù)的同時(shí),能夠直接與自己參與的項(xiàng)目相結(jié)合;學(xué)習(xí)軟件工程課程的過(guò)程,實(shí)質(zhì)也是自身競(jìng)賽項(xiàng)目的開(kāi)發(fā)、完善和改進(jìn)過(guò)程,對(duì)于培養(yǎng)學(xué)生的專(zhuān)業(yè)技能和實(shí)際動(dòng)手能力,實(shí)現(xiàn)教學(xué)與實(shí)踐的有機(jī)結(jié)合,都起到了重要作用。