軟體度量

軟體度量是對軟體開發項目、過程及其產品進行數據定義、收集以及分析的持續性定量化過程,目的在於對此加以理解、預測、評估、控制和改善。沒有軟體度量,就不能從軟體開發的暗箱中跳將出來。通過軟體度量可以改進軟體開發過程,促進項目成功,開發高質量的軟體產品。度量取向是軟體開發諸多事項的橫斷面,包括顧客滿意度度量、質量度量、項目度量、以及品牌資產度量、智慧財產權價值度量,等。度量取向要依靠事實、數據、原理、法則;其方法是測試、審核、調查;其工具是統計、圖表、數字、模型;其標準是量化的指標。

基本介紹

  • 中文名:軟體度量
  • 外文名:software metric
發展歷程,流程圖,三維度,意義,簡介,度量概念,理論支持,工具,目標,方法體系,產品度量,層級內容,第一層,第二層,第三層,過程度量,性能,過程管理,內容,流程,

發展歷程

如Lemmerich所言, 測量在科學領域有悠久的歷史[116]。相對早在1889年就定義好了度量單位~米的長度測量[116],溫度的度量複雜的多。
Fahrenheit和Celsius分別在1714年和1742年提出了基於某固定點間隔遞增等級的溫度度量方法。Celsius將100度和0度之間分為100個等份。但問題是一直不能唯一確定50攝氏度。而且長度的測量總是一個比例尺度,但是溫度可能用間隔( 攝氏/華氏溫度表) 或者比例尺度(開氏溫度)來衡量。
今天,計算機在我們生活的每個領域幾乎都扮演了非常重要的角色。在計算機上運行的軟體也越來越重要。因此,可預測、可重複、準確地控制軟體開發過程和軟體產品已經非常重要。軟體度量就是衡量軟體品質的一種手段。軟體品質是系統,組件或流程滿足客戶或用戶的需求或預期的程度。
軟體度量或者說軟體工程度量領域是一個在過去30多年研究非常活躍的軟體工程領域。軟體度量(software measurement)和軟體量度(software metrics)一樣非常有名(譯者註:為了區分,譯者將software measurement和software metrics分別譯成軟體度量和軟體量度,其實他們都可以表示軟體度量)。但學界還沒有明確這兩個術語的區別。參照測量理論[159]的相關術語,我們採用軟體度量(software measurement)。從文獻上看,這兩個術語是同義詞。量度(metric)在這裡不作度量空間理解,它理解為:度量是客觀對象到數字對象的同態映射。同態映射包括所有關係和結構映射。用另一句話說,軟體品質和軟體度量成直對關係。這是度量和軟體度量的根本理念。
軟體度量研究主要分為兩個陣營:一部分認為軟體可以度量,一部分認為軟體無法通過度量分析。無論如何,研究主流是關心軟體的品質和認為軟體需要定量化度量。目前有超過上千種軟體度量方法被軟體研究人員及從業人員提出,並且到今天有超過5000份論文出版發表。

流程圖

就是簡單的業務流圖

三維度

軟體度量能夠為項目管理者提供有關項目的各種重要信息,其實質是根據一定規則,將數字或符號賦予系統、構件、過程或者質量等實體的特定屬性,即對實體屬性的量化表示,從而能夠清楚地理解該實體。軟體度量貫穿整個軟體開發生命周期,是軟體開發過程中進行理解、預測、評估、控制和改善的重要載體。軟體質量度量建立在度量數學理論基礎之上。軟體度量包括3個維度,即項目度量、產品度量和過程度量。

意義

簡介

