孫 可, 張曉芬, 李 晉
(沈陽師范大學(xué) 軟件學(xué)院, 沈陽 110034)
畢業(yè)論文是高校人才培養(yǎng)計劃的重要組成部分,是實現(xiàn)人才培養(yǎng)目標(biāo)、培養(yǎng)本科學(xué)生科研能力與創(chuàng)新思維、檢驗學(xué)生理論應(yīng)用到實踐的能力的重要手段[1-2]。工科本科生的畢業(yè)論文是基于學(xué)生的畢業(yè)設(shè)計而創(chuàng)作的,完成畢業(yè)論文的前提是做好畢業(yè)設(shè)計[3-5]。畢業(yè)設(shè)計是對工科專業(yè)本科畢業(yè)生綜合實踐能力進(jìn)行考察的重要環(huán)節(jié),通過畢業(yè)設(shè)計能夠考查學(xué)生對大學(xué)所學(xué)知識、技能和素養(yǎng)的綜合應(yīng)用能力。畢業(yè)論文是學(xué)生對畢業(yè)設(shè)計的方法、過程、結(jié)果的總結(jié),通過畢業(yè)設(shè)計論文可以對學(xué)生的專業(yè)知識、計算機等現(xiàn)代工具及實驗設(shè)備的使用、文獻(xiàn)資料的查閱與總結(jié)、問題的分析與研究、研究結(jié)果的分析與總結(jié)、論文撰寫等多方面綜合能力進(jìn)行檢驗[6-8]。
調(diào)查發(fā)現(xiàn),很多學(xué)生在畢業(yè)設(shè)計過程中沒有領(lǐng)會軟件需求的重要作用[9-10],學(xué)生普遍認(rèn)為在畢業(yè)設(shè)計中最重要的是編碼,而忽視了需求獲取、需求分析、系統(tǒng)設(shè)計等過程。大部分學(xué)生在完成選題后,不會按照軟件工程相關(guān)理論和方法展開畢業(yè)設(shè)計工作,導(dǎo)致學(xué)生畢業(yè)設(shè)計做出的項目質(zhì)量不高,撰寫的畢業(yè)論文邏輯混亂、核心問題闡述不清。究其原因,是因為學(xué)生沒有深刻領(lǐng)會到軟件需求作為軟件工程的起始階段,可以為軟件系統(tǒng)開發(fā)的后續(xù)階段提供工作基礎(chǔ),需求獲取、而需求分析等步驟工作的結(jié)果對軟件項目的成敗至關(guān)重要。因此。如何指導(dǎo)學(xué)生做好畢業(yè)設(shè)計,提高學(xué)生畢業(yè)設(shè)計水平和質(zhì)量進(jìn)而提高畢業(yè)論文的質(zhì)量,是一個重要的課題。作為軟件工程專業(yè)主干課的“軟件需求過程”是與畢業(yè)設(shè)計聯(lián)系較緊密的課程,其目標(biāo)是培養(yǎng)學(xué)生建立工程化的意識,讓學(xué)生學(xué)會使用工程化的思想去開發(fā)軟件項目,強調(diào)了需求工程的重要作用,即一個項目的成敗關(guān)鍵在于需求工作做得好不好。所以筆者嘗試通過對“軟件需求過程”的教學(xué)工作進(jìn)行改革,使學(xué)生能夠通過本課程的學(xué)習(xí)加強對整個軟件開發(fā)流程的理解,培養(yǎng)學(xué)生的工程應(yīng)用能力,為能夠做好畢業(yè)設(shè)計乃至寫出優(yōu)秀的畢業(yè)論文提供幫助。
“軟件需求過程”課程中有很多抽象的工程理論。對于沒有實際項目開發(fā)經(jīng)驗的學(xué)生來說,學(xué)習(xí)這門課程時,首先面對的問題就是理解不了課程中的項目的前景與范圍、需求規(guī)格說明等概念,問題分析、目標(biāo)分析、業(yè)務(wù)過程分析的理論基礎(chǔ)和方法,E-R圖、用例圖、時序圖、流程圖的使用場景及繪制方法等。這些內(nèi)容對于沒有實際項目開發(fā)經(jīng)驗的學(xué)生來說,學(xué)習(xí)起來還是很困難的,造成這個問題的原因是理論與實際的脫節(jié)。
另外,本課程與其他實踐性較強的編程課相比,學(xué)生需要理解、記憶很多的模型和概念,不像諸如“C語言程序設(shè)計”“Java程序設(shè)計”這樣的編程課在學(xué)習(xí)一段時間后,學(xué)生可以獨立編寫代碼解決一些小問題,通過程序運行結(jié)果獲得一種成就感。因此,一直以來“軟件需求過程”課程很難讓學(xué)生在學(xué)習(xí)過程中得到取得成果的愉悅感,這種情況往往造成學(xué)生的學(xué)習(xí)動力不足。
學(xué)生普遍認(rèn)為畢業(yè)設(shè)計就是編寫代碼,因此,學(xué)生在完成畢業(yè)設(shè)計選題后,往往都會急于進(jìn)入編碼階段,而沒有針對所做選題遵循需求開發(fā)的方法進(jìn)行需求獲取、需求分析、需求規(guī)格說明及需求管理等步驟的工作[11-12]。在編碼過程中做到某一具體功能時再回頭進(jìn)行需求分析,就不會考慮各功能間的關(guān)聯(lián),從而造成編碼混亂、功能不完善等問題,最終使得整個系統(tǒng)無法繼續(xù)開發(fā)下去[13]。
由于前期對系統(tǒng)的需求沒有明確,在進(jìn)行系統(tǒng)設(shè)計時,學(xué)生先隨意修改功能模塊。因此,整個系統(tǒng)的功能模塊劃分凌亂、各功能模塊的層次結(jié)構(gòu)不清晰,違反軟件設(shè)計中“高內(nèi)聚,低耦合”的原則[14]。
為了解決上述畢業(yè)設(shè)計中存在的問題,筆者在講授“軟件需求過程”這個與畢業(yè)設(shè)計流程關(guān)聯(lián)密切的課程時,圍繞需求工程的基本環(huán)節(jié)展開,將設(shè)計開發(fā)某信息管理系統(tǒng)的基本環(huán)節(jié)與教學(xué)內(nèi)容各章節(jié)內(nèi)容相結(jié)合,用項目來驅(qū)動教學(xué)過程[15]。具體來說,在授課初始階段,任課教師給學(xué)生發(fā)布課題,由學(xué)生從給定的課題中選題,學(xué)生選定課題后,按照軟件工程開發(fā)流程進(jìn)行需求獲取、需求分析、系統(tǒng)設(shè)計等工作。課程教學(xué)內(nèi)容與軟件開發(fā)流程緊密貼合,學(xué)期末課程講授到系統(tǒng)測試內(nèi)容時,學(xué)生的課題也處于系統(tǒng)測試階段。最終學(xué)生會開發(fā)出一個實際的信息管理系統(tǒng),此時再讓學(xué)生根據(jù)自己開發(fā)的系統(tǒng)撰寫一個程序設(shè)計報告。這個過程能夠讓學(xué)生充分地理解軟件開發(fā)各環(huán)節(jié)之間的關(guān)系,達(dá)到培養(yǎng)學(xué)生完成高質(zhì)量的畢業(yè)設(shè)計及畢業(yè)論文的目的。
教學(xué)改革的目標(biāo)是從軟件工程的角度出發(fā)用項目來驅(qū)動教學(xué),將軟件項目開發(fā)的過程分為需求分析、系統(tǒng)分析、系統(tǒng)設(shè)計、編碼和測試階段。在各個階段中都有不同階段的產(chǎn)出:需求分析階段產(chǎn)出需求文檔,系統(tǒng)分析階段產(chǎn)出對象模型及業(yè)務(wù)流程處理模型,系統(tǒng)設(shè)計階段產(chǎn)出E-R圖、系統(tǒng)架構(gòu),編碼階段產(chǎn)出系統(tǒng)代碼,測試階段產(chǎn)出測試文檔。通過課程的學(xué)習(xí)使學(xué)生理解軟件工程各個階段之間的銜接關(guān)系,能夠根據(jù)選定的課題使用工程的方法逐步實現(xiàn)項目,在加深對知識的理解的同時能夠熟悉畢業(yè)設(shè)計的流程及要求。
在教學(xué)過程中,讓學(xué)生結(jié)合自己的選題利用需求工程方法實施需求獲取、需求分析、需求規(guī)格說明等環(huán)節(jié),通過實踐來學(xué)習(xí)課程的理論知識,能夠加深對概念、方法的理解。教學(xué)過程中,教師引導(dǎo)學(xué)生利用課程中講授的需求獲取方法實施需求獲取:首先,根據(jù)課題情況使用“問題分析”“目標(biāo)分析”“業(yè)務(wù)過程分析”等方法確定項目的前景與范圍;其次,根據(jù)項目的前景和范圍進(jìn)行涉眾分析,發(fā)現(xiàn)所有的關(guān)鍵涉眾類別,使用“先膨脹后收縮”“涉眾網(wǎng)絡(luò)”等方法識別涉眾,對識別的涉眾進(jìn)行描述、優(yōu)先級評估、風(fēng)險評估后選出涉眾代表;最后,使用“用例/場景模型”展開用戶需求獲取,具體的需求獲取方法可以使用面談法、原型法、文檔審查法等。軟件需求獲取的步驟如圖1所示。
圖1 需求獲取的步驟Fig.1 Steps of requirements elicitation
對需求獲取的結(jié)果進(jìn)行分析即為需求分析過程,教學(xué)方式與前文所述需求獲取類似。經(jīng)過需求獲取活動和需求分析活動交織處理后,軟件系統(tǒng)的涉眾與需求工程師對軟件的需求和方案達(dá)成了共識,將這些共識形成需求規(guī)格說明文檔,用于指導(dǎo)后續(xù)的軟件開發(fā)工作。
在教學(xué)過程中,授課教師選擇一個實際項目作為案例,帶領(lǐng)學(xué)生按照需求獲取、需求分析、需求規(guī)格說明等步驟寫出該項目的需求規(guī)格說明文檔。在執(zhí)行各步驟的工作后,讓學(xué)生將各步驟中涉及的不理解的概念、方法、模型等反饋給授課教師,授課教師根據(jù)學(xué)生的反饋能夠判斷出學(xué)生對知識點的掌握情況,然后指導(dǎo)下一步的教學(xué)工作,同時針對學(xué)生不理解的概念、模型或方法返回項目中去尋找答案。如此反復(fù)執(zhí)行,直到學(xué)生沒有問題為止。具體實施流程如圖2所示。
圖2 反饋式教學(xué)Fig.2 Feedback based teaching
在教學(xué)過程中,授課教師首先按照選題的相關(guān)性對學(xué)生進(jìn)行分組,每組5名學(xué)生,讓他們從學(xué)期初到學(xué)期末都針對選定的項目進(jìn)行操作??己朔绞椒蛛A段考核,同一組同學(xué)的考核成績相同,這樣做能夠激發(fā)學(xué)生的學(xué)習(xí)積極性,大家能共同努力完成項目,因為每個人都是團(tuán)隊的一員,團(tuán)隊的成績與每一名同學(xué)都相關(guān),同時也培養(yǎng)了學(xué)生的團(tuán)隊協(xié)作能力。
教師要指導(dǎo)學(xué)生遵循軟件項目開發(fā)的基本流程,將需求獲取、需求分析、需求驗證等各階段的產(chǎn)出成果形成文檔,在各步驟的收尾階段組織學(xué)生進(jìn)行答辯,由被考核的小組進(jìn)行系統(tǒng)演示、講解,授課教師和其他組的同學(xué)作為評委,對該組實施效果及問題進(jìn)行提問,根據(jù)項目完成情況和答辯表現(xiàn)進(jìn)行評分。學(xué)期末將各階段得分根據(jù)權(quán)值進(jìn)行加權(quán)平均得出最終成績。各階段成果及權(quán)值設(shè)置見表1。
表1 各階段成果及權(quán)值Table 1 Achievements and weights of each stage
對軟件工程專業(yè)來說,畢業(yè)設(shè)計要以軟件項目的設(shè)計與開發(fā)為主線,培養(yǎng)學(xué)生具備對復(fù)雜工程技術(shù)問題進(jìn)行預(yù)測與模擬的能力。通過畢業(yè)設(shè)計過程的訓(xùn)練,能有效提升學(xué)生的工程應(yīng)用能力,培養(yǎng)學(xué)生的實踐能力,有利于學(xué)生從學(xué)校向工作崗位的平穩(wěn)過渡。
致謝感謝沈陽師范大學(xué)第九批教學(xué)改革項目(JG2021-YB032)的支持。