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

  • 軟件工程
  • 陳永
  • 5477字
  • 2019-10-28 10:58:37

1.1 軟件危機

1.1.1 摩爾定律和超越摩爾

1965年,Intel聯合創始人戈登·摩爾提出了著名的理論:半導體芯片上可集成的元器件的數目每12個月便會增加一倍。也就是說,同樣規格的芯片的成本,每12個月便會降低一半。1965年每個芯片可以容納50個晶體管,摩爾預測到1970年,每個芯片將能夠容納1000個元器件,每個晶體管的價格會降低90%。

經過簡化,這個發現被歸納為“摩爾定律”:每個芯片上晶體管的數目每12個月將會增加一倍。戈登·摩爾的發現不基于任何特定的科學或工程理論,只是真實情況的映射總結。硅芯片行業注意到了這個定律,沒有簡單地把它當作一個描述的、預言性質的觀察,而是作為一個說明性的、重要的規則、整個行業努力的目標。

除此之外,還有一個與摩爾定律相對的洛克定律(Rock's law),強調了生產中的成本因素。通過觀察可知,芯片制造廠商的成本每4年便會增加一倍。技術的進步以不斷為芯片上晶體管數量的增加鋪平道路,但是芯片生產設施的建造會十分昂貴,而更小、更便宜的處理器的使用還在不斷增加。

硬件技術在不斷發展,但現在,這種發展軌跡要告一段落了。由于同樣小的空間里集成越來越多的硅電路,產生的熱量也越來越大,這種原本兩年處理能力加倍的速度已經慢慢下滑,原本的摩爾定律在逐步失效。目前,行業研究規劃藍圖新的戰略是“超越摩爾”(More than Moore):與以往首先改善芯片、軟件隨后跟上的發展趨勢不同,以后半導體行業的發展將首先看軟件——從手機到超級計算機再到云端的數據中心——然后反過來看要支持軟件和應用的運行需要什么處理能力的芯片來支持。

這種局勢的轉變使得人們更加強調軟件的重要性。計算機的應用日益廣泛、深入,然而硬件的進步只是為計算機系統提供了潛在的能力,如果沒有軟件來駕馭和開發這種能力,人類并不能有效地使用計算機,因此,軟件已成為限制計算機系統發展的關鍵因素。

計算機軟件是一個邏輯的而非物理的系統,它具有與硬件顯著的不同特點。它的主要工作集中在定義、開發、維護等純智力活動方面。隨著軟件需求的劇增,軟件規模不斷增大,軟件數量急劇膨脹。在程序運行時發現的錯誤必須設法改正;用戶有了新的需求時必須相應地修改程序;硬件或操作系統更新時,通常需要修改程序以適應新的環境。上述種種軟件維護工作,以令人吃驚的比例耗費資源。更嚴重的是,許多程序的個體化特性使得它們最終成為不可維護的。軟件危機就這樣開始出現。

1.1.2 軟件危機的介紹

軟件危機(Software Crisis)是指在計算機軟件的開發和維護過程中所遇到的一系列嚴重的問題,也可以指落后的軟件生產方式無法滿足迅速增長的計算機軟件需求,從而導致軟件開發與維護過程中出現一系列嚴重問題的現象。

廣義上講,所謂軟件危機包含兩方面問題:如何開發軟件,以滿足對軟件日益增長的需求;如何維護數量不斷膨脹的已有軟件。

狹義上講,所謂軟件危機主要有以下一些典型表現:

(1)對軟件開發成本和進度的估計常常很不準確。實際成本比估計成本有可能高出一個數量級,實際進度比預期進度拖延幾個月甚至幾年的現象并不罕見,這種現象降低了軟件開發組織的信譽。而為了趕進度和節約成本所采取的一些權宜之計又往往降低了軟件產品的質量,從而不可避免地會引起用戶的不滿。

(2)開發人員和用戶之間很難溝通,矛盾很難統一。往往是軟件開發人員不能真正了解用戶的需求,而用戶又不了解計算機求解問題的模式和能力,雙方無法用共同熟悉的語言進行交流和描述。在雙方互不充分了解的情況下,就倉促上陣設計系統、匆忙著手編寫程序,這種“閉門造車”的開發方式必然導致最終的產品不符合用戶的實際需要。

(3)大型軟件項目需要組織一定的研發人力共同完成。軟件項目管理人員缺乏開發大型軟件系統的經驗及軟件開發各類人員的信息交流不及時、不準確,有時還會產生誤解,這些都會導致軟件質量無法得到保證。

(4)軟件系統中的錯誤難以消除。軟件是邏輯產品,質量問題很難以統一的標準度量,因而造成質量控制困難。軟件產品并不是沒有錯誤,而是盲目檢測很難發現錯誤,而隱藏下來的錯誤往往是造成重大事故的隱患,這些都會導致軟件產品出現質量問題。

(5)軟件常常是不可維護的。很多程序中的錯誤是非常難改正的,實際上不可能使這些程序適應新的硬件環境,也不能根據用戶的需求在原有程序中增加一些新的功能。“可重用的軟件”還是一個沒有完全做到的、正在努力追求的目標,人們仍然在重復開發類似的或基本類似的軟件。

(6)軟件通常沒有適當的文檔資料。錯誤的觀點經常認為:軟件就是程序。程序代碼寫完軟件也就設計完了。實際上軟件不僅僅是程序,還應該有一整套文檔資料。這些文檔資料應該是軟件開發過程中產生出來的,而且應該是和程序代碼完全一致的。軟件開發過程中,基線是軟件文檔和源代碼的一個穩定版本,它是進一步開發的基礎。軟件開發組織的管理人員可以使用這些文檔資料作為“里程碑”,來管理和評價軟件開發工程的進展狀況;軟件開發人員可以利用它們作為通信工具,在軟件開發過程中準確地交流信息;對于軟件維護人員而言,這些文檔資料更是必不可少的。缺乏必要的文檔資料或者文檔資料不合格,必然給軟件開發和維護帶來許多嚴重的困難和問題。

(7)軟件成本在計算機系統成本中所占的比例逐年上升。隨著互聯網時代的到來,電子商務、移動互聯網興起,軟件經濟已經影響到社會經濟生活中的方方面面。硬件成本逐年下降,然而軟件開發需要大量人力,軟件成本隨著軟件規模和數量的不斷擴大而持續上升。

(8)軟件開發生產率跟不上計算機應用系統迅速普及深入的速度。軟件開發是一種高強度的腦力勞動,理論性和實踐性都很強,軟件開發人員的生產效率也對開發的周期和質量有很大影響。特別是軟件工程,對軟件開發的成功(按質按量,按期完成)有決定性作用。

(9)軟件產品的特殊性和人類智力的局限性,導致人類無力處理“復雜問題”。“復雜問題”的概念是相對的,一旦人們采用先進的組織形式、開發方法和工具提高了軟件開發效率和能力,新的、更大的、更復雜的問題又擺在人們的面前,所以“復雜問題”的解決需要諸多學科知識及技術的協同發展。

以上舉例的僅僅是軟件危機的一些典型表現,與軟件開發和維護有關的問題遠不止這些。

1.1.3 產生軟件危機的原因

開發軟件系統需要投入大量的人力和物力,但軟件系統的質量卻難以保證,也就是說,開發軟件所需的高成本同產品的低質量之間有著尖銳的矛盾,這種現象就是所謂的“軟件危機”。在軟件開發和維護的過程中存在這么多嚴重問題,一方面與軟件本身的特點有關,而另一方面的主要原因是軟件開發和維護的方法不正確有關。

軟件開發不同于一般的加工制造業、機械工業以及一般的加工業,這些行業都已經有了上百年的歷史,產品的生產流程及工廠、車間、工種等的機構設置和角色分工都有了成熟的模式。但是,軟件企業及軟件產品的生產,歷史不長,加之軟件本身的智力勞動的特性,軟件作為產品的生產流程及其相應的管理活動,還遠遠沒有一個成熟的模式。此外,軟件不同于一般程序,它的一個顯著特點是規模龐大,而程序復雜性將隨著程序規模的增加而呈指數上升。為了在預定時間內開發出規模龐大的軟件,必須由許多人分工合作。然而,如何保證每個人完成的工作合在一起確實能夠成一個高質量的大型軟件系統,更是一個極端復雜困難的問題,這不僅涉及許多技術問題,如分析方法、設計方法、形式說明方法、版本控制等,更重要的是必須有嚴格而科學的管理。

與軟件開發和維護有關的許多錯誤認識和做法的形成,可歸因于在計算機系統發展的早期階段軟件開發的個體化特點。錯誤的認識和做法主要表現為忽視軟件需求分析的重要性,認為軟件開發就是寫程序并設法使之運行,輕視軟件維護等。另外,軟件開發過程中如果缺乏有力的方法學和工具方面的支持會產生軟件危機。由于軟件開發不同于大多數其他工業產品,其開發過程是復雜的邏輯思維過程,其產品極大程度地依賴于開發人員高度的智力投入。由于過分地依靠程序設計人員在軟件開發過程中的技巧和創造性,加劇軟件開發產品的個性化,也是發生軟件開發危機的一個重要原因。

軟件項目管理(Software Project Management)的對象是軟件工程項目。它所涉及的范圍覆蓋了整個軟件工程過程。為使軟件項目開發獲得成功,關鍵問題是必須對軟件項目的工作范圍、可能風險、需要資源(人、硬件、軟件)、要實現的任務、經歷的里程碑、花費工作量(成本)、進度安排等做到心中有數。這種管理在技術工作開始之前就應開始,在軟件從概念到實現的過程中繼續進行,當軟件工程過程最后結束時才終止。

軟件項目管理是為了使軟件項目能夠按照預定的成本、進度、質量順利完成,而對人員(People)、產品(Product)、過程(Process)和項目(Project)進行分析和管理的活動。軟件項目管理的根本目的是為了讓軟件項目尤其是大型項目的整個軟件生命周期(從分析、設計、編碼到測試、維護全過程)都能在管理者的控制之下,以預定成本按期、按質地完成軟件交付用戶使用。研究軟件項目管理要從已有的成功或失敗的案例中總結出能夠指導今后開發的通用原則、方法,同時避免前人的失誤。軟件工程學的一個重要目標就是結合軟件開發技術和先進管理技術,以提高軟件的可維護性,減少軟件維護的代價。

1.1.4 消除軟件危機的途徑

軟件工程作為一個新興的工程學科,主要研究軟件生產的客觀規律性,建立與系統化軟件生產有關的概念、原則、方法、技術和工具,指導和支持軟件系統的生產活動,以期達到降低軟件生產成本、改進軟件產品質量、提高軟件生產率水平的目標。軟件工程學從硬件工程和其他人類工程中吸收了許多成功的經驗,明確提出了軟件生命周期的模型,發展了許多軟件開發與維護階段適用的技術和方法,并應用于軟件工程實踐,取得了良好的效果。

為了消除軟件危機,首先應該對計算機軟件有一個正確的認識。軟件設計者應該徹底消除在計算機系統早期發展階段形成的“軟件就是程序”的錯誤觀念。一個軟件必須由一個完整的配置組成,事實上,軟件是程序、數據及相關文檔的完整集合。其中,程序是能夠完成預定功能和性能的可執行的指令序列;數據是使程序能夠適當處理信息的數據結構;文檔是開發、使用和維護程序所需要的圖文資料。1983年IEEE為軟件下的定義是:計算機程序、方法、規則、相關的文檔資料以及在計算機上運行程序時所必需的數據。

更重要的是,必須充分認識到軟件開發不是某種個體勞動的神秘技巧,而應該是一種組織良好、管理嚴格、各類人員協同配合、共同完成的工程項目。必須充分吸取和借鑒人類長期以來從事各種工程項目所積累的行之有效的原理、概念、技術和方法,特別要吸取幾十年來人類從事計算機硬件研究和開發的經驗教訓。

在軟件開發過程中人們開始研制和使用軟件工具,用以輔助進行軟件項目管理與技術生產,人們還將軟件生命周期各階段使用的軟件工具有機地集合成為一個整體,形成能夠連續支持軟件開發與維護全過程的集成化軟件支持環境,以期從管理和技術兩方面解決軟件危機問題。應該推廣使用在實踐中總結出來的開發軟件的成功的技術和方法,并且研究探索更好更有效的技術和方法,盡快消除在計算機系統早期發展階段形成的一些錯誤概念和做法。

應該開發和使用更好的軟件工具,在軟件開發的每個階段都有許多煩瑣重復的工作需要做,在適當的軟件工具輔助下,開發人員可以把這類工作做得既快又好。如果把各個階段使用的軟件工具有機地結合成一個整體,支持軟件開發的全過程,則稱為軟件工程支撐環境。

此外,人工智能與軟件工程的結合成為20世紀80年代末期活躍的研究領域。基于程序變換、自動生成和可重用軟件等軟件新技術研究也已取得一定的進展,把程序設計自動化的進程向前推進一步。軟件標準化與可重用性得到了工業界的高度重視,在避免重用勞動、緩解軟件危機方面起到了重要作用。

軟件開發的風險之所以大,是由于軟件過程能力低,其中最關鍵的問題在于軟件開發組織不能很好地管理其軟件過程,從而使一些好的開發方法和技術起不到預期的作用。而且項目的成功也是通過工作組的共同努力,所以僅僅建立在可得到特定人員上的成功不能為全組織的生產和質量的長期提高打下基礎,必須在建立有效的軟件如管理工程實踐和管理實踐的基礎設施方面,堅持不懈地努力,才能不斷改進,才能持續地成功。

軟件質量,乃至于任何產品質量,都是一個很復雜的事物性質和行為。產品質量,包括軟件質量,是人們實踐產物的屬性和行為,是可以認識、可以科學地描述的。還可以通過一些方法和人類活動,來改進質量。針對以上問題,可以在軟件開發過程中實施能力成熟度模型來改進軟件質量、控制軟件生產過程、提高軟件生產者組織性和軟件生產者個人能力和開發效率。

能力成熟度模型(Capability Maturity Model,CMM)是一種開發模型。CMM是國際公認的對軟件公司進行成熟度等級認證的重要標準。CMM的目標是改善現有軟件開發過程,也可用于其他過程。CMM的基本思想是,因為軟件危機問題是管理軟件過程的方法引起的,所以新軟件技術的運用不會自動提高生產率和利潤率。CMM有助于組織建立一個有規律的、成熟的軟件過程。改進的過程將會生產出質量更好的軟件,使更多的軟件項目免受時間和費用的超支之苦。軟件過程包括各種活動、技術和用來生產軟件的工具。因此,它實際上包括了軟件生產的技術方面和管理方面。CMM策略力圖改進軟件過程的管理,而在技術上的改進是其必然的結果。CMM致力于軟件開發過程的管理和工程能力的提高與評估。該模型在美國和北美地區已得到廣泛應用,同時越來越多的歐洲和亞洲等國家的軟件公司正積極采納CMM,CMM實際上已成為軟件開發過程改進與評估事實上的工業標準。

總之,為了解決軟件危機,既要有技術措施(方法和工具),又要有先進的組織管理措施。軟件工程正是從管理和技術兩方面研究如何更好地開發和維護計算機軟件的一門新興學科。

主站蜘蛛池模板: 武强县| 黎川县| 阜阳市| 常熟市| 揭西县| 横山县| 江孜县| 隆子县| 宁波市| 深水埗区| 原平市| 称多县| 大渡口区| 德阳市| 开平市| 安达市| 阜新市| 维西| 文昌市| 崇明县| 阳高县| 临湘市| 石林| 涞水县| 四平市| 象山县| 吉首市| 定边县| 卓资县| 阳西县| 呈贡县| 桓仁| 都昌县| 利津县| 丰顺县| 南充市| 西峡县| 临洮县| 瑞丽市| 浦县| 津市市|