文章編號(hào):1672-5913(2008)20-0022-03
摘 要:軟件維護(hù)在現(xiàn)實(shí)的軟件開發(fā)過(guò)程中占有十分重要的地位,本文介紹了我院的軟件維護(hù)實(shí)踐教學(xué)的教學(xué)方案以及具體實(shí)施情況。
關(guān)鍵詞:軟件工程;軟件開發(fā);實(shí)驗(yàn);實(shí)踐教學(xué);軟件維護(hù)
中圖分類號(hào):G642
文獻(xiàn)標(biāo)識(shí)碼:B
1 軟件維護(hù)在軟件工程實(shí)踐教學(xué)中的意義
軟件工程是一門理論與實(shí)踐并重的基礎(chǔ)課程,教學(xué)內(nèi)容緊密圍繞軟件開發(fā)過(guò)程中的各種工程化方法、技術(shù)和思想[1]。在現(xiàn)實(shí)的軟件開發(fā)過(guò)程中,軟件維護(hù)占有很重要的地位,許多報(bào)告都指出軟件維護(hù)成本已經(jīng)占到總體成本的40%~70%以上。軟件維護(hù)關(guān)注于“變化”,包括糾錯(cuò)性(corrective)、適應(yīng)性(adaptive)、完善性(perfective)、預(yù)防性(preventative)等維護(hù)類型[2]。當(dāng)前的軟件工程教學(xué)中一般都已經(jīng)包括了軟件維護(hù)相關(guān)理論和方法相關(guān)的內(nèi)容,例如軟件維護(hù)及可維護(hù)性的概念、軟件維護(hù)的類型和過(guò)程、變更管理以及軟件再工程等。但軟件工程實(shí)踐教學(xué)仍然以瀑布式的正向開發(fā)過(guò)程為主,主要體現(xiàn)需求分析、設(shè)計(jì)、實(shí)現(xiàn)和測(cè)試等基本開發(fā)活動(dòng),缺少軟件維護(hù)的實(shí)踐訓(xùn)練。
由于軟件維護(hù)在軟件開發(fā)中的重要性,許多國(guó)內(nèi)外學(xué)者都呼吁在軟件工程教學(xué)中引入軟件維護(hù)實(shí)踐(如文獻(xiàn)[3])。在軟件工程實(shí)踐教學(xué)中引入軟件維護(hù)內(nèi)容主要基于以下這些考慮。
首先,軟件維護(hù)在軟件開發(fā)中占有十分重要的地位,典型的軟件工程開發(fā)中花在軟件維護(hù)上的時(shí)間往往比軟件開發(fā)還要多[3]。而且,大部分畢業(yè)生進(jìn)入軟件開發(fā)機(jī)構(gòu)后都是從維護(hù)性的開發(fā)任務(wù)開始的。
其次,軟件維護(hù)實(shí)踐還能使學(xué)生更直觀地體會(huì)和理解軟件工程方法和原則的重要性。軟件工程教學(xué)中系統(tǒng)地講授了許多重要的軟件工程方法和原則,包括軟件文檔規(guī)范、設(shè)計(jì)原則(如層次化、高內(nèi)聚低耦合等)以及編碼習(xí)慣(如標(biāo)識(shí)符命名、注釋和排版等)等,其中大部分都與軟件的可維護(hù)性相關(guān)。通過(guò)對(duì)文檔不全、設(shè)計(jì)混亂和編碼習(xí)慣不好的軟件系統(tǒng)進(jìn)行維護(hù),可以對(duì)這些方法和原則獲得直觀、深入的認(rèn)識(shí)和理解。例如,對(duì)標(biāo)識(shí)符命名不規(guī)范、缺少注釋、排版混亂的代碼進(jìn)行閱讀和理解,可以深刻認(rèn)識(shí)到好的編碼習(xí)慣對(duì)于維護(hù)工作的重要性。
此外,軟件維護(hù)實(shí)踐能使學(xué)生更好地認(rèn)識(shí)軟件開發(fā)的現(xiàn)實(shí)困難。缺陷報(bào)告、需求變更、軟硬件平臺(tái)的變化等導(dǎo)致軟件演化的因素在現(xiàn)實(shí)的軟件開發(fā)中總是存在的。通過(guò)在實(shí)踐教學(xué)中設(shè)置階段性的需求變更,可以讓學(xué)生對(duì)于現(xiàn)實(shí)的軟件開發(fā)有更加真實(shí)的體驗(yàn),從而提高對(duì)迭代、增量式開發(fā)等實(shí)用的軟件開發(fā)方法和技術(shù)的認(rèn)知。
2 軟件維護(hù)實(shí)踐教學(xué)方案
軟件維護(hù)主要包括糾錯(cuò)性、適應(yīng)性、完善性和預(yù)防性維護(hù)四種類型[2]:糾錯(cuò)性維護(hù)是針對(duì)所發(fā)現(xiàn)的錯(cuò)誤或缺陷而對(duì)軟件進(jìn)行的修改;適應(yīng)性維護(hù)是為了適應(yīng)外部環(huán)境(如硬件、操作系統(tǒng)、外部規(guī)則等)的變化而對(duì)軟件進(jìn)行的修改;完善性維護(hù)是由于功能擴(kuò)展而進(jìn)行的軟件修改;預(yù)防性維護(hù)是面向未來(lái)的維護(hù)需要,為了提高軟件的適應(yīng)性和可維護(hù)性等而進(jìn)行的系統(tǒng)優(yōu)化和改進(jìn)。軟件維護(hù)實(shí)踐教學(xué)應(yīng)以循序漸進(jìn)的方式覆蓋這四個(gè)方面的軟件維護(hù)任務(wù),同時(shí)穿插并突出相關(guān)軟件工程方法和原則的體驗(yàn)和熏陶。
根據(jù)這一總體目標(biāo),相應(yīng)的軟件維護(hù)實(shí)踐教學(xué)將在給定的作為維護(hù)對(duì)象的遺留系統(tǒng)基礎(chǔ)上,分三個(gè)階段進(jìn)行,如圖1所示。遺留系統(tǒng)分析評(píng)估階段的主要目的是在理解遺留系統(tǒng)需求的基礎(chǔ)上對(duì)系統(tǒng)的外部和內(nèi)部質(zhì)量進(jìn)行初步的了解和評(píng)價(jià)。系統(tǒng)改進(jìn)維護(hù)階段的目標(biāo)是以當(dāng)前系統(tǒng)需求為基礎(chǔ),對(duì)遺留系統(tǒng)的缺陷和錯(cuò)誤進(jìn)行修改,對(duì)系統(tǒng)內(nèi)部的設(shè)計(jì)、實(shí)現(xiàn)以及文檔質(zhì)量進(jìn)行改進(jìn)。系統(tǒng)需求演化維護(hù)階段通過(guò)若干次迭代的需求和系統(tǒng)環(huán)境變更,進(jìn)行系統(tǒng)的完善性和適應(yīng)性維護(hù)。針對(duì)新需求和系統(tǒng)環(huán)境設(shè)置的修改將通過(guò)系統(tǒng)測(cè)試確認(rèn),測(cè)試結(jié)果反饋給系統(tǒng)改進(jìn)維護(hù)階段,從而進(jìn)行相應(yīng)的糾錯(cuò)性維護(hù)活動(dòng)。此外,系統(tǒng)修改過(guò)程中發(fā)現(xiàn)的內(nèi)部質(zhì)量問(wèn)題(例如可擴(kuò)展性上的不足等)同樣也會(huì)反饋給系統(tǒng)改進(jìn)維護(hù)階段,從而進(jìn)行相應(yīng)的預(yù)防性維護(hù)活動(dòng)。這種反饋關(guān)系以及需求和系統(tǒng)環(huán)境變更的迭代進(jìn)行使得后兩個(gè)階段將反復(fù)迭代進(jìn)行。
(1) 遺留系統(tǒng)分析評(píng)估階段
與傳統(tǒng)的基于分析、設(shè)計(jì)和實(shí)現(xiàn)的軟件工程實(shí)踐教學(xué)不同,軟件維護(hù)實(shí)踐教學(xué)以已經(jīng)開發(fā)完成的遺留軟件系統(tǒng)作為起點(diǎn)。每個(gè)小組分配到的遺留系統(tǒng)都是由其他人開發(fā)的,猶如在軟件開發(fā)中接手其他小組的維護(hù)工作。因此,首先要求他們?cè)诶斫忭?xiàng)目當(dāng)前需求的基礎(chǔ)上,對(duì)所分配的系統(tǒng)進(jìn)行分析和評(píng)估,從而為后續(xù)的維護(hù)活動(dòng)打下基礎(chǔ)。這階段的主要實(shí)踐任務(wù)包括:
圖1 軟件維護(hù)實(shí)踐教學(xué)過(guò)程
1) 理解遺留系統(tǒng)需求。與正向軟件開發(fā)一樣,軟件維護(hù)實(shí)踐也要從了解系統(tǒng)需求開始。需求是評(píng)價(jià)當(dāng)前系統(tǒng)質(zhì)量,進(jìn)而規(guī)劃并實(shí)施各種糾錯(cuò)性、適應(yīng)性、完善性和預(yù)防性維護(hù)活動(dòng)的基礎(chǔ)。
2) 系統(tǒng)測(cè)試及外部質(zhì)量評(píng)價(jià)。外部質(zhì)量因素是那些用戶能輕易觀察到的軟件特性,例如功能正確性、性能、可靠性、可用性等[2]。通過(guò)系統(tǒng)測(cè)試,可以針對(duì)用戶需求得到遺留系統(tǒng)的外部質(zhì)量總體評(píng)價(jià),以及待糾正的錯(cuò)誤和缺陷列表,從而為糾錯(cuò)性維護(hù)打下基礎(chǔ)。
3) 系統(tǒng)理解及內(nèi)部質(zhì)量評(píng)價(jià)。內(nèi)部質(zhì)量是指與系統(tǒng)內(nèi)部設(shè)計(jì)和實(shí)現(xiàn)相關(guān)的質(zhì)量特性,例如可理解性、可維護(hù)性、可擴(kuò)展性等,它們對(duì)于軟件工程師而言是十分重要的[2]。通過(guò)閱讀遺留系統(tǒng)文檔(可能殘缺不全或質(zhì)量不高)以及系統(tǒng)代碼,同時(shí)借助于相關(guān)輔助理解工具的支持,獲得對(duì)系統(tǒng)設(shè)計(jì)(如體系結(jié)構(gòu)和模塊結(jié)構(gòu)等)和代碼的初步理解,在此基礎(chǔ)上對(duì)系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)質(zhì)量進(jìn)行評(píng)價(jià),從而為預(yù)防性維護(hù)打下基礎(chǔ)。
這一階段首先強(qiáng)化了對(duì)于軟件測(cè)試的實(shí)踐。在以往的教學(xué)實(shí)踐中,我們發(fā)現(xiàn)學(xué)生在正向開發(fā)階段往往不太重視測(cè)試(對(duì)于自己開發(fā)的系統(tǒng)進(jìn)行測(cè)試往往會(huì)覺得沒有必要或比較敷衍了事),且常與調(diào)試混淆。而在軟件維護(hù)實(shí)踐中,測(cè)試對(duì)象是他人開發(fā)的系統(tǒng)(實(shí)踐中常常發(fā)現(xiàn)學(xué)生對(duì)于測(cè)試、評(píng)價(jià)其他人開發(fā)的系統(tǒng)比較有興趣),而且測(cè)試結(jié)果直接決定了對(duì)遺留系統(tǒng)的外部質(zhì)量評(píng)價(jià)和糾錯(cuò)性改進(jìn)方案,因此學(xué)生往往會(huì)認(rèn)真對(duì)待。系統(tǒng)理解能力也非常重要。在教學(xué)實(shí)踐中,可以鼓勵(lì)學(xué)生充分運(yùn)用相關(guān)輔助理解工具進(jìn)行系統(tǒng)理解,例如Eclipse相關(guān)插件所提供的代碼UML視圖、類語(yǔ)法樹、調(diào)用關(guān)系圖、度量信息等輔助理解功能。
除此之外,系統(tǒng)理解及內(nèi)部質(zhì)量評(píng)價(jià)還強(qiáng)化了對(duì)于軟件工程設(shè)計(jì)和實(shí)現(xiàn)原則的認(rèn)識(shí)。通過(guò)閱讀遺留系統(tǒng)文檔和代碼,學(xué)生們可以深切體會(huì)到好的系統(tǒng)設(shè)計(jì)、編碼風(fēng)格以及文檔規(guī)范對(duì)于軟件開發(fā)的重要性。實(shí)踐中,他們經(jīng)常會(huì)抱怨遺留系統(tǒng)文檔不全或不一致、設(shè)計(jì)混亂、編碼風(fēng)格不好,而這些其實(shí)也正是他們自己在正向開發(fā)階段很容易出現(xiàn)的問(wèn)題。
(2) 系統(tǒng)改進(jìn)維護(hù)階段
系統(tǒng)改進(jìn)維護(hù)階段將在遺留系統(tǒng)分析和評(píng)估基礎(chǔ)上,進(jìn)行糾錯(cuò)性和預(yù)防性維護(hù)。針對(duì)用戶需求以及一般的軟件設(shè)計(jì)和實(shí)現(xiàn)質(zhì)量準(zhǔn)則,從外部質(zhì)量和內(nèi)部質(zhì)量?jī)蓚€(gè)方面對(duì)遺留系統(tǒng)進(jìn)行改進(jìn)。這階段的主要實(shí)踐任務(wù)包括:
1) 糾錯(cuò)性維護(hù)實(shí)施。針對(duì)系統(tǒng)測(cè)試過(guò)程中發(fā)現(xiàn)的問(wèn)題,進(jìn)行糾錯(cuò)性維護(hù),包括消除系統(tǒng)意外出錯(cuò)、糾正與功能需求不一致的地方、改進(jìn)系統(tǒng)性能、可靠性等非功能質(zhì)量方面的不足。
2) 回歸測(cè)試及總結(jié)。糾錯(cuò)性維護(hù)結(jié)束后,通過(guò)回歸測(cè)試驗(yàn)證糾錯(cuò)性維護(hù)的效果,并進(jìn)行總結(jié)。
3) 預(yù)防性維護(hù)方案制定及實(shí)施。針對(duì)系統(tǒng)內(nèi)部質(zhì)量評(píng)價(jià)中發(fā)現(xiàn)的問(wèn)題以及糾錯(cuò)性維護(hù)中遇到的困難(例如難以擴(kuò)展的系統(tǒng)結(jié)構(gòu)等),制定并實(shí)施對(duì)系統(tǒng)的預(yù)防性維護(hù)方案,包括對(duì)系統(tǒng)設(shè)計(jì)和編碼質(zhì)量的改進(jìn),以及對(duì)開發(fā)文檔的補(bǔ)充和完善等。
4) 系統(tǒng)評(píng)審及總結(jié)。預(yù)防性維護(hù)結(jié)束后,對(duì)系統(tǒng)的設(shè)計(jì)、代碼及文檔進(jìn)行評(píng)審,總結(jié)改進(jìn)情況以及所獲得的體會(huì)和經(jīng)驗(yàn)。
這一階段首先涵蓋了糾錯(cuò)性維護(hù)和預(yù)防性維護(hù)實(shí)踐。其次,預(yù)防性維護(hù)實(shí)踐通過(guò)系統(tǒng)設(shè)計(jì)、開發(fā)文檔、編碼風(fēng)格等方面的改進(jìn),強(qiáng)化了相關(guān)軟件工程方法和原則的訓(xùn)練。
(3) 系統(tǒng)需求演化維護(hù)階段
前兩個(gè)階段的軟件維護(hù)實(shí)踐都還停留在原有系統(tǒng)基礎(chǔ)上,系統(tǒng)需求演化階段將通過(guò)用戶需求和系統(tǒng)環(huán)境的變化,引導(dǎo)學(xué)生進(jìn)行完善性和適應(yīng)性維護(hù)實(shí)踐。由于現(xiàn)實(shí)中的軟件開發(fā)一般都包含多次迭代和增量,因此這階段的維護(hù)實(shí)踐也將迭代進(jìn)行多次。這階段的主要實(shí)踐任務(wù)包括:
1) 需求和系統(tǒng)環(huán)境變更分析。在原有系統(tǒng)需求基礎(chǔ)上,提出若干新的擴(kuò)展功能要求和系統(tǒng)環(huán)境變更(例如改變?cè)械臄?shù)據(jù)庫(kù)管理系統(tǒng)),要求學(xué)生通過(guò)與助教的溝通和交流明確需求和系統(tǒng)環(huán)境變更要求。
2) 系統(tǒng)修改方案制定及實(shí)施。根據(jù)變更要求和對(duì)系統(tǒng)設(shè)計(jì)、實(shí)現(xiàn)的理解確定系統(tǒng)修改方案并加以實(shí)施。
3) 系統(tǒng)測(cè)試。針對(duì)需求或系統(tǒng)環(huán)境變更進(jìn)行系統(tǒng)測(cè)試,對(duì)系統(tǒng)修改進(jìn)行確認(rèn),所發(fā)現(xiàn)的錯(cuò)誤和缺陷將反饋給糾錯(cuò)性維護(hù)活動(dòng)。
4) 系統(tǒng)內(nèi)部質(zhì)量反饋。針對(duì)需求或系統(tǒng)環(huán)境變更的修改活動(dòng)可以對(duì)系統(tǒng)的內(nèi)部設(shè)計(jì)和實(shí)現(xiàn)質(zhì)量進(jìn)行檢驗(yàn),暴露設(shè)計(jì)、實(shí)現(xiàn)及文檔等方面的問(wèn)題,這些問(wèn)題將反饋給預(yù)防性維護(hù)活動(dòng)。
系統(tǒng)需求演化維護(hù)階段除了涵蓋完善性和適應(yīng)性維護(hù)實(shí)踐外,還具有以下幾個(gè)方面的作用:使學(xué)生體驗(yàn)到真實(shí)軟件開發(fā)中多次迭代的增量式開發(fā)過(guò)程;通過(guò)需求變更直觀體會(huì)到可維護(hù)性、可擴(kuò)展性等內(nèi)部設(shè)計(jì)和實(shí)現(xiàn)質(zhì)量的重要性;驗(yàn)證改進(jìn)維護(hù)階段對(duì)于改進(jìn)系統(tǒng)內(nèi)部質(zhì)量的效果,加深對(duì)于良好的軟件設(shè)計(jì)、編碼和文檔習(xí)慣的認(rèn)識(shí)。
3 教學(xué)方案實(shí)施
軟件工程課程實(shí)驗(yàn)可以按照由淺入深的順序分為認(rèn)知性導(dǎo)入實(shí)驗(yàn)、方法性實(shí)驗(yàn)和綜合實(shí)踐三個(gè)部分,其中前兩部分穿插在一個(gè)學(xué)期的軟件工程課程中進(jìn)行,而綜合實(shí)踐則可以在后續(xù)的軟件實(shí)踐類課程中安排[1]。在教學(xué)實(shí)踐中,軟件維護(hù)實(shí)踐應(yīng)該作為綜合實(shí)踐安排,此時(shí)學(xué)生已經(jīng)有了軟件工程課程教學(xué)和一些正向開發(fā)實(shí)踐(主要包括需求分析、設(shè)計(jì)和實(shí)現(xiàn))基礎(chǔ)。軟件維護(hù)實(shí)踐以3~5人的小組為單位,每個(gè)人可以分別擔(dān)任需求分析、設(shè)計(jì)、實(shí)現(xiàn)和測(cè)試等不同實(shí)踐任務(wù)。
在實(shí)踐項(xiàng)目選擇上,我們從此前的軟件工程課程實(shí)踐、數(shù)據(jù)庫(kù)課程實(shí)踐(數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng))等實(shí)踐項(xiàng)目中選取一些具有典型性的系統(tǒng)實(shí)現(xiàn)(包括文檔和代碼等)作為軟件維護(hù)實(shí)踐候選對(duì)象。這些項(xiàng)目一般已經(jīng)基本實(shí)現(xiàn)了原有的用戶需求,但在外部質(zhì)量和內(nèi)部設(shè)計(jì)和實(shí)現(xiàn)上還存在許多不足。選取這類項(xiàng)目的好處是由類似背景的學(xué)生完成,能夠反映許多典型的軟件實(shí)踐問(wèn)題,同時(shí)相關(guān)項(xiàng)目學(xué)生已經(jīng)有所接觸,也較為熟悉。
在軟件實(shí)踐教學(xué)中,我們選取書店管理系統(tǒng)等多個(gè)在以往軟件工程和數(shù)據(jù)庫(kù)等相關(guān)課程的課程實(shí)踐項(xiàng)目作為軟件維護(hù)實(shí)踐的對(duì)象。這些項(xiàng)目都是以數(shù)據(jù)庫(kù)為核心的信息管理系統(tǒng),這類系統(tǒng)較為典型且本身的需求較容易發(fā)生變化。
(1) 遺留系統(tǒng)分析評(píng)估階段
此階段學(xué)生將首先借助于原始需求說(shuō)明以及與客戶(由助教扮演)的交互明確系統(tǒng)需求。在此基礎(chǔ)上通過(guò)測(cè)試和文檔、代碼分析進(jìn)行外部質(zhì)量和內(nèi)部質(zhì)量評(píng)價(jià)。遺留系統(tǒng)外部質(zhì)量上存在的主要問(wèn)題包括某些功能與需求不符、運(yùn)行不穩(wěn)定、用戶使用不方便等。而內(nèi)部質(zhì)量方面的普遍問(wèn)題包括類結(jié)構(gòu)設(shè)計(jì)混亂、文檔缺乏或不規(guī)范、編碼質(zhì)量差(命名不規(guī)范、缺少注釋)等。
本階段安排約4周時(shí)間,其中第1周用于了解遺留系統(tǒng)原始需求,第2周用于系統(tǒng)測(cè)試,后2周用于系統(tǒng)理解和分析。本階段要求提交系統(tǒng)測(cè)試報(bào)告、系統(tǒng)總體評(píng)價(jià)報(bào)告(包括外部質(zhì)量和內(nèi)部質(zhì)量)。
(2) 系統(tǒng)改進(jìn)維護(hù)階段
此階段的系統(tǒng)改進(jìn)針對(duì)系統(tǒng)測(cè)試報(bào)告中所發(fā)現(xiàn)的錯(cuò)誤和缺陷進(jìn)行糾錯(cuò)性維護(hù),針對(duì)系統(tǒng)總體評(píng)價(jià)報(bào)告中指出的設(shè)計(jì)、編碼和文檔上的不足進(jìn)行改進(jìn)。初次的系統(tǒng)改進(jìn)后,本階段的維護(hù)活動(dòng)還可能在系統(tǒng)需求演化維護(hù)階段的反饋?zhàn)饔孟路磸?fù)多次進(jìn)行(見圖1)。
本階段在每次迭代中安排約2周時(shí)間,要求提交回歸測(cè)試報(bào)告、糾錯(cuò)性維護(hù)總結(jié)以及預(yù)防性維護(hù)總結(jié)。
(3) 系統(tǒng)需求演化維護(hù)階段
此階段的維護(hù)活動(dòng)由需求或系統(tǒng)環(huán)境變更發(fā)起。以書店管理系統(tǒng)為例,遺留系統(tǒng)實(shí)現(xiàn)的基本功能包括圖書查詢、選購(gòu)、訂單生成、付款(現(xiàn)金方式)及簡(jiǎn)單的庫(kù)存管理等。需求變更可以包括增加信用卡支付功能(通過(guò)虛擬的銀行支付接口)、增加郵購(gòu)和網(wǎng)上訂購(gòu)功能、增加會(huì)員制折扣功能等。系統(tǒng)環(huán)境變更可以包括改變所用數(shù)據(jù)庫(kù)管理系統(tǒng)(如由Access改為MySQL)、改變國(guó)內(nèi)地區(qū)標(biāo)準(zhǔn)編碼(用于標(biāo)識(shí)供應(yīng)商及顧客的地區(qū))等。相應(yīng)的維護(hù)活動(dòng)除了滿足這些新需求及系統(tǒng)環(huán)境外,還可以引導(dǎo)學(xué)生進(jìn)一步改進(jìn)系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)等。例如,為了更好的容納信用卡支付這一新的付款方式,可以從現(xiàn)金支付和信用卡支付中抽取出公共的支付方式類,從而改進(jìn)系統(tǒng)的設(shè)計(jì)結(jié)構(gòu)。
本階段在每次迭代中安排約2周時(shí)間,要求提交系統(tǒng)修改方案、測(cè)試報(bào)告和系統(tǒng)內(nèi)部質(zhì)量改進(jìn)反饋報(bào)告。
這樣,在一學(xué)期的軟件實(shí)踐課程中,系統(tǒng)改進(jìn)維護(hù)階段和系統(tǒng)需求演化維護(hù)階段一起可以安排3次左右的迭代,每次完成1~2項(xiàng)需求或系統(tǒng)環(huán)境變更。
我們?cè)趶?fù)旦大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院的軟件工程本科教學(xué)實(shí)踐中利用軟件實(shí)踐課程開展軟件維護(hù)實(shí)踐教學(xué)。軟件實(shí)踐課程安排在軟件工程課程(第六學(xué)期)之后的第七學(xué)期,此時(shí)學(xué)生已經(jīng)系統(tǒng)的學(xué)習(xí)過(guò)軟件工程、數(shù)據(jù)庫(kù)、操作系統(tǒng)等課程,初步具備了開展綜合性軟件開發(fā)實(shí)踐的基礎(chǔ)。
4 總結(jié)
軟件開發(fā)實(shí)踐是軟件工程教學(xué)的重要組成部分。傳統(tǒng)的軟件開發(fā)實(shí)踐教學(xué)主要以瀑布式的正向開發(fā)實(shí)踐為主,忽略了軟件維護(hù)實(shí)踐的訓(xùn)練。軟件維護(hù)實(shí)踐的意義不僅在于軟件維護(hù)在現(xiàn)實(shí)軟件開發(fā)中的重要地位,而且可以使學(xué)生更加直觀、深刻地體會(huì)和理解相關(guān)的軟件工程方法和原則。通過(guò)遺留系統(tǒng)分析評(píng)估以及多次迭代的系統(tǒng)改進(jìn)維護(hù)和需求演化維護(hù),不僅培養(yǎng)了系統(tǒng)理解、修改等軟件維護(hù)實(shí)踐能力,還強(qiáng)化了軟件設(shè)計(jì)準(zhǔn)則、編碼和文檔習(xí)慣以及軟件測(cè)試能力的培養(yǎng)。
參考文獻(xiàn)
[1] 彭鑫,趙文耘,錢樂(lè)秋.軟件工程實(shí)驗(yàn)教學(xué)研究與實(shí)踐[J].計(jì)算機(jī)教育,2007,(20).
[2] Roger S. Pressman著.鄭人杰,馬素霞,白曉穎等譯.軟件工程—實(shí)踐者的研究方法(第6版)[M].機(jī)械工業(yè)出版社.
[3] Margot Postema, Jan Miller and Martin Dick. Including Practical Software Evolution in Software Engineering Education[C]. In Proceedings of 14th Conference on Software Engineering Education and Training, CSEET 2001.