張國有,白尚旺,郭銀章,黨偉超,武 妍
(1.太原科技大學(xué) 計算機(jī)科學(xué)與技術(shù)學(xué)院,山西 太原 003024;2.太原科技大學(xué) 經(jīng)濟(jì)與管理學(xué)院,山西 太原 003024)
隨著2016年5月《國家創(chuàng)新驅(qū)動發(fā)展戰(zhàn)略綱要》的出臺和推進(jìn),以物聯(lián)網(wǎng)、云計算、大數(shù)據(jù)為代表的信息技術(shù)面臨著前所未有的發(fā)展機(jī)遇和挑戰(zhàn)。可以預(yù)見,未來社會對高級信息人才的需求將越來越大,這對高等院校軟件工程專業(yè)的人才培養(yǎng)帶來新的挑戰(zhàn)和機(jī)遇。如何培養(yǎng)適應(yīng)時代發(fā)展的具有大型復(fù)雜軟件系統(tǒng)開發(fā)和設(shè)計能力的高級信息人才,是高等教育軟件工程專業(yè)亟待解決的一個重要問題。軟件分析與建模課程作為軟件工程專業(yè)的一門重要專業(yè)課,在學(xué)生分析和設(shè)計大型軟件和解決實際工程問題的培養(yǎng)方面具有十分重要的作用。該課程也是高等院校軟件工程專業(yè)一門技術(shù)性、實踐性很強(qiáng)的重要課程。如何提高軟件分析與建模課程的教學(xué)水平,實現(xiàn)軟件分析與建模能力培養(yǎng)的目標(biāo),便成為教學(xué)改革的關(guān)鍵問題之一。
軟件分析與建模課程的基本任務(wù)是培養(yǎng)學(xué)生構(gòu)建復(fù)雜軟件系統(tǒng)的能力,但在實際教學(xué)過程中,存在對課程教學(xué)目標(biāo)認(rèn)識不清、教學(xué)內(nèi)容繁雜、教學(xué)方法和手段單一等問題。學(xué)生在學(xué)習(xí)過程中雖然掌握了大量的軟件分析與建模的概念和知識,但缺乏求解工程實際問題的科學(xué)思維能力和分析設(shè)計能力。當(dāng)前存在的問題主要有以下幾方面。
1)注重理論講授,對能力培養(yǎng)認(rèn)識不足
在傳統(tǒng)的軟件分析與建模課程教學(xué)過程中,教學(xué)內(nèi)容的選取沿用學(xué)科體系的教學(xué)模式,重視理論體系的完整性,學(xué)生的軟件分析和建模能力沒有得到較好的培養(yǎng),缺乏相應(yīng)的培養(yǎng)過程指導(dǎo)和評價指標(biāo),無法適應(yīng)新形勢下的高級信息人才需求。
2)教學(xué)內(nèi)容繁雜零散,知識體系有待優(yōu)化和調(diào)整。
在實際教學(xué)中,授課教師往往按照教材的章節(jié)進(jìn)行講授,只重視課程的概念和知識細(xì)節(jié),容易使學(xué)生誤解軟件分析和建模的作用,學(xué)生無法建立軟件分析與建模的整體概念,因此需要對軟件分析與建模的知識體系進(jìn)行優(yōu)化和調(diào)整。
3)考核方式單一,重考試輕過程。
當(dāng)前對軟件分析與建模課程學(xué)習(xí)的評價主要是期末考試、上課出勤、作業(yè)實驗3部分。從考核形式上看,這是可行的,但在實際操作過程中,教師更加依賴期末考試,而對于作業(yè)實驗等實踐訓(xùn)練環(huán)節(jié),缺少科學(xué)的過程評價,沒有合理的評價指標(biāo)和質(zhì)量監(jiān)控體系,僅僅從是否完成的角度來進(jìn)行評價。
近年來,“計算思維”概念的提出,引發(fā)了廣大科研人員和教育工作者的熱切關(guān)注,如何培養(yǎng)學(xué)生的計算思維能力成為一個日益關(guān)注的重要課題。為此,在軟件分析和建模課程的本科教學(xué)過程中,根據(jù)計算思維的主要思想和方法,探索以計算思維能力為核心的新教學(xué)模式,從而培養(yǎng)軟件工程專業(yè)的高級信息人才,具有十分重要的意義。
2006年,周以真(Jeannette M. Wing)教授提出,計算思維是運(yùn)用計算機(jī)科學(xué)的基礎(chǔ)概念進(jìn)行問題求解、系統(tǒng)設(shè)計以及人類行為理解等的一系列思維活動[1]。計算思維在復(fù)雜軟件系統(tǒng)的分析建模中,主要體現(xiàn)為如何選擇合適的方式陳述軟件系統(tǒng)需求,或?qū)ο到y(tǒng)的某一側(cè)面進(jìn)行建模使其易于處理的思維方法。同時,考慮如何采用抽象和分解的方法來控制龐雜的任務(wù),其實質(zhì)是一種基于關(guān)注點(diǎn)分離的方法。
計算思維的本質(zhì)在于抽象,即如何將實際問題清晰、抽象地描述出來,并將問題的解決方案表示成一個信息處理的流程[2]。軟件分析與建模,從思維的角度來講,包含軟件對抽象泛化、求精細(xì)化和分析驗證等方面的思維活動。軟件的分析與建模從軟件需求描述開始,經(jīng)過需求分析和軟件建模得到軟件開發(fā)所需要的資料和數(shù)據(jù),需求分析需要應(yīng)用抽象和泛化等思維工具,提取軟件的主要功能和業(yè)務(wù)流程,并在建模過程中應(yīng)用求精和細(xì)化等思維工具形成圖形文檔,以便直觀地表達(dá)軟件系統(tǒng)的設(shè)計。建模完成后,還需對建立的模型和需求陳述進(jìn)行一致性的分析和驗證。為此,在軟件分析與建模的教學(xué)過程中應(yīng)當(dāng)注重以下幾個方面。
針對復(fù)雜軟件系統(tǒng)的分析與建模,計算思維的培養(yǎng)主要體現(xiàn)在對系統(tǒng)的總體掌控能力,即系統(tǒng)能力。系統(tǒng)能力要求研發(fā)人員能夠在構(gòu)建系統(tǒng)時,系統(tǒng)考慮問題的求解,把“設(shè)計”作為問題求解的基礎(chǔ),首先考慮問題的數(shù)據(jù)表示和基本處理過程,而不是考慮具體的編程實現(xiàn)。
系統(tǒng)能力可以細(xì)化為認(rèn)知、設(shè)計、開發(fā)和應(yīng)用等方面的能力,軟件的分析與建模能力側(cè)重于認(rèn)知能力和設(shè)計能力。系統(tǒng)認(rèn)知能力主要體現(xiàn)在軟件的需求分析環(huán)節(jié),包括軟件的系統(tǒng)構(gòu)成、運(yùn)行環(huán)境、系統(tǒng)性能、建立需求模型等。系統(tǒng)的設(shè)計能力主要體現(xiàn)在軟件建模環(huán)節(jié),包括數(shù)據(jù)建模和應(yīng)用程序建模。
軟件分析與建模的過程需采用分層次組織和遞進(jìn)迭代的方法,并貫穿于軟件開發(fā)整個過程。面對功能繁多的復(fù)雜系統(tǒng),學(xué)生往往對諸多的細(xì)節(jié)深感無序和困惑,這就需要引導(dǎo)學(xué)生采用抽象、約簡、嵌入和轉(zhuǎn)化等方法,從諸多的需求陳述中提取系統(tǒng)基本功能或者核心功能的特征,逐步求精細(xì)化,完善系統(tǒng)的建模,即掌握將一個復(fù)雜問題闡述為一個可求解問題的思維方法。在教學(xué)要求和目標(biāo)的定位中,以計算思維的主要思想和方法為基礎(chǔ),對軟件分析與建模的教學(xué)內(nèi)容進(jìn)行優(yōu)化和調(diào)整。
在《高等學(xué)校軟件工程本科專業(yè)規(guī)范(2010.1)》的“軟件工程教育知識單元”中對該課程所涉及的內(nèi)容(軟件建模與分析MAA)做出規(guī)定,主要有建?;A(chǔ)(MAA.md)、模型分類(MAA.tm)、分析基礎(chǔ)(MAA.af)、需求基礎(chǔ)(MAA.rfd)、需求獲?。∕AA.er)、需求規(guī)約與文檔(MAA.rsd)、需求確認(rèn)(MAA.rv)等7個部分。同時規(guī)定,根據(jù)該課程內(nèi)容的要求,選擇一種先進(jìn)的軟件分析建模平臺(如SAP Sybase Power Designer、Microsoft Office Visio、CA Erwin、IBM Rational等)開展教學(xué)工作。結(jié)合計算思維的特點(diǎn)和學(xué)校的實際情況,該課程的教學(xué)要求、教學(xué)目標(biāo)和教學(xué)內(nèi)容修訂如下。
要求學(xué)生掌握軟件分析與建模的基本理論,能夠正確建立軟件系統(tǒng)的需求模型、數(shù)據(jù)模型和應(yīng)用程序模型。掌握軟件分析建模的工作過程,采用抽象、約簡、嵌入和轉(zhuǎn)化等方法逐步細(xì)化完善軟件分析與建模,同時采用目前流行的軟件分析與建模工具完成軟件系統(tǒng)的需求建模、業(yè)務(wù)流程建模,并繪制概念數(shù)據(jù)模型、物理數(shù)據(jù)模型和應(yīng)用程序模型(UML模型)。
軟件分析與建模課程主要培養(yǎng)學(xué)生的軟件需求分析、系統(tǒng)結(jié)構(gòu)設(shè)計、軟件模型抽象等能力,使學(xué)生能夠根據(jù)計算思維的主要原則和方法,針對用戶需求建立相應(yīng)的模型,設(shè)計出軟件的邏輯結(jié)構(gòu),采用專業(yè)的需求分析和描述工具完成軟件設(shè)計的工作,進(jìn)而培養(yǎng)求解復(fù)雜科學(xué)問題的計算思維能力和解決工程實際問題的軟件分析與建模能力。
在軟件工程專業(yè)開設(shè)軟件分析與建模,主要講述構(gòu)造軟件系統(tǒng)數(shù)據(jù)結(jié)構(gòu)以及程序結(jié)構(gòu)的重要理論和方法,是重點(diǎn)培養(yǎng)學(xué)生應(yīng)用可視化方法建立軟件系統(tǒng)模型的課程,也是從事軟件設(shè)計、開發(fā)的工程技術(shù)人員必須掌握的一門專業(yè)課程。課程選擇Sybase PowerDesigner為實踐平臺,主要開展的教學(xué)內(nèi)容包括需求建模、業(yè)務(wù)建模、數(shù)據(jù)建模和應(yīng)用程序建模。業(yè)務(wù)建模以業(yè)務(wù)流程語言為基礎(chǔ),數(shù)據(jù)建模以實體聯(lián)系模型理論為基礎(chǔ),應(yīng)用程序建模以UML語言為基礎(chǔ)。業(yè)務(wù)建模包括需求模型、業(yè)務(wù)流程模型和信息流模型;數(shù)據(jù)建模包括概念數(shù)據(jù)模型、物理數(shù)據(jù)模型、維模型、XML模型;應(yīng)用程序建模包括用例圖、對象圖、類圖、組件圖、組合結(jié)構(gòu)圖、部署圖、時序圖、通信圖、活動圖、狀態(tài)圖、包圖等12種圖形。
軟件分析與建模的教學(xué)以計算思維能力培養(yǎng)為中心點(diǎn)著手教學(xué)改革,在課程教學(xué)中高度融合計算思維的思想和方法,使學(xué)習(xí)者掌握計算機(jī)方法論,提升計算思維能力,運(yùn)用計算機(jī)的相關(guān)原理、方法和技術(shù)去求解問題,設(shè)計系統(tǒng)和理解人類的行為。
抽象是精確表達(dá)問題和建模的方法,也是計算思維的本質(zhì)特征之一。軟件分析與建模的很多概念和方法都體現(xiàn)了抽象的思想,例如數(shù)據(jù)模型中的概念數(shù)據(jù)模型和物理數(shù)據(jù)模型,以需求規(guī)格說明為依據(jù),從信息的角度抽象表達(dá)了現(xiàn)實世界,形成現(xiàn)實世界與信息世界的映射。在具體知識的講授教學(xué)過程中,將計算思維的思想和方法融入具體知識的講授中,引導(dǎo)學(xué)生發(fā)現(xiàn)問題的本質(zhì)和蘊(yùn)含的規(guī)律,是切實可行的,并能有效促進(jìn)學(xué)生計算思維能力的提升。如在案例教學(xué)中,學(xué)生熟知的教務(wù)管理系統(tǒng),在建立數(shù)據(jù)模型時,應(yīng)從系統(tǒng)提取基本實體(學(xué)生、教師和課程)理解課程編排、學(xué)生成績與這幾個實體之間的依賴關(guān)系。在建立初步的模型之后,逐步審查需求中具體功能要求和處理流程,逐步完善系統(tǒng)的數(shù)據(jù)模型。采用這種遞進(jìn)迭代的分析方法,使學(xué)生能夠盡快熟悉軟件分析與建模的一般原理和方法。
軟件分析與建模的結(jié)果通常是以圖形的方式表示,軟件建模的工具(如PowerDesigner)等不僅能圖形化地表示模型,而且能夠建立多種模型之間的聯(lián)系,實現(xiàn)模型的自動轉(zhuǎn)化,并進(jìn)行一致性檢查,這本身體現(xiàn)了計算思維的自動化本質(zhì)。例如,在講述概念數(shù)據(jù)模型和物理數(shù)據(jù)模型等相關(guān)概念時,以現(xiàn)實世界的需求描述出發(fā),采用關(guān)系數(shù)據(jù)庫的原理和知識,結(jié)合分層次的抽象方法和自動化工具,從而形成多種數(shù)據(jù)模型,既清楚說明數(shù)據(jù)模型的相關(guān)概念,又逐步引導(dǎo)學(xué)生理解、掌握抽象和自動化的計算思維本質(zhì)。
關(guān)注點(diǎn)分離作為計算思維的核心思想,是控制和解決復(fù)雜問題的一種思維方法,其實質(zhì)是采用抽象和分離的方法分析復(fù)雜問題[3]。關(guān)注點(diǎn)分離原則在軟件開發(fā)的多個方面都有所體現(xiàn)[4]:將問題領(lǐng)域和實現(xiàn)領(lǐng)域的關(guān)注點(diǎn)分離;對軟件開發(fā)時間關(guān)注點(diǎn)的分離;通過系統(tǒng)組件的分離;通過對軟件功能特性與軟件質(zhì)量特性的分離與綜合等。Jacobson提出的基于用例的面向方面軟件開發(fā)方法(AOSD, Aspect-Oriented Software Development)[5],就是一種關(guān)注點(diǎn)分離的方法。
在軟件分析與建模過程中,采用的就是分而治之的思想,體現(xiàn)為過程分離、相互銜接。在分析過程中,采用軟件工程的思想,將軟件功能分解為相對獨(dú)立的子任務(wù),對子任務(wù)進(jìn)行業(yè)務(wù)流程建模和UML建模,設(shè)計數(shù)據(jù)結(jié)構(gòu),這些子任務(wù)相對獨(dú)立而又相互聯(lián)系。在進(jìn)行課堂教學(xué)時,將這些思想和方法貫穿于分析與建模的知識講授中,使學(xué)生逐步理解關(guān)注點(diǎn)分離的思想和方法,從而掌握從不同視圖進(jìn)行分析與建模并綜合反映全貌的方法。
在課堂講授中,結(jié)合學(xué)生所熟知的案例說明相關(guān)的教學(xué)內(nèi)容,可以使學(xué)生更容易理解和體會所學(xué)內(nèi)容,為此,選擇學(xué)生上機(jī)系統(tǒng)和圖書借閱管理系統(tǒng)進(jìn)行案例說明。在上述案例的分析與建模過程中,結(jié)合計算思維的抽象、自動化、關(guān)注點(diǎn)分離等思想和方法,先總后分的將任務(wù)劃分為相對獨(dú)立的子任務(wù),從不同的側(cè)面和角度完成系統(tǒng)的分析和建模,最后建立完整的模型。在概念數(shù)據(jù)模型中,關(guān)注于系統(tǒng)的數(shù)據(jù)建模,可從需求中提取所需的實體及其聯(lián)系,包含“用戶”“存款”“操作員”“上下機(jī)”“參數(shù)表”和“上機(jī)標(biāo)準(zhǔn)”等6個實體,這些實體中存儲的信息之間存在一定的聯(lián)系,概念數(shù)據(jù)模型如圖1所示。根據(jù)該系統(tǒng)的概念數(shù)據(jù)模型生成的MS SQL Server 2000的物理數(shù)據(jù)模型如圖2所示。
在業(yè)務(wù)流程分析階段,關(guān)注于業(yè)務(wù)流程的處理過程,如在該系統(tǒng)中,卡注冊是學(xué)生上機(jī)管理系統(tǒng)的業(yè)務(wù)之一,它的業(yè)務(wù)流程如圖3所示。
通過這些教學(xué)案例,使學(xué)生切實體驗到軟件分析與建模在軟件開發(fā)中的作用,提高了軟件分析與建模的實際應(yīng)用能力,加深了對計算思維的理解。
通過對軟件分析與建模知識的學(xué)習(xí)和對實際應(yīng)用系統(tǒng)開發(fā)的理解,使學(xué)生逐步掌握和理解分析建模的具體方法和步驟,做到心中有數(shù)、有條不紊??傮w來講,主要有以下方面:從需求出發(fā),總體上把握系統(tǒng)的功能,提取所需要管理(處理)的數(shù)據(jù);建立數(shù)據(jù)模型,提取實體,明確屬性、實體之間的聯(lián)系,逐步細(xì)化添加相關(guān)的約束條件;建立應(yīng)用程序模型。劃分系統(tǒng)的組成、明確處理流程,采用UML建立相應(yīng)的模型;深入理解系統(tǒng)的需求,所設(shè)計的方案是否符合要求,是否有更好的設(shè)計方案,方案的優(yōu)點(diǎn)和缺點(diǎn)。
圖 1 學(xué)生上機(jī)管理系統(tǒng)的概念數(shù)據(jù)模型
圖 2 學(xué)生上機(jī)管理系統(tǒng)的物理數(shù)據(jù)模型
圖 3 學(xué)生上機(jī)管理系統(tǒng)的卡注冊業(yè)務(wù)流程
通過上述建模過程的講解和實踐。使學(xué)生做到從整體到局部,遞進(jìn)迭代、有序進(jìn)行軟件的分析建模,從多個維度分析軟件需求,并建立相應(yīng)的模型。
計算思維的能力培養(yǎng),需要針對以上的內(nèi)容進(jìn)行有針對性的強(qiáng)化和訓(xùn)練,從傳統(tǒng)的知識傳授轉(zhuǎn)向面向具體問題,運(yùn)用所學(xué)知識解決實際問題,使學(xué)生掌握解決問題的方法和步驟。
實踐教學(xué)環(huán)節(jié)包括課后練習(xí)、分組討論和上機(jī)實驗等多種形式,使學(xué)生在學(xué)習(xí)相關(guān)知識之后不斷地思考和練習(xí)。在課堂講授相關(guān)的知識點(diǎn)和計算思維方法后,布置難度適當(dāng)?shù)牧?xí)題和思考題,學(xué)生獨(dú)立運(yùn)用計算思維的思想和方法完成;同時適當(dāng)布置較為復(fù)雜的思考題,供學(xué)生討論協(xié)作,分小組討論共同完成;隨后教師進(jìn)行總結(jié)和歸納,促進(jìn)學(xué)生加深理解。
在上機(jī)實驗的設(shè)計中,我們的目標(biāo)不僅僅局限于分析與建模平臺的操作使用,更側(cè)重于分析與建模能力的培養(yǎng),讓學(xué)生正確認(rèn)識軟件分析與建模在開發(fā)中的指導(dǎo)作用。使學(xué)生從代碼的實現(xiàn)細(xì)節(jié)中解脫出來,關(guān)注于軟件的模型和體系結(jié)構(gòu)。這一目標(biāo)的實現(xiàn)需要學(xué)生理解并認(rèn)識計算思維的主要原理和方法,使學(xué)生在獨(dú)立面對一個現(xiàn)實具體的應(yīng)用案例時,能夠用抽象、約簡、轉(zhuǎn)化等軟件分析與建模的思想和方法去建立問題的模型,并從不同的側(cè)面建立軟件的模型。教師還要引導(dǎo)學(xué)生從軟件的可擴(kuò)充性、移植性、可維護(hù)性等方面來衡量軟件建模的優(yōu)劣。
上機(jī)實驗內(nèi)容的設(shè)計采用以軟件項目為驅(qū)動,通過案例分析加強(qiáng)對分析與建模內(nèi)容的理解,然后以小組分工完成類型和規(guī)模相似的項目,并說明相應(yīng)的考核要求。將學(xué)生所學(xué)的專業(yè)知識與具體實踐技能有機(jī)結(jié)合,從而鍛煉學(xué)生對計算思維方法的運(yùn)用,探索解決實際問題的過程,有效避免了重考試輕過程的弊端。
經(jīng)過多年的教學(xué)探索和實踐,太原科技大學(xué)的軟件分析與建模課程教學(xué)取得了一系列的成果:編寫了《軟件分析建模與PowerDesigner實現(xiàn)》等教材,建設(shè)精品網(wǎng)站并榮獲山西省精品課程的稱號等。2014年在教學(xué)方法上引入計算思維導(dǎo)向的教學(xué)方法研究,開展了基于案例教學(xué)的教學(xué)改革,對軟件分析課程體系進(jìn)行改革探索,并取得較好的成效。學(xué)生在需求分析和軟件建模能力、數(shù)據(jù)建模能力、綜合分析問題和解決問題的能力以及團(tuán)隊協(xié)作意識方面都得到了很大的提高。藍(lán)橋杯競賽獲獎的同學(xué)在課程體會中的感言或許是有力的例證:“軟件分析與建模不僅僅是一門課程,更重要的是它是一種解決問題、分析問題的重要方法。采用所學(xué)的方法,能夠使我們在面對復(fù)雜的系統(tǒng)時把握問題的關(guān)鍵和要點(diǎn),不再是一種茫然無頭緒的狀態(tài),讓我們獲益匪淺”。筆者接下來將進(jìn)一步探索軟件分析與建模中對計算思維的培養(yǎng);結(jié)合實際,逐步完善實訓(xùn)選題;在課堂教學(xué)中引入當(dāng)前軟件分析與建模的發(fā)展趨勢等。
[1]Wing J M. Computational Thinking[J]. Communications of ACM, 2006, 49(3): 33-35.
[2]陳國良, 董榮勝. 計算思維與大學(xué)計算機(jī)基礎(chǔ)教育[J]. 中國大學(xué)教學(xué), 2011(1): 7-12.
[3]朱亞宗. 論計算思維: 計算思維的科學(xué)定位、基本原理及創(chuàng)新路徑[J]. 計算機(jī)科學(xué), 2009, 36(4): 53-55.
[4]何明昕. 關(guān)注點(diǎn)分離在計算思維和軟件工程中的方法論意義[J]. 計算機(jī)科學(xué), 2009, 36(4): 60-63.
[5]Jacobson I, Ng P W. Aspect-oriented software development with use cases[M]. BeiJing: China Machine Press, 2006.