尚京威 陳 平 韓邢健
(工業(yè)和信息化部電子第五研究所 廣州 510610)
隨著計算機技術(shù)的迅猛發(fā)展,計算機軟件已經(jīng)在越來越多的領(lǐng)域發(fā)揮著重要的作用,特別是航空航天、金融和醫(yī)療等關(guān)系國計民生的行業(yè),對軟件可靠性有著越來越高的要求.通常軟件可靠性工程包括軟件可靠性早期預(yù)計、分配、分析、設(shè)計、測試和評估等多個活動環(huán)節(jié),但是在實際的工程實踐中這些活動較為零散和孤立,各種軟件可靠性活動之間可以實現(xiàn)哪些數(shù)據(jù)共享,互相之間能夠提供什么樣的數(shù)據(jù)交互并不明確,無法為軟件開發(fā)活動提供全過程的軟件可靠性技術(shù)支持.導(dǎo)致在工程實踐中往往只是孤立地運用某一項技術(shù),解決局部的軟件可靠性問題,缺乏完整的軟件可靠性工程應(yīng)用.
本文提出一種軟件可靠性工程技術(shù)綜合應(yīng)用技術(shù),旨在解決軟件可靠性工程活動中的一系列信息孤島,在軟件的全生命周期內(nèi)提供軟件可靠性預(yù)計、分配、分析、設(shè)計、測試和評估技術(shù)的綜合應(yīng)用,為軟件可靠性工程提供全過程的支持.
美國宇航協(xié)會(AIAA)認為軟件可靠性工程是“應(yīng)用統(tǒng)計技術(shù)處理在系統(tǒng)開發(fā)和運行期間所采集的數(shù)據(jù),以便詳細說明、預(yù)計、估計和評價基于軟件的系統(tǒng)可靠性”[1].該定義主要強調(diào)的是軟件可靠性工程中的度量工作.Lyu[2-3]在《軟件可靠性工程手冊》中提出:“軟件可靠性工程是根據(jù)用戶的可靠性需求而對軟件系統(tǒng)操作行為的定量化研究”.美國的John[4]將軟件可靠性工程定義為一種確保產(chǎn)品的可靠性達到用戶要求,加速產(chǎn)品上市速度,降低產(chǎn)品成本的一種實踐方法,并提出了一種軟件可靠性工程過程模型,如圖1所示:
圖1 軟件可靠性工程過程
圖2 軟件可靠性工程過程框架
我國的阮鐮教授[5]提出:“軟件可靠性工程是指為了滿足軟件的可靠性要求而進行的一系列設(shè)計、分析、測試和管理工作”,并提出了一套全過程生命周期的軟件可靠性工程過程框架,如圖2所示:
總的來講,雖然關(guān)于軟件可靠性工程的定義很多,但是其核心思想都體現(xiàn)出圍繞著軟件可靠性要求而開展一系列活動.在得到較多認同的Musa和Ruan的可靠性工程模型中,Musa的過程模型過多地注重于軟件可靠性測試且不能覆蓋軟件的全生命周期,不能體現(xiàn)出軟件可靠性是設(shè)計出來的這一思想.Ruan的可靠性工程過程模型能夠覆蓋軟件的全生命周期,包含以軟件可靠性為核心的多項活動,但是只是體現(xiàn)出在軟件生命周期中可以開展的軟件可靠性活動,各項活動之間的信息交互關(guān)系并沒有真正得到體現(xiàn).而在實際的軟件開發(fā)項目中,軟件可靠性工程過程與軟件的開發(fā)過程緊密相關(guān),開發(fā)過程的并發(fā)、迭代、微循環(huán)對軟件可靠性工程活動有著很大的影響.實現(xiàn)軟件可靠性工程與軟件開發(fā)過程緊密結(jié)合,軟件可靠性工程活動之間緊密聯(lián)系,能夠更大地發(fā)揮軟件可靠性工程的價值和意義.
根據(jù)可靠性工程過程模型,可以將軟件可靠性工程活動劃分為軟件可靠性預(yù)計(早期預(yù)計)、分配、分析、設(shè)計(可靠性設(shè)計準則[6])、測試(基于剖面的測試)和評估(基于失效數(shù)據(jù)的評估)等環(huán)節(jié),每一個環(huán)節(jié)都作為軟件可靠性工程的一項重要活動,圍繞提高軟件產(chǎn)品可靠性這一中心發(fā)揮著作用.高可靠性的軟件是設(shè)計和開發(fā)出來的,因此不能孤立地談軟件可靠性工程,只有與軟件的開發(fā)活動緊密地結(jié)合起來才能發(fā)揮出更大的作用.
盡管瀑布模型在工程實踐中詬病較多,但是一系列軟件工程過程模型都是以其為藍本演化發(fā)展而成,如原型模型、螺旋模型等.為了更好地分析軟件可靠性工程過程與軟件工程過程的關(guān)系,這里仍然沿用瀑布模型把軟件的開發(fā)過程分為系統(tǒng)定義、需求分析、設(shè)計、編碼、測試、維護等階段.這些階段可以是迭代開發(fā)過程中的一個子階段,也可以指軟件生命周期內(nèi)的各個階段.軟件可靠性工程過程應(yīng)該與軟件開發(fā)過程緊密地結(jié)合在一起.
1) 系統(tǒng)定義階段
系統(tǒng)的定義階段是軟件可靠性工程活動的起點,這里將系統(tǒng)的需求分析和系統(tǒng)設(shè)計統(tǒng)稱為系統(tǒng)的定義過程.系統(tǒng)定義過程為軟件可靠性工程活動提供了工程活動開展的依據(jù).系統(tǒng)定義過程與軟件可靠性工程活動的交互如表1所示:
表1 系統(tǒng)定義過程與SRE活動的交互
2) 軟件需求分析階段
軟件需求分析階段一方面從軟件可靠性工程活動中獲得支持,另一方面為軟件可靠性工程活動提供數(shù)據(jù)來源.需求過程與軟件可靠性工程活動的交互如表2所示:
表2 需求分析過程與SRE活動的交互
3) 軟件設(shè)計階段
軟件設(shè)計階段是將軟件可靠性要求加以設(shè)計實現(xiàn)的過程;同時設(shè)計的細節(jié)為更為深入的軟件可靠性工程活動提供支持.軟件設(shè)計過程與軟件可靠性工程活動的交互如表3所示.
4) 軟件編碼階段
軟件編碼階段為軟件可靠性工程提供了更為詳細的參考細節(jié);軟件可靠性工程則將可靠性設(shè)計要求和分析結(jié)論用于指導(dǎo)編碼工作的進行.軟件編碼過程與軟件可靠性工程活動的交互如表4所示.
表3 軟件設(shè)計過程與SRE活動的交互
表4 軟件編碼過程與SRE活動的交互
5) 軟件測試階段
軟件測試階段可以看作軟件可靠性活動結(jié)果的驗證過程,同時軟件可靠性活動指導(dǎo)測試的執(zhí)行;為測試定量化的軟件可靠性評估提供數(shù)據(jù).軟件測試過程與軟件可靠性工程活動的交互如表5所示:
表5 軟件測試過程與SRE活動的交互
軟件可靠性工程活動接收來自開發(fā)過程的信息,并為軟件開發(fā)過程提供軟件可靠性技術(shù)支持.通過對多個已完成的軟件可靠性工程項目的總結(jié),建立了軟件可靠性工程數(shù)據(jù)交互關(guān)系圖,如圖3所示.
1) 軟件可靠性早期預(yù)計
軟件可靠性早期預(yù)計是在開發(fā)過程早期,根據(jù)類似軟件的信息、開發(fā)組織成熟度或已有的缺陷數(shù)據(jù)給出軟件系統(tǒng)可靠性的定量估計.早期預(yù)計的結(jié)果可以為軟件可靠性分配、分析提供參考.
2) 軟件可靠性分配
軟件可靠性分配的目的是將軟件系統(tǒng)的可靠性指標要求分配給軟件的各個配置項(必要時分配到軟件部件或軟件單元)[7],用以指導(dǎo)配置項(軟件部件或軟件單元)的設(shè)計開發(fā).軟件可靠性活動的主要作用是為其他可靠性活動提供目標值,如可以為可靠性評估設(shè)立評估目標值;為可靠性測試提供統(tǒng)計實驗方案的目標值;明確高可靠性要求的模塊,為設(shè)計提出要求;為可靠性分析提供重點關(guān)注的分析模塊.
3) 軟件可靠性分析
軟件可靠性分析可以為軟件可靠性設(shè)計提供失效模式和關(guān)鍵模塊參考,作為建立設(shè)計準則的依據(jù);為可靠性分配提供模塊的關(guān)鍵度等級.
4) 軟件可靠性設(shè)計
這里的軟件可靠性設(shè)計主要指的是為保證軟件可靠性設(shè)計要求而進行的軟件可靠性設(shè)計準則建立活動.建立的活動準則為詳細級的軟件可靠性分析提供參考.
5) 軟件可靠性測試
軟件可靠性測試是根據(jù)軟件操作剖面隨機抽樣生成測試用例,并執(zhí)行測試和收集失效數(shù)據(jù)的軟件可靠性工程活動.可以細分為軟件可靠性增長測試和軟件可靠性驗證測試2種類型.為軟件可靠性測試構(gòu)造的操作剖面可以對基于操作剖面的軟件可靠性分配方法提供支持;測試中收集的失效數(shù)據(jù)是軟件可靠性定量評估的數(shù)據(jù)來源.
6) 軟件可靠性評估
軟件可靠性評估是利用軟件可靠性測試收集到的失效數(shù)據(jù),通過選用合適的軟件可靠性模型定量評估和預(yù)計軟件可靠性水平的活動.軟件可靠性評估結(jié)果可以為前期進行的可靠性分配、預(yù)計進行驗證;評估的可靠性結(jié)果還可以作為軟件可靠性測試是否停止的判別標準.
圖3 軟件可靠性工程數(shù)據(jù)關(guān)系圖
從第2節(jié)的分析可以看出,軟件可靠性工程過程與軟件開發(fā)過程緊密相關(guān),兩者之間發(fā)生著頻繁的數(shù)據(jù)交互.軟件可靠性活動從軟件開發(fā)過程獲取數(shù)據(jù)來源,其產(chǎn)出支持保證軟件可靠性要求的軟件開發(fā)活動.同時軟件可靠性工程活動之間也相互影響相互支持,形成了為保證軟件的可靠性要求而開展的一系列軟件可靠性工程活動.軟件可靠性過程之間以及軟件可靠性過程與開發(fā)過程之間的數(shù)據(jù)流關(guān)系,實質(zhì)上是一種以工程業(yè)務(wù)流程為主的工作流關(guān)系.可以以工作流模型的方式建立軟件可靠性工程過程模型,將軟件可靠性工程過程和軟件開發(fā)過程有機地結(jié)合在一起,形成一套完整的軟件可靠性工程過程方法.
工作流目前尚無統(tǒng)一定義,比較受廣泛認可的是工作流管理聯(lián)盟(WFMC)的定義[8]:工作流是一類能夠完全或者部分自動執(zhí)行的經(jīng)營過程,它根據(jù)一系列過程規(guī)則、使得文檔、信息或任務(wù)能夠在不同的執(zhí)行者之間進行傳遞與執(zhí)行.工作流技術(shù)的主要優(yōu)點是能夠?qū)I(yè)務(wù)邏輯和過程邏輯清晰地分隔開來.在過程邏輯中,可以定義軟件可靠性工程中各個業(yè)務(wù)活動的先后順序及連接方法,使得各個活動以松耦合的方式連接在一起共同完成業(yè)務(wù)流程;當業(yè)務(wù)邏輯發(fā)生變化時只需要重新定義各個活動的連接順序即可.
借助于工作流模型可以對可靠性活動的實施過程進行描述、抽象,描述軟件可靠性業(yè)務(wù)流程;對流程進行冗余、相似性的分析優(yōu)化,實現(xiàn)流程集成;對軟件可靠性工程活動流程狀態(tài)進行監(jiān)控;實現(xiàn)軟件可靠性工程集成系統(tǒng)的開發(fā).
一個完整的軟件可靠性工程過程是由一系列最基本的可靠性活動按照一定的邏輯順序規(guī)則組成的.軟件可靠性工程活動與它們之間的數(shù)據(jù)依賴、邏輯關(guān)系可以用有向圖進行表示.有向圖中的節(jié)點表示一個可執(zhí)行的活動單元,連接于2個節(jié)點之間的有向弧即表示活動間的先后順序關(guān)系.過程模型中各元素的圖形化表示如圖4所示:
圖4 過程模型中各元素的圖形化表示
1) 活動
活動是指在一段不間斷的時間間隔內(nèi)為實現(xiàn)某一個目標而由人工或者自動完成的一個行為,是組成業(yè)務(wù)流程的最基本單元.活動的輸入部分是保證活動開始的必要條件,如軟件信息、軟件需求文檔等,只有在滿足活動開展的條件后,該活動才能被激活.活動的輸出部分是指活動的結(jié)果,活動的輸入與輸出構(gòu)成了每一個基本活動單元與外部之間的接口.工作流中的活動可以用于表示軟件可靠性工程活動.
2) 外部活動
外部活動是指不包含在當前業(yè)務(wù)流程中,但其輸出是當前業(yè)務(wù)流程中某活動的輸入.外部活動不是當前業(yè)務(wù)流程的組成部分,但對當前流程有著一定的影響.可以把軟件開發(fā)過程活動定義為軟件可靠性工程過程的外部活動.
3) 子過程
子過程是一類能夠分解的節(jié)點類型,其內(nèi)部可以包含組成工作流模型的所有元素類型.軟件可靠性工程是一系列軟件可靠性工程活動的有序集合,可以把某些關(guān)系密切的活動集合起來,在圖中以一個節(jié)點表示.
4) 同步節(jié)點
將一個實際的業(yè)務(wù)流程映射為工作流模型時,描述活動間的邏輯關(guān)系是一項非常重要的環(huán)節(jié).在軟件可靠性工程過程建模中,“與”和“或”是2類最基本的工作流邏輯關(guān)系.
“或”的關(guān)系表示:對于任意一個處于非執(zhí)行狀態(tài)的節(jié)點n,只要有一條輸入連接弧發(fā)生了轉(zhuǎn)移,那么該節(jié)點即可被執(zhí)行,即∪{n′∈Pre(n),l=(n′,n)∈L,Trans(l)=1,且l發(fā)生轉(zhuǎn)移}.
“與”的關(guān)系通過增加一類新的節(jié)點——同步節(jié)點S——來表達,它對活動起協(xié)調(diào)、同步的作用.規(guī)定當S處于執(zhí)行狀態(tài)時,State(S)=1,將判斷它的所有輸入連接弧是否已經(jīng)全部發(fā)生轉(zhuǎn)移:若是,則S的狀態(tài)就由1變?yōu)?,即S執(zhí)行完畢;否則,S仍處于執(zhí)行狀態(tài),并將繼續(xù)判斷,直至滿足上面的條件后S才執(zhí)行完畢,State(S)=1→0,即∩{n′∈Pre(n),l=(n′,n)∈L,Trans(l)=1,且l發(fā)生轉(zhuǎn)移}.
5) 連接弧
連接弧表達了圖中不同節(jié)點元素之間的邏輯順序關(guān)系.它從前趨節(jié)點指向后繼節(jié)點,體現(xiàn)了節(jié)點狀態(tài)的轉(zhuǎn)移與有向圖的演進.連接弧連接于同一層次中的任意2個有數(shù)據(jù)交換的節(jié)點之間來定義數(shù)據(jù)流,數(shù)據(jù)流動的方向就是連接弧所指的方向.數(shù)據(jù)連接弧上標明的數(shù)據(jù)集和DATA是該弧承載的數(shù)據(jù)類型.未標明數(shù)據(jù)集合的連接弧表示前趨節(jié)點和后繼節(jié)點存在著某種時序上的關(guān)系,沒有數(shù)據(jù)上的依賴.在軟件可靠性工程過程模型中,定義2種連接?。?/p>
1) 永真型.永真型的數(shù)據(jù)連接弧,當前趨節(jié)點產(chǎn)生的數(shù)據(jù)集D∈DATA時,數(shù)據(jù)弧轉(zhuǎn)移函數(shù)為真,Trans(l)≡1.這體現(xiàn)了一種順序關(guān)系,不需要經(jīng)過任何條件的判斷,只要前趨節(jié)點執(zhí)行完畢并產(chǎn)生后繼節(jié)點所需數(shù)據(jù),即可激活后繼節(jié)點.
2) 不定型.即在滿足D∈DATA的同時,轉(zhuǎn)移函數(shù)的取值是需要在具體的工作流執(zhí)行過程中由工作流或人加以判斷來確定的.這種判斷實際上體現(xiàn)了一種選擇關(guān)系,即根據(jù)不同的情況,通過滿足條件的連接弧的轉(zhuǎn)移,實現(xiàn)對某一節(jié)點的多個后繼節(jié)點的選擇性激活.
根據(jù)軟件可靠性技術(shù)活動的輸入輸出數(shù)據(jù),以及軟件開發(fā)過程中軟件可靠性工程的輸入輸出關(guān)系,為軟件可靠性工程過程建立軟件可靠性分配、分析、早期預(yù)計和軟件可靠性增長測試4項子過程,實現(xiàn)對軟件可靠性活動過程的封裝,并統(tǒng)一外部接口.而可靠性評估、測試過程相對簡單,直接在過程模型中體現(xiàn).在子過程中,子工作流從子過程之外的外部活動獲得所需數(shù)據(jù),根據(jù)數(shù)據(jù)的不同,選擇不同的軟件可靠性分配、分析、早期預(yù)計方法進行實施,同時將產(chǎn)出的數(shù)據(jù)傳向子過程以外.基于數(shù)據(jù)驅(qū)動的軟件可靠性工程過程模型如圖5所示:
圖5 數(shù)據(jù)驅(qū)動的軟件可靠性工程過程模型
軟件開發(fā)過程的各個階段產(chǎn)生了不同的數(shù)據(jù),當這些數(shù)據(jù)滿足軟件可靠性技術(shù)活動觸發(fā)條件時,可靠性技術(shù)活動開始執(zhí)行,它們的輸出將作為后續(xù)軟件可靠性活動的輸入數(shù)據(jù)和觸發(fā)條件,即輸人數(shù)據(jù)是活動的“觸發(fā)器”.在整個軟件生命周期內(nèi),這些數(shù)據(jù)作為軟件可靠性任務(wù)活動的動力,“推動”工作流流動.
基于數(shù)據(jù)驅(qū)動的軟件可靠性工程過程模型,利用Microsoft Visual Studio提供的工作流機制,本文開發(fā)出了軟件可靠性工程綜合集成環(huán)境.該集成環(huán)境將各個軟件可靠性輔助工具集成到集成環(huán)境中,通過軟件可靠性過程模型創(chuàng)建和管理過程模型的實例,協(xié)調(diào)用戶操作,調(diào)度軟件可靠性分配、設(shè)計、分析、測試和評估等應(yīng)用軟件工具的工作流,在不同的應(yīng)用程序間自動傳輸數(shù)據(jù),實現(xiàn)了軟件可靠性工程過程的自動化管理和多種工具的有機整合.集成環(huán)境的結(jié)構(gòu)圖如圖6所示.軟件可靠性綜合服務(wù)器為每個軟件可靠性工程應(yīng)用對象軟件創(chuàng)建過程模型實例;集成環(huán)境中可以同時運行多個軟件可靠性工具客戶端,各個客戶端獨立處理單項軟件可靠性活動,但是活動的進程和與其他客戶端的交互受軟件可靠性綜合服務(wù)器的調(diào)度.
圖6 軟件可靠性工程集成環(huán)境結(jié)構(gòu)圖
圖7 綜合服務(wù)器系統(tǒng)工作流程示意圖
綜合服務(wù)器系統(tǒng)工作流程如圖7所示.綜合服務(wù)器系統(tǒng)以過程實例運行時為核心,控制軟件可靠性過程模型實例的運行,通過過程模型解析器分析過程的內(nèi)容和含義,通過任務(wù)分派器將任務(wù)項分派給參與該過程實例的各個客戶端,通過任務(wù)管理器管理各個任務(wù)項的信息,通過啟動控制器控制軟件可靠性過程的啟動,通過狀態(tài)轉(zhuǎn)換器控制過程實例、活動實例和任務(wù)項的狀態(tài)轉(zhuǎn)換.
軟件可靠性工程過程中的各項活動不但與軟件的開發(fā)過程發(fā)生著信息交互,同時各項活動之間也具有密切的數(shù)據(jù)聯(lián)系.通過建立數(shù)據(jù)驅(qū)動的軟件可靠性工程過程模型,將孤立的軟件可靠性工程活動與軟件開發(fā)過程,以及其他軟件可靠性工程活動緊密的聯(lián)系在一起,從而實現(xiàn)了軟件可靠性工程過程對軟件全生命周期的可靠性技術(shù)支持,形成了活動過程緊密結(jié)合的軟件可靠性工程過程,實現(xiàn)了軟件可靠性工程技術(shù)的綜合應(yīng)用,有利于保證軟件可靠性工程技術(shù)的應(yīng)用與實施,提高了軟件的可靠性.