邊偉成
(江蘇省信息中心 江蘇 南京 210013)
基于AOP的軟件缺陷監測框架的設計與實現
邊偉成
(江蘇省信息中心 江蘇 南京 210013)
隨著軟件規模的不斷擴大,軟件質量越發成為軟件開發企業關注的重點。關于如何減少軟件缺陷,提高軟件可靠性是所有軟件開發者追求的永恒主題。本文基于AOP技術設計和提出了一種新的軟件缺陷檢測框架,其具體由方法監控層、數據過濾層和邏輯表現層組成,自底向上傳遞數據。該框架可實現軟件方法的實時監控、自定義監控規則、對于缺陷按照嚴重等級進行分類顯示等功能。最后通過與實際項目相整合,設計測試用例,測試結果表明本文提出的框架具有可行性。
軟件缺陷;AOP;軟件質量;監測框架
隨著互聯網技術的高速發展,Web類應用軟件發展趨勢迅猛。由于Web類應用軟件產品更新頻率高、測試周期短、使用范圍廣,在實際的Web軟件開發過程中,往往或多或少的會存在軟件缺陷[1-2],因此需要一套可靠的軟件缺陷檢測框架對開發過程中遺留的疏漏進行有效的監控。因此本文研究的主要目的就是針對Web應用提出一套具有易用性,可操作性,可維護性和可擴展性的軟件缺陷檢測框架。其可以實現在不破壞原有軟件項目工程的基礎上,嫁接到軟件工程之上,使其具有缺陷檢測的功能。
文中的主要貢獻是基于AOP技術設計和提出了一種新的軟件缺陷檢測框架。該框架由監控層,數據過濾層和邏輯表現層組成。每個層次結構分工明確,自底向上傳遞數據,其相比于一般軟件缺陷檢測軟件具有可操作,去冗余,可定制,結果易于理解等優勢。在缺陷檢測的過程中,web項目可能出現方法檢測信息冗余,運用布隆算法對其進行了數據過濾的過程,其相比較于一般算法,節省了大量空間,去除了在缺陷檢測過程中的冗余數據。最后針對一個實際應用的項目,運用本文設計的軟件缺陷檢測框架進行了整合,通過預留一定的軟件缺陷,設計了幾個測試用例對測試結果進行詳細的分析,驗證了該框架的實用性。
AOP(Aspect-Oriented Programming)技術[3-4],即面向方面編程技術,是對于面向對象編程(OOP)技術的完善和彌補。AOP通過一種“橫切”技術將對象內部解剖開來,從而將公共行為的多個類的重復代碼封裝到同一個模塊之中得到一個可重用模塊,叫做方面,即“Aspect”。所謂“方面”[5]就是將那些與系統核心業務無關但卻被業務模塊共同調用所封裝起來的類,這樣就可以大大減少代碼冗余,使得各個模塊之間的耦合度降低,實現對于系統可操作性和可維護性的提升。AOP主要應用于權限驗證、日志管理、事務響應處理等。
各種技術雖然都是實現AOP技術,并且都實現了AOP技術的各項技術指標,但不同的AOP工具在底層機制上卻是大相徑庭。本文主要采用的是Spring AOP 技術[6]。
Spring AOP技術是整個Spring框架當中的一部分,其也能夠作為一個獨立模塊而存在。從本質上來講,Spring AOP通過運用動態代理技術來實現了AOP。它的具體體現形式是利用IoC的機制,并且整合利用了AOP聯盟中的通用AOP接口。在運用Spring AOP來實現AOP時,首先需要對于其spring的 xml配置文件添加配置pointcut,然后利用Spring中的Interceptor作為觸發條件[7]。開發者可以自由定義切面類,Interceptor的實現類似于實現AOP的advice,開發人員在進行Interceptor的開發過程中,需要實現通用的AOP接口。
與大多數軟件框架不同,本文設計的基于AOP的軟件缺陷檢測框架可以在編碼階段之外將其添加到項目工程當中,在不影響原先設計邏輯的情況下,發現軟件在運行過程中遇到的缺陷和異常。其具有監控方法、獲取數據、數據過濾、缺陷分類、轉譯顯示等功能。
該軟件缺陷檢測框架主要針對B/S架構的Web軟件所開發,可針對不同的軟件缺陷進行檢測和記錄,其主要由方法監控層、數據過濾層和邏輯表現層三層結構構成,如圖1所示。

