官术网_书友最值得收藏!

  • 現代軟件工程
  • 周蘇
  • 5084字
  • 2020-05-29 11:56:02

1.1 計算機系統與軟件

硬件工程和軟件工程都可以看成是一門更廣義的學科——計算機系統工程的一部分。

用于計算機硬件的工程技術是由電子設計技術發展起來的。今天,硬件設計技術已經達到比較成熟的水平,制造方法仍在不斷地改進,可靠性已是一種可以期待的現實。

但是,計算機軟件工程卻還處于某種困境之中。在以計算機為基礎的系統中,軟件已經取代硬件成為系統中設計起來最困難、最不容易成功(按時完成和不超過預計的成本),而且是最不容易管理的部分。另一方面,隨著以計算機為基礎的系統在數量、復雜程度和應用范圍上的不斷增長,對軟件的需求卻仍然有增無減。

計算機系統工程的主要內容是對系統所要求的功能加以揭示、分析,并把它們分配給系統的各個部分,如圖1-2所示。

978-7-111-52634-6-Chapter01-2.jpg

圖1-2 計算機系統工程

在大多數新系統創建時,對系統所要求的功能往往只有模糊的概念。系統分析和定義的目的在于項目的范圍,這就要對需要進行處理的信息、所要求的功能、所期望的性能,以及設計的約束和檢驗的標準等進行系統、詳細的分析。

在范圍確定之后,計算機系統工程師必須考慮多種能潛在滿足項目范圍的、可供選擇的配置,在綜合考慮各項因素之后,選擇其中的一種配置,并將系統的功能分配給系統的各個部分(例如硬件和軟件)。本書主要討論其中的軟件工程部分。

1.1.1 軟件的本質

現在的軟件具有產品和產品交付載體的雙重作用。作為一個產品,它顯示了由計算機硬件體現的計算能力,更廣泛地說,顯示的是由一個可被本地硬件設備訪問的計算機網絡體現的計算潛力。無論是駐留在移動電話還是大型計算機中,軟件都扮演著信息轉換的角色:產生、管理、獲取、修改、顯示或者傳輸各種信息,簡單如幾個比特的傳遞或復雜如從多個獨立的數據源獲取的多媒體演示。而作為產品生產的載體,軟件提供了計算機控制(操作系統)、信息通信(網絡)以及應用程序開發和控制(軟件工具和環境)的基礎平臺。

軟件提供了當今這個時代最重要的產品——信息。它會轉換個人數據(例如個人財務交易),使信息在一定范圍內發揮更大的作用;它通過管理商業信息提升競爭力,為世界范圍的信息網絡提供通路(比如因特網),并對各類格式的信息提供不同的查詢方式。

在最近半個世紀里,計算機軟件的作用發生了很大的變化。硬件性能的極大提高、計算機結構的巨大變化、內存和存儲容量的大幅度增加,以及種類繁多的輸入和輸出方法都促使計算機系統的結構變得更加復雜,功能更加強大。如果系統開發成功,復雜的結構和功能可以產生驚人的效果,但是同時復雜性也給系統開發人員帶來巨大的挑戰。

現在,龐大的軟件產業已經成為了工業經濟中的主導因素。早期的獨立程序員也已經被專業的軟件開發團隊所代替,團隊中的不同專業技術人員可分別關注復雜的應用系統中某一個技術部分。然而,同過去獨立程序員一樣,開發現代計算機系統時,軟件行業依然面臨同樣的問題,現列舉如下。

1)軟件生產不能滿足日益增長的需要。

2)軟件開發成本和開發進度的估計往往不準確。實際成本有時高出預計成本好幾倍,預計完工的時間往往推遲幾個月,甚至更長時間。

3)軟件開發人員和用戶之間的信息交流不充分,導致用戶對完成的軟件滿意度很低。

4)軟件價格昂貴,軟件成本在整個計算機系統中所占的比例急劇上升,軟件已成為許多計算機系統中花錢最多的項目。

