馮濟(jì)舟 劉洪喜
(1中國(guó)電子科技集團(tuán)公司第三十八研究所;2空裝駐安徽地區(qū)軍代表室,安徽合肥,230088)
隨著軟件規(guī)模和復(fù)雜程度的不斷提高,軟件測(cè)試技術(shù)也在不斷發(fā)展,軟件在各個(gè)領(lǐng)域的應(yīng)用比重不斷加大的情況下,對(duì)于保障軟件質(zhì)量的軟件測(cè)試也提出了更高的要求。目前,國(guó)內(nèi)的軟件測(cè)評(píng)能力建設(shè)經(jīng)歷了CMMI(能力成熟度模型集成)體系認(rèn)證、國(guó)家實(shí)驗(yàn)室 (CNAS)認(rèn)證和國(guó)防科技工業(yè)實(shí)驗(yàn)室認(rèn)可 (DILAC)。測(cè)評(píng)實(shí)驗(yàn)室已發(fā)展成為具有規(guī)范過程管理、具備一定測(cè)試能力及測(cè)試資質(zhì)的軟件質(zhì)量保障機(jī)構(gòu)。如何發(fā)揮軟件測(cè)評(píng)的優(yōu)勢(shì),將軟件測(cè)評(píng)與產(chǎn)品的軟件研發(fā)過程緊密結(jié)合起來,提升產(chǎn)品質(zhì)量,筆者就這方面的內(nèi)容談?wù)効捶ā?/p>
軟件系統(tǒng)的組成結(jié)構(gòu)如圖1所示。語句是系統(tǒng)組成的最基本單元,多個(gè)語句集成完成特定目標(biāo)的函數(shù),多個(gè)函數(shù)集成完成指定功能的部件,多個(gè)部件集成完成具有獨(dú)立配置管理一組功能的軟件配置項(xiàng),而多個(gè)軟件配置項(xiàng)組成功能完整的系統(tǒng)。代碼審查、靜態(tài)分析的檢測(cè)可以消除編碼不規(guī)范、變量未定義即使用、內(nèi)存泄漏、數(shù)組越界、未初始化等可能造成系統(tǒng)運(yùn)行不穩(wěn)定的缺陷;單元測(cè)試、集成測(cè)試可以消除所設(shè)計(jì)的軟件不滿足設(shè)計(jì)需求的缺陷;人工代碼走查可以消除軟件設(shè)計(jì)的邏輯缺陷;軟件配置項(xiàng)測(cè)試可以消除軟件不滿足軟件配置項(xiàng)需求的缺陷;系統(tǒng)測(cè)試可以消除軟件不滿足系統(tǒng)/子系統(tǒng)需求的缺陷。
因此,在軟件系統(tǒng)的不同階段,代碼審查和靜態(tài)分析保障了軟件最基本單元語句級(jí)別編寫的正確性和一致性;單元測(cè)試保障了由多條語句組成的軟件函數(shù)級(jí)別編寫的正確性和一致性;集成測(cè)試保障了由多個(gè)函數(shù)組成的軟件部件級(jí)別編寫的正確性和一致性;軟件配置項(xiàng)測(cè)試保障了由多個(gè)部件組成的軟件配置項(xiàng)級(jí)別編寫的正確性和一致性;軟件系統(tǒng)測(cè)試保障了所有軟件配置項(xiàng)組成的軟件系統(tǒng)編寫的正確性和一致性。以此自底向上逐層驗(yàn)收、確認(rèn),從而確保了整個(gè)系統(tǒng)的質(zhì)量。
以軟件開發(fā)過程為對(duì)象,建立軟件測(cè)試對(duì)軟件開發(fā)過程各階段工作的質(zhì)量保障。其過程及對(duì)應(yīng)關(guān)系如圖2所示。
圖1 軟件系統(tǒng)組成結(jié)構(gòu)模型圖
圖2 U型軟件測(cè)試過程模型圖
圖1從軟件產(chǎn)品構(gòu)成的角度,通過建立軟件系統(tǒng)的構(gòu)成樹,來闡述軟件測(cè)試對(duì)于保障軟件系統(tǒng)構(gòu)成樹中各節(jié)點(diǎn)驗(yàn)證與確認(rèn)的手段與方法,以說明軟件測(cè)試對(duì)于構(gòu)成軟件系統(tǒng)各個(gè)組成要素的保障。圖2從軟件開發(fā)過程的角度,通過建立與軟件開發(fā)各過程活動(dòng)對(duì)應(yīng)的各軟件測(cè)試活動(dòng)模型,闡述軟件測(cè)試對(duì)于軟件開發(fā)過程各活動(dòng)的驗(yàn)證與確認(rèn),以說明軟件測(cè)試對(duì)于軟件開發(fā)過程各活動(dòng)的質(zhì)量保障。其中軟件開發(fā)過程由系統(tǒng)/子系統(tǒng)需求分析為開始,以編碼實(shí)現(xiàn)為終止。而編碼活動(dòng)的結(jié)束即完成了對(duì)圖1軟件系統(tǒng)的構(gòu)建,代碼審查和靜態(tài)分析對(duì)圖2中編碼結(jié)果即圖1中語句級(jí)別與編碼規(guī)范的一致性進(jìn)行驗(yàn)證;單元測(cè)試按照?qǐng)D2中詳細(xì)設(shè)計(jì)結(jié)果即詳細(xì)設(shè)計(jì)文檔,驗(yàn)證圖1中函數(shù)與詳細(xì)設(shè)計(jì)文檔的一致性;集成測(cè)試按照?qǐng)D2中概要設(shè)計(jì)結(jié)果即概要設(shè)計(jì)文檔,驗(yàn)證圖1中部件與概要設(shè)計(jì)文檔的一致性;軟件配置項(xiàng)測(cè)試按照?qǐng)D2中軟件配置項(xiàng)需求結(jié)果即軟件需求規(guī)格說明,驗(yàn)證圖1中軟件配置項(xiàng)與軟件需求規(guī)格說明文檔的一致性;系統(tǒng)測(cè)試按照?qǐng)D2中系統(tǒng)/子系統(tǒng)需求結(jié)果即系統(tǒng)子系統(tǒng)規(guī)格說明,驗(yàn)證圖1中系統(tǒng)與系統(tǒng)/子系統(tǒng)規(guī)格說明文檔的一致性。
然而經(jīng)過這么細(xì)致的驗(yàn)證與確認(rèn),軟件在交付使用后仍然會(huì)暴露出很多問題,有的甚至可以導(dǎo)致軟件崩潰。根據(jù)實(shí)踐經(jīng)驗(yàn),軟件測(cè)試過程中仍然存在著以下幾個(gè)薄弱環(huán)節(jié)。
a)軟件測(cè)試工作不到位。由于缺乏有效的手段對(duì)軟件測(cè)試工作進(jìn)行監(jiān)控與評(píng)價(jià),導(dǎo)致軟件測(cè)試工作有時(shí)只是走走過場(chǎng),很難著實(shí)有效地開展工作。
b)軟件開發(fā)文檔編寫不到位。軟件開發(fā)文檔由需求到設(shè)計(jì)層層遞進(jìn),并可以上下追溯。而現(xiàn)在編寫的軟件開發(fā)文檔,都是人工填寫的追溯信息,缺少必然的邏輯關(guān)系,勢(shì)必會(huì)造成軟件設(shè)計(jì)或者需求的冗余、缺失甚至不合理。
c)編碼質(zhì)量分析的不到位。編碼質(zhì)量的分析直接影響到軟件系統(tǒng)的可靠性和穩(wěn)定性,然而這些問題的暴露無法通過任何一種動(dòng)態(tài)測(cè)試方法捕獲。比如就內(nèi)存泄漏來說,會(huì)造成系統(tǒng)運(yùn)行很長(zhǎng)一段時(shí)間后崩潰,但這又無法定位到任何動(dòng)態(tài)問題上來。
d)軟件一致性檢查不到位。對(duì)于軟件一致性檢查,即文檔與編碼實(shí)現(xiàn)的一致性,只是比對(duì)文檔中提到的內(nèi)容,在軟件中是否實(shí)現(xiàn)了。但是沒有對(duì)所有代碼都查明是否有確切的文檔出處和要求,造成測(cè)試事項(xiàng)的遺漏,導(dǎo)致測(cè)試未覆蓋代碼的不可控。
e)測(cè)試方法不到位。軟件測(cè)試按照標(biāo)準(zhǔn)的要求 (如能力成熟度模型集成體系認(rèn)證、國(guó)家實(shí)驗(yàn)室認(rèn)證和國(guó)防科技工業(yè)實(shí)驗(yàn)室認(rèn)可關(guān)于測(cè)試管理和測(cè)試能力)只是站在用戶角度對(duì)軟件代碼與文檔的一致性檢查,缺乏站在開發(fā)人員角度對(duì)系統(tǒng)的正確性、穩(wěn)定性、可靠性和效果給予必要的驗(yàn)證與確認(rèn)。
標(biāo)準(zhǔn)只是對(duì)測(cè)評(píng)工作的基本要求,然而以標(biāo)準(zhǔn)為基礎(chǔ)又可以賦予我們豐富的想像空間,除了做到以上標(biāo)準(zhǔn) (CMMI體系認(rèn)證、CNAS和DILAC關(guān)于測(cè)試管理和測(cè)試能力)提出的基本要求之外,軟件測(cè)試還需加強(qiáng)以下9個(gè)方面工作。
a)加強(qiáng)軟件各測(cè)試驗(yàn)收階段的評(píng)審工作,以確保測(cè)試工作的有效性。
b)加強(qiáng)軟件文檔審查分析能力。采用逆向工程的方法,將下一層次文檔的功能描述進(jìn)行整合,觀察是否可以還原上一層次文檔的需求,從而可以判斷出功能分解中是否有冗余的、缺少的或者不合理的,以提高軟件的設(shè)計(jì)質(zhì)量。
c)熟悉靜態(tài)分析、代碼審查工具的特性,熟練掌握測(cè)試工具的使用方法。從而可以在有限的時(shí)間內(nèi)更好、更多、更準(zhǔn)確地發(fā)現(xiàn)軟件代碼的規(guī)范問題,排除動(dòng)態(tài)測(cè)試無法發(fā)現(xiàn)的可能給系統(tǒng)帶來不穩(wěn)定因素的軟件隱患。
d)加強(qiáng)軟件源代碼與軟件設(shè)計(jì)文檔的一致性檢查。杜絕設(shè)計(jì)的功能未實(shí)現(xiàn),實(shí)現(xiàn)的功能未設(shè)計(jì),達(dá)到文實(shí)一致,每段代碼的實(shí)現(xiàn)都有證據(jù)可依??梢栽鰪?qiáng)軟件開發(fā)的規(guī)范性,也減少軟件蔓延或鍍金給系統(tǒng)帶來的不穩(wěn)定因素。
e)打破常規(guī)的測(cè)試思想。不僅要按需求逐條進(jìn)行驗(yàn)證,也要根據(jù)經(jīng)驗(yàn)采用猜錯(cuò)的方法驗(yàn)證軟件是否實(shí)現(xiàn)了需求沒有要求的功能,往往這些額外的功能輕則影響系統(tǒng)的處理性能和帶寬,重則可能導(dǎo)致系統(tǒng)的崩潰。
f)注重軟件故障樹的建立。軟件問題往往具有蝴蝶效應(yīng),一個(gè)小小語句的失誤就有可能造成重大的損失。建立軟件故障樹,通過展示小缺陷可能導(dǎo)致的重大危害,可以提高人們對(duì)細(xì)小問題的認(rèn)識(shí),對(duì)軟件問題的及時(shí)排除具有極大意義。
g)注重仿真數(shù)據(jù)及實(shí)裝數(shù)據(jù)的積累。通過使用積累的仿真數(shù)據(jù)和實(shí)裝數(shù)據(jù),不僅可以模擬特殊環(huán)境下驗(yàn)證軟件的處理能力,而且有助于通過這些已知的數(shù)據(jù)來判斷軟件處理結(jié)果的正確性,提升在專業(yè)領(lǐng)域測(cè)試的權(quán)威性。
h)建立具有專業(yè)領(lǐng)域測(cè)試特征的軟件配置項(xiàng)測(cè)試工具和系統(tǒng)測(cè)試工具。對(duì)于目前行業(yè)的動(dòng)態(tài)測(cè)試工具來說,由于其考慮了不同領(lǐng)域行業(yè)使用的兼容性,導(dǎo)致測(cè)試具體領(lǐng)域軟件項(xiàng)目的不便,不僅配置復(fù)雜,而且具有具體行業(yè)測(cè)試特征所亟需的功能并未提供。針對(duì)此種現(xiàn)象可以結(jié)合企業(yè)軟件測(cè)試的特點(diǎn),自己編寫測(cè)試工具用于實(shí)現(xiàn)軟件自動(dòng)化測(cè)試執(zhí)行、文檔生成、測(cè)試數(shù)據(jù)生成,提高測(cè)試的執(zhí)行效率和有效性。
i)加強(qiáng)對(duì)軟件算法時(shí)間復(fù)雜度和空間復(fù)雜度評(píng)價(jià)。計(jì)算軟件算法的時(shí)間復(fù)雜度和空間復(fù)雜度,不僅有助于了解軟件算法實(shí)現(xiàn)的正誤,更可以優(yōu)化軟件算法,提升算法執(zhí)行效率,從而大大提升系統(tǒng)的穩(wěn)定性和可靠性。