摘要:鑒于軟件開發(fā)項目實踐可以充分鍛煉學生的實際動手能力,提高軟件開發(fā)水平,培養(yǎng)學生的專業(yè)能力。本文遵循軟件開發(fā)理論,運用理論、模型與技術(shù)對實際問題進行分析、設計、開發(fā),強調(diào)掌握具體開發(fā)流程、重視實際開發(fā)環(huán)境、學會協(xié)作與交流是軟件工程專業(yè)學生最基本的專業(yè)能力與素質(zhì)。探討在一系列軟件開發(fā)項目的實施過程中注重項目導向性、制定科學評價體系的重要性。
關鍵詞:軟件項目實踐;專業(yè)能力;軟件開發(fā);評價
1理論指導下的項目實踐
理論知識可以讓人站在巨人的肩膀上,并擁有一個智慧的頭腦,同樣,實踐操作可以讓人利用智慧的頭腦,練就靈巧的雙手,開創(chuàng)一個新世界。與傳統(tǒng)專業(yè)相比,人們從事計算機軟件開發(fā)的時間并不長,軟件開發(fā)理論也正在成長過程中。但是,這并不是說軟件開發(fā)就無章可循,在這短期的發(fā)展過程中,人們總結(jié)了從事軟件開發(fā)的諸多經(jīng)驗,并借鑒其他行業(yè)(如建筑、管理等)知識,逐漸形成了一整套較為成熟的軟件開發(fā)理論,軟件工程專業(yè)也應運而生。
軟件開發(fā),實踐操作固然重要,但我們應在軟件工程理論和規(guī)范標準的規(guī)范下,培養(yǎng)和鍛煉學生軟件項目開發(fā)的實際工程能力。所以,在強調(diào)項目實踐的同時,我們也應該把現(xiàn)代化的軟件開發(fā)理論貫穿其中,讓學生在實踐的同時,有章可循、有據(jù)可依。
1.1軟件開發(fā)理論
軟件開發(fā)理論從項目實踐中積累起來并用以指導軟件開發(fā)。20世紀60年代出現(xiàn)“軟件危機”,軟件產(chǎn)品開發(fā)的復雜度提高了,開發(fā)周期也大幅度延遲,而且軟件錯誤也在增多,可維護性降低[1]。由此出現(xiàn)了最早的軟件開發(fā)理論,即結(jié)構(gòu)化分析和結(jié)構(gòu)化設計(SASD)。而后,隨著“重用”的提出,出現(xiàn)了軟件開發(fā)的第二大技術(shù)理論,即面向?qū)ο蟮姆治龊驮O計(OOAD)。1998年,在“基于構(gòu)件的軟件開發(fā)”國際專題學術(shù)會議上,人們一致認為軟件開發(fā)技術(shù)離不開構(gòu)件和體現(xiàn)結(jié)構(gòu),由此提出了基于構(gòu)件的軟件開發(fā)(CBSD)。目前,隨著分布式應用的出現(xiàn),又出現(xiàn)了新的理論體系,即面向服務的架構(gòu)(SOA)。軟件開發(fā)的理論是隨著實際項目經(jīng)驗的積累在不斷完善和發(fā)展的,在軟件開發(fā)過程中應該遵循已有的開發(fā)理論。
1.2理論貫穿于實踐
不管是哪種理論都是從社會實踐中總結(jié)、抽象出來的,能夠反映大多數(shù)的現(xiàn)實問題,軟件開發(fā)理論也是如此。理論知識概括性強且抽象,如果單純地以講解的形式“灌輸”給學生,效果不理想,學生對這種“填鴨式”的講解也不能真正理解,只能是形式化的記憶,因為他們根本沒有軟件項目開發(fā)經(jīng)驗可以參考,因此也就無法更深層地理解理論知識。
聽過的會忘記,看過的能記得,做過的才理解。軟件開發(fā)理論雖然經(jīng)典,但不應該將其變?yōu)閱渭兊闹v解,而應該將理論貫穿于軟件項目開發(fā)中。以實踐項目為依托,在真正的開發(fā)中讓學生去領悟軟件開發(fā)理論。比如軟件開發(fā)的MVC模式,很多學生剛接觸時都會排斥這種開發(fā)方式,認為做了很多“無用功”,系統(tǒng)的結(jié)構(gòu)和實現(xiàn)太復雜化。其原因在于,學生學習軟件開發(fā)語言時,接觸的都是針對性非常強的小練習、小實驗,這些練習和實驗不會存在重用、維護、 更新等問題。只有在真正的項目實踐中,學生才會遇到軟件理論中所提到的、引起“軟件危機”的因素。學生遇到實際問題,原來固有的開發(fā)方式已行不通,此時,學生自然會接受軟件開發(fā)理論所提出的觀點,或在此基礎上尋找到適合自己的軟件開發(fā)方式。
2提升軟件開發(fā)基本能力
軟件開發(fā)最基本的要求是在規(guī)定的時間和資金內(nèi),完成用戶要求的所有功能。具體來說,軟件開發(fā)專業(yè)方向的學生在接觸軟件開發(fā)后,應該具備的基本能力包括以下4條。
1) 運用理論、模型和技術(shù)對具體問題進行識別和分析,可以進行軟件分析、設計、開發(fā)、測試和文檔化,交付高質(zhì)量的軟件產(chǎn)品[2]。軟件開發(fā)是周期性較強的工作,在一個周期的每一階段都有不同的要求,對應學生不同的專業(yè)能力。
軟件項目分析是對用戶需求進行去粗存精、正確理解的過程,其基本任務就是和用戶一起確定要解決的問題,建立軟件的邏輯模型,編寫需求規(guī)格說明書,并最終得到用戶的認可。這就要求學生具備很好的軟件交流能力和系統(tǒng)分析能力,將非專業(yè)的需求敘述轉(zhuǎn)變成專業(yè)的描述。軟件設計要求學生具備系統(tǒng)設計能力,可以著眼于全局,然后將功能細化,將軟件分解成模塊,逐步求精;軟件開發(fā)就是對于軟件的實現(xiàn),把設計轉(zhuǎn)變成計算機可以接受的程序,這就要求學生充分了解軟件開發(fā)語言、工具的特性和編程風格等;測試的目的在于以最小的代價發(fā)現(xiàn)盡可能多的錯誤,以求軟件的穩(wěn)健性,要求學生可以找出合適的測試用例;文檔的編寫可以有利于后期維護和更新,也是對所開發(fā)的系統(tǒng)是否符合軟件規(guī)范的一次檢驗。
2) 理解各種工程設計方法的優(yōu)缺點,根據(jù)情況選擇符合安全和經(jīng)濟規(guī)范的合適方法。同一軟件項目的開發(fā)可以有多種模式,比如瀑布模型、原型模型等。瀑布模型其優(yōu)點在于有利于大型軟件開發(fā)過程中人員的組織和管理,有利于軟件開發(fā)方法和工具的使用;缺點在于軟件開發(fā)初期階段就要確定全部的需求。原型模型的優(yōu)點在于可以很方便地統(tǒng)一客戶和軟件開發(fā)人員對軟件項目需求的理解,客戶可以很快得到其需要的軟件模型。[3]
不同的工程設計方法,也決定了軟件開發(fā)的方式不同,不好評價其優(yōu)劣性,在開發(fā)不同應用場景中的軟件項目時,最適合的開發(fā)模式可能只有一種。因此在項目實踐的過程中,要盡量多地展示不同的軟件開發(fā)模式,有了切身的體會,就可以通過不同類型實例讓學生比對其優(yōu)劣,自己得出這些開發(fā)模式最適合的應用場景。這樣做的好處是避免講解這些開發(fā)模式所帶來的枯燥、乏味,同時,讓學生理解得更加透徹,做到知道、理解、會用。
3) 重視產(chǎn)品交付期限、面對有限的資源、系統(tǒng)和組織能對各種矛盾進行協(xié)調(diào)、折衷和決策。在項目實踐中,所有的工作都要有計劃、有組織地展開,盡量避免一個學生同時參與多個實踐項目,其目的在于讓學生全身心地投入到一個項目實踐中,完成一個項目周期的所有階段,這樣做可以讓學生遇到、分析、克服一個完整項目應該遇到的所有問題,而不是每次都在原地踏步走。
在開發(fā)中,我們可能會遇到各種各樣的問題,有的可解,有的不可解,其解決方法也多種多樣。在解決這些問題的時候,我們應培養(yǎng)學生獨立思考、獨立判斷、獨立求解的能力,訓練其自學能力(這也是軟件開發(fā)人員最為需要的能力),而不是直接告訴其答案或解決方法。我們可以采用形式多樣的方法進行求解,比如開討論會、論壇求助、技術(shù)支援,等等。經(jīng)過幾次非傳統(tǒng)課堂式學習之后,如果遇到新問題,大多數(shù)學生可以獨立找到求解的方法。在整個求解過程中,教師只是起到引導和鋪墊的作用,真正在解決問題的應該是學生。
4) 遵守紀律、交流和合作、能夠評價人和團隊的能力,了解團隊和團隊行為及角色。當前軟件項目趨于復雜化、集成化,非個人可以獨立完成,需要多人協(xié)作完成,需要組建專業(yè)軟件開發(fā)團隊。
團隊成員之間的溝通和合作將成為影響軟件開發(fā)進度,以及軟件質(zhì)量的因素。所以,溝通和協(xié)助也就成為軟件開發(fā)人員必須掌握的專業(yè)能力之一,在溝通中了解彼此的職責,在協(xié)作中了解軟件分層和分工協(xié)作的優(yōu)點。在具體項目實踐中,我們可以根據(jù)學生的特點,讓他們自己先分工,找到自己最想要參與的部分,并確定負責制定,以培養(yǎng)其責任心。
3發(fā)揮項目實踐的導向作用
選取實踐項目要針對軟件開發(fā)的專業(yè)能力,做到有的放矢,不要為完成項目而完成項目。項目實踐的導向性就是要求每一個項目要有對應的專業(yè)能力要求,學生在完成該項目后,可以真正獲取相應的專業(yè)知識,鍛煉相應的專業(yè)能力。
3.1項目設計層次化
軟件開發(fā)專業(yè)能力的培養(yǎng)和訓練并非一兩個學期就可以完成,而是要貫穿大學四年學習,因此,選取的實踐項目要具有分層遞進的特點。在每個課程模塊鄰近結(jié)束時,要組織相應的項目實踐,以強化該課程模塊的知識體系。[4]
由淺入深的項目可以將學生逐漸帶入軟件開發(fā)的世界,而不會讓學生產(chǎn)生挫折感而懼怕參與實踐項目。分層次實踐項目的每一個層次都應該對應一個或幾個專業(yè)核心能力,圍繞該能力的訓練,我們可以組織多個實踐項目,供學生選擇。具體層次的劃分可以根據(jù)專業(yè)學生的實際情況而定,一般以三到四個為宜。
伴隨層次由低到高,訓練學生專業(yè)能力的重點也在轉(zhuǎn)移,由開始的專注于屬性的抽象、方法的實現(xiàn)、算法的設計,逐漸到模塊的設計、分層的設計,最后到整個體系結(jié)構(gòu)的設計。學生專業(yè)能力的成長也是從對系統(tǒng)的認知、設計,逐步發(fā)展到的最后開發(fā)。
3.2項目開發(fā)模塊化
針對每一個實踐項目,在選擇的時候應該根據(jù)需要而定,選取結(jié)構(gòu)清晰,模塊劃分比較明確的項目,這樣有利于專項訓練[5]。低層次項目參與的學生較少,不利于培養(yǎng)學生對系統(tǒng)體系結(jié)構(gòu)的把握,也不利于訓練其團隊合作與溝通,因此,我們可以把重點放在對軟件開發(fā)語言的訓練上,而高層次的項目重點應該放在系統(tǒng)的設計思路、軟件整體的把握、小組成員的溝通等方面。
針對每個具體項目,開發(fā)過程可以細分為多個功能模塊,即可以按照模塊化來開發(fā),在模塊內(nèi)部應該具備較好的聚合,模塊之間耦合度相對較低。選取這樣的項目,可以培養(yǎng)學生在設計與開發(fā)軟件時,結(jié)合“大事化小,小事化了”的原則來思考問題,這也是在解決復雜問題時普遍采取的策略,“分而治之,各個擊破”。所以,模塊化結(jié)構(gòu)較好的實踐項目,有利于降低設計難度、分工協(xié)作和對系統(tǒng)的理解與維護。
對于低層次的項目,我們不易將功能模塊劃分得過于細小,使簡單問題復雜化,對此,我們可以將整個項目看作一個模塊,把重點放在對程序語言和知識點的訓練上。比如設計制作簡易電子日記本所涉及到的內(nèi)容就不是很多,有三個類(日記本類、文件讀寫類、管理類)就可以完成,借助這個項目可以很好地訓練學生文件讀寫的操作,而不適合分析設計思路、整體與子系統(tǒng)、子系統(tǒng)間的關系等概念。
對于高層次的項目,要強調(diào)系統(tǒng)的分解和模塊的劃分,而且應將各個模塊間的依賴性盡量降低。在開發(fā)此類項目時,要著力培養(yǎng)學生系統(tǒng)分析能力,可以將比較復雜的問題,劃分為幾個相對獨立的模塊。比如一個完整的學生信息管理系統(tǒng),一般由信息輸入模塊、信息管理模塊、數(shù)據(jù)管理模塊等組成,在具體到信息輸入時可以繼續(xù)劃分模塊:單個學生信息的輸入子模塊、批量導入模塊、學生信息掃描模塊等。經(jīng)過不斷的細化和求精,最終可以將復雜的系統(tǒng)功能分解為簡單的功能模塊,便于組織開發(fā)和分工協(xié)作。
4科學評價專業(yè)能力
項目實踐可以讓學生在訓練專業(yè)能力的同時,得到更多的“頂峰體驗”,獲取開發(fā)軟件的成就感,這也有利于學生自信心和價值感的培養(yǎng)。在借助項目實踐培養(yǎng)學生軟件開發(fā)專業(yè)能力的同時,健全或完善專業(yè)能力評價體系也是當務之急。
軟件開發(fā)重在實踐操作,而不是理論知識的陳述,它所要求的專業(yè)能力最終也是軟件開發(fā)能力。衡量一個學生的優(yōu)劣,不能僅參考其掌握多少知識,而是應該將重點放在其對知識的應用層面,也就是實踐操作能力上面。
首先,從主觀上和制度上改變軟件類科目都需要考試的做法,要針對具體科目的特點,區(qū)別對待。對于偏重于基礎知識的科目,閉卷筆試的方式可以促進學生獲取知識,對于理論貫穿于實踐開發(fā)中,指導軟件開發(fā)的科目,可以采用綜合實踐開發(fā)的方式進行考察,注重考察學生的學習過程[6],即學生的考核標準參考該學生在軟件項目開發(fā)過程中的綜合評分。
其次,改變軟件開發(fā)重結(jié)果、輕過程的評判標準,實行學生能力評價參數(shù)多樣化。軟件開發(fā)需要完成一系列的任務,在每個任務中,重點涉及的專業(yè)能力不盡相同,對學生能力的要求也存在差異。如在軟件需求分析階段,學生需要探尋客戶的想法,了解他們的問題,并準確表達他們的要求。在軟件設計階段,需要了解系統(tǒng)的整體結(jié)構(gòu),并可以劃分為子系統(tǒng),這需要抽象和建模的能力。在編碼與測試階段,要求學生對開發(fā)工具,編程語言的熟練掌握。即使在這一個過程中,也會有詳細的分工,比如有的學生擅長美工,有的愛好編程等。一般的做法就是核查項目有無實行,是否可以運行等,這樣的評價太過于片面。
最后,學生的專業(yè)能力評價要與社會生產(chǎn)實踐接軌,避免大而全的評價體系。軟件開發(fā)是一個完整的系統(tǒng)工程,涉及很多領域,很難讓一個學生獨立完成整個項目。所以,科學的專業(yè)能力評價應該注重社會對軟件開發(fā)人員的能力要求,引導學生培養(yǎng)自己的興趣,注重發(fā)展自己的特長。
5結(jié)語
軟件項目可以讓學生在實踐操作中,潛移默化地掌握軟件開發(fā)理論、模型和技術(shù)。在選取具體實踐項目時應當本著由簡單到復雜,由基本知識點練習到整體系統(tǒng)分析的原則。學生的專業(yè)能力,在項目開發(fā)的整個過程中,歷經(jīng)由低級到高級的轉(zhuǎn)變。最后在衡量學生專業(yè)能力水平高低時,應該更加科學,從多種角度進行評價。
參考文獻:
[1]