官术网_书友最值得收藏!

2.5 軟件錯(cuò)誤、缺陷、故障及失效

2.5.1 軟件錯(cuò)誤、缺陷及故障

2.5.1.1 軟件錯(cuò)誤

軟件錯(cuò)誤(Software Error)是指軟件生命周期過程中不希望或不可接受的人為差錯(cuò),是一種內(nèi)部屬性,相對于軟件本身而言,是一種外部行為。軟件錯(cuò)誤可能導(dǎo)致軟件缺陷,同軟件失效具有直接的因果關(guān)系。常用初始錯(cuò)誤數(shù)、剩余錯(cuò)誤數(shù)、千(百)行代碼錯(cuò)誤數(shù)等指標(biāo)進(jìn)行度量。

初始錯(cuò)誤數(shù)是指錯(cuò)誤排除之前,軟件中錯(cuò)誤數(shù)的估計(jì)值;剩余錯(cuò)誤數(shù)是指經(jīng)過測試及糾錯(cuò)之后,仍然殘留在軟件中錯(cuò)誤數(shù)的估計(jì)值;千(百)行代碼錯(cuò)誤數(shù)是每千(百)行有效代碼中所包含的錯(cuò)誤數(shù),既可以用來度量初始錯(cuò)誤數(shù),也可以用來度量殘留錯(cuò)誤數(shù)。

錯(cuò)誤計(jì)數(shù)依據(jù)導(dǎo)致軟件失效的因果關(guān)系確定,而非簡單的錯(cuò)誤個(gè)數(shù)累加。假若軟件失效是由一條錯(cuò)誤語句所致,那么該語句對應(yīng)于一個(gè)錯(cuò)誤;如果軟件失效是若干條錯(cuò)誤語句共同作用的結(jié)果,則這若干條錯(cuò)誤語句對應(yīng)于一個(gè)錯(cuò)誤;如果軟件失效是因?yàn)樾枨笠?guī)格錯(cuò)誤所致,則該錯(cuò)誤所涉及的語句數(shù)可能不止一條,且不一定順序相連,可能涉及軟件架構(gòu)及相關(guān)文檔。

錯(cuò)誤排除之前,可能導(dǎo)致一次或多次軟件失效,相同失效可能因?yàn)椴煌e(cuò)誤被觸發(fā)所致,必須進(jìn)行具體分析,不能一概而論,更不能以偏概全。軟件運(yùn)行過程中,以失效形式反映出來的軟件錯(cuò)誤,可能只是全部錯(cuò)誤的一部分,另一部分隱含錯(cuò)誤同樣具有導(dǎo)致軟件失效的可能,僅僅只是未被觸發(fā)而已。

文檔錯(cuò)誤尤其是需求規(guī)格、設(shè)計(jì)文檔錯(cuò)誤是軟件錯(cuò)誤的根源,用戶手冊等應(yīng)用文檔錯(cuò)誤可能導(dǎo)致用戶接受錯(cuò)誤的操作信息而導(dǎo)致操作失誤,是軟件錯(cuò)誤的重要組成部分。一般地,操作失誤不作為質(zhì)量與可靠性研究范疇。一些勘誤性錯(cuò)誤可能并不直接對軟件造成影響,如果將這類文檔錯(cuò)誤一并計(jì)入軟件錯(cuò)誤,將對軟件質(zhì)量評價(jià)的客觀性、真實(shí)性帶來偏差。文檔錯(cuò)誤是否計(jì)入軟件錯(cuò)誤或者是否以單獨(dú)的形式加以標(biāo)記和統(tǒng)計(jì),需要通過甄別后區(qū)別對待。

軟件生命周期過程中,可以使用直接查錯(cuò)法、間接查錯(cuò)法以及這兩種方法的組合,檢出錯(cuò)誤。桌面檢查、需求評審、設(shè)計(jì)評審、代碼審查、編譯診斷等能夠直接發(fā)現(xiàn)錯(cuò)誤,通過糾正評審、編譯等過程中所發(fā)現(xiàn)的錯(cuò)誤,能有效規(guī)避錯(cuò)誤向下傳遞。間接查錯(cuò)法是軟件調(diào)試、測試及運(yùn)行過程中,有目的、有針對性地觸發(fā)錯(cuò)誤,判斷和檢出軟件錯(cuò)誤的有效方法。

