覃能杰
中圖分類號(hào):G642.41 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1002-7661(2015)10-0008-03
一、引言
計(jì)算機(jī)軟件復(fù)合人才的缺乏依然是我國計(jì)算機(jī)軟件產(chǎn)業(yè)可持續(xù)發(fā)展的瓶頸,經(jīng)過十幾年的發(fā)展,傳統(tǒng)的程序設(shè)計(jì)教學(xué)逐漸暴露出一個(gè)尖銳的問題:學(xué)生工作后,與軟件企業(yè)的實(shí)際人才需求存在較大偏差。通常畢業(yè)生都要在軟件企業(yè)里要經(jīng)過半年以上的磨練才能達(dá)到編寫實(shí)用代碼的水平。而剛從學(xué)校畢業(yè)的學(xué)生基本無法直接參與編程工作,必須經(jīng)一個(gè)月以上的培訓(xùn)才能在有經(jīng)驗(yàn)的“師傅”的帶領(lǐng)下進(jìn)行基本的編碼,半年以后才能開始獨(dú)立編碼。學(xué)生無法滿足企業(yè)用人需求的地方往往是兩個(gè)環(huán)節(jié):軟件工程素養(yǎng)和實(shí)踐創(chuàng)新能力。項(xiàng)目開發(fā)與溝通技巧,項(xiàng)目的規(guī)劃、進(jìn)度控制、設(shè)計(jì)與測試等流程都需要良好的素質(zhì),因此軟件工程理論教學(xué)與實(shí)踐的脫節(jié)是其中的重要原因之一。另外,實(shí)踐創(chuàng)新能力的缺乏表現(xiàn)為學(xué)生難以用創(chuàng)造性思維解決問題,難以突破傳統(tǒng)的思維模式尋求創(chuàng)新思路。
VisualBasic(下面簡稱VB)作為一門面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,具有簡單易學(xué)、功能強(qiáng)大、應(yīng)用廣泛的特點(diǎn),被公認(rèn)為是編程效率最高的一種編程工具。VB程序設(shè)計(jì)是一門實(shí)踐性很強(qiáng)的課程,要求學(xué)生既要學(xué)好理論知識(shí),又要掌握實(shí)際操作技能,其目的是培養(yǎng)學(xué)生程序設(shè)計(jì)和簡單的系統(tǒng)開發(fā)及應(yīng)用能力?;谀壳暗默F(xiàn)狀,VB語言枯燥難懂,學(xué)生缺乏相應(yīng)的背景知識(shí)。教師在教學(xué)過程中也缺乏一套良好的教學(xué)方法,使得這門課既難教又難學(xué)。軟件過程模型、軟件工程方法和軟件工具已在廣闊的行業(yè)應(yīng)用領(lǐng)域得到成功的采用。在此,試圖將軟件工程理論與VB教學(xué)相結(jié)合,探討如何引導(dǎo)學(xué)生從工程的角度解決程序設(shè)計(jì)問題,提高學(xué)生的綜合素養(yǎng)。
二、軟件工程基本理論
(一)軟件工程定義
B.w.Boehm認(rèn)為軟件工程就是運(yùn)用現(xiàn)代科學(xué)技術(shù)知識(shí)來設(shè)計(jì)并構(gòu)造計(jì)算機(jī)程序及為開發(fā)、運(yùn)行和維護(hù)這些程序所必須的相關(guān)文件資料。這里對(duì)“設(shè)計(jì)”一詞應(yīng)有廣義的理解,它包括軟件的需求分析和對(duì)軟件進(jìn)行修改時(shí)所進(jìn)行的再設(shè)計(jì)活動(dòng)。
IEEE說:“軟件工程是開發(fā)、運(yùn)行、維護(hù)和修復(fù)軟件的系統(tǒng)方法”,其中,“軟件”是計(jì)算機(jī)程序、方法、規(guī)則、相關(guān)的文檔資料以及在計(jì)算機(jī)上運(yùn)行時(shí)所必需的數(shù)據(jù)。
Faidey給出的軟件工程的定義為:軟件工程學(xué)為在成本限額以內(nèi)按時(shí)完成開發(fā)和修改軟件產(chǎn)品所需的系統(tǒng)生產(chǎn)和維護(hù)的技術(shù)與管理的科學(xué)。
《計(jì)算機(jī)科學(xué)技術(shù)百科全書》中的定義:軟件工程是應(yīng)用計(jì)算機(jī)科學(xué)、數(shù)學(xué)及管理科學(xué)等原理,開發(fā)軟件的工程。軟件工程借鑒傳統(tǒng)工程的原則、方法,以提高質(zhì)量、降低成本。其中,計(jì)算機(jī)科學(xué)、數(shù)學(xué)用于構(gòu)建模型與算法,工程科學(xué)用于制定規(guī)范、設(shè)計(jì)范型(paradigm)、評(píng)估成本及確定權(quán)衡,管理科學(xué)用于計(jì)劃、資源、質(zhì)量、成本等管理。
上面是軟件的幾個(gè)定義,其實(shí)概括起來就是軟件+工程。就是把工程學(xué)的思想應(yīng)用于軟件,但是軟件工程又不同于其他的工程,它有它特別的地方。采用工程的概念、原理、技術(shù)和方法來開發(fā)與維護(hù)軟件,把經(jīng)過時(shí)間考驗(yàn)而證明正確的管理技術(shù)和當(dāng)前能夠得到的最好的技術(shù)方法結(jié)合起來,這就是軟件工程。隨著信息化的不斷擴(kuò)大,軟件的范圍已經(jīng)越來越廣了,越來越大了。所以有一個(gè)良好的軟件開發(fā)方法,能有效的提高軟件的開發(fā)效率。軟件工程就是研究這一方面的。如同土木工程,建筑工程一樣,軟件也需要系統(tǒng)化,規(guī)范化,可量化的進(jìn)行開發(fā)。
(二)軟件工程基本要素
軟件工程包括了三個(gè)基本要素:方法、工具和過程。
軟件工程方法為軟件開發(fā)提供了“如何做”的技術(shù)。它包括了多方面的任務(wù),如項(xiàng)目計(jì)劃與估算、軟件系統(tǒng)需求分析、數(shù)據(jù)結(jié)構(gòu)、系統(tǒng)總體結(jié)構(gòu)的設(shè)計(jì)、算法過程的設(shè)計(jì)、編碼、測試以及維護(hù)等。
軟件工具為軟件工程方法提供了自動(dòng)的或半自動(dòng)的軟件支撐環(huán)境。目前,已經(jīng)推出了許多軟件工具,已經(jīng)能夠支持上述的軟件工程方法。已經(jīng)有人把諸多的軟件工具集成起來,使得一種工具生產(chǎn)的信息可以為其它的工具所使用,這樣建立起一種被稱之為計(jì)算機(jī)輔助軟件工程(CASE)的軟件開發(fā)支撐系統(tǒng)。
軟件工程的過程則是將軟件工程的方法和工具綜合起來以達(dá)到合理、及時(shí)地進(jìn)行計(jì)算機(jī)軟件開發(fā)的目的。軟件工程的過程定義了方法使用的順序、要求交付的文檔資料、為保證質(zhì)量和協(xié)調(diào)變化所需的管理及軟件開發(fā)各個(gè)階段完成的里程碑。
(三)軟件開發(fā)模型
軟件生命周期是軟件工程的基礎(chǔ),它由軟件功能的大小決定的。要開發(fā)一個(gè)高質(zhì)量的軟件產(chǎn)品,首先要根據(jù)軟件生存周期為各項(xiàng)開發(fā)的流程確定一個(gè)合理的框架,稱為軟件生存期模型或軟件開發(fā)模型。
瀑布模型(Waterfall Model)也稱線性順序模型。瀑布模型把開發(fā)過程分成固定的、相對(duì)獨(dú)立的各個(gè)階段,每個(gè)階段都有確定的、有限的任務(wù),而且在各個(gè)階段采用一些規(guī)范的開發(fā)方法和管理手段,力求保證軟件質(zhì)量和提高軟件生產(chǎn)率。瀑布模型各個(gè)階段的工作順序展開,恰如“奔流不息、拾級(jí)而下”的瀑布,故而得名。軟件開發(fā)的瀑布模型實(shí)際是對(duì)軟件生命周期的模擬。
軟件生命周期的階段劃分有多種方法。典型的階段劃分為問題定義、可行性研究、需求分析、概要設(shè)計(jì)(總體設(shè)計(jì))、詳細(xì)設(shè)計(jì)、編碼與單元測試、綜合測試、維護(hù)等八個(gè)階段,總體由計(jì)劃、開發(fā)和運(yùn)行三個(gè)時(shí)期組成。
1.問題定義。問題定義階段必須回答的關(guān)鍵問題是“要解決的問題是什么?”,通過系統(tǒng)分析員與客戶的溝通交流,使雙方對(duì)問題理解明晰化,得到雙方都認(rèn)可和接受的文檔。
2.可行性研究。可行性研究階段所回答的關(guān)鍵問題是“有可行的解嗎?”。可行性研究比較簡短,主要研究問題的范圍,探索問題是否值得去解,是否有可行的解決辦法,并對(duì)建議的系統(tǒng)做出成本效益分析。
3.需求分析。需求分析階段必須回答的關(guān)鍵問題是“系統(tǒng)必須做什么?”,主要是確定目標(biāo)系統(tǒng)必須具備哪些功能。系統(tǒng)分析員必須和客戶進(jìn)行充分的交流,誘導(dǎo)出客戶對(duì)系統(tǒng)的需求,并且予以確認(rèn)。需求分析階段是重要而且是必不可少的階段,否則到了開發(fā)后期將付出高昂的修改成本。
4.總體設(shè)計(jì)。總體設(shè)計(jì)階段必須回答的關(guān)鍵問題是“概括地說,應(yīng)該如解決這個(gè)問題?”,這個(gè)階段也被稱為概要設(shè)計(jì)。系統(tǒng)分析員使用系統(tǒng)流程圖描述多種可能的系統(tǒng),并從成本效益角度選擇最佳方案,設(shè)計(jì)軟件的結(jié)構(gòu)。
5.詳細(xì)設(shè)計(jì)。詳細(xì)設(shè)計(jì)階段回答的關(guān)鍵問題是“應(yīng)該怎樣具體地實(shí)現(xiàn)這樣系統(tǒng)?”,其任務(wù)就是解法的具體化,即設(shè)計(jì)出程序的詳細(xì)規(guī)格說明。
6.編碼和單元測試。關(guān)鍵任務(wù)是寫出正確的程序模塊,程序員根據(jù)目標(biāo)系統(tǒng)的性質(zhì)和實(shí)際環(huán)境,選取適當(dāng)?shù)母呒?jí)程序設(shè)計(jì)語言,把詳細(xì)設(shè)計(jì)的結(jié)果翻譯成用選定的語言書寫的程序,并測試每個(gè)具體的模塊。
7.綜合測試。關(guān)鍵任務(wù)是通過測試使軟件達(dá)到預(yù)定的要求。測試是為了發(fā)現(xiàn)程序中的錯(cuò)誤而執(zhí)行程序的過程,最基本的測試是集成測試和驗(yàn)收測試,具體方法有黑盒測試、白盒測試等。
8.軟件維護(hù)。關(guān)鍵任務(wù)是使軟件持久的滿足客戶需要。按照維護(hù)的性質(zhì)不同,軟件維護(hù)分為改正性維護(hù)、適應(yīng)性維護(hù)、完善性維護(hù)和預(yù)防性維護(hù)。軟件的可維護(hù)性是維護(hù)人員理解、改正和改進(jìn)軟件的難易程度,主要由可理解性、可測試性和可修改性決定。決定軟件可維護(hù)性和可修改性的最終因素是軟件設(shè)計(jì)階段采用的方法和軟件文檔資料。
三、用“瀑布模型”理論指導(dǎo)VB教學(xué)
VisualBasic是一種可視化的編程語言,用于開發(fā)Win-dows環(huán)境下應(yīng)用程序的工具,采用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法和事件驅(qū)動(dòng)方式的程序設(shè)計(jì)原理。VB是可以快速掌握的一種編程語言,相對(duì)VC等簡單易學(xué),開發(fā)環(huán)境友好便利,是初學(xué)者的首選入門語言,軟件工程理論提供的軟件系統(tǒng)開發(fā)的方法學(xué),是指導(dǎo)軟件系統(tǒng)開發(fā)的理論工具。而VB是面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,是作為軟件開發(fā)重要基礎(chǔ)之一的計(jì)算機(jī)程序設(shè)計(jì)語言,它也遵循軟件開發(fā)的一般規(guī)律。因而,將面向?qū)ο蟮能浖こ痰睦碚撨\(yùn)用于VB程序設(shè)計(jì)是較為自然合理的事情,讓程序設(shè)計(jì)同樣遵循軟件開發(fā)、運(yùn)行和維護(hù)的一般規(guī)律。因此,在VB教學(xué)中融入軟件工程的思想。不僅能鞏固原木的概念、方法,還能讓學(xué)生熟悉項(xiàng)目開發(fā)的流程。用工程的思想解決實(shí)際問題,對(duì)后續(xù)的其他計(jì)算機(jī)類課程也會(huì)產(chǎn)生積極的影響。
1.讓學(xué)生意識(shí)到軟件工程思想的重要性
軟件工程是一門研究用工程化方法構(gòu)建和維護(hù)高質(zhì)量軟件的學(xué)科,是軟件行業(yè)在過去幾十年的發(fā)展過程中總結(jié)出的經(jīng)驗(yàn)和理論,具有較強(qiáng)的理論性和抽象性。而VB程序設(shè)計(jì)屬于軟件行業(yè)中的實(shí)踐環(huán)節(jié),從辯證唯物主義哲學(xué)的角度來講,理論源于實(shí)踐,而又反過來指導(dǎo)實(shí)踐。
很多學(xué)生在接受軟件工程思想時(shí),往往有一種誤解,認(rèn)為只有編寫大型軟件時(shí)才需要用到軟件工程中的理論,對(duì)于平時(shí)課堂上所學(xué)的小例子,則不需要高深的理論指導(dǎo)。甚至有人認(rèn)為VB程序設(shè)計(jì)與軟件工程是完全沒有關(guān)系的兩門課。這種認(rèn)識(shí)是因?qū)幊汤碚摵蛯?shí)踐之間的互補(bǔ)關(guān)系缺乏了解而造成的。其實(shí)軟件工程中的思想,在編程過程中隨處可見,尤其對(duì)于VB這樣一門面向?qū)ο蟮母呒?jí)編程語言。教師在進(jìn)行教學(xué)時(shí)應(yīng)注意培養(yǎng)學(xué)生的軟件工程意識(shí),讓學(xué)生認(rèn)識(shí)到軟件工程思想的重要性和普適性。比如,在講解變量時(shí),可對(duì)軟件工程中變量的命名規(guī)則加以介紹;學(xué)習(xí)函數(shù)時(shí),在介紹函數(shù)的語法的同時(shí),也應(yīng)強(qiáng)調(diào)一下函數(shù)的設(shè)計(jì)原則,例如在一行內(nèi)只寫一條語句,并采取適當(dāng)?shù)目s進(jìn)格式,使程序的邏輯和功能變得更加明確,否則會(huì)降低代碼的可讀性和可測試性;講解類中成員的訪問權(quán)限時(shí),可以引申出軟件工程中“代碼隔離”原則。通過在講解語法的同時(shí),深入淺出地引入軟件工程中的理論思想,使學(xué)生認(rèn)識(shí)到軟件工程思想的重要性,進(jìn)而從一個(gè)較高的角度去認(rèn)識(shí)程序設(shè)計(jì)。
2.了解軟件是有生命周期的
VB作為一門實(shí)用的編程語言,是后續(xù)計(jì)算機(jī)類課程的基礎(chǔ)。因此,教師在初步介紹VB的產(chǎn)生、發(fā)展和特點(diǎn)后,就應(yīng)該引入軟件工程的基本理論。首先讓學(xué)生了解,軟件是有生命周期的,一個(gè)軟件從定義、開發(fā)、使用和維護(hù),直到最終被廢棄,要經(jīng)歷一個(gè)漫長的時(shí)期,即軟件除了編碼之外,還有許多更重要的階段。根據(jù)傳統(tǒng)的軟件生命周期方法,我們知道編碼只是軟件開發(fā)的一個(gè)很小的階段,而且是處于實(shí)現(xiàn)階段。
對(duì)于VB初學(xué)者來說,由于沒有正式接受系統(tǒng)化開發(fā)方法的指導(dǎo),往往會(huì)形成一個(gè)錯(cuò)誤的認(rèn)識(shí),認(rèn)為軟件開發(fā)就是編碼,即拿到問題后就著手編寫程序。這種做法的不良后果初學(xué)者無法體會(huì)到,因?yàn)樗麄兯媾R的需要解決的問題,無論從規(guī)模,還是從難易程度而言,實(shí)在是太小了。所以在直接編寫程序的過程中,大腦已經(jīng)讓初學(xué)者無意識(shí)地完成了問題的定義和設(shè)計(jì)過程。但是,這種僥幸的“個(gè)體化”做法對(duì)于復(fù)雜的現(xiàn)實(shí)問題的解決,即軟件項(xiàng)目的開發(fā)是絕對(duì)行不通的。因此,必須從接觸軟件概念開始,就樹立正確的開發(fā)觀,為今后專業(yè)化開發(fā)打好基礎(chǔ)。
3.強(qiáng)調(diào)軟件需求分析和設(shè)計(jì)
在以往的VB教學(xué)中,教師常常先講解程序設(shè)計(jì)的基本語句與結(jié)構(gòu)以及一些常用控件。再舉幾個(gè)例子說明其使用辦法,由于講解的程序通常都是簡單短小的,所以不會(huì)強(qiáng)調(diào)應(yīng)該進(jìn)行需求分析和設(shè)計(jì)。其實(shí)即使很小的程序也需要進(jìn)行簡單的分析和設(shè)計(jì)。在教師給出學(xué)生題目后,應(yīng)提醒學(xué)生編程前先分析、設(shè)計(jì)。比如很簡單的例子,設(shè)計(jì)計(jì)算長方形面積的程序,那么首先我們先明確需求:根據(jù)用戶輸入的長方形的長和寬,計(jì)算輸出長方形的面積;那么接下來應(yīng)該怎么實(shí)現(xiàn)呢,算法可以確定求出長方形面積-長×寬,再思考窗體、控件作為對(duì)象需要哪些事件、方法。所以不論程序的規(guī)模大小,最好能讓學(xué)生學(xué)會(huì)用流程圖來描述其步驟。
4.引導(dǎo)學(xué)生用軟件工程中的思想解決實(shí)際問題
讓學(xué)生認(rèn)識(shí)到軟件工程的重要性,最行之有效的辦法就是用軟件工程中的思想解決程序設(shè)計(jì)中的實(shí)際問題。再好的理論如不能應(yīng)用于實(shí)踐,也只能被束之高閣。相比起抽象的理論,學(xué)生往往更容易接受像VB這樣具有強(qiáng)烈實(shí)踐性質(zhì)的課程。因此,教師在課堂上可通過難度適當(dāng)?shù)陌咐龑?dǎo)學(xué)生積極地用軟件工程中的思想解決VB程序設(shè)計(jì)中的實(shí)際問題,這對(duì)于學(xué)生編程能力的提高具有很大的促進(jìn)作用,同時(shí)也讓學(xué)生更深刻的體會(huì)了軟件工程思想的重要性和實(shí)用性。
VB程序設(shè)計(jì)中的很多問題都可以在軟件工程理論中找到答案,下面以教學(xué)過程中典型的兩個(gè)案例進(jìn)行說明。
案例一:學(xué)生甲在用VB編寫一個(gè)圖書館管理系統(tǒng)時(shí)遇到一個(gè)問題,系統(tǒng)在窗體A中以列表的形式顯示了一個(gè)班級(jí)中全體學(xué)生的基本信息,當(dāng)雙擊某一學(xué)生記錄時(shí),彈出窗體B,在窗體B中對(duì)該生的基本信息進(jìn)行編輯,當(dāng)關(guān)閉窗體B時(shí),應(yīng)同步更新窗體A中該生的基本信息。問題是,更新窗體A的代碼應(yīng)該在窗體A中調(diào)用還是在窗體B中調(diào)用?
顯然,如放在窗體B中調(diào)用,在關(guān)閉窗體B的同時(shí)調(diào)用更新窗體A的代碼,這種代碼結(jié)構(gòu)實(shí)現(xiàn)起來比較簡單,因而是很多初學(xué)者的選擇。但如果從軟件工程中“低耦合,高內(nèi)聚”的思想來看,在A中彈出B,在B中更新A,會(huì)導(dǎo)致兩個(gè)窗體交叉引用(A引用了B,B也引用了A),屬于較高級(jí)別的耦合;而如果在A中彈出B,然后在A中更新A,則兩個(gè)窗體之間僅是單向引用(A引用了B,B沒有引用A),因此可以得出結(jié)論,在窗體A中執(zhí)行更新代碼是較優(yōu)選擇。
案例二:學(xué)生乙想用VB編寫一款能夠在線對(duì)弈的象棋程序。該生平時(shí)動(dòng)手能力較強(qiáng),考試成績也非常優(yōu)秀,但在處理這個(gè)實(shí)際問題時(shí)卻感到無從下手,不知道第一步該做什么。通過對(duì)軟件工程理論的學(xué)習(xí),該生逐步了解了軟件開發(fā)的正常過程,從需求分析開始入手,到類圖的設(shè)計(jì),再到代碼實(shí)現(xiàn)、測試,最終成功地完成了該程序。
通過軟件工程中的思想理論解決VB程序設(shè)計(jì)中的具體問題,使學(xué)生感覺到,軟件工程不再是一種“看不見、摸不著”的空中樓閣,而是一種行之有效的解決實(shí)際問題的手段,從而可達(dá)到“學(xué)以致用”的教學(xué)目的。
四、結(jié)論
總體而言,程序設(shè)計(jì)是一個(gè)完整的過程,而不是我們通常認(rèn)為的程序設(shè)計(jì)就是“編寫程序”,它只是整個(gè)程序設(shè)計(jì)過程中的一個(gè)環(huán)節(jié)而已。從實(shí)踐來看,“編寫程序”這個(gè)任務(wù)在整個(gè)程序設(shè)計(jì)當(dāng)中占有的比例,往往不到三分之一。在一個(gè)項(xiàng)目中,我們往往是將更多的時(shí)間用在前面的“問題分析”與“設(shè)計(jì)算法”以及后期的編寫文檔等等。
將軟件工程理論思想與方法前移應(yīng)用與V B課程設(shè)計(jì)的項(xiàng)目教學(xué)方法,改變了過去課程設(shè)計(jì)與實(shí)際應(yīng)用系統(tǒng)開發(fā)脫節(jié)的教學(xué)模式,盡早培養(yǎng)了學(xué)生系統(tǒng)設(shè)計(jì)的思想,對(duì)后續(xù)課程的教學(xué)與將來的社會(huì)工作實(shí)踐實(shí)際都起到了比較好的教學(xué)效果。特別表現(xiàn)在工程應(yīng)用設(shè)計(jì)、系統(tǒng)測試與技術(shù)文檔的書寫等方面,全面提高了學(xué)生綜合應(yīng)用能力與創(chuàng)新思維的培養(yǎng),在實(shí)踐的教學(xué)效果上,取得了比較滿意的效果。
責(zé)任編輯 李翔