文│ 北京郵電大學(xué) 蘆效峰
中國電信昆山分公司 景培榮
隨著智慧城市應(yīng)用功能的增多,軟件開發(fā)所面臨的問題域的復(fù)雜性急劇膨脹,系統(tǒng)的規(guī)模和復(fù)雜度空前擴(kuò)大。日益提升的軟件交付復(fù)雜程度對于軟件工程技術(shù)要求的不斷提高。由于城市化進(jìn)程的突飛猛進(jìn),智慧城市已成發(fā)展趨勢,政府管理者和企業(yè)面臨全新挑戰(zhàn),因而亟待提升軟件交付能力,預(yù)測并盡力規(guī)避失敗風(fēng)險,縮短產(chǎn)品上市和服務(wù)響應(yīng)時間。在開發(fā)智慧城市這個大系統(tǒng)的時候一定要以軟件工程的思想指導(dǎo),實現(xiàn)有效的管理,控制軟件的復(fù)雜度。軟件工程以系統(tǒng)性的、規(guī)范化的、可定量的過程化方法去開發(fā)和維護(hù)軟件,把經(jīng)過時間考驗而證明正確的管理技術(shù)和當(dāng)前能夠得到的最好的技術(shù)方法結(jié)合起來。
軟件工程的目標(biāo)是:在給定成本、進(jìn)度的前提下,開發(fā)出具有可修改性、有效性、可靠性、可理解性、可維護(hù)性、可重用性、可適應(yīng)性、可移植性、可追蹤性和可互操作性并且滿足用戶需求的軟件產(chǎn)品(如圖1所示)。追求這些目標(biāo)有助于提高軟件產(chǎn)品的質(zhì)量和開發(fā)效率,減少維護(hù)的困難。下面分別介紹這些概念。
(1)可修改性(modifiablity)。容許對系統(tǒng)進(jìn)行修改而不增加原系統(tǒng)的復(fù)雜性。它支持軟件的調(diào)試與維護(hù),是一個難以達(dá)到的目標(biāo)。
(2)有效性(efficiency)。軟件系統(tǒng)能最有效地利用計算機(jī)的時間資源和空間資源。各種計算機(jī)軟件無不將系統(tǒng)的時/空開銷作為衡量軟件質(zhì)量的一項重要技術(shù)指標(biāo)。很多場合,在追求時間有效性和空間有效性方面會發(fā)生矛盾,這時不得不犧牲時間效率換取空間有效性或犧牲空間效率換取時間有效性。時/空折衷是經(jīng)常出現(xiàn)的。有經(jīng)驗的軟件設(shè)計人員會巧妙地利用折衷概念,在具體的物理環(huán)境中實現(xiàn)用戶的需求和自己的設(shè)計。
圖1 軟件工程的目標(biāo)
(3)可靠性(reliability)。能防止因概念、設(shè)計和結(jié)構(gòu)等方面的不完善造成的軟件系統(tǒng)失效,具有挽回因操作不當(dāng)造成軟件系統(tǒng)失效的能力。對于實時嵌入式計算機(jī)系統(tǒng),可靠性是一個非常重要的目標(biāo)。因為軟件要實時地控制一個物理過程,如宇宙飛船的導(dǎo)航、核電站的運行等。如果可靠性得不到保證,一旦出現(xiàn)問題可能是災(zāi)難性的,后果將不堪設(shè)想。因此在軟件開發(fā)、編碼和測試過程中,必須將可靠性放在重要地位。
(4)可理解性(understandability)。系統(tǒng)具有清晰的結(jié)構(gòu),能直接反映問題的需求??衫斫庑杂兄诳刂栖浖到y(tǒng)的復(fù)雜性,并支持軟件的維護(hù)、移植或重用。
(5)可維護(hù)性(maintainability)。軟件產(chǎn)品交付用戶使用后,能夠?qū)λM(jìn)行修改,以便改正潛伏的錯誤,改進(jìn)性能和其他屬性,使軟件產(chǎn)品適應(yīng)環(huán)境的變化等。由于軟件是邏輯產(chǎn)品,只要用戶需要,它可以無限期的使用下去,因此軟件維護(hù)是不可避免的。軟件維護(hù)費用在軟件開發(fā)費用中占有很大的比重。可維護(hù)性是軟件工程中一項十分重要的目標(biāo)。軟件的可理解性和可修改性有利于軟件的可維護(hù)性。
(6)可重用性(reusebility)。概念或功能相對獨立的一個或一組相關(guān)模塊定義為一個軟部件。軟部件可以在多種場合應(yīng)用的程度稱為部件的可重用性??芍赜玫能洸考械目梢圆患有薷闹苯邮褂茫械男枰薷暮笤儆???芍赜密洸考?yīng)具有清晰的結(jié)構(gòu)和注解,應(yīng)具有正確的編碼和較低的時/空開銷。各種可重用軟部件還可以按照某種規(guī)則存放在軟部件庫中,供軟件工程師選用??芍赜眯杂兄谔岣哕浖a(chǎn)品的質(zhì)量和開發(fā)效率、有助于降低軟件的開發(fā)和維護(hù)費用。從更廣泛的意義上理解,軟件工程的可重用性還應(yīng)該包括:應(yīng)用項目的重用、規(guī)格說明(也稱為規(guī)約)的重用、設(shè)計的重用、概念和方法的重用等。一般來說,重用的層次越高,帶來的效益也就越大。
(7)可適應(yīng)性(adaptability)。軟件在不同的系統(tǒng)約束條件下,使用戶需求得到滿足的難易程度。適應(yīng)性強(qiáng)的軟件應(yīng)采用廣為流行的程序設(shè)計語言編碼,在廣為流行的操作系統(tǒng)環(huán)境中運行,采用標(biāo)準(zhǔn)的術(shù)語和格式書寫文檔。適應(yīng)性強(qiáng)的軟件較容易推廣使用。
(8)可移植性(portability)。軟件從一個計算機(jī)系統(tǒng)或環(huán)境搬到另一個計算機(jī)系統(tǒng)或環(huán)境的難易程度。為了獲得比較高的可移植性,在軟件設(shè)計過程中通常采用通用的程序設(shè)計語言和運行環(huán)境支撐。對依賴于計算機(jī)系統(tǒng)的低級(物理)特征部分,如編譯系統(tǒng)的目標(biāo)代碼生成,應(yīng)相對獨立、集中。這樣,與處理機(jī)無關(guān)的部分就可以移植到其他系統(tǒng)上使用??梢浦残灾С周浖目芍赜眯院涂蛇m應(yīng)性。
(9)可追蹤性(tracebility)。根據(jù)軟件需求對軟件設(shè)計、程序進(jìn)行正向追蹤,或根據(jù)程序、軟件設(shè)計對軟件需求進(jìn)行逆向追蹤的能力。軟件可追蹤性依賴于軟件開發(fā)各個階段文檔和程序的完整性、一致性和可理解性。降低系統(tǒng)的復(fù)雜性會提高軟件的可追蹤性。軟件在測試或維護(hù)過程中或程序在執(zhí)行期間出現(xiàn)問題時,應(yīng)記錄程序事件或有關(guān)模塊中的全部或部分指令現(xiàn)場,以便分析、追蹤產(chǎn)生問題的因果關(guān)系。
(10)可互操作性(interoperability)。多個軟件元素相互通信并協(xié)同完成任務(wù)的能力。為了實現(xiàn)可互操作性,軟件開發(fā)通常要遵循某種標(biāo)準(zhǔn),支持折衷標(biāo)準(zhǔn)的環(huán)境將為軟件元素之間的可互操作提供便利??苫ゲ僮餍栽诜植加嬎悱h(huán)境下尤為重要。
生產(chǎn)一個最終能滿足需求且達(dá)到工程目標(biāo)的軟件產(chǎn)品所需要的步驟。軟件工程過程主要包括開發(fā)過程、運作過程、維護(hù)過程(如圖2所示)。它們覆蓋了需求、設(shè)計、實現(xiàn)、確認(rèn)以及維護(hù)等活動。需求活動包括問題分析和需求分析。問題分析獲取需求定義,又稱軟件需求規(guī)約。需求分析生成功能規(guī)約。設(shè)計活動一般包括概要設(shè)計和詳細(xì)設(shè)計。概要設(shè)計建立整個軟件系統(tǒng)結(jié)構(gòu),包括子系統(tǒng)、模塊以及相關(guān)層次的說明、每一模塊的接口定義。詳細(xì)設(shè)計產(chǎn)生程序員可用的模塊說明,包括每一模塊中數(shù)據(jù)結(jié)構(gòu)說明及加工描述。實現(xiàn)活動把設(shè)計結(jié)果轉(zhuǎn)換為可執(zhí)行的程序代碼。確認(rèn)活動貫穿于整個開發(fā)過程,實現(xiàn)完成后的確認(rèn),保證最終產(chǎn)品滿足用戶的要求。維護(hù)活動包括使用過程中的擴(kuò)充、修改與完善。除了以上過程,還有管理過程、支持過程、培訓(xùn)過程等。
圖2 軟件工程的過程
軟件工程的原則是指圍繞工程設(shè)計、工程支持以及工程管理在軟件開發(fā)過程中必須遵循以下四項基本原則:
(1)選取適宜開發(fā)范型。該原則與系統(tǒng)設(shè)計有關(guān)。在系統(tǒng)設(shè)計中,軟件需求、硬件需求以及其他因素之間是相互制約、相互影響的,經(jīng)常需要權(quán)衡。因此,必須認(rèn)識需求定義的易變性,采用適宜的開發(fā)范型予以控制,以保證軟件產(chǎn)品滿足用戶的要求。
(2)采用合適的設(shè)計方法。在軟件設(shè)計中,通常要考慮軟件的模塊化、抽象與信息隱蔽、局部化、一致性以及適應(yīng)性等特征。合適的設(shè)計方法有助于這些特征的實現(xiàn),以達(dá)到軟件工程的目標(biāo)。
(3)提供高質(zhì)量的工程支持。在軟件工程中,軟件工具與環(huán)境對軟件過程的支持頗為重要。軟件工程項目的質(zhì)量與開銷直接取決于對軟件工程所提供的支撐質(zhì)量和效用。
(4)重視開發(fā)過程的管理。軟件工程的管理,直接影響可用資源的有效利用,生產(chǎn)滿足目標(biāo)的軟件產(chǎn)品,提高軟件組織的生產(chǎn)能力等問題。因此,僅當(dāng)軟件過程得以有效管理時,才能實現(xiàn)有效的軟件工程。
軟件工程的目標(biāo)是可用性、正確性和合算性;實施一個軟件工程要選取適宜的開發(fā)范型,要采用合適的設(shè)計方法,要提供高質(zhì)量的工程支撐,要實行開發(fā)過程的有效管理;軟件工程活動主要包括需求、設(shè)計、實現(xiàn)、確認(rèn)和支持等活動,每一活動可根據(jù)特定的軟件工程,采用合適的開發(fā)范型、設(shè)計方法、支持過程以及過程管理。根據(jù)軟件工程的過程,軟件工程學(xué)科的研究內(nèi)容主要包括:軟件開發(fā)范型、軟件開發(fā)方法、軟件過程、軟件工具、軟件開發(fā)環(huán)境、計算機(jī)輔助軟件工程(CASE)及軟件經(jīng)濟(jì)學(xué)等。