1.錯(cuò)誤分類

基于軟件定義,軟硬件之間的界限正變得越來越模糊,尤其是嵌入式系統(tǒng)構(gòu)建,越來越多地采用軟件硬化和硬件軟化設(shè)計(jì)模式。例如,在特定情況下,只讀存儲器中的微程序、通用陣列邏輯器件中燒錄的方程及時(shí)序,其錯(cuò)誤可能引起硬件指令錯(cuò)誤執(zhí)行,故障表象為硬件特征或運(yùn)行環(huán)境特征。微程序錯(cuò)誤通常是在程序設(shè)計(jì)過程中引入的,似乎應(yīng)該歸類為軟件錯(cuò)誤,但它引起的卻是硬件指令的錯(cuò)誤執(zhí)行,是否應(yīng)將其劃歸到硬件錯(cuò)誤的范疇呢?都是亟待研究解決的問題。

1)根據(jù)錯(cuò)誤征兆分類

當(dāng)將軟件錯(cuò)誤分類與其輸入空間進(jìn)行關(guān)聯(lián)考慮時(shí),可以根據(jù)軟件錯(cuò)誤直接表現(xiàn)出來的征兆進(jìn)行分類。根據(jù)錯(cuò)誤征兆的軟件錯(cuò)誤分類如表2-1所示。

表2-1 根據(jù)錯(cuò)誤征兆的軟件錯(cuò)誤分類

對于該分類方法,某種類型錯(cuò)誤引起的實(shí)際后果依賴于應(yīng)用要求,與特定應(yīng)用場景密切相關(guān)。第Ⅰ種類型錯(cuò)誤即因系統(tǒng)本身辨識出不能處理正常的但超出預(yù)先規(guī)定范圍的輸入,拒絕該輸入,不像第Ⅱ~Ⅴ種類型錯(cuò)誤那么嚴(yán)重。在一個(gè)預(yù)先規(guī)定的時(shí)間范圍內(nèi),系統(tǒng)必須對任一輸入做出反應(yīng),尤其是對于實(shí)時(shí)嵌入式系統(tǒng),對某個(gè)輸入的拒絕可能導(dǎo)致災(zāi)難性的后果。

2)根據(jù)錯(cuò)誤誘因分類

對于一個(gè)應(yīng)用系統(tǒng),尤其是實(shí)時(shí)嵌入式系統(tǒng),錯(cuò)誤誘因不外乎硬件或軟件設(shè)計(jì)錯(cuò)誤、環(huán)境改變等引起硬件劣化、輸入錯(cuò)誤等。設(shè)計(jì)錯(cuò)誤、硬件劣化、輸入錯(cuò)誤構(gòu)成系統(tǒng)的錯(cuò)誤空間。該分類方法是以錯(cuò)誤起因?yàn)榛c(diǎn),而非錯(cuò)誤產(chǎn)生的影響,其先決條件是構(gòu)建一個(gè)完全的錯(cuò)誤診斷框架集。當(dāng)一個(gè)設(shè)計(jì)錯(cuò)誤發(fā)生時(shí),即便所有輸入和操作均正確無誤,但也不可能產(chǎn)生期望的結(jié)果,且不正確的操作往往可能導(dǎo)致輸入錯(cuò)誤。而由于硬件劣化或環(huán)境條件改變等因素導(dǎo)致錯(cuò)誤時(shí),系統(tǒng)狀態(tài)往往是確定且可以復(fù)現(xiàn)的。表2-2給出了基于誘因的軟件錯(cuò)誤發(fā)生情況及特征。

表2-2 基于誘因的軟件錯(cuò)誤發(fā)生情況及特征

3)根據(jù)錯(cuò)誤發(fā)生時(shí)的持續(xù)時(shí)間分類

