摘要:本文針對“軟件技術基礎”課程的特點和要求,總結筆者多年來的教學實踐經驗,提出了基于案例驅動的軟件技術基礎教學方法、基于抽象模型的軟件技術基礎教學方法以及實際課堂教學與虛擬課堂教學相結合的軟件技術基礎教學方法等。實踐結果表明這些教學方法可操作性強,且行之有效。
關鍵詞:應用案例;案例庫;案例驅動;抽象模型;虛擬課堂
中圖分類號:G642文獻標識碼:A
“軟件技術基礎”是同濟大學電子與信息工程學院的公共平臺課程,它面向非計算機專業本科生,旨在介紹有關軟件方面的一些基礎知識。本課程的特點:(1)內容多,涉及面廣。它主要包括數據結構、操作系統、數據庫技術及軟件工程等內容,對于計算機專業的本科生來說,這里的每一個知識點都單獨開設一門課程,且四部分內容缺乏內在聯系。(2)軟件開發技術和開發平臺更新快。(3)面向的對象來自不同專業,有關計算機方面的基礎知識差異較大。(4)課時較少,周學時為2。從2004級開始,該課程被列入學院公共平臺課程,因為它面向的是非計算機專業的本科生,它不屬于主干專業課程,所以其課時也由原來的周學時3縮減為2。上述因素給該課程的教與學工作帶來很大困難和問題。如,(1)部分同學感到內容繁多,難以抓住重點。(2)有些概念或理念建立不起來,如算法概念,算法和程序總是混淆。(3)面臨實際問題感到無從下手,理論和實際脫節。另一方面,傳統的教學方法所產生的矛盾也更加突出:重算法,輕案例;重理論,輕實驗;考試方法也存在著片面性,有的學生可能考試成績優良,但遇到實際問題不知所措,有“紙上談兵”之弊。鑒于此,本文基于筆者長期對教學方法的探索和教學經驗的積累,提出了基于案例驅動的、基于抽象模型的以及與虛擬課堂相結合等幾種軟件技術基礎課程教學方法。
1基于案例驅動的教學方法
案例驅動的教學方法筆者之前已經有所探索[1],但當時僅限于提出了一種教學理念和教學方法實施框架,其可操作性和有效性還存在嚴重不足。其原因是:(1)應用案例過于復雜,且與相關知識點的對應性不強。(2)應用案例少,不足以構成豐富的、系統的、組織結構合理以及便于檢索的案例庫。在近兩年多的時間里,筆者重點研究了如下問
題:(1)案例的設計與實現。設計的應用案例力求難易適中、針對性強和對本課程的覆蓋面廣,以便于基于案例驅動的教學方法可以貫穿本課程教學的全過程。(2)設計并建立了案例庫。研究了案例庫中案例的組織、存儲和檢索方法,使所提出的教學方法具有可操作性。
1.1案例庫及其三要素
所謂基于案例驅動的教學方法是指針對該課程教學大綱內容,首先設計并實現若干個典型應用案例,每個案例都對應一個或多個相關知識點,并對這些案例進行合理組織和存放,以便于檢索和查找。由這些案例組成該課程的案例庫。在教學活動中,當教授到某個知識點時,通過一定的檢索方法在案例庫中查找相關案例,如按知識點關鍵字檢索。然后,教師通過演示案例(包括演示案例實現過程-Flash程序和案例實現結果-Visual C++程序)使學生對該知識點有了感性認識,同時使相應的抽象概念或理念具體化和形象化。更進一步,教師通過分析案例的設計步驟:需求分析、概念設計,詳細設計和代碼實現,引導學生掌握面臨實際問題時,如何應用學過的理論知識,去分析問題和解決問題的能力。
基于案例驅動的教學方法成功實施的關鍵要素是案例庫。一個成功的案例庫必須滿足如下三個要素:(1)案例具有代表性和針對性。只有案例庫中的應用案例設計合理,且具有代表性和針對性,才能對相關知識點的學習起到輔助功能。(2)案例具有多樣性。只有案例庫中有豐富多樣的案例,才能覆蓋該課程的絕大部分知識點,使關鍵知識點都有案例可以演示。否則,如果庫中案例太少,那么基于案例驅動的教學方法的效果將大打折扣,最多只是一種教學理念而已。(3)案例組織結構合理性。隨著案例庫中案例的不斷積s累,對案例的組織和存放形式必須合理規劃,以便于檢索、查找和鏈接。
1.2案例設計與實現
依據相關知識點的學習,精心設計一些典型應用案例,幫助學生掌握相關理論知識的學習,提高學生理論聯系實際、分析問題和解決問題的能力。經過前期教學積累和2006年校教改項目的實施,目前為止,我們案例庫中已設計并實現了十幾個典型應用案例。主要包括三類:(1)針對算法概念的案例,目的是幫助學生區分算法、程序和計算方法,使學生能由之前的程序概念提升到算法設計理念。(2)針對數據結構知識點的案例,目的是讓學生理解數據作為軟件處理的主要對象,其數據結構的設計在軟件設計中的重要性。同時讓學生區分數據的邏輯結構和物理結構,以及掌握數據物理結構的實現方法等。(3)針對數據庫技術知識點的案例,目的是幫助學生了解數據庫相關技術、數據庫應用程序的設計和實現方法。
1.2.1基于算法知識點的案例設計與實現
講解數據結構的切入點是算法。首先要讓學生掌握算法概念,理解算法和程序以及計算方法的區別,培養學生面臨實際問題時先設計算法而不是直接編寫代碼的習慣,這樣在設計前期無需考慮許多與方法和分析無關的細節問題,把主要精力放在算法設計上,以便于設計出更優的算法。除此之外,該知識點還要讓學生熟悉并應用常用的幾種算法設計方法:列舉法、回溯法、歸納法和遞推法等。目前,我們已經開發了兩個案例分別對應列舉法和回溯法:百雞問題和皇后問題。限于篇幅,下面僅對皇后問題的設計與實現給出簡單說明。
問題描述:由n×n個方格排成具有n行和n列的正方形,稱為“n元棋盤”。如果兩個皇后位于棋盤上的同一行、同一列或同一對角線上,則稱她們為互相攻擊。要求找出n個皇后在n元棋盤上互不攻擊的所有布局。
實現方法:n個皇后在n元棋盤上有n2種布局,如果用列舉法,則需在n2種布局中剔除相互攻擊的布局。那么,當問題尺度n較大時,該算法的時間開銷(時間復雜度)將會急劇增加,這也不符合算法設計的初衷。所以我們采用了回溯法,也稱試探法。即分析實際問題,找出一種解決問題的路徑。然后,沿著這個路徑逐步試探。對于每一步的試探,如試探成功,則繼續,直到求得問題的解。如試探不成功,則原路逐步返回,換另外路徑試探。如果所有路徑都試探不成功,則問題無解。在布局第i(i=1…n)個皇后時假設前面i-1個皇后已經布好,尋找第i個皇后與前i-1個皇后互不攻擊的布局,若找不到,則沿原路逐步返回,撤消第i-1個皇后的布局,重新尋找新的布點,以此類推。實現結果如圖1所示。
1.2.2數據結構知識點的案例設計與實現
數據結構知識點是軟件技術基礎的重要組成部分,它占用了相對多的篇幅和課時,是該課程的重點和難點。傳統的教學方法是占用大量課時講解各種偽碼描述的算法,而教學效果不盡人意,學生僅僅限于理解了偽碼描述的算法思想,但遇到實際問題時對數據的邏輯結構和物理結構的設計,尤其是物理結構的實現往往感到無從下手。
數據結構是指同一數據對象中各數據元素之間的關系。數據結構可分為4類:(1)集合-數據元素之間除了“同屬于一個集合”外,再無其他關系;(2)線性結構-元素之間存在一對一(1:1)的關系;(3)樹型結構-元素之間存在一對多(1:n)的關系;(4)圖狀結構-元素之間存在多對多(m:n)的關系。我們設計并實現了如下三個應用案例對應上述第2~4種數據結構,以輔助相關知識點的教與學。限于篇幅,下文所有案例僅就其設計目的以及它們與相關知識點的對應關系進行論述,同時部分案例給出實現結果。至于設計與實現的過程和方法不是此文的關鍵,故不贅述。
(1) 學生信息管理系統:該案例實現學生信息查找、修改、插入、刪除和顯示等功能。它對應線性鏈表知識點。通過設計、實現和運行該案例,使學生加深理解并掌握線性表、線性表的鏈式存儲結構以及線性鏈表的各種基本運算(查找、修改、插入、刪除、排序及顯示等功能)[2]。
(2) 哈夫曼編碼與譯碼:該案例實現哈夫曼樹構造(哈夫曼編碼)與哈夫曼譯碼功能。它對應樹結構。通過該案例的設計和實現步驟,學生對樹及其同構型多重鏈表存儲結構的理解更加具體化,并通過演示Flash程序,幫助學生掌握哈夫曼樹生成和哈夫曼譯碼的算法實現思想。目前該案例經過功能完善和技術優化,很好地解決了葉結點輸入方式(實現了鍵盤輸入、文件導入和文章字符統計三種輸入方式。)、哈夫曼樹的顯示模式以及大問題規模尺度(問題尺度可達100)等難點問題[3]。實現結果如圖2所示。
(3) 旅行商(TSP: Traveling Salesman Problem)問題:該案例也稱為交通咨詢系統,它可以解答旅客提出的各種問題,如:從A城市到B城市,選擇一條途中中轉次數最少的路徑(假設城市交通網絡圖中的每一站都需要換乘);從A城市到B城市,選擇一條交通費用最少的路徑;從A城市到B城市,選擇一條旅行時間最短的路徑等。該案例旨在幫助學生理解并掌握圖形結構(有向網)、圖的物理存儲結構(鄰接表和鄰接矩陣)、圖的遍歷以及圖的應用(單源最短路徑)等相關知識點。
1.2.3數據庫技術知識點的案例設計與實現
數據庫技術是研究數據的分類、組織、儲存、檢索及維護等功能的一門計算技術,是發展最快的領域之一,也是應用最廣的技術之一。圖書管理系統[4]、企業設備管理系統[5]和客戶關系管理系統[6]都屬于數據庫應用系統,它們都包含一個小型數據庫系統,是一種以處理為中心的應用系統。這些案例的目標是通過完成從用戶需求分析、數據庫設計到上機編程及應用等全過程,進一步理解和掌握數據庫技術、面向對象方法(OO)以及軟件工程方法等相關理論知識的學習。下面對企業設備管理系統作一簡單介紹,其他案例見相應參考文獻。
對于一個企業來說,要想在激烈的市場競爭中成為最后的贏家,就必須不斷地改善管理和經營水平。企業的財產和物品只有最大地發揮它們的用處才能有效地減少折舊成本,提高經濟效益。尤其是設備比較多的生產性企業,如果采購回來的設備堆放在庫房里不聞不問,借出和歸還也沒有詳細記錄,這樣的無序使用和低水平管理將極大地影響企業的正常運營。因此,對企業設備進行庫存管理是十分必要的。本文的設備管理系統就是為滿足該需求而設計的,它面向的對象是汽車租賃公司,它能夠保證設備(汽車)借出和歸還有序,進而指導企業合理地配置設備,提高設備利用率。該案例的主要執行界面如圖3所示。
2基于抽象模型的教學方法
操作系統部分是軟件技術基礎課程的重點,也是難點。對于非計算機專業本科生而言,學習操作系統的目的,并不是為了開發、編制操作系統,主要是了解操作系統的功能、組成部分、工作原理及體系結構,以便能更合理、有效地使用操作系統。顯然,前面所述的案例驅動的教學方法并不適用非計算機專業本科生學習操作系統。筆者認為基于抽象模型的教學方法是一種通用性好,且行之有效的教學方法。
操作系統結構龐大、模塊眾多,且模塊之間的聯系也很復雜。同時,隨著計算機技術的發展和用戶對計算機使用的要求不斷提高,多道程序設計技術成為操作系統的核心技術之一,目的是提高計算機系統的資源利用率,因而出現了與多道程序有關的概念,如并發性、共享性、虛擬性和不確定性等,由此產生的多道程序并發運行時的同步、互斥和死鎖等問題,是操作系統部分的重點和難點[7]。
操作系統文化中有許多被廣為討論和分析的有趣問題,最經典的四個同步、互斥問題為:生產者-消費者問題、哲學家進餐問題、理發師在空閑中的睡眠問題及讀者—作者問題,深入地分析和理解這些問題,對于全面掌握同步、互斥問題大有益處。限于篇幅,下面僅闡述基于生產者-消費者抽象模型解決同步與互斥問題的方法。
解決進程間的同步和互斥有多種方法,可以用硬件方法,也可以用軟件方法。最普遍的方法是用P-V操作實現。P-V操作實現進程的同步與互斥通常是教學中的重點,也是難點。重點是因為它是多道程序并發運行的一個重要的、不可避免的問題;難點具體表現在:學生不能掌握P-V操作中信號量的物理內涵,因此,當面對具體問題時,對如下問題往往感到不知所措:信號量所代表的具體物理含義是什么;如何確定信號量,即設置幾個信號量;各信號量的初值又是多少等。
生產者—消費者問題可作為并發進程的同步和互斥問題的一個抽象模型。因為,計算機系統中,每個進程都申請使用和釋放各種不同類型的資源,其中把使用某一類資源的進程稱為該類資源的消費者,而把釋放該類資源的進程稱為生產者。
模型描述:
設有n個生產者進程P1,P2,…Pn,m個消費者進程C1,C2, …Cm,它們通過一個容量為L的有界緩沖池聯系。只要緩沖池未滿,生產者就可把產品放入緩沖池;同樣,只要緩沖池不空,消費者就可從緩沖池取走產品消費;另不允許生產者和消費者同時訪問緩沖池,即緩存池對應一種計算機系統的臨界資源。其模型如圖4所示。
解題思路:
生產者-消費者問題既是一個同步問題,又是一個互斥問題。原因如下:
消費者想要取產品消費時,有界緩沖池中至少有一個單元有產品;
生產者想要放入產品時,有界緩沖池中至少有一個單元是空的;
有界緩沖池是臨界資源,生產者和消費者必須互斥地執行。
對應上述分析,設置兩個同步信號量:empty、full,一個互斥信號量mutex,分別表示有界緩沖池是否空、是否滿以及互斥使用有界緩沖池,則由問題的初始狀態可知三個信號量的初值為:empty=L、full=0、 mutex=1。
當面臨實際問題時,基于上述抽象模型,只要對應回答如下問題:哪些(個)進程是生產者,哪些(個)進程是消費者,哪種資源需放入緩存池互斥使用?即可解決信號量的設置及初始值的確定等問題。使學生有章可尋,有方法可依,同時使抽象的P-V操作具體化,取得很好的教學效果。
3與虛擬課堂相結合的教學方法[8]
為了彌補課堂教學的不足(課時少、互動交流少等),我們還建立了軟件技術基礎課程教學網站,并鏈接在電信學院網站上,使學生、教師等有關人員可以遠程訪問該網站。
該網站主要包括:(1)信息公告模塊,主要用來發布提交作業、考試以及實驗等通知。(2)教學資源模塊,教學資源包括教學進度表、教學大綱、課件、相關教學論文、典型應用案例、優秀作業以及優秀實驗報告等,學生可按需瀏覽和下載。(3)你問我答模塊,為教師和學生、以及學生之間提供了一個交互平臺,可以實現質疑、答疑及交流學習方法等。主要網頁如圖5所示。有關課程網站的設計與實現詳見文獻[8]。
4結論
本文總結了筆者多年的教學經驗和研究成果,提出了基于案例驅動的、基于抽象模型的及與虛擬課堂相結合的三種軟件技術基礎教學方法。配合2007年教育部對同濟大學本科教學水平的評估工作,我們分析了“軟件技術基礎”2005~2006學年(2)學期和2007~2008學年(1)學期的期終試卷(非計算機專業本科),如表1所示。其中的一個指標—試卷平均得分能充分說明教學方法改進后所取得的教學效果。今后的工作是繼續探討和實踐其他教學方法,如基于算法執行的方法等,待完善后再續。
參考文獻
[1] 郭秀清. 基于案例組織的軟件技術基礎教學方法研究[J]. 電氣電子教學學報,2006,28(5):23-26.
[2] 楊玉峰,郭秀清. 學生信息管理系統設計與實現[D]. 上海:同濟大學本科畢業設計論文,2006.
[3] 任峰,郭秀清. 哈夫曼編碼與譯碼實現[D]. 上海:同濟大學本科畢業設計論文,2008.
[4] 魏偉,郭秀清. 圖書管理系統設計與實現[D]. 上海:同濟大學本科畢業設計論文,2006.
[5] 錢立虎,郭秀清. 企業設備管理系統設計與實現[D]. 上海:同濟大學本科畢業設計論文,2007.
[6] 莫會宇,郭秀清. 客戶關系管理系統設計與實現[D]. 上海:同濟大學本科畢業設計論文,2007.
[7] 沈被娜等. 計算機軟件技術基礎[M]. 北京:清華大學出版社,2000.
[8] 饒弛,郭秀清. 軟件技術基礎教學網站設計與實現[D]. 上海:同濟大學本科畢業設計論文,2008.
Research on Teaching Methods for Software Technology Foundation
GUO Xiu-qing
(College of Electronics Information Engineering, Tongji University, Shanghai 201804)
Abstract: In according with software technology foundation’s special characteristics and requirement, this paper summers writers’ direct teaching experience for many years, and provides three teaching methods for software technology foundation, they are based on cases-driven, based on abstract model and combining real class teaching with virtual class teaching. The result of teaching practice proves these methods are operative and effective.
Keywords: used cases, cases warehouse, cases-driven, abstract model, virtual class
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文