摘要:本文針對(duì)目前軟件質(zhì)量存在的問(wèn)題,通過(guò)對(duì)軟件質(zhì)量保證方法研究,從而提出具體的以軟件質(zhì)量為核心的軟件質(zhì)量保證方法。
關(guān)鍵詞:軟件質(zhì)量保證;軟件質(zhì)量;軟件質(zhì)量管理
中圖分類(lèi)號(hào):TP3文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1007-9599 (2012) 07-0000-02
一、引言
目前在許多軟件開(kāi)發(fā)過(guò)程中,軟件開(kāi)發(fā)方只注重實(shí)現(xiàn)軟件功能的正確性,用戶(hù)對(duì)質(zhì)量方面要求也往往不夠明確,軟件質(zhì)量成為隱含的需求,開(kāi)發(fā)方為了趕進(jìn)度,往往也忽略了軟件的質(zhì)量,直到后續(xù)交付用戶(hù)后中發(fā)現(xiàn)大量軟件質(zhì)量問(wèn)題。導(dǎo)致項(xiàng)目執(zhí)行周期遙遙無(wú)期,用戶(hù)不滿(mǎn)意,軟件開(kāi)發(fā)方也毀了聲譽(yù),追加了大量項(xiàng)目實(shí)施費(fèi)用。軟件規(guī)模越復(fù)雜,其質(zhì)量就越難保證,目前國(guó)內(nèi)和國(guó)外的軟件產(chǎn)品,最為明顯的也是致命的差距就在于產(chǎn)品質(zhì)量。
二、影響軟件質(zhì)量的因素
軟件質(zhì)量問(wèn)題主要來(lái)源于軟件的開(kāi)發(fā)過(guò)程,而影響開(kāi)發(fā)過(guò)程質(zhì)量的主要特性包括:開(kāi)發(fā)所采用的技術(shù)、開(kāi)發(fā)者個(gè)人的業(yè)務(wù)經(jīng)歷水平及開(kāi)發(fā)所使用的工具,常見(jiàn)影響軟件質(zhì)量的因素歸納總結(jié)有以下幾個(gè)方面。
(1)需求分析因素。對(duì)用戶(hù)的提出的需求溝通不到位,轉(zhuǎn)換為軟件需求規(guī)格說(shuō)明不完整;用戶(hù)需求變更管理不到位,用戶(hù)需求可能存在變更,而軟件開(kāi)發(fā)者沒(méi)有及時(shí)更改軟件或軟件更改引入新的問(wèn)題等。
(2)軟件設(shè)計(jì)方法因素。軟件開(kāi)發(fā)者往往是先編碼后寫(xiě)設(shè)計(jì)方案,或者按照自己的編程習(xí)慣開(kāi)發(fā)軟件,導(dǎo)致軟件不符合用戶(hù)需求,或未考慮用戶(hù)對(duì)特殊情況處理和錯(cuò)誤處理情況等。
(3)編碼過(guò)程因素。主要表現(xiàn)在軟件編碼不規(guī)范,軟件容錯(cuò)能力不夠等。
(4)內(nèi)部測(cè)試過(guò)程因素。如內(nèi)部測(cè)試未開(kāi)展或內(nèi)部測(cè)試不充分等。
(5)軟件文檔因素。如文檔描述存在二義性、文文之間描述不一致,文檔版本不一致等。
三、軟件質(zhì)量保證方法
(一)建立以軟件質(zhì)量為核心的質(zhì)量體系
建立樹(shù)立為軟件質(zhì)量為核心的軟件質(zhì)量管理體系,如依據(jù)軟件能力成熟度模型集成(CMMI)建立管理體系,明確在軟件開(kāi)發(fā)的各個(gè)階段必須控制的質(zhì)量指標(biāo)。軟件項(xiàng)目組嚴(yán)格按照質(zhì)量體系開(kāi)發(fā)軟件,質(zhì)量保證人員必須全程跟蹤監(jiān)督。軟件質(zhì)量體系度量包括以下方面。
(1)需求分析質(zhì)量度量。軟件需求分析是否充分、需求是否完整、需求定義是否準(zhǔn)確,是否存在需求理解不同的情況,軟件需求規(guī)格說(shuō)明文檔是否覆蓋軟件任務(wù)書(shū)或合同中所有要求。
(2)軟件設(shè)計(jì)質(zhì)量度量。在軟件設(shè)計(jì)過(guò)程,是否進(jìn)行了概要設(shè)計(jì)和詳細(xì)設(shè)計(jì),軟件設(shè)計(jì)是否滿(mǎn)足軟件需求,軟件設(shè)計(jì)文檔是否詳細(xì)等。
(3)測(cè)試結(jié)果質(zhì)量度量。內(nèi)部測(cè)試如單元測(cè)試、單元集成和測(cè)試、配置項(xiàng)測(cè)試、系統(tǒng)合格性測(cè)試是否都逐層開(kāi)展,發(fā)現(xiàn)的問(wèn)題是否都進(jìn)行了處理,測(cè)試是否依據(jù)了軟件需求文檔等。
(4)驗(yàn)收結(jié)果質(zhì)量度量。是否組織開(kāi)展軟件驗(yàn)收工作,對(duì)軟件完成的功能數(shù)量,各項(xiàng)性能指標(biāo)等是否進(jìn)行了評(píng)審,各項(xiàng)功能性能質(zhì)量是否滿(mǎn)足用戶(hù)需求等。
(二)選擇最合適的開(kāi)發(fā)方法
軟件開(kāi)發(fā)方在需求確定以后,應(yīng)根據(jù)軟件特性選擇最合適的開(kāi)發(fā)方法。目前軟件開(kāi)發(fā)方法主要有Parnas法、Jackson法、Yourdon法等,面向?qū)ο蠓椒?、原型化方法、可視化方法等。其中可視化方法適用于圖形類(lèi)應(yīng)用軟件開(kāi)發(fā);面向數(shù)據(jù)結(jié)構(gòu)的方法及原型化方法適合于中小型系統(tǒng)的開(kāi)發(fā)。優(yōu)先推薦使用Parnas法,該方法是1972年P(guān)arnas提出來(lái)的,基本思想是在設(shè)計(jì)時(shí)提前預(yù)測(cè)軟件可能存在的需求變更,通過(guò)對(duì)可能變化的信息集中在某些模塊內(nèi),使其與其他模塊無(wú)關(guān),提高了軟件的可維護(hù)性,避免了錯(cuò)誤的蔓延,也就提高了軟件的可靠性。
(三)采用軟件重用技術(shù)
軟件重用是指在開(kāi)發(fā)新軟件的過(guò)程中重復(fù)使用已有的軟件成分,該軟件成分可能是已存在的軟件,也可能是專(zhuān)門(mén)設(shè)計(jì)的可重用的軟件構(gòu)件。廣義的軟件重用還包括軟件的開(kāi)發(fā)思想方法、文檔、環(huán)境、數(shù)據(jù)等。最大限度地采用軟件重用技術(shù),不僅能縮短開(kāi)發(fā)周期,提高開(kāi)發(fā)效率,也能提高軟件的可維護(hù)性和可靠性。
(四)加強(qiáng)軟件容錯(cuò)設(shè)計(jì)
容錯(cuò)是指系統(tǒng)或軟件出現(xiàn)有限數(shù)目的硬件或軟件故障的情況下,系統(tǒng)仍具有連續(xù)正確執(zhí)行任務(wù)的固有能力。其主要目的是提供足夠的冗余信息和合適的算法程序,使系統(tǒng)在實(shí)際運(yùn)行時(shí)能夠及時(shí)發(fā)現(xiàn)程序設(shè)計(jì)錯(cuò)誤,采取補(bǔ)救措施,以提高軟件可靠性。
軟件容錯(cuò)設(shè)計(jì)有冗余設(shè)計(jì)與非冗余設(shè)計(jì)兩類(lèi)方法。冗余設(shè)計(jì)有軟件冗余、硬件冗余、時(shí)間冗余和信息冗余等。其中軟件冗余又有表決器、N版本和恢復(fù)塊等方法在軟件應(yīng)用較少,不作為本文論述的重點(diǎn)。非冗余設(shè)計(jì)有保護(hù)處理、異常處理、容差處理看門(mén)狗等技術(shù)等。
1.時(shí)間冗余容錯(cuò)技術(shù)
時(shí)間冗余容錯(cuò)方法是以犧牲軟件執(zhí)行效率來(lái)?yè)Q取軟件可靠性的一種手段,時(shí)間冗余容錯(cuò)包括:有限地降低系統(tǒng)的運(yùn)行速度以增加系統(tǒng)的可靠性;使用重復(fù)執(zhí)行指令或程序來(lái)檢測(cè)系統(tǒng)故障,使系統(tǒng)從故障恢復(fù)工作。
(1)冗余指令。對(duì)于80XX系列等16位單片機(jī)和自行設(shè)計(jì)的低集成度DSP系統(tǒng)使用匯編語(yǔ)言編程時(shí),在對(duì)程序流向起決定作用的指令和某些對(duì)系統(tǒng)工作狀態(tài)起重要作用的指令(如中斷操作、堆棧設(shè)置等)之前插入幾條NOP指令,可確保這些指令正確執(zhí)行。在硬件初始化、外部存儲(chǔ)器訪問(wèn)、A/D采集等插入NOP指令或延遲函數(shù),可確保硬件能夠有足夠的時(shí)間響應(yīng)指令。
(2)指令重復(fù)執(zhí)行。根據(jù)當(dāng)前系統(tǒng)的復(fù)雜程度,對(duì)于軟件中的重要操作指令(例如存儲(chǔ)區(qū)換頁(yè)操作或重新定義指針操作)時(shí),讓其重復(fù)執(zhí)行一定次數(shù),重要操作指令重復(fù)對(duì)系統(tǒng)的運(yùn)行時(shí)間增加甚微,但對(duì)整個(gè)系統(tǒng)的安全性和可靠性的作用重大。
(3)程序復(fù)核。由于外界干擾或者機(jī)器內(nèi)部的瞬間故障,有可能修改某些重要數(shù)據(jù),如果繼續(xù)使用這些數(shù)據(jù)可能會(huì)給系統(tǒng)帶來(lái)災(zāi)難性的后果。在程序的執(zhí)行中對(duì)重要數(shù)據(jù)進(jìn)行復(fù)核,檢查它們是否在指定的范圍內(nèi),如果是,繼續(xù)執(zhí)行,如果不是,作相應(yīng)的出錯(cuò)處理。
2.信息冗余技術(shù)
信息冗余是為了檢測(cè)和糾正信息在運(yùn)算或傳輸過(guò)程中的錯(cuò)誤而外加的一部分冗余信息碼,使原來(lái)不相關(guān)的數(shù)據(jù)變?yōu)橄嚓P(guān),并把這些冗余碼作為監(jiān)督碼與有關(guān)的信息一起傳遞。信息冗余包括:奇偶校驗(yàn)碼、校驗(yàn)和、海明碼、循環(huán)冗余校驗(yàn)碼(CRC校驗(yàn))等,信息冗余技術(shù)在通訊處理類(lèi)軟件開(kāi)發(fā)中使用較多。
3.軟件陷阱冗余技術(shù)
軟件陷阱冗余技術(shù)就是當(dāng)發(fā)現(xiàn)程序跑飛是,用引導(dǎo)指令強(qiáng)行引導(dǎo)程序指向復(fù)位入口地址,軟件在復(fù)位入口子程序中專(zhuān)門(mén)對(duì)程序出錯(cuò)進(jìn)行處理的程序,使程序恢復(fù)正常運(yùn)行。通常,根據(jù)跑飛程序落入陷阱區(qū)的位置不同,可選擇執(zhí)行空操作、轉(zhuǎn)到程序入口地址等形式,使程序恢復(fù)正常運(yùn)行。針對(duì)不同的存儲(chǔ)空間,軟件陷阱可以使用不同的手段來(lái)安排。軟件陷阱冗余技術(shù)在匯編語(yǔ)言編程中使用較多。
4.看門(mén)狗冗余容錯(cuò)技術(shù)
看門(mén)狗技術(shù)原理是軟件通過(guò)不斷監(jiān)視程序循環(huán)運(yùn)行時(shí)間,若發(fā)現(xiàn)時(shí)間超過(guò)已知的循環(huán)時(shí)間,則認(rèn)為系統(tǒng)陷入了死循環(huán),然后強(qiáng)迫程序返回到入口地址,在入口處安排一段出錯(cuò)處理程序,使系統(tǒng)運(yùn)行恢復(fù)正常。該方法特別適用與周期控制的軟件類(lèi)型。
5.保護(hù)處理技術(shù)
對(duì)數(shù)值處理累程序,如除法運(yùn)算子程序,應(yīng)檢查除數(shù)是否為O,如果除數(shù)為O,進(jìn)行保護(hù)處理;開(kāi)方運(yùn)算子程序,應(yīng)檢查被開(kāi)方數(shù)是否不小于O,如果被開(kāi)方數(shù)小于O,進(jìn)行保護(hù)處理;變量(指針、數(shù)組)被創(chuàng)建之后應(yīng)當(dāng)及時(shí)把它們初始化,以避免出錯(cuò)。
6.容差處理技術(shù)
選擇最適當(dāng)?shù)乃惴ǎ侠戆才胚\(yùn)算順序減少計(jì)算偏差,運(yùn)算順序的安排原則是:先進(jìn)行無(wú)偏差或偏差小的運(yùn)算,盡可能將會(huì)出偏差的運(yùn)算往后安排。對(duì)于采樣數(shù)據(jù)采取多次求平均值的方法進(jìn)行平滑處理,對(duì)于開(kāi)關(guān)量信號(hào)采取三選二,五選三等抗干擾處理。
7.高級(jí)語(yǔ)言容錯(cuò)處理技術(shù)
利用高級(jí)程序設(shè)計(jì)語(yǔ)言本身的容錯(cuò)能力,采取相應(yīng)的策略。在Visual Basic 6.0中的On Error語(yǔ)句,可以啟動(dòng)一個(gè)錯(cuò)誤處理程序并指定該子程序在一個(gè)過(guò)程中的位置;在Visual C++中,提供了處理各種異常的機(jī)制,如try、catch等。
(五)借助軟件開(kāi)發(fā)管理工具
軟件配置管理是軟件工程化管理的基礎(chǔ)性工作,配置管理工作包括:配置標(biāo)識(shí)、配置控制、過(guò)程配置狀態(tài)記實(shí)、配置審核、產(chǎn)品發(fā)布管理。使用配置管理工具,能夠更好的監(jiān)控到軟件開(kāi)發(fā)過(guò)程各階段資源的狀態(tài),有效控制軟件資源的變更,從而真實(shí)有效地控制軟件開(kāi)發(fā)過(guò)程。
(六)嚴(yán)格開(kāi)展軟件內(nèi)部測(cè)試
軟件開(kāi)發(fā)完成之后,通過(guò)加強(qiáng)測(cè)試來(lái)發(fā)現(xiàn)軟件錯(cuò)誤,評(píng)估軟件是否滿(mǎn)足用戶(hù)需求。要在可能的情況下,進(jìn)行盡可能完備的測(cè)試。
測(cè)試的方法多種多樣,靜態(tài)測(cè)試包括:代碼走查、代碼審查、靜態(tài)分析等。除此之外,還要對(duì)軟件進(jìn)行動(dòng)態(tài)測(cè)試,讓軟件運(yùn)行在真實(shí)的或模擬的環(huán)境中,檢驗(yàn)程序的動(dòng)態(tài)行為和運(yùn)行結(jié)果的正確性。動(dòng)態(tài)測(cè)試必須設(shè)計(jì)測(cè)試用例,搭建測(cè)試環(huán)境,配備檢測(cè)工具等。
四、結(jié)束語(yǔ)
提高軟件質(zhì)量的方法有多種途徑,軟件開(kāi)發(fā)方應(yīng)根據(jù)具有軟件特點(diǎn)采取不同的質(zhì)量方法,選擇最合理的開(kāi)發(fā)方法,采用最可靠、最成熟的技術(shù)和,加強(qiáng)軟件內(nèi)部測(cè)試和開(kāi)發(fā)過(guò)程的質(zhì)量管理工作,才能有效保證軟件最終質(zhì)量。希望本文對(duì)從事軟件質(zhì)量工作研究的人員提供一定的幫助。
參考文獻(xiàn):
[1]John D.Musa.軟件可靠性工程[M].韓柯.北京:機(jī)械工業(yè)出版社,2003
[2]何國(guó)偉.軟件可靠性[M].北京:國(guó)防工業(yè)出版社,1998:218-380