徐興浩
摘要科學(xué)技術(shù)不斷的飛速發(fā)展,軟件的功能越來越強大,軟件的復(fù)雜性也越來越高,從而大大增加了軟件測試與可靠性評估的難度。作為軟件開發(fā)的重要環(huán)節(jié),軟件測試越來越受到人們的重視,軟件測試的重要性更加突出。為了保證一個軟件系統(tǒng)的質(zhì)量,有必要針對軟件的測試與可靠性評估方法進(jìn)行專門地研究。本文就是針對這一領(lǐng)域所做的一些研究。
關(guān)鍵詞:軟件測試;滿足需求;可靠性
Software Test
Dalian maritime University in Liaoning province Xu Xinghao
Abstract: With the development of science and technology, the function of software is becoming more and more powerful. The complexity of software is increasing so fast that it is very difficult to test and assess the reliability of software. As an important part of software development, software testing has been paid more and more attention. The importance of software testing is more prominent. In order to ensure the quality of a software system, it is necessary to specialize in software testing and method for assessment of reliability. This paper is something about studying in this area.
Key words: software testing; meet demand; reliability
1 引言
隨著科學(xué)技術(shù)的飛速發(fā)展,硬件發(fā)雜性、多樣性和應(yīng)用的復(fù)雜性增加,軟件系統(tǒng)的復(fù)雜性和規(guī)模也在不斷增大,軟件安全性和質(zhì)量的保證成為各大公司及個人日益關(guān)注的焦點,軟件中存在的各種問題也逐漸成為制約我國軟件產(chǎn)業(yè)發(fā)展的主要因素。后期的軟件測試工作可以說是為軟件產(chǎn)品的完工把好最后一道關(guān),是檢驗軟件產(chǎn)品最為重要的一步。所以軟件測試在軟件開發(fā)中的地位日趨升高、軟件測試員的地位也在日益提高。
我們先簡單的分析一下軟件缺陷產(chǎn)生的原因。軟件在投入運行之前會先進(jìn)行軟件測試,但運行前的軟件測試是根據(jù)軟件的需求分析、設(shè)計規(guī)格和編碼實現(xiàn)為審定目標(biāo)。但程序中的故障并一定是由編碼引起的,大多數(shù)的軟件缺陷可能是在系統(tǒng)詳細(xì)設(shè)計階段、概要設(shè)計階段甚至是在需求分析階段就存在問題所導(dǎo)致。在軟件開發(fā)過程中,需求的更改、軟件說明書的描述開發(fā)小組人員間的交流都可能導(dǎo)致軟件程序出現(xiàn)缺陷。而軟件測試是最大限度避免軟件缺陷產(chǎn)生的最好途徑[1]。本文系統(tǒng)的介紹了有關(guān)軟件測試的各階段及其用途。
2 軟件測試的定義
軟件測試(Software testing)是軟件生存期(Software life cycle)中的一個重要階段,是軟件質(zhì)量保證的關(guān)鍵步驟。通俗地講,軟件測試就是在軟件投入運行前,對軟件需求分析、設(shè)計規(guī)格說明和編碼進(jìn)行最終復(fù)審的活動。1983年IEEE提出的軟件工程術(shù)語中給軟件測試下的定義是:“使用人工或自動的手段來運行或測定某個軟件系統(tǒng)的過程,其目的在于檢驗它是否滿足規(guī)定的需求或弄清預(yù)期結(jié)果與實際結(jié)果之間的差別”。這個定義明確指出:軟件測試的目的是為了檢驗軟件系統(tǒng)是否滿足需求[2]。
從用戶的角度來看,普遍希望通過軟件測試暴露軟件中隱藏的錯誤和缺陷,所以軟件測試應(yīng)該是“為了發(fā)現(xiàn)錯誤而執(zhí)行程序的過程”?;蛘哒f,軟件測試應(yīng)該根據(jù)軟件開發(fā)各階段的規(guī)格說明和程序的內(nèi)部結(jié)構(gòu)而精心設(shè)計一批測試用例(即輸入數(shù)據(jù)及其預(yù)期的輸出結(jié)果),并利用這些測試用例去運行程序,以發(fā)現(xiàn)程序錯誤或缺陷。
3 軟件測試的生命周期
軟件測試就是軟件在投入運行前,對軟件需求分析、設(shè)計規(guī)格和編碼是的最終審查,他是保證軟件質(zhì)量的關(guān)鍵步驟。軟件測試是為了發(fā)現(xiàn)錯誤而執(zhí)行程序并根據(jù)軟件開發(fā)各階段的規(guī)格說明和程序的內(nèi)部結(jié)構(gòu)而精心設(shè)計的測試。下圖為一個測試生命周期模型。
軟件測試不僅僅是對程序的測試,而是貫穿于軟件定義和開發(fā)的整個過程,因此,軟件開發(fā)過程中產(chǎn)生的需求分析、概要設(shè)計、詳細(xì)設(shè)計以及編碼等各個階段所得到的文檔,包括需求規(guī)格說明、概要設(shè)計規(guī)格說明、詳細(xì)設(shè)計規(guī)格說明以及源程序,都是軟件測試的對象[3]。軟件測試在軟件生命周期,也就是軟件從開發(fā)設(shè)計、運行、直到結(jié)束使用的全過程中,主要橫跨單元測試階段和綜合測試階段,即要在每個模塊編寫出以后進(jìn)行測試、在完成單元測試后進(jìn)行的測試,如集成測試、系統(tǒng)測試、驗收測試等。
4 軟件測試的目的
軟件測試的目的,第一是確認(rèn)軟件的質(zhì)量,其一方面是確認(rèn)軟件做了你所期望的事情(Do the right thing),另一方面是確認(rèn)軟件以正確的方式來做了這個事件(Do it right)。第二是提供信息,比如提供給開發(fā)人員或程序經(jīng)理的反饋信息,為風(fēng)險評估所準(zhǔn)備的信息。 第三軟件測試不僅是在測試軟件產(chǎn)品的本身,而且還包括軟件開發(fā)的過程。如果一個軟件產(chǎn)品開發(fā)完成之后發(fā)現(xiàn)了很多問題,這說明此軟件開發(fā)過程很可能是有缺陷的。因此軟件測試的第三個目的是保證整個軟件開發(fā)過程是高質(zhì)量的。
軟件質(zhì)量是由幾個方面來衡量的:一、在正確的時間用正確的的方法把一個工作做正確(Doing the right things right at the right time.)。二、符合一些應(yīng)用標(biāo)準(zhǔn)的要求,比如不同國家的用戶不同的操作習(xí)慣和要求,項目工程中的可維護(hù)性、可測試性等要求。三、質(zhì)量本身就是軟件達(dá)到了最開始所設(shè)定的要求,而代碼的優(yōu)美或精巧的技巧并不代表軟件的高質(zhì)量(Quality is defined as conformance to requirements, not as “goodness” or “elegance”.)。四、質(zhì)量也代表著它符合客戶的需要(Quality also means “meet customer needs”.)。作為軟件測試這個行業(yè),最重要的一件事就是從客戶的需求出發(fā),從客戶的角度去看產(chǎn)品,客戶會怎么去使用這個產(chǎn)品,使用過程中會遇到什么樣的問題。只有這些問題都解決了,軟件產(chǎn)品的質(zhì)量才可以說是上去了[4]。
測試人員在軟件開發(fā)過程中的任務(wù):
1、尋找Bug;
2、避免軟件開發(fā)過程中的缺陷;
3、衡量軟件的品質(zhì);
4、關(guān)注用戶的需求。
總的目標(biāo)是:確保軟件的質(zhì)量
5軟件測試方法及流程
軟件測試方法主要有黑箱測試方法與白箱測試兩類。黑箱測試又稱功能測試、數(shù)據(jù)驅(qū)動測試或基于規(guī)格說明的測試,是在完全不考慮程序內(nèi)部結(jié)構(gòu)和內(nèi)部特性的情況下,檢查輸入與輸出之間關(guān)系是否符合要求。白箱測試又稱結(jié)構(gòu)測試、邏輯驅(qū)動測試或基于程序的測試,是在已知程序內(nèi)部結(jié)構(gòu)的情況下設(shè)計測試用例的測試方法。顯然,白箱測試適合在單元測試中運用,而在獨立測試階段多采用黑箱測試方法。
測試用例(Test case)實際上是對軟件運行過程中所有可能存在的目標(biāo)、運動、行動、環(huán)境和結(jié)果的描述,是對客觀世界的一種抽象。設(shè)計測試用例即設(shè)計針對特定功能或組合功能的測試方案,并編寫成文檔。測試用例應(yīng)該體現(xiàn)軟件工程的思想和原則。測試用例的選擇既要有一般情況,也應(yīng)有極限情況以及最大和最小的邊界值情況[5]。因為測試的目的是暴露應(yīng)用軟件中隱藏的缺陷,所以在設(shè)計選取測試用例和數(shù)據(jù)時要考慮那些易于發(fā)現(xiàn)缺陷的測試用例和數(shù)據(jù),結(jié)合復(fù)雜的運行環(huán)境,在所有可能的輸入條件和輸出條件中確定測試數(shù)據(jù),來檢查應(yīng)用軟件是否都能產(chǎn)生正確的輸出。
軟件測試所得到的數(shù)據(jù)經(jīng)過處理以后,可以用來作為評估軟件系統(tǒng)是否滿足用戶需求的依據(jù)。軟件測試階段的信息流如下圖所示:
6 結(jié)語
軟件系統(tǒng)的規(guī)模也在持續(xù)擴(kuò)大,需求日益復(fù)雜,對軟件質(zhì)量的要求也越來越高。但現(xiàn)實中軟件系統(tǒng)的質(zhì)量和穩(wěn)定性卻不盡如人意,采用有效的軟件測試是保證軟件質(zhì)量、提高軟件可靠性的重要手段。
軟件測試是產(chǎn)品最終交付到用戶之前的最后一道防線,有著舉足輕重的地位。然而,做好軟件測試卻是不容易的,一方面你需要同時掌握軟件開發(fā)的技能和軟件測試方面的技能;另一方面,產(chǎn)品必須給予測試充分的獨立性和資源保證。
軟件測試是發(fā)現(xiàn)軟件中錯誤而檢查文檔、運行程序的一個過程。軟件測試的概念雖然是和軟件編程同時提出的,但發(fā)展速度卻遠(yuǎn)遠(yuǎn)沒有編程技術(shù)快。近十幾年來,隨著軟件應(yīng)用的迅速推廣,對軟件測試也變得迫切需要,各種針對性的測試方法和技術(shù)不斷出現(xiàn)。
軟件測試前景被極為看好,我們相信,在不久的將來,軟件測試會成為軟件行業(yè)的主題被越來越多的人更廣泛的重視。
參考文獻(xiàn)
[1].楊為民等,可靠性維修性保障性叢書,國防工業(yè)出版社,1995.
[2].張海藩,軟件工程,人民郵電出版社,2008.
[3].Daniel J.Mosley, Bruce A.Posey,軟件測試自動化,機械工業(yè)出版社,2007.
[4].梅啟智、廖炯生、孫惠中,系統(tǒng)可靠性工程基礎(chǔ),科學(xué)出版社,1992.
[5].Elfriede Dustin,有效軟件測試 ,清華大學(xué)出版社,2004.
注:文章內(nèi)所有公式及圖表請以PDF形式查看。