如今,軟件維護已被廣泛接受為 SDLC 的一部分。它代表軟件產(chǎn)品交付后所做的所有修改和更新。有很多原因,為什么需要修改,下面簡要提到其中一些:
- 市場狀況?- 政策隨著時間的推移而變化,例如稅收和新引入的約束,例如如何維護賬本,可能會引發(fā)修改的需要。
- 客戶要求?- 隨著時間的推移,客戶可能會要求軟件中的新特性或功能。
- 主機修改?- 如果目標主機中的任何硬件或平臺(如操作系統(tǒng))發(fā)生變化,則需要更改軟件以保持適應性。
- 組織變更?- 如果客戶端有任何業(yè)務層面的變化,如機構(gòu)實力下降、收購另一家公司、機構(gòu)涉足新業(yè)務等,都可能需要對原有軟件進行修改。
維修類型
在軟件生命周期中,維護類型可能會根據(jù)性質(zhì)而有所不同。它可能只是日常維護任務,因為某些用戶發(fā)現(xiàn)了一些錯誤,或者它本身可能是基于維護規(guī)?;蛐再|(zhì)的大事件。以下是一些基于其特性的維護特性:
- 修復性維護?- 包括為糾正或修復問題而進行的修改和更新,這些問題要么由用戶發(fā)現(xiàn),要么由用戶錯誤報告得出。
- 適應性維護?- 包括用于使軟件產(chǎn)品保持最新并且適應不斷變化的技術(shù)和商業(yè)環(huán)境世界的修改和更新。
- 完善的維護?- 包括為軟件長時間可用而進行的修改和更新。它包括新功能、改進軟件和提高其可靠性和性能的新用戶要求。
- 預防性維護 - 包括為防止軟件未來出現(xiàn)問題而進行的修改和更新。它旨在解決目前不重要但將來可能會導致嚴重問題的問題。
維護成本
報告表明,維護成本很高。一項關(guān)于估算軟件維護的研究發(fā)現(xiàn),維修成本高達整個軟件流程周期成本的67%。
平均而言,軟件維護成本占所有 SDLC 階段的50%以上。有各種因素會導致維護成本升高,例如:
影響維護成本的現(xiàn)實因素
- 任何軟件的標準年齡都被認為是10至15年。
- 舊的軟件本來是要在速度較慢、內(nèi)存和存儲容量較少的機器上工作的,但它們無法與現(xiàn)代硬件上新出現(xiàn)的增強型軟件相抗衡。
- 隨著技術(shù)的進步,維護舊軟件的成本越來越高。
- 大多數(shù)維修工程師都是新手,使用試錯法來糾正問題。
- 通常情況下,所做的更改很容易損害到軟件的原始結(jié)構(gòu),使其在后續(xù)的任何更改都很困難。
- 更改通常沒有記錄在案,這可能會在將來導致更多沖突。
影響維護成本的軟件終端因素
- 軟件程序結(jié)構(gòu)
- 程序設(shè)計語言
- 對外部環(huán)境的依賴
- 工作人員的可靠性和可用性
維護活動
IEEE為順序維護過程活動提供了一個框架。它可以以迭代的方式被使用,并且可以被擴展以便可以包括定制的項目和過程。
這些活動與以下每個階段密切相關(guān):
- 識別與跟蹤?- 涉及與識別修改或維修要求相關(guān)的活動。它是由用戶生成的,或系統(tǒng)可能通過日志或錯誤信息自行報告。在這里,維護類型也進行了分類。
- 分析?- 分析修改對系統(tǒng)的影響,包括安全和安保影響。如果可能的影響很嚴重,則尋找可替代解決方案。然后將一組所需要的修改具體化為需求規(guī)范。對修改/維護的成本進行了分析,得出估算結(jié)論。
- 設(shè)計?- 需要更改或修改的新模塊根據(jù)前一階段設(shè)定的需求規(guī)范進行設(shè)計。為驗證和驗證而創(chuàng)建測試用例。
- 實施?- 新模塊在設(shè)計階段創(chuàng)建的結(jié)構(gòu)化設(shè)計的幫助下進行編碼。每個程序員應該并行進行單元測試。
- 系統(tǒng)測試?- 在新創(chuàng)建的模塊之間進行集成測試。在新的模塊和系統(tǒng)之間也進行集成測試。最后,按照回歸測試程序?qū)ο到y(tǒng)進行整體測試。
- 驗收測試?- 在對系統(tǒng)進行內(nèi)部測試后,在用戶的幫助下對其進行驗收測試。如果處于這種狀態(tài)下,用戶會抱怨他們在下一次迭代中解決或注意到要解決的一些問題。
- 交付?- 驗收測試后,系統(tǒng)通過小型更新包或新安裝的系統(tǒng)部署到整個組織。最終測試在軟件交付后的客戶端進行。
除了用戶手冊的硬拷貝外,如果需要,還提供培訓設(shè)施。
- 維護管理?- 配置管理是系統(tǒng)維護的重要組成部分。它是借助版本控制工具來控制版本,半版本或補丁管理。
軟件再工程
當我們需要更新軟件以保證它適應當前的市場,而不會影響其功能,我們稱之為軟件再工程。這是一個全面的過程,軟件的設(shè)計會變更, 程序會被重新寫入。
傳統(tǒng)的軟件無法使用市場上現(xiàn)有的最新技術(shù)進行調(diào)整。隨著硬件的過時,軟件更新成為一個頭疼的問題。即使軟件隨著時間的推移而衰老,但是它的功能不會變老。
例如,最初的Unix是用匯編語言開發(fā)的。當C語言出現(xiàn),Unix被重新設(shè)計為C語言,因為用匯編語言中的工作是困難的.
除此之外,有時程序員會注意到,軟件的某些部分需要比其他部分更多的維護,它們也需要重新設(shè)計。
重組流程
- 決定重新設(shè)計什么,它是整個軟件或其中的一部分?
- 執(zhí)行逆向工程,以獲得現(xiàn)有軟件的規(guī)格。
- 如果需要的話,重新調(diào)整計劃。例如,將面向函數(shù)的程序更改為面向?qū)ο蟮某绦颉?/li>
- 根據(jù)需要重新構(gòu)造數(shù)據(jù)。
- 應用前沿工程的概念,以獲得重新設(shè)計的軟件。
還有在軟件再工程中很少用到,但是很重要的幾個術(shù)語:
逆向工程
這是一個通過深入分析,了解現(xiàn)有系統(tǒng)來實現(xiàn)系統(tǒng)規(guī)范的過程。這個過程可以看作是逆向的SDLC模式,即我們試圖通過分析較低的抽象層次,以獲得更高的抽象層次。
現(xiàn)有系統(tǒng)是以前設(shè)計的實現(xiàn),對此我們一無所知。然后,設(shè)計師通過查看代碼進行逆向工程,并嘗試獲得設(shè)計。有了設(shè)計,他們就會嘗試總結(jié)出規(guī)范。因此,從代碼到系統(tǒng)規(guī)范的順序是相反的。
項目重組
這是一個重新構(gòu)建現(xiàn)有軟件的過程。這一切都是關(guān)于重新編排源代碼,無論是用相同的編程語言,還是從一個編程語言到另一種編程語言。重組可以有源代碼和數(shù)據(jù)重組,或兩者兼而有之.
重組不會影響軟件的功能,但提高可靠性和可維護性。經(jīng)常導致錯誤的程序組件可以更改的,也可以通過重組來進行更新。
通過重組,可以消除過時硬件平臺上軟件的可靠性。.
正向工程
正向工程是通過逆向工程從手頭的規(guī)范中獲取所需軟件的過程。它假設(shè)過去已經(jīng)完成了一些軟件工程。
正向工程與軟件工程過程是一樣的,只有一點區(qū)別就是,它總是在逆向工程之后執(zhí)行。
組件的可重用性
組件是軟件程序代碼的一部分,它在系統(tǒng)中執(zhí)行獨立的任務。它可以是一個小模塊或子系統(tǒng)本身。
示例
在Web上使用的登錄程序可被視為組件,在軟件中打印系統(tǒng)可以被看作是軟件的一個組件。
組件具有較高的功能內(nèi)聚和較低的耦合率,也就是說,它們相互獨立,可以不依賴于其他模塊的情況下執(zhí)行任務。
在面向?qū)ο螅∣OP)中,設(shè)計的對象非常特定于它們所關(guān)注的問題,并很少有機會在其它軟件中使用。
在模塊化編程中,對模塊進行編碼以執(zhí)行特定的任務,這些任務可以跨越多個其他軟件程序使用。
有一種全新的垂直結(jié)構(gòu),這是基于軟件組件的重用,被稱為基于組件的軟件工程(CBSE)。
可以在各個層次進行重用:
- 應用層?- 將整個應用程序用作新軟件的子系統(tǒng).
- 組件級?- 使用應用程序子系統(tǒng)的位置。
- 模塊級?- 重復使用的功能模塊的位置。
軟件組件提供的接口,可用于不同組件之間建立通信.
再利用過程
可以采用兩種方法:一是保持需求不變并調(diào)整組件,二是保持組件不變并修改需求。
- 需求規(guī)范?- 功能性和非功能性需求被指定,軟件產(chǎn)品必須符合其中,與現(xiàn)有的系統(tǒng)中,用戶輸入或兩者的幫助.
- 設(shè)計?- 這也是一種標準的SDLC過程步驟,其中要求在軟件中用語的定義。系統(tǒng)的基本架構(gòu)作為一個整體,其子系統(tǒng)中創(chuàng)建的.
- 指定組件?- 通過對軟件的設(shè)計,設(shè)計師隔離整個系統(tǒng)分成較小的組件或子系統(tǒng)。一個完整的軟件設(shè)計,變成了一組組巨大的協(xié)同工作的集合.
- 搜索合適的組件?- 軟件構(gòu)件庫是由設(shè)計師稱為搜索匹配元件,功能的基礎(chǔ)上,擬軟件要求上.
- 集成組件?- 所有匹配組件打包在一起,塑造他們作為完整的軟件.
更多建議: