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