趙 明,廖志芳,楊 柳,易 茜
(中南大學 計算機學院,湖南 長沙 410075)
軟件工程是一門實踐性極強的學科,因此在軟件工程本科及研究生教學中,如何將教學與實踐相結(jié)合增強學生的動手實踐能力是軟件工程教學一直強調(diào)的重點。案例教學作為將實踐與理論相結(jié)合的啟發(fā)式教學方法,其基本思想是教師根據(jù)教學目標、教學內(nèi)容以及教學要求,通過列舉一些當前企業(yè)或者科研工作中的具體案例,引導學生參與問題的思考、分析、討論和表達等活動,這是一種培養(yǎng)學生認識問題、分析問題和解決問題等綜合能力的行之有效的教學方法[1]。目前,案例教學法已經(jīng)成為教學方法改革的重要內(nèi)容之一,與之相對應的案例庫建設(shè)也作為案例教學法的一個核心內(nèi)容納入了課程建設(shè)的范疇。國外各大學對案例庫早有研究,哈佛大學所有的課程都采用案例教學,其商學院的學生兩年中要學習400~600個案例[2]。國內(nèi)高校在不同的課程教學上有一些案例教學,但不論是本科教學還是研究生教學,都尚未建立一套完整而規(guī)范的軟件工程課程教學案例庫。為了培養(yǎng)高質(zhì)量的軟件工程人才,急需建設(shè)一套完整的、綜合的案例庫,以推進軟件工程的課程理論與實際相結(jié)合。
根據(jù)軟件工程專碩研究生培養(yǎng)方案,從必修課(軟件工程、分布式計算、軟件設(shè)計模式、服務計算、云計算與大數(shù)據(jù))和選修課程(軟件度量與測試、數(shù)據(jù)挖掘、高級程序語言設(shè)計等)中選擇3~5門核心課程進行案例庫的建設(shè),其中包括對高級程序語言、軟件工程、軟件度量與測試、軟件設(shè)計模式以及數(shù)據(jù)挖掘等課程進行第一期案例庫的建設(shè)。
根據(jù)教育部軟件工程教指委要求,CCF將案例劃分為項目類教學案例、知識點教學案例和評測型教學案例3種類型[3]:項目類教學案例一般用于綜合實踐課程教學,案例內(nèi)容覆蓋某個實踐項目的全部流程或者部分主要階段,系統(tǒng)地分析和探討如何開展和實施軟件工程的實踐活動,內(nèi)容可以是一個來源于企業(yè)或者開源社區(qū)的較為完整的項目,其具體內(nèi)容可以是需求分析案例、測試案例、設(shè)計案例等;知識點教學案例是指輔助理論課程的某個或者某些知識點的教學,如Linux文件系統(tǒng)的講解等,以實際需求、現(xiàn)實問題切入,形象地講解和分析軟件工程相關(guān)理論知識和技術(shù),引導學生思考,啟發(fā)學生思維;評測型教學案例一般用于測試或者驗證學生對理論知識和實踐能力的掌握情況,如實驗題、案例型測試題等,可作為實踐性課程題目或服務于課程測驗、考試或者競賽。
教學案例應該遵循以下原則。
1)典型性原則。
案例在工程領(lǐng)域中具有一定代表性,能夠反映工程領(lǐng)域的理論知識和關(guān)鍵問題。
2)規(guī)范性原則。
項目案例庫中的項目擁有軟件開發(fā)過程的規(guī)范化設(shè)計文檔模板,對學生進行規(guī)范化軟件開發(fā)過程訓練具有示范作用,能夠提高學生的軟件工程專業(yè)素質(zhì)。
3)關(guān)聯(lián)性原則。
案例內(nèi)容應該緊密結(jié)合軟件工程領(lǐng)域中的相關(guān)理論和方法,針對教學內(nèi)容中的重點、難點以及教學要求,讓學生在案例學習中有效理解知識點以及知識點之間的關(guān)聯(lián)性,使學生建立一套完整且全面的邏輯思維方法。
4)實用性原則。
該項目案例庫不僅可以讓學生得到實際開發(fā)項目的真實體驗,還可以使學生進一步熟悉軟件項目的開發(fā)流程,掌握開發(fā)方法和文檔管理技能。
5)啟發(fā)性原則。
案例的選擇和內(nèi)容應該具有一定的創(chuàng)新性,能夠代表工程領(lǐng)域的理論和實踐前沿,能夠給學生提供思考的空間,鍛煉學生解決問題的能力。
教學案例的設(shè)計主要從案例名稱與概述、案例教學目標、案例準備、案例教學要點、案例教學組織方式以及開放性問題幾個方面進行考慮。
知識點案例以“軟件度量與測試”課程中“McCabe圈復雜度的案例”進行說明。McCabe圈 復 雜 度(Cyclomatic complexity)是1976年Thomas J.McCabe[4]提出的用控制流圖的圈數(shù)來測量程序復雜性的方法??刂屏鲌D是McCabe復雜度計算的基礎(chǔ),它是將軟件的程序流程圖轉(zhuǎn)化為有向圖,然后以圖論的知識與方法來衡量程序控制結(jié)構(gòu)的復雜性。下面詳細說明案例設(shè)計內(nèi)容。
1)案例概述。
本案例將McCabe圈復雜度應用于對軟件的詳細設(shè)計度量與程序代碼度量中,利用案例指導學生基于控制流圖計算圈復雜度和基于程序代碼計算圈復雜度,同時幫助學生理解圈復雜度在軟件開發(fā)周期中的重要意義。
通過該教學案例,一方面引導學生在進行程序設(shè)計與編碼時,一定要特別注意條件語句與循環(huán)語句;另一方面,讓學生理解圈復雜度的計算與控制對提高軟件的整體質(zhì)量、減少程序錯誤,對提高程序的可理解性、可維護性以及減少程序的測試與維護工作量具有重要的意義。
2)案例教學要點。
主要包含3點:①圈復雜度的作用;②圈復雜度的度量方法的優(yōu)缺點;③圈復雜度度量結(jié)果的指導意義。
3)案例說明。
(1)McCabe圈復雜度計算方法有3種。
第一種是直接通過控制流圖的區(qū)域數(shù)進行計算,其公式為
其中,R代表平面被控制流圖劃分成的區(qū)域數(shù)(圈數(shù))。
圈復雜度等于強連通圖中連成圈的最大個數(shù)。因為代表程序中“開始”與“結(jié)束”的“開始”節(jié)點與“結(jié)束”節(jié)點是不連通的,也就是控制流圖一般不是強連通圖,因此我們需要從“結(jié)束”節(jié)點連一根線到“開始”節(jié)點,這樣形成一個強連通圖后再來數(shù)圖中的圈數(shù)。
第二種是通過控制流圖中的節(jié)點與邊數(shù)量進行計算,其公式為
其中,e為圖中邊數(shù);n為圖中節(jié)點數(shù);p為圖中不連通的部分,通常為1。
在圖1控制流圖中,e=6,n=9,p=1,V(G)=9-6+2×1=5。
圖1 控制圖示例
第三種是通過控制流圖中判定節(jié)點的數(shù)量來計算,其公式為
這里,判定節(jié)點也就是代表程序流程圖中菱形框,在程序語句中用判定語句來描述。
所以,這種方法我們還可以延伸到計算程序流程圖中的菱形框數(shù)量,程序圈復雜度就等于程序流程圖中菱形框數(shù)量加1,也可以延伸到計算程序語句中的判定語句數(shù)量,程序圈復雜度就等于程序中判定語句數(shù)量加1。
(2)實驗案例說明。McCabe圈復雜度案例相關(guān)的實驗,分為2個實驗內(nèi)容。第1個實驗內(nèi)容是基于控制流圖的圈復雜度計算,主要針對圈復雜度度量方法中的第1種方法和第2種方法;第2個實驗內(nèi)容是基于程序代碼的圈復雜度計算,主要針對圈復雜度度量方法中的第3種方法。
基于控制流圖的圈復雜度計算。要求學生設(shè)計基于控制流圖的圈復雜度的計算算法,利用軟件開發(fā)周期詳細設(shè)計階段的程序流程圖或者控制流圖來計算圈復雜度,將程序流程圖或者控制流圖作為輸入。學生可以先將圖轉(zhuǎn)化為XML,再設(shè)計算法來實現(xiàn),也可以利用Java的AST(Abstract Syntax Tree)相關(guān)方法來實現(xiàn)。
基于程序代碼的圈復雜度計算。要求學生設(shè)計基于程序代碼的圈復雜度的計算算法,利用Complexity Evaluator工具對開源平臺典型的開源項目進行圈復雜度計算,一方面橫向進行圈復雜度的評估,可選擇2個規(guī)模與功能相近的開源項目進行比較;另一方面縱向進行圈復雜度評估,選擇1個開源項目的不同版本進行比較。通過圈復雜度的計算,學生可以進一步理解圈復雜度的意義。
項目案例以“數(shù)據(jù)挖掘”課程中“眾包平臺中工人質(zhì)量分析”進行說明。眾包( Crowdsourcing),是一種公開面向互聯(lián)網(wǎng)大眾的分布式的問題解決機制,在2006年由Jeff Howe首次提出,通過整合互聯(lián)網(wǎng)或社交網(wǎng)絡(luò)中未知的大眾來完成計算機單獨難以完成的任務[4]。眾包的主要參與者包括任務請求人(requester)和任務完成人(worker),任務請求人進行任務發(fā)布,任務完成人進行任務的完成。為完成該案例,需要完成數(shù)據(jù)采集(以topcoder平臺進行數(shù)據(jù)采集)、數(shù)據(jù)預處理(去除噪聲數(shù)據(jù)以及無用數(shù)據(jù))、數(shù)據(jù)分析以及結(jié)果展示等幾部分內(nèi)容,形成一個完整的眾包分析項目。下面詳細說明案例設(shè)計內(nèi)容。
1)案例概述。
本案例將眾包應用于對社交網(wǎng)絡(luò)中用戶屬性與用戶行為的分析中,通過使用社交網(wǎng)絡(luò)中用戶的脫敏數(shù)據(jù),并采用不同的算法對用戶的回答、評價進行匯聚分析,得出了用戶群體對于社交網(wǎng)絡(luò)中某一行為的情感趨勢。隨后,根據(jù)匯聚結(jié)果,采用劃分聚類和K-Means聚類對用戶進行群體劃分,分析眾包系統(tǒng)中人員的質(zhì)量屬性及社區(qū)行為特征,對社交網(wǎng)絡(luò)中的行為分析、社區(qū)發(fā)現(xiàn)具有重要的指導意義。
通過案例教學,希望讓學生對社交網(wǎng)絡(luò)中標簽聚合和用戶質(zhì)量分析、社區(qū)行為產(chǎn)生感性認識,真正意識到社交網(wǎng)絡(luò)中眾包分析能帶來什么好處。
2)案例教學要點。
教學要點主要涉及社交網(wǎng)絡(luò)中眾包分析的作用,眾包中結(jié)果匯聚的分析方法,以及眾包環(huán)境中用戶質(zhì)量分析和社區(qū)發(fā)現(xiàn)的現(xiàn)實意義。
3)案例詳細說明。
(1)工人(任務完成人)的概況分析。眾包任務質(zhì)量受到工人的能力和質(zhì)量影響。工人的質(zhì)量可以由工人的聲譽和專業(yè)知識描述[5]。工人的聲譽分數(shù)主要由社區(qū)成員對工人在系統(tǒng)中做出貢獻建立。工人的專業(yè)知識表明了他完成特定任務的能力。專業(yè)知識主要有兩個指標:憑證和經(jīng)驗。憑證是用來評估工人完成特定眾包任務的能力的文件或證據(jù),如學位證書或技能證書。經(jīng)驗是指工人在平臺上完成任務所獲得的知識和技能。聲譽和專業(yè)知識是相互關(guān)聯(lián)的:一個專業(yè)知識高的工人也會有很高的聲譽。將它們區(qū)分是因為聲譽在本質(zhì)上更普遍。除了工人的專業(yè)知識反映了他們貢獻的質(zhì)量,還可以根據(jù)其他幾個參數(shù)計算聲譽,比如工人的及時性或者評估人員(evaluators)的質(zhì)量。另外,聲譽是一個公共的和社區(qū)范圍的度量指標,但是專業(yè)知識是依賴于任務(task-dependent)的。例如,一個有著高聲譽分數(shù)的Java專家可能不適合承擔SQL相關(guān)的任務。
(2)工人的質(zhì)量評估方法:①使用黃金標準數(shù)據(jù)(Golden standard data)評估工作者完成的質(zhì)量,黃金標準數(shù)據(jù)是指擁有標準答案的一類數(shù)據(jù),通過將工人提交的結(jié)果與標準答案的比較可以檢測出那些欺騙類型的工人;②多數(shù)決策(Majority Decision,MD)方法[6],將任務分配給多個工人,大多數(shù)工人支持的任務結(jié)果被認為是正確結(jié)果;③控制組(Control Group,GC)方法[7],成立一個控制組,對已完成的工人進行重復檢查,監(jiān)督工人的任務完成情況;④聲譽評估方法,在眾包平臺中通過工人的正確率對工人的等級進行劃分,如果是惡意工人可以直接拉入黑名單。
(3)實驗案例:①要求學生設(shè)計爬蟲軟件進行topcoder中工人數(shù)據(jù)的采集,通過數(shù)據(jù)預處理得出案例實驗所必需的數(shù)據(jù);②利用聚類分析方法對工人數(shù)據(jù)進行類別分析,對工人偏好特征進行分析;③設(shè)計算法對工人完成任務質(zhì)量進行分析。案例流程如圖2所示。
圖2 工人質(zhì)量分析流程
案例教學的實施主要集中在軟件學院2017—2018級研究生相關(guān)課程的教學中。以“數(shù)據(jù)挖掘”課程為例,整個教學過程涉及4個案例,包括關(guān)聯(lián)規(guī)則知識點案例、聚類分析知識點案例、決策樹算法知識點案例以及眾包工人質(zhì)量項目案例,案例內(nèi)容由淺到深,最后一個案例涵蓋數(shù)據(jù)處理、關(guān)聯(lián)性分析、聚類分析以及分類分析等多個知識點。通過將傳統(tǒng)的課程授課方式轉(zhuǎn)換為案例教學方式,在教學中構(gòu)建具體問題場景并提出具體解決方法,加深學生對課程內(nèi)容的理解,提高學生綜合運用課程內(nèi)容的能力。
通過調(diào)查和統(tǒng)計分析,軟件學院軟件工程2017—2018級研究生有80%以上的學生認為自己的學習效率得到了提升(見表1)。同時,我們對2017—2018級研究生學生調(diào)研了在實行案例教學方式后,學生的綜合運用課程內(nèi)容的能力是否得到提升(見表2),2017級206位學生中有183人認為自己的能力得到了提升,2018級68位學生中也有61人認為案例教學對自己的能力提升是有作用的,所以大部分的同學認為通過案例教學自己的能力得到了提升。因此本案例教學的實施的確證明了自身的可行性并在教學中取得了極好的效果,對學生加深課程理解和提高綜合運用課程內(nèi)容的能力有極大的促進作用。
表1 學生學習效率影響結(jié)果統(tǒng)計表
表2 綜合能力提升調(diào)研表
針對目前國內(nèi)軟件工程課程教學中存在實踐與理論部分脫節(jié)的問題,筆者提出軟件工程核心課程案例庫的建設(shè)方法以及案例教學的實踐,通過選擇典型課程、分析案例類型以及確定案例原則,以新工科教育思想為指導,根據(jù)軟件工程發(fā)展的特點,結(jié)合國內(nèi)外科研和教學成果,不斷更新和完善教學內(nèi)容,加強軟件工程核心課程教學案例建設(shè),并開展案例教學方法的研究與實踐,提高學生應用軟件工程相關(guān)知識解決實際問題的綜合能力。實踐結(jié)果表明,案例教學的方式對促進教學工作、提高教學質(zhì)量、培養(yǎng)國際創(chuàng)新型人才具有重要意義。