何睿,張力生
(重慶郵電大學(xué)軟件工程學(xué)院,重慶 400065)
隨著科技、經(jīng)濟(jì)的高速發(fā)展,我們?cè)缫堰M(jìn)入大數(shù)據(jù)時(shí)代,軟件已是人們生活不可或缺的技術(shù)?,F(xiàn)在,人們的需求相較于以往更加豐富而多樣,使得軟件開(kāi)發(fā)的規(guī)模更加龐大而復(fù)雜,以開(kāi)發(fā)出滿足需求的軟件。軟件質(zhì)量保證[1]是評(píng)判軟件開(kāi)發(fā)的重要標(biāo)準(zhǔn),與客戶滿意度直接相關(guān),決定軟件項(xiàng)目是否成功[2]。軟件質(zhì)量保證的主要方式是排除軟件缺陷。
IEEE 729-1983對(duì)軟件缺陷有一個(gè)標(biāo)準(zhǔn)的定義:從產(chǎn)品內(nèi)部看,缺陷是軟件產(chǎn)品開(kāi)發(fā)或維護(hù)過(guò)程中存在的錯(cuò)誤等各種問(wèn)題;從產(chǎn)品外部看,缺陷是系統(tǒng)所需要實(shí)現(xiàn)的某種功能的失效或違背。錯(cuò)誤是人為錯(cuò)誤,指軟件開(kāi)發(fā)人員在開(kāi)發(fā)軟件的過(guò)程中無(wú)意間犯下的技術(shù)錯(cuò)誤,失效是軟件運(yùn)行時(shí)不能完成規(guī)定功能[3]。正是錯(cuò)誤導(dǎo)致軟件工作產(chǎn)品的失效。
從廣義來(lái)說(shuō),軟件的本質(zhì)是軟件開(kāi)發(fā)過(guò)程的所有結(jié)果,即文檔、程序、數(shù)據(jù);從狹義的軟件運(yùn)行的角度而言,軟件是可以在圖靈機(jī)等計(jì)算模型上可以運(yùn)行的計(jì)算機(jī)語(yǔ)言(程序),是計(jì)算機(jī)模型可運(yùn)行的操作序列。按照?qǐng)D靈機(jī)理論,每一個(gè)操作序列對(duì)應(yīng)著圖靈機(jī)的一個(gè)格局。當(dāng)圖靈機(jī)的一個(gè)格局出錯(cuò)時(shí),軟件的運(yùn)行就無(wú)法得到正確的輸出結(jié)果,則沒(méi)有達(dá)到用戶對(duì)軟件系統(tǒng)的期望,表現(xiàn)為軟件缺陷。
本文首先將軟件抽象為一棵函數(shù)樹(shù),并討論函數(shù)樹(shù)的葉子結(jié)點(diǎn)、操作序列,以及操作序列對(duì)應(yīng)圖靈機(jī)格局,建立了軟件缺陷的傳播概率模型,通過(guò)穩(wěn)定性理論求解出系統(tǒng)的平衡點(diǎn),并分析了平衡點(diǎn)的局部穩(wěn)定性和全局穩(wěn)定性。
結(jié)合軟件開(kāi)發(fā)方法中抽象與分解的思想,軟件開(kāi)發(fā)過(guò)程是對(duì)軟件不斷細(xì)化的過(guò)程。每一次的細(xì)化抽象為一個(gè)函數(shù),函數(shù)之間的關(guān)系為細(xì)化的邏輯關(guān)系。函數(shù)為頂點(diǎn),函數(shù)與函數(shù)之間的關(guān)聯(lián)為邊,構(gòu)建了一棵描述軟件本質(zhì)的函數(shù)樹(shù)。根據(jù)軟件的生命周期理論,將軟件的生命周期分為需求、分析、設(shè)計(jì)、實(shí)現(xiàn)、測(cè)試、維護(hù)6個(gè)階段,圖1表示了6個(gè)階段與函數(shù)樹(shù)的大致對(duì)應(yīng)關(guān)系。
需求分析階段,主要任務(wù)是使用恰當(dāng)?shù)墓ぞ?,分析獲取用戶對(duì)系統(tǒng)將提供的服務(wù)要求,即是對(duì)復(fù)雜而大型軟件系統(tǒng)進(jìn)行高粒度地抽象與分解的過(guò)程。
分析設(shè)計(jì)階段,主要任務(wù)是根據(jù)需求階段的結(jié)果,采用不同的方法與恰當(dāng)?shù)墓ぞ撸治龊驮O(shè)計(jì)出軟件邏輯構(gòu)成。有很多分析設(shè)計(jì)工具,但面向?qū)ο蠓治鲈O(shè)計(jì)方法及UML工具已成為主流。
圖1 函數(shù)樹(shù)軟件生命周期的劃分示例
實(shí)現(xiàn)階段,編碼實(shí)現(xiàn)階段的主要任務(wù)是基于分析設(shè)計(jì)的結(jié)果,使用計(jì)算機(jī)語(yǔ)言編寫程序,從本質(zhì)上講,定義在計(jì)算機(jī)上能夠運(yùn)行的操作序列,以實(shí)現(xiàn)預(yù)期的功能。多采用面向?qū)ο蟪绦蛘Z(yǔ)言作為工具,而面向?qū)ο蟪绦蛘Z(yǔ)言仍然可分為面向?qū)ο蠛瓦^(guò)程式編程兩部分,最終都要使用過(guò)程式編程部分定義操作序列。
軟件缺陷改變?cè)诤瘮?shù)樹(shù)上葉子結(jié)點(diǎn),操作序列所對(duì)應(yīng)的格局狀態(tài)的過(guò)程如下:
根據(jù)上述格局狀態(tài)的改變過(guò)程,結(jié)合文獻(xiàn)[4-5]的建模思想、思路及方法,以一個(gè)格局為一個(gè)結(jié)點(diǎn),構(gòu)建了軟件缺陷傳播概率模型。模型將結(jié)點(diǎn)狀態(tài)劃分為三個(gè)狀態(tài):無(wú)缺陷狀態(tài)S(沒(méi)有缺陷的結(jié)點(diǎn)),缺陷潛伏狀態(tài)L(有缺陷但是還未被發(fā)現(xiàn)的結(jié)點(diǎn))和缺陷暴露狀態(tài)A(有缺陷且已被發(fā)現(xiàn)的結(jié)點(diǎn))。在任意時(shí)刻t,每個(gè)結(jié)點(diǎn)只能處于上述狀態(tài)中的任意一種。分別用S(t),L(t)和A(t)表示t時(shí)刻處于S狀態(tài),L狀態(tài)和A狀態(tài)的結(jié)點(diǎn)密度,為方便起見(jiàn),分別簡(jiǎn)寫為:S,L,A。
根據(jù)實(shí)際軟件開(kāi)發(fā)過(guò)程中軟件缺陷的傳播過(guò)程,為建立結(jié)點(diǎn)函數(shù)缺陷狀態(tài)傳播模型,給出如下假設(shè):
①大型復(fù)雜軟件系統(tǒng)的軟件函數(shù)結(jié)點(diǎn)數(shù)量是恒定;
②在開(kāi)發(fā)過(guò)程之初,開(kāi)發(fā)人員未進(jìn)行任何開(kāi)發(fā)活動(dòng),沒(méi)有錯(cuò)誤產(chǎn)生,結(jié)點(diǎn)初始狀態(tài)為無(wú)缺陷狀態(tài)S;
③在開(kāi)發(fā)過(guò)程的迭代中,S狀態(tài)結(jié)點(diǎn)通過(guò)每個(gè)成員失誤變?yōu)長(zhǎng)狀態(tài)的概率相等為ε()t;
④在開(kāi)發(fā)過(guò)程的迭代中,由不同成員之間協(xié)作時(shí)失誤的影響,S狀態(tài)結(jié)點(diǎn)變?yōu)長(zhǎng)狀態(tài)的概率相等為 θ(t);
⑤在測(cè)試階段,假設(shè)測(cè)試人員發(fā)現(xiàn)缺陷的概率為α,即L狀態(tài)結(jié)點(diǎn)轉(zhuǎn)變?yōu)锳狀態(tài)結(jié)點(diǎn)的概率為α;
⑥測(cè)試人員發(fā)現(xiàn)軟件缺陷后,假設(shè)開(kāi)發(fā)人員消除缺陷使得軟件變?yōu)闊o(wú)缺陷狀態(tài)的概率相等為γ,即為γ;
⑦測(cè)試人員發(fā)現(xiàn)軟件缺陷后,開(kāi)發(fā)人員修復(fù)有缺陷狀態(tài)結(jié)點(diǎn)時(shí)因錯(cuò)誤而產(chǎn)生新潛在缺陷狀態(tài)的概率相等為δ,即A狀態(tài)結(jié)點(diǎn)轉(zhuǎn)變?yōu)長(zhǎng)狀態(tài)結(jié)點(diǎn)的概率相等為δ。
根據(jù)上述假設(shè),如圖2所示。其中,狀態(tài)S轉(zhuǎn)換成狀態(tài)L的概率:
圖2 軟件缺陷狀態(tài)傳播模型
微分方程為:
設(shè)Anew為可以傳遞缺陷的節(jié)點(diǎn)數(shù),r為傳遞對(duì)象的平均數(shù)。根據(jù)軟件缺陷與開(kāi)發(fā)過(guò)程的關(guān)系可得,時(shí)間間隔Δt內(nèi),節(jié)點(diǎn)由S狀態(tài)轉(zhuǎn)變?yōu)長(zhǎng)狀態(tài)的數(shù)目是:
根據(jù)狀態(tài)模型有:在時(shí)間間隔Δt內(nèi),節(jié)點(diǎn)由S狀態(tài)轉(zhuǎn)變?yōu)長(zhǎng)狀態(tài)的數(shù)目是:
其中,N是節(jié)點(diǎn)總數(shù)。
將方程(1)和(2)結(jié)合起來(lái)計(jì)算可得:
同時(shí),根據(jù)狀態(tài)模型,可以傳遞缺陷的節(jié)點(diǎn)數(shù)Anew為:
結(jié)合方程(3)和(4)計(jì)算,可以得到V(t)的表達(dá)式:
根據(jù)假設(shè)(1)可知:
將方程(6)和(7)代入系統(tǒng)(1)中,系統(tǒng)(1)可化簡(jiǎn)為:
由于L代表了t時(shí)刻處于L狀態(tài)的節(jié)點(diǎn)密度,A代表了t時(shí)刻處于A狀態(tài)的節(jié)點(diǎn)密度,由公式(7)可知系統(tǒng)(7)的正向不變集Ω為:
定理1:系統(tǒng)有唯一的有缺陷平衡點(diǎn)E*=(L*,A*),其中:
證明:為了獲得系統(tǒng)(8)的平衡點(diǎn),系統(tǒng)(8)必須滿足如下方程:
整理方程組(12),可得:
顯然,方程組恒有如下解:
因?yàn)镋0中L0和A0均為0,所以平衡點(diǎn)E0是無(wú)缺陷平衡點(diǎn),且系統(tǒng)始終存在無(wú)缺陷平衡點(diǎn)E0。這意味著S0=1-L0-A0=1,代表系統(tǒng)(8)在無(wú)缺陷的情況下各節(jié)點(diǎn)的存在狀態(tài)。
通過(guò)計(jì)算,方程組另有一非零解:
在無(wú)缺陷平衡點(diǎn)E0=(L0,A0)處線性化系統(tǒng)對(duì)應(yīng)的特征方程為:
其中:
通 過(guò) 公 式(17)可 以 看 出 a>0 ,c>0 ,且根據(jù)一元二次方程根與系數(shù)的關(guān)系可知公式(16)必有一根大于0,方程即該線性系統(tǒng)的特征根不全具有負(fù)實(shí)部,根據(jù)Lyapunov定理[6],平衡點(diǎn)E0不穩(wěn)定。根據(jù)穩(wěn)定性理論可知,系統(tǒng)只有唯一的有缺陷平衡點(diǎn)E*。
定理2:有缺陷平衡點(diǎn)E*局部漸進(jìn)穩(wěn)定。
證明:系統(tǒng)在平衡點(diǎn)E*處的Jacobian矩陣為:
其所對(duì)應(yīng)的特征方程為:
其中:
將 S*=1-L*-A*代入方程(4.3)的 L˙=0 中,可得:
于是,將等式(21)代入b1,b2中,則:
定理3:有缺陷平衡點(diǎn)E*是全局漸近穩(wěn)定的。
證明:考慮如下函數(shù)[7]:
根據(jù)系統(tǒng)(8)計(jì)算可得:
本文給出了描述軟件本質(zhì)的數(shù)學(xué)模型、函數(shù)樹(shù)。以函數(shù)樹(shù)的葉子結(jié)點(diǎn)對(duì)應(yīng)圖靈機(jī)的格局,以一個(gè)格局為討論對(duì)象,構(gòu)建了軟件傳播概率模型。軟件最開(kāi)始是沒(méi)有缺陷的,隨著軟件開(kāi)發(fā)工作的進(jìn)行,格局狀態(tài)變?yōu)橛腥毕莸臓顟B(tài),通過(guò)測(cè)試工作軟件缺陷會(huì)被消除,也會(huì)產(chǎn)生新的缺陷。
基于軟件缺陷概率傳播模型,使用微分動(dòng)力系統(tǒng)理論其進(jìn)行分析,推導(dǎo)出軟件缺陷概率傳播模型存在唯一的有缺陷平衡點(diǎn),同時(shí)分析證明該平衡點(diǎn)不僅局部穩(wěn)定,而且全局穩(wěn)定,從理論上證明了這意味著開(kāi)發(fā)過(guò)程中的軟件缺陷將無(wú)法根除。