對于硬件及輸入錯(cuò)誤,可以根據(jù)錯(cuò)誤發(fā)生時(shí)的持續(xù)時(shí)間進(jìn)行分類。如果一個(gè)錯(cuò)誤從某一特定時(shí)間開始,反復(fù)發(fā)生且能夠在特定的條件下復(fù)現(xiàn),稱這類錯(cuò)誤為永久錯(cuò)誤。當(dāng)某個(gè)錯(cuò)誤發(fā)生時(shí),系統(tǒng)特性產(chǎn)生短暫變化之后即恢復(fù)正常狀態(tài),則稱這類錯(cuò)誤為瞬時(shí)錯(cuò)誤,這類錯(cuò)誤持續(xù)時(shí)間短暫,引發(fā)的失效難以復(fù)現(xiàn)和定位,診斷和排除困難,可能導(dǎo)致嚴(yán)重后果。對于硬件中的瞬時(shí)錯(cuò)誤,如某硬件瞬時(shí)錯(cuò)誤將某位二進(jìn)制數(shù)位取反,導(dǎo)致一個(gè)錯(cuò)誤數(shù)據(jù)存儲或一條錯(cuò)誤指令執(zhí)行,由此引起的錯(cuò)誤往往難以同軟件錯(cuò)誤區(qū)分開來。

4)根據(jù)錯(cuò)誤的表現(xiàn)形式及可觀察性分類

根據(jù)錯(cuò)誤的表現(xiàn)形式及可觀察性,可將軟件錯(cuò)誤分為外部錯(cuò)誤和內(nèi)部錯(cuò)誤。一個(gè)錯(cuò)誤可能無法被直接觀察到,除非只有諸如一個(gè)內(nèi)部錯(cuò)誤的影響傳播到輸出時(shí),該錯(cuò)誤才能在外部被觀察到。如果系統(tǒng)采用冗余設(shè)計(jì),并非每個(gè)內(nèi)部錯(cuò)誤都必然導(dǎo)致一個(gè)外部錯(cuò)誤。內(nèi)部錯(cuò)誤和外部錯(cuò)誤的劃分,在很大程度上依賴于查錯(cuò)界面的選擇。例如,如果一個(gè)查錯(cuò)界面具有分層結(jié)構(gòu),則同一個(gè)錯(cuò)誤既可以被看成內(nèi)部錯(cuò)誤,也可以被看成外部錯(cuò)誤。

5)根據(jù)應(yīng)用結(jié)果分類

軟件設(shè)計(jì)過程中,根據(jù)應(yīng)用結(jié)果將軟件功能劃分為主要功能、基本功能、次要功能、輔助功能并加以區(qū)別對待,有利于突出重點(diǎn)。次要或輔助功能失效可能不會影響系統(tǒng)使命任務(wù)的遂行,如果一個(gè)錯(cuò)誤只影響軟件系統(tǒng)的次要或輔助功能,該錯(cuò)誤就是非關(guān)鍵性的。如果將軟件錯(cuò)誤劃分為關(guān)鍵性錯(cuò)誤和非關(guān)鍵性錯(cuò)誤,同樣有利于關(guān)鍵問題的解決,這正是軟件測試的出發(fā)點(diǎn)。

6)根據(jù)軟件生命周期過程分類

基于軟件生命周期過程,將軟件錯(cuò)誤劃分為分配需求錯(cuò)誤、需求錯(cuò)誤、設(shè)計(jì)錯(cuò)誤、實(shí)現(xiàn)錯(cuò)誤、測試錯(cuò)誤、驗(yàn)收與交付錯(cuò)誤、運(yùn)行與維護(hù)錯(cuò)誤等類型。軟件生命周期過程中,如果能夠?qū)γ總€(gè)階段的錯(cuò)誤形態(tài)進(jìn)行定義并進(jìn)行充分的測試驗(yàn)證,對系統(tǒng)質(zhì)量保證及改進(jìn)事半功倍。這正是軟件測試與開發(fā)過程分離、注重驗(yàn)收測試、忽視測試左移與回看等廣受詬病的重要原因。

7)根據(jù)軟件構(gòu)成成分分類

根據(jù)軟件構(gòu)成成分,可將軟件錯(cuò)誤分為程序錯(cuò)誤、數(shù)據(jù)錯(cuò)誤和文檔錯(cuò)誤3類。

8)根據(jù)錯(cuò)誤嚴(yán)重程度分類

所有錯(cuò)誤均可能導(dǎo)致軟件失效,但其嚴(yán)重程度則具有顯著差別。依據(jù)相關(guān)標(biāo)準(zhǔn)規(guī)范,基于系統(tǒng)服務(wù)功能喪失、人員傷害、設(shè)備損壞、環(huán)境破壞的程度,將軟件錯(cuò)誤劃分為致命錯(cuò)誤、嚴(yán)重錯(cuò)誤、一般錯(cuò)誤等不同等級或類型?;阱e(cuò)誤嚴(yán)重程度的軟件錯(cuò)誤分類粒度,不同標(biāo)準(zhǔn)規(guī)范具有一定差異,但分類方法大同小異。

