王 超 ,張德明 ,徐 偉 ,宋 欣
(1.中國(guó)鐵道科學(xué)研究院集團(tuán)有限公司 通信信號(hào)研究所,北京 100081;2.軌道交通系統(tǒng)國(guó)家測(cè)試工程實(shí)驗(yàn)室,北京 100081)
隨著鐵路行業(yè)的快速發(fā)展,相關(guān)軟件的安全性問題已經(jīng)成為人們關(guān)注的重點(diǎn)。鐵路行業(yè)發(fā)生的一些重大事故,大部分與相關(guān)系統(tǒng)的軟件缺陷有關(guān)。而系統(tǒng)的缺陷會(huì)隨著軟件復(fù)雜度的增加呈指數(shù)級(jí)上升,這也直接提高了軟件測(cè)試的難度和成本。軟件測(cè)試的實(shí)際應(yīng)用和理論研究都有廣闊的市場(chǎng)前景。
美國(guó)軟件工程實(shí)驗(yàn)室制定了軟件度量模型與標(biāo)準(zhǔn)[1-3],用于指導(dǎo)美國(guó)航空航天局(NASA)的軟件開發(fā)并作為產(chǎn)品軟件安全與任務(wù)的保障。城市軌道交通領(lǐng)域的國(guó)產(chǎn)列車自動(dòng)控制系統(tǒng)(CBTC,Communication Based Train Control System)軟件有其自身的度量特性,并不完全適合應(yīng)用此標(biāo)準(zhǔn)?,F(xiàn)階段,國(guó)產(chǎn)CBTC 軟件測(cè)試存在大量頻繁迭代和建模過程,會(huì)產(chǎn)生海量的計(jì)算任務(wù),缺少針對(duì)相應(yīng)軟件測(cè)試系統(tǒng)的大數(shù)據(jù)[4-5]分布式計(jì)算[6-7]領(lǐng)域的研究。此外,國(guó)產(chǎn)CBTC 軟件測(cè)試系統(tǒng)對(duì)于復(fù)雜度各異的測(cè)試項(xiàng)目,存在測(cè)試方案繁瑣,測(cè)試成本過高,測(cè)試與開發(fā)溝通效率過低等諸多問題,缺少一種集成度較高的智能解決方案。本文提出的基于大數(shù)據(jù)計(jì)算模型的CBTC 軟件智能測(cè)試系統(tǒng)可以較好地解決上述問題。
本文基于多元線性回歸構(gòu)建軟件度量模型[8-10]。本模型采用國(guó)產(chǎn)CBTC 應(yīng)用項(xiàng)目的歷史數(shù)據(jù),參考鐵路控制和防護(hù)系統(tǒng)軟件標(biāo)準(zhǔn)EN50128,鐵路應(yīng)用可靠性、可用性、可維護(hù)性、安全性技術(shù)條件和驗(yàn)證標(biāo)準(zhǔn)EN50126,工業(yè)標(biāo)準(zhǔn)化編程規(guī)范MISRA-C。利用統(tǒng)計(jì)學(xué)方法,制定滿足國(guó)產(chǎn)CBTC 的軟件代碼質(zhì)量參數(shù)標(biāo)準(zhǔn),并對(duì)其中每個(gè)參數(shù)的影響因子與影響系數(shù)進(jìn)行定量分析,實(shí)現(xiàn)對(duì)實(shí)際工程項(xiàng)目軟件質(zhì)量各項(xiàng)指標(biāo)的細(xì)化評(píng)價(jià),便于測(cè)試與開發(fā)人員對(duì)影響軟件代碼質(zhì)量的參數(shù)進(jìn)行預(yù)測(cè)與調(diào)整。
多元線性回歸度量模型由使用因數(shù)、度量項(xiàng)、度量結(jié)果3 級(jí)結(jié)構(gòu)構(gòu)成,通過選擇各級(jí)評(píng)價(jià)因素及其加權(quán)值的方法來(lái)考察多個(gè)變量間的相關(guān)性與強(qiáng)度,對(duì)被測(cè)軟件及其子程序進(jìn)行評(píng)價(jià)。評(píng)價(jià)軟件質(zhì)量特性公式為:
其中,Q為質(zhì)量特性;M表示軟件質(zhì)量特性的使用因數(shù)數(shù)量;Vj為第j個(gè)使用因數(shù)的權(quán)重;Nj表示屬于第j個(gè)使用因數(shù)的質(zhì)量度量項(xiàng)的總項(xiàng)數(shù);Wi表示當(dāng)前度量項(xiàng)i的權(quán)重,同一特征下所有度量元權(quán)重之和為1;Xi表示當(dāng)前度量項(xiàng)i的度量結(jié)果。
在實(shí)際的軟件測(cè)試項(xiàng)目中,往往需要對(duì)多個(gè)軟件模塊或?qū)浖K內(nèi)部的多函數(shù)質(zhì)量特性進(jìn)行評(píng)估,發(fā)現(xiàn)強(qiáng)耦合等軟件質(zhì)量問題,需要引入多級(jí)軟件質(zhì)量評(píng)估。評(píng)價(jià)軟件質(zhì)量特性公式為:
其中,Qg為多級(jí)軟件質(zhì)量特性;1 ≤g≤m;m為多級(jí)評(píng)估模塊的數(shù)量;M、N、P分別為軟件質(zhì)量特性的使用因數(shù)數(shù)量;R、S、T分別為當(dāng)前使用因數(shù)的質(zhì)量度量項(xiàng)的項(xiàng)數(shù)。
1.2.1 度量分類
本文根據(jù)EN50128、EN50126、MISRA-C 標(biāo)準(zhǔn)的要求,結(jié)合CBTC 的實(shí)際軟件設(shè)計(jì)需求和項(xiàng)目測(cè)試數(shù)據(jù)的影響分析,制定模型的軟件質(zhì)量評(píng)價(jià)標(biāo)準(zhǔn),分類為可測(cè)試性、可維護(hù)性、清晰性。表1 為廣州7號(hào)線CBTC 車載軟件質(zhì)量部分度量標(biāo)準(zhǔn)。
表1 廣州7號(hào)線CBTC車載軟件質(zhì)量部分度量標(biāo)準(zhǔn)
1.2.2 度量結(jié)果
本文以廣州7 號(hào)線CBTC 車載軟件的filter.c 模塊為例,對(duì)其中9 個(gè)函數(shù)的10 項(xiàng)軟件質(zhì)量度量參數(shù)進(jìn)行分析,如表2 所示,表中,P 表示該項(xiàng)符合標(biāo)準(zhǔn),F(xiàn) 表示該項(xiàng)不符合標(biāo)準(zhǔn)。
由于開發(fā)測(cè)試階段存在的迭代過程,在軟件實(shí)際測(cè)試過程中,需要頻繁修改代碼,這些并行處理的測(cè)試任務(wù)的代碼量甚至可以達(dá)到百萬(wàn)級(jí)代碼行。由軟件質(zhì)量度量模型的構(gòu)建過程可知,涉及到的評(píng)估參數(shù)數(shù)量和評(píng)估對(duì)象的數(shù)量巨大,對(duì)這些評(píng)估參數(shù)的計(jì)算過程會(huì)占用大量的運(yùn)算資源。
表2 廣州7號(hào)線CBTC車載軟件filter.c模塊軟件質(zhì)量度量結(jié)果
把測(cè)試任務(wù)運(yùn)行在單一服務(wù)器組的傳統(tǒng)工作方式已經(jīng)不能滿足海量數(shù)據(jù)的運(yùn)算與測(cè)試需求。所以本文針對(duì)軟件測(cè)試中存在的海量數(shù)據(jù)復(fù)雜計(jì)算問題,基于開源Hadoop 軟件體系架構(gòu)[11-14],提出Distributed_Metrics 方法,并搭建Hadoop 服務(wù)器測(cè)試集群[15-16],將業(yè)務(wù)處理邏輯在集群內(nèi)并行執(zhí)行,實(shí)現(xiàn)高效快速的軟件質(zhì)量度量模型運(yùn)算。
2.1.1 測(cè)試數(shù)據(jù)切片
用戶提交測(cè)試文件到Hadoop 服務(wù)器集群目錄文件中,集群中的客戶端程序會(huì)掃描磁盤中的目錄文件,遍歷其中需要測(cè)試的每個(gè)文件,并根據(jù)預(yù)先配置的參數(shù),進(jìn)行測(cè)試數(shù)據(jù)切片。本文以廣州7 號(hào)線CBTC 車載軟件filter.c 模塊為例進(jìn)行測(cè)試數(shù)據(jù)切片,如圖1 所示。
圖1 CBTC車載軟件測(cè)試數(shù)據(jù)切片
集群中的MRAppMaster 節(jié)點(diǎn)會(huì)根據(jù)切片文件的大小自動(dòng)啟動(dòng)集群中的maptask,并把切片按照規(guī)則分組到指定的maptask 中去,如圖2 所示。
圖2 數(shù)據(jù)切片劃分
Distributed_Metrics-Map 方法對(duì)數(shù)據(jù)進(jìn)行分布式切片分組的流程如下。輸入?yún)?shù):待處理文件f。輸出結(jié)果:分組數(shù)據(jù)m。開始:
(1)上傳文件f到測(cè)試服務(wù)器集群;
(2)服務(wù)器集群?jiǎn)?dòng)客戶端程序掃描磁盤目錄;
(3)遍歷目錄,查看是否存在新的需要切片的文件,如果不存在,則流程結(jié)束,否則繼續(xù)下一步;
(4)根據(jù)配置參數(shù)遍歷f文件,對(duì)其進(jìn)行切片,如果切片完成,則轉(zhuǎn)到步驟(3),否則繼續(xù)下一步;
(5)利用MRAppMaster 節(jié)點(diǎn)將切片文件分配到相應(yīng)的maptask 中去;
(6)轉(zhuǎn)到步驟(4);流程結(jié)束。
2.1.2 測(cè)試數(shù)據(jù)緩存區(qū)優(yōu)化
軟件質(zhì)量度量評(píng)估的運(yùn)算復(fù)雜度主要取決于評(píng)估矩陣中各元素的統(tǒng)計(jì)方式和其相應(yīng)的計(jì)算,而評(píng)估矩陣主要的工作是計(jì)算各階段的向量?jī)?nèi)積并進(jìn)行累加。針對(duì)該情況,本文采用key-value 鍵值對(duì)的方式模擬軟件質(zhì)量評(píng)估矩陣的內(nèi)積累加操作。矩陣中每個(gè)元素的位置具有唯一性,標(biāo)記為key 值,相應(yīng)的元素值標(biāo)記為value。每個(gè)矩陣向量都是針對(duì)模塊中某具體函數(shù)進(jìn)行分析,其相應(yīng)的函數(shù)名標(biāo)記為function,則統(tǒng)計(jì)的數(shù)據(jù)格式為(function){key1:value1,key2:value2,…,key n:value n}。
在集群中啟動(dòng)多個(gè)maptask 會(huì)統(tǒng)計(jì)出大量的key-value 鍵值對(duì),為便于后續(xù)的運(yùn)算,本文對(duì)Hadoop 環(huán)形內(nèi)存區(qū)進(jìn)行優(yōu)化,具體優(yōu)化過程如圖3所示。
圖3 環(huán)形內(nèi)存區(qū)優(yōu)化過程
在第1 次寫入點(diǎn)位置將key-value 鍵值對(duì)寫入到環(huán)形緩沖區(qū)中,此時(shí)寫入的鍵值對(duì)是無(wú)序且沒有進(jìn)行分區(qū)處理的。為了最大化利用分布式系統(tǒng)的計(jì)算效率,需要對(duì)環(huán)形內(nèi)存區(qū)的鍵值對(duì)進(jìn)行標(biāo)記分區(qū),對(duì)于不同分區(qū)的數(shù)據(jù)可以分配給集群中的不同節(jié)點(diǎn),從而達(dá)到最大化并行計(jì)算處理的效果。在環(huán)形內(nèi)存區(qū)設(shè)置一個(gè)臨界區(qū)間,例如,將內(nèi)存數(shù)據(jù)達(dá)到總內(nèi)存數(shù)據(jù)量的80%及以上的區(qū)間設(shè)置為臨界區(qū)間,為防止數(shù)據(jù)溢出,會(huì)啟動(dòng)數(shù)據(jù)分區(qū)線程任務(wù)對(duì)鍵值對(duì)進(jìn)行標(biāo)記分區(qū)。
將已經(jīng)處理好的標(biāo)記分區(qū)內(nèi)容寫入本地磁盤并清空分區(qū)數(shù)據(jù)緩沖區(qū)。以第1 次分區(qū)結(jié)束點(diǎn)的位置為起始點(diǎn)開始第2 次寫入數(shù)據(jù),在未進(jìn)入臨界區(qū)間前可以循環(huán)寫入鍵值對(duì)到環(huán)形內(nèi)存區(qū)中。
2.1.3 測(cè)試數(shù)據(jù)哈希分區(qū)
2.1.2 中為每組鍵值對(duì)標(biāo)記了函數(shù)名function,本文提出一種特定的哈希算法對(duì)其進(jìn)行分區(qū)歸類。函數(shù)經(jīng)過分片以后,每個(gè)分片的計(jì)算量很小,不同分片的耗時(shí)差別可以忽略不計(jì),最終影響計(jì)算性能指標(biāo)的是集群中每臺(tái)服務(wù)器的函數(shù)分片總數(shù)量。而對(duì)于同一函數(shù)的不同分片在經(jīng)過哈希算法分區(qū)后必須分到同一分區(qū)進(jìn)行處理,以保持?jǐn)?shù)據(jù)的有效性。這就要求哈希算法盡可能把函數(shù)分片按照合理的方法均分到每臺(tái)服務(wù)器中。由于key-value 中function是非重復(fù)的,本文根據(jù)字母表A-Z、a-z 與ASCII碼表的對(duì)應(yīng)關(guān)系,把所有的函數(shù)名轉(zhuǎn)換為十六進(jìn)制序列,每組序列可以唯一標(biāo)識(shí)函數(shù)名。在哈希分區(qū)的過程中,會(huì)對(duì)每位字母的十六進(jìn)制序列進(jìn)行累加,確保擁有相同function 的分片數(shù)據(jù)可以分到同一分區(qū)中,并盡可能保證集群中分區(qū)的平衡性。廣州7號(hào)線CBTC 車載軟件filter.c 模塊數(shù)據(jù)分區(qū)如表3所示。
表3 廣州7號(hào)線CBTC車載軟件filter.c模塊數(shù)據(jù)分區(qū)
本文對(duì)數(shù)據(jù)切片進(jìn)行哈希分區(qū)的方法Distributed_Metrics-Hash_Partition 流程如下。
輸入?yún)?shù):待處理分組數(shù)據(jù)m。輸出結(jié)果:哈希分區(qū)數(shù)據(jù)h。
開始:
(1)將m寫入到環(huán)形緩沖區(qū);
(2)按照既定順序掃描環(huán)形緩沖區(qū)數(shù)據(jù);
(3)若環(huán)形緩沖區(qū)數(shù)據(jù)未達(dá)到臨界點(diǎn),轉(zhuǎn)到步驟(1),若緩沖區(qū)進(jìn)程結(jié)束,則流程結(jié)束,否則繼續(xù)下一步;
(4)按照ASCII 碼表對(duì)環(huán)形緩沖區(qū)內(nèi)的function進(jìn)行哈希分區(qū);
(5)把分區(qū)完成的數(shù)據(jù)寫入磁盤并清除已完成分區(qū)的數(shù)據(jù);
(6)標(biāo)記環(huán)形緩沖區(qū)新的寫入起始點(diǎn),轉(zhuǎn)到步驟(1);
流程結(jié)束。
經(jīng)過哈希分區(qū)存儲(chǔ)在磁盤中的中間數(shù)據(jù),還需要進(jìn)行key-value 鍵值對(duì)的匯總計(jì)算。因服務(wù)器集群中每臺(tái)機(jī)器都是多線程運(yùn)行的,在進(jìn)行maptask與哈希分區(qū)任務(wù)時(shí),可以在匯總服務(wù)器啟動(dòng)獨(dú)立的reducetask,對(duì)磁盤中的中間結(jié)果數(shù)據(jù)進(jìn)行匯總統(tǒng)計(jì)。
分布式計(jì)算從磁盤文件中按分區(qū)號(hào)一次性讀取相應(yīng)文件到內(nèi)存中,從而避免將相同分區(qū)號(hào)的文件提交給不同reducetask 導(dǎo)致數(shù)據(jù)統(tǒng)計(jì)異常的情況。
本文對(duì)數(shù)據(jù)分布式匯總統(tǒng)計(jì)的方法Distributed_Metrics-Hash_ Reduce 流程如下。
輸入?yún)?shù):待處理的分區(qū)數(shù)據(jù)h。
輸出結(jié)果:軟件質(zhì)量特性Q。
開始:
(1)服務(wù)器啟動(dòng)reducetask;
(2)遍歷磁盤中待處理的分區(qū)數(shù)據(jù)h,如果不存在待處理的分區(qū)數(shù)據(jù)則結(jié)束,否則繼續(xù)下一步;
(3)對(duì)磁盤中待處理的分區(qū)數(shù)據(jù)h進(jìn)行逐行累加計(jì)算;
(4)輸出軟件質(zhì)量特性Q到磁盤,轉(zhuǎn)到步驟(2);
流程結(jié)束。
(1)各子系統(tǒng)的開發(fā)團(tuán)隊(duì)上傳測(cè)試數(shù)據(jù)到各自的SVN 數(shù)據(jù)服務(wù)器。智能測(cè)試系統(tǒng)通過局域網(wǎng)連接到各子系統(tǒng)的SVN 數(shù)據(jù)服務(wù)器并下載相應(yīng)的測(cè)試代碼。
(2)測(cè)試服務(wù)器集群調(diào)用多元線性回歸軟件質(zhì)量度量模型,采用Distributed_Metrics 方法,對(duì)下載的測(cè)試代碼進(jìn)行評(píng)估。對(duì)于不滿足度量模型評(píng)估的測(cè)試代碼,開發(fā)團(tuán)隊(duì)可通過測(cè)試服務(wù)器平臺(tái)提供的可視化圖形交互界面進(jìn)行查詢與修改,對(duì)于滿足評(píng)估指標(biāo)的代碼可進(jìn)行下一階段的測(cè)試。
系統(tǒng)在軟件測(cè)試服務(wù)器中部署的5 類測(cè)試服務(wù)分別為:靜態(tài)測(cè)試服務(wù)、單元測(cè)試服務(wù)、集成測(cè)試服務(wù)、文檔管理服務(wù)和Linux 系統(tǒng)服務(wù)。根據(jù)預(yù)先編寫的服務(wù)器端自動(dòng)化測(cè)試應(yīng)用軟件,智能化地完成大部分的軟件測(cè)試工作并生成測(cè)試文檔。系統(tǒng)架構(gòu)如圖4 所示。
圖4 智能軟件測(cè)試系統(tǒng)架構(gòu)
本文構(gòu)建了適用于CBTC 軟件的多元線性回歸軟件度量模型,解決了NASA 的軟件度量標(biāo)準(zhǔn)并不完全適用于國(guó)產(chǎn)CBTC 軟件的問題;提出一種將Map_Reduce 分組聚合與哈希分區(qū)相結(jié)合的、高效的Distributed_Metrics 方法,可以把海量、復(fù)雜的計(jì)算任務(wù)分配到Hadoop 服務(wù)器集群中進(jìn)行高效并行處理,提高了整個(gè)軟件測(cè)試集群的運(yùn)行效率;搭建了一套涵蓋軟件測(cè)試全生命周期的集成測(cè)試系統(tǒng),可以實(shí)現(xiàn)CBTC 軟件測(cè)試的智能化運(yùn)行。通過實(shí)驗(yàn)分析,該系統(tǒng)能夠合理生成軟件度量模型,對(duì)測(cè)試任務(wù)進(jìn)行分布式并行處理,減少測(cè)試人員重復(fù)性勞動(dòng),提高測(cè)試人員的工作質(zhì)量與效率。下一階段的工作方向是設(shè)計(jì)出適用性更強(qiáng),具有自學(xué)習(xí)能力的軟件度量模型,智能化地發(fā)現(xiàn)軟件質(zhì)量缺陷。