楊明明 項(xiàng)利萍
摘 要 Logiscope是一款用于軟件質(zhì)量保證和軟件測(cè)試的產(chǎn)品。其主要功能是對(duì)軟件做質(zhì)量分析和測(cè)試,用以保證軟件的可靠性,特別針對(duì)要求高可靠性和高安全性的軟件項(xiàng)目和工程。本文介紹了Logiscope的主要功能與測(cè)試原理等,并通過(guò)一個(gè)具體的測(cè)試實(shí)例,說(shuō)明如何使用Logiscope進(jìn)行雷達(dá)軟件的測(cè)試工作。
關(guān)鍵詞 雷達(dá)軟件;靜態(tài)分析;軟件測(cè)試;自動(dòng)化測(cè)試;Logiscope
引言
隨著我國(guó)國(guó)防實(shí)力的快速提升以及對(duì)雷達(dá)設(shè)備質(zhì)量要求的提高,對(duì)于雷達(dá)軟件的要求也越來(lái)越高,雷達(dá)軟件的安全性和可靠性也呈現(xiàn)越來(lái)越重要的趨勢(shì)。在軟件的生命周期內(nèi),軟件測(cè)試是必不可少的一個(gè)重要環(huán)節(jié),通過(guò)軟件測(cè)試,才能充分排除和修正軟件設(shè)計(jì)以及開(kāi)發(fā)過(guò)程中的不合理、不可靠因素。
1 靜態(tài)測(cè)試
靜態(tài)測(cè)試是對(duì)軟件的源代碼進(jìn)行分析研究,以驗(yàn)證程序語(yǔ)法、結(jié)構(gòu)、編碼規(guī)則等方面的準(zhǔn)確性。靜態(tài)測(cè)試可通過(guò)手動(dòng)進(jìn)行,也可通過(guò)測(cè)試工具進(jìn)行分析。對(duì)于雷達(dá)軟件來(lái)說(shuō),源代碼量巨大,人工代碼審查的效率較低,因此引入代碼審查測(cè)試工具尤為重要,在雷達(dá)軟件代碼審查過(guò)程中測(cè)試工具的使用大大降低了測(cè)試時(shí)間,節(jié)約了測(cè)試成本,本文主要針對(duì)靜態(tài)測(cè)試工具Logiscope在雷達(dá)軟件測(cè)試中的應(yīng)用進(jìn)行簡(jiǎn)單介紹[1]。
2 Logiscope簡(jiǎn)介
Logiscope貫穿于軟件開(kāi)發(fā)、代碼審查、單元測(cè)試、系統(tǒng)測(cè)試以及軟件維護(hù)的各個(gè)階段,是面向源代碼的測(cè)試工具,并且主要適用于軟件測(cè)試階段,包括靜態(tài)測(cè)試階段的代碼審查和動(dòng)態(tài)覆蓋測(cè)試,它可從軟件的編程規(guī)則、靜態(tài)特征和動(dòng)態(tài)測(cè)試等多個(gè)方面量化質(zhì)量模型,評(píng)估軟件質(zhì)量。
Logiscope主要有3個(gè)功能模塊,包括RuleChecker:自動(dòng)化的編碼規(guī)范檢查、Audit(QualityChecker):質(zhì)量評(píng)估和圖形化代碼視圖、TestChecker:基于結(jié)構(gòu)的測(cè)試與動(dòng)態(tài)覆蓋率測(cè)試。
2.1 Rulechecker(編碼規(guī)范檢測(cè))
Rulechecker是代碼白盒測(cè)試的分析工具,用于檢驗(yàn)代碼書(shū)寫(xiě)的規(guī)范性,在代碼審查中可使用該工具將代碼與已有標(biāo)準(zhǔn)或規(guī)范比較,將編碼習(xí)慣標(biāo)準(zhǔn)化,從而改進(jìn)代碼的可讀性、可維護(hù)性,使軟件資源的使用更加有效,更有活力。
Rulechecker提供了根據(jù)業(yè)界標(biāo)準(zhǔn)和經(jīng)驗(yàn)所制定的編碼規(guī)則與命名檢驗(yàn),從而避免了開(kāi)發(fā)人員因?yàn)樽晕也涣嫉木幊塘?xí)慣所導(dǎo)致的彼此不相容的困擾。同時(shí)Rulechecker還提供了規(guī)則的裁剪和編輯功能,用戶(hù)可使用TCL腳本和編程語(yǔ)言自定義新的規(guī)則。
2.2 Audit(質(zhì)量分析)
Audit用于審查代碼的質(zhì)量,主要包括以下功能:①檢查代碼錯(cuò)誤,定位錯(cuò)誤模塊;②根據(jù)質(zhì)量模型評(píng)估軟件質(zhì)量和軟件復(fù)雜度;③圖形化整個(gè)軟件的框架結(jié)構(gòu)以及模塊調(diào)用圖和控制流圖;④自動(dòng)生成評(píng)估報(bào)告。
2.3 Testchecker(動(dòng)態(tài)測(cè)試分析)
Testchecker是統(tǒng)計(jì)被測(cè)試程序測(cè)試覆蓋率的工具,重點(diǎn)統(tǒng)計(jì)的覆蓋率是邊覆蓋率,也稱(chēng)之為判定到判定的覆蓋[2]。
3 Logiscope工作原理
本章節(jié)針對(duì)Rulechecker、Audit和Testchecker的工作原理進(jìn)行介紹。
3.1 Rulechecker工作原理
RuleChecker實(shí)現(xiàn)了一個(gè)編碼規(guī)范集,在該編碼集中大部分編碼規(guī)范可以自定義,因此大大增加了編碼檢測(cè)的靈活性,使RuleChecker可以更好地適應(yīng)實(shí)際工作需求。在具體的測(cè)試過(guò)程中,首先進(jìn)行編碼規(guī)范文件的選擇,Rulechecker向用戶(hù)提供了‘RuleChecker.cfg的編碼規(guī)范描述文件,此外用戶(hù)也可使用TCL語(yǔ)言修改或重新編寫(xiě).cfg文件,來(lái)適應(yīng)具體情況。
TCL(Tool Command Language)是一種解釋執(zhí)行的腳本語(yǔ)言(Scripting Language)。 它提供了通用的編程能力:支持變量、過(guò)程和控制結(jié)構(gòu);同時(shí)TCL還擁有一個(gè)功能強(qiáng)大的固有核心命令集。用戶(hù)可以針對(duì)某一特定應(yīng)用領(lǐng)域?qū)CL語(yǔ)言的核心命令集進(jìn)行擴(kuò)展,加入適合于自己的應(yīng)用領(lǐng)域的擴(kuò)展命令。并且,擴(kuò)展后的TCL語(yǔ)言將可以繼承TCL 核心部分的所有功能,包括核心命令、控制結(jié)構(gòu)、數(shù)據(jù)類(lèi)型、對(duì)過(guò)程的支持等。
3.2 Audit工作原理
Audit是按照ISO9126質(zhì)量模型分層、量化的方式進(jìn)行靜態(tài)測(cè)試。其內(nèi)部定義了大量的質(zhì)量度量元,度量元是檢驗(yàn)一個(gè)軟件質(zhì)量好壞的最基本元素。Audit通過(guò)文本文件定義質(zhì)量模型,通常Audit會(huì)提供質(zhì)量模型文件,其位置在“LogiscopeHOME/Logiscope/Ref/Logiscope.ref”,在該質(zhì)量模型中定義了四個(gè)質(zhì)量標(biāo)準(zhǔn),分別是:易于分析性(ANALYZABILITY)、易于測(cè)試性(TESTABILITY)、穩(wěn)定性(STABILITY)和適應(yīng)變化性(CHANGEABILITY)。對(duì)于最底層的質(zhì)量度量元,該模型文件從Audit的度量元中選擇幾十個(gè)度量元構(gòu)成基本度量元,比如函數(shù)語(yǔ)句數(shù)度量元(lc_stat)、類(lèi)公共數(shù)據(jù)成員數(shù)度量元(cl_data_publ),等等。這些度量元都被量化為數(shù)字,當(dāng)某一度量元超出設(shè)定的上限值和下限值范圍時(shí),Audit就認(rèn)為被檢測(cè)的代碼在該項(xiàng)度量元上不符合要求。質(zhì)量標(biāo)準(zhǔn)在Audit中也被量化為數(shù)字,由若干個(gè)度量元按權(quán)重相加組成的。通過(guò)質(zhì)量標(biāo)準(zhǔn)值的大小,Audit給出程序代碼遵守該項(xiàng)質(zhì)量標(biāo)準(zhǔn)的級(jí)別,由高到低依次是EXCELLENT(優(yōu)秀)、GOOD(良好)、FAIR(合格)、POOR(不合格)。Audit中評(píng)價(jià)函數(shù)穩(wěn)定性的質(zhì)量標(biāo)準(zhǔn)計(jì)算方法如下:
該公式中表明function_STABILITY由函數(shù)與其他類(lèi)耦合度度量元(ic_varpe) 、函數(shù)出口數(shù)量度量元(ct_exit)、函數(shù)中調(diào)用其他函數(shù)數(shù)量度量元(dc_calls)、函數(shù)參數(shù)數(shù)量度量元(ic_param)這四個(gè)度量元組成,每個(gè)度量元的權(quán)重均為1。可根據(jù)具體的得分,判定程序代碼在該項(xiàng)質(zhì)量標(biāo)準(zhǔn)上所處的等級(jí)。這就是Audit對(duì)質(zhì)量模型中質(zhì)量準(zhǔn)則級(jí)的處理方法。
綜合四個(gè)不同的質(zhì)量標(biāo)準(zhǔn),可以得到代碼的可維護(hù)性質(zhì)量因素,具體計(jì)算公式如下:
上述公式表明,函數(shù)的可維護(hù)性由四個(gè)質(zhì)量標(biāo)準(zhǔn)的得分相加得出,通過(guò)層層綜合,得到了可維護(hù)性質(zhì)量因素的結(jié)果。
3.3 Testchecker工作原理
Testchecker運(yùn)行過(guò)程中會(huì)在程序源代碼的控制流轉(zhuǎn)移語(yǔ)句中插入標(biāo)志位,在執(zhí)行測(cè)試用例時(shí),若運(yùn)行至此標(biāo)志位,Testchecker會(huì)在后臺(tái)記錄,進(jìn)而統(tǒng)計(jì)出每個(gè)測(cè)試用例的覆蓋率,以及多個(gè)測(cè)試用例覆蓋率總和。
4 Logiscope應(yīng)用實(shí)例
本文針對(duì)一個(gè)雷達(dá)軟件,使用Logiscope工具TCL自定義編碼規(guī)則,來(lái)進(jìn)行雷達(dá)軟件的編碼規(guī)則檢查。
(1)針對(duì)新建好的Logiscope項(xiàng)目,根據(jù)需要對(duì)編碼規(guī)則進(jìn)行修改,本實(shí)例中,選取以下八條編碼規(guī)則進(jìn)行自定義。
①Ansi,函數(shù)參數(shù)列表不能為空,函數(shù)參數(shù)列表中參數(shù)應(yīng)指定類(lèi)型
②Asscal,在函數(shù)的參數(shù)列表中不要使用賦值操作符。
③Brkcont,在控制語(yǔ)句 (for, do, while) 塊中,禁止使用Break和continue。
④Globinit,全局變量必須在定義的時(shí)候賦予初始值。
⑤MISRA_0_1_1,項(xiàng)目中不應(yīng)包含不能到達(dá)的代碼。
⑥MISRA_0_1_3,項(xiàng)目中不應(yīng)定義未被使用的變量。
⑦M(jìn)ISRA_0_1_4,項(xiàng)目中不應(yīng)包含只使用一次的全局變量。
⑧MISRA_6_4_8,每個(gè)switch語(yǔ)句應(yīng)該至少有一個(gè)case語(yǔ)句。
(2)編譯完成后,運(yùn)行RuleChecker,生成測(cè)試報(bào)告,選擇Browse-Rule-Rule Violations Report或者Logiscope單元欄上Rule Violations Report按鈕,查看規(guī)則違背情況報(bào)告。報(bào)告是以網(wǎng)頁(yè)的形式提供的,方便測(cè)試人員查看。報(bào)告主要是由兩部分組成,第一部分是以源文件為單位和以編碼規(guī)則為單位,將檢測(cè)結(jié)果以列表的形式展示出來(lái),第二部分,給出了編碼規(guī)范的詳細(xì)說(shuō)明,如下圖1所示。
(3)點(diǎn)擊詳細(xì)信息進(jìn)行查看,發(fā)現(xiàn)以上報(bào)告說(shuō)明改該項(xiàng)目存在以下幾個(gè)方面的缺陷:filter.cpp違反了“MISRA_0_1_1,項(xiàng)目中不應(yīng)包含不能到達(dá)的代碼”的規(guī)則;auto.cpp文件中1173行、1175行、1320行違反了“MISRA_0_1_3,項(xiàng)目中不應(yīng)定義未被使用的變量”;kalman.cpp文件中的315行、316行、319行違反了“MISRA_0_1_4,項(xiàng)目中不應(yīng)包含只使用一次的全局變量”;Kalman.cpp文件中的11行、25行、34行等違反了“Ansi,函數(shù)參數(shù)列表不能為空,函數(shù)參數(shù)列表中參數(shù)應(yīng)指定類(lèi)型”規(guī)則。
根據(jù)RuleChecker的檢測(cè)結(jié)果,選擇源程序進(jìn)行修改,重新編譯之后,再次生成統(tǒng)計(jì)報(bào)告,會(huì)發(fā)現(xiàn)原來(lái)違反規(guī)則的地方都已經(jīng)修改完成。
5 結(jié)束語(yǔ)
Logiscope在針對(duì)要求高可靠性和高安全性的雷達(dá)軟件測(cè)試中有著非常重要及有效的應(yīng)用,可對(duì)雷達(dá)軟件進(jìn)行質(zhì)量分析和測(cè)試以保證雷達(dá)軟件的質(zhì)量,并在后期雷達(dá)軟件的維護(hù)過(guò)程中大大提高效率,但是Audit的分析結(jié)果比較依賴(lài)底層函數(shù)度量元,若底層度量元不可測(cè)時(shí),將會(huì)導(dǎo)致上層函數(shù)標(biāo)準(zhǔn)級(jí)也不具備可測(cè)性。Rulechecker在針對(duì)雷達(dá)軟件進(jìn)行代碼規(guī)則檢查時(shí),能夠方便有效的將源代碼中不符合編碼規(guī)范的部分準(zhǔn)確定位,這大大提高了測(cè)試人員代碼審查的效率,同時(shí)Logiscope中可自定義規(guī)范集,可針對(duì)雷達(dá)軟件定制規(guī)則集來(lái)約束設(shè)計(jì)人員的編碼習(xí)慣,這對(duì)后期雷達(dá)軟件編碼規(guī)范化及代碼可維護(hù)性、可讀性方面有著積極的推動(dòng)作用。
參考文獻(xiàn)
[1] 杜慶峰.高級(jí)軟件測(cè)試技術(shù)[M] . 北京:清華大學(xué)出版社,2011:73.
[2] 梅磊,石曉寧.軍用軟件探索式測(cè)試方法的研究[J].電子質(zhì)量, 2016,(2):5-10.