2.軟件生命周期過程錯(cuò)誤表征

1)需求識別、需求獲取與需求分析錯(cuò)誤

對問題進(jìn)行準(zhǔn)確定義、抽象處理及嚴(yán)格的數(shù)學(xué)描述,是我們面臨的重大挑戰(zhàn)。何況,軟件錯(cuò)誤征兆、錯(cuò)誤誘因、失效機(jī)理異常復(fù)雜,難以預(yù)先定義統(tǒng)一的標(biāo)準(zhǔn)。而基于軟件狀態(tài)與預(yù)先定義標(biāo)準(zhǔn)的比較,辨識軟件狀態(tài)并對其給定狀態(tài)進(jìn)行評價(jià),無異于無源之水。

需求識別、需求獲取及需求分析,是通過對實(shí)際問題的歸納和抽象,剔除不涉及問題本質(zhì)的次要因素,抽取與具體問題相關(guān)的要素,對問題進(jìn)行定義和抽象描述,構(gòu)建需求規(guī)格。在此過程中,可能遺漏、曲解、錯(cuò)誤定義用戶需求,甚至?xí)谏w問題的本質(zhì)。統(tǒng)計(jì)表明,軟件錯(cuò)誤大都是由于對系統(tǒng)需求識別不充分、描述不準(zhǔn)確以及對問題理解偏差所致,并非軟件設(shè)計(jì)所致。

2)軟件設(shè)計(jì)錯(cuò)誤

(1)設(shè)計(jì)文檔錯(cuò)誤。

(2)架構(gòu)笨重。

(3)程序說明的錯(cuò)誤中斷。

(4)不完全的邏輯。

(5)模塊之間解耦不夠。

(6)安全性設(shè)計(jì)不足。

(7)特殊情況被忽略。

(8)缺乏對錯(cuò)誤處理能力的考慮。

(9)對時(shí)間、資源等疏忽。

3)編碼實(shí)現(xiàn)錯(cuò)誤

(1)不符合編碼規(guī)范。

(2)語法錯(cuò)誤。

(3)初始化錯(cuò)誤。

(4)參數(shù)混淆。

(5)循環(huán)計(jì)數(shù)錯(cuò)誤。

(6)對判定結(jié)果的不正確處理。

(7)變量重復(fù)或未定義便加以使用。

(8)變量名書寫錯(cuò)誤。

(9)數(shù)組類型和維數(shù)說明不正確。

盡管開發(fā)技術(shù)對軟件設(shè)計(jì)與實(shí)現(xiàn)錯(cuò)誤具有直接影響,而更加突出的問題是團(tuán)隊(duì)笨重,難以實(shí)現(xiàn)有效的扁平化,導(dǎo)致溝通困難。與此同時(shí),與軟件開發(fā)、編碼實(shí)現(xiàn)及軟件測試等人員的素質(zhì)和能力相關(guān),尤其是對復(fù)雜問題處理更是如此。統(tǒng)計(jì)表明,軟件設(shè)計(jì)與編碼實(shí)現(xiàn)階段所檢出的邏輯錯(cuò)誤數(shù)與系統(tǒng)分析、系統(tǒng)設(shè)計(jì)階段的時(shí)間成正比。

4)軟件運(yùn)行錯(cuò)誤

通常,當(dāng)討論軟件運(yùn)行錯(cuò)誤時(shí),總是假定一個(gè)正確的軟件,加上正確的輸入,得到正確的結(jié)果。這不僅是應(yīng)該的,而且也是可能的,否則,我們將對所交付的軟件失去信心。但受制于軟件測試技術(shù)、能力、成本等因素,完備軟件測試還只是一個(gè)夢想。因此,在軟件系統(tǒng)運(yùn)行過程中,仍然可能發(fā)現(xiàn)錯(cuò)誤,如不正確的初始化、數(shù)組越界、數(shù)據(jù)溢出、內(nèi)存泄漏、防誤操作設(shè)計(jì)、硬件缺陷等導(dǎo)致的軟件失效?;谑褂觅|(zhì)量視角,運(yùn)行階段的錯(cuò)誤表征,更多的是與運(yùn)行環(huán)境、使用流程、功能完備、系統(tǒng)效能、操作使用、人機(jī)交互等與系統(tǒng)能力、用戶體驗(yàn)相關(guān)的問題。而這些問題的定義往往超越了錯(cuò)誤的范疇?;谌毕蒡?qū)動的測試與基于能力驅(qū)動的測試,存在著本質(zhì)的差別。這是軟件測試發(fā)展的重大跨越。

