軟件工程 維護(hù)

2021-10-29 10:00 更新

如今,軟件維護(hù)已被廣泛接受為 SDLC 的一部分。它代表軟件產(chǎn)品交付后所做的所有修改和更新。有很多原因,為什么需要修改,下面簡(jiǎn)要提到其中一些:

  • 市場(chǎng)狀況?- 政策隨著時(shí)間的推移而變化,例如稅收和新引入的約束,例如如何維護(hù)賬本,可能會(huì)引發(fā)修改的需要。
  • 客戶要求?- 隨著時(shí)間的推移,客戶可能會(huì)要求軟件中的新特性或功能。
  • 主機(jī)修改?- 如果目標(biāo)主機(jī)中的任何硬件或平臺(tái)(如操作系統(tǒng))發(fā)生變化,則需要更改軟件以保持適應(yīng)性。
  • 組織變更?- 如果客戶端有任何業(yè)務(wù)層面的變化,如機(jī)構(gòu)實(shí)力下降、收購另一家公司、機(jī)構(gòu)涉足新業(yè)務(wù)等,都可能需要對(duì)原有軟件進(jìn)行修改。

維修類型

在軟件生命周期中,維護(hù)類型可能會(huì)根據(jù)性質(zhì)而有所不同。它可能只是日常維護(hù)任務(wù),因?yàn)槟承┯脩舭l(fā)現(xiàn)了一些錯(cuò)誤,或者它本身可能是基于維護(hù)規(guī)?;蛐再|(zhì)的大事件。以下是一些基于其特性的維護(hù)特性:

  • 修復(fù)性維護(hù)?- 包括為糾正或修復(fù)問題而進(jìn)行的修改和更新,這些問題要么由用戶發(fā)現(xiàn),要么由用戶錯(cuò)誤報(bào)告得出。
  • 適應(yīng)性維護(hù)?- 包括用于使軟件產(chǎn)品保持最新并且適應(yīng)不斷變化的技術(shù)和商業(yè)環(huán)境世界的修改和更新。
  • 完善的維護(hù)?- 包括為軟件長(zhǎng)時(shí)間可用而進(jìn)行的修改和更新。它包括新功能、改進(jìn)軟件和提高其可靠性和性能的新用戶要求。
  • 預(yù)防性維護(hù) - 包括為防止軟件未來出現(xiàn)問題而進(jìn)行的修改和更新。它旨在解決目前不重要但將來可能會(huì)導(dǎo)致嚴(yán)重問題的問題。

維護(hù)成本

報(bào)告表明,維護(hù)成本很高。一項(xiàng)關(guān)于估算軟件維護(hù)的研究發(fā)現(xiàn),維修成本高達(dá)整個(gè)軟件流程周期成本的67%。

平均而言,軟件維護(hù)成本占所有 SDLC 階段的50%以上。有各種因素會(huì)導(dǎo)致維護(hù)成本升高,例如:

影響維護(hù)成本的現(xiàn)實(shí)因素

  • 任何軟件的標(biāo)準(zhǔn)年齡都被認(rèn)為是10至15年。
  • 舊的軟件本來是要在速度較慢、內(nèi)存和存儲(chǔ)容量較少的機(jī)器上工作的,但它們無法與現(xiàn)代硬件上新出現(xiàn)的增強(qiáng)型軟件相抗衡。
  • 隨著技術(shù)的進(jìn)步,維護(hù)舊軟件的成本越來越高。
  • 大多數(shù)維修工程師都是新手,使用試錯(cuò)法來糾正問題。
  • 通常情況下,所做的更改很容易損害到軟件的原始結(jié)構(gòu),使其在后續(xù)的任何更改都很困難。
  • 更改通常沒有記錄在案,這可能會(huì)在將來導(dǎo)致更多沖突。

影響維護(hù)成本的軟件終端因素

  • 軟件程序結(jié)構(gòu)
  • 程序設(shè)計(jì)語言
  • 對(duì)外部環(huán)境的依賴
  • 工作人員的可靠性和可用性

維護(hù)活動(dòng)

IEEE為順序維護(hù)過程活動(dòng)提供了一個(gè)框架。它可以以迭代的方式被使用,并且可以被擴(kuò)展以便可以包括定制的項(xiàng)目和過程。