圖1 總體框架圖
方法監控層位于架構最底層,主要通過AOP技術獲得執行的方法剖面。再對切點的前后進行操作,記錄下方法的相關信息,其中主要包括方法名、執行參數、返回值、操作者屬性和操作結果等,原理如圖2所示。

圖2 方法監控層原理圖
在AOP編程中,對業務邏輯的各個部分進行隔離,監控每個方法所操作的主體和客體,即對于操作者、操作內容進行監控,獲得執行方法時的相關參數。該部分運用到的AOP技術主要是基于Spring AOP所實現的。通過切面類定義獲得整個Web應用程序執行方法的切面,并對于其中的方法名,操作對象,返回值等一系列要素進行檢測提取,以便于數據過濾層對其監控到的方法的相關數據進行篩選操作。
該層位于架構的中間層,主要作用是對從監控層獲取的監控信息進行過濾,主要通過布隆算法[8-9]來實現數據過濾。另外需要構建一個規則庫,對于監控層所提交過來的數據進行規則匹配,只有滿足規則庫中規則的方法,才能繼續傳遞到邏輯表現層,進行表現輸出。同時提供接口供開發人員自行定義規則來選擇需要監控的方法,用以提高該軟件缺陷檢測框架的擴展性,具體過程如圖3所示。

圖3 數據過濾層原理圖
1)實現數據去冗余功能
通過布隆算法去除冗余,相比于其它的數據結構,布隆過濾器在空間和時間方面都有巨大的優勢。布隆過濾器存儲空間和插入/查詢時間都是常數[10]。布隆過濾器不需要存儲元素本身,在某些對保密要求非常嚴格的場合有優勢。
由于該軟件缺陷檢測框架是屬于B/S的架構,所以在同一時刻可能有不同的用戶對于同一方法進行訪問,或者是同一用戶由于操作失誤使得項目工程多次執行同一個方法,從而造成監控數據產生大量冗余。運用布隆過濾器,對于以上的情況進行過濾。通過將相鄰極短時間的多次同一用戶對于同一方法的執行數據作為冗余數據,對其進行篩選過濾,只保留其中固定的一部分。
2)實現數據規則匹配功能
主要對于方法監控層傳來的方法數據是否需要監控進行判定,通過與規則庫中已經指定的規則進行匹配,得出對該方法數據是需要監控還是丟棄的判定。本文使用KMP算法[11-13]實現字符串匹配,通過讀取存儲在數據庫中的規則,進行依次匹配,篩選出符合規則的方法保留下來,否則將數據丟棄。通過分析目標字符串,預先計算出每個位置發生不匹配時所需GOTO的下一個比較位置,整理出來一個next數組。
由于本文所研究的軟件缺陷檢測框架,其應用范圍不僅針對于軟件開發人員,還針對于普通用戶以及一般的網絡管理員的日常監管和使用,所以在該層中,需要對過濾層過濾后的數據進行處理封裝歸類,使之可以更加直觀的呈現在用戶的面前。需要使該框架的應用更具有普適性,用戶不需要去閱讀大量的傳統Web日志文件,而是直接對于經過過濾后的被監控方法到底因何種操作,發生了什么結果,給予檢測顯示結果。對于軟件運行中出現的軟件缺陷進行合理分類,可根據軟件缺陷的級別將其分為嚴重,中等,低3個級別,便于開發人員按照優先級和嚴重程度進行修改和調試。該邏輯表現層的配置主要需要配置兩點內容,其中包括軟件缺陷的直觀顯示和軟件缺陷的分級定義。
1)針對需要進行缺陷檢測的Web系統,定義一個配置文件,記錄下其每一個方法對應的描述以及其設計操作參數。在獲得數據過濾層的數據后,取得監控到的方法,在該層中與其描述相匹配。根據匹配后的結果對原始數據進行轉譯,使得最后呈現出的缺陷結果可以更為直觀。
2)依據具體被監控方法按照表1進行分類,為所有監控的方法添加所屬分類,使整個軟件缺陷檢測框架的顯示結果一目了然,便于程序開發人員針對問題具體出現的優先級進行修改調試。其將缺陷檢測日志存入數據庫中。

