第18章 軟件的技術(shù)度量
測(cè)度是任意一個(gè)工程過(guò)程中的重要元素。運(yùn)用測(cè)度,我們能更好的理解我們所建立的模型的屬性,但最重要的是,我們還可以運(yùn)用測(cè)度來(lái)評(píng)價(jià)我們所建立的工程化產(chǎn)品或系統(tǒng)的質(zhì)量。
不象其他的工程學(xué)科,軟件工程并不是建立在基本物理定量規(guī)律上的。絕對(duì)測(cè)度,如電壓、重量、速度、或者溫度,在軟件界中并不普遍。相反,我們是要設(shè)法獲取一套間接測(cè)度方法來(lái)提供對(duì)軟件質(zhì)量的表示。因?yàn)檐浖y(cè)度不是絕對(duì)的,所以它們是可以討論的。Fenton[FEN91]在討論這個(gè)問(wèn)題時(shí)談到:
測(cè)度是把數(shù)字或符號(hào)分配給現(xiàn)實(shí)世界實(shí)體的屬性,根據(jù)明確定義的規(guī)則來(lái)定義它們……在物理科學(xué)、醫(yī)學(xué)、經(jīng)濟(jì)和較新的社會(huì)科學(xué)方面,現(xiàn)在我們能夠測(cè)度我們?cè)日J(rèn)為不能測(cè)度的屬性……。當(dāng)然,這些測(cè)度并不象在物理科學(xué)中定義的一些測(cè)度那么完美……,但是它們確實(shí)存在并且往往基于它們可作出重要的決策。為了提高我們對(duì)特定實(shí)體的理解,我們有責(zé)任嘗試去測(cè)度所謂不可測(cè)度的東西,這種責(zé)任在軟件工程中和在其他學(xué)科中是一樣重要。
但是有一些軟件業(yè)人員繼續(xù)爭(zhēng)論道軟件是不是可測(cè)度的或者說(shuō)測(cè)度的嘗試應(yīng)該推遲到我們能更好地理解軟件和用以描述軟件的屬性的時(shí)候。這是個(gè)錯(cuò)誤的說(shuō)法。
雖然計(jì)算機(jī)軟件的技術(shù)度量并不是絕對(duì)的,但是它們?yōu)槲覀兲峁┝嘶谝惶浊逦x規(guī)則的一種系統(tǒng)的方法來(lái)評(píng)價(jià)質(zhì)量。它們同時(shí)還為軟件工程提供了一種現(xiàn)場(chǎng)的而不是事后的洞察,這使得工程師能在潛在的問(wèn)題變成災(zāi)難性錯(cuò)誤前發(fā)現(xiàn)和糾正它們。
在第4章我們討論了運(yùn)用在過(guò)程和項(xiàng)目級(jí)別的軟件度量。在這一章,我們的重點(diǎn)轉(zhuǎn)移到當(dāng)產(chǎn)品被工程化的時(shí)候,可以用來(lái)評(píng)價(jià)產(chǎn)品的質(zhì)量的度量。這些產(chǎn)品內(nèi)部屬性的測(cè)度為軟件工程提供了對(duì)分析、設(shè)計(jì)和編碼模型的有效性;測(cè)試用例的有效性以及要開(kāi)發(fā)的軟件整體質(zhì)量的一個(gè)實(shí)時(shí)的指示。
18.1 軟件質(zhì)量
甚至最老練的軟件開(kāi)發(fā)者都會(huì)同意高質(zhì)量的軟件是一個(gè)重要的目標(biāo),但是我們?nèi)绾味x質(zhì)量呢?一句諧趣話(huà)曾經(jīng)這樣說(shuō)道,“每一個(gè)程序能正確地做某件事,但是這并不是我們想要它做的事情?!?BR> 在第8章我們提出了許多不同的方法來(lái)看待軟件質(zhì)量并介紹了一個(gè)定義,它強(qiáng)調(diào)了與清晰描述的功能和性能需求的符合性、明顯的文檔的開(kāi)發(fā)標(biāo)準(zhǔn)、以及被認(rèn)為是所有專(zhuān)業(yè)開(kāi)發(fā)的軟件所應(yīng)具備的隱式特征。
毫無(wú)疑問(wèn)上述定義可以被無(wú)休止地修改、擴(kuò)展或討論。針對(duì)本書(shū)的目的,定義強(qiáng)調(diào)了以下三個(gè)重點(diǎn):
1.軟件需求是質(zhì)量測(cè)度的基礎(chǔ)。需求符合性的缺乏也就是缺乏質(zhì)量。①
2.特定的標(biāo)準(zhǔn)定義了一套開(kāi)發(fā)標(biāo)準(zhǔn),用以指導(dǎo)軟件開(kāi)發(fā)的方式。如果標(biāo)準(zhǔn)未能夠遵守,那么缺少質(zhì)量就幾乎是肯定的結(jié)論。
3.要有一套經(jīng)常未被提及的隱式需求(例如,對(duì)好的可維護(hù)性的期望)。如果軟件符合其顯式的需求,但是未能滿(mǎn)足隱式需求,軟件質(zhì)量仍是值得懷疑的。
軟件質(zhì)量是一個(gè)多因素的復(fù)雜混合,這些因素隨著不同的應(yīng)用和需要它們的用戶(hù)而變化。以下章節(jié)標(biāo)識(shí)了軟件質(zhì)量因素,以及描述了用以獲取它們的人類(lèi)活動(dòng)。
18.1.1 McCall的質(zhì)量因素
影響軟件質(zhì)量的因素可以分為兩大類(lèi):(1)可以直接測(cè)度的因素(例如,每個(gè)功能點(diǎn)的錯(cuò)誤)和(2)只能間接測(cè)度的因素(例如,可用性和可維護(hù)性)。在每種情況下測(cè)度都必須發(fā)生。我們必須對(duì)軟件(文檔、程序、數(shù)據(jù))和一些數(shù)據(jù)作一些比較,并獲得質(zhì)量的指示。
McCall和他的同事[MCC77]提出了對(duì)影響軟件質(zhì)量的因素的有用的分類(lèi)。這些軟件質(zhì)量因素,如圖18-1所示,集中在軟件產(chǎn)品的三個(gè)重要方面:它的操作特性、它承受改變的能力、以及對(duì)新環(huán)境的適應(yīng)能力。
對(duì)于在圖18-1提到的因素,McCall提供了如下的描述:
正確性。一個(gè)程序滿(mǎn)足它的需求規(guī)約和實(shí)現(xiàn)用戶(hù)任務(wù)目標(biāo)的程度。
可靠性。一個(gè)程序期望以所需的精確度完成它的預(yù)期功能的程度。更完整的對(duì)可靠性的定義已經(jīng)在前面提出過(guò)了(見(jiàn)第8章)。
功效。一個(gè)程序完成其功能所需的計(jì)算資源和代碼的數(shù)量。
完整性。對(duì)未授權(quán)人員訪(fǎng)問(wèn)軟件或數(shù)據(jù)的可控制程度。
可用性。學(xué)習(xí)、操作、準(zhǔn)備輸入和解釋程序輸出所需的工作量。
可維護(hù)性。定位和修復(fù)程序中一個(gè)錯(cuò)誤所需的工作量。(這是一個(gè)十分局限的定義。)
靈活性。修改一個(gè)運(yùn)作的程序所需的工作量。
可測(cè)試性。測(cè)試一個(gè)程序以確保它完成所期望的功能所需的工作量。
可移植性。把一個(gè)程序從一個(gè)硬件和/或軟件系統(tǒng)環(huán)境移植到另一個(gè)環(huán)境所需的工作量。
可復(fù)用性。一個(gè)程序[或一個(gè)程序的一部分]可以在另外一個(gè)應(yīng)用程序中復(fù)用的程度——這和程序完成的功能的包裝和范圍相關(guān)。
互操作性。連接一個(gè)系統(tǒng)和另一個(gè)系統(tǒng)所需的工作量。
很難,在一些情況下也不可能,去開(kāi)發(fā)一個(gè)對(duì)以上的質(zhì)量因素的直接測(cè)度,因此,定義一組度量,并被用于按照下面的關(guān)系為每個(gè)因素開(kāi)發(fā)表達(dá)式:
Fq=c1×m1+c2×m2+…+cn×mn
這里Fq是一個(gè)軟件質(zhì)量因素,cn是回歸系數(shù),mn是影響質(zhì)量因素的度量值。不幸的是許多McCall定義的度量值只能主觀(guān)地測(cè)度。度量可以用檢查表的形式,來(lái)給軟件的特定屬性進(jìn)行評(píng)分[CAV78]。由McCall提出的評(píng)分方案是從0(低)到10(高)的范圍。
測(cè)度是任意一個(gè)工程過(guò)程中的重要元素。運(yùn)用測(cè)度,我們能更好的理解我們所建立的模型的屬性,但最重要的是,我們還可以運(yùn)用測(cè)度來(lái)評(píng)價(jià)我們所建立的工程化產(chǎn)品或系統(tǒng)的質(zhì)量。
不象其他的工程學(xué)科,軟件工程并不是建立在基本物理定量規(guī)律上的。絕對(duì)測(cè)度,如電壓、重量、速度、或者溫度,在軟件界中并不普遍。相反,我們是要設(shè)法獲取一套間接測(cè)度方法來(lái)提供對(duì)軟件質(zhì)量的表示。因?yàn)檐浖y(cè)度不是絕對(duì)的,所以它們是可以討論的。Fenton[FEN91]在討論這個(gè)問(wèn)題時(shí)談到:
測(cè)度是把數(shù)字或符號(hào)分配給現(xiàn)實(shí)世界實(shí)體的屬性,根據(jù)明確定義的規(guī)則來(lái)定義它們……在物理科學(xué)、醫(yī)學(xué)、經(jīng)濟(jì)和較新的社會(huì)科學(xué)方面,現(xiàn)在我們能夠測(cè)度我們?cè)日J(rèn)為不能測(cè)度的屬性……。當(dāng)然,這些測(cè)度并不象在物理科學(xué)中定義的一些測(cè)度那么完美……,但是它們確實(shí)存在并且往往基于它們可作出重要的決策。為了提高我們對(duì)特定實(shí)體的理解,我們有責(zé)任嘗試去測(cè)度所謂不可測(cè)度的東西,這種責(zé)任在軟件工程中和在其他學(xué)科中是一樣重要。
但是有一些軟件業(yè)人員繼續(xù)爭(zhēng)論道軟件是不是可測(cè)度的或者說(shuō)測(cè)度的嘗試應(yīng)該推遲到我們能更好地理解軟件和用以描述軟件的屬性的時(shí)候。這是個(gè)錯(cuò)誤的說(shuō)法。
雖然計(jì)算機(jī)軟件的技術(shù)度量并不是絕對(duì)的,但是它們?yōu)槲覀兲峁┝嘶谝惶浊逦x規(guī)則的一種系統(tǒng)的方法來(lái)評(píng)價(jià)質(zhì)量。它們同時(shí)還為軟件工程提供了一種現(xiàn)場(chǎng)的而不是事后的洞察,這使得工程師能在潛在的問(wèn)題變成災(zāi)難性錯(cuò)誤前發(fā)現(xiàn)和糾正它們。
在第4章我們討論了運(yùn)用在過(guò)程和項(xiàng)目級(jí)別的軟件度量。在這一章,我們的重點(diǎn)轉(zhuǎn)移到當(dāng)產(chǎn)品被工程化的時(shí)候,可以用來(lái)評(píng)價(jià)產(chǎn)品的質(zhì)量的度量。這些產(chǎn)品內(nèi)部屬性的測(cè)度為軟件工程提供了對(duì)分析、設(shè)計(jì)和編碼模型的有效性;測(cè)試用例的有效性以及要開(kāi)發(fā)的軟件整體質(zhì)量的一個(gè)實(shí)時(shí)的指示。
18.1 軟件質(zhì)量
甚至最老練的軟件開(kāi)發(fā)者都會(huì)同意高質(zhì)量的軟件是一個(gè)重要的目標(biāo),但是我們?nèi)绾味x質(zhì)量呢?一句諧趣話(huà)曾經(jīng)這樣說(shuō)道,“每一個(gè)程序能正確地做某件事,但是這并不是我們想要它做的事情?!?BR> 在第8章我們提出了許多不同的方法來(lái)看待軟件質(zhì)量并介紹了一個(gè)定義,它強(qiáng)調(diào)了與清晰描述的功能和性能需求的符合性、明顯的文檔的開(kāi)發(fā)標(biāo)準(zhǔn)、以及被認(rèn)為是所有專(zhuān)業(yè)開(kāi)發(fā)的軟件所應(yīng)具備的隱式特征。
毫無(wú)疑問(wèn)上述定義可以被無(wú)休止地修改、擴(kuò)展或討論。針對(duì)本書(shū)的目的,定義強(qiáng)調(diào)了以下三個(gè)重點(diǎn):
1.軟件需求是質(zhì)量測(cè)度的基礎(chǔ)。需求符合性的缺乏也就是缺乏質(zhì)量。①
2.特定的標(biāo)準(zhǔn)定義了一套開(kāi)發(fā)標(biāo)準(zhǔn),用以指導(dǎo)軟件開(kāi)發(fā)的方式。如果標(biāo)準(zhǔn)未能夠遵守,那么缺少質(zhì)量就幾乎是肯定的結(jié)論。
3.要有一套經(jīng)常未被提及的隱式需求(例如,對(duì)好的可維護(hù)性的期望)。如果軟件符合其顯式的需求,但是未能滿(mǎn)足隱式需求,軟件質(zhì)量仍是值得懷疑的。
軟件質(zhì)量是一個(gè)多因素的復(fù)雜混合,這些因素隨著不同的應(yīng)用和需要它們的用戶(hù)而變化。以下章節(jié)標(biāo)識(shí)了軟件質(zhì)量因素,以及描述了用以獲取它們的人類(lèi)活動(dòng)。
18.1.1 McCall的質(zhì)量因素
影響軟件質(zhì)量的因素可以分為兩大類(lèi):(1)可以直接測(cè)度的因素(例如,每個(gè)功能點(diǎn)的錯(cuò)誤)和(2)只能間接測(cè)度的因素(例如,可用性和可維護(hù)性)。在每種情況下測(cè)度都必須發(fā)生。我們必須對(duì)軟件(文檔、程序、數(shù)據(jù))和一些數(shù)據(jù)作一些比較,并獲得質(zhì)量的指示。
McCall和他的同事[MCC77]提出了對(duì)影響軟件質(zhì)量的因素的有用的分類(lèi)。這些軟件質(zhì)量因素,如圖18-1所示,集中在軟件產(chǎn)品的三個(gè)重要方面:它的操作特性、它承受改變的能力、以及對(duì)新環(huán)境的適應(yīng)能力。
對(duì)于在圖18-1提到的因素,McCall提供了如下的描述:
正確性。一個(gè)程序滿(mǎn)足它的需求規(guī)約和實(shí)現(xiàn)用戶(hù)任務(wù)目標(biāo)的程度。
可靠性。一個(gè)程序期望以所需的精確度完成它的預(yù)期功能的程度。更完整的對(duì)可靠性的定義已經(jīng)在前面提出過(guò)了(見(jiàn)第8章)。
功效。一個(gè)程序完成其功能所需的計(jì)算資源和代碼的數(shù)量。
完整性。對(duì)未授權(quán)人員訪(fǎng)問(wèn)軟件或數(shù)據(jù)的可控制程度。
可用性。學(xué)習(xí)、操作、準(zhǔn)備輸入和解釋程序輸出所需的工作量。
可維護(hù)性。定位和修復(fù)程序中一個(gè)錯(cuò)誤所需的工作量。(這是一個(gè)十分局限的定義。)
靈活性。修改一個(gè)運(yùn)作的程序所需的工作量。
可測(cè)試性。測(cè)試一個(gè)程序以確保它完成所期望的功能所需的工作量。
可移植性。把一個(gè)程序從一個(gè)硬件和/或軟件系統(tǒng)環(huán)境移植到另一個(gè)環(huán)境所需的工作量。
可復(fù)用性。一個(gè)程序[或一個(gè)程序的一部分]可以在另外一個(gè)應(yīng)用程序中復(fù)用的程度——這和程序完成的功能的包裝和范圍相關(guān)。
互操作性。連接一個(gè)系統(tǒng)和另一個(gè)系統(tǒng)所需的工作量。
很難,在一些情況下也不可能,去開(kāi)發(fā)一個(gè)對(duì)以上的質(zhì)量因素的直接測(cè)度,因此,定義一組度量,并被用于按照下面的關(guān)系為每個(gè)因素開(kāi)發(fā)表達(dá)式:
Fq=c1×m1+c2×m2+…+cn×mn
這里Fq是一個(gè)軟件質(zhì)量因素,cn是回歸系數(shù),mn是影響質(zhì)量因素的度量值。不幸的是許多McCall定義的度量值只能主觀(guān)地測(cè)度。度量可以用檢查表的形式,來(lái)給軟件的特定屬性進(jìn)行評(píng)分[CAV78]。由McCall提出的評(píng)分方案是從0(低)到10(高)的范圍。