這些活動(dòng)與以下每個(gè)階段密切相關(guān):

  • 識(shí)別與跟蹤?- 涉及與識(shí)別修改或維修要求相關(guān)的活動(dòng)。它是由用戶生成的,或系統(tǒng)可能通過日志或錯(cuò)誤信息自行報(bào)告。在這里,維護(hù)類型也進(jìn)行了分類。
  • 分析?- 分析修改對(duì)系統(tǒng)的影響,包括安全和安保影響。如果可能的影響很嚴(yán)重,則尋找可替代解決方案。然后將一組所需要的修改具體化為需求規(guī)范。對(duì)修改/維護(hù)的成本進(jìn)行了分析,得出估算結(jié)論。
  • 設(shè)計(jì)?- 需要更改或修改的新模塊根據(jù)前一階段設(shè)定的需求規(guī)范進(jìn)行設(shè)計(jì)。為驗(yàn)證和驗(yàn)證而創(chuàng)建測(cè)試用例。
  • 實(shí)施?- 新模塊在設(shè)計(jì)階段創(chuàng)建的結(jié)構(gòu)化設(shè)計(jì)的幫助下進(jìn)行編碼。每個(gè)程序員應(yīng)該并行進(jìn)行單元測(cè)試。
  • 系統(tǒng)測(cè)試?- 在新創(chuàng)建的模塊之間進(jìn)行集成測(cè)試。在新的模塊和系統(tǒng)之間也進(jìn)行集成測(cè)試。最后,按照回歸測(cè)試程序?qū)ο到y(tǒng)進(jìn)行整體測(cè)試。
  • 驗(yàn)收測(cè)試?- 在對(duì)系統(tǒng)進(jìn)行內(nèi)部測(cè)試后,在用戶的幫助下對(duì)其進(jìn)行驗(yàn)收測(cè)試。如果處于這種狀態(tài)下,用戶會(huì)抱怨他們?cè)谙乱淮蔚薪鉀Q或注意到要解決的一些問題。
  • 交付?- 驗(yàn)收測(cè)試后,系統(tǒng)通過小型更新包或新安裝的系統(tǒng)部署到整個(gè)組織。最終測(cè)試在軟件交付后的客戶端進(jìn)行。
    除了用戶手冊(cè)的硬拷貝外,如果需要,還提供培訓(xùn)設(shè)施。
  • 維護(hù)管理?- 配置管理是系統(tǒng)維護(hù)的重要組成部分。它是借助版本控制工具來控制版本,半版本或補(bǔ)丁管理。

軟件再工程

當(dāng)我們需要更新軟件以保證它適應(yīng)當(dāng)前的市場(chǎng),而不會(huì)影響其功能,我們稱之為軟件再工程。這是一個(gè)全面的過程,軟件的設(shè)計(jì)會(huì)變更, 程序會(huì)被重新寫入。

傳統(tǒng)的軟件無法使用市場(chǎng)上現(xiàn)有的最新技術(shù)進(jìn)行調(diào)整。隨著硬件的過時(shí),軟件更新成為一個(gè)頭疼的問題。即使軟件隨著時(shí)間的推移而衰老,但是它的功能不會(huì)變老。

例如,最初的Unix是用匯編語言開發(fā)的。當(dāng)C語言出現(xiàn),Unix被重新設(shè)計(jì)為C語言,因?yàn)橛脜R編語言中的工作是困難的.

除此之外,有時(shí)程序員會(huì)注意到,軟件的某些部分需要比其他部分更多的維護(hù),它們也需要重新設(shè)計(jì)。

重組流程

  • 決定重新設(shè)計(jì)什么,它是整個(gè)軟件或其中的一部分?
  • 執(zhí)行逆向工程,以獲得現(xiàn)有軟件的規(guī)格。
  • 如果需要的話,重新調(diào)整計(jì)劃。例如,將面向函數(shù)的程序更改為面向?qū)ο蟮某绦颉?/li>
  • 根據(jù)需要重新構(gòu)造數(shù)據(jù)。
  • 應(yīng)用前沿工程的概念,以獲得重新設(shè)計(jì)的軟件。

還有在軟件再工程中很少用到,但是很重要的幾個(gè)術(shù)語:

逆向工程

