邊偉成
(江蘇省信息中心 江蘇 南京 210013)
基于AOP的軟件缺陷監(jiān)測(cè)框架的設(shè)計(jì)與實(shí)現(xiàn)
邊偉成
(江蘇省信息中心 江蘇 南京 210013)
隨著軟件規(guī)模的不斷擴(kuò)大,軟件質(zhì)量越發(fā)成為軟件開發(fā)企業(yè)關(guān)注的重點(diǎn)。關(guān)于如何減少軟件缺陷,提高軟件可靠性是所有軟件開發(fā)者追求的永恒主題。本文基于AOP技術(shù)設(shè)計(jì)和提出了一種新的軟件缺陷檢測(cè)框架,其具體由方法監(jiān)控層、數(shù)據(jù)過濾層和邏輯表現(xiàn)層組成,自底向上傳遞數(shù)據(jù)。該框架可實(shí)現(xiàn)軟件方法的實(shí)時(shí)監(jiān)控、自定義監(jiān)控規(guī)則、對(duì)于缺陷按照嚴(yán)重等級(jí)進(jìn)行分類顯示等功能。最后通過與實(shí)際項(xiàng)目相整合,設(shè)計(jì)測(cè)試用例,測(cè)試結(jié)果表明本文提出的框架具有可行性。
軟件缺陷;AOP;軟件質(zhì)量;監(jiān)測(cè)框架
隨著互聯(lián)網(wǎng)技術(shù)的高速發(fā)展,Web類應(yīng)用軟件發(fā)展趨勢(shì)迅猛。由于Web類應(yīng)用軟件產(chǎn)品更新頻率高、測(cè)試周期短、使用范圍廣,在實(shí)際的Web軟件開發(fā)過程中,往往或多或少的會(huì)存在軟件缺陷[1-2],因此需要一套可靠的軟件缺陷檢測(cè)框架對(duì)開發(fā)過程中遺留的疏漏進(jìn)行有效的監(jiān)控。因此本文研究的主要目的就是針對(duì)Web應(yīng)用提出一套具有易用性,可操作性,可維護(hù)性和可擴(kuò)展性的軟件缺陷檢測(cè)框架。其可以實(shí)現(xiàn)在不破壞原有軟件項(xiàng)目工程的基礎(chǔ)上,嫁接到軟件工程之上,使其具有缺陷檢測(cè)的功能。
文中的主要貢獻(xiàn)是基于AOP技術(shù)設(shè)計(jì)和提出了一種新的軟件缺陷檢測(cè)框架。該框架由監(jiān)控層,數(shù)據(jù)過濾層和邏輯表現(xiàn)層組成。每個(gè)層次結(jié)構(gòu)分工明確,自底向上傳遞數(shù)據(jù),其相比于一般軟件缺陷檢測(cè)軟件具有可操作,去冗余,可定制,結(jié)果易于理解等優(yōu)勢(shì)。在缺陷檢測(cè)的過程中,web項(xiàng)目可能出現(xiàn)方法檢測(cè)信息冗余,運(yùn)用布隆算法對(duì)其進(jìn)行了數(shù)據(jù)過濾的過程,其相比較于一般算法,節(jié)省了大量空間,去除了在缺陷檢測(cè)過程中的冗余數(shù)據(jù)。最后針對(duì)一個(gè)實(shí)際應(yīng)用的項(xiàng)目,運(yùn)用本文設(shè)計(jì)的軟件缺陷檢測(cè)框架進(jìn)行了整合,通過預(yù)留一定的軟件缺陷,設(shè)計(jì)了幾個(gè)測(cè)試用例對(duì)測(cè)試結(jié)果進(jìn)行詳細(xì)的分析,驗(yàn)證了該框架的實(shí)用性。
AOP(Aspect-Oriented Programming)技術(shù)[3-4],即面向方面編程技術(shù),是對(duì)于面向?qū)ο缶幊蹋∣OP)技術(shù)的完善和彌補(bǔ)。AOP通過一種“橫切”技術(shù)將對(duì)象內(nèi)部解剖開來,從而將公共行為的多個(gè)類的重復(fù)代碼封裝到同一個(gè)模塊之中得到一個(gè)可重用模塊,叫做方面,即“Aspect”。所謂“方面”[5]就是將那些與系統(tǒng)核心業(yè)務(wù)無(wú)關(guān)但卻被業(yè)務(wù)模塊共同調(diào)用所封裝起來的類,這樣就可以大大減少代碼冗余,使得各個(gè)模塊之間的耦合度降低,實(shí)現(xiàn)對(duì)于系統(tǒng)可操作性和可維護(hù)性的提升。AOP主要應(yīng)用于權(quán)限驗(yàn)證、日志管理、事務(wù)響應(yīng)處理等。
各種技術(shù)雖然都是實(shí)現(xiàn)AOP技術(shù),并且都實(shí)現(xiàn)了AOP技術(shù)的各項(xiàng)技術(shù)指標(biāo),但不同的AOP工具在底層機(jī)制上卻是大相徑庭。本文主要采用的是Spring AOP 技術(shù)[6]。
Spring AOP技術(shù)是整個(gè)Spring框架當(dāng)中的一部分,其也能夠作為一個(gè)獨(dú)立模塊而存在。從本質(zhì)上來講,Spring AOP通過運(yùn)用動(dòng)態(tài)代理技術(shù)來實(shí)現(xiàn)了AOP。它的具體體現(xiàn)形式是利用IoC的機(jī)制,并且整合利用了AOP聯(lián)盟中的通用AOP接口。在運(yùn)用Spring AOP來實(shí)現(xiàn)AOP時(shí),首先需要對(duì)于其spring的 xml配置文件添加配置pointcut,然后利用Spring中的Interceptor作為觸發(fā)條件[7]。開發(fā)者可以自由定義切面類,Interceptor的實(shí)現(xiàn)類似于實(shí)現(xiàn)AOP的advice,開發(fā)人員在進(jìn)行Interceptor的開發(fā)過程中,需要實(shí)現(xiàn)通用的AOP接口。
與大多數(shù)軟件框架不同,本文設(shè)計(jì)的基于AOP的軟件缺陷檢測(cè)框架可以在編碼階段之外將其添加到項(xiàng)目工程當(dāng)中,在不影響原先設(shè)計(jì)邏輯的情況下,發(fā)現(xiàn)軟件在運(yùn)行過程中遇到的缺陷和異常。其具有監(jiān)控方法、獲取數(shù)據(jù)、數(shù)據(jù)過濾、缺陷分類、轉(zhuǎn)譯顯示等功能。
該軟件缺陷檢測(cè)框架主要針對(duì)B/S架構(gòu)的Web軟件所開發(fā),可針對(duì)不同的軟件缺陷進(jìn)行檢測(cè)和記錄,其主要由方法監(jiān)控層、數(shù)據(jù)過濾層和邏輯表現(xiàn)層三層結(jié)構(gòu)構(gòu)成,如圖1所示。
圖1 總體框架圖
方法監(jiān)控層位于架構(gòu)最底層,主要通過AOP技術(shù)獲得執(zhí)行的方法剖面。再對(duì)切點(diǎn)的前后進(jìn)行操作,記錄下方法的相關(guān)信息,其中主要包括方法名、執(zhí)行參數(shù)、返回值、操作者屬性和操作結(jié)果等,原理如圖2所示。
圖2 方法監(jiān)控層原理圖
在AOP編程中,對(duì)業(yè)務(wù)邏輯的各個(gè)部分進(jìn)行隔離,監(jiān)控每個(gè)方法所操作的主體和客體,即對(duì)于操作者、操作內(nèi)容進(jìn)行監(jiān)控,獲得執(zhí)行方法時(shí)的相關(guān)參數(shù)。該部分運(yùn)用到的AOP技術(shù)主要是基于Spring AOP所實(shí)現(xiàn)的。通過切面類定義獲得整個(gè)Web應(yīng)用程序執(zhí)行方法的切面,并對(duì)于其中的方法名,操作對(duì)象,返回值等一系列要素進(jìn)行檢測(cè)提取,以便于數(shù)據(jù)過濾層對(duì)其監(jiān)控到的方法的相關(guān)數(shù)據(jù)進(jìn)行篩選操作。
該層位于架構(gòu)的中間層,主要作用是對(duì)從監(jiān)控層獲取的監(jiān)控信息進(jìn)行過濾,主要通過布隆算法[8-9]來實(shí)現(xiàn)數(shù)據(jù)過濾。另外需要構(gòu)建一個(gè)規(guī)則庫(kù),對(duì)于監(jiān)控層所提交過來的數(shù)據(jù)進(jìn)行規(guī)則匹配,只有滿足規(guī)則庫(kù)中規(guī)則的方法,才能繼續(xù)傳遞到邏輯表現(xiàn)層,進(jìn)行表現(xiàn)輸出。同時(shí)提供接口供開發(fā)人員自行定義規(guī)則來選擇需要監(jiān)控的方法,用以提高該軟件缺陷檢測(cè)框架的擴(kuò)展性,具體過程如圖3所示。
圖3 數(shù)據(jù)過濾層原理圖
1)實(shí)現(xiàn)數(shù)據(jù)去冗余功能
通過布隆算法去除冗余,相比于其它的數(shù)據(jù)結(jié)構(gòu),布隆過濾器在空間和時(shí)間方面都有巨大的優(yōu)勢(shì)。布隆過濾器存儲(chǔ)空間和插入/查詢時(shí)間都是常數(shù)[10]。布隆過濾器不需要存儲(chǔ)元素本身,在某些對(duì)保密要求非常嚴(yán)格的場(chǎng)合有優(yōu)勢(shì)。
由于該軟件缺陷檢測(cè)框架是屬于B/S的架構(gòu),所以在同一時(shí)刻可能有不同的用戶對(duì)于同一方法進(jìn)行訪問,或者是同一用戶由于操作失誤使得項(xiàng)目工程多次執(zhí)行同一個(gè)方法,從而造成監(jiān)控?cái)?shù)據(jù)產(chǎn)生大量冗余。運(yùn)用布隆過濾器,對(duì)于以上的情況進(jìn)行過濾。通過將相鄰極短時(shí)間的多次同一用戶對(duì)于同一方法的執(zhí)行數(shù)據(jù)作為冗余數(shù)據(jù),對(duì)其進(jìn)行篩選過濾,只保留其中固定的一部分。
2)實(shí)現(xiàn)數(shù)據(jù)規(guī)則匹配功能
主要對(duì)于方法監(jiān)控層傳來的方法數(shù)據(jù)是否需要監(jiān)控進(jìn)行判定,通過與規(guī)則庫(kù)中已經(jīng)指定的規(guī)則進(jìn)行匹配,得出對(duì)該方法數(shù)據(jù)是需要監(jiān)控還是丟棄的判定。本文使用KMP算法[11-13]實(shí)現(xiàn)字符串匹配,通過讀取存儲(chǔ)在數(shù)據(jù)庫(kù)中的規(guī)則,進(jìn)行依次匹配,篩選出符合規(guī)則的方法保留下來,否則將數(shù)據(jù)丟棄。通過分析目標(biāo)字符串,預(yù)先計(jì)算出每個(gè)位置發(fā)生不匹配時(shí)所需GOTO的下一個(gè)比較位置,整理出來一個(gè)next數(shù)組。
由于本文所研究的軟件缺陷檢測(cè)框架,其應(yīng)用范圍不僅針對(duì)于軟件開發(fā)人員,還針對(duì)于普通用戶以及一般的網(wǎng)絡(luò)管理員的日常監(jiān)管和使用,所以在該層中,需要對(duì)過濾層過濾后的數(shù)據(jù)進(jìn)行處理封裝歸類,使之可以更加直觀的呈現(xiàn)在用戶的面前。需要使該框架的應(yīng)用更具有普適性,用戶不需要去閱讀大量的傳統(tǒng)Web日志文件,而是直接對(duì)于經(jīng)過過濾后的被監(jiān)控方法到底因何種操作,發(fā)生了什么結(jié)果,給予檢測(cè)顯示結(jié)果。對(duì)于軟件運(yùn)行中出現(xiàn)的軟件缺陷進(jìn)行合理分類,可根據(jù)軟件缺陷的級(jí)別將其分為嚴(yán)重,中等,低3個(gè)級(jí)別,便于開發(fā)人員按照優(yōu)先級(jí)和嚴(yán)重程度進(jìn)行修改和調(diào)試。該邏輯表現(xiàn)層的配置主要需要配置兩點(diǎn)內(nèi)容,其中包括軟件缺陷的直觀顯示和軟件缺陷的分級(jí)定義。
1)針對(duì)需要進(jìn)行缺陷檢測(cè)的Web系統(tǒng),定義一個(gè)配置文件,記錄下其每一個(gè)方法對(duì)應(yīng)的描述以及其設(shè)計(jì)操作參數(shù)。在獲得數(shù)據(jù)過濾層的數(shù)據(jù)后,取得監(jiān)控到的方法,在該層中與其描述相匹配。根據(jù)匹配后的結(jié)果對(duì)原始數(shù)據(jù)進(jìn)行轉(zhuǎn)譯,使得最后呈現(xiàn)出的缺陷結(jié)果可以更為直觀。
2)依據(jù)具體被監(jiān)控方法按照表1進(jìn)行分類,為所有監(jiān)控的方法添加所屬分類,使整個(gè)軟件缺陷檢測(cè)框架的顯示結(jié)果一目了然,便于程序開發(fā)人員針對(duì)問題具體出現(xiàn)的優(yōu)先級(jí)進(jìn)行修改調(diào)試。其將缺陷檢測(cè)日志存入數(shù)據(jù)庫(kù)中。
表1 缺陷類別定義表
該實(shí)例是基于為某研究所開發(fā)的一個(gè)項(xiàng)目信息管理平臺(tái)的安全子系統(tǒng)。由于該系統(tǒng)的特殊背景,使其存在組角色和根角色,在業(yè)務(wù)和管理上可能有所不同,一個(gè)用戶可能對(duì)應(yīng)多個(gè)角色。由于系統(tǒng)的復(fù)雜度高,業(yè)務(wù)邏輯強(qiáng),所以程序員在編碼的過程中可能殘留有影響軟件正常使用的多角色的訪問控制不當(dāng),程序邏輯錯(cuò)誤等軟件缺陷[14],需要監(jiān)控用戶的使用行為,記錄下他們的操作行為,需要記錄{時(shí)間、空間、主體、客體/對(duì)象、行為、結(jié)果}??紤]到軟件日常使用過程中可能遇到的幾個(gè)主要缺陷問題,對(duì)于可能出現(xiàn)軟件缺陷的模塊進(jìn)行了測(cè)試。為了更加貼近真實(shí)環(huán)境,所以在項(xiàng)目中有意識(shí)的預(yù)留了幾個(gè)不同級(jí)別的有代表性的軟件缺陷[15],用以測(cè)試該軟件缺陷檢測(cè)框架的可用性。
通過刪除項(xiàng)目用例對(duì)于軟件中存在的參數(shù)格式的軟件缺陷進(jìn)行監(jiān)控,此設(shè)計(jì)用例的前提條件是,在按照項(xiàng)目標(biāo)號(hào)刪除項(xiàng)目的方法中,應(yīng)該使用字符串作為輸入?yún)?shù)而軟件實(shí)現(xiàn)時(shí)采用的整型作為參數(shù)輸入的情況。該用例的設(shè)計(jì)旨在測(cè)試該軟件缺陷檢測(cè)[16]框架對(duì)于B類缺陷,即參數(shù)輸入控制有誤上是否能夠?qū)崿F(xiàn)其預(yù)期的檢測(cè)功能,具體的測(cè)試用例設(shè)計(jì)如表2。
表2 刪除項(xiàng)目用例
通過運(yùn)行測(cè)試用例的結(jié)果可以看出,本文提出的基于AOP的軟件缺陷檢測(cè)框架對(duì)于系統(tǒng)邏輯混亂,從而造成的權(quán)限控制異常,可以實(shí)現(xiàn)缺陷檢測(cè),對(duì)于未授予權(quán)限的用戶越權(quán)操作漏洞能夠有效的監(jiān)控。程序本身存在易造成程序崩潰的軟件缺陷,可以進(jìn)行監(jiān)控,并且進(jìn)行提示。對(duì)于上面嚴(yán)重的軟件缺陷,該框架在檢測(cè)的過程中能達(dá)到預(yù)期效果。
另外,對(duì)于軟件缺陷嚴(yán)重程度僅次于A的B、C類軟件缺陷,該軟件缺陷檢測(cè)框架也能夠判斷出其是否符合具體預(yù)期效果,從而在程序運(yùn)行的過程中,對(duì)于由于開發(fā)中疏忽所產(chǎn)生的B、C類缺陷進(jìn)行相應(yīng)的檢測(cè)和記錄。
圖4 測(cè)試用例結(jié)果
Web應(yīng)用隨互聯(lián)網(wǎng)得到了快速發(fā)展,隨著市場(chǎng)和用戶需求越來越多,其結(jié)構(gòu)和功能變得愈加復(fù)雜,如何保證Web產(chǎn)品的質(zhì)量成為一個(gè)重要的課題。本文設(shè)計(jì)提出了一種基于AOP的軟件缺陷檢測(cè)框架,提出了一種針對(duì)Web軟件缺陷的測(cè)試方案。該方案基于AOP軟件缺陷檢測(cè)框架[17],通過在真實(shí)的使用環(huán)境下對(duì)于用戶操作的監(jiān)控,實(shí)現(xiàn)各種復(fù)雜的測(cè)試任務(wù)。本文所設(shè)計(jì)的數(shù)據(jù)過濾層,對(duì)于數(shù)據(jù)的過濾主要采用布隆過濾器,這一點(diǎn)節(jié)省了空間,提高了程序運(yùn)行效率,但是在數(shù)據(jù)的規(guī)則匹配中,仍然采用傳統(tǒng)的字符串匹配的算法。在以后的工作中,爭(zhēng)取對(duì)于這一方面再進(jìn)行優(yōu)化,運(yùn)用更為合理的數(shù)據(jù)結(jié)構(gòu)和算法減少其時(shí)間和空間消耗。
[1]杜珂.軟件缺陷管理及缺陷跟蹤系統(tǒng)研究[D].西安:西安電子科技大學(xué),2006.
[2]王衛(wèi)蔚.以WEB為基礎(chǔ)探討系統(tǒng)防御框架的構(gòu)建[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2015(10):79-79.
[3]張逸.AOP技術(shù)研究及其在.Net中的實(shí)現(xiàn)[D].成都:四川大學(xué),2005.
[4]Introducing Spring AOP[C]//Pro Spring 2.5.Apress,2008:147-197.
[5]Liang X,Xue B,Huang M,et al.Application of join points management mechanism in spring in AOP[C]//International Conference on Computer Science and Network Technology.IEEE,2014.
[6]溫沁潤(rùn),王英杰,劉秀海.基于SpringAOP和AspectJ的工作流實(shí)現(xiàn)[J].統(tǒng)計(jì)與管理,2013(2):169.
[7]林恒建.Spring基于XML配置文件的AOP[J].福建電腦,2012,28(11):160-161.
[8]Lu J,Yang T,Wang Y,et al.One-hashing bloom filter[C]//IEEE,International Symposium on Quality of Service.IEEE,2015.
[9]黃濤.布隆過濾器在網(wǎng)頁(yè)去重中的研究與應(yīng)用[D].大連:大連海事大學(xué),2013.
[10]王鵬超,杜慧敏,曹廣界,等.基于布隆過濾器的精確匹配算法設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)科學(xué),2015,42(S1):429-434.
[11]魯宏偉,魏凱,孔華鋒.一種改進(jìn)的KMP高效模式匹配算法[J].華中科技大學(xué)學(xué)報(bào):自然科學(xué)版,2006,34(10):41-43.
[12]湯亞玲,安徽.KMP算法中next數(shù)組的計(jì)算方法研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,2009,19(6):98-101.
[13]李莉,江育娥,林劼,等.基于KMP算法的改進(jìn)算法KMPP[J].計(jì)算機(jī)工程與應(yīng)用,2016(8):33-37.
[14]李沖.基于WEB的多角色協(xié)同工作的軟件配置項(xiàng)管理系統(tǒng)[D].南京:南京理工大學(xué)圖書館,2012.
[15]Jiang Y,Member,Li M,et al.Software defect detection with ROCUS[J].Journal of Computer Science&Technology,2011,26(2):328-342.
[16]張勇,管聲啟.基于小波提升分解的帶鋼表面缺陷檢測(cè)[J].西安工程大學(xué)學(xué)報(bào),2013,27(4):483-487.
[17]周戀玲,張靜.PCB板缺陷檢測(cè)中圖像配準(zhǔn)技術(shù)研究[J].電子設(shè)計(jì)工程,2016,24(3):166-168.
Design and implementation of software defects monitoring framework based on AOP
BIAN Wei-cheng
(Jiangsu Information Center,Nanjing 210013,China)
As the expanding of software size,software quality becomes the focus of software companies.How to reduce software defects and improve software reliability is the eternal theme that all software developers to pursue.This paper designs and proposes a new framework for software defects based on AOP.It consists of the method of monitoring layer,data filtering and logical presentation layer.It transfers data with bottom-up methods.It can achieve real-time monitoring,custom monitoring rules and displaying different types of defects in accordance with the defect level.At last,integrating it with actual program,the design of test case,test result indicates that the experiments proves the feasibility of the framework.
software defects; AOP; software quality; monitoring framework
TN0
A
1674-6236(2017)16-0027-05
2016-06-17稿件編號(hào):201606117
邊偉成(1963—),男,浙江諸暨人,高級(jí)工程師。研究方向:電子政務(wù)網(wǎng)絡(luò)安全、網(wǎng)站、數(shù)據(jù)中心及大數(shù)據(jù)、機(jī)房環(huán)境等。