何鳳軍 蔡瑋 王宇
摘要:研究了軟件可靠性設(shè)計(jì)方法,軟件需求分析是研制高可靠性軟件的前提和基礎(chǔ),軟件可靠性設(shè)計(jì)包括軟件體系架構(gòu)設(shè)計(jì)、冗余設(shè)計(jì)、健壯性設(shè)計(jì)、容錯(cuò)設(shè)計(jì)、避錯(cuò)設(shè)計(jì)、錯(cuò)誤恢復(fù)設(shè)計(jì)及重用設(shè)計(jì)等。通過專業(yè)復(fù)雜網(wǎng)管軟件的研制實(shí)例,初樣評(píng)審測(cè)試、正樣評(píng)審測(cè)試及軟件測(cè)評(píng)的千行代碼缺陷密度證明了在軟件開發(fā)過程中運(yùn)用可靠性設(shè)計(jì)方法,可以提高軟件的質(zhì)量和可靠性。
關(guān)鍵詞:體系架構(gòu)設(shè)計(jì);冗余設(shè)計(jì);容錯(cuò)設(shè)計(jì);健壯性設(shè)計(jì);重用設(shè)計(jì)
中圖分類號(hào):TP393文獻(xiàn)標(biāo)志碼:A文章編號(hào):1008-1739(2021)01-64-4
0引言
隨著計(jì)算機(jī)技術(shù)迅猛發(fā)展,軟件在系統(tǒng)中的地位越來越重要[1],其規(guī)模和復(fù)雜性急劇提高,能否可靠運(yùn)行已經(jīng)成為決定整個(gè)系統(tǒng)可靠性的關(guān)鍵部分。軟件的上述重要性使得其可靠性越來越被關(guān)注,因此每年都有大量經(jīng)費(fèi)投入其可靠性相關(guān)研究,且取得了初步成效。但迄今為止,尚未形成標(biāo)準(zhǔn)的、公認(rèn)的軟件可靠性設(shè)計(jì)思想和方法。
軟件可靠性是指軟件在規(guī)定的條件下和規(guī)定的時(shí)間內(nèi)完成規(guī)定功能的能力。需求分析和可靠性設(shè)計(jì)是研制可靠性軟件的2個(gè)重要階段。需求分析[2]是進(jìn)行軟件設(shè)計(jì)的前提和基礎(chǔ),在需求分析基礎(chǔ)之上,進(jìn)行體系架構(gòu)設(shè)計(jì)、冗余設(shè)計(jì)、容錯(cuò)設(shè)計(jì)及重用設(shè)計(jì)等。
1軟件需求分析
詳盡的軟件需求分析[3]是研制高可靠性軟件的前提和基礎(chǔ),軟件需求分析包括功能需求、性能指標(biāo)需求、內(nèi)外部接口需求、可擴(kuò)展性需求、軟件開發(fā)和運(yùn)行環(huán)境需求及安全需求和部署需求。在充分了解軟件需求的基礎(chǔ)上,進(jìn)行軟件概要設(shè)計(jì)和詳細(xì)設(shè)計(jì),是確保軟件可靠性的重要手段。
1.1軟件體系架構(gòu)設(shè)計(jì)
對(duì)于軟件而言,規(guī)模[4]越大,復(fù)雜度越高,可靠性越低。對(duì)于相同規(guī)模的軟件,軟件越復(fù)雜其可靠性越低,因此軟件可靠性總的設(shè)計(jì)原則是控制和減少軟件結(jié)構(gòu)和程序的復(fù)雜性,在網(wǎng)絡(luò)管理系統(tǒng)軟件開發(fā)中,結(jié)構(gòu)復(fù)雜度控制進(jìn)行如下設(shè)計(jì):
(1)層次結(jié)構(gòu)設(shè)計(jì),復(fù)雜度控制
軟件的整體結(jié)構(gòu)采用層次結(jié)構(gòu)[5],將系統(tǒng)的總需求進(jìn)行分級(jí)和分解,如功能需求模塊、性能需求模塊、內(nèi)外部接口需求模塊及擴(kuò)展需求模塊等,把這些需求模塊劃分成若干層,層與層之間只存在單向的依賴關(guān)系,這樣可以很大程度減少程序的復(fù)雜性,軟件的可靠性與軟件的復(fù)雜性成正比。
(2)模塊化設(shè)計(jì)
采用層次結(jié)構(gòu)與模塊化設(shè)計(jì)相結(jié)合的方法,在分層的基礎(chǔ)上,將每一個(gè)層次結(jié)構(gòu)分解為若干個(gè)模塊。模塊劃分合適,可減少開發(fā)工作量,降低程序復(fù)雜度。模塊化設(shè)計(jì)思想,將功能細(xì)化到每個(gè)模塊進(jìn)行獨(dú)立實(shí)現(xiàn),模塊之間通過消息中間件進(jìn)行交互,這樣的設(shè)計(jì)理念既可以將軟件模塊故障縮小在各個(gè)模塊內(nèi)部,防止軟件模塊故障影響整個(gè)系統(tǒng),同時(shí)也減少故障影響范圍,又可以利用可靠的軟件模塊形成新的系統(tǒng),提高效率和系統(tǒng)的可靠性。模塊設(shè)計(jì)思想是高內(nèi)聚低耦合,模塊間的消息交互僅通過消息參數(shù),各個(gè)軟件模塊內(nèi)部功能緊耦合且獨(dú)立實(shí)現(xiàn)特定功能,從而大大提高軟件模塊的可靠性。
(3)服務(wù)化設(shè)計(jì)
將具有獨(dú)立功能的軟件模塊封裝為服務(wù),通過消息中間件進(jìn)行服務(wù)間通信,既可以將錯(cuò)誤局限在各個(gè)服務(wù)內(nèi)部[6],防止服務(wù)化的軟件模塊故障影響整個(gè)系統(tǒng),同時(shí)也減少故障影響范圍,又可以利用可靠的軟件服務(wù)形成新的系統(tǒng),提高工作效率和系統(tǒng)的可靠性。采用服務(wù)化技術(shù),服務(wù)注冊(cè)發(fā)布之后,可以被調(diào)用,可靠性增高。
每一個(gè)服務(wù)都必須是Web Services的服務(wù),都需要提供WSDL接口。為了標(biāo)準(zhǔn)化每一個(gè)服務(wù),需要在定義每個(gè)服務(wù)的WSDL接口時(shí),均遵循標(biāo)準(zhǔn)化模式和格式。
同時(shí),在定義每個(gè)服務(wù)的WSDL方法中,需要定義啟動(dòng)和停止操作:
①startService操作:函數(shù)表示服務(wù)處于正常工作狀態(tài)。啟動(dòng)服務(wù)操作是無參數(shù)函數(shù),返回值為布爾型。如返回true則表示服務(wù)正常啟動(dòng),否則表示啟動(dòng)失敗。
②stopService操作:函數(shù)表示讓處于正常工作狀態(tài)的服務(wù)停止工作。停止服務(wù)操作是無參數(shù)函數(shù),返回值為布爾型。如返回true則表示服務(wù)停止成功,否則表示停止失敗。
(4)可擴(kuò)展設(shè)計(jì)
mib庫表和配置參數(shù)基于配置文件進(jìn)行設(shè)計(jì),能夠在管理對(duì)象擴(kuò)展或功能設(shè)計(jì)變更時(shí)靈活擴(kuò)展。
1.2冗余設(shè)計(jì)
冗余是指為改善系統(tǒng)運(yùn)行可靠性而引入重復(fù)或代替的系統(tǒng)元素,以確保該特定元素失效時(shí),系統(tǒng)能繼續(xù)運(yùn)行。在軟件冗余設(shè)計(jì)方面主要包括如下幾方面設(shè)計(jì)思路:
①主備熱備:網(wǎng)絡(luò)管理系統(tǒng)軟件采用主備管理方式,因此總部級(jí)網(wǎng)管中心采用主備、熱備雙機(jī)工作方式,當(dāng)主用網(wǎng)管出現(xiàn)故障時(shí),備用網(wǎng)管立即切換為主用網(wǎng)管。采用操作系統(tǒng)和數(shù)據(jù)庫管理系統(tǒng)熱備份及共享存儲(chǔ)資源的方式;對(duì)數(shù)據(jù)庫數(shù)據(jù),提供包括物理和邏輯2種方式的備份/恢復(fù)策略保證數(shù)據(jù)安全;在數(shù)據(jù)庫冗余設(shè)計(jì)方面,主要針對(duì)數(shù)據(jù)訪問進(jìn)行冗余設(shè)計(jì),采用本地緩存策略設(shè)計(jì),防止批量并發(fā)操作訪問數(shù)據(jù)庫系統(tǒng)時(shí)導(dǎo)致的數(shù)據(jù)庫崩潰而無法進(jìn)行數(shù)據(jù)讀取,保證系統(tǒng)對(duì)關(guān)鍵數(shù)據(jù)的可靠訪問控制。
②重要模塊備份:網(wǎng)絡(luò)管理系統(tǒng)功能強(qiáng)大且復(fù)雜,軟件模塊眾多,如果所有的模塊都進(jìn)行備份,不僅降低運(yùn)行效率,而且造成系統(tǒng)資源的極大浪費(fèi);如果都不備份,軟件的可靠性無法保證。因此選擇重要的軟件模塊,如拓?fù)涔芾砟K、故障管理模塊及通信機(jī)模塊等進(jìn)行備份。
③信息冗余:數(shù)據(jù)庫是網(wǎng)管系統(tǒng)重要的信息存儲(chǔ)方式,在數(shù)據(jù)庫的選型方面選擇可靠性較高的數(shù)據(jù)庫,而且進(jìn)行數(shù)據(jù)庫的實(shí)時(shí)自動(dòng)備份。
1.3軟件健壯性設(shè)計(jì)
軟件健壯性是指軟件在所運(yùn)行的硬件環(huán)境如計(jì)算機(jī)或顯示器發(fā)生故障,或在使用軟件時(shí)出現(xiàn)輸入數(shù)據(jù)不合理或非正常操作時(shí),或輸入數(shù)據(jù)越限等非軟件所能承受的非正常情況發(fā)生時(shí),軟件仍能正常運(yùn)行而不出現(xiàn)故障的能力,即軟件不僅要在正確的操作使用和運(yùn)行環(huán)境下正常運(yùn)行,而且要對(duì)非正常運(yùn)行環(huán)境和非法輸入具有免疫能力。軟件的健壯性設(shè)計(jì)包括環(huán)境冗余設(shè)計(jì)、非法輸入提示、非正常運(yùn)行環(huán)境檢測(cè)和提示等設(shè)計(jì)。
1.4軟件避錯(cuò)設(shè)計(jì)
在網(wǎng)絡(luò)管理系統(tǒng)軟件開發(fā)過程中,主要采用如下避錯(cuò)設(shè)計(jì)方法:
①需求分析階段,多與用戶溝通交流,充分了解用戶的需求,在需求階段引入的錯(cuò)誤的修正代價(jià)是其他階段錯(cuò)誤的千百倍甚至更多,因此做好需求分析是軟件避錯(cuò)設(shè)計(jì)的重要環(huán)節(jié)。
②軟件架構(gòu)設(shè)計(jì)階段,采用模塊化設(shè)計(jì),一個(gè)功能采用一個(gè)軟件模塊實(shí)現(xiàn),模塊之間基于消息進(jìn)行交互,采用松耦合高內(nèi)聚的方式。
③界面設(shè)計(jì)中,對(duì)于需要用戶輸入的地方,盡量采用下拉列表框設(shè)計(jì)控件,這樣可以避免用戶的直接輸入,減少出錯(cuò)機(jī)會(huì)。如果必須要使用編輯框,首先要設(shè)置編輯框的屬性,如只允許輸入數(shù)字、輸入字符的長度限制等,對(duì)輸入數(shù)據(jù)的有效性及合理性、數(shù)據(jù)輸入范圍等采用自動(dòng)避錯(cuò),當(dāng)出現(xiàn)非法操作時(shí),程序以文字方式提示操作員,同時(shí)高亮顯示錯(cuò)誤輸入的編輯框,允許用戶重新輸入。
④加強(qiáng)軟件測(cè)試,在軟件進(jìn)行需求分析、架構(gòu)設(shè)計(jì)、概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)之后,通過加強(qiáng)各階段的軟件測(cè)試可進(jìn)一步提高軟件可靠性。為最大限度發(fā)現(xiàn)軟件缺陷、提高軟件的可靠性,就要對(duì)軟件進(jìn)行盡可能完備的測(cè)試。每個(gè)階段的測(cè)試都要制定測(cè)試大綱、測(cè)試細(xì)則、測(cè)試標(biāo)準(zhǔn)和測(cè)試規(guī)范,涵蓋軟件功能、軟件性能、內(nèi)外部接口、軟件安裝、軟件運(yùn)行環(huán)境及軟件的擴(kuò)展性等,測(cè)試要盡可能詳盡,要強(qiáng)化輸入測(cè)試,針對(duì)每個(gè)界面輸入要包括設(shè)計(jì)輸入正常值、邊界值、異常值測(cè)試用例,要進(jìn)行充分的邊界測(cè)試。
1.5軟件容錯(cuò)設(shè)計(jì)
軟件系統(tǒng)的一些缺陷是不可避免的,不同的使用模式和不同的操作方式導(dǎo)致有些軟件錯(cuò)誤是不易被發(fā)現(xiàn)的。軟件容錯(cuò)技術(shù)就是軟件在缺陷存在的情況下能夠正確運(yùn)行的設(shè)計(jì)思想。在軟件測(cè)試階段和調(diào)試階段能夠發(fā)現(xiàn)和排除90%的軟件錯(cuò)誤和缺陷,但是由于軟件的缺陷與軟件的使用方式息息相關(guān),不同的使用模式會(huì)有不同的運(yùn)行剖面,不同的運(yùn)行剖面會(huì)挖掘出不同的軟件缺陷。如果有些運(yùn)行剖面沒有運(yùn)行,則軟件缺陷是不可能被發(fā)現(xiàn)的,避錯(cuò)技術(shù)和排錯(cuò)技術(shù)不可能使軟件完全正確。因此,軟件容錯(cuò)技術(shù)也是提高軟件可靠性的一種很重要的實(shí)際理念。容錯(cuò)的本質(zhì)是在軟件運(yùn)行環(huán)境或操作使用發(fā)生錯(cuò)誤時(shí),軟件系統(tǒng)仍然具有正常運(yùn)行能力的一種設(shè)計(jì)方法。
在網(wǎng)絡(luò)管理系統(tǒng)軟件設(shè)計(jì)中,主要采用了如下容錯(cuò)設(shè)計(jì)方法:
①軟件容錯(cuò):采用模塊化設(shè)計(jì),界面采用下拉框,減少輸入,邊界值和有效值進(jìn)行輸入控制。
②環(huán)境容錯(cuò):在軟件安裝過程中,如果檢測(cè)到內(nèi)存小于軟件正常運(yùn)行所需的內(nèi)存,則提示操作員,停止安裝。所處的環(huán)境發(fā)生變化時(shí)(如出現(xiàn)內(nèi)存溢出、斷電及硬件故障等異?,F(xiàn)象時(shí)),軟件都能按預(yù)定方式進(jìn)行處理(如數(shù)據(jù)自動(dòng)備份等),使重要信息不丟失,避免發(fā)生災(zāi)難性的后果。
③設(shè)計(jì)容錯(cuò):在軟件開發(fā)過程中,采用版本管理控制工具,詳細(xì)記錄不同開發(fā)人員開發(fā)相同或不同軟件模塊的開發(fā)軌跡,如果新修改的程序出現(xiàn)問題,可以通過對(duì)比或者恢復(fù)原來的程序版本進(jìn)行差錯(cuò)處理,大大提高軟件開發(fā)效率。
1.6軟件錯(cuò)誤恢復(fù)設(shè)計(jì)
網(wǎng)絡(luò)管理系統(tǒng)軟件在運(yùn)行過程中會(huì)由于軟件運(yùn)行環(huán)境故障、人員操作異常、軟件自身錯(cuò)誤等原因造成軟件出錯(cuò)故障。在軟件發(fā)生錯(cuò)誤后盡快恢復(fù)、繼續(xù)正常運(yùn)行是軟件可靠性設(shè)計(jì)考慮的重點(diǎn),有如下3種機(jī)制:
①日志機(jī)制:網(wǎng)絡(luò)管理系統(tǒng)軟件設(shè)計(jì)采用日志管理設(shè)計(jì),提供安全日志、操作日志、登錄日志等各種日志的實(shí)時(shí)記錄和存儲(chǔ)備份功能,在軟件發(fā)生故障后,可以查看日志記錄查找故障原因,快速恢復(fù)軟件。
②狀態(tài)恢復(fù)機(jī)制:網(wǎng)絡(luò)管理系統(tǒng)總部級(jí)網(wǎng)管中心軟件采用雙機(jī)熱備份,在主用發(fā)生故障后,備用能迅速啟用,狀態(tài)轉(zhuǎn)化為主用。
③數(shù)據(jù)恢復(fù)機(jī)制:網(wǎng)絡(luò)管理系統(tǒng)軟件采取自動(dòng)保存、數(shù)據(jù)備份等手段,確保軟件發(fā)生故障后,通過網(wǎng)絡(luò)管理數(shù)據(jù)的可恢復(fù)性來提高軟件的可靠性。
1.7軟件重用設(shè)計(jì)
軟件重用就是直接使用已有的成熟可靠的軟件模塊,能夠減小工作量進(jìn)而縮短開發(fā)周期,同時(shí)也能提高軟件的可維護(hù)性和可靠性。因?yàn)榭芍赜玫能浖K已經(jīng)過多輪測(cè)試和篩選,很多錯(cuò)誤已在開發(fā)、運(yùn)行和測(cè)試過程中被發(fā)現(xiàn)和排除,可靠性比較高。
軟件重用的過程如下:候選、選擇、資格、分類和存儲(chǔ)、查找和檢索。在選擇可重用構(gòu)件時(shí),一定要有嚴(yán)格的選擇標(biāo)準(zhǔn),可重用的構(gòu)件必須是經(jīng)過嚴(yán)格測(cè)試的、可靠性高、正確性好、高度可擴(kuò)展可使用構(gòu)件,應(yīng)模塊化、結(jié)構(gòu)清晰,且有高度可適應(yīng)性。
重用模塊應(yīng)有相當(dāng)?shù)睦^承性,能在構(gòu)建各種系統(tǒng)時(shí)方便地重復(fù)使用,主要功能如下:
①模塊具有獨(dú)立功能:功能獨(dú)立單一完整,且經(jīng)過多輪測(cè)試,內(nèi)部功能緊耦合高內(nèi)聚,對(duì)外部有明確的接口。
②具有高度可擴(kuò)展性:能夠根據(jù)具體的使用需求或者功能升級(jí),提供可擴(kuò)展接口以便進(jìn)行二次開發(fā)或者集成。
③接口清晰、簡明、可靠,軟件模塊松耦合,模塊之間均基于標(biāo)準(zhǔn)的接口進(jìn)行消息交互。
構(gòu)件涵蓋了開發(fā)工具、開發(fā)思想、程序代碼等領(lǐng)域,而且均經(jīng)過詳盡的測(cè)試和反復(fù)的試用,附加詳盡的操作使用說明文檔,這些構(gòu)件有的可以直接使用,有的根據(jù)實(shí)際使用需求進(jìn)行改進(jìn)完善后即可使用,大大節(jié)省軟件開發(fā)周期,提高軟件可靠性。
2實(shí)例驗(yàn)證
以一個(gè)規(guī)模較大、復(fù)雜性較高、專業(yè)性極強(qiáng)的軟件項(xiàng)目為例進(jìn)行軟件可靠性設(shè)計(jì)說明,從項(xiàng)目的需求分析、軟件概要設(shè)計(jì)、軟件詳細(xì)設(shè)計(jì)、軟件研制編碼、軟件測(cè)試、軟件聯(lián)試開發(fā)的各個(gè)階段,嚴(yán)格進(jìn)行軟件可靠性設(shè)計(jì)。最終開發(fā)的軟件相對(duì)于原軟件而言,具有更高的可靠性和更好的軟件質(zhì)量,得到了用戶的高度認(rèn)可。
①需求分析,通過原型系統(tǒng)與用戶充分溝通了解需求,包括功能(拓?fù)?、配置、性能、故障、流量、安全管理)、性能?個(gè)性能指標(biāo))、接口(北向接口及協(xié)議、南向接口及協(xié)議)、運(yùn)行環(huán)境(操作系統(tǒng)和數(shù)據(jù)庫)、可靠性和安全性需求。
②軟件架構(gòu)設(shè)計(jì),由于部署套量非常多,因此選擇B/S軟件架構(gòu),便于安裝部署。
③冗余設(shè)計(jì):拓?fù)涔芾砗蛿?shù)據(jù)庫管理是重要的模塊,因此進(jìn)行模塊冗余設(shè)計(jì);采用數(shù)據(jù)庫熱備份,進(jìn)行物理和邏輯備份;對(duì)重要數(shù)據(jù)進(jìn)行基于Excel的備份恢復(fù)機(jī)制。
④健壯性和容錯(cuò)設(shè)計(jì):安裝時(shí),軟件自動(dòng)檢測(cè)所需內(nèi)存是否夠用,對(duì)于需要用戶輸入的地方,盡量采用下拉列表框,如果必須要使用編輯框,首先要設(shè)置編輯框的屬性,只允許輸入數(shù)字,輸入字符的長度限制,輸入范圍(最大值、最小值、合理值、非法值)等。
⑤錯(cuò)誤恢復(fù)設(shè)計(jì):進(jìn)行操作日志和安全日志記錄,重要信息刪除提示,刪除信息存儲(chǔ)在數(shù)據(jù)庫中,以便于出現(xiàn)誤操作時(shí)能恢復(fù)原始數(shù)據(jù)。
⑥軟件重用:重用了用戶管理、報(bào)表管理、消息處理等構(gòu)件,大大縮短了開發(fā)周期。
經(jīng)過可靠性設(shè)計(jì)后,網(wǎng)管系統(tǒng)軟件的可靠性大大提高,實(shí)踐證明在168可靠性考核中,軟件一直正常運(yùn)行。雖然該網(wǎng)管軟件專業(yè)復(fù)雜度較高,但是在初樣測(cè)試、正樣測(cè)試中問題個(gè)數(shù)最少,在出所測(cè)試時(shí),軟件代碼138萬行,測(cè)試用例318個(gè),首輪測(cè)試未通過測(cè)試用例為11個(gè),千行代碼缺陷密度為0.001 5%。
3結(jié)束語
隨著通信與計(jì)算機(jī)技術(shù)的迅猛發(fā)展,軟件在各個(gè)領(lǐng)域的應(yīng)用越來越廣泛,在大型系統(tǒng)中的占比越來越高,地位越來越重要,軟件規(guī)模也越來越大,復(fù)雜性急劇提高。因軟件故障而造成的重大事故屢有發(fā)生,因此軟件可靠性研究和設(shè)計(jì)越來越受到重視,而軟件可靠性設(shè)計(jì)是一個(gè)全生命周期過程,需要在需求分析、軟件概要設(shè)計(jì)、軟件詳細(xì)設(shè)計(jì)、軟件體系架構(gòu)設(shè)計(jì)、軟件測(cè)試等各個(gè)軟件生命周期的每一個(gè)重要環(huán)節(jié)進(jìn)行設(shè)計(jì)和研究,才能開發(fā)和設(shè)計(jì)高可靠性高質(zhì)量的軟件。
參考文獻(xiàn)
[1] LENNSELIUS B,RYDSTROM L.Software Fault Content and Reliability Estimations for Telecommunications System[J]. IEEE Journal on.Selected Areas in Communications,1990,8(2):262-272.
[2] DOWNS T, SCOTT A.Evaluating the Performance of Software Reliability Models[J].IEEE Trans.onReliability, 2002,41(4):533-538.
[3]丁定浩.可靠性與維修性工程:系統(tǒng)與電路結(jié)構(gòu)的分析和設(shè)計(jì)[M].北京:電子工業(yè)出版社,1986.
[4]張繼旭,王琦.軟件可靠性的模塊分析方法[J].戰(zhàn)術(shù)導(dǎo)彈技術(shù),2002(2):64-69.
[5]文長康.淺談軟件可靠性的評(píng)估技術(shù)[J].通信技術(shù),1997(2): 73-78.
[6]湯扣林,徐大勇,許銳鋒.指揮信息系統(tǒng)軟件可靠性設(shè)計(jì)[J].指揮信息系統(tǒng)與技術(shù),2013,4(5):89-94.