這是一個(gè)通過深入分析,了解現(xiàn)有系統(tǒng)來實(shí)現(xiàn)系統(tǒng)規(guī)范的過程。這個(gè)過程可以看作是逆向的SDLC模式,即我們?cè)噲D通過分析較低的抽象層次,以獲得更高的抽象層次。

現(xiàn)有系統(tǒng)是以前設(shè)計(jì)的實(shí)現(xiàn),對(duì)此我們一無所知。然后,設(shè)計(jì)師通過查看代碼進(jìn)行逆向工程,并嘗試獲得設(shè)計(jì)。有了設(shè)計(jì),他們就會(huì)嘗試總結(jié)出規(guī)范。因此,從代碼到系統(tǒng)規(guī)范的順序是相反的。

項(xiàng)目重組

這是一個(gè)重新構(gòu)建現(xiàn)有軟件的過程。這一切都是關(guān)于重新編排源代碼,無論是用相同的編程語言,還是從一個(gè)編程語言到另一種編程語言。重組可以有源代碼和數(shù)據(jù)重組,或兩者兼而有之.

重組不會(huì)影響軟件的功能,但提高可靠性和可維護(hù)性。經(jīng)常導(dǎo)致錯(cuò)誤的程序組件可以更改的,也可以通過重組來進(jìn)行更新。

通過重組,可以消除過時(shí)硬件平臺(tái)上軟件的可靠性。.

正向工程

正向工程是通過逆向工程從手頭的規(guī)范中獲取所需軟件的過程。它假設(shè)過去已經(jīng)完成了一些軟件工程。

正向工程與軟件工程過程是一樣的,只有一點(diǎn)區(qū)別就是,它總是在逆向工程之后執(zhí)行。

組件的可重用性

組件是軟件程序代碼的一部分,它在系統(tǒng)中執(zhí)行獨(dú)立的任務(wù)。它可以是一個(gè)小模塊或子系統(tǒng)本身。

示例

在Web上使用的登錄程序可被視為組件,在軟件中打印系統(tǒng)可以被看作是軟件的一個(gè)組件。

組件具有較高的功能內(nèi)聚和較低的耦合率,也就是說,它們相互獨(dú)立,可以不依賴于其他模塊的情況下執(zhí)行任務(wù)。

在面向?qū)ο螅∣OP)中,設(shè)計(jì)的對(duì)象非常特定于它們所關(guān)注的問題,并很少有機(jī)會(huì)在其它軟件中使用。

在模塊化編程中,對(duì)模塊進(jìn)行編碼以執(zhí)行特定的任務(wù),這些任務(wù)可以跨越多個(gè)其他軟件程序使用。

有一種全新的垂直結(jié)構(gòu),這是基于軟件組件的重用,被稱為基于組件的軟件工程(CBSE)。

可以在各個(gè)層次進(jìn)行重用:

  • 應(yīng)用層?- 將整個(gè)應(yīng)用程序用作新軟件的子系統(tǒng).
  • 組件級(jí)?- 使用應(yīng)用程序子系統(tǒng)的位置。
  • 模塊級(jí)?- 重復(fù)使用的功能模塊的位置。

軟件組件提供的接口,可用于不同組件之間建立通信.

再利用過程

可以采用兩種方法:一是保持需求不變并調(diào)整組件,二是保持組件不變并修改需求。

  • 需求規(guī)范?- 功能性和非功能性需求被指定,軟件產(chǎn)品必須符合其中,與現(xiàn)有的系統(tǒng)中,用戶輸入或兩者的幫助.
  • 設(shè)計(jì)?- 這也是一種標(biāo)準(zhǔn)的SDLC過程步驟,其中要求在軟件中用語的定義。系統(tǒng)的基本架構(gòu)作為一個(gè)整體,其子系統(tǒng)中創(chuàng)建的.
  • 指定組件?- 通過對(duì)軟件的設(shè)計(jì),設(shè)計(jì)師隔離整個(gè)系統(tǒng)分成較小的組件或子系統(tǒng)。一個(gè)完整的軟件設(shè)計(jì),變成了一組組巨大的協(xié)同工作的集合.
  • 搜索合適的組件?- 軟件構(gòu)件庫是由設(shè)計(jì)師稱為搜索匹配元件,功能的基礎(chǔ)上,擬軟件要求上.
  • 集成組件?- 所有匹配組件打包在一起,塑造他們作為完整的軟件.
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)