5)瞬時(shí)硬件故障

瞬時(shí)硬件故障可能產(chǎn)生不正確的數(shù)據(jù)或控制流,具有與軟件錯(cuò)誤相似的征兆,可能因此被裁定為軟件錯(cuò)誤。瞬時(shí)硬件故障是系統(tǒng)故障的誘因,特別是當(dāng)通過診斷軟件檢查硬件且顯示硬件功能正常時(shí),更是如此。例如,某嵌入式系統(tǒng)顯示界面同時(shí)進(jìn)行背景填充和漢字輸出時(shí),某些漢字出現(xiàn)多余筆畫,直接表象是軟件錯(cuò)誤所致,而實(shí)際上是因?yàn)镈RAM芯片TC5118160BJ-60的瞬時(shí)故障,使得進(jìn)行OpenGL作圖時(shí),16MB DRAM作為深度緩存(Z Buffer)與紋理映射存儲器,用于緩存用戶數(shù)據(jù)、存放字庫,導(dǎo)致該瞬時(shí)故障發(fā)生。

瞬時(shí)硬件故障大多是由于間歇性干擾、硬件漸變等原因所致,發(fā)生時(shí)間非常短暫,定位及排除困難,對于不具備硬件查錯(cuò)功能的系統(tǒng),瞬時(shí)硬件故障可能引起更多問題,甚至可能演變?yōu)橄到y(tǒng)故障的主要誘因。工程上,通過老化試驗(yàn)?zāi)軌蚬烙?jì)得到瞬時(shí)硬件故障的發(fā)生概率。Ball和Hardie對這類故障進(jìn)行深入研究后指出:對于瞬時(shí)硬件故障,控制部件的反應(yīng)比算術(shù)部件更加敏感;在一條指令執(zhí)行期間,對于出現(xiàn)在控制部件中的故障,被立即查出的概率較算術(shù)部件小一個(gè)數(shù)量級;瞬時(shí)硬件故障僅僅只有在其持續(xù)時(shí)間大于一個(gè)周期時(shí),才是至關(guān)重要的。

3.典型軟件錯(cuò)誤

1)需求錯(cuò)誤或變化

(1)要求全新的功能(包括要求新的硬件)或增加新的功能。

(2)對硬件環(huán)境及外設(shè)的要求。

(3)對處理器的要求。

(4)對輸入/輸出及接口的要求。

(5)對內(nèi)存、存儲資源及容量的要求。

(6)對操作系統(tǒng)功能的特殊要求。

(7)對數(shù)據(jù)庫管理及完整性的要求。

(8)對安全性的要求。

2)文檔錯(cuò)誤

(1)程序限制。

(2)操作過程。

(3)流程圖或問題分析圖(Problem Analysis Diagram,PAD)與編碼之間的區(qū)別。

(4)錯(cuò)誤信息。

(5)程序應(yīng)有功能說明。

(6)輸出形式的要求。

(7)文檔的完整性及正確性。

3)邏輯錯(cuò)誤

(1)問題抽象錯(cuò)誤。

(2)不正確或無效邏輯以及簡單邏輯復(fù)雜化和錯(cuò)誤的邏輯分支。

(3)不完全的處理。

(4)死循環(huán)。

(5)邏輯或條件不完全的測試。

(6)對上、下限的判斷錯(cuò)誤。

(7)下標(biāo)未經(jīng)校驗(yàn)。

(8)特征值或特殊數(shù)據(jù)未經(jīng)測試。

(9)重復(fù)步長的不正確判斷。

4)數(shù)據(jù)處理錯(cuò)誤

(1)向故障存儲介質(zhì)或接口讀/寫數(shù)據(jù)。

(2)數(shù)據(jù)丟失、無法存儲或傳輸。

(3)數(shù)據(jù)、下標(biāo)、特征值未加設(shè)置,或不正確設(shè)置,或不正確初始化,或錯(cuò)誤更改。