表1 缺陷類別定義表
該實例是基于為某研究所開發的一個項目信息管理平臺的安全子系統。由于該系統的特殊背景,使其存在組角色和根角色,在業務和管理上可能有所不同,一個用戶可能對應多個角色。由于系統的復雜度高,業務邏輯強,所以程序員在編碼的過程中可能殘留有影響軟件正常使用的多角色的訪問控制不當,程序邏輯錯誤等軟件缺陷[14],需要監控用戶的使用行為,記錄下他們的操作行為,需要記錄{時間、空間、主體、客體/對象、行為、結果}。考慮到軟件日常使用過程中可能遇到的幾個主要缺陷問題,對于可能出現軟件缺陷的模塊進行了測試。為了更加貼近真實環境,所以在項目中有意識的預留了幾個不同級別的有代表性的軟件缺陷[15],用以測試該軟件缺陷檢測框架的可用性。
通過刪除項目用例對于軟件中存在的參數格式的軟件缺陷進行監控,此設計用例的前提條件是,在按照項目標號刪除項目的方法中,應該使用字符串作為輸入參數而軟件實現時采用的整型作為參數輸入的情況。該用例的設計旨在測試該軟件缺陷檢測[16]框架對于B類缺陷,即參數輸入控制有誤上是否能夠實現其預期的檢測功能,具體的測試用例設計如表2。

表2 刪除項目用例
通過運行測試用例的結果可以看出,本文提出的基于AOP的軟件缺陷檢測框架對于系統邏輯混亂,從而造成的權限控制異常,可以實現缺陷檢測,對于未授予權限的用戶越權操作漏洞能夠有效的監控。程序本身存在易造成程序崩潰的軟件缺陷,可以進行監控,并且進行提示。對于上面嚴重的軟件缺陷,該框架在檢測的過程中能達到預期效果。
另外,對于軟件缺陷嚴重程度僅次于A的B、C類軟件缺陷,該軟件缺陷檢測框架也能夠判斷出其是否符合具體預期效果,從而在程序運行的過程中,對于由于開發中疏忽所產生的B、C類缺陷進行相應的檢測和記錄。

圖4 測試用例結果
Web應用隨互聯網得到了快速發展,隨著市場和用戶需求越來越多,其結構和功能變得愈加復雜,如何保證Web產品的質量成為一個重要的課題。本文設計提出了一種基于AOP的軟件缺陷檢測框架,提出了一種針對Web軟件缺陷的測試方案。該方案基于AOP軟件缺陷檢測框架[17],通過在真實的使用環境下對于用戶操作的監控,實現各種復雜的測試任務。本文所設計的數據過濾層,對于數據的過濾主要采用布隆過濾器,這一點節省了空間,提高了程序運行效率,但是在數據的規則匹配中,仍然采用傳統的字符串匹配的算法。在以后的工作中,爭取對于這一方面再進行優化,運用更為合理的數據結構和算法減少其時間和空間消耗。
[1]杜珂.軟件缺陷管理及缺陷跟蹤系統研究[D].西安:西安電子科技大學,2006.
[2]王衛蔚.以WEB為基礎探討系統防御框架的構建[J].網絡安全技術與應用,2015(10):79-79.
[3]張逸.AOP技術研究及其在.Net中的實現[D].成都:四川大學,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]溫沁潤,王英杰,劉秀海.基于SpringAOP和AspectJ的工作流實現[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]黃濤.布隆過濾器在網頁去重中的研究與應用[D].大連:大連海事大學,2013.
[10]王鵬超,杜慧敏,曹廣界,等.基于布隆過濾器的精確匹配算法設計與實現[J].計算機科學,2015,42(S1):429-434.
[11]魯宏偉,魏凱,孔華鋒.一種改進的KMP高效模式匹配算法[J].華中科技大學學報:自然科學版,2006,34(10):41-43.
[12]湯亞玲,安徽.KMP算法中next數組的計算方法研究[J].計算機技術與發展,2009,19(6):98-101.
[13]李莉,江育娥,林劼,等.基于KMP算法的改進算法KMPP[J].計算機工程與應用,2016(8):33-37.
[14]李沖.基于WEB的多角色協同工作的軟件配置項管理系統[D].南京:南京理工大學圖書館,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]張勇,管聲啟.基于小波提升分解的帶鋼表面缺陷檢測[J].西安工程大學學報,2013,27(4):483-487.
[17]周戀玲,張靜.PCB板缺陷檢測中圖像配準技術研究[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稿件編號:201606117
邊偉成(1963—),男,浙江諸暨人,高級工程師。研究方向:電子政務網絡安全、網站、數據中心及大數據、機房環境等。