韓肖杰 周陸洲 徐其崗
【摘要】本文的主要結果詳略恰當地給出了軟件測試技術的定義、原則、分類與就業前景分析。進行一次完整的軟件測試論述,并完成測試過程的一些方法。
【關鍵詞】SQA,軟件開發,“80-20原則”,黑盒,白盒,BUG,內存泄漏,Linux、Oracle,壓力測試,靜態測試,動態測試,單元測試
軟件測試定義
軟件測試就是利用測試工具按照測試方案和流程對產品進行功能和性能測試,甚至根據需要編寫不同的測試工具,設計和維護測試系統,對測試方案可能出現的問題進行分析和評估。執行測試用例后,需要跟蹤故障,以確保開發的產品適合需求。它是幫助識別開發完成(中間或最終的版本)的計算機軟件(整體或部分)的正確度(correctness) 、完全度(completeness)和質量(quality)的軟件過程;是SQA(software quality assurance)的重要子域。
測試原則
1.軟件開發人員即程序員應當避免測試自己的程序不管是程序員還是開發小組都應當避免測試自己的程序或者本組開發的功能模塊。若條件允許,應當由獨立于開發組和客戶的第三方測試組或測試機構來進行軟件測試。但這并不是說程序員不能測試自己的程序,而且更加鼓勵程序員進行調試,因為測試由別人來進行會更加有效、客觀,并且容易成功,而允許程序員自己調試也會更加有效和針對性。
2. 應盡早地和不斷地進行軟件測試,應當把軟件測試貫穿到整個軟件開發的過程中,而不應該把軟件測試看作是其過程中的一個獨立階段。因為在軟件開發的每一環節都有可能產生意想不到的問題,其影響因素有很多,比如軟件本身的抽象性和復雜性、軟件所涉及問題的復雜性、軟件開發各個階段工作的多樣性,以及各層次工作人員的配合關系等。所以要堅持軟件開發各階段的技術評審,把錯誤克服在早期,從而減少成本,提高軟件質量。
3.對測試用例要有正確的態度:第一,測試用例應當由測試輸入數據和預期輸出結果這兩部分組成;第二,在設計測試用例時,不僅要考慮合理的輸入條件,更要注意不合理的輸入條件。因為軟件投入實際運行中,往往不遵守正常的使用方法,卻進行了一些甚至大量的意外輸入導致軟件一時半時不能做出適當的反應,就很容易產生一系列的問題,輕則輸出錯誤的結果,重則癱瘓失效!因此常用一些不合理的輸入條件來發現更多的鮮為人知的軟件缺陷。
4.人以群分,物以類聚,軟件測試也不例外,一定要充分注意軟件測試中的群集現象,也可以認為是“80-20原則”。不要以為發現幾個錯誤并且解決這些問題之后,就不需要測試了。反而這里是錯誤群集的地方,對這段程序要重點測試,以提高測試投資的效益。
5.嚴格執行測試計劃,排除測試的隨意性,以避免發生疏漏或者重復無效的工作。應當對每一個測試結果進行全面檢查。一定要全面地、仔細地檢查測試結果。
測試目的
目的是盡可能發現并改正被測試軟件中的錯誤,提高軟件的可靠性。它是軟件生命周期中一項非常重要且非常復雜的工作,對軟件可靠性保證具有極其重要的意義。在目前形式化方法和程序正確性證明技術還無望成為實用性方法的情況下,軟件測試在將來相當一段時間內仍然是軟件可靠性保證的有效方法。軟件工程的目標是充分利用有限的人力和物力資源,高效率、高質量地完成軟件開發項目。不足的測試勢必使軟件帶著一些未揭露的隱藏錯誤投入運行,這將意味著更大的危險讓用戶承擔。過度測試則會浪費許多寶貴的資源。E.W.Dijkstra的一句名言說明了這一道理:“程序測試只能表明錯誤的存在,而不能表明錯誤不存在。”可見,測試是為了使軟件中蘊涵的缺陷低于某一特定值,使產出、投入比達到最大。
測試分類
1、黑盒測試:
指把被測軟件看作是一個黑盒子,我們不去關心盒子里面的結構是什么樣子的,只關心軟件的輸入數據和輸出結果。
2、白盒測試:
指把盒打開,去研究里面的源代碼和程序結構。
3、靜態測試:
指不實際運行被測軟件,而只是靜態地檢查程序代碼、界面或文檔中可能存在錯誤的過程。對于代碼測試,主要測試代碼是否符合相應的標準和規范。對于界面測試,主要測試軟件的實際界面與需求中的說明是否相符。對于文檔測試,主要測試用戶手冊和需求說明是否真正符合用戶的實際需求。
4、動態測試:
指實際運行被測程序,輸入相應的測試數據,檢查實際輸出結果和預期結果是否相符的過程。所以我們判斷一個測試屬于動態測試還是靜態測試,唯一的標準就是看是否運行程序。
5、單元測試:
指對軟件中最小可測試單元進行檢查和驗證。例如:C語言中,單元一般指1個函數;在Java里,單元一般指1個類在圖形化的軟件中,單元也可以指1個窗口,1個菜單等。總結起來,單元就是人為規定的最小的被測功能模塊。
6、壓力測試:
壓力測試用來評估在超越最大負載的情況下系統將如何運行。壓力測試的目標就是發現在高負載的條件下應用程序的缺陷(BUG)。包括:內存泄漏。壓力測試能讓您識別程序的弱點和在極限負載下程序將如何運行。
就業前景
它是軟件生產過程中的質量管理者,其不但要對軟件產品最后的功能、性能負責,而且從軟件的“需求分析”、“結構設計”階段以及文檔規范等諸多方面就開始對軟件的質量加以保障,讓用戶用上高質量的軟件。隨著我國加入WTO及國內軟件企業的日益成熟和壯大,軟件測試在業界的地位已經變得越來越重要。
軟件測試是目前較新的一個IT領域,同級別軟件測試的人員不會比開發者薪水低,甚至更高。軟件日益復雜,質量問題日益凸顯,軟件測試是降低軟件項目風險、提高企業競爭力的最佳手段。企業一方面對軟件測試工程師需求量大增,另一方面,則“萬金”難求一優秀的測試工程師。具備開發能力的軟件測試工程師、掌握扎實的Linux、Oracle基礎知識的測試工程師、掌握自動化測試技術的測試工程師、具備測試設計能力的測試工程師更是少之又少。看看iPhone的受歡迎程度,正是軟件測試的實力體現。高層次的軟件測試專業人員競爭要少得多。