郭學君
北京賽迪軟件測評工程技術中心有限公司 北京 100004
現代信息技術的發(fā)展給當代人們的生活帶來了極大的便利,各種各樣的軟件改變了人們的生活方式,人們利用軟件進行購物、買房、在線學習等活動,而在計算機軟件研發(fā)的過程中,軟件測試是一個不可省略的環(huán)節(jié),通過軟件測試,可以有效發(fā)現計算機軟件中的漏洞,并對軟件的適用性進行評估,從而保證軟件的質量。
計算機軟件測試的主要目的就是為了查找軟件程序中的各種漏洞,這些bug能夠影響軟件的正常運行,從而影響用戶的體驗效果。要想將這些問題和錯誤全面的檢測出來,就需綜合利用多種檢測手段來進行發(fā)現,并針對問題做出一些優(yōu)化,改善軟件性能和質量[1]。當然,軟件檢測技術還能對軟件的后續(xù)性能優(yōu)化提供了一定的借鑒價值,比如軟件的運行速度、運行穩(wěn)定性等,均可以通過軟件測試來進行修正。此外,軟件測試還有一個重大的功能,就是可以檢測系統(tǒng)是否攜帶病毒,如果系統(tǒng)軟件受到病毒入侵,而沒有及時發(fā)現的話,很可能對整個系統(tǒng)造成不可逆轉的損害。因此,測試人員要對軟件的安全性進行測試,查看軟件對病毒的抵御能力,防止病毒攻擊,保證軟件的正常及安全運行。
1.2.1 實用原則。計算機軟件在研發(fā)之時,要先進行市場需求調查和分析,保證軟件的性能和結構符合市場需求,然而研發(fā)人員在編寫軟件時,會由于受到主觀因素的影響,導致最終成型的軟件存在一些需求誤差,因此,為了保證計算機軟件的實用性,必須對軟件的結構與性能進行測試,也就是說,計算機軟件要保證在已有的測試方法中進行適應性分析,對軟件自身的特質和性能與現有技術之間進行兼容性考量,從而在軟件開發(fā)過程中,有針對性的降低各種影響測試過程的因素影響[2]。這從一定程度上,呈現出了軟件測試必須遵循實用性原則,即需要采取一些特定的策略來簡化測試流程,以便測試人員在較短的時間內完成測試工作。
1.2.2 科學性原則。當前,市面上的軟件測試方法多種多樣,在進行軟件測試時,必須依據具體情況來選擇適宜的測試方法,以保證軟件測試結果的準確性。比較常用的軟件測試方法分為黑盒測試和白盒測試,而這兩種方法均有不同的應用條件,比如針對黑盒測試,主要適用于軟件的具體功能性問題;針對白盒測試,主要適用于軟件中存在的代碼邏輯結構問題,便于迅速定位問題。總之,軟件測試要具有科學性,相關技術人員應當在分析軟件功能以及結構的基礎上,選擇恰當的測試方法。
由上文可知,目前計算機軟件測試方法主要是黑盒測試法和白盒測試法,兩種方法需要針對具體軟件特性來進行分別選用。
黑盒測試法是一種較為有效的測試方法,由于其對軟件的功能進行專項測試,因此也叫作功能性測試,主要測試目的就是看計算機軟件是否在使用過程中基本功能有漏洞。從其字面意思上來進行理解,測試者可以將軟件看作一個黑盒,其內部狀態(tài)無法得知,測試人員從用戶角度輸入輸出來進行考慮,對軟件的內部程序及其接口進行測試[3]。從另外一個角度來看,如果軟件運行的外部環(huán)境存在問題,此時不進行黑盒測試,就沒有辦法直接反映出軟件存在的諸多漏洞。由于受到黑盒測試的特性所限制,黑盒測試無法對軟件功能進行全面測試,只有針對明確且具體的問題時,進行窮舉法進行測試,才具有較為明顯的效果,因此,其具體測試項目主要包括檢測軟件在開發(fā)中存在的功能性錯誤、軟件運行界面存在的問題以及軟件初始化錯誤等,相關測試人員應當在適當時候選用這種測試方法。
白盒測試也叫作結構性測試,主要測試計算機軟件程序內部的結構,測評軟件程序的結構是否與規(guī)定一致,程序通路是否與預期相符。稱其為白盒測試,正是因為期檢測方法與黑盒測試相對立[4]。如果說進行黑盒測試時將軟件視為無法打開的黑盒,在進行白盒測試時則將軟件視為被完全打開的盒子,然后考察軟件程序的邏輯路徑,從而對軟件程序能否達到預期狀態(tài)進行評估,確保軟件程序的安全性。
靜態(tài)測試法相比于黑盒測試、白盒測試來說,具有全面性的優(yōu)勢,其主要測試項目包括代碼走查、技術評審等方面,特別是對程序的接口、過程等進行全面的測試來說,具有不可比擬的優(yōu)勢。此外,針對程序結構的查找、程序符號與設計說明書是否保持一致、不匹配參數的存在等方面也有測試優(yōu)勢,是一種比較常用的測試方法。
動態(tài)測試法是與靜態(tài)測試法相對應的計算機軟件測試方法,主要通過軟件運行,在動態(tài)過程中對軟件運行行為及結果進行測試,以確定軟件是否與設計標準相符合。在采用動態(tài)測試法時,要使軟件完整運行,從而對其運行狀況進行全面檢查,然后形成軟件測試的相關數據,推動計算機軟件測試工作的開展。
計算機軟件測試方法及原理雖然并不是很多,但是隨著社會經濟的發(fā)展,現代科學技術得到了極大的進步,這種情況催生出了較多的軟件測試技術,這些技術極大的促進軟件測試行業(yè)的可持續(xù)發(fā)展,接下來本文對這些技術的應用進行詳細的闡述。
單元測試技術是一種比較基礎的測試技術,但是這種技術在獲取程序狀態(tài)、Mock技術等方面的應用十分有效。
首先,針對獲取程序狀態(tài),由于單元測試代碼和程序代碼鏈接到了一起,但是單元測試代碼從一定程度上來說,可以獲得程序內部的所有代碼,當然,在一些特定的應用場景下,程序代碼的獲取方式并不那么直接。比如,對于C++語言,由于內部語言進行了各種形式的封裝,從語言層面實現了對程序狀態(tài)的隱藏,從而導致測試代碼無法獲得所有的狀態(tài)。這在C++中,其內部隱藏代碼就如同一個私密成員,測試代碼無法直接獲取這些信息,當然,為了實現這種“私密成員”的可測試,可以將一些public的一些函數直接暴露出來,構建一種friendclass訪問類,這樣就可以實現繞開private的限制,直接訪問類里面的所有成員[5]。總之,這種封裝性較為嚴密的語言難以有效進行測試,但是可以通過一些技術手段來將一些private成員進行外顯,當然,要想實現可測試性,就必須對封裝進行破壞,而這明顯不利于軟件運行的穩(wěn)定性,因此技術人員要想對此進行有效應用,需要掌握好測試的度,盡量保證封裝性的同時采用單元測試技術。
其次,針對Mock技術,是單元測試的一種延伸,主要是對程序內部的行為代碼進行檢驗,并對其行為進行模擬。在ZBS中,Mock技術是一種極其常用的技術手段,其測試原理其實十分簡單,就是利用Mock技術屏蔽上層代碼的感知,從而修改下層代碼的邏輯結構。當然,針對下層代碼邏輯的變化主要是利用函數指針來進行實現,此外,還可以用繼承和模板來進行修改,比如繼承,要想實現Mock技術的功能,就需要將類分解成為基類和子類,將子類全部放在實現類別中,那么在具體的測試代碼構建時,就可以直接繼承基類,達到實現Mock功能的目的。
系統(tǒng)測試技術具有自身獨特的應用范圍,主要針對的是軟件系統(tǒng)的功能、性能及易用性進行測試,對這些功能、性能等進行測試的主要目的就是為了迎合市場需求,最大程度的滿足用戶的一切需求。系統(tǒng)測試技術要與黑盒測試結合使用,并將用戶的需求清單與軟件編程系統(tǒng)進行一一對比,從中找出一些需求上的不足,進而針對不足和漏洞采用具體的方法進行優(yōu)化。在應用系統(tǒng)測試技術時,也需要注意一些問題,比如軟件的安全與精度,測試人員要全程監(jiān)控好系統(tǒng)運行的速度,避免運行速度過快導致測試出現一些誤差。
集成測試技術也是一種比較常見的計算機軟件測試技術,其應用極其廣泛,目前,集成測試技術主要分為兩種,一是漸增測試,這種測試主要是將待測模塊與已測模塊相連接,連接之后等待一段時間,等測試完成后再進入下一階段,這樣做的主要原因是在測試過程中,測試模塊會越積越多,如果不等待,貿然進行下一階段的測試會導致測試失效,如此多的測試模塊,技術人員也必須保證集成方式的適宜性,保證模塊能夠切實地連接到軟件程序之中;二是非漸增測試,這種測試相比于前者來說,從另外一個角度來對模塊進行連接,通過與其結構圖進行全面連接,并參照相應標準從整體上進行測試,這是其測試的基本內在邏輯。總之,集成測試技術在計算機軟件測試上的應用已經相對成熟,并逐漸對測試形式進行了創(chuàng)新,切實地增強了測試效率,提升了測試速度。
用戶驗收測試主要是針對軟件的可用性及功能進行的,目的在于驗證軟件的運行程序是否符合業(yè)務要求。用戶驗收測試可分為α測試和Beta測試。α測試過程中,需要在開發(fā)環(huán)境下進行測試,完善的受控環(huán)境是該測試必備的條件之一,如此才能保證軟件測試的有效性。Beta測試是在進行功能及系統(tǒng)測試之后進行的,是技術測試的最后階段。因此,在進行Beta測試時,要明確用戶場,通過對測試記錄的分析,將計算機軟件中的潛在問題反饋給開發(fā)者。
計算機軟件測試是軟件開發(fā)成功的前提和基礎,它能保證軟件開發(fā)的可靠性、實用性和安全性,因此,在編寫軟件程序后,相關人員還必須對軟件程序進行一系列測試,以確定軟件在功能、運行效果和安全性方面是否符合預期,一般在基本軟件開發(fā)完成后,測試人員還會檢測軟件的運行環(huán)境,他們將一些隨機數據輸入計算機,經軟件程序核算后,判斷數據是否符合相應的級別和核算要求,為保證軟件程序核算的準確性和可靠性,會插入一些特殊參數,隨機選取要采集的數據,如果輸出結果與軟件功能一致,則軟件通過測試;相反,如果測試結果與軟件的功能不一致,則意味著軟件與開發(fā)應用需求存在差距,不能超越測試,近年來,隨著中國信息化進程的加快和計算機技術的進步,我國軟件開發(fā)的數量和水平有了很大的提高,一些專門用于計算機軟件測試的程序相繼出現,這種類型的測試軟件由于開發(fā)環(huán)境的不同和技術上的局限性,仍然存在一定的問題,比如一個測試軟件只能測試一個固定類型的軟件,所以檢測的準確性會大大降低,因此,在軟件投放市場之前,有必要增加一個測試工具,對被測軟件進行二次測試,以保證計算機測試的準確性。
總之,測試軟件是保證軟件安全有效運行的前提。軟件測試技術能夠快速識別軟件設計和應用中的缺陷,及時修復和更新,避免軟件應用缺陷等風險因素,在計算機軟件測試中,必須嚴格尊重實用性和科學性,并從用戶需求和應用實踐兩方面保證軟件的功能效果,在計算機開發(fā)和應用過程中,要進行設計、開發(fā)和維護以及其他環(huán)節(jié)來保證軟件開發(fā)的質量和效率。軟件程序編寫完成后,利用測試技術對軟件的功能、性能和安全性進行測試,為軟件開發(fā)提供更多的過濾和科學的檢查。