軟體開發中,軟體度量的根本目的是為了管理的需要。利用度量來改進軟體過程。人們是無法管理不能度量的事物。在軟體開發的歷史中,我們可以意識到,在60年代末期的大型軟體所面臨的軟體危機反映了軟體開發中管理的重要性。而對於管理層人員來說:沒有對軟體過程的可見度就無法管理;而沒有對見到的事物有適當的度量或適當的準則去判斷、評估和決策,也無法進行優秀的管理。我們說軟體工程的方法論主要在提供可見度方面下工夫。但僅僅是方法論的提高並不能使其成為工程學科。這就需要使用度量。度量是一種可用於決策的可比較的對象。度量已知的事物是為了進行跟蹤和評估。對於未知的事物,度量則用於預測。本專題將討論軟體度量的一些基本問題。但應認識到軟體度量的成果是非常初步的,還需要大量工作才可能真正地做到實用化,但它的實用化成就將對軟體的高質量和高速發展有不可估量的影響。那么, 一、什麼是度量呢?

度量概念

度量存在於左右我們生活的很多系統的核心之中。在經濟領域,度量決定著價格和付款的增加;在雷達系統中,度量使我們能透過雲層探測到飛機;在醫療系統中,度量使得能夠診斷某些特殊疾病;在天氣預測系統中,度量是天氣預報的基礎;沒有度量,技術的發展根本無法進行。度量的正式定義是: 度量 是指在現實的世界中,把數字或符號指定給實體的某一屬性, 以便以這種方式來根據已明確的規則來描述它們.
因此,度量關注的是獲取關於實體屬性的信息。一個實體可以是一個實物,如人或房間;或者是一個事件,如旅行;或軟體項目的測試階段。屬性是我們所關注的實體的特徵或特性,如血壓的高度(人)、時間(測試階段)、範圍或顏色(房間)、花銷(旅行) 等。因此,說"度量事物"或"度量屬性"的說法是不完全正確的;應該說"度量事物的屬性"。"度量房間"的說法是模糊的;我們可以說度量它的長度、範圍和溫度等。同樣說"度量溫度"的說法也是模糊的,應該說:我們度量的是某一特定地理位置和特定情況下的溫度。

理論支持

如在設計電路的時候我們套用歐姆定律。這個定律描述了電路中電阻、電流和電壓三者之間的關係。但是這些理論已超出了一般意義上的科學方法的範疇,在這種範疇里最基本的東西是度量。度量除了在發展一個理論的過程中起作用外,我們使用度量並套用它們。因此設計一個特定電流和電阻的電路時我們就知道需要多大的電壓。
如果沒有度量,我們很難想像關於電子、機械、及普通工程的定律能得到發展。但事實上在軟體工程的主流里度量卻被忽略了。
情況是:
■當我們在設計和開發軟體產品的時候,我們並未能制定出度量的目標。例如:我們保證說我們將使用戶界面友好、可靠、易於維護;而並未使用度量的術語來詳細說明它們的具體含義。Gilb曾經說過:所謂模糊目標定理,就是沒有明確目標的項目將不能明確地達到它的目標。
■我們未能對構成軟體項目實際費用的各個不同的部分進行有效的度量。譬如:通常我們並不知道,和測試階段相比,設計階段花費時間多大。
■我們並未試圖使我們開發的產品的各種質量合格。因此我們未能使用術語(如:在一段時間裡使用故障的可能性、把產品安裝到新環境中需花費的工作量等)向潛在的用戶說明產品的可靠性很高。
■我們總是試圖說服自己使用另一種新的革新的開發技術和方法進行軟體開發
事實上,我們在軟體度量方面做的工作很少很少,而且所作的度量方面的工作也與一般科學意義上的度量相分離。我們經常會看到諸如此類的話:"軟體的費用有80%花費在維護上。"或"軟體每一千行程式中平均有55個Bugs。"。但是這些話並沒有告訴我們這樣的結果是怎樣產生的、試驗是怎樣設計、執行的、度量的是那個實體、及錯誤的框架是什麼等等。沒有這些東西,我們就不能在我們自己的環境中客觀地進行反覆度量,重現度量的結果以獲得與工業標準的真實比較。因此,歸因於度量不充分的問題的產生是由於缺乏嚴格的度量方法造成的。
除了傳統的對計算機硬體的性能進行度量外,對算法的複雜性的度量一直是計算機科學的重要組成部分。但是,這種度量方法只適用於小程式,而對大型、複雜的軟體來說它卻無能為力了。這就屬於軟體工程的範疇了。如果我們不承認度量將會一個更重要的作用的話,軟體危機將在隨後的幾年裡依然存在

