基于CodeTest工具的DCS系統(tǒng)嵌入式測(cè)試設(shè)計(jì)
介紹了CodeTest嵌入式測(cè)試工具廈其在大型DCS系統(tǒng)嵌入式測(cè)試中一種獨(dú)特測(cè)試方案的設(shè)計(jì)和實(shí)現(xiàn)。
本文引用地址:http://2s4d.com/article/80230.htm隨著DCS系統(tǒng)的發(fā)展,迫切需要一種工具能夠在軟件開(kāi)發(fā)的集成階段、系統(tǒng)階段等對(duì)DCS系統(tǒng)的軟件進(jìn)行實(shí)時(shí)在線的測(cè)試與分析,以保證系統(tǒng)的性能和可靠性。
DCS系統(tǒng)長(zhǎng)期運(yùn)行的穩(wěn)定性、實(shí)時(shí)性等特點(diǎn),使得廠家對(duì)其軟件質(zhì)量有著非常苛刻的要求,而DCS系統(tǒng)的分布式特點(diǎn),又使得其集成測(cè)試、系統(tǒng)級(jí)測(cè)試非常困難。本文介紹一種獨(dú)特的DCS分布式系統(tǒng)的測(cè)試方案,對(duì)分布在一個(gè)網(wǎng)絡(luò)中多臺(tái)電腦上的各個(gè)系統(tǒng)模塊(每臺(tái)電腦運(yùn)行多個(gè)系統(tǒng)模塊)同時(shí)測(cè)試,監(jiān)視其覆蓋率、內(nèi)存泄漏、運(yùn)行性能等重要測(cè)試指標(biāo)。測(cè)試工具選用美國(guó)Metrowerks公司的CodeTest嵌入式測(cè)試工具。
1 DCS系統(tǒng)概述
DCS系統(tǒng)一般是物理上分布的控制系統(tǒng),有兩種基本結(jié)構(gòu):總線網(wǎng)結(jié)構(gòu)和星型網(wǎng)結(jié)構(gòu)。有些DCS客戶由于生產(chǎn)規(guī)模小,可能對(duì)系統(tǒng)要求不高,把服務(wù)器、工程師站、操作員站集于一臺(tái)機(jī)器上即可,但就其控制站和上機(jī)系統(tǒng)而言,整個(gè)系統(tǒng)在物理上、邏輯上仍然是分布式的。以總線結(jié)構(gòu)為例,系統(tǒng)結(jié)構(gòu)如圖l所示。
2 CodeTest嵌入式測(cè)試工具概述
CodeTest具有強(qiáng)大的測(cè)試分析功能。
由于CodeTest對(duì)軟件打點(diǎn)技術(shù)和從總線捕獲數(shù)據(jù)進(jìn)行了改善和提升,正是這種原理上的優(yōu)勢(shì),使得CodeTest具有強(qiáng)大的性能分析、內(nèi)存分析、高級(jí)覆蓋率分析和代碼跟蹤功能。
CodeTest工具主要有三個(gè)版本:一個(gè)是純硬件版,由于它不能滿足用戶的需求,早已被淘汰;另外兩個(gè)是純軟件版和硬件輔助軟件版,其中以硬件輔助軟件版最好。
純軟件測(cè)試工具的測(cè)試原理有兩個(gè)必需的任務(wù)——插樁函數(shù)和預(yù)處理任務(wù)。由于插入插樁函數(shù)和預(yù)處理任務(wù)的存在,使系統(tǒng)的代碼增大,對(duì)系統(tǒng)的運(yùn)行效率有一定的影響。但是,隨著CPU速度和存儲(chǔ)技術(shù)不斷提高,純軟件版方案仍然可行。
3 DCS系統(tǒng)嵌入式測(cè)試方案設(shè)計(jì)
由于DCS系統(tǒng)比較復(fù)雜,服務(wù)器上有15個(gè)lib文件、20個(gè)exe任務(wù),操作員站有4個(gè)dll工程和6個(gè)exe任務(wù),這些模塊在管理網(wǎng)層構(gòu)成一個(gè)實(shí)時(shí)運(yùn)行的整體。測(cè)試一個(gè)程序或者一個(gè)測(cè)試用例,必將影響其他任務(wù),例如:在操作員站上寫(xiě)一個(gè)值到I/0控制站,改變一個(gè)閥門的開(kāi)關(guān)狀態(tài),這個(gè)值會(huì)被傳到實(shí)時(shí)數(shù)據(jù)庫(kù),完成操作歷史記錄,然后送到系統(tǒng)網(wǎng)驅(qū)動(dòng),由與I/0站通信的gateway.exe和GatewayMonitor模塊發(fā)到現(xiàn)場(chǎng)控制站。工程師站主要用于離線組態(tài),其dll工程和exe工程一共有十幾個(gè),在進(jìn)行工程組態(tài)時(shí),會(huì)出現(xiàn)多個(gè)模塊同時(shí)運(yùn)行。在下裝時(shí),下裝任務(wù)模塊和服務(wù)器操作員站程序會(huì)同時(shí)運(yùn)行(至少與操作員站、服務(wù)器的守護(hù)程序同時(shí)運(yùn)行),此時(shí),要想把覆蓋率數(shù)據(jù)收集齊全,在以前是非常困難的。因?yàn)闇y(cè)試者的一個(gè)動(dòng)作將會(huì)引起幾臺(tái)機(jī)器上的多個(gè)模塊的代碼執(zhí)行。使用CodeTest測(cè)試工具,運(yùn)用其設(shè)計(jì)巧妙的測(cè)試方案,終于解決了這個(gè)難題。
3.1 純軟件版CodoTest測(cè)試方法
用純軟件版CodeTest工具測(cè)試時(shí),先用CodeTest進(jìn)行插樁(打點(diǎn)),生成exe或者其他可執(zhí)行文件,然后在裝載測(cè)試程序的機(jī)器A上運(yùn)行CodeTest的ctserver.exe,并設(shè)定其收集測(cè)試數(shù)據(jù)的端口,格式如下:
ctserver-p 3050
接著在機(jī)器B上(A和B也可以是同一臺(tái)機(jī)器)運(yùn)行CodeTest Manager(ctmgr),創(chuàng)建workspace,指定插樁文件、內(nèi)存檢查目標(biāo)文件、端口和etserver所在機(jī)器的IP地址,連接ctserver并執(zhí)行。最后在A上運(yùn)行需要測(cè)試的程序C.exe,這樣C.exe的執(zhí)行情況、性能、覆蓋率、內(nèi)存是否泄漏等數(shù)據(jù)都被采集在CodeTest Manager的Software Probe中。CodeTest Manager提供了友好的窗口界面,可以查看每個(gè)函數(shù)的運(yùn)行覆蓋率,也可以查看每個(gè)文件的覆蓋率,還可以對(duì)測(cè)試結(jié)果進(jìn)行保存、導(dǎo)出、合并等。
3.2 一個(gè)小的測(cè)試方案的分析與設(shè)計(jì)圖l已經(jīng)給出了DCS系統(tǒng)的體系結(jié)構(gòu).這里將結(jié)合CodeTest設(shè)計(jì)測(cè)試方案。
為了便于理解,先舉個(gè)簡(jiǎn)單的設(shè)計(jì)實(shí)例:設(shè)一個(gè)小的軟件系統(tǒng)在A機(jī)和B機(jī)上運(yùn)行。A機(jī)上運(yùn)行著兩個(gè)進(jìn)程(或任務(wù)模塊):A1.exe和A2.exe,A1.exe使用ALIB1.1ib和ALIB2.1ib庫(kù)文件,A2.exe使用A.dll動(dòng)態(tài)鏈接庫(kù);B.exe運(yùn)行在B機(jī)上,B.exe上的操作將引起A機(jī)上的兩個(gè)進(jìn)程A1和A2。
現(xiàn)在對(duì)A1、A2和B三個(gè)任務(wù)模塊組成的系統(tǒng)進(jìn)行系統(tǒng)測(cè)試,監(jiān)視其覆蓋率、內(nèi)存泄漏、運(yùn)行性能等重要測(cè)試指標(biāo)。
測(cè)試方案如圖2,設(shè)C機(jī)(C機(jī)也可以是A機(jī)或者B機(jī))用于收集測(cè)試數(shù)據(jù)。
對(duì)于這個(gè)簡(jiǎn)單的系統(tǒng),其測(cè)試系統(tǒng)已經(jīng)不算簡(jiǎn)單,而對(duì)于總共有60多個(gè)工程,至少有20個(gè)以上的進(jìn)程同時(shí)運(yùn)行的DCS綜合自動(dòng)化控制系統(tǒng),其測(cè)試方案圖就更復(fù)雜了,要考慮的問(wèn)題就更多了。
圖2的子系統(tǒng)測(cè)試方案中,還有一些難點(diǎn)需要解決:
(1)對(duì)于A1和A2,怎樣同時(shí)采集代碼執(zhí)行測(cè)試數(shù)據(jù),調(diào)用lib靜態(tài)庫(kù)文件或者dll動(dòng)態(tài)鏈接庫(kù)文件,怎樣才能查看這些庫(kù)文件的執(zhí)行情況,是否在庫(kù)程序中存在內(nèi)存泄呢?
經(jīng)過(guò)探索得到解決方法如下:采用CodeTest的追加打點(diǎn)方法,將Al和A2以及它們的庫(kù)文件打點(diǎn)到一個(gè)符號(hào)數(shù)據(jù)庫(kù)文件(CodeTest打點(diǎn)生成的IDB文件,追加打點(diǎn)命令格式:-CTidb=E:importan\test.idb。CodeTest使用有很多細(xì)節(jié)上的技巧,請(qǐng)參見(jiàn)用戶手冊(cè)和軟件自帶的幫助文件),用一個(gè)ctserver、一個(gè)通信端口采集測(cè)試數(shù)據(jù)。注意,為了在CodeTest Manager的Coverage Data中追蹤到代碼每一行的執(zhí)行情況,必須在Configuration窗口內(nèi)Source Code Directories中加入各源碼的路徑。
(2)A1和A2可能是由兩個(gè)工程師開(kāi)發(fā)的,他們可能不愿意把測(cè)試數(shù)據(jù)混在一起。在這種情況下,可以在A機(jī)上運(yùn)行兩個(gè)不同端口各自采集測(cè)試數(shù)據(jù)ctserver,在CodeTest Manager中也要多開(kāi)一個(gè)Software Probe,并指定相應(yīng)的配置。插樁時(shí),也要分開(kāi)插樁,生成各自的IDB符號(hào)庫(kù)文件。
3.3 大型DCS綜合自動(dòng)化控制系統(tǒng)的測(cè)試方案
大型DCS綜合自動(dòng)化控制系統(tǒng)的測(cè)試方案與上述小系統(tǒng)的測(cè)試方案類似,但要考慮插樁函數(shù)對(duì)DCS系統(tǒng)的影響。為了減輕這種影響,單獨(dú)用一個(gè)配置很高(內(nèi)存1.5GB)的電腦H,運(yùn)行codeTest Manager采集系統(tǒng)服務(wù)器、操作員站和工程師站的各個(gè)模塊的測(cè)試數(shù)據(jù)。這樣服務(wù)器、操作員站、工程師站只需運(yùn)行采集測(cè)試數(shù)據(jù)的服務(wù)器ctservei,從而大太減輕測(cè)試系統(tǒng)的額外負(fù)擔(dān)。
電腦H成為測(cè)試數(shù)據(jù)的集中地,主要基于以下幾點(diǎn)考慮:
(1)測(cè)試數(shù)據(jù)集中起來(lái),可直接導(dǎo)出測(cè)試報(bào)告進(jìn)行合并,便于分析。尤其對(duì)覆蓋率太低的模塊,便于測(cè)試經(jīng)理和開(kāi)發(fā)工程師根據(jù)代碼的執(zhí)行情況,找出哪些功能沒(méi)有相對(duì)應(yīng)的測(cè)試用例,然后交給測(cè)試工程師進(jìn)一步豐富測(cè)試用例。
(2)節(jié)省測(cè)試成本。集中收集測(cè)試信息,可以減少工作量。另一方面,也是受CodeTest的license的限制,當(dāng)時(shí)只有一個(gè)網(wǎng)卡和一個(gè)license,只能在一臺(tái)機(jī)器上運(yùn)行CodeTest Manager。當(dāng)然,在條件好的情況下,用幾臺(tái)電腦分別收集服務(wù)器、操作員站和工程師站的數(shù)據(jù),測(cè)試效果會(huì)更好。對(duì)軟件系統(tǒng)的影響最小,但成本也會(huì)相應(yīng)增加。
綜上所述,制定DCS系統(tǒng)的測(cè)試方案如圖3所示。
從圖3可以看到,用到的ctserver比較多,主要原因有兩個(gè),一是系統(tǒng)模塊比較多,而且很多模塊是不同的開(kāi)發(fā)工程師負(fù)責(zé)開(kāi)發(fā)維護(hù),并且由另一個(gè)測(cè)試工程師測(cè)試。采用不同的ctserver可以把收集的測(cè)試信息分開(kāi),便于測(cè)試用例的分析討論、bug的分析、測(cè)試力度的分析。二是系統(tǒng)中每個(gè)模塊擔(dān)負(fù)著不同的任務(wù)或者完成某些功能,從而為功能測(cè)試提供便利。
3.4 DCS系統(tǒng)嵌入式測(cè)試方案實(shí)現(xiàn)
至此,測(cè)試方案設(shè)計(jì)完畢,由前面小系統(tǒng)的示例性實(shí)驗(yàn)作指引,實(shí)現(xiàn)環(huán)節(jié)難點(diǎn)不多。按照codeTest的測(cè)試過(guò)程,先插樁,再搭建系統(tǒng)。由于系統(tǒng)龐大,exe工程和庫(kù)文件工程多,所以插樁本身就是一個(gè)難點(diǎn),而且工作量也不小。但是,一旦插樁完成,生成exe文件后,就一直用這些可執(zhí)行文件測(cè)試。系統(tǒng)源碼要放在CodeTestManager所在機(jī)器上,以便在以追蹤方式查看代碼執(zhí)行情況時(shí),追蹤到源碼的每一頁(yè)每一行。
筆要遇到的困難者主有以下兩點(diǎn):
(1)插樁上的困難:系統(tǒng)用刊的庫(kù)文件比較多,每個(gè)庫(kù)都是一個(gè)vc工程。關(guān)鍵在于這個(gè)庫(kù)會(huì)被多個(gè)exe工程包含。為了避免測(cè)試系統(tǒng)搭建好后,出現(xiàn)idb符號(hào)數(shù)據(jù)庫(kù)與插樁后的程序不符,必須按照exe分別插樁。每插樁一個(gè)exe工程,先查一查它所依賴的庫(kù)文件,把庫(kù)文件的vc工程以idb符號(hào)數(shù)據(jù)庫(kù)追加方式插樁,把exe工程插樁后的符號(hào)數(shù)據(jù)庫(kù)追加在最后。
(2)測(cè)試系統(tǒng)運(yùn)行的困難:系統(tǒng)的進(jìn)程比較多,加上多個(gè)ctsever進(jìn)程就更多。而系統(tǒng)的啟動(dòng)過(guò)程,尤其是服務(wù)器的啟動(dòng)是有規(guī)律有順序的。如果手動(dòng)啟動(dòng)程序,則啟動(dòng)服務(wù)器將是一件痛苦的事。解決辦法是采用Windows腳本。例如連續(xù)啟動(dòng)兩個(gè)進(jìn)程,方法如下:
對(duì)于分布式系統(tǒng)和嵌入式系統(tǒng),CodeTest的確能提供獨(dú)特的測(cè)試方案,尤其硬件輔助軟件版的CodeTest工具,功能更加強(qiáng)大。CodeTest工具可以在測(cè)試的各個(gè)階段設(shè)計(jì)不同的測(cè)試方案,還可以作為軟件開(kāi)發(fā)過(guò)程中的輔助工具
評(píng)論