常用的軟件質量屬性

    我們平時買東西的時候,要看一看東西的質量怎麼樣,如顏色好看否、樣式時尚否、經久耐用否,然後再決定買不買。軟件作爲一種商品,也存在質量高低之分,從哪些方面來評價軟件的質量狀況呢,主要有以下質量屬性:
    1、正確性(Correctness)
    系統滿足規格說明和用戶目標的程度,即在預定環境下能正確地完成預期功能的程度。
    如軟件有沒有按照需求規格來完成,計算出的結果是否正確,計算結果是否精確。
    2、健壯性/魯棒性(Robustness)
    健壯性是指在異常情況下(如硬件發生故障、輸入的數據無效或操作錯誤等),軟件能夠正常運行的能力。
    健壯性有兩層含義:一是容錯能力,二是恢復能力。
    容錯是指發生異常情況時系統不出錯誤的能力,對於應用於航空航天、武器、金融等領域的這類高風險系統,容錯設計非常重要。
    而恢復則是指軟件發生錯誤後(不論死活)重新運行時,能否恢復到沒有發生錯誤前的狀態的能力。
    例如:因輸入數據不正確,引起系統異常,這是容錯能力不高引起的健壯性問題;操作系統死機了,重啓後能夠正常使用,說明具有一定恢復能力,具有一定的健壯性;數據庫發生故障後,再次啓動時一般能夠恢復到正常的狀態,恢復能力比較好。
    3、可靠性(Reliability)
    軟件系統在一定的時間內無故障運行的能力。
    可靠性是一個與時間相關的屬性,指的是在一定環境下,在一定的時間段內,程序不出現故障的概率,因此是一個統計量,通常用平均無故障時間(MTTF, mean-time to fault)來衡量。
    可靠性不同於正確性和健壯性,軟件可靠性問題通常是由於設計中沒有料到的異常和測試中沒有暴露的代碼缺陷引起的。
    例:由於某個地方數據庫連接沒有釋放,在長時間運行的時候,出現活動的數據庫連接數過多,造成系統越來越慢,甚至系統停止服務。
    4、性能(Performance)
    性能是指軟件及時提供相應服務的能力。具體而言,性能包括速度、吞吐量和持續高速性三方面的要求:
  • 速度往往通過平均響應時間來度量;
  • 吞吐量通過單位時間處理的交易數來度量;
  • 持續高速性是指保持高度處理速度的能力。
    效率(Efficiency)指軟件對CPU處理能力和存儲能力這兩大類計算機資源的使用效率。效率和性能反映了同一問題的“表”、“裏”,性能爲“表”,效率爲“裏”。
    如系統運算一個報表,需要很長時間,這就是性能問題。
    5、安全性(Security)
    指軟件同時兼顧向合法用戶提供服務,以及阻止非授權使用軟件及資源的能力。
    安全性既屬於技術問題又屬於管理問題。一般地,如果黑客爲非法入侵花費的代價(考慮時間、費用、風險等多種因素)高於得到的好處,那麼這樣的系統就可以認爲是安全的。
    例:有人可以訪問非授權的資源,這就是安全性問題。
    6、易用性(Usability)
    易用性是指用戶使用軟件的容易程度。
    軟件的易用性要讓用戶來評價。
    例:對於一般用戶而言,Windows的易用性比Linux的高。
    7、可用性(Availability)
    指的是產品對用戶來說有效、易學、高效、好記、少錯和令人滿意的程度,即用戶能否用軟件完成他的任務,效率如何,主觀感受怎樣。
    ISO 9241-11國際標準對可用性作了如下定義:產品在特定使用環境下爲特定用戶用於特定用途時所具有的有效性(effectiveness)、效率(efficiency)和用戶主觀滿意度(satisfaction)。其中:
  • 有效性:用戶完成特定任務和達到特定目標時所具有的正確和完整程度;
  • 效率:用戶完成任務的正確和完整程度與所使用資源(如時間)之間的比率;
  • 滿意度:用戶在使用產品過程中所感受到的主觀滿意和接受程度。
    8、互操作性(Interoperability)
    指本軟件與其他系統交換數據和相互調用服務用以協同運作的難易程度。
    例:利用Web Service增加軟件的互操作性。
    9、易理解性(Understandability)
    理解和使用系統的難易程度。
    10、可擴展性(Extensibility)/靈活性(Flexibility)/適應性(Adaptability)/可伸縮性(Scalability)
    反映軟件適應“變化”的能力。調整、修改或改進正在運行的軟件系統以適應新需求、變化了的需求的難易程度。
    例:如報銷系統原來不需要總經理審批,現在要改爲總經理審批,可擴展性強的系統不需要作太多調整;如用戶和數據量增加時,通過增加服務器來提高系統性能,這樣可伸縮性比較強。
    11、可重用性(Resuability)
    重用軟件或其中一部分的難易程度。
    12、可測試性(Testability)
    對軟件測試以證明其滿足需求規約的難易程度。
    13、可維護性(Maintainability)
    爲修改Bug、增加功能、提高質量而診斷並修改軟件的難易程度。
    14、可移植性(Portability)
    軟件不經修改或稍加修改就可以運行於不同軟硬件環境的難易程度,主要體現爲代碼的可移植性。
    例:Java程序可以在Windows系統和Linux上運行,具有較好的可移植性。
    軟件有這麼多質量屬性,對他們分類似乎更容易理解一些。McCall等人於1977年將軟件質量屬性分爲三大類,即產品運行、產品修改、產品轉移時的質量屬性。溫昱著《軟件架構設計》把軟件質量屬性分爲運行期的軟件質量屬性和開發期的軟件質量屬性。
    就像商品一樣,不同的人關注的質量角度也不相同。我們可以把軟件的各種用戶找出來,然後看看他們分別關注軟件質量的哪些方面,這樣在開發軟件的時候,就可以找出比較重要的軟件質量屬性,就可以做到有的放矢,讓用戶在使用軟件時更加滿意。由於軟件也分成很多類型,如操作系統、遊戲、應用軟件、中間件、框架等等,每種軟件對應的用戶也不一樣,本文作爲一個探討,以普通應用軟件爲例,給出軟件質量的不同視角:
  • 利用圖形界面完成業務的用戶:正確性、健壯性、可靠性、性能、易用性、可用性、互操作性、可擴展性
  • 進行系統監控、備份與恢復等操作的管理員:健壯性、可靠性、安全性、易用性、可用性、可擴展性、可維護性、可移植性
  • 利用軟件提供的接口(API)進行其他系統開發的高級用戶:正確性、健壯性、可靠性、性能、可用性、互操作性、易理解性、可擴展性
  • 進行代碼級維護的開發/維護人員:易理解性、可擴展性、可重用性、可測試性、可維護性、可移植性
    由於軟件面對的用戶是千差萬別的,從用戶的角度來對軟件質量屬性進行分類,更容易把握軟件在不同用戶眼中的質量怎麼樣,從而利於從正確的方面來提高軟件質量。

 

參考資料:
  1. 軟件架構設計/溫昱 電子工業出版社 2007.5
  2. 軟件工程/張海藩 清華大學出版社 1998
  3. 高質量程序設計指南:C++/C語言(第三版)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章