(4)額外項(xiàng)(表、數(shù)組)的產(chǎn)生。

(5)二進(jìn)位信息處理錯(cuò)誤。

(6)錯(cuò)誤變址。

(7)數(shù)組類型轉(zhuǎn)換錯(cuò)誤。

(8)內(nèi)部變量定義錯(cuò)誤、設(shè)置或使用。

(9)對不存在的記錄進(jìn)行數(shù)據(jù)查找。

(10)越限。

(11)數(shù)據(jù)鏈接錯(cuò)誤。

(12)溢出或?qū)σ绯龅腻e(cuò)誤處理。

(13)讀出錯(cuò)誤。

(14)錯(cuò)誤分類。

(15)錯(cuò)誤覆蓋。

5)操作覆蓋錯(cuò)誤

(1)測試執(zhí)行錯(cuò)誤。

(2)使用錯(cuò)誤的主結(jié)構(gòu)。

(3)數(shù)據(jù)準(zhǔn)備錯(cuò)誤。

6)在要求滿足方面的問題

(1)要求的能力被忽略或?qū)ο鄳?yīng)要求考慮不周。

(2)未達(dá)到所要求的功能。

(3)超過規(guī)定的運(yùn)行時(shí)間。

(4)規(guī)定的時(shí)間內(nèi)不釋放資源。

7)計(jì)算錯(cuò)誤

(1)使用不正確的表達(dá)式與習(xí)慣表示法。

(2)數(shù)學(xué)模型錯(cuò)誤。

(3)錯(cuò)誤或不精確的運(yùn)算結(jié)果。

(4)算法選擇問題。

(5)非期望的運(yùn)算結(jié)果。

(6)下標(biāo)計(jì)算錯(cuò)誤。

(7)混合運(yùn)算次序錯(cuò)誤。

(8)向量運(yùn)算錯(cuò)誤。

(9)符號習(xí)慣表示法錯(cuò)誤運(yùn)用。

8)用戶接口錯(cuò)誤

(1)通信協(xié)議不一致或不協(xié)調(diào)。

(2)對輸入數(shù)據(jù)的不正確解釋。

(3)拒絕接收或無法使用有效的輸入數(shù)據(jù)。

(4)本來已被拒絕的輸入數(shù)據(jù)又被程序所用。

(5)不使用讀出的輸入數(shù)據(jù)。

(6)接收并處理非法輸入數(shù)據(jù)。

(7)對合法輸入數(shù)據(jù)的不正確處理。

(8)接口設(shè)計(jì)不完善。

(9)不適當(dāng)?shù)闹袛嗯c再啟動。

9)程序接口錯(cuò)誤

(1)要求錯(cuò)誤的參數(shù)。

(2)無法使用可用參數(shù)。

(3)調(diào)用次序紊亂。

(4)初始化錯(cuò)誤。

(5)程序之間通過錯(cuò)誤的數(shù)據(jù)區(qū)進(jìn)行通信。

(6)程序不兼容。

10)程序/系統(tǒng)軟件接口錯(cuò)誤

(1)操作系統(tǒng)接口錯(cuò)誤。

(2)程序?qū)ο到y(tǒng)支持軟件的不正確使用。

(3)操作系統(tǒng)本身的問題限制程序功能的發(fā)揮。

11)輸入/輸出錯(cuò)誤

(1)輸出與設(shè)計(jì)要求不一致。

(2)輸出信息丟失或丟失數(shù)據(jù)項(xiàng);輸出形式不正確;重復(fù)輸出;輸出域大小不適當(dāng)。

(3)設(shè)計(jì)中未定義必要的輸出形式。

(4)排錯(cuò)時(shí)的輸出問題(與設(shè)計(jì)文檔有關(guān))。

(5)打印控制錯(cuò)誤。

(6)行/頁計(jì)數(shù)錯(cuò)誤。

(7)應(yīng)輸出的出錯(cuò)信息被刪除。

(8)標(biāo)題輸出問題。

2.5.1.2 軟件缺陷

軟件缺陷(Software Defect)是因人為差錯(cuò)或其他客觀原因使得軟件隱含導(dǎo)致其在運(yùn)行過程中出現(xiàn)不希望或不可接受偏差的需求定義、軟件設(shè)計(jì)、編碼實(shí)現(xiàn)等錯(cuò)誤。軟件缺陷和錯(cuò)誤有著相近的含義。當(dāng)軟件運(yùn)行于某一特定環(huán)境時(shí)出現(xiàn)故障,稱缺陷被激活。軟件缺陷存在于軟件內(nèi)部,是一種靜態(tài)形式。

