彭小娟
(廣州大學(xué)華軟軟件學(xué)院 廣東·廣州 510180)
CDIO工程教育模式是近年來(lái)由美國(guó)麻省理工大學(xué)、瑞典皇家工學(xué)院等4所世界知名大學(xué)經(jīng)過(guò)長(zhǎng)期的探索而研發(fā)的改革成果,主要包含“構(gòu)思(Conceive)—設(shè)計(jì)(Design)—實(shí)施(Implement)—運(yùn)行(Operate)”四個(gè)階段。其倡導(dǎo)的“做中學(xué)”和以“項(xiàng)目案例”組織教學(xué)活動(dòng)的教學(xué)方法,讓學(xué)生通過(guò)主動(dòng)的、實(shí)踐的、課程之間具有有機(jī)聯(lián)系的方式學(xué)習(xí)和提高工程能力,將理論與實(shí)踐相結(jié)合,為《軟件工程》的教學(xué)改革提供了一些有益的探索。
《軟件工程》是各大高校計(jì)算機(jī)軟件教學(xué)體系中的一門核心課程,主要講授軟件開(kāi)發(fā)、維護(hù)與管理,在軟件工程學(xué)科人才培養(yǎng)體系中占有重要地位。軟件工程涉及的面比較廣,包括整個(gè)軟件開(kāi)發(fā)的分析、設(shè)計(jì)、實(shí)現(xiàn)、測(cè)試、維護(hù)等過(guò)程。過(guò)程中涉及的方法、原理和技術(shù)比較廣泛而復(fù)雜,教師在授課過(guò)程中也感覺(jué)有困難,學(xué)生在學(xué)習(xí)過(guò)程中感覺(jué)內(nèi)容比較偏理論化,理解上比較困難,易產(chǎn)生學(xué)不會(huì)、不想學(xué)的思想。通過(guò)多年從事《軟件工程》課程教學(xué)經(jīng)驗(yàn)的分析與總結(jié),針對(duì)該課程存在的實(shí)際問(wèn)題,我們需要從以下幾個(gè)方面進(jìn)行教學(xué)改革。
軟件開(kāi)發(fā)方法與技術(shù)更新迭代非???,但是現(xiàn)有的教材內(nèi)容大部分略顯陳舊,已不能適應(yīng)社會(huì)需求。比如很多教材將大量篇幅用于講解結(jié)構(gòu)化分析與設(shè)計(jì)方法,該方法是一種面向數(shù)據(jù)流的傳統(tǒng)軟件開(kāi)發(fā)方法,它以數(shù)據(jù)流為中心構(gòu)建軟件的分析模型和設(shè)計(jì)模型。主要適用于早期的信息系統(tǒng)的開(kāi)發(fā)?,F(xiàn)在大部分都是基于互聯(lián)網(wǎng)、大數(shù)據(jù)和人工智能的應(yīng)用程序,教材內(nèi)容也迫切需要與時(shí)俱進(jìn)進(jìn)行更新。
一般而言,軟件系統(tǒng)都是短期性的項(xiàng)目(短則幾周,長(zhǎng)則數(shù)年),而項(xiàng)目會(huì)存在各種風(fēng)險(xiǎn),所以軟件開(kāi)發(fā)需要進(jìn)行項(xiàng)目管理。在課程設(shè)計(jì)過(guò)程中通常會(huì)出現(xiàn)以下幾種情況:之前系統(tǒng)可以運(yùn)行,現(xiàn)在系統(tǒng)運(yùn)行不了了,但是之前的版本也找不到了。由于前期缺乏對(duì)技術(shù)風(fēng)險(xiǎn)的估算,后期才發(fā)現(xiàn)技術(shù)達(dá)不到,導(dǎo)致最終項(xiàng)目擱淺了。團(tuán)隊(duì)在開(kāi)發(fā)過(guò)程中沒(méi)有進(jìn)行進(jìn)度計(jì)劃和控制,最終項(xiàng)目不能如期交付。這些情況主要是由于學(xué)生項(xiàng)目管理意識(shí)薄弱造成的。
由于前期學(xué)生學(xué)習(xí)了一些技術(shù)課程,這些課程主要是檢驗(yàn)學(xué)生掌握技術(shù)的熟練程度,所以一般是給定要求讓學(xué)生實(shí)現(xiàn),所以學(xué)生形成了拿來(lái)就開(kāi)始編碼的習(xí)慣。但是軟件開(kāi)發(fā)的項(xiàng)目中,需要學(xué)生從需求開(kāi)始進(jìn)行分析,學(xué)會(huì)分析問(wèn)題。另外,在進(jìn)行課程學(xué)習(xí)的過(guò)程中,大部分學(xué)生很難有軟件工程實(shí)踐的機(jī)會(huì),即便是有也可能是一些虛擬的實(shí)驗(yàn)項(xiàng)目或者小型的軟件項(xiàng)目。這些項(xiàng)目存在缺乏需求背景、覆蓋的專業(yè)知識(shí)面小的局限性。因此學(xué)生在進(jìn)行軟件項(xiàng)目實(shí)踐時(shí),通常是在缺少前期軟件需求分析的基礎(chǔ)上直接編碼。通過(guò)這種模式培養(yǎng)的學(xué)生,缺乏實(shí)際動(dòng)手能力,無(wú)法在實(shí)踐過(guò)程中體會(huì)到軟件工程的精髓,無(wú)法滿足企業(yè)的實(shí)際需求。
軟件開(kāi)發(fā)技術(shù)更新迭代非???,需要教師與時(shí)俱進(jìn)地學(xué)習(xí)。很多任課教師由于長(zhǎng)期在高校工作,缺乏對(duì)企業(yè)實(shí)際需求的了解,導(dǎo)致課堂教學(xué)內(nèi)容因教學(xué)過(guò)程規(guī)范性的限制無(wú)法適應(yīng)企業(yè)和技術(shù)的發(fā)展要求。
本課程總共68學(xué)時(shí),理論課與實(shí)驗(yàn)課各34學(xué)時(shí),每周各2學(xué)時(shí)。提供5~10個(gè)項(xiàng)目供學(xué)生選擇;也可以自擬,但是需要獲得指導(dǎo)老師的同意。提倡自擬,因?yàn)樽詳M課題要從平時(shí)的學(xué)習(xí)生活中發(fā)現(xiàn)需求,這將調(diào)動(dòng)學(xué)生的主動(dòng)性和思辨性。項(xiàng)目要求難度適中,工作量能夠在課程中完成。學(xué)生可以自由選擇3~6人一組,每組共同完成一個(gè)項(xiàng)目。在課程設(shè)計(jì)的過(guò)程中,所有團(tuán)隊(duì)要嚴(yán)格按照軟件工程的思想和過(guò)程進(jìn)行管理,保證每個(gè)階段能夠達(dá)到CDIO相應(yīng)的培養(yǎng)目標(biāo)。指導(dǎo)老師可以采用諸如教師引導(dǎo)講解、小組討論、學(xué)生講解、生講師評(píng)等方式進(jìn)行。
從軟件工程的角度出發(fā),項(xiàng)目開(kāi)始需要先初步收集開(kāi)發(fā)需求,確定項(xiàng)目目標(biāo)及范圍等要求,定義系統(tǒng)功能,計(jì)劃開(kāi)發(fā)進(jìn)度,從技術(shù)、經(jīng)濟(jì)、法律等方面進(jìn)行可行性論證。
構(gòu)思階段首先是分組選題,確定各小組的項(xiàng)目經(jīng)理及其他角色,明確角色職責(zé)。項(xiàng)目經(jīng)理是團(tuán)隊(duì)主要角色,一般由組織能力、溝通協(xié)調(diào)能力較強(qiáng),技術(shù)能力不錯(cuò)的同學(xué)擔(dān)當(dāng)。團(tuán)隊(duì)確定后集體討論進(jìn)行選題。接著,由項(xiàng)目經(jīng)理組織團(tuán)隊(duì)成員確定團(tuán)隊(duì)的slogan及團(tuán)隊(duì)規(guī)章制度,培養(yǎng)大家的團(tuán)隊(duì)意識(shí);再進(jìn)行團(tuán)隊(duì)分析,明確團(tuán)隊(duì)人員技術(shù)的優(yōu)劣勢(shì),盡量降低技術(shù)風(fēng)險(xiǎn);還要對(duì)系統(tǒng)需求進(jìn)行分析與討論,分析系統(tǒng)的用戶類型、特點(diǎn)及權(quán)限,劃分系統(tǒng)功能模塊,明確難重點(diǎn),評(píng)估系統(tǒng)功能能否在規(guī)定的時(shí)間內(nèi)完成。之后,項(xiàng)目經(jīng)理還需要通過(guò)Project分解WBS結(jié)構(gòu),估算工期,分析任務(wù)間的依賴關(guān)系,制定項(xiàng)目進(jìn)度計(jì)劃,明確里程碑,為團(tuán)隊(duì)成員分配任務(wù)。需求分析可以采取調(diào)查問(wèn)卷、訪談、實(shí)地工作、聯(lián)合小組、競(jìng)品分析等形式開(kāi)展,分析整理后的需求條目還要進(jìn)行重要性和優(yōu)先級(jí)排序,工作量估算等。之后可用案例分析與建模的方式表示,比較簡(jiǎn)潔明了。每個(gè)階段都要形成相應(yīng)的文檔并提交給指導(dǎo)老師,并由團(tuán)隊(duì)與指導(dǎo)老師一起進(jìn)行評(píng)審。
設(shè)計(jì)(Design)階段是根據(jù)構(gòu)思階段定義的系統(tǒng)功能進(jìn)行系統(tǒng)建模。設(shè)計(jì)內(nèi)容一般包括以下幾方面:
(1)軟件架構(gòu)設(shè)計(jì)。軟件架構(gòu)指軟件系統(tǒng)的頂層結(jié)構(gòu)。架構(gòu)是經(jīng)過(guò)系統(tǒng)性地思考,權(quán)衡利弊之后在現(xiàn)有資源約束下的最合理決策,最終明確的系統(tǒng)骨架:包括子系統(tǒng)、模塊、組件,以及他們之間協(xié)作關(guān)系,約束規(guī)范,指導(dǎo)原則,并由它來(lái)指導(dǎo)團(tuán)隊(duì)中的每個(gè)人思想層面上的一致。架構(gòu)可細(xì)分為業(yè)務(wù)架構(gòu)、應(yīng)用架構(gòu)、技術(shù)架構(gòu),代碼架構(gòu)及部署架構(gòu)。業(yè)務(wù)架構(gòu)是戰(zhàn)略,應(yīng)用架構(gòu)是戰(zhàn)術(shù),技術(shù)架構(gòu)是裝備。其中應(yīng)用架構(gòu)承上啟下,一方面承接業(yè)務(wù)架構(gòu)的落地,另一方面影響技術(shù)選型。業(yè)務(wù)架構(gòu)的設(shè)計(jì)原則以解決業(yè)務(wù)問(wèn)題為最終目標(biāo)。應(yīng)用架構(gòu)和業(yè)務(wù)架構(gòu)是相輔相成的關(guān)系。應(yīng)用作為獨(dú)立可部署的單元,為系統(tǒng)劃分了明確的邊界,深刻影響系統(tǒng)功能組織、代碼開(kāi)發(fā)、部署和運(yùn)維等各方面。學(xué)生可以以解決業(yè)務(wù)問(wèn)題為最終目標(biāo),對(duì)系統(tǒng)業(yè)務(wù)進(jìn)行拆分,對(duì)領(lǐng)域模型進(jìn)行設(shè)計(jì),劃分子系統(tǒng)或者模塊。
(2)界面設(shè)計(jì)。界面設(shè)計(jì)是指對(duì)軟件的人機(jī)交互、操作邏輯、界面美觀的整體設(shè)計(jì)。好的界面設(shè)計(jì)不僅要有個(gè)性,體現(xiàn)軟件的特點(diǎn),還要讓軟件的操作變得舒適簡(jiǎn)單。由于界面是面向最終用戶的,用戶對(duì)系統(tǒng)的認(rèn)知主要源于界面,所以學(xué)生可以根據(jù)需求,采用Axure或其他工具進(jìn)行原型設(shè)計(jì),這樣可以以最小的時(shí)間和成本快速進(jìn)行需求分析,避免在沒(méi)有明確需求的情況下匆忙開(kāi)始編碼,導(dǎo)致后期返工的窘?jīng)r。
(3)類和接口的設(shè)計(jì)。本課程主要采用面向?qū)ο蟮脑O(shè)計(jì)思想分析類和接口、設(shè)計(jì)類和接口、確定類的屬性和方法、職責(zé)之間的協(xié)作。另外,還需要根據(jù)面向?qū)ο笤O(shè)計(jì)原則去優(yōu)化類圖模型,以便提高系統(tǒng)的可擴(kuò)展性和可復(fù)用性。
(4)數(shù)據(jù)庫(kù)設(shè)計(jì)。大部分的選題都需要后臺(tái)數(shù)據(jù)庫(kù)的支持,所以需要進(jìn)行數(shù)據(jù)庫(kù)設(shè)計(jì)。通過(guò)E-R圖進(jìn)行數(shù)據(jù)庫(kù)建模,確定需要設(shè)計(jì)的表、表的字段、表與表的關(guān)系及其他約束等。
實(shí)現(xiàn)(Implement)階段是實(shí)現(xiàn)設(shè)計(jì)階段的模型。首先,團(tuán)隊(duì)成員要統(tǒng)一使用統(tǒng)一的代碼規(guī)范和數(shù)據(jù)庫(kù)。這是軟件工程遵循CDIO理念的一個(gè)基礎(chǔ),也更能體現(xiàn)工程性思維。阿里巴巴B2B事業(yè)群CTO李純說(shuō)過(guò):“好的軟件產(chǎn)品離不開(kāi)工程師高質(zhì)量的代碼及相互間順暢的溝通與合作。簡(jiǎn)單,適用的代碼規(guī)約背后所傳遞的是技術(shù)上的追求卓越、協(xié)同合作的精神,是每個(gè)技術(shù)團(tuán)隊(duì)不可缺失的重要利器?!钡诙瑘F(tuán)隊(duì)可以按照模塊進(jìn)行實(shí)現(xiàn),比如選擇具體的編程語(yǔ)言和框架,編寫各個(gè)模塊對(duì)應(yīng)的前后端頁(yè)面、業(yè)務(wù)邏輯和功能代碼等,選擇某個(gè)數(shù)據(jù)庫(kù)管理系統(tǒng)進(jìn)行數(shù)據(jù)庫(kù)和表的實(shí)現(xiàn)。第三,要求各團(tuán)隊(duì)要采用Git或其他版本控制軟件對(duì)源代碼進(jìn)行版本管理,以免版本丟失的情況發(fā)生。Git作為一個(gè)開(kāi)源的分布式版本控制系統(tǒng),可以有效、高速地處理從很小到非常大的項(xiàng)目版本管理,方便團(tuán)隊(duì)協(xié)作,并且會(huì)記錄實(shí)現(xiàn)過(guò)程中所有文件的增刪改等記錄,離線工作,速度快、靈活,任意兩個(gè)開(kāi)發(fā)者之間可以很容易的解決沖突。版本控制系統(tǒng)也是業(yè)界常用的工具,學(xué)生在課程設(shè)計(jì)中了解使用,以后去企業(yè)就業(yè)就可以更快上手。
運(yùn)行階段通常采用答辯的方式,每個(gè)團(tuán)隊(duì)需演示系統(tǒng),對(duì)項(xiàng)目進(jìn)行構(gòu)思、設(shè)計(jì)、實(shí)現(xiàn)、運(yùn)行四個(gè)階段的工作匯報(bào),接受教師和同學(xué)的提問(wèn),總結(jié)本次課程設(shè)計(jì)的收獲和經(jīng)驗(yàn)教訓(xùn)??己顺煽?jī)包括系統(tǒng)演示1/3,講解匯報(bào)與回答問(wèn)題1/3,文檔1/3。最終團(tuán)隊(duì)需要提交一份課程設(shè)計(jì)的完整文檔(包括各階段),系統(tǒng)實(shí)現(xiàn)的源碼和配置文件、數(shù)據(jù)文件等。
課程教學(xué)改革后,主要有3個(gè)方面的變化:增強(qiáng)了學(xué)生對(duì)于項(xiàng)目管理和工程思想的意識(shí)。團(tuán)隊(duì)協(xié)作的方式,既讓學(xué)校保持了良好的實(shí)踐作風(fēng),又增強(qiáng)了學(xué)生的團(tuán)隊(duì)協(xié)作意識(shí)和精神。通過(guò)項(xiàng)目驅(qū)動(dòng)和工程的貫穿,將課程知識(shí)點(diǎn)形成有機(jī)整體。
總之,CDIO工程教育符合我國(guó)教育行業(yè)信息化發(fā)展的大趨勢(shì),為教育行業(yè)信息化革新注入了新活力。為了培養(yǎng)適應(yīng)軟件產(chǎn)業(yè)發(fā)展的人才,我們要不斷的踐行以CDIO理念為核心的教育教學(xué)改革。