工具

隨著軟體定量方法(如:軟體度量)的重要性不斷增加,市場上出現了許多度量工具。然而,度量工具還是很混亂。因為沒有統一的度量標準規範,每種工具發明商家都是按照他們自己的軟體度量規範。文獻[44]對度量工具做了好的綜述。Daich等根據分類學把度量工具分成了以下幾種:
● 通用度量工具
● 小生境度量工具(Niche Metrics Tool);
● 靜態分析;
原始碼靜態分析;
● 規模度量

目標

簡介
軟體開發正在經受一場危機。費用超支(特別是在維護階段的花費太大)、生產率低下、 以及質量不高等問題正困擾著它。簡言之,軟體開發經常處於失控狀態。軟體之所以失控是因為沒有度量。Tom Demarco曾經說過:"沒有度量就不能控制。"這種說法是好的,但不完全。並不能說為了獲得控制必須進行度量。度量活動必須有明確的目標或目的,而正是這決定著我們選擇哪種屬性和實體進行度量。這個目標與軟體開發、使用時所涉及的人的層次有關。
以下主要從管理者和軟體工程師兩種角度來考慮,為了達到各種目標所要進行的度量工作。
對管理者而言
1.需要度量軟體開發過程中的不同階段的費用。
例如:度量開發整個軟體系統的費用(包括從需求分析階段到發布之後的維護階段)。必須清楚這個費用以決定在保證一定的利潤的情況下的價格。
2.為了決定付給不同的開發小組的費用,需要度量不同小組職員的生產率。
3.為了對不同的項目進行比較、對將來的項目進行預測、建立基線以及設定合理的改進目標等,需要度量開發的產品的質量。
4.需要決定項目的度量目標。例如:應達到多大的測試覆蓋率、系統最後的可靠性應有多大等。
5.為了找出是什麼因素影響著費用和生產率,需要反覆測試某一特定過程和資源的屬性。
6.需要度量和估計不同軟體工程方法和工具的效用,以便決定是否有必要把它們引入到公司中。
對軟體工程師而言
1.需要制定過程度量以監視不斷演進的系統。這包括設計過程中的改動、在不同的回顧或測試階段發現的錯誤等等。
2.需使用嚴格的度量的術語來指定對軟體質量和性能的要求,以便使這些要求是可測試的。例如:系統必須"可靠",可用如下的更具體 的文字加以描述:"平均錯誤時間必須大於15個CPU時間片。"
3.為了合格需要度量產品和過程的屬性。例如:看一個產品是否合格要看產品的一些可度量的特性如"β測試階段少於20個錯誤。","每個模組的代碼行不超過100行。",和開發過程的一些屬性如"單元測試必須覆蓋90%以上的用例。"等。
4.需要度量當前已存在的產品和過程的屬性以便預測將來的產品。例如:
(1).通過度量軟體規格說明書的大小來預測目標? 的大小。
(2).通過度量設計文檔的結構特性來預測將來維護的"盲點"。
(3).通過度量測試階段的軟體的可靠性來預測軟體今後操作、運行的可靠性。
研究上面我們列出的度量的目標和活動我們可以發現:軟體度量的目標可大致 概括為兩類。
其一,我們使用度量來進行估計。這使得我們可以同步地跟蹤一個特定的軟體項目 。
其二,我們套用度量來預測項目的一些重要的特性。但是,值得指出的是我們不能 過分誇大這些預測。因為它們並不是完全正確的。軟體度量得到也僅僅是預測而已。有些人甚至認為只要使用合適的模型和工具,所獲得的預測可以精確到只需使用極少的其他度量(甚至根本就不用使用度量)。事實上,這種期望是不現實的。

方法體系

