章宗長(zhǎng),王藝深
(蘇州大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,江蘇 蘇州 215006)
人類社會(huì)正在邁入智能時(shí)代,企業(yè)對(duì)軟件人才的要求越來(lái)越高。一些著名的互聯(lián)網(wǎng)公司,如騰訊、網(wǎng)易、阿里等,要求業(yè)務(wù)項(xiàng)目不僅能滿足各類人群的使用需求,還能在不同設(shè)備上穩(wěn)定運(yùn)行。這樣的業(yè)務(wù)屬性需要軟件人才不僅擁有出色的編程能力,還要精通可行性研究、需求分析、軟件項(xiàng)目管理等軟件工程理論。如何培養(yǎng)出企業(yè)滿意的軟件人才是當(dāng)前軟件工程課程改革亟待解決的重要課題。
目前,已有不少關(guān)于軟件工程課程改革的方案:文獻(xiàn)[1]提出基于“自主學(xué)習(xí)任務(wù)單”的軟件工程課程改革;文獻(xiàn)[2]提出以設(shè)計(jì)型項(xiàng)目為驅(qū)動(dòng)的軟件工程課程改革;文獻(xiàn)[3]提出以企業(yè)項(xiàng)目驅(qū)動(dòng)的軟件工程課程改革;文獻(xiàn)[4]提出基于開(kāi)放模式的軟件工程課程改革。這些改革方案都取得了一定的效果,但是仍然存在一定的問(wèn)題:沒(méi)有討論開(kāi)源項(xiàng)目對(duì)計(jì)算機(jī)技術(shù)發(fā)展的促進(jìn)作用。事實(shí)上,使用開(kāi)源工具進(jìn)行團(tuán)隊(duì)協(xié)作已成為軟件開(kāi)發(fā)的主流。
以開(kāi)源項(xiàng)目為驅(qū)動(dòng)的軟件工程課程,不僅考慮了學(xué)生現(xiàn)有的知識(shí)水平,還著眼于企業(yè)對(duì)軟件人才的要求,特點(diǎn)是從開(kāi)源項(xiàng)目入手,以現(xiàn)代企業(yè)的軟件開(kāi)發(fā)流程為標(biāo)準(zhǔn),通過(guò)團(tuán)隊(duì)合作的方式,在云服務(wù)平臺(tái)上搭建開(kāi)發(fā)環(huán)境,培養(yǎng)學(xué)生的編程、溝通和自學(xué)能力。
軟件工程一直是計(jì)算機(jī)及其他相關(guān)學(xué)科的核心,在培養(yǎng)高素質(zhì)軟件人才方面發(fā)揮重要的作用。但是,目前軟件工程的課程設(shè)置存在一些不容忽視的問(wèn)題。
許多學(xué)生把軟件工程視為一門死記硬背的學(xué)科,并不理解軟件工程理論在項(xiàng)目開(kāi)發(fā)中發(fā)揮的重要作用。筆者發(fā)現(xiàn),許多學(xué)生即使學(xué)習(xí)了相關(guān)的軟件工程規(guī)范,但并未在項(xiàng)目實(shí)踐中去遵循。此外,課程設(shè)置同質(zhì)化嚴(yán)重,難以激發(fā)學(xué)生的學(xué)習(xí)興趣,導(dǎo)致普遍存在抄襲的現(xiàn)象。
現(xiàn)代的企業(yè)項(xiàng)目規(guī)模大、結(jié)構(gòu)復(fù)雜,往往需要十幾人乃至上百人共同開(kāi)發(fā)?;谠破脚_(tái)、使用版本控制軟件的團(tuán)隊(duì)協(xié)作已成為當(dāng)今企業(yè)生產(chǎn)開(kāi)發(fā)的主流模式。然而,筆者在教學(xué)中發(fā)現(xiàn),目前的課程內(nèi)容依然是圍繞單人獨(dú)立完成的項(xiàng)目展開(kāi),忽視了多人協(xié)作在項(xiàng)目開(kāi)發(fā)中的重要地位。
互聯(lián)網(wǎng)企業(yè)無(wú)不投入大量的人力物力發(fā)展人工智能、區(qū)塊鏈、物聯(lián)網(wǎng)等新業(yè)務(wù),而當(dāng)前課程設(shè)置的實(shí)踐項(xiàng)目往往是基于Windows平臺(tái)開(kāi)發(fā),以數(shù)據(jù)管理系統(tǒng)設(shè)計(jì)、個(gè)人網(wǎng)站的搭建為主,這與目前基于Web、多平臺(tái)部署的應(yīng)用開(kāi)發(fā)相悖,脫離了當(dāng)前企業(yè)的實(shí)際需求。
課程實(shí)踐項(xiàng)目的設(shè)置必須考慮學(xué)生的已有知識(shí)水平、當(dāng)前科技熱點(diǎn)以及學(xué)生興趣愛(ài)好。課程實(shí)踐項(xiàng)目如果設(shè)置的過(guò)于簡(jiǎn)單,則會(huì)導(dǎo)致學(xué)生的工作量太少,學(xué)生難以真正理解書(shū)本的知識(shí);如果設(shè)置的過(guò)于復(fù)雜,則會(huì)嚴(yán)重打擊學(xué)生的學(xué)習(xí)積極性,難以達(dá)到讓學(xué)生在實(shí)踐中運(yùn)用已學(xué)知識(shí)的目的。因此,課程實(shí)踐項(xiàng)目的設(shè)置必須遵循難度適中、循序漸進(jìn)的原則。
開(kāi)源項(xiàng)目數(shù)目龐大、類型繁多,學(xué)生可以根據(jù)自己的興趣愛(ài)好選擇適合自己的開(kāi)源項(xiàng)目,并和志同道合的同學(xué)一起開(kāi)發(fā)。這可以激發(fā)學(xué)生的學(xué)習(xí)興趣,調(diào)動(dòng)其學(xué)習(xí)積極性,促使學(xué)生主動(dòng)學(xué)習(xí)當(dāng)下熱門的技術(shù),提高自主學(xué)習(xí)能力。此外,開(kāi)源項(xiàng)目一般有著良好的社區(qū)支持。如果學(xué)生在開(kāi)發(fā)過(guò)程中遇到自己無(wú)法解決的編程問(wèn)題,可以在社區(qū)找到解決方案,大大降低課程實(shí)踐項(xiàng)目的難度。
筆者以中英文翻譯系統(tǒng)為例,闡述如何實(shí)施基于開(kāi)源項(xiàng)目的課程改革,培養(yǎng)出企業(yè)滿意的高素質(zhì)軟件人才。
由于學(xué)生此時(shí)對(duì)軟件工程還不了解,因此教師在該階段應(yīng)以書(shū)本內(nèi)容為主。與此同時(shí),教師應(yīng)該鼓勵(lì)學(xué)生自己制訂學(xué)習(xí)方案,培養(yǎng)學(xué)生的自主學(xué)習(xí)能力。以中英文翻譯系統(tǒng)為例,教師除了向?qū)W生介紹如何進(jìn)行可行性研究、如何撰寫(xiě)需求分析、如何完善詳細(xì)設(shè)計(jì)等軟件工程方法外,還可以要求學(xué)生充分利用開(kāi)放網(wǎng)絡(luò)課堂、個(gè)人博客、問(wèn)答社區(qū)等優(yōu)質(zhì)網(wǎng)絡(luò)資源,自主學(xué)習(xí)當(dāng)前流行的開(kāi)發(fā)技術(shù)。教師可以要求學(xué)生每周撰寫(xiě)1篇學(xué)習(xí)筆記并發(fā)送其郵箱,以方便掌握學(xué)生的學(xué)習(xí)進(jìn)度。教師還可以向?qū)W有余力的學(xué)生推薦軟件工程經(jīng)典書(shū)籍作為擴(kuò)展閱讀,從而提高學(xué)生的知識(shí)水平。通過(guò)這種教學(xué)方式,筆者發(fā)現(xiàn)多數(shù)學(xué)生都能對(duì)軟件工程這門課程有較為深入的了解,并能掌握Linux、Python、Git等開(kāi)源軟件的基本用法。
在學(xué)生掌握基本開(kāi)發(fā)工具的用法和了解軟件工程理論后,教師就可以選擇幾個(gè)開(kāi)源項(xiàng)目讓學(xué)生按照自己的興趣愛(ài)好去選擇。教師可以把選擇同一個(gè)項(xiàng)目的學(xué)生劃分為1個(gè)小組。一般1個(gè)小組會(huì)有5~6個(gè)人,教師可以指派1名溝通能力較強(qiáng)的學(xué)生擔(dān)任組長(zhǎng),并讓組長(zhǎng)安排組員的分工。劃分完小組并選出組長(zhǎng)后,教師就可以帶領(lǐng)學(xué)生按照軟件工程理論對(duì)項(xiàng)目進(jìn)行分析,包括撰寫(xiě)可行性報(bào)告、進(jìn)行總體設(shè)計(jì)、完善詳細(xì)設(shè)計(jì)等。以中英文翻譯系統(tǒng)的開(kāi)發(fā)為例,教師可以要求每個(gè)小組定期報(bào)告項(xiàng)目進(jìn)展,并通過(guò)PPT等方式匯報(bào)當(dāng)前工作。在該階段,筆者發(fā)現(xiàn)雖然大部分學(xué)生已經(jīng)學(xué)習(xí)過(guò)軟件工程理論,但是仍然難以寫(xiě)出符合要求的可行性報(bào)告和設(shè)計(jì)文檔。只有經(jīng)過(guò)教師的多次指導(dǎo)和修改后,學(xué)生才真正明白這些軟件工程理論在實(shí)際項(xiàng)目中是如何應(yīng)用的。
由于從無(wú)到有構(gòu)建一個(gè)中英文翻譯引擎耗費(fèi)巨大,所以本項(xiàng)目推薦基于公開(kāi)的翻譯引擎做二次開(kāi)發(fā)。為了保證翻譯的質(zhì)量,項(xiàng)目將選擇多個(gè)翻譯引擎同時(shí)對(duì)同一文本進(jìn)行翻譯,并利用人工智能對(duì)翻譯結(jié)果進(jìn)行篩選,將評(píng)價(jià)最好的翻譯結(jié)果呈現(xiàn)給用戶。在此階段中,教師可以指導(dǎo)學(xué)生確立該翻譯系統(tǒng)的基本要求:①基于云平臺(tái)進(jìn)行開(kāi)發(fā)測(cè)試;②基于分布式系統(tǒng)和多線程技術(shù)從多個(gè)翻譯引擎采集翻譯結(jié)果;③使用強(qiáng)化學(xué)習(xí)理論對(duì)翻譯結(jié)果進(jìn)行篩選,選擇最優(yōu)翻譯結(jié)果呈現(xiàn)給用戶;④基于Web技術(shù)編寫(xiě)跨平臺(tái)的翻譯系統(tǒng)客戶端;⑤對(duì)整個(gè)中英文翻譯系統(tǒng)進(jìn)行測(cè)試與維護(hù)。
在完成項(xiàng)目設(shè)計(jì)階段后,教師就可以指導(dǎo)學(xué)生根據(jù)項(xiàng)目需求和項(xiàng)目設(shè)計(jì)來(lái)實(shí)現(xiàn)項(xiàng)目。在此階段,教師應(yīng)注重培養(yǎng)學(xué)生的編程、團(tuán)隊(duì)協(xié)作和自主學(xué)習(xí)能力。整個(gè)項(xiàng)目實(shí)施階段又可以分為幾個(gè)階段。以中英文翻譯系統(tǒng)為例,整個(gè)過(guò)程分為5個(gè)部分:云服務(wù)器開(kāi)發(fā)測(cè)試環(huán)境的搭建、翻譯結(jié)果的采集、翻譯結(jié)果的智能篩選、翻譯系統(tǒng)的客戶端開(kāi)發(fā)以及翻譯系統(tǒng)的測(cè)試與維護(hù)。
2.4.1 云服務(wù)器開(kāi)發(fā)測(cè)試環(huán)境的搭建
現(xiàn)在絕大多數(shù)企業(yè)都選擇云服務(wù)器作為生產(chǎn)測(cè)試環(huán)境,因?yàn)樵品?wù)器具有安全可靠、配置靈活、彈性擴(kuò)容等優(yōu)勢(shì)。筆者選擇云服務(wù)器而不是本地服務(wù)器作為項(xiàng)目的生產(chǎn)測(cè)試環(huán)境,順應(yīng)了時(shí)代的發(fā)展,有利于培養(yǎng)出符合企業(yè)需求的高素質(zhì)軟件人才。
在本階段,教師應(yīng)讓學(xué)生實(shí)際運(yùn)行Linux命令并查看運(yùn)行結(jié)果,使學(xué)生掌握Vim編輯器的使用方法,并了解線程、進(jìn)程、協(xié)程等基本的操作系統(tǒng)概念,最終完成在云服務(wù)器上搭建生產(chǎn)測(cè)試環(huán)境的目標(biāo)。在此過(guò)程中,學(xué)生可以掌握相關(guān)知識(shí):①通過(guò)SSH遠(yuǎn)程登錄云服務(wù)器;②安裝Python、Git等生產(chǎn)測(cè)試軟件;③設(shè)置不同的用戶,并按照其職責(zé)賦予不同的權(quán)限;④配置Linux網(wǎng)絡(luò)參數(shù),開(kāi)啟防火墻,保護(hù)云服務(wù)器的安全。
通過(guò)在云服務(wù)器上搭建生產(chǎn)測(cè)試環(huán)境,學(xué)生可以掌握Linux系統(tǒng)的使用方法,理解操作系統(tǒng)中的重要概念,了解服務(wù)器安全的基本知識(shí),為后續(xù)的學(xué)習(xí)和工作打下堅(jiān)實(shí)的基礎(chǔ)。
2.4.2 翻譯結(jié)果的采集
隨著科學(xué)技術(shù)的進(jìn)步,計(jì)算機(jī)硬件技術(shù)飛速發(fā)展,但由于用戶量的不斷增長(zhǎng),單臺(tái)服務(wù)器越來(lái)越難以滿足需求,因此分布式計(jì)算應(yīng)運(yùn)而生。為了順應(yīng)時(shí)代的發(fā)展,教師可以要求學(xué)生在開(kāi)發(fā)中英文翻譯系統(tǒng)時(shí),基于Hadoop架構(gòu)來(lái)建立分布式翻譯結(jié)果采集系統(tǒng)。Hadoop是開(kāi)源的、優(yōu)秀的分布式系統(tǒng)架構(gòu),已在雅虎、百度、騰訊等知名互聯(lián)網(wǎng)企業(yè)廣泛應(yīng)用。學(xué)生通過(guò)參加這樣的實(shí)踐項(xiàng)目,可以學(xué)習(xí)最先進(jìn)的技術(shù),養(yǎng)成規(guī)范的編程習(xí)慣。
在此階段中,教師可以對(duì)學(xué)生有如下要求:①使用面向?qū)ο蟮木幊趟枷耄瑢⒏鞣g引擎建模為不同的對(duì)象,編寫(xiě)出易于理解、便于維護(hù)的代碼;②學(xué)習(xí)OSI七層模型和TCP/IP分層模型,掌握傳輸控制協(xié)議和用戶數(shù)據(jù)報(bào)協(xié)議,了解傳輸控制協(xié)議的建立過(guò)程和關(guān)閉過(guò)程;③學(xué)習(xí)超文本標(biāo)記語(yǔ)言和層疊樣式表,能夠從內(nèi)容繁雜的網(wǎng)頁(yè)中快速找到翻譯結(jié)果;④學(xué)習(xí)多線程編程技術(shù),對(duì)一個(gè)待翻譯文本同時(shí)向多個(gè)翻譯引擎查詢,減少查詢的等待時(shí)間;⑤掌握基本的數(shù)據(jù)庫(kù)查詢技術(shù),了解分布式系統(tǒng)下的數(shù)據(jù)同步;⑥基于Map/Reduce思想,通過(guò)對(duì)Hadoop軟件的二次開(kāi)發(fā),使用分布式算法完成翻譯結(jié)果的采集。
通過(guò)本階段的學(xué)習(xí),學(xué)生可以體驗(yàn)企業(yè)項(xiàng)目的開(kāi)發(fā)流程,學(xué)得當(dāng)前的尖端技術(shù),快速提高編程、溝通和協(xié)作能力。
2.4.3 翻譯結(jié)果的智能篩選
由于各翻譯引擎采用的技術(shù)不同,所以無(wú)法找到一個(gè)對(duì)任意文本的翻譯其結(jié)果都是最優(yōu)的翻譯引擎。為了提升用戶體驗(yàn),筆者認(rèn)為有必要對(duì)所有翻譯結(jié)果進(jìn)行比較,將最優(yōu)的翻譯結(jié)果呈現(xiàn)給用戶。為了實(shí)現(xiàn)這一目的,筆者指導(dǎo)學(xué)生基于強(qiáng)化學(xué)習(xí)理論,使用Tensor flow完成對(duì)翻譯結(jié)果的篩選。強(qiáng)化學(xué)習(xí)是人工智能領(lǐng)域最熱門的課題之一,被譽(yù)為“通往通用人工智能的鑰匙”。與監(jiān)督學(xué)習(xí)相比,強(qiáng)化學(xué)習(xí)不需要對(duì)樣本進(jìn)行標(biāo)注,這可以大大減少工作量。此外,Tensor flow是迄今為止最流行的人工智能開(kāi)源框架之一,使用Tensor flow可以大大降低編程難度,快速完成項(xiàng)目的開(kāi)發(fā)。
在此項(xiàng)目中,筆者把待翻譯的文本建模為狀態(tài),將呈現(xiàn)給用戶的翻譯結(jié)果視為對(duì)動(dòng)作的選擇,把用戶評(píng)分(0~5分,0分最差,5分最優(yōu))作為獎(jiǎng)勵(lì)。強(qiáng)化學(xué)習(xí)把不同翻譯引擎對(duì)同一文本的翻譯結(jié)果抽象為關(guān)于用戶評(píng)分的值函數(shù)。用戶的評(píng)分越高,其對(duì)應(yīng)的值函數(shù)也就越大;值函數(shù)越大,翻譯引擎的翻譯結(jié)果可能就越好。因此,筆者總是把值函數(shù)最大的翻譯引擎翻譯結(jié)果提交給用戶,這在強(qiáng)化學(xué)習(xí)中被稱為利用。當(dāng)然,最優(yōu)的翻譯引擎可能有一小部分翻譯結(jié)果不令人滿意。為避免這種情況的出現(xiàn),筆者隨機(jī)選擇次優(yōu)翻譯引擎的翻譯結(jié)果呈現(xiàn)給用戶,這在強(qiáng)化學(xué)習(xí)中被稱為探索。這樣,筆者就選擇出最符合用戶需求的翻譯結(jié)果。
在這一過(guò)程中,學(xué)生學(xué)到的知識(shí)有:①人工智能的發(fā)展歷史;②目前主流的人工智能技術(shù)有什么優(yōu)勢(shì)及缺陷;③強(qiáng)化學(xué)習(xí)的基本概念;④在強(qiáng)化學(xué)習(xí)的探索和使用上進(jìn)行權(quán)衡;⑤值函數(shù)的更新方式;⑥Tensor flow的基本使用。
通過(guò)學(xué)習(xí)前沿的理論知識(shí),學(xué)生可以有更開(kāi)闊的視野、更濃厚的學(xué)習(xí)興趣和更強(qiáng)的自學(xué)能力。
2.4.4 翻譯系統(tǒng)的客戶端開(kāi)發(fā)
為了將翻譯結(jié)果呈現(xiàn)給用戶,一個(gè)簡(jiǎn)潔、美觀的客戶端是必不可少的。目前Android、IOS、Windows在操作系統(tǒng)市場(chǎng)占據(jù)著統(tǒng)治地位,而這三大系統(tǒng)之間的應(yīng)用又不能通用。為了降低項(xiàng)目難度、減少工作量,教師可以建議學(xué)生使用Web技術(shù)開(kāi)發(fā)翻譯系統(tǒng)的客戶端,這樣做:①可以實(shí)現(xiàn)客戶端跨平臺(tái)使用;②編寫(xiě)測(cè)試方便,各平臺(tái)對(duì)Web應(yīng)用的支持基本一致,不需要對(duì)使用平臺(tái)做適配調(diào)整;③學(xué)生在前面已學(xué)習(xí)過(guò)相關(guān)知識(shí),對(duì)Web技術(shù)有了一定的了解,學(xué)習(xí)成本低;④多數(shù)Web技術(shù)都是開(kāi)源項(xiàng)目,社區(qū)活躍。
在本階段,學(xué)生需要掌握的知識(shí)有:①超文本標(biāo)記語(yǔ)言和層疊樣式表的基本使用;②瀏覽器與服務(wù)器進(jìn)行通信的方法;③數(shù)據(jù)庫(kù)的基本使用方法;④掌握使用動(dòng)態(tài)網(wǎng)頁(yè)刷新來(lái)減少網(wǎng)絡(luò)流量的方法;⑤掌握使用JavaScript語(yǔ)言實(shí)現(xiàn)客戶端與用戶互動(dòng)的方法。
通過(guò)這個(gè)階段,教師可以快速提高學(xué)生的編程能力,促使學(xué)生養(yǎng)成良好的編程習(xí)慣。
2.4.5 翻譯系統(tǒng)的測(cè)試與維護(hù)
軟件的測(cè)試與維護(hù)是項(xiàng)目開(kāi)發(fā)的重要環(huán)節(jié)。通過(guò)對(duì)軟件進(jìn)行測(cè)試,可以找到代碼中隱含的錯(cuò)誤,從而避免意外情況的發(fā)生。軟件維護(hù)可以延長(zhǎng)軟件的生命周期,提升用戶的使用體驗(yàn)。在此階段,學(xué)生需要掌握的知識(shí)有:①黑盒測(cè)試和白盒測(cè)試的區(qū)別;②評(píng)估軟件可靠性的方法;③軟件調(diào)試的過(guò)程;④軟件維護(hù)的流程。
通過(guò)本階段的學(xué)習(xí),學(xué)生可以基本掌握軟件測(cè)試與維護(hù)的基本方法,在實(shí)踐中認(rèn)識(shí)到軟件工程理論在項(xiàng)目測(cè)試和維護(hù)中的重要作用。
隨著時(shí)代的發(fā)展,用戶的需求越來(lái)越多,項(xiàng)目也越來(lái)越復(fù)雜,僅靠個(gè)人的力量已無(wú)法完成軟件開(kāi)發(fā)。大部分企業(yè)都是采用團(tuán)隊(duì)分工的方式完成項(xiàng)目,這樣做可以大大降低項(xiàng)目的復(fù)雜度,縮短項(xiàng)目的開(kāi)發(fā)周期。但是筆者在實(shí)際教學(xué)中發(fā)現(xiàn),團(tuán)隊(duì)協(xié)作需要成員間良好的溝通,否則容易出現(xiàn)代碼錯(cuò)誤無(wú)法修復(fù)、程序?qū)嶋H運(yùn)行結(jié)果與需求不符等問(wèn)題。
因此,教師可以要求組長(zhǎng)合理分配任務(wù)給組內(nèi)成員,充分發(fā)揮Git、SVN等開(kāi)源開(kāi)發(fā)工具的作用,嘗試將代碼提交到碼云等在線代碼托管平臺(tái)來(lái)完成軟件的開(kāi)發(fā),使用石墨文檔等在線協(xié)作文檔完成相關(guān)文檔的撰寫(xiě)。此外,教師還應(yīng)要求學(xué)生遵循相關(guān)的編碼規(guī)范,以方便代碼調(diào)試與維護(hù)。經(jīng)實(shí)踐檢驗(yàn),上述方法能有效消除團(tuán)隊(duì)協(xié)作過(guò)程中出現(xiàn)的問(wèn)題,確保項(xiàng)目順利地按時(shí)完成。
以開(kāi)源軟件為驅(qū)動(dòng)的軟件工程課程改革,遵循了循序漸進(jìn)的教學(xué)原則,將軟件工程理論與項(xiàng)目實(shí)踐有效結(jié)合,讓學(xué)生在項(xiàng)目開(kāi)發(fā)中意識(shí)到軟件工程理論的重要作用。在中英文翻譯系統(tǒng)的開(kāi)發(fā)過(guò)程中,學(xué)生學(xué)習(xí)了云生產(chǎn)平臺(tái)的搭建、翻譯結(jié)果的智能篩選、跨平臺(tái)客戶端的開(kāi)發(fā)等一系列前沿技術(shù),提高了團(tuán)隊(duì)協(xié)作、編程和自學(xué)能力。實(shí)踐表明,以開(kāi)源軟件為驅(qū)動(dòng)的軟件工程課程教學(xué)能夠培養(yǎng)出順應(yīng)時(shí)代發(fā)展的高素質(zhì)軟件人才。