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