天天看點

軟體工程--軟體危機

1.1軟體危機

1.1.1軟體危機的介紹

軟體危機是指在計算機軟體的開發和維護過程中所遇到的一系列嚴重問題。這些問題絕不僅僅是不能正常運作的軟體才具有的,實際上,幾乎所有軟體都有不同程度地存在這些問題。

概括地說,軟體危機包含下述兩方面的問題:如何開發軟體,以滿足對軟體日益增長的需求;如何維護數量不斷膨脹的已有軟體。軟體危機具有長期性和症狀不明顯的特征。

具體地說,軟體危機主要有以下一些典型表現:

  • 對軟體開發成本和進度的估計常常很不準确;
  • 經常出現使用者對“已完成的”軟體産品不滿意的情況;
  • 軟體産品的品質往往達不到要求;
  • 軟體通常是很難維護的;
  • 軟體産品往往沒有适當的文檔資料;
  • 軟體成本在計算機系統總成本中所占的比例逐年上升;
  • 軟體開發生産率提高的速度遠遠不能滿足社會對軟體産品的日益增長的需求。

   以上列舉的僅僅是軟體危機的一些明顯的表現,與軟體開發和維護有關的問題遠遠不止這些。

1.1.2産生軟體危機的原因

在軟體開發和維護的過程中存在這麼多嚴重問題,一方面與軟體本身的特點有關,另一方面也和軟體開發與維護的方法不正确有關。

軟體不同于硬體,它是計算機系統中的邏輯部分而不是實體部分。由于軟體缺乏“可見性”,在寫程式代碼并在計算機上試運作之前,軟體開發過程的進展情況比較難衡量,軟體的品質也較難評價,是以,管理和控制軟體開發過程相當困難。此外,軟體在運作過程中不會因為使用使用時間過長而被“用壞”,如果運作中發生了錯誤,很可能是遇到了一個在開發期引入的在測試階段沒能檢測出來的錯誤。是以,軟體維護通常意味着改正或修改原來的設計,這在客觀上使得軟體較難維護。

軟體不同于一般程式,它的一個顯著特點是規模龐大,而且程式複雜性将随着程式規模的增加而呈指數上升。為了在預定時間内開發出規模龐大的軟體,必須由許多人分工合作,然而,然而,如何保證每個人完成的工作合在一起确實能構成一個高品質的大型軟體系統,更是一個極端複雜困難的問題,這不僅涉及許多技術問題,諸如分析方法、設計方法、形式說明方法、版本控制等,更重要的是必須有嚴格而科學的管理。

軟體本身獨有的特點确實給開發和維護帶來了一些客觀困難,但是人們在開發和使用計算機系統的長期實踐中,也确實積累和總結出了許多成功的經驗。如果堅持不懈地使用經過實踐考驗證明是正确的方法,許多困難時完全可以克服的,過去也确實有一些成功的範例。但是目前相當多的軟體專業人員對軟體開發和維護還有不少糊塗觀念,在實踐過程中或多或少地采用了錯誤的方法合技術,這可能是使軟體問題發展成軟體危機的主要原因。

與軟體開發和維護有關的許多錯誤認識和做法的形成,可以歸因于在計算機系統發展的早期階段軟體開發的個體化特點。錯誤的認識和做法主要表現為忽視軟體需求分析的重要性,人為軟體開發就是寫程式并設法使之運作,輕視軟體維護等。

事實上,對使用者要求沒有完整準确的認識就匆忙着手編寫程式是許多軟體開發工程失敗的主要原因之一。隻有使用者才真正了解他們自己的需求,但是許多使用者在開始時并不能準确具體地叙述他們的需要,軟體開發人員需要做大量深入細緻的調查研究工作,反複多次地和使用者交流資訊,才能真正全面、準确、具體地了解使用者的需求。對問題和目标的正确認識是解決任何問題的前提和出發點,軟體開發同樣也不例外。急于求成,倉促上陣,對使用者要求沒有正确認識就匆忙着手寫程式,這就好比不大好地基就蓋高樓一樣,最終必然垮台。事實上,越早開始寫程式,完成它所需要的時間往往越長。

必須認識到程式隻是完整的軟體産品的一個組成部分(編寫程式所需的工作量隻占軟體開發全部工作量的10%—20%),在上述軟體生命周期的每個階段都要得出最終産品的一個或幾個組成部分(這些組成部分通常以文檔資料的形式存在)。也就是說,一個軟體産品必須由一個完整的配置組成,軟體配置主要包括程式。文檔和資料等成分。必須清除隻重視程式而忽視軟體配置其餘成分的糊塗觀念。

做好軟體定義時期的工作是降低軟體成本提高軟體品質的關鍵。如果軟體開發人員在定義時期沒有正确全面的了解使用者需求,直到測試階段或軟體傳遞使用後才發現“已完成的”軟體不完全符合使用者的需求,這時再修改就為時已晚了。

嚴重的問題是,在軟體開發的不同階段進行修改需要付出的代價是很不相同的,在早期引入變動,涉及的面少,因而代價也比較低;而在開發的中期,軟體配置的許多成分已經完成,引入一個變動要對所有已完成的配置成分都做相應的修改,不僅工作量大,而且邏輯上也更複雜,是以付出的代價劇增;在軟體“已經完成”是再引入變動,當然需要付出更高的代價。

通過上面的論述不難認識到,輕視維護是一個最大的錯誤。許多軟體産品的使用壽命長達10年甚至20年,在這樣漫長的時期中,不僅必須改正使用過程中發現的每一個潛伏的錯誤,而且當環境變化時(例如硬體或系統軟體更新換代)還必須相應地修改軟體以适應新的環境,特别是必須經常改進或擴充原來的軟體以滿足使用者不斷變化的需要。所有這些改動都屬于維護工作,而且是在軟體完成之後進行的,是以維護是極端艱巨複雜的工作,需要花費很大的代價。統計資料表明,實際上用于維護的費用占軟體總費用的55%~70%。軟體工程學的一個重要目标就是提高軟體的可維護性,減少軟體維護的代價。

了解産生軟體危機的原因,澄清錯誤認識,建立起關于軟體開發和維護的正确概念,還僅僅是消除軟體危機的開始,全面消除軟體危機需要一系列綜合措施。

1.1.3消除軟體危機的途徑

為了消除軟體危機,首先應該對計算機軟體有一個正确的認識。正如上面所說,應該徹底消除在計算機系統早期發展階段形成的“軟體就是程式”的錯誤觀念。一個軟體必須由一個完整的配置組成,事實上,軟體是程式、資料及相關文檔的完整集合。其中,程式是能夠完成預定功能和性能的可執行的指令序列;資料是使程式能夠适當的處理資訊的資料結構;文檔是開發、使用和維護所需要的圖文資料。

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

應該推廣使用在實踐總結出來的開發軟體的成功的技術和方法,并且研究探索更好更有效的技術和方法,盡快消除在計算機系統早期發展階段形成的錯誤觀念和做法。

應該開發和使用更好的軟體工具。正如機械工具可以“放大”人類體力一樣,軟體工具可以“放大”人類的智力。在軟體開發的每個階段都有許多煩瑣重複的工作需要完成,在适當的軟體工具輔助下,開發人員可以把這類工作做得既快又好。如果把各個階段使用的軟體工具有機的集合成一個整體,支援軟體開發的全過程,則稱為軟體工程支撐環境。

繼續閱讀