冶紅 蔣波
摘要:針對當前計算機專業(yè)本科畢業(yè)設計中普遍存在的問題,提出用軟件工程思想指導畢業(yè)設計的方案。探討如何通過建立軟件生存周期和畢業(yè)設計各階段的映射關系,規(guī)范畢業(yè)設計過程,提高教學質量,為社會培養(yǎng)合格軟件人才。
關鍵詞:畢業(yè)設計;軟件工程;軟件生存周期;軟件過程;教學質量
1、軟件工程概念
軟件工程是指導計算機軟件開發(fā)和維護的工程學科,它將工程學的概念、原理、技術和方法應用于軟件的開發(fā)和維護,結合了軟件開發(fā)技術和工程管理的成功經驗。
軟件工程包括方法、工具和過程3個要素。軟件有一個從孕育、誕生、成長、成熟到衰亡的過程,即軟件的生存周期。通過生存周期模型直觀地表達軟件開發(fā)的全過程,明確要完成的主要活動、任務和開發(fā)策略,是軟件工程思想的具體化。根據這一思想,將軟件生存周期劃分為軟件定義、開發(fā)和運行維護3個階段,軟件定義階段包括問題定義、可行性研究和需求分析,軟件開發(fā)階段的任務包括總體設計、詳細設計、實現(xiàn)和測試。
2、畢業(yè)設計制作
畢業(yè)設計是以學生為主體,在專業(yè)教師或工程技術人員的指導下,圍繞特定的選題進行的有計劃、有步驟的學習和開發(fā)過程,是培養(yǎng)人才的重要途徑。
2.1 畢業(yè)設計的目的
畢業(yè)設計不同于一般的課程設計,系統(tǒng)性和綜合性較強,需要多方面的知識作支撐,注重實際操作。通過畢業(yè)設計,使學生在以下方面得以鍛煉和提高:①綜合運用所學知識,分析、解決實際問題的能力;②自主獲取新知識、獨立發(fā)現(xiàn)問題的能力;③計算機系統(tǒng)設計和開發(fā)的能力;④創(chuàng)新精神和團隊協(xié)作能力;⑤文獻檢索、資料查詢以及論文寫作能力。
2.2 畢設現(xiàn)狀及存在問題
近年來,計算機專業(yè)畢業(yè)設計質量出現(xiàn)滑坡。一方面是由于學生對待畢業(yè)設計態(tài)度不夠認真,投入的精力有限;另一方面,也是更主要的原因,相當一部分學生沒有按照軟件工程思想進行相應的軟件開發(fā),違反了軟件工程的基本原則,導致畢業(yè)設計質量較低。
目前,畢業(yè)設計中存在的問題主要表現(xiàn)在以下方面:
1)選題不當,不重視可行性研究。
選題脫離實際,不能與社會應用接軌或缺乏創(chuàng)新。很多學生無法參與到實際科研項目中,只能選擇一些虛擬題目,為了作設計而設計,完成的系統(tǒng)業(yè)務邏輯簡單,其結果沒有實用價值。存在不同指導教師的學生做同一題目的現(xiàn)象,內容雷同,很多是對現(xiàn)有的成果稍加修改和變換,缺乏創(chuàng)新。
2)不重視軟件的需求分析。
需求分析階段調研不充分,沒有全面、準確地獲取用戶的需求,忽視了軟件需求的不穩(wěn)定性,沒有做到需求跟蹤;或者只關注軟件的功能性需求,忽視了性能需求,導致最終軟件的可用性差;有一些學生直接略過需求分析而進入軟件設計階段。整個軟件過程處于“設計-分析-修改-設計”這樣一個混亂的狀態(tài)。
3)不重視設計過程和軟件測試。
沒有事先對軟件進行總體規(guī)劃,目標不明確,想起來哪部分就做哪部分,甚至有些部分做了一半就又開始另外一個階段的工作,忽視軟件設計的基本原則。整個設計過程呈無序狀態(tài),導致軟件結構混亂、功能代碼重復、可集成性差,待到發(fā)現(xiàn)問題已為時過晚,稍作改動系統(tǒng)就會崩潰。忽視軟件測試的現(xiàn)象也非常普遍。有的只針對模塊做單元測試,認為模塊內部的可靠性達到了一定程度,集成后也必然穩(wěn)定可靠。有的隨機地選取少數測試用例,發(fā)現(xiàn)程序運行結果與預期結果吻合后,便覺得大功告成了。
4)不重視軟件文檔的編制和畢業(yè)論文的撰寫。
很多開發(fā)人員認為編寫軟件文檔是在浪費時間,他們更愿意將精力花費在如何調通一個程序上。在畢業(yè)設計的特定環(huán)境下,一些虛擬性的項目無需進行后期維護,輕視文檔的現(xiàn)象尤為嚴重。畢業(yè)設計的同時還應在導師的指導下撰寫畢業(yè)論文,可很多學生直至畢設最后階段才開始撰寫論文,投入的時間和精力不足,文章質量低下且抄襲現(xiàn)象嚴重。
3、用軟件工程思想指導計算機專業(yè)本科畢業(yè)設計
為了提高畢業(yè)設計的質量,培養(yǎng)出適應社會需求的軟件人才,將軟件工程思想引入畢業(yè)設計,用軟件工程方法指導和規(guī)范畢業(yè)設計過程,是十分必要和迫切的[5]。
將畢業(yè)設計視為一個大型項目,整個畢業(yè)設計過程就是一個完整的軟件生存周期。以軟件工程思想為線索驅動畢業(yè)設計進展,遵守軟件過程的基本原則,引導學生分階段地完成畢業(yè)設計任務,并按要求提交可運行的軟件產品和完整規(guī)范的文檔。軟件生存周期和畢業(yè)設計各階段的對應關系如圖1所示。
3.1 以可行性研究為指導,嚴把選題關
可行性研究不是解決問題,而是確定問題是否值得去解,是否有可行的解決辦法。畢業(yè)設計的選題應有益于學生綜合運用多學科的知識與技能,有一定的理論和現(xiàn)實意義,難易適度,大小適中。
為了更好地進行可行性分析,我們對選題方式進行了改革。選題時,指導教師不給出具體的題目,只給出研究方向和計劃指導的學生人數,讓學生自行確定題目,給學生更多的自主權,激發(fā)學生的創(chuàng)新思維。由指導教師引導學生從經濟、技術、法律等方面對選題進行綜合評價,分析選題有無違反國家相關法律和社會道德規(guī)范,現(xiàn)有的技術手段和工具能否提供必要的支持,最終得到的收益是否大于投入的成本,能否帶來一定的經濟效益。為了提高選題的可行性,題目的形式和內容也要力爭創(chuàng)新。在校外作畢業(yè)設計的學生,建議選擇與實習內容相關的課題,立足于工程實際。在校內做畢業(yè)設計的學生,鼓勵其參加科研團隊、科技競賽和各類創(chuàng)新實驗項目等,開放校內實驗室,為學生提供創(chuàng)新平臺。經過可行性分析,明確選題的意義和范圍,以便更好地制定畢業(yè)設計階段的工作計劃。
3.2 以需求分析為基礎,明確系統(tǒng)目標和任務
畢業(yè)設計選題完成以后,應以需求分析的思想為指導,對選題需承擔的工作及實現(xiàn)目標進一步闡述和分析,收集和整理資料,明確用戶要求。確定待開發(fā)軟件的功能需求、性能需求和運行環(huán)境約束,運用科學的研究方法對軟件需求建模,在建模過程中了解系統(tǒng)。有時還要對復雜系統(tǒng)的接口、人機界面等進行模擬或構造原型。目前在畢業(yè)設計中廣泛使用的有傳統(tǒng)方法學和面向對象方法學,通過抽象和概括,導出用圖形方法表示的、經用戶確認的目標系統(tǒng)邏輯模型,用這些模型來描述和設計系統(tǒng)。模型既是軟件設計的基礎,也是編寫軟件規(guī)格說明的基礎。軟件需求規(guī)格說明是用戶與開發(fā)人員對軟件需求取得共同理解的基礎上達成的協(xié)議,是軟件項目成敗的關鍵。endprint
3.3 以軟件設計為指導進行實踐,規(guī)范畢業(yè)設計過程
軟件設計決定軟件系統(tǒng)“怎么做”,在軟件工程過程中處于技術核心地位,是后續(xù)開發(fā)和維護的基礎。軟件設計主要集中于軟件體系結構、數據結構、用戶界面和實現(xiàn)算法等方面,同樣需要文檔化,撰寫相應的設計說明書并組織評審。傳統(tǒng)方法學把軟件設計劃分成總體設計和詳細設計2個階段。總體設計概括提出解決問題的辦法,建立軟件系統(tǒng)的總體結構和模塊間的關系,設計全局數據結構,規(guī)定設計約束,制定集成測試計劃。詳細設計階段將解法具體化,設計模塊內部細節(jié),擬定單元測試計劃。類似地,面向對象方法學將軟件設計分為系統(tǒng)設計和對象設計,系統(tǒng)設計確定實現(xiàn)策略和系統(tǒng)的高層結構,對象設計確定解空間中的類、關聯(lián)、接口形式和實現(xiàn)服務的算法。
在畢業(yè)設計過程中,應嚴格遵守軟件工程學原則,規(guī)范設計過程。對于大型軟件系統(tǒng),首先對軟件需求進行分解,將其劃分為若干個子系統(tǒng),為每個子系統(tǒng)定義功能模塊,給出各子系統(tǒng)接口的定義,再以增量方式集成到軟件系統(tǒng)中,增量開發(fā)法如圖2所示。軟件系統(tǒng)應具有良好且穩(wěn)定的總體結構,模塊內部保持高內聚,模塊之間保持松散的耦合。模塊劃分時,一個模塊的直接下屬模塊不宜太多。設計當前模塊時,把該模塊的所有下層模塊看作“黑盒”,一個模塊的全部直接下屬模塊設計完成后,再轉向另一個模塊的下層模塊設計。
3.4 重視測試,保證畢業(yè)設計質量
軟件測試的目的是以最少的時間和人力,系統(tǒng)地找出軟件中潛在的各種錯誤和缺陷。當把詳細設計結果翻譯為源代碼后,應及早開始測試。建議先考慮靜態(tài)測試,采用人工檢測和計算機輔助靜態(tài)分析方法,仔細地審查軟件設計、體系結構和源代碼,接下來再通過運行程序進行動態(tài)測試。
從過程的觀點考慮,畢業(yè)設計期間一般經過單元測試、集成測試和確認測試。單元測試發(fā)現(xiàn)模塊控制結構、算法處理和編碼中的錯誤,以白盒測試為主。集成測試主要檢查與設計相關的軟件體系結構的問題,以黑盒測試為主。確認測試主要檢查軟件是否滿足需求規(guī)格說明中確定的功能、性能等需求,使用黑盒測試技術。測試時,需要為被測程序精心設計測試用例,選取系統(tǒng)需求所需的測試數據、設計文檔所需的測試數據、程序代碼所需的測試數據、邊界數據和一些隨機數據,同時考慮合理輸入和不合理輸入。測試時注意錯誤的群集現(xiàn)象,重點測試發(fā)現(xiàn)錯誤多的模塊,并盡可能使用一些自動測試的軟件工具。如果測試沒能發(fā)現(xiàn)錯誤,應考慮重新制定測試方案并設計測試用例。測試后,分析比較實測結果和預期結果,出現(xiàn)的錯誤要調試,同時修改相應的文檔。修改后的程序要再次測試,直至滿意為止。
3.5 重視文檔寫作,提升畢業(yè)設計論文的質量
很多學生認為畢業(yè)設計就是編寫代碼,這種理解是錯誤的。軟件文檔是軟件開發(fā)規(guī)范的體現(xiàn)和指南,按要求生成一整套文檔的過程,就是按照開發(fā)規(guī)范完成軟件開發(fā)的過程。軟件文檔是軟件生存周期各階段的設計思想和研究成果的體現(xiàn),是軟件產品的一部分,是后續(xù)維護的基礎。畢業(yè)論文是畢業(yè)設計工作的總結和提高,讓讀者對課題的設計原理、解決方法及關鍵技術等有一個全面的了解。論文寫作首先是確定選題,查閱相關資料后撰寫開題報告,進行項目設計,完成論文初稿,最后修改定稿。在畢業(yè)設計過程中,指導學生分階段地撰寫規(guī)范的軟件文檔,一方面可以科學地計劃、組織軟件開發(fā)過程,另一方面可以從中提取精華部分放在畢業(yè)設計論文相關章節(jié)中。軟件文檔與畢業(yè)設計論文各章節(jié)的對應關系如圖3所示。
4、結語
以軟件工程思想為指導規(guī)范學生進行軟件開發(fā)活動,在以往的畢業(yè)設計中取得了良好的效果,不僅保障了畢業(yè)設計的質量,更提高了學生解決實際問題的能力、溝通協(xié)作能力,以及書寫和表達能力,積累了一定的項目開發(fā)經驗。軟件工程教學與畢業(yè)設計實踐相互促進、相輔相成。一方面,以軟件工程推進畢業(yè)設計進程,加強畢業(yè)設計各環(huán)節(jié)的指導;另一方面,可以畢業(yè)設計為任務驅動軟件工程教學,‘將畢業(yè)設計作為項目引入到今后的軟件工程課堂教學中,讓學生盡早參與實際軟件項目中,培養(yǎng)實踐能力和創(chuàng)新精神。endprint