【摘要】:隨著計算機技術(shù)的飛速發(fā)展,人們對計算機的需求和依賴與日俱增。隨著而來的是計算機系統(tǒng)的規(guī)模和復(fù)雜性急劇增加,其軟件開發(fā)成本以及由于軟件故障而造成的經(jīng)濟損失也正在增加,軟件質(zhì)量問題已成為人們關(guān)注的焦點。因此,許多科學(xué)家在展望21世紀計算機科學(xué)發(fā)展方向和策略時,把軟件質(zhì)量放在優(yōu)先提高軟件功能和性能的位置上。隨著軟件質(zhì)量問題的不斷出現(xiàn),基于缺陷模式的軟件測試技術(shù)作為高可信度軟件的重要保證,可以大大降低軟件的缺陷密度,提高軟件的質(zhì)量。
【關(guān)鍵詞】:軟件質(zhì)量;軟件測試;測試技術(shù)
1.軟件測試的目標和意義
軟件測試是一個找錯的過程。從人本身的弱點來看,完全由軟件設(shè)計人員負責(zé)測試工作是不適宜的。大型軟件系統(tǒng)的測試分為單元測試和綜合測試兩個階段。多數(shù)場合,軟件設(shè)計人員與測試人員共同完成單元測試任務(wù),一般指派專門機構(gòu)負責(zé)軟件產(chǎn)品的綜合測試。隨著軟件工程的復(fù)雜化,有時設(shè)計人員也加入該產(chǎn)品的綜合測試過程。軟件測試是一項花費昂貴的活動,測試者希望通過軟件測試提高軟件的質(zhì)量或可靠性,意味著發(fā)現(xiàn)并改正程序中的錯誤。所以,進行測試時不應(yīng)該為了顯示程序是有沒有問題,而應(yīng)該從軟件中含有故障這個假定出發(fā)去測試程序,從中發(fā)現(xiàn)盡可能多的軟件故障,因此,“一個好的測試用例在于發(fā)現(xiàn)至今尚未被發(fā)現(xiàn)的故障,一個成功的測試是發(fā)現(xiàn)了至今未被發(fā)現(xiàn)的故障的測試”。
2.軟件測試過程
軟件測試是軟件開發(fā)過程中的一個重要環(huán)節(jié),是在軟件投入運行前,對軟件需求分析、設(shè)計規(guī)格說明和編碼實現(xiàn)的最終審定,貫穿于軟件定義與開發(fā)的整個過程中。
軟件項目一旦開始,軟件測試也隨之開始。從單元測試、集成測試、配置項測試、最終的驗收測試,整個測試過程環(huán)環(huán)相扣,各有側(cè)重點。
2.1單元測試
單元測試是在軟件開發(fā)過程中進行的最低級別的測試活動,其目的是要檢測程序模塊中有無故障存在。開始不是把程序作為一個整體來測試,而是首先集中注意力來測試程序中較小的結(jié)構(gòu)快,以便發(fā)現(xiàn)并糾正模塊內(nèi)部的故障。在傳統(tǒng)的結(jié)構(gòu)化編程語言中,單元測試的對象一般是函數(shù)或子函數(shù)。例如在面向?qū)ο笳Z言中,單元測試的對象可以是類,也可以是類的成員函數(shù)。
單元測試的對象時軟件設(shè)計的最小單位,與程序設(shè)計和編程實現(xiàn)關(guān)系密切,因此,單元測試一般由測試人員和編程人員共同完成。測試人員可通過模塊詳細設(shè)計說明和源程序代碼清楚地了解模塊的內(nèi)部邏輯結(jié)構(gòu)和I/O條件,一般采用白盒測試方法設(shè)計測試用例。在實際軟件開發(fā)工作中,單元測試和代碼編寫所花費的精力大致相同。實踐表明,單元測試可以發(fā)現(xiàn)許多的軟件故障,并且修改它們的成本很低。在軟件開發(fā)的后期階段,發(fā)現(xiàn)并修復(fù)故障將變得更加困難。因此,有效的單元測試是保證全局質(zhì)量的一個重要部分。在經(jīng)過單元測試后,系統(tǒng)測試過程將大大簡化,開發(fā)人員可以將精力集中在單元之間的交互作用和全局的功能實現(xiàn)上,而不是陷入充滿故障的單元之中不能自拔。
2.2集成測試
集成測試是在單元測試基礎(chǔ)之上將各個模塊組裝起來進行的測試,其主要目的是發(fā)現(xiàn)與接口有關(guān)的模塊之間的問題。這是因為時常有這樣的情況發(fā)生,每個模塊能單獨工作,但這些模塊組裝起來之后卻不能正常工作。程序在某些局部反映不出的問題,在全局上可能就暴露出來,影響功能的正常發(fā)揮。例如,數(shù)據(jù)經(jīng)過接口可能丟失,一個模塊對另一個模塊可能造成不應(yīng)有的影響,幾個功能組合起來不能實現(xiàn)主功能,誤差不斷積累達到不可接受的程度,全局數(shù)據(jù)結(jié)構(gòu)出現(xiàn)錯誤等等。集成測試是組裝軟件的系統(tǒng)測試技術(shù),按照設(shè)計要求把通過單元測試的各個模塊組裝在一起之后,進行集成測試便于發(fā)現(xiàn)與接口有關(guān)的各種錯誤。
某些軟件設(shè)計人員習(xí)慣于把所有模塊設(shè)計按照一次全部組裝起來,然后進行整體測試,這種非增量式集成測試方法容易出現(xiàn)混亂。因為測試時可能發(fā)現(xiàn)一大堆錯誤,為每個錯誤定位和糾正非常困難,并且在改正一個錯誤的同時有可能引入新的錯誤,新舊錯誤混雜,更難斷出出錯的原因和位置。
2.3配置項測試
配置項測試是按照軟件需求規(guī)格說明,對軟件產(chǎn)品進行評估以確定是否滿足軟件需求的過程。集成測試完畢后,分散開發(fā)的模塊已經(jīng)按照設(shè)計要求組裝成一個完整的軟件系統(tǒng),各模塊之間存在的種種問題都已經(jīng)基本排除。為了進一步驗證軟件的有效性,對它在功能、性能、接口以及限制條件等方面做出更切實的評價,就應(yīng)進行配置項測試。在開發(fā)的初期,軟件需求規(guī)格說明中可能明確地規(guī)定了配置項測試通過的標準,但在測試階段需要更詳細、更具體地在測試規(guī)格說明中加以體現(xiàn)。除了考慮功能、性能以外,還需檢驗其他方面的要求。例如,可移植性、兼容性、可維護性、人機接口以及開發(fā)的文檔資料是否符合要求等。
配置項測試的結(jié)構(gòu)一般有兩種可能,一種是功能與性能指標滿足軟件需求規(guī)格說明中的要求,用戶可以接受;另外一種是軟件不滿足軟件需求規(guī)格說明的要求,有一定偏差,用戶無法接受。項目進行到這個階段,對于出現(xiàn)的偏差與嚴重錯誤,一般很難再預(yù)定的工期內(nèi)改正,因此必須與用戶協(xié)商,尋求一個妥善的解決辦法。
2.4系統(tǒng)測試
軟件開發(fā)完畢,還應(yīng)與系統(tǒng)中其他部分配合起來,進行一系列系統(tǒng)測試,保證系統(tǒng)各組成部分能夠協(xié)調(diào)工作。這里所說的系統(tǒng)組成部分除了軟件外,還包括計算機硬件以及相關(guān)的外圍設(shè)備、數(shù)據(jù)及采集和傳輸機構(gòu)、計算機系統(tǒng)操作人員等。系統(tǒng)測試實際上是針對系統(tǒng)中各個組成部分進行的綜合性檢驗,很接近日常測試實踐。系統(tǒng)測試的目標不是找出軟件故障,而是要證明系統(tǒng)的性能。例如確定系統(tǒng)是否滿足其性能要求,確定系統(tǒng)使用資源是否超界,確定安裝過程中是否會導(dǎo)致不正確的方式,確定系統(tǒng)是否滿足可靠性等需求。
3.總結(jié)
軟件測試在軟件生存期中占有非常突出的位置,是保證軟件質(zhì)量的重要手段。為了確保該軟件產(chǎn)品能夠符合用戶的需求,必須著眼于整個軟件生存期,在各個階段進行驗證、確認和測試活動,使軟件不致在開發(fā)完成后,才發(fā)現(xiàn)和用戶的需求有較大的差距。
測試是軟件開發(fā)時期任務(wù)繁重的一個階段,也是保證軟件可靠性最重要的手段。軟件測試是在投入運行前對軟件需求分析、軟件設(shè)計規(guī)格說明書和軟件編碼進行查錯和糾錯。測試的目的是以最少的測試用例集合測試出更多的程序中潛在的錯誤,而不是證明程序中沒有錯誤。
參考文獻:
[1]軟件工程理論、方法與實踐[M].北京:高等教育出版社,2005.
[2] 周偉明.軟件測試實踐[M]:電子工業(yè)出版社,2007年12月