文章編號:1672-5913(2008)20-0060-04
摘 要:本文對3本國內(nèi)《軟件工程》教材及2本引進的美國《軟件工程》教材進行比較分析,并結(jié)合筆者從事軟件工程教學的經(jīng)驗,分類總結(jié)了該課程的若干教學實施方法。
關(guān)鍵詞:軟件工程;教材;教學方法;比較教育研究
中圖分類號:G642
文獻標識碼:B
1 中美《軟件工程》教材編寫比較
我們以歷年教學中使用過的三本國內(nèi)教材及作為教學參考書使用過的兩本國外引進教材為研究對象,分別就軟件工程的地位、教學內(nèi)容、講授方法、實踐環(huán)節(jié)安排等問題進行比較分析。作為研究對象的五本教材列于表1。為了敘述方便起見,按表1順序五本教材分別簡稱為“湯本”、“劉本”、“張本”、“鄭譯本”和“影印本”。
1.1 關(guān)于軟件工程的地位及開設(shè)該課程的意義
“湯本”沿用IEEE對軟件工程術(shù)語的定義:“以優(yōu)質(zhì)、高效、低成本為目標,研究開發(fā)、運行和維護軟件以及使之退役的系統(tǒng)方法”?!皽尽鼻把灾兄赋鲕浖こ陶n程“為學生后續(xù)的專業(yè)課程教學和工程實踐環(huán)節(jié)提供必要的方法學基礎(chǔ)和能力訓練,同時也是學生參加工作后立即面臨的最直接應用基礎(chǔ)?!笨梢?,“湯本”強調(diào)的是“方法學”及方法學訓練。
“劉本”引用IEEE Standard Glossary of Software Engineering Terminology給出的一個“軟件工程”更為全面的定義:“軟件工程是①將系統(tǒng)性的、規(guī)范化的、可定量的方法應用于軟件的開發(fā)、運行和維護,即將工程化應用到軟件上;②對①中所述方法的研究”。“劉本”在前言中又指出“軟件工程不僅從方法論的角度為管理人員和開發(fā)人員提供可見的結(jié)構(gòu)和有序的思考方式,而且從大量軟件開發(fā)的成功經(jīng)驗總結(jié)出設(shè)計模式、框架、部件庫等,軟件工程正在逐步發(fā)展為一門成熟的專業(yè)學科”。“劉本”在進一步指出方法的“系統(tǒng)性”、“規(guī)范化”、“可定量”特征的同時,強調(diào)軟件工程的專業(yè)性。為此,該教材1.3節(jié)專門介紹了IEEE和ACM聯(lián)合研究項目——SWEBOK
(軟件工程知識體系)所包含的10個知識領(lǐng)域。
“張本”指出,軟件工程是“研究軟件開發(fā)與維護的普遍原理和技術(shù)”,同時認為“一本書中不可能包含軟件工程的全部內(nèi)容,入門介紹從實用角度講述軟件工程的基本原理、概念和方法”。
“鄭譯本”的原書前言指出,“為了獲得成功,在設(shè)計和開發(fā)軟件時,我們需要有規(guī)范,需要有工程化的方法”。該書新版第6版“更加強調(diào)一些新的和重要的軟件工程過程和實踐”。
“影印本”在回答“What is software engineering?”(什么是軟件工程?)時這樣寫道“As software engineering, we use our knowledge of computers and computing to help solve problems.”(軟件工程意味著我們應用計算機和計算科學的知識幫助解決問題)。在小結(jié)中寫道:“Software engineers use tools, techniques procedures , and paradigms to enhance the quality of their software products.”(軟件工程師應用工具、方法、過程和范式來增進軟件產(chǎn)品的質(zhì)量)?!癟heir aim is to use efficient and productive approaches to generate effective solutions to problems.”(其目標是應用有效和生產(chǎn)性的方法產(chǎn)生問題的有效解答)。
不難看出兩本引進教材更加強調(diào)軟件工程的“實踐性”、“生產(chǎn)性”,這與國內(nèi)教材強調(diào)“學科性”、“基礎(chǔ)性”不同。對軟件工程認識上的這種差異,決定了中美兩國“軟件工程”教材在教學內(nèi)容、講授方法及實踐環(huán)節(jié)安排等方面的諸多差異,最終也將決定學生勝任第一任職崗位需要的差別。國內(nèi)學生畢業(yè)時雖有較好的基礎(chǔ),但往往需要數(shù)月、半年至一年再培訓、再學習才能勝任崗位工作,這對美國學生是不可想象的。因為如果不能較快或立即適應工作,就意味著“失業(yè)”。
1.2 關(guān)于軟件工程的教學內(nèi)容
“湯本”的教學內(nèi)容主要講傳統(tǒng)方法即結(jié)構(gòu)化方法。這是考慮到“結(jié)構(gòu)化方法是軟件工程入門階段的最基本要求和大多數(shù)中、小型軟件開發(fā)中的實用技術(shù)”?!皽尽比珪?章,第1章概述,第2章軟件計劃,第3章需求分析,第4章軟件設(shè)計,第5章編碼,第6章軟件測試,第7章軟件維護,第8章軟件項目管理,附錄文檔參考大綱。“湯本”以SA(結(jié)構(gòu)化分析)、SD(結(jié)構(gòu)化設(shè)計)、SP(結(jié)構(gòu)化編程)為主線,結(jié)合一個“學生選課注冊系統(tǒng)”的實例進行分析。
“劉本”以IEEE最新發(fā)布的軟件工程知識體系(SWEBOK)為基礎(chǔ)構(gòu)建內(nèi)容框架,重點講面向?qū)ο蟮姆椒āF渌鼉?nèi)容則點到為止,并未展開闡述?!皠⒈尽比珪?1章,第1章概述,第2章軟件過程,第3章軟件項目管理,第4章需求工程,第5章形式化方法,第6章面向?qū)ο蠡A(chǔ),第7章面向?qū)ο蠓治?,?章面向?qū)ο笤O(shè)計,第9章軟件實現(xiàn),第10章軟件測試,第11章軟件演化、維護、再工程。其中,第4章、第6至第10章,以當前普遍流行的面向?qū)ο蠹夹g(shù)和UML(統(tǒng)一建模語言)為核心,全面、深入、系統(tǒng)地介紹軟件開發(fā)各個階段的任務、過程、方法和工具,并結(jié)合Minilibrary(小型圖書館系統(tǒng))實例進行分析。
“張本”既講結(jié)構(gòu)化方法,又講面向?qū)ο蠓椒?,因為“結(jié)構(gòu)分析和結(jié)構(gòu)設(shè)計技術(shù)現(xiàn)在仍然是人們在開發(fā)軟件過程中使用得非常廣泛的方法,在相當長一段時間內(nèi)這種方法還會有生命力”。“張本”全書15章,第1章概述,第2章可行性研究,第3章需求分析,第4章形式化說明技術(shù),第5章總體設(shè)計,第6章詳細設(shè)計,第7章實現(xiàn),第8章維護,第9章面向?qū)ο蠓椒▽W引論,第10章面向?qū)ο蠓治觯?1章面向?qū)ο笤O(shè)計,第12章面向?qū)ο髮崿F(xiàn),第13章軟件項目管理,附錄A C++類庫管理系統(tǒng)的分析與設(shè)計,附錄B 一個漢字行編輯程序的設(shè)計。其中第2~8章及附錄B介紹軟件生命周期各階段任務、過程、結(jié)構(gòu)化方法和工具。第9~12章及附錄A,用UML描述介紹面向?qū)ο蠓椒▽W引論、分析、設(shè)計和實現(xiàn)。
“鄭譯本”共32章,分為五個部分。第1章軟件工程介紹,單列一章。第一部分軟件過程,含第2章,考慮到所有重要的過程模型,涉及傳統(tǒng)過程和敏捷過程的爭論。第二部分軟件工程實踐,含第5章軟件工程綜述,第6章系統(tǒng)工程,第7章需求工程,第8章構(gòu)建分析模型,第9章設(shè)計工程,第10章進行體系結(jié)構(gòu)設(shè)計,第11章構(gòu)件級設(shè)計建模,第12章完成用戶界面設(shè)計,第13章軟件測試策略,第14章測試技術(shù),第15章產(chǎn)品度量。第三部分應用Web工程,含第16章Web工程,第17章開始一個WebApp項目,第18章WebApp分析,第19章WebApp設(shè)計,第20章WebApp測試。第四部分管理軟件項目,含第21至27章,給出的是與計劃、管理和控制軟件項目的人員有關(guān)的問題。第五部分軟件工程高級課題,含第28至第31章,分別涉及形式化方法、凈室軟件工程、基于構(gòu)件的開發(fā)、再工程及未來之路。
“影印本”全書共14章,分三個部分。第一部分含第1至第3章,分別論述軟件工程知識的重要性(第1章為什么需要軟件工程),理解過程的重要性(第2章過程和生命周期建模)以及完成項目計劃(第3章項目計劃和管理)。第二部分介紹軟件開發(fā)和維護的主要步驟,包括第4章需求分析,第5章系統(tǒng)設(shè)計,第6章對象,第7章程序編寫,第8章程序測試,第9章系統(tǒng)測試,第10章系統(tǒng)交付,第11章,系統(tǒng)維護。第三部分軟件的評估和改進,分析如何評價過程和產(chǎn)品的質(zhì)量,含第12章產(chǎn)品、過程和資源的評價,第13章預測、產(chǎn)品、過程和資源的改進,第14章軟件工程的前景。
需要說明的是,“影印本”從第一部分即給出貫穿全書的兩個通用實例,第1個例子代表典型的信息系統(tǒng),介紹了為一家大型英國電視公司確定廣告時間價格的軟件;第2個例子代表實時系統(tǒng),介紹Ariane5(阿里亞娜5)控制軟件。以后每一章都將所介紹的概念應用到這兩個通用實例中。
綜觀上述5本教材的內(nèi)容與組織可以看出,國內(nèi)教材是以結(jié)構(gòu)化方法或(和)面向?qū)ο蠓椒橹骶€,并結(jié)合管理信息系統(tǒng)的實例進行分析。實例的選擇主要從教學角度出發(fā),并不一定是實用的系統(tǒng)。引進教材尤其注重“實踐性”,突出當前軟件開發(fā)占主流的UML為描述工具的面向?qū)ο蠓椒?。對結(jié)構(gòu)化方法,則作了進一步抽象,不再作為單獨部分具體闡述。對于開發(fā)一個實用軟件所需要要的各個方面,特別是新技術(shù),如敏捷過程、構(gòu)件建模、凈室測試模型等都做了細致的分析。所選用實例都源自實際項目。這樣就能使學生獲得更接近當前軟件開發(fā)實際的知識和實用的方法,達到“學以致用”的目的。
1.3 講授方法及實踐環(huán)節(jié)安排
“湯本”的講授方法是“結(jié)合軟件開發(fā)實例進行講授”,湯本理論講授30學時,上機30學時。該教材從第二章開始就在習題中布置了一個“學生成績管理信息系統(tǒng)”的課題作業(yè),要求學生對該課題開展工作,隨教學進程完成相應階段的任務,提交相應文檔,并以小組為單位編碼、實現(xiàn)和測試。這種將實踐環(huán)節(jié)和理論講授融為一體的做法可圈可點。但是“湯本”并沒有相應材料支撐課題作業(yè)?!皽尽敝信e出一個“學生學期選課注冊系統(tǒng)”的范例,可惜也沒有貫徹始終,僅在“可行性研究”和“需求分析”中用過。這就給初學者帶來一些困難。
“劉本”和“張本”采用理論講授與實例分析相結(jié)合的方法,書中有大量實例,并有內(nèi)容豐富的習題配合?!皠⒈尽敝蠱inilibrary的實例分析較詳盡,對理解面向?qū)ο蟮姆椒ㄓ泻艽髱椭皇沁@個實例仍嫌不夠完整。
“張本”有兩個實例分析的附錄,分別講述了用面向?qū)ο蠓椒ê徒Y(jié)構(gòu)化方法開發(fā)兩個軟件的過程。與張本配套的教輔材料有《軟件工程導論學習輔導》和電子教案,給教學帶來很大方便,這也是本書受到教師、學生歡迎的一個重要原因。
“鄭譯本”采用的是案例導向的講授方法。書中提出一個Safe Home(住宅安全系統(tǒng))的教學案例,以對話形式逐步展開這一軟件的開發(fā)過程,讓讀者跟隨一個虛擬的項目組,跟隨他們的工作進程開發(fā)一個計算機應用系統(tǒng)。
“影印本”從第一部分就給出了兩個實際項目(英國廣播公司軟件和阿里亞娜火箭控制軟件)做為教學案例,并給出一個借貸處理系統(tǒng)的學期課題作為學生實踐項目。而后教材每一章都將所介紹的概念應用到這兩個實例中去,每一章也都包括學期課題的描述。作者的意圖是:“Students can follow the progress of two typical projects, seeing how the various practices described in the book are merged into the technologies used to build systems.”(學生能跟隨這兩個典型項目的進程,看到本書所描述的各種實踐方法如何融入為構(gòu)建系統(tǒng)所應用的技術(shù)中去)。并將從教學案例中獲得的認識遷移到完成學期課題的作業(yè)中。
由“鄭譯本”和“影印本”不難看出,案例教學法是從具體到抽象的方法,是美式教學的一個重要特點。反觀國內(nèi)教學,常常是從抽象到具體,先有知識框架,再舉例說明。這一點似乎反映了中美文化的差異,比如寫信封,中國的寫法由大到小,先寫國別、省、市,最后才是街道門牌號。美國寫法恰恰相反,由小到大去寫。中美兩種教學方法的各自長處,值得深思。
兩本引進教材的又一個顯著特點是具有強大的全方位支持系統(tǒng),特別是網(wǎng)上支持系統(tǒng)。如“鄭譯本”的支持系統(tǒng)包括在線學習中心向?qū)W生、教師和專業(yè)人員三類不同對象提供的幫助,既有向?qū)W生提供的各章學習指南、實習測驗和題解,也有向教師提供的在線教師指南、教學補充材料、PPT幻燈片800多幅及500多篇軟件工程的研究論文(分專題組織并可下載),還有向?qū)I(yè)人員提供的產(chǎn)業(yè)說明、軟件工程文檔和遠程教學資料等?!坝坝”尽钡闹С窒到y(tǒng)則包括書附光盤(學生學習指南,解答手冊)和教師上課用的準備材料(書中插圖和表格的PPT幻燈片)。除光盤資料還包括相關(guān)的Web網(wǎng)頁,含書中例子和實際項目的實例,實際需求文檔、設(shè)計、代碼、測試計劃以及單元實例的詳細擴充。“影印本”教材還包括一個帶有注釋的參考目錄及各章參考文獻列表。相比之下,國內(nèi)教材的支持系統(tǒng)還顯得比較薄弱,需要結(jié)合精品課程建設(shè),下大力氣趕上去。
引進教材的靈活性和排版樣式,也是值得稱道的。如“鄭譯本”雖然章節(jié)內(nèi)容比較多,但它向三類不同專業(yè)方向提供了不同的學習組合:“方法課”強調(diào)一、二兩部分;Web開發(fā)課強調(diào)二、三兩部分;管理課重點放在一、四部分。在版式上一改學術(shù)著作的生冷面孔,采用活潑的引人注目的版式,除文字、圖表等常規(guī)版式,增加要點瀏覽和關(guān)鍵概念的方框、帶圖標的簡要注釋以及文中插入的說明,其標題放在醒目的反白圓框中。凡此周到細致的安排舉措,都是充分考慮了學生的實際需求,怎樣方便學生學習使用,體現(xiàn)了“以學生為本”的教學理念,也是作者豐富的教學經(jīng)驗和軟件開發(fā)實踐經(jīng)驗,在教材編寫上的體現(xiàn)。
2 “軟件工程”教學實施策略之總結(jié)
通過中美軟件工程軟材編寫之比軟,結(jié)合筆者從事“軟件工程”課程的教學經(jīng)驗,茲將“軟件工程”教學實施策略作一簡要總結(jié)。
2.1 系統(tǒng)講授,結(jié)合實例分析的方法
以系統(tǒng)講授為主,結(jié)合實例分析幫助理解,實踐環(huán)節(jié)以習題作業(yè)為主要形式,有時需上機配合。如“張本”和“鄭本”。這是目前大多數(shù)本科院?!盾浖こ獭方虒W所采取的教學形式。這種教學形式雖然可以給予學生較系統(tǒng)的知識框架,但學生學習后往往仍然不知道該如何去開發(fā)一個實際的軟件項目。理論到實踐之間還是有一個不小的鴻溝。
2.2 以教學案例為導向的講授方法
教學案例源于已實際開發(fā)的項目,從教學一開始直至結(jié)束,所有概念、方法都會應用于這一(或二)個教學案例中。隨著案例項目的進展分析,完成全部教學內(nèi)容。如引進教材“鄭譯本”和“影印本”。這種方法國外相當流行,國內(nèi)采用的并不多,但這種方法的確可以在培養(yǎng)學生分析解決問題的能力上發(fā)揮更大作用,因而值得研究和發(fā)揚。
2.3 以軟件開發(fā)實例為導向的講授方法
這種方法是向?qū)W生布置一個課題作業(yè),采用邊學邊做的講授方式。如“湯本”,理論講授只有30學時,上機30學時,讓學生隨教學進程,圍繞課題作業(yè)開展工作。教師重點講解、給予輔導。這種方法能讓學生獲得一個軟件開發(fā)的整體性認識,無論對理論知識的理解還是實際應用都有較大幫助,是一個行之有效的方法,對筆者教學啟發(fā)很大。
2.4 以畢業(yè)設(shè)計課題為導向的講授方法
該法與2.3方法類似,不同之處在于前者(2.3)學生所做的課題作業(yè)是教師統(tǒng)一布置的,是從教學角度出發(fā)考慮的課題,課題并不是實用的項目,或只是實際項目的簡化版。而后者(2.3)學生所做課題是自行選擇的畢業(yè)設(shè)計課題,每個課題都來自實際需求,每一個學生(每一個小組)課題并不相同。這種講授方法基于將“軟件工程與畢業(yè)設(shè)計相結(jié)合”的教學研究(筆者承研的院級課題),是綜合課程改革的試驗。這種方法在提高學生的興趣和學習主動性,以及發(fā)揮學生的專長和創(chuàng)造力等方面,收到很大的成效。因其適合教育大眾化時期以“差異”、“多元”為顯著特點的教學,被我系任課教師認為是最有特色的課程改革(另文詳述)。
2.5 以自測試卷為綱,讓學生自主學習討論的方法
這種方法筆者在函授教學中采用過。首先要精心擬制一份自測試卷(詳見附錄二,使用“湯本”),同時可作為開卷考試卷,讓學生有針對性的去閱讀,討論和研究,教師給予指導和點評。這種教學方式可以促使學生帶著問題去看書、思索、討論獲得答案,比起讓學生泛泛看書和在課堂上“靜聽”效果要好,至少也能達到普及軟件工程知識和強化某些重要概念的目的。
3 結(jié)束語
對中美軟件工程教材編寫的比較研究,囿于手頭資料,本文僅限于筆者在計算機教育專業(yè)(成人本)和計算機應用專業(yè)(高職本、高職專)所選用過的三本教材和作為教學參考書使用過的兩本國外引進教材,未必全面。筆者深感國內(nèi)教材和引進教材在教材編寫指導思想、內(nèi)容的新穎性和實用性、講授方法以及教材支撐系統(tǒng)等方面還是有一定的差距,某些方面如教學實例、教學案例的選用差距還相當大。究其原因,一是教師可能缺乏軟件開發(fā)的實際經(jīng)歷,或缺乏在新的軟硬件平臺、網(wǎng)絡(luò)環(huán)境開發(fā)軟件的實際經(jīng)歷。另一個深層次原因應該已經(jīng)超出專業(yè)課本身,而涉及如何看待、處理系統(tǒng)教學和范例教學(案例教學)的關(guān)系這類課程論、認識論問題。我國多數(shù)高校教師沒有經(jīng)過系統(tǒng)的教學論、課程論的學習或研修,罕見科學設(shè)計的教學實驗,教學實踐的盲目性較大,往往跟著感覺走,這或許是影響教學和教材質(zhì)量從根本上提高的又一個重要原因。本文所總結(jié)的幾種軟件工程教學方法,需要根據(jù)不同專業(yè)、不同層次、不同教學對象靈活選用,相互補充。
附錄:軟件工程學函授試題
一、判斷(選擇)以下論述的正誤:在題號前(選項下)打?qū)μ柣蝈e號
1、軟件危機產(chǎn)生的原因是軟件產(chǎn)品固有的復雜性和軟件開發(fā)人員自身的缺陷。
2、軟件開發(fā)主要就是編程(Programming)。
3、比較適合初學者的軟件開發(fā)模型時是:瀑布模型/原型化模型/螺旋模型/組件模型。
4、可行性研究的目的是用最小代價在盡可能短的時間內(nèi)確定所要解決的問題在技術(shù)上是否可解。
5、軟件開發(fā)所需要的資源包括硬件資源和軟件資源。
6、SRS/DFD以一致、無二義性的方式準確回答了軟件系統(tǒng)What to do?/How to do?
7、經(jīng)驗表明軟件總體模塊結(jié)構(gòu)圖應為柱型/金字塔型/壇子型。
8、在詳細設(shè)計(模塊設(shè)計)中具有樹型結(jié)構(gòu)的模塊設(shè)計工具是:框圖/盒圖/PAD圖。
9、用C/VC++/JAVA開發(fā)一個圖書館管理系統(tǒng)的主要方法是:SA、SD、SP/OOA、OOD、OOP。
10、要提高模塊的獨立性,應盡量做到高內(nèi)聚、低偶合。
11、G.Myers關(guān)于軟件測試目的的要點是:盡可能多地發(fā)現(xiàn)程序中的錯誤,而不是驗證程序正確無誤。
12、測試中要特別注意測試尚未發(fā)現(xiàn)錯誤的模塊。
13、使用“白盒法”復蓋了被測程序的所有邏輯執(zhí)行路徑即能保證程序正確。
14、軟件的可維護性在軟件投入運行之初就應考慮。
15、軟件維護中應立即響應用戶的所有維護要求。
二、論述題:從以上判斷題中任選兩題,說明您選擇正確或錯誤的理由。
(答題寫在試卷背面)。