姚紅巖 馬云吉
摘 要:以“卓越軟件工程師教育培養(yǎng)計(jì)劃”為背景,分析軟件工程在專業(yè)中的位置和意義。對(duì)軟件工程教學(xué)中存在的問題進(jìn)行了深入探討,提出了一種軟件工程教學(xué)策略,指出提升教學(xué)效果和教學(xué)質(zhì)量的實(shí)踐改革思路。
關(guān)鍵詞:軟件工程;工程能力;案例教學(xué)
中圖分類號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:A
Abstract:Taking the educational program for outstanding software engineering as a background,we briefly analyze the course of software engineering with respect to its position in the whole curricula system, and then explore an issue taking place in the teaching practice.A strategy for improving the teaching effect is proposed after the analysis.Our practice indicates the strategy is helpful to the students for highlighting the understanding of software design.
Keywords:software engineering;engineering ability;case study
1 引言(Introduction)
“卓越工程師教育培養(yǎng)計(jì)劃”是教育部于2010年6月啟動(dòng)的為期10年(2010—2020年)的重大改革項(xiàng)目。該項(xiàng)目旨在全面提高我國工程人才培養(yǎng)質(zhì)量,對(duì)于計(jì)算機(jī)專業(yè)則是要求其以新的教學(xué)改革嘗試,培養(yǎng)具有高工程素質(zhì)的卓越軟件工程師。筆者以這一計(jì)劃為大背景,圍繞軟件工程專業(yè)課教學(xué),深入探討該門課程的性質(zhì)及課堂教學(xué)策略,以期能夠引導(dǎo)學(xué)生通過學(xué)好軟件工程,成為一名卓越的軟件工程師。
2 軟件工程教學(xué)中存在的問題及分析(The analysis for issues taking place in teaching software engineering)
軟件工程是核心專業(yè)課[1,2]。該門課程能將先前學(xué)習(xí)的程序語言,面向?qū)ο笏枷耄惴ㄔO(shè)計(jì)與分析,網(wǎng)絡(luò)原理,數(shù)據(jù)庫建模,開發(fā)工具等綜合地融合到一起,在設(shè)計(jì)層面使之成為一個(gè)整體的工程方案,解決需求分析中的領(lǐng)域問題。作為軟件工程專業(yè)的學(xué)生,應(yīng)當(dāng)通過學(xué)習(xí)軟件工程這門課程,綜合地領(lǐng)會(huì)各種基礎(chǔ)課程在軟件建模中的具體應(yīng)用,并通過分析和設(shè)計(jì)案例,體會(huì)現(xiàn)實(shí)需求與抽象設(shè)計(jì)的轉(zhuǎn)換之美,為將來成為一名軟件工程師打好基礎(chǔ)。然而受教學(xué)資源、課時(shí)以及學(xué)生自身?xiàng)l件等諸多因素限制,在實(shí)際教學(xué)過程中,學(xué)生更傾向于較快地進(jìn)入編程階段,而對(duì)早期的分析設(shè)計(jì)階段認(rèn)識(shí)不足。由于軟件工程專業(yè)的學(xué)生,在長遠(yuǎn)規(guī)劃上,應(yīng)被培養(yǎng)成為軟件設(shè)計(jì)人員或軟件工程師,而不應(yīng)是專職編碼人員,因此對(duì)于教學(xué)期間出現(xiàn)的這種現(xiàn)象:易傾向編程而非重點(diǎn)優(yōu)化設(shè)計(jì),應(yīng)當(dāng)給予重視并在授課策略上作調(diào)整。筆者認(rèn)為出現(xiàn)這種現(xiàn)象的原因可歸結(jié)為:
(1)預(yù)修的課程較多強(qiáng)調(diào)編程,較少關(guān)注設(shè)計(jì),導(dǎo)致一種慣性思維——跳過設(shè)計(jì)直接編程。如C++語言,授課時(shí)更多的是講解如何編寫一個(gè)類型、構(gòu)造函數(shù)的編寫規(guī)則,以及繼承、重載、多態(tài)等編寫規(guī)則和運(yùn)行原理,而較少用標(biāo)準(zhǔn)制圖的方式描述類型的設(shè)計(jì)以及類型間的邏輯關(guān)聯(lián)。
(2)不是所有的預(yù)修課程學(xué)生都能透徹領(lǐng)會(huì),依據(jù)“短板原理”,未領(lǐng)會(huì)的理論將使學(xué)生在設(shè)計(jì)階段卡殼,想不出哪些理論方法可使設(shè)計(jì)進(jìn)行下去,導(dǎo)致學(xué)生設(shè)計(jì)熱情銳減。例如學(xué)生對(duì)網(wǎng)絡(luò)原理理解不深,將影響數(shù)據(jù)傳輸協(xié)議的選用。
(3)從需求分析中抽象必要的設(shè)計(jì)詞匯,并將這些詞匯通過繪圖、編檔以展現(xiàn)業(yè)務(wù)邏輯,是一種必要的設(shè)計(jì)能力。然而,這種能力對(duì)于工科學(xué)生而言較為薄弱。部分學(xué)生詞匯貧乏,導(dǎo)致設(shè)計(jì)時(shí)的邏輯、時(shí)序關(guān)系不清晰,給接下來的設(shè)計(jì)帶來不便,從而失去設(shè)計(jì)的樂趣。如從需求中抽取動(dòng)賓短語繪制業(yè)務(wù)流程圖,部分學(xué)生對(duì)詞性把握不當(dāng)或選詞不妥,使得詞匯在語義上有重疊,直接導(dǎo)致制圖過程不順暢,而這會(huì)為后續(xù)設(shè)計(jì),如從動(dòng)賓短語映射功能類型帶來麻煩。
(4)案例規(guī)模較小,學(xué)生在頭腦中簡(jiǎn)要構(gòu)思即可編程實(shí)現(xiàn)。案例規(guī)模小,學(xué)生不能通過案例感受設(shè)計(jì)的重要性,往往是先編程后補(bǔ)文檔。這直接導(dǎo)致一個(gè)后果,一旦需求變動(dòng),整個(gè)程序和文檔幾乎要重做:這不是軟件工程的初衷。反之,一個(gè)規(guī)模較大、層次分明且兼具擴(kuò)展性的設(shè)計(jì)對(duì)于開發(fā)軟件的成敗是決定性的,通過觀摩此類軟件設(shè)計(jì),能使學(xué)生感受到設(shè)計(jì)給編程帶來的便利。
(5)缺乏使用開發(fā)工具的經(jīng)驗(yàn),不能很好地在設(shè)計(jì)概念和編程概念之間進(jìn)行映射。比如選用在.Net框架下開發(fā)軟件,由于學(xué)生不具有一定的使用經(jīng)驗(yàn),想不出設(shè)計(jì)在轉(zhuǎn)為具體編碼時(shí)可能面臨的問題,甚至對(duì)于設(shè)計(jì)能否編程為可用的軟件都缺乏信心。盡管有觀點(diǎn)認(rèn)為做設(shè)計(jì)時(shí)不要陷入技術(shù)細(xì)節(jié),筆者也同意這一說法,但對(duì)一個(gè)技術(shù)經(jīng)驗(yàn)不足的學(xué)生片面強(qiáng)調(diào)設(shè)計(jì)只會(huì)使學(xué)生認(rèn)為軟件工程課程虛飄,落不到實(shí)處。相反的,一旦學(xué)生有開發(fā)工具的使用經(jīng)驗(yàn),那么設(shè)計(jì)和編程會(huì)在學(xué)生頭腦里往復(fù)映射,使學(xué)生心理上有掌控感,因此即便設(shè)計(jì)上出現(xiàn)問題,學(xué)生也極有可能自行尋找辦法修正。
3 軟件工程教學(xué)策略探討(The discussion for software engineering teaching)
基于前一部分的討論,筆者認(rèn)為軟件工程在教學(xué)策略上要強(qiáng)調(diào)三個(gè)方面:
(1)設(shè)計(jì)與代碼的轉(zhuǎn)換方式。即在為軟件建模時(shí),挑選典型的圖例為學(xué)生展示相應(yīng)的代碼轉(zhuǎn)換,體現(xiàn)編程與設(shè)計(jì)是相輔相成的。
(2)選取規(guī)模適中的案例并結(jié)合軟件工程的設(shè)計(jì)元素,強(qiáng)調(diào)建模時(shí)準(zhǔn)確抽取詞匯的重要性。軟件工程涉及的編檔和制圖在本質(zhì)上都是詞匯,準(zhǔn)確的抽取詞匯能使得文檔和圖紙?jiān)谡w上層次分明,歸屬明確,在各自的具體表達(dá)上也能邏輯合理,時(shí)序清晰。endprint
(3)使用工具為軟件模型映射實(shí)現(xiàn)框架。通過映射框架并作講解,能使學(xué)生掌握軟件的基本建制方法,還能刺激學(xué)生學(xué)習(xí)使用建模或編程工具的熱情,使得進(jìn)一步編碼以完善軟件成為可能。
為了在講授軟件工程時(shí)強(qiáng)調(diào)這三方面,筆者在實(shí)際教學(xué)期間形成以下策略:
(1)結(jié)合真實(shí)企業(yè)案例,主體講解抽取詞匯,制圖和編檔。重點(diǎn)講解詞匯的層次性,以及詞匯與制圖、文檔的關(guān)聯(lián)。
(2)選取代表性制圖,實(shí)際演示如何轉(zhuǎn)化為必要的函數(shù)并進(jìn)行初步的類型封裝。重點(diǎn)體現(xiàn)于函數(shù)名稱和類型名稱上,只要能體現(xiàn)制圖邏輯即可,不需給出函數(shù)或類型的具體實(shí)現(xiàn)。
(3)參照較為完整的軟件模型,演示如何配置主干對(duì)象以形成可運(yùn)行框架。重點(diǎn)講解相關(guān)設(shè)計(jì)元素與可運(yùn)行框架的對(duì)應(yīng)關(guān)系。
4 軟件工程教學(xué)策略的實(shí)踐效果(The practices of our software engineering teaching strategy)
為了實(shí)施前文提出的軟件工程教學(xué)策略,筆者所在單位深入企業(yè)調(diào)研,與企業(yè)合作,主要目的有三個(gè):其一,獲取企業(yè)在用人方面的實(shí)際需求,如希望畢業(yè)生能重點(diǎn)學(xué)習(xí)哪些語言、平臺(tái);其二,邀請(qǐng)企業(yè)提供建議,定制專業(yè)課程,如與Oracle合作共建專業(yè)體系;其三,由企業(yè)提供真實(shí)案例供教學(xué)使用。這些目標(biāo)都與2013年ICSE(International Conference for Software Engineering)大會(huì)中給出的調(diào)研結(jié)果不謀而合[3,4]:一定程度上說明,軟件工程的教學(xué)是離不開企業(yè)案例的。應(yīng)用本文教學(xué)策略的結(jié)果是令人鼓舞的,主要表現(xiàn)為:
(1)學(xué)生通過觀摩整個(gè)案例的設(shè)計(jì)文檔,并參照關(guān)于編檔和制圖的講解,能夠理解案例的設(shè)計(jì)邏輯,對(duì)于制圖時(shí)用到的標(biāo)準(zhǔn)圖形元素能夠自然的接受并記憶。再加上課堂上對(duì)個(gè)別典型制圖如活動(dòng)圖、時(shí)序圖做編碼上的映射,學(xué)生能更好地體會(huì)圖紙與編碼之間的轉(zhuǎn)換方式,增強(qiáng)了學(xué)生編制軟件的信心。
(2)以練習(xí)題的形式要求學(xué)生重新手繪當(dāng)堂指定的圖紙,以加深記憶有關(guān)制圖。只是觀摩、參看,不足以掌握和消化必要的制圖方法,往往是“提筆忘字”,知識(shí)點(diǎn)認(rèn)識(shí)模糊。只有要求學(xué)生再現(xiàn)圖紙,真正落實(shí)到紙面上,才能有助于細(xì)節(jié)的把握,也能促使學(xué)生重新審視整個(gè)圖紙的邏輯關(guān)系,以此鞏固加深記憶。實(shí)際教學(xué)效果良好,學(xué)生能自主地討論并基本再現(xiàn)指定制圖,同時(shí),能夠認(rèn)識(shí)到良好、標(biāo)準(zhǔn)的制圖對(duì)軟件建模的作用,不再認(rèn)為軟件工程是空洞無物的理論。
(3)通過參考制圖及演示圖紙如何轉(zhuǎn)變?yōu)榭蛇\(yùn)行框架,不僅提高了學(xué)習(xí)軟件工程的興趣,同時(shí)也帶動(dòng)了學(xué)好工具軟件的積極性。在學(xué)生基本理解和記憶了必要制圖之后,我們實(shí)際演示并建立了軟件的可運(yùn)行框架,如以.NET為平臺(tái),使用Visual Studio工具建立配置文件并初始化必要的主干對(duì)象,使整個(gè)程序框架能夠運(yùn)行[5]。通過這種方式,學(xué)生能夠感受到軟件的基本制作步驟,并對(duì)學(xué)習(xí)必要的工具和完善其余的軟件代碼產(chǎn)生了極大的興趣。
(4)學(xué)生自組討論軟件設(shè)計(jì)文檔并能提出編碼時(shí)可能碰到的問題。基于可運(yùn)行框架的演示,學(xué)生能主動(dòng)地參照設(shè)計(jì)文檔在頭腦中構(gòu)建軟件模塊,對(duì)于構(gòu)建時(shí)可能有問題的地方,能主動(dòng)地先行自組討論,再與教師提問確認(rèn)。有時(shí)盡管限于認(rèn)識(shí)不足,教師的解答學(xué)生不能完全理解,但學(xué)生仍能清楚地知道問題出在哪里,以及需要補(bǔ)充哪些知識(shí)點(diǎn)。
5 結(jié)語(Conclusion)
本文對(duì)軟件工程教學(xué)當(dāng)中存在的問題以及成因進(jìn)行了探討,繼而給出了一種軟件工程教學(xué)策略。該策略強(qiáng)調(diào)軟件工程的課程重點(diǎn)是理解和掌握有關(guān)的建模理論,而不是要求學(xué)生掌握建立軟件的所有方面。在軟件工程的課堂上重點(diǎn)仍應(yīng)是設(shè)計(jì),而不是編程。筆者不否認(rèn)編程經(jīng)驗(yàn)對(duì)良好設(shè)計(jì)的支撐作用,但能理解標(biāo)準(zhǔn)的軟件工程理論并能掌握運(yùn)行框架的建立方式,對(duì)于軟件工程的課程教學(xué)而言已足夠。至于具體的完善工程的實(shí)踐經(jīng)驗(yàn),則有待于在卓越工程師的職業(yè)生涯中繼續(xù)實(shí)踐、完善。
參考文獻(xiàn)(References)
[1] 蒲保興.軟件工程課程教學(xué)改革與實(shí)踐探索[J].軟件,2011(5):114-115.
[2] 荀啟峰.應(yīng)用型卓越軟件工程師培養(yǎng)模式探討[J].軟件工程師,2014(2):42-43.
[3] Chris J. Pilgrim.Industry Involvement in ICT Curriculum:A Comparative Survey[C].2013 ICSE,Advanced Software Engineering Education,1148-1153.
[4] Andrew Meneely.Samuel Lucidi: Vulnerability of the day:concrete demonstrations for software engineering undergraduates[C].2013 ICSE,Advanced Software Engineering Education,1154-1157.
[5] Donis Marshall.我們?cè)谖④浽鯓娱_發(fā)軟件(第1版)[M].北京:人民郵電出版社,2009.
作者簡(jiǎn)介:
姚紅巖(1979-),男,博士,講師.研究領(lǐng)域:軟件工程.
馬云吉(1978-),男,博士,副教授.研究領(lǐng)域:軟件工程.endprint