5)軟件質量難以保證,軟件質量保證技術還沒有真正應用到軟件開發的全過程。

6)軟件可維護性差,程序中的錯誤很難改正,或者當硬件環境發生變化時,想要進行的適應性或完善性維護都是極其困難的。

為了克服軟件危機,人們開始考慮采用工程化方法和工程途徑來研制和維護軟件。20世紀60年代末至70年代初,逐漸發展起一組總稱為“軟件工程”的技術。這些技術把軟件作為一個工程產品來處理:它需要計劃、分析、設計、實現、測試及維護。

1.1.2 定義軟件

2006年出版的《中國大百科全書》給軟件下的定義是:“計算機系統中的程序和有關的文件。程序是計算任務的處理對象和處理規則的描述,文件是為了便于了解程序所需的資料說明。程序必須裝入機器內部才能工作,文件一般是給人看的,不一定裝入機器。程序作為一種具有邏輯結構的信息,精確而完整地描述計算任務中的處理對象和處理規則。這一描述還必須通過相應的實體才能體現。”

也就是說,“軟件”不僅僅是指程序,在軟件研制過程中按一定規格產生的各種文件也是軟件不可缺少的組成部分。

軟件是邏輯的而非物理的系統元素。因此,軟件和硬件具有完全不同的特性。

1)軟件是設計開發的,而不是傳統意義上生產制造的。

雖然軟件開發和硬件制造存在某些相似點,但兩者有根本不同:兩者均可通過優秀的設計獲得高品質產品,但硬件在制造階段可能會引入質量問題,這在軟件中并不存在(或者易于糾正);兩者都依賴人,但是人員和工作成果之間的對應關系完全不同;它們都需要構建產品,但是構建方法不同。軟件產品成本主要在開發設計,不能像管理制造項目那樣管理軟件開發項目。

2)軟件不會“磨損”。

圖1-3描述了硬件的失效率,它是時間的函數。這個被稱為“浴缸曲線”的關系圖顯示:硬件在早期具有相對較高的失效率(這種失效通常來自設計或生產缺陷);缺陷被逐個糾正之后,失效率隨之降低并在一段時間內保持平穩(理想情況下很低)。然而,隨著時間推移,因為灰塵、震動、不當使用、溫度超限及其他環境問題所造成的硬件組件損耗累積的效果,使得失效率再次提高。簡而言之,硬件開始“磨損”了。

而軟件不會受引起硬件磨損的環境問題的影響。因此,從理論上來說,軟件的失效率曲線應該呈現為如圖1-4所示的“理想曲線”。未知的缺陷將在程序的生命周期的前期造成高失效率。然而隨著錯誤被糾正,曲線將趨于平緩。“理想曲線”只是軟件實際失效模型的粗略簡化,曲線的含義很明顯——軟件不會磨損,但是軟件退化的確存在。

978-7-111-52634-6-Chapter01-3.jpg

圖1-3 硬件失效曲線圖

978-7-111-52634-6-Chapter01-4.jpg

圖1-4 軟件失效曲線圖

這個似乎矛盾的現象用如圖1-4所示的“實際曲線”可以很好地解釋。在完整的生存周期里,軟件將會面臨變更,每次變更都可能引入新的錯誤,使得失效率像“實際曲線”那樣陡然上升。在曲線回到最初的穩定失效率狀態前,新的變更會引起曲線又一次上升。就這樣,最小的失效率點沿類似于斜線逐漸上升,可以說,不斷地變更是軟件退化的根本原因。

磨損的硬件部件可以用備用部件替換,而軟件卻不存在備用部件。每個軟件的缺陷都暗示了設計的缺陷或者在從設計轉化到計算機可執行代碼的過程中產生的錯誤。因此,軟件維護要應對變更請求,比硬件維護更為復雜。

3)雖然整個工業向著基于構件的構造模式發展,然而大多數軟件仍是根據實際的顧客需求定制的。

