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