緒 論 1.1 軟件生存期 同其它任何事物一樣,計算機軟件從它的發生、發展到達成熟階段,以至老化和衰亡,是一個歷史發展的過程,這個過程稱為軟件的生存期( Li" name="description" />
第一章 MILY: 黑體; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'">緒 論
1.1 軟件生存期
同其它任何事物一樣,計算機軟件從它的發生、發展到達成熟階段,以至老化和衰亡,是一個歷史發展的過程,這個過程稱為軟件的生存期(Life Cycle),包括下列六個步驟:
(1)計劃(Planning):確定軟件開發的總目標;給出軟件的功能、性能、可靠性以及接口等方面的設想;研究完成該軟件任務的可行性,探討問題解決的方案;對可供開發使用的資源(軟件、硬件、人力)、成本、可取得的效益和開發的進度等做出估計;制定完成開發任務的實施計劃。
(2)需求分析(Requirement Analysis):由軟件人員和用戶共同對待開發的軟件進行詳細的定義和確切的描述,其結果是給出軟件需求說明書(SRS:Software Requirement Specification)。
(3)設計(Designing):軟件的設計分為兩部分。一是概要設計(Preliminary Design),是指根據軟件的需求說明書,軟件設計人員應把需求說明書中各項需求轉化為相應的體系結構,在結構中的每一組成部分是功能明確的模塊,每個模塊都能體現相應的需求。二是詳細設計(Detail Design),是指對概要設計中給出的各個模塊所要完成的工作進行具體的描述,為后來的編程打下基礎。軟件設計的結果是給出設計說明書。
(4)編碼(Coding):利用某種計算機語言,把設計說明書中規定的內容轉化為計算機可以接受的程序的過程稱為編碼。編碼應以設計相一致,且結構清晰、易讀、易修改。
(5)測試(Testing):根據軟件的需求說明書、設計說明書和源代碼,檢驗軟件開發工作的成果是否符合要求的過程稱為軟件測試。軟件測試是發現軟件錯誤、提高軟件可靠性與保證軟件質量的重要手段。
(6)運行與維護(Running and Maintaining):對已交付用戶的軟件投入正式使用后便進入運行階段,這個階段可能持續若干年。在運行過程中,可能有多種原因需要對它進行修改,包括運行中發現了軟件錯誤需要修正;為適應變化了的軟硬件環境,而需要做相應的變更;為進一步增強軟件的功能,或提高其性能,而使它進一步的完善和擴充等。
值得注意的是,上述軟件維護工作不可簡單地看待僅僅是修改程序。在運行過程中若有必要修改,得提出充分的修改理由,經過審核,才能確定下來。接著需要經歷制定修改計劃、確定新的需求、修改軟件設計、修改編碼、進行測試以及重新投入運行等一系列步驟,這正是上述開發一個新軟件的步驟。若是運行中多次提出修改,則將經歷多次這些步驟??捎脠D1.2來表示這一過程,并稱為軟件的生存周期,也簡稱為軟件的生存期。
1.2
計算機系統工程分為硬件和軟件兩大范疇。計算機硬件的工程技術在過去的50多年中已經達到了相當成熟的狀態。硬件設計技術和制造技術發展非常迅速,其自動化已經達到相當高的水平,硬件的可靠性已是一種現實的要求,而不在是一種愿望。
而在軟件工程技術方面的情況則不同,軟件是最難設計、最少可能成功、最容易出錯、也最難管理的系統部分。據報道,在上世紀的最后十年里,計算機軟件已成為系統癱瘓的主要原因。隨著以計算機為基礎的系統在數量、復雜程度和應用方面的激增,對軟件的需要卻在不斷增加,因此促使供求矛盾日趨激化,這就是人們常說的軟件危機。軟件危機的來源主要表現以下幾個方面:
(1)缺乏軟件開發的經驗:由于缺乏大型軟件開發的經驗和軟件開發數據的積累,使得開發工作的計劃很難制定。主觀盲目地制定計劃,執行起來和實際情況有很大差距,使得經費常常突破預算、工期一拖再拖,軟件的投資者和用戶對開發工作從不滿意發展到不信任。
(2)需求不明確:作為軟件設計依據的軟件需求,在開發的初期提得不夠明確,或者未能做出確切的表達。開發工作開始后,軟件人員又未能和用戶及時的交換意見,使得一些問題得不到及時解決而隱藏起來,造成開發后期矛盾的集中暴露。導致對多個錯綜復雜的問題既難于分析,又難于解決。
(3)缺少開發規范:開發過程中沒有統一遵循的、公認的方法論或開發規范,參加工作的人員之間的配合不夠嚴密,約定不夠明確。加之不重視文字資料,使得開發文檔很不完整。發現了問題,未能從根本上去找原因,只是修修補補。顯然,這樣開發出來的軟件無法維護。
(4)軟件的復雜性:軟件的規模一般都比較龐大,大型軟件有時會超過1億行源代碼。加之人們傳統上的誤區,往往是硬件難以實現的部分改用軟件來完成,這使得軟件既龐大,復雜性又高,甚至有時人的大腦已無法理解、無法駕馭人類本身所創造出來的復雜邏輯系統,投入使用后往往錯誤百出。
(5)缺乏有效的測試手段:軟件的復雜性和軟件測試的復雜性,使得難以研制有效的軟件測試工具,導致測試效率不高、自動化程度低,測試花費時間多、測試成本高,這使得軟件開發者只要求測試人員對軟件做簡單的測試,這無法保證軟件的質量。
軟件危機的事例是很多的。最著名的是上世紀六十年代,美國IBM公司開發的IBM 360操作系統,這一項目在開發期共花費了5000萬美元,總共投入的工作量是5000人年,共寫出了100萬行源程序。由于它太龐大,OS 360變得相當不可靠,平均每次修改后的新版本都大約存在1000個左右的錯誤,而且有理由認為這是一個常數。另外,美國空軍的范登堡中心在上世紀六十年代后期發生過多次導彈試射失敗的事故,事后檢查幾乎都是由于軟件有錯誤而造成的。
與軟件危機有關的許多問題都起源于軟件本身的特點、軟件開發人員的弱點、以及人們對軟件開發實質的種種不切實際的誤解,計算機軟件已經成為以計算機為基礎的系統發展的重要瓶徑??茖W上的危機和其它領域的危機一樣,解決危機的過程往往孕育著一種科學理論的誕生。自上世紀七十年代以來,科學家們一直在試圖解決軟件危機問題,雖然目前尚不能說軟件的危機已經過去,但二十年來,軟件技術的迅速發展,包括面向對象的技術、基于知識的軟件開發環境、先進的軟件測試工具等,為保證大型軟件的研制提供了重要的基礎。正是這些先進的技術,目前上億行源代碼的軟件比比皆是。
1.3 軟件質量
質量這一概念有許多不同的定義。在《詞?!分?,就把質量一詞解析為“產品或工作的優劣程度”。國際標準化組織(ISO)把質量定義為“與一個產品或服務是否能夠滿足其指定的或蘊涵的需求有關的性質與特征的總合”。同其它產品一樣,軟件的質量也不是絕對的,在不同的情況下,對不同的人來說,軟件質量的含義是不同的。
1. 軟件質量要素
軟件產品的質量是由許多軟件性質構成的,這些性質常稱為軟件質量要素。一般來講,軟件的質量因素有下列11個。
(1)易使用性:是指軟件易于使用的程度。
(2)完整性:保護軟件不被未經同意的存儲和使用的能力。
(3)效率:指軟件對計算機資源的使用效率,包括運算時間效率和存儲空間效率。
(4)可靠性:不失敗的能力。
(5)正確性:程序完成其規約的程度。
(6)易維護性:在程序的操作環境中,確定軟件故障的位置并糾正故障的難易程度。
(7)靈活性:當軟件操作環境變化時,對軟件作相應修改的難易程度。
(8)易測試性:對軟件測試以保證其無錯誤和滿足其規約的難易程度。
(9)易移植性:將一個程序從一個運行環境移植到另一個運行環境的難易程度。
(10)易復用性:復用一個軟件或其部分的難易程度。
(11)互用性:將一個軟件系統和其它軟件系統組合在一起的難易程度。
2.軟件質量要素的衡量標準
軟件每個質量要素又包含一系列的衡量標準,具體為:
(1)易使用性:包括易操作性、培訓、易交流性、輸入和輸出量、輸入輸出速度。
(2)完整性:包括存儲控制、存儲審查。
(3)效率:包括運行效率、存儲效率。
(4)可靠性:容錯性、一致性、準確性、簡潔性。
(5)正確性:包括易追溯性、一致性、完備性。
(6)易維護性:一致性、簡潔性、簡明性、模塊性、自我描述性。
(7)靈活性:模塊性、一般性、易擴展性、自我描述性。
(8)易測試性:簡潔性、模塊性、檢視、自我描述性。
(9)易移植性:模塊性、自我描述性、硬件獨立性、軟件獨立性。
(10)易復用性:通用性、模塊性、自我描述性、硬件獨立性、軟件獨立性。
(11)互用性:模塊性、通訊共同性、數據共同性。
每個衡量標準的定義為:
(1)易追溯性:指在特定的軟件開發與操作環境中,能夠從軟件的需求尋找出其相應的實現的能力與性質。
(2)完備性:指軟件實現了其全部所需功能的性質。
(3)一致性:指在軟件的設計與實現中采用統一的技術與術語的性質。
(4)準確性:指軟件的輸出與計算中的精度滿足其需求的性質。
(5)容錯性:指在非正常條件下,仍然能夠操作軟件的性質。
(6)簡潔性:指軟件以最容易理解的方式實現其功能的性質。
(7)模塊性:指用一系列在很大程度上相互獨立的模塊來構成軟件的性質。
(8)一般性:指軟件所提供的功能具有應用范圍廣的性質。
(9)易擴展性:指易于對軟件存儲空間和計算功能進行擴充的性質。
(10)檢視:指軟件所提供的用于測量使用情況和識別錯誤的屬性。
(11)自我描述性:指軟件中包含它對功能的實現的解析性信息的屬性。
(12)運行效率:指軟件使用最少的處理時間的性質。
(13)存儲效率:指軟件在操作中對存儲空間的需求最少的性質。
(14)存儲控制:指反映對軟件及其數據的存儲進行控制的能力的性質。
(15)存儲審查:指對軟件及其數據的存儲進行審查、記錄能力的性質。
(16)易操作性:指決定軟件的操作與操作過程的復雜程度與難易程度的性質。
(17)培訓:指支持從初步熟悉到熟練操作軟件的過度的性質。
(18)易交流性:指軟件的輸入與輸出能夠被人們理解的程度的性質。
(19)軟件獨立性:指決定對軟件環境中的其它軟件的依賴程度的性質。
(20)硬件獨立性:指決定軟件對硬件環境的依賴程度的性質。
(21)通訊共同性:指軟件使用標準的通訊協議與界面的性質。
(22)數據共同性:指軟件使用標準的數據表示格式的性質。
(23)簡明性:軟件的實現使用最少代碼的性質。
每一個軟件質量衡量標準又可以有多個不同的度量。軟件質量度量有的作用于軟件的代碼,有的作用于軟件開發過程中產生的中間結果和文檔。