工程學科的發展將產生一系列標準的設計器件。可復用構件的使用使得工程師可以專心于設計中真正創新的部分。在硬件設計中,構件復用是工程進程中通用的方法。而在軟件設計中,大規模的復用剛剛開始嘗試。

軟件構件應該設計并實現成可在不同程序中復用的組件。現代的可復用構件封裝了數據和對數據的處理,使得軟件工程師能夠利用可復用的構件構造新的應用程序。例如,現在的交互式用戶界面使用可復用構件構造圖形窗口、下拉菜單和各種交互機制,構造用戶界面所需要的數據結構和處理細節被封裝在用于用戶界面設計的可重用構件庫中。

1.1.3 軟件應用領域

計算機軟件可以被分為以下7個大類。

1)系統軟件:這是一整套服務于其他程序的程序。某些系統軟件(如編譯器、編輯器和文件管理軟件)處理復雜但確定的信息結構,另一些系統程序(如操作系統構件、驅動程序、網絡軟件和遠程通信處理器)主要處理的是不確定的數據。無論何種情況,系統軟件通常都具有以下特點:和計算機硬件大量交互,多用戶大量使用,需要調度、資源共享和復雜進程管理的同步操作,復雜的數據結構以及多種外部接口。

2)應用軟件:是指解決特定業務需要的獨立程序。這類應用軟件處理商務或技術數據,以協助業務操作和管理或技術決策。除了傳統的數據處理(見圖1-5),應用軟件也被用于業務功能的實時控制,例如銷售點的交易處理、實時制造過程控制等。

3)工程/科學軟件:這類軟件通常帶有“數值計算”算法的特征,涵蓋了廣泛的應用領域,從天文學到軌道動力學,從分子生物學到自動制造業。科學工程領域的應用軟件已經不再局限于傳統的數值算法,計算機輔助設計、系統仿真和其他的交互性應用程序已經呈現出實時性甚至具有系統軟件的特性。

978-7-111-52634-6-Chapter01-5.jpg

圖1-5 應用軟件——飛行數據集成系統

4)嵌入式軟件:存在于某個產品或者系統中,可實現和控制面向最終使用者和系統本身的特性和功能。嵌入式軟件可以執行有限但難以實現的功能(如微波爐的按鍵控制)或者提供重要的功能和控制能力(如汽車中的燃油控制、儀表板顯示和制動系統等汽車電子功能)。

5)產品線軟件:產品為不同用戶的使用提供特定功能。產品線軟件關注有限的特定的專業市場(如庫存控制產品)或者大眾消費品市場(如文字處理、電子制表、計算機繪圖、多媒體、娛樂、數據庫管理、個人及公司財務應用軟件)。

6)Web應用軟件:也稱“Web應用”(WebApp),是一類以網絡為中心的軟件,其概念涵蓋了寬泛的應用程序產品。最簡單的可以是一組超文本鏈接文件,僅僅用文本和有限的圖形表達信息。隨著Web2.0的出現,網絡應用正在發展為復雜的計算環境,不僅為最終用戶提供獨立的特性、計算功能和內容信息,還與企業數據庫和商務應用程序相結合。

7)人工智能軟件:這種軟件利用非數值算法解決計算和直接分析無法解決的復雜問題。這個領域包括機器人、專家系統、模式識別(圖像和語音)、人工神經網絡、定理證明和博弈等的應用程序。

全世界有許多的軟件工程師在為以上各類軟件項目努力地工作著。有時是建立一個新的系統,有時只是對現有應用程序的糾錯、適應性調整和升級。

軟件的確定性是指系統的輸入、處理和輸出的順序及時間是可以預測的;反之亦然。

1)開放計算:無線網絡的快速發展也許將很快促成真正的普適計算和分布式計算的實現。軟件工程師所面臨的挑戰將是開發系統和應用軟件,使移動設備、個人計算機和企業可以通過大量的網絡設施進行通信。

