丈量軟件質(zhì)量
對(duì)比十年前,雖然軟件開發(fā)采用的語言進(jìn)步了,開發(fā)工具更先進(jìn)了,國(guó)家的投入也多了,但國(guó)產(chǎn)軟件的質(zhì)量仍然沒有一個(gè)跨越性的提升。不堅(jiān)實(shí)的軟件質(zhì)量帶來了嚴(yán)重的后果,例如:
1.國(guó)內(nèi)用戶形成思維定勢(shì),不認(rèn)可國(guó)產(chǎn)軟件的質(zhì)量,導(dǎo)致用戶傾向采購(gòu)更為昂貴但質(zhì)量更好的國(guó)外軟件,近而導(dǎo)致國(guó)產(chǎn)軟件無法在市場(chǎng)上成為主流,特別是在基礎(chǔ)平臺(tái)軟件領(lǐng)域。
2.國(guó)內(nèi)開發(fā)人員潛意識(shí)中認(rèn)可國(guó)外軟件廠商的性和標(biāo)準(zhǔn)性,滿足于跟蹤學(xué)習(xí),削弱了創(chuàng)新挑戰(zhàn)的意識(shí),進(jìn)而更加深第一點(diǎn)。
3.大量的軟件項(xiàng)目拖延導(dǎo)致軟件開發(fā)成本急劇增加,導(dǎo)致軟件企業(yè)利潤(rùn)微薄,無法完成資本積累走上良性發(fā)展的道路。
4.國(guó)產(chǎn)軟件不能在質(zhì)量,先進(jìn)性和用戶數(shù)上和國(guó)外產(chǎn)品較量,進(jìn)而無法獲得參與國(guó)際標(biāo)準(zhǔn)制定的門票,繼續(xù)滯后。
ISO9001, CMM的推動(dòng)都是希望能通過流程控制來保證軟件質(zhì)量,但具體如何保證,軟件質(zhì)量到底如何,仍然沒有一個(gè)具體的方法和客觀的衡量標(biāo)準(zhǔn),而完全依賴開發(fā)人員自己的主觀猜測(cè)( 注: ISO9001的文檔化管理已經(jīng)被證明不適用于軟件開發(fā), CMM只是規(guī)定了需要做到的功能點(diǎn),但沒有規(guī)定如何做)。
同樣的問題也困擾著西方的軟件產(chǎn)業(yè),從90年代末起,西方軟件業(yè)興起了敏捷開發(fā)的熱潮,很多&ldquo新&rdquo的軟件開發(fā)方法和概念被引入到商業(yè)軟件開發(fā)中,例如測(cè)試先行的開發(fā)(Test-driven Development),自動(dòng)回歸測(cè)試( Auto-Regression Test ),持久集成測(cè)試( Continuous Integration ),共享代碼( Celebrative Code Ownership )等。同時(shí)開源運(yùn)動(dòng)的發(fā)展也更近一步推動(dòng)了敏捷開發(fā)的潮流(最的單元測(cè)試工具Junit就是開源產(chǎn)品),使這些由民間程序員自行總結(jié)和發(fā)起的敏捷開發(fā)方法迅速超越以往的CMM, RUP成為西方軟件業(yè)的主流開發(fā)方法。IBM的RUP和微軟最新的.NET Framework都提供了用于敏捷開發(fā)的工具和支持。而印度的外包軟件企業(yè)也開始提供敏捷外包業(yè)務(wù)。
這些&rdquo新&rdquo方法的引入,使得保證軟件質(zhì)量有了切實(shí)的手段,更重要的是使軟件質(zhì)量的測(cè)量有了基礎(chǔ)。是的!軟件質(zhì)量是可以被丈量的!
之所以在&rdquo新&rdquo的上使用引號(hào), 是因?yàn)檫@些開發(fā)方法都是早就在被采用,軟件質(zhì)量的丈量也早就被研究和運(yùn)用,但真正在商業(yè)應(yīng)用中被廣泛應(yīng)用還是在java語言和敏捷開發(fā)方法普及之后。
而在軟件質(zhì)量保證,軟件質(zhì)量丈量方面的研究和應(yīng)用,走的最前的是美國(guó)的國(guó)防,軍事情報(bào)等部門。甚至在java/敏捷開發(fā)方法普及以前,在C, C++,F(xiàn)ortune , Ada語言的時(shí)代,軟件測(cè)試和軟件質(zhì)量的量化丈量等概念就已經(jīng)在美國(guó)軍事部門的軟件開發(fā)過程中被研究和運(yùn)用。在IEEE協(xié)會(huì)的很多論文當(dāng)中,關(guān)于軟件質(zhì)量丈量的很多論文都是美國(guó)軍事部門的工程師提交的。他們通過對(duì)數(shù)年內(nèi)軟件項(xiàng)目中軟件的代碼數(shù)量,測(cè)試手段,測(cè)試覆蓋,代碼分析,錯(cuò)誤率等進(jìn)行了大量的統(tǒng)計(jì)分析,發(fā)展了完善的軟件測(cè)試方法,工具和軟件質(zhì)量衡量的指標(biāo)體系。
軟件質(zhì)量保證( Quality Assurance )一個(gè)重要的概念就是軟件質(zhì)量應(yīng)該是可以丈量的。一個(gè)軟件是否能夠通過驗(yàn)收,是否達(dá)到發(fā)布到生產(chǎn)環(huán)境的標(biāo)準(zhǔn)應(yīng)該是可以通過量化的指標(biāo)來衡量,而不是依靠主觀的判斷。目前國(guó)內(nèi)的軟件開發(fā)項(xiàng)目通過驗(yàn)收,基本上是靠人工做功能點(diǎn)測(cè)試。根據(jù)功能點(diǎn)測(cè)試存在兩個(gè)問題:
1.從使用角度進(jìn)行的功能測(cè)試經(jīng)常無法覆蓋所有的可能性,是一種粗放型黑盒測(cè)試。
2.無法衡量軟件代碼的質(zhì)量。
而同樣的,軟件開發(fā)商對(duì)問題&ldquo你們的軟件質(zhì)量如何?&rdquo往往也無法拿出數(shù)據(jù)進(jìn)行證明自己軟件的質(zhì)量。就是說,軟件質(zhì)量變成了一個(gè)象征性的名詞,我們知道需要重視軟件質(zhì)量,但如何保證軟件質(zhì)量,特別是如何量化軟件質(zhì)量,衡量軟件質(zhì)量卻沒有方法和手段。對(duì)用戶來說,他無法明確知道開發(fā)商提交的軟件是否質(zhì)量?jī)?yōu)良。對(duì)軟件開發(fā)商來說,他也無法明確知道自己開發(fā)的軟件的質(zhì)量和對(duì)用戶證明。因此量化軟件質(zhì)量使之可以被測(cè)量對(duì)用戶和軟件開發(fā)商都有重要的意義。
何產(chǎn)品都有質(zhì)量標(biāo)準(zhǔn)(國(guó)際標(biāo)準(zhǔn),國(guó)家標(biāo)準(zhǔn),部頒標(biāo)準(zhǔn),企業(yè)標(biāo)準(zhǔn)等),沒有質(zhì)量的產(chǎn)品就沒有市場(chǎng)。軟件既然是一種產(chǎn)品(商品),就應(yīng)該有它客觀質(zhì)量的標(biāo)準(zhǔn)尺度,不能依賴少數(shù)人的主觀推理和臆測(cè)或做小范圍功能點(diǎn)的人工測(cè)試. 軟件質(zhì)量應(yīng)該量化!
如何丈量軟件的質(zhì)量?主要通過對(duì)代碼,測(cè)試代碼進(jìn)行自動(dòng)的分析,獲得一系列相應(yīng)的數(shù)據(jù)指標(biāo)來說明軟件的質(zhì)量。主要做兩個(gè)分析:
1.靜態(tài)分析Static Metrics Analysis
靜態(tài)分析通過分析代碼后獲得的基本數(shù)據(jù):
1) 文件總數(shù)
2) 代碼總行數(shù)
3) 對(duì)象類的總數(shù)
4) 方法的總數(shù)
5) 平均每個(gè)方法的代碼行數(shù)
6) 注釋的行數(shù)
7) 每個(gè)方法中可執(zhí)行語句的行數(shù)
8) 每個(gè)方法中符值語句的行數(shù)
9) 條件語句的行數(shù)
每個(gè)項(xiàng)目可以根據(jù)不同的需要定出需要符合的指標(biāo)。例如美國(guó)國(guó)土安全局的軟件項(xiàng)目規(guī)定每個(gè)方法的行數(shù)不可以超過62行,可執(zhí)行語句不超過50行,而符值語句不可以超過12行。
在此基礎(chǔ)上,還可以加入重復(fù)代碼分析( 防止開發(fā)人員簡(jiǎn)單的拷貝重復(fù)代碼,重復(fù)代碼會(huì)使軟件的可擴(kuò)展性大大降低),邏輯分析路徑分析等智能分析功能,進(jìn)一步檢測(cè)軟件的質(zhì)量。
2.覆蓋分析 (Coverage Analysis)
靜態(tài)分析的指標(biāo)能反映質(zhì)量的一個(gè)側(cè)面,而覆蓋分析則能展現(xiàn)軟件的性能,可維護(hù)性,可測(cè)試性,也是軟件質(zhì)量最直觀的體現(xiàn)。覆蓋分析主要是運(yùn)行各種單元測(cè)試,集成測(cè)試,并記錄測(cè)試所覆蓋的代碼的信息。
覆蓋分析采集的基本數(shù)據(jù):
1) 代碼行覆蓋率。即多少代碼行確實(shí)被測(cè)試所運(yùn)行和測(cè)試。
2) 方法覆蓋率。即多少方法確實(shí)被測(cè)試所運(yùn)行和測(cè)試。
3) 條件語句覆蓋率。即多少條件語句的分支是否被覆蓋。
同樣的每個(gè)項(xiàng)目可以根據(jù)需要定出項(xiàng)目合格的標(biāo)準(zhǔn)。例如軍方項(xiàng)目的條件語句/方法覆蓋率必須是100%的。
在此基礎(chǔ)上,還可以添加更加智能/復(fù)雜的邏輯路徑覆蓋分析。
通過上面兩個(gè)方面的分析產(chǎn)生的數(shù)據(jù)綜合反映軟件的質(zhì)量。有了這些數(shù)據(jù)我們就可以丈量軟件的質(zhì)量。而且我們可以隨時(shí)知道軟件開發(fā)的質(zhì)量并做出調(diào)整,而不是等到交付的時(shí)候才發(fā)現(xiàn)問題(管理學(xué)中的風(fēng)險(xiǎn)提前)。
對(duì)于軟件外包行業(yè),引入軟件測(cè)量概念和方法,除了提升企業(yè)本身的素質(zhì)和軟件質(zhì)量外,更應(yīng)該在提交委托方的產(chǎn)品的時(shí)候伴隨相應(yīng)的測(cè)試代碼和質(zhì)量測(cè)量數(shù)據(jù)。這樣做的好處是:
1) 提升用戶的滿意度。
2) 建立專業(yè)外包形象。
3) 和其他國(guó)家的外包服務(wù)拉開差距,形成質(zhì)量為先的外包品牌。
結(jié)束語: 有了量化的指標(biāo),除了能給軟件開發(fā)項(xiàng)目的甲乙雙方一個(gè)明確的軟件質(zhì)量合同外(不再單單是功能合同),更重要的是將軟件質(zhì)量保證制度化,進(jìn)而迫使軟件開發(fā)企業(yè)注重軟件質(zhì)量//流程管理的意識(shí),改變舊的依賴人工測(cè)試的概念,引入測(cè)試驅(qū)動(dòng)開發(fā),自動(dòng)單元測(cè)試,自動(dòng)集成測(cè)試,每日集成,小規(guī)模發(fā)布等優(yōu)秀的敏捷開發(fā)方法,切實(shí)提升軟件的質(zhì)量和開發(fā)效率。
對(duì)比十年前,雖然軟件開發(fā)采用的語言進(jìn)步了,開發(fā)工具更先進(jìn)了,國(guó)家的投入也多了,但國(guó)產(chǎn)軟件的質(zhì)量仍然沒有一個(gè)跨越性的提升。不堅(jiān)實(shí)的軟件質(zhì)量帶來了嚴(yán)重的后果,例如:
1.國(guó)內(nèi)用戶形成思維定勢(shì),不認(rèn)可國(guó)產(chǎn)軟件的質(zhì)量,導(dǎo)致用戶傾向采購(gòu)更為昂貴但質(zhì)量更好的國(guó)外軟件,近而導(dǎo)致國(guó)產(chǎn)軟件無法在市場(chǎng)上成為主流,特別是在基礎(chǔ)平臺(tái)軟件領(lǐng)域。
2.國(guó)內(nèi)開發(fā)人員潛意識(shí)中認(rèn)可國(guó)外軟件廠商的性和標(biāo)準(zhǔn)性,滿足于跟蹤學(xué)習(xí),削弱了創(chuàng)新挑戰(zhàn)的意識(shí),進(jìn)而更加深第一點(diǎn)。
3.大量的軟件項(xiàng)目拖延導(dǎo)致軟件開發(fā)成本急劇增加,導(dǎo)致軟件企業(yè)利潤(rùn)微薄,無法完成資本積累走上良性發(fā)展的道路。
4.國(guó)產(chǎn)軟件不能在質(zhì)量,先進(jìn)性和用戶數(shù)上和國(guó)外產(chǎn)品較量,進(jìn)而無法獲得參與國(guó)際標(biāo)準(zhǔn)制定的門票,繼續(xù)滯后。
ISO9001, CMM的推動(dòng)都是希望能通過流程控制來保證軟件質(zhì)量,但具體如何保證,軟件質(zhì)量到底如何,仍然沒有一個(gè)具體的方法和客觀的衡量標(biāo)準(zhǔn),而完全依賴開發(fā)人員自己的主觀猜測(cè)( 注: ISO9001的文檔化管理已經(jīng)被證明不適用于軟件開發(fā), CMM只是規(guī)定了需要做到的功能點(diǎn),但沒有規(guī)定如何做)。
同樣的問題也困擾著西方的軟件產(chǎn)業(yè),從90年代末起,西方軟件業(yè)興起了敏捷開發(fā)的熱潮,很多&ldquo新&rdquo的軟件開發(fā)方法和概念被引入到商業(yè)軟件開發(fā)中,例如測(cè)試先行的開發(fā)(Test-driven Development),自動(dòng)回歸測(cè)試( Auto-Regression Test ),持久集成測(cè)試( Continuous Integration ),共享代碼( Celebrative Code Ownership )等。同時(shí)開源運(yùn)動(dòng)的發(fā)展也更近一步推動(dòng)了敏捷開發(fā)的潮流(最的單元測(cè)試工具Junit就是開源產(chǎn)品),使這些由民間程序員自行總結(jié)和發(fā)起的敏捷開發(fā)方法迅速超越以往的CMM, RUP成為西方軟件業(yè)的主流開發(fā)方法。IBM的RUP和微軟最新的.NET Framework都提供了用于敏捷開發(fā)的工具和支持。而印度的外包軟件企業(yè)也開始提供敏捷外包業(yè)務(wù)。
這些&rdquo新&rdquo方法的引入,使得保證軟件質(zhì)量有了切實(shí)的手段,更重要的是使軟件質(zhì)量的測(cè)量有了基礎(chǔ)。是的!軟件質(zhì)量是可以被丈量的!
之所以在&rdquo新&rdquo的上使用引號(hào), 是因?yàn)檫@些開發(fā)方法都是早就在被采用,軟件質(zhì)量的丈量也早就被研究和運(yùn)用,但真正在商業(yè)應(yīng)用中被廣泛應(yīng)用還是在java語言和敏捷開發(fā)方法普及之后。
而在軟件質(zhì)量保證,軟件質(zhì)量丈量方面的研究和應(yīng)用,走的最前的是美國(guó)的國(guó)防,軍事情報(bào)等部門。甚至在java/敏捷開發(fā)方法普及以前,在C, C++,F(xiàn)ortune , Ada語言的時(shí)代,軟件測(cè)試和軟件質(zhì)量的量化丈量等概念就已經(jīng)在美國(guó)軍事部門的軟件開發(fā)過程中被研究和運(yùn)用。在IEEE協(xié)會(huì)的很多論文當(dāng)中,關(guān)于軟件質(zhì)量丈量的很多論文都是美國(guó)軍事部門的工程師提交的。他們通過對(duì)數(shù)年內(nèi)軟件項(xiàng)目中軟件的代碼數(shù)量,測(cè)試手段,測(cè)試覆蓋,代碼分析,錯(cuò)誤率等進(jìn)行了大量的統(tǒng)計(jì)分析,發(fā)展了完善的軟件測(cè)試方法,工具和軟件質(zhì)量衡量的指標(biāo)體系。
軟件質(zhì)量保證( Quality Assurance )一個(gè)重要的概念就是軟件質(zhì)量應(yīng)該是可以丈量的。一個(gè)軟件是否能夠通過驗(yàn)收,是否達(dá)到發(fā)布到生產(chǎn)環(huán)境的標(biāo)準(zhǔn)應(yīng)該是可以通過量化的指標(biāo)來衡量,而不是依靠主觀的判斷。目前國(guó)內(nèi)的軟件開發(fā)項(xiàng)目通過驗(yàn)收,基本上是靠人工做功能點(diǎn)測(cè)試。根據(jù)功能點(diǎn)測(cè)試存在兩個(gè)問題:
1.從使用角度進(jìn)行的功能測(cè)試經(jīng)常無法覆蓋所有的可能性,是一種粗放型黑盒測(cè)試。
2.無法衡量軟件代碼的質(zhì)量。
而同樣的,軟件開發(fā)商對(duì)問題&ldquo你們的軟件質(zhì)量如何?&rdquo往往也無法拿出數(shù)據(jù)進(jìn)行證明自己軟件的質(zhì)量。就是說,軟件質(zhì)量變成了一個(gè)象征性的名詞,我們知道需要重視軟件質(zhì)量,但如何保證軟件質(zhì)量,特別是如何量化軟件質(zhì)量,衡量軟件質(zhì)量卻沒有方法和手段。對(duì)用戶來說,他無法明確知道開發(fā)商提交的軟件是否質(zhì)量?jī)?yōu)良。對(duì)軟件開發(fā)商來說,他也無法明確知道自己開發(fā)的軟件的質(zhì)量和對(duì)用戶證明。因此量化軟件質(zhì)量使之可以被測(cè)量對(duì)用戶和軟件開發(fā)商都有重要的意義。
何產(chǎn)品都有質(zhì)量標(biāo)準(zhǔn)(國(guó)際標(biāo)準(zhǔn),國(guó)家標(biāo)準(zhǔn),部頒標(biāo)準(zhǔn),企業(yè)標(biāo)準(zhǔn)等),沒有質(zhì)量的產(chǎn)品就沒有市場(chǎng)。軟件既然是一種產(chǎn)品(商品),就應(yīng)該有它客觀質(zhì)量的標(biāo)準(zhǔn)尺度,不能依賴少數(shù)人的主觀推理和臆測(cè)或做小范圍功能點(diǎn)的人工測(cè)試. 軟件質(zhì)量應(yīng)該量化!
如何丈量軟件的質(zhì)量?主要通過對(duì)代碼,測(cè)試代碼進(jìn)行自動(dòng)的分析,獲得一系列相應(yīng)的數(shù)據(jù)指標(biāo)來說明軟件的質(zhì)量。主要做兩個(gè)分析:
1.靜態(tài)分析Static Metrics Analysis
靜態(tài)分析通過分析代碼后獲得的基本數(shù)據(jù):
1) 文件總數(shù)
2) 代碼總行數(shù)
3) 對(duì)象類的總數(shù)
4) 方法的總數(shù)
5) 平均每個(gè)方法的代碼行數(shù)
6) 注釋的行數(shù)
7) 每個(gè)方法中可執(zhí)行語句的行數(shù)
8) 每個(gè)方法中符值語句的行數(shù)
9) 條件語句的行數(shù)
每個(gè)項(xiàng)目可以根據(jù)不同的需要定出需要符合的指標(biāo)。例如美國(guó)國(guó)土安全局的軟件項(xiàng)目規(guī)定每個(gè)方法的行數(shù)不可以超過62行,可執(zhí)行語句不超過50行,而符值語句不可以超過12行。
在此基礎(chǔ)上,還可以加入重復(fù)代碼分析( 防止開發(fā)人員簡(jiǎn)單的拷貝重復(fù)代碼,重復(fù)代碼會(huì)使軟件的可擴(kuò)展性大大降低),邏輯分析路徑分析等智能分析功能,進(jìn)一步檢測(cè)軟件的質(zhì)量。
2.覆蓋分析 (Coverage Analysis)
靜態(tài)分析的指標(biāo)能反映質(zhì)量的一個(gè)側(cè)面,而覆蓋分析則能展現(xiàn)軟件的性能,可維護(hù)性,可測(cè)試性,也是軟件質(zhì)量最直觀的體現(xiàn)。覆蓋分析主要是運(yùn)行各種單元測(cè)試,集成測(cè)試,并記錄測(cè)試所覆蓋的代碼的信息。
覆蓋分析采集的基本數(shù)據(jù):
1) 代碼行覆蓋率。即多少代碼行確實(shí)被測(cè)試所運(yùn)行和測(cè)試。
2) 方法覆蓋率。即多少方法確實(shí)被測(cè)試所運(yùn)行和測(cè)試。
3) 條件語句覆蓋率。即多少條件語句的分支是否被覆蓋。
同樣的每個(gè)項(xiàng)目可以根據(jù)需要定出項(xiàng)目合格的標(biāo)準(zhǔn)。例如軍方項(xiàng)目的條件語句/方法覆蓋率必須是100%的。
在此基礎(chǔ)上,還可以添加更加智能/復(fù)雜的邏輯路徑覆蓋分析。
通過上面兩個(gè)方面的分析產(chǎn)生的數(shù)據(jù)綜合反映軟件的質(zhì)量。有了這些數(shù)據(jù)我們就可以丈量軟件的質(zhì)量。而且我們可以隨時(shí)知道軟件開發(fā)的質(zhì)量并做出調(diào)整,而不是等到交付的時(shí)候才發(fā)現(xiàn)問題(管理學(xué)中的風(fēng)險(xiǎn)提前)。
對(duì)于軟件外包行業(yè),引入軟件測(cè)量概念和方法,除了提升企業(yè)本身的素質(zhì)和軟件質(zhì)量外,更應(yīng)該在提交委托方的產(chǎn)品的時(shí)候伴隨相應(yīng)的測(cè)試代碼和質(zhì)量測(cè)量數(shù)據(jù)。這樣做的好處是:
1) 提升用戶的滿意度。
2) 建立專業(yè)外包形象。
3) 和其他國(guó)家的外包服務(wù)拉開差距,形成質(zhì)量為先的外包品牌。
結(jié)束語: 有了量化的指標(biāo),除了能給軟件開發(fā)項(xiàng)目的甲乙雙方一個(gè)明確的軟件質(zhì)量合同外(不再單單是功能合同),更重要的是將軟件質(zhì)量保證制度化,進(jìn)而迫使軟件開發(fā)企業(yè)注重軟件質(zhì)量//流程管理的意識(shí),改變舊的依賴人工測(cè)試的概念,引入測(cè)試驅(qū)動(dòng)開發(fā),自動(dòng)單元測(cè)試,自動(dòng)集成測(cè)試,每日集成,小規(guī)模發(fā)布等優(yōu)秀的敏捷開發(fā)方法,切實(shí)提升軟件的質(zhì)量和開發(fā)效率。