軟件生命周期過程中,軟件開發(fā)組織及測評機(jī)構(gòu)應(yīng)建立軟件缺陷庫,將其作為重要資產(chǎn)進(jìn)行跟蹤管理。一般地,軟件缺陷管理流程如圖2-14所示。

圖2-14 軟件缺陷管理流程

1.軟件缺陷及行為

軟件缺陷是軟件測試關(guān)注的焦點(diǎn)。不僅要關(guān)注程序、文檔、數(shù)據(jù)等缺陷,還要面向應(yīng)用系統(tǒng),關(guān)注軟件修改、升級維護(hù)引入及僵尸代碼喚醒、開源代碼應(yīng)用、操作使用等缺陷。軟件缺陷的內(nèi)涵及演變?nèi)鐖D2-15所示。

圖2-15 軟件缺陷的內(nèi)涵及演變

2.軟件缺陷分類

鑒于軟件缺陷同錯(cuò)誤的相關(guān)性和相似性,可以按錯(cuò)誤分類方法對軟件缺陷進(jìn)行分類。面向軟件缺陷的不同表現(xiàn)形式,基于總體視角,將軟件缺陷分為語法缺陷和語義缺陷兩類。語法缺陷是指軟件不符合程序設(shè)計(jì)語言的語法要求以及應(yīng)遵循的標(biāo)準(zhǔn)、規(guī)則和約定,語義缺陷則是指軟件未正確地表達(dá)應(yīng)表達(dá)的含義,包括初始化缺陷、接口缺陷等形式?;谲浖煞郑梢詫④浖毕輨澐譃槌绦蛉毕荨?shù)據(jù)缺陷、文檔缺陷三種類型?;谲浖y試視角,給出如表2-3所示的軟件缺陷的工程化分類,同時(shí)對不同缺陷類型的表象進(jìn)行描述。

表2-3 軟件缺陷的工程化分類

同軟件錯(cuò)誤一樣,基于缺陷的嚴(yán)重等級,可以將軟件缺陷分為致命缺陷、嚴(yán)重缺陷、一般缺陷三種類型。基于嚴(yán)重等級的軟件缺陷分類如表2-4所示。

表2-4 基于嚴(yán)重等級的軟件缺陷分類

2.5.1.3 軟件故障

軟件故障(Software Fault)是指在規(guī)定的條件下,軟件系統(tǒng)運(yùn)行過程中,出現(xiàn)可感知的不正常、不正確或不按規(guī)范執(zhí)行的狀態(tài)。軟件故障僅與設(shè)計(jì)和編碼實(shí)現(xiàn)有關(guān)。在數(shù)據(jù)結(jié)構(gòu)或軟件輸出中的表現(xiàn)稱為軟件差錯(cuò)。這里,可通過如下示例,展示軟件的故障及其形態(tài)。

基于故障持續(xù)時(shí)間,軟件故障可分為永久性故障和瞬時(shí)故障;基于運(yùn)算特性,軟件故障通常由計(jì)算錯(cuò)誤、邏輯錯(cuò)誤、數(shù)據(jù)處理錯(cuò)誤、接口錯(cuò)誤、數(shù)據(jù)定義錯(cuò)誤、數(shù)據(jù)庫錯(cuò)誤、輸入/輸出錯(cuò)誤以及文件資料錯(cuò)誤等導(dǎo)致,可將軟件故障對應(yīng)地劃分為這八類。

主站蜘蛛池模板: 海安县| 基隆市| 琼中| 礼泉县| 于都县| 巴青县| 淮安市| 沈丘县| 文昌市| 新巴尔虎左旗| 紫阳县| 万年县| 筠连县| 肃南| 永年县| 微博| 手机| 湘乡市| 平邑县| 杨浦区| 永嘉县| 富裕县| 博湖县| 楚雄市| 孝昌县| 襄城县| 赤壁市| 富锦市| 维西| 康保县| 疏附县| 常德市| 六盘水市| 德江县| 营山县| 资阳市| 青岛市| 和硕县| 柘荣县| 绿春县| 和龙市|