項目度量
項目度量是針對軟體開發項目的特定度量,目的在於度量項目規模、項目成本、項目進度、顧客滿意度等,輔助項目管理進行項目控制。
規模度量
軟體開發項目規模度量(size measurement)是估算軟體項目工作量、編製成本預算、策劃合理項目進度的基礎。規模度量是軟體項目失敗的重要原因之一。一個好的規模度量模型可以解決這一問題。有效的軟體規模度量是成功項目的核心要素:基於有效的軟體規模度量可以策劃合理的項目計畫,合理的項目計畫有助於有效地管理項目。規模度量的要點在於:由開發現場的項目成員進行估算;靈活運用實際開發作業數據;杜絕盲目迎合顧客需求的“交期逆推法”。
軟體規模度量有助於軟體開發團隊準確把握開發時間、費用分布以及缺陷密度等等。軟體規模的估算方法有很多種,如:功能點分析(FPA:function points analysis)、代碼行(LOC:lines of code)、德爾菲法(Delphi technique)、COCOMO模型、特徵點(feature point)、對象點(object point)、3-D功能點(3-D function points)、Bang度量(DeMarco's bang metric)、模糊邏輯(fuzzy logic)、標準構件法(standard component)等,這些方法不斷細化為更多具體的方法。
成本度量
軟體開發成本度量主要指軟體開發項目所需的財務性成本的估算。主要方法如下:
類比估算法。類比估算法是通過比較已完成的類似項目系統來估算成本,適合評估一些與歷史項目在套用領域、環境和複雜度方面相似的項目。其約束條件在於必須存在類似的具有可比性的軟體開發系統,估算結果的精確度依賴於歷史項目數據的完整性、準確度以及現行項目與歷史項目的近似程度。
細分估算法。細分估算法是將整個項目系統分解成若干個小系統,逐個估算成本,然後合計起來作為整個項目的估算成本。細分估算法通過逐漸細化的方式對每個小系統進行詳細的估算,可能獲得貼近實際的估算成本。其難點在於,難以把握各小系統整合為大系統的整合成本。
周期估算法。周期估算法是按軟體開發周期進行劃分,估算各個階段的成本,然後進行匯總合計。周期估算法基於軟體工程理論對軟體開發的各個階段進行估算,很適合瀑布型軟體開發方法,但是需要估算者對軟體工程各個階段的作業量和相互間的比例具有相當的了解。
顧客滿意度度量
顧客滿意是軟體開發項目的主要目的之一,而顧客滿意目標要得以實現,需要建立顧客滿意度度量體系和指標對顧客滿意度進行度量。顧客滿意度指標(CSI:customer satisfaction index)以顧客滿意研究為基礎,對顧客滿意度加以界定和描述。項目顧客滿意度量的要點在於:確定各類信息、數據、資料來源的準確性、客觀性、合理性、有效性,並以此建立產品、服務質量的衡量指標和標準。企業顧客滿意度度量的標準會因為各企業的經營理念、經營戰略、經營重點、價值取向、顧客滿意度調查結果等因素而有所不同。比如:NEC於2002年12月開始實施的CSMP 活動的度量尺度包括共感性、誠實性、革新性、確實性和迅速性,其中,將共感性和誠實性作為CS活動的核心姿態,而將革新性、確實性和迅速性作為提供商品和服務中不可或缺的尺度。每個尺度包括兩個要素,各要素包括兩個項目,總計5大尺度、10個要素和20個項目。例如,共感性這一尺度包括“了解顧客的期待”、“從顧客的立場考慮問題”這兩個要素;“了解顧客的期待”這一要素又包括“不僅僅能勝任目前的工作還能意識到為顧客提供價值而專心投入”、“對顧客的期望不是囫圇吞棗而是根據顧客的立場和狀況來思考‘顧客到底需要什麼’並加以應對”這兩個項目。
美國專家史蒂芬(Stephen H.Kan)在《軟體質量工程的度量與模型》(Metrics and Models in Software Quality Engineering)中認為,企業的顧客滿意度要素如表7-1所示:
顧客滿意度要素
顧客滿意度要素的內容
技術解決方案
質量、可靠性、有效性、易用性、價格、安裝、新技術
支持與維護
靈活性、易達性、產品知識
市場行銷
解決方案、接觸點、信息
管理
購買流程、請求手續、保證期限、注意事項
交付
準時、準確、交付後過程
企業形象
技術領導、財務穩定性、執行印象
作為企業的顧客滿意度的基本構成單位,項目的顧客滿意度會受到項目要素的影響,主要包括:開發的軟體產品、開發文檔、項目進度以及交期、技術水平、溝通能力、運用維護等等。具體而言,可以細分為如表7-2所示的度量要素,並根據這些要素進行度量。
顧客滿意度項目 顧客滿意度度量要素
軟體產品 功能性、可靠性、易用性、效率性、可維護性、可移植性
開發文檔 文檔的構成、質量、外觀、圖表以及索引、用語
項目進度以及交期 交期的根據、進度遲延情況下的應對、進展報告
技術水平 項目組的技術水平、項目組的提案能力、項目組的問題解決能力
溝通能力 事件記錄、式樣確認、Q&A
運用維護 支持、問題發生時的應對速度、問題解決能力

產品度量

軟體質量的生命周期及其度量
軟體產品度量用於對軟體產品進行評價,並在此基礎之上推進產品設計、產品製造和產品服務最佳化。軟體產品的度量實質上是軟體質量的度量,而軟體的質量度量與其質量的周期密切相關。
軟體質量度量模型
軟體產品的度量主要針對作為軟體開發成果的軟體產品的質量而言,獨立於其過程。軟體的質量由一系列質量要素組成,每一個質量要素又由一些衡量標準組成,每個衡量標準又由一些量度標準加以定量刻劃。質量度量貫穿於軟體工程的全過程以及軟體交付之後,在軟體交付之前的度量主要包括程式複雜性、模組的有效性和總的程式規模,在軟體交付之後的度量則主要包括殘存的缺陷數和系統的可維護性方面。一般情況下,可以將軟體質量特性定義成分層模型。勃姆(Barry W. Boehm)在《軟體風險管理》(Software Risk Management)中第一次提出了軟體質量度量的層次模型。而麥考爾(McCall)等人將軟體質量分解至能夠度量的層次,提出FCM 3層模型(參見表5-13):軟體質量要素(factor)、衡量標準(criteria)和量度標準(metrics),包括11個標準,分為產品操作(product operation)、產品修正(product revision)和產品轉移(product transition)。ISO 9126將軟體質量總結為6大特性,每個特性包括一系列副特性,其軟體質量模型包括3層,即高層:軟體質量需求評價準則(SQRC);中層:軟體質量設計評價準則(SQDC);低層:軟體質量度量評價準則(SQMC)。

層級內容

第一層

質量要素
描述和評價軟體質量的一組屬性 功能性、可靠性、易用性、效率性、可維護性、可移植性等質量特性以及將質量特性細化產生的副特性

第二層

衡量標準
衡量標準的組合反映某一軟體質量要素 精確性、穩健性、安全性、通信有效性、處理有效性、設備有效性、可操作性、培訓性、完備性、一致性、可追蹤性、可見性、硬體系統無關性、軟體系統無關性、可擴充性、公用性、模組性、清晰性、自描述性、簡單性、結構性、檔案完備性等

第三層

量度標準
可由各使用單位自定義 根據軟體的需求分析、概要設計、詳細設計、編碼、測試、確認、維護與使用等階段,針對每一個階段制定問卷表,以此實現軟體開發過程的質量度量
表7-3軟體質量度量FCM模型
凱悅(Lawrence E. Hyatt)和羅森貝克(Linda H. Rosenberg)在《識別項目風險以及評價軟體質量的軟體質量模型與度量》(A Software Quality Model and Metrics for Identifying Project Risks and Assessing Software Quality)中比較了這3種最常用的軟體質量模型,其基本情況如表5-14所示。
度量標準/目標 麥 考 爾 勃 姆 ISO 9126
正確性(Correctness) X X 可維護性
可靠性(Reliability) X X X
完整性(Integrity) X X
可用性(Usability) X X X
效率性(Efficiency) X X X
可維護性(Maintainability) X X X
可測試性(Testability) X 可維護性
互操作性(Interoperability) X
適應性(Flexibility) X X
可重用性(Reusability) X X
可移植性(Portability) X X X
明確性(Clarity) X
可變更性(Modifiability) X 可維護性
文檔化(Documentation) X
恢復力(Resilience) X
易懂性(Understandability) X
有效性(Validity) X 可維護性
功能性(Functionality) X
普遍性(Generality) X
經濟性(Economy) X
表7-4 3種軟體質量模型之比較
軟體質量度量方法
軟體質量度量方法比較多,例如:(1)Halstead複雜性度量法,基本思路是根據程式中可執行代碼行的操作符和運算元的數量來計算程式的複雜性。操作符和運算元的量越大,程式結構就越複雜。(2)McCabe複雜性度量法,其基本思想是程式的複雜性很大程度上取決於程式控制流的複雜性,單一的順序程式結構最簡單,循環和選擇所構成的環路越多,程式就越複雜。

過程度量

性能

過程度量是對軟體開發過程的各個方面進行度量,目的在於預測過程的未來性能,減少過程結果的偏差,對軟體過程的行為進行目標管理,為過程控制、過程評價持續改善提供定量性基礎。過程度量與軟體開發流程密切相關,具有戰略性意義。軟體過程質量的好壞會直接影響軟體產品質量的好壞,度量並評估過程、提高過程成熟度可以改進產品質量。相反,度量並評估軟體產品質量會為提高軟體過程質量提供必要的反饋和依據。過程度量與軟體過程的成熟度密切相關。

過程管理

弗羅哈克(William A.Florac)、帕克(Robert E.Park)和卡爾頓(Anita D.Carleton)在《實用軟體度量:過程管理和改善之度量》(Practical Software Measurement:Measuring for Process Management and Improvement)中描述了過程管理和項目管理的關係。認為軟體項目團隊生產產品基於三大要素:產品需求、項目計畫和已定義軟體過程。度量數據在項目管理中將被用來:(1)識別和描述需求,(2)準備能夠實現目標的計畫,(3)執行計畫,(4)跟蹤基於項目計畫目標的工作執行狀態和進展。而過程管理也能使用相同的數據和相關度量來控制和改善軟體過程本身。這就意味著,軟體組織能使用建構和維持度量活動的共同框架來為過程管理和項目管理兩大管理功能提供數據。
軟體過程管理包括定義過程、計畫度量、執行軟體過程、套用度量、控制過程和改善過程,其中計畫度量和套用度量是軟體過程管理中的重要步驟,也是軟體過程度量的核心內容。計畫度量建立在對已定義軟體過程的理解之上,產品、過程、資源的相關事項和屬性已經被識別,收集和使用度量以進行過程性能跟蹤的規定都被集成到軟體過程之中。套用度量通過過程度量將執行軟體過程所獲得的數據,以及通過產品度量將產品相關數據用來控制和改善軟體過程。

內容

軟體過程度量主要包括三大方面的內容,一是成熟度度量(maturity metrics),主要包括組織度量、資源度量、培訓度量、文檔標準化度量、數據管理與分析度量、過程質量度量等等;二是管理度量(management metrics),主要包括項目管理度量(如里程碑管理度量、風險度量、作業流程度量、控制度量、管理資料庫度量等)、質量管理度量(如質量審查度量、質量測試度量、質量保證度量等)、配置管理度量(如式樣變更控制度量、版本管理控制度量等);三是生命周期度量(life cycle metrics),主要包括問題定義度量、需求分析度量、設計度量、製造度量、維護度量等。

流程

軟體過程的度量,需要按照已經明確定義的度量流程加以實施,這樣能使軟體過程度量作業具有可控制性和可跟蹤性,從而提高度量的有效性。軟體過程度量的一般流程主要包括:確認過程問題;收集過程數據;分析過程數據;解釋過程數據;匯報過程分析;提出過程建議;實施過程行動;實施監督和控制。這一度量過程的流程質量能保證軟體過程度量獲得有關軟體過程的數據和問題,並進而對軟體過程實施改善。

相關詞條

熱門詞條

聯絡我們