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