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