2)網絡資源:因特網已經快速發展為一個計算引擎和內容提供平臺。軟件工程師新的任務是構建一個簡單而智能的應用程序,為全世界的最終用戶市場提供服務。

3)開源軟件:就是將系統應用程序(如操作系統、數據庫和開發環境)代碼開放,使更多人能夠為軟件開發做貢獻,這種方式正在逐步成為一種趨勢。軟件工程師面對的挑戰是開發可以自我描述的代碼,而更重要的是,開發某種技術,以便用戶和開發人員都能夠了解已經發生的改動,并且知道這些改動如何在軟件中體現出來。

1.1.4 WebApp的特性

早期(大約從1990年到1995年)WWW的Web站點僅包含鏈接在一起的一些超文本文件,這些文件使用文本和有限的圖形來表示信息。隨著時間的推移,一些開發工具(如XML、Java等)擴展了HTML的能力,使得Web工程師在向客戶提供信息的同時也能提供計算能力—基于Web的系統和應用(WebApp)誕生了。今天,WebApp已經發展成為成熟的計算工具(見圖1-6),這些工具不僅可以為最終用戶提供獨立的功能,而且已經同公司數據庫和業務應用集成在一起了。

978-7-111-52634-6-Chapter01-6.jpg

圖1-6 豐富的WebApp軟件

絕大多數WebApp具備下列屬性。

1)網絡密集性:WebApp駐留在網絡上,服務于不同客戶群體的需求。網絡提供開放的訪問和通信(如因特網)或者受限的訪問和通信(如企業內聯網)。

2)并發性:大量用戶可能同時訪問WebApp。很多情況下最終用戶的使用模式存在很大差異。

3)無法預知的負載量:WebApp的用戶數量每天都可能有數量級的變化。

4)性能:如果一位WebApp用戶必須等待很長時間(訪問、服務器端處理和客戶端格式化顯示),該用戶就可能轉向其他地方。

5)可用性:盡管期望百分之百的可用性是不切實際的,但是對于熱門的WebApp,用戶通常要求能夠全天候訪問。

6)數據驅動:許多WebApp的主要功能是使用超媒體向最終用戶提供文本、圖片、音頻及視頻內容。此外,WebApp還常被用做訪問那些存儲在Web應用環境之外的數據庫中的信息(如電子商務或金融應用)。

7)內容敏感性:內容的質量和藝術性在很大程度上決定著WebApp的質量。

8)持續演化:傳統的應用軟件是隨一系列規劃好的時間間隔發布而演化的,而Web應用則持續地演化。

9)即時性:將軟件盡快推向市場的迫切需要是很多應用領域的特點,然而將WebApp投入市場可能是幾天或幾周的事。

10)安全性:由于WebApp是通過網絡訪問來使用的,因此要限制訪問的最終用戶數量即使可能也非常困難。為了保護敏感的內容,并提供保密的數據傳輸模式,在支持WebApp的整個基礎設施上和應用本身內部都必須實施較強的安全措施。

11)美觀性:不可否認,WebApp的用戶界面外觀很有吸引力。是否能將產品或是思想成功地推向市場,界面設計的美觀和技術設計同樣重要。

盡管其他應用類型可能具備上述的某些特性,但WebApp幾乎具備了所有這些屬性。

主站蜘蛛池模板: 易门县| 利津县| 汤阴县| 朝阳市| 天门市| 射洪县| 青海省| 陈巴尔虎旗| 铜陵市| 大庆市| 沁水县| 清苑县| 通州区| 景谷| 哈巴河县| 吉木乃县| 江北区| 揭西县| 南召县| 洞口县| 正阳县| 宝坻区| 青神县| 天全县| 新巴尔虎左旗| 临猗县| 双峰县| 多伦县| 万宁市| 新昌县| 姚安县| 密山市| 锦屏县| 秦皇岛市| 嘉黎县| 陵水| 营山县| 咸阳市| 乐昌市| 深圳市| 佛冈县|