1、軟件測試概述
軟件測試的IEEE定義:使用人工或自動的手段來運行或測量軟件系統的過程,目的是檢驗軟件系統是否滿足規定的需求,并找出與預期結果之間的差異。軟件測試的發展趨勢:
①測試將進一步前移。軟件測試不僅僅是單元測試、集成測試、系統測試和驗收測試,還對需求的精確性和完整性的測試技術、對系統設計的測試技術將成為新的研究熱點。
②軟件架構師,開發工程師,QA人員,測試工程師將進行更好的融合
③測試職業將得到更充分的尊重。
④設置獨立的軟件測試部門將成為未來軟件公司的共識。
⑤測試外包服務將快速增長,和軟件開發外包一樣,軟件測試外包將成為全球化的趨勢。
軟件測試工程師的素質:
責任心;溝通能力;團隊合作精神;耐心、細心和信心;保持懷疑的態度,有缺陷預防的意識;不斷學習的能力。
合格的測試工程師應具有的能力:
①一般能力:包括表達、交流、協調、管理、質量意識、軟件開發過程方法、軟件工程等;
②測試技能及方法:包括測試基本概念及方法、對測試工具的掌握、對專業測試標準的熟悉程度等;
③測試規劃能力:包括風險分析及防范能力、測試目標及計劃的制定能力等;
④測試執行能力:包括測試數據/腳本/用例的制定能力、測試比較及分析能力、缺陷記錄及處理能力;
⑤測試分析、報告和改進能力:包括測試度量、統計技術、測試報告、過程監測及持續改進能力。
測試工程師的職責:
測試人員要了解項目需求內容,從用戶的角度提出自己的測試看法;
測試人員要編寫合理的測試計劃并與項目整體計劃有機地整合在一起;
測試人員要編寫覆蓋率高的測試用例;測試人員要認真仔細的實施測試,并提交測試報告以供項目參考;
測試人員要進行缺陷跟蹤和分析。
2、軟件測試基礎軟件的概念
軟件是計算機系統中與硬件相互依存的一部分,包括程序、數據、與其相關文檔的完整結合。軟件=程序+數據+文檔。
軟件的特點:
①軟件是一種邏輯體,而不是具體的物理體,因而它具有抽象性;
②軟件的生產與硬件不同,它沒有明顯的制造過程,對軟件質量的控制,必須在開發方面下功夫;
③在軟件運行和使用期間,沒有硬件那樣的機械磨損和老化問題,然而它存在退化問題,必須進行多次的修改和維護;
④軟件的開發和運行常常受計算機系統的制約,對計算機系統有著不同程度的依賴性,為了解除這種依賴性,在軟件開發過程中提出了軟件移植問題。
⑤軟件本身是復雜的,軟件的復雜性可能來自它所反映問題的復雜性,也可能來自程序邏輯結構的復雜性。
⑥軟件成本的昂貴。軟件的研制需要投入大量的、復雜的、高強度的腦力,它的成本比較高。
軟件的分類:
按照功能劃分:
系統軟件:如操作系統、數據庫管理系統,各種驅動軟件等
應用軟件:如Office、金山詞霸、QQ等
按照技術結構劃分:
單機版本:如Office,畫圖工具等
C/S結構軟件:如QQ、MSN等
B/S結構軟件:如新浪、搜狐、google等
按照用戶劃分:
產品軟件:Office、財務處理軟件、金山毒霸等
項目軟件:如為企業定制的OA系統等
按照開發規模劃分:
類別參與人數開發時間
小型10人以下1-4個月
中型10-100人1年以下
大型100人以上1年
軟件測試的概念:
軟件測試就是為了發現錯誤而執行程序的過程(狹義觀點)。
使用人工或自動的手段,來運行或測試軟件系統的過程,目的是檢驗軟件系統是否滿足規定的需求,并找出與預期結果之間的差異。(標準定義IEEE)
軟件測試就是為了證明程序有錯,而不是證明程序無錯誤(辨證觀點)。
測試被定義為“對軟件系統中潛在的各種風險進行評估的活動”。(風險觀點)軟件測試就是“驗證(Verification)”和“有效性確認(Validation)”活動構成的整體,即軟件測試V&V。(標準觀點)
要完整理解軟件測試,就要從不同方面去審視軟件測試,概括起來,軟件測試就是貫穿整個軟件開發生命周期,對軟件產品(包括階段性產品)進行驗證和確認的活動過程,其目的是盡快盡早地發現在軟件的缺陷。
軟件測試的對象:
①源程序/目標代碼
②各開發階段的文檔(需求規格說明、概要設計說明、詳細設計說明及其它相關文檔)
軟件測試的目的:
從用戶角度看的目的:通過軟件測試發現隱藏的錯誤和缺陷,考慮是否可以接受該產品。從開發者角度看的目的:表明軟件產品不存在錯誤,驗證軟件實現了所有用戶的要求。從測試人員角度看的目的:發現錯誤,預測錯誤,提供軟件可靠性錯誤,對軟件做出評價。
①幫助開發人員、測試工程師發現問題、分析問題。
②減少軟件的缺陷數目或者降低軟件缺陷的密度。
③提高軟件的可靠性
④評估軟件的性能指標。
⑤增加用戶對軟件的信心。
⑥測試的最終目的是盡快盡早地發現在軟件中的缺陷,通過修正各種錯誤和缺陷提高軟件質量,回避軟件發布后由于潛在的軟件缺陷和錯誤造成的隱患所帶來的商業風險。
軟件測試的原則:
①所有測試的都應追溯到用戶需求。
②應當把“盡早地和不斷地進行軟件測試”作為軟件測試者的座右銘。
③由于軟件的復雜性和抽象性,在軟件生命周期各個階段都可能產生錯誤,所以不應把軟件測試僅僅看作是軟件開發的一個獨立階段的,而應當把它貫穿到軟件開發的各個階段中。在軟件開發的需求和設計階段就應開始測試,編寫相應的測試文檔。
④完全測試是不可能的,測試需要終止。
⑤想要進行完全的測試,在有限的時間和資源條件下,找出所有的軟件缺陷和錯誤使軟件趨于完美是不可能的主要有三個原因:①輸入量太大;②輸出結果太多;③路徑組合太多。
⑥測試無法顯示軟件潛在的缺陷:進行測試是可以查找并報告發現的軟件缺陷和錯誤,但不能軟件缺陷和錯誤全部找到。
⑦充分注意集試中群集現象(二八定理):經驗表明,在所測試程序段中,若發現的錯誤數目多,則殘存的錯誤數目也較多。缺陷的二八定理指的是,一般情況下,80%軟件缺陷出現在20%的功能區域,在測試過程中,投入主要的人力和精力重點測試這20%的功能區域。
⑧開發人員應避免檢查自己的程序:基于心理因素,揭露自己程序中的問題總不是一件愉快的事,不愿否認自己的;由于思維定勢,人們難于發現自己的錯誤。因此為達到測試的目的,應由客觀、公正、嚴格的獨立的測試部門或獨立的第三方測試機構進行測試。
⑨盡量避免測試的隨意性:應從工程的角度理解測試,它是有組織、有計劃、有步驟的活動。
軟件測試誤區:
誤區一:如果發布出去的軟件有質量問題,都是軟件測試人員的錯。
誤區二:軟件測試技術要求不高,至少比編程容易多了。
誤區三:有時間就多測試一些,來不及就少測試一些。
誤區四:軟件測試是測試人員的事,與開發人員無關。
誤區五:根據軟件開發瀑布模型,軟件測試是開發后期的一個階段。
3、軟件測試分類
單元測試:
單元測試又稱模塊測試,針對軟件設計中的最小單位——程序模塊,進行正確性檢查的測試。單元測試需要從程序的內部結構出發設計測試用例。多個模塊可以平行地獨立進行單元測試。
單元定義:
C中指一個函數,Java中指一個類,在圖形化的軟件中,單元一般指1個窗口,1個菜單。如何進行單元測試:單元測試主要用白盒測試,先靜態地檢查代碼是否符合規范,然后動態運行代碼,檢查其實際運行結果,檢查程序的運行結果是否正確是一個最基本的要求,還要關注容錯處理,程序的邊界值處理等。
集成測試:
集成測試又叫組裝測試,通常在單元測試的基礎上,將所有程序模塊進行有序的、遞增的測試。重點測試不同模塊的接口部分。
系統測試:
指將整個軟件系統看為一個整體進行測試,包括對功能、性能、以及軟件所運行的軟硬件環境進行測試。
驗收測試:
驗收測試指按照項目任務書或合同、供需雙方約定的驗收依據文檔進行的對整個系統的測試與評審,決定是否接收或拒收系統。在系統測試的后期,以用戶測試為主或有測試人員等質量人員共同參與的測試。
α測試:指的是指的是由用戶,測試人員、開發人員等共同參與的內部測試。
β測試:指的是內測后的公測,即完全交給最終用戶測試驗收測試的重要性:驗收簽字,收錢。
靜態測試:指不實際運行被測軟件,而只是靜態地檢查程序代碼、界面和文檔中可能存在的錯誤的過程。
動態測試:指實際運行被測程序,輸入相應的測試數據,檢查實際輸出結果與預期結果是否相符。(動態測試方法為結構和正確性測試;動態測試工具Robot、QTP等)
黑盒測試:指的是把被測的軟件看做一個黑盒子,我們不關心盒子里面的結構是什么樣子的,只關心軟件的輸入數據和輸出
白盒測試:指的是把盒子打來,去研究里面的源代碼和程序結構。軟件公司中,往往采用黑盒測試&白盒測試相結合的方式。
靜態黑盒測試:看文檔,看頁面等
靜態白盒測試:看源代碼等
動態黑盒測試:使用軟件等
動態白盒測試:運行源代碼等
灰盒測試:是介于白盒測試與黑盒測試之間的一種測試,灰盒測試多用于集成測試階段,不僅關注輸出、輸入的正確性,同時也關注程序內部的情況。
功能測試:是黑盒測試的一方面,它檢查實際軟件的功能是否符合用戶的需求。
邏輯功能測試(functiontesting)
界面測試(UItesting)
易用性測試(usability testing)
安裝測試(installationtesting)
兼容性測試(compatibilitytesting)
性能測試:是軟件測試的高端領域,通常我們所說的高級軟件測試工程師一般就是指性能測試或是白盒測試工程師。時間性能(事務響應時間等)空間性能(系統資源消耗)一般性能測試可靠性測試負載測試壓力測試
回歸測試:指對軟件的新版本測試時,重復執行上一個版本測試時的用例。
冒煙測試:是指在對一個新版本進行系統大規模的測試之前,先驗證一下軟件的基本功能是否實現,是否具備可測試性。
隨機測試:是指測試中所有的輸入數據都是隨機生成的,其目的是模擬用戶的真實操作,并發現一些邊緣性的錯誤。
軟件測試的過程:從軟件開發的過程按階段劃分有:需求驗證、單元測試、集成測試、確認測試、系統測試、驗收測試
4、白盒測試用例設計方法
測試用例(英文為TestCase,縮寫為TC):指的是在測試執行之前設計的一套詳細的測試方案,包括測試環境、測試步驟、測試數據和預期結果。測試用例可以針對黑盒測試設計用例,也可以針對白盒測試設計用例。編寫測試用例的唯一標準就是用戶需求,具體的參考資料是《需求規格說明書》。
設計測試用例的原因:軟件測試是一項有組織、有計劃、有步驟的活動,為了將軟件測試的行為轉換為可管理的、具體量化的模式,需要創建和設計測試用例。
測試用例的四性:
代表性:能夠代表并覆蓋各種合理的和不合理合法的和不合法的、邊界的和越界的以及極限的輸入數據、操作等。
針對性:對程序中的可能存在的錯誤有針對性地測試。
可判定性:測試執行結果的正確性是可判定的,每一個測試用例都應有相應的期望結果。
可重現性:對同樣的測試用例,系統的執行結果應當是相同的。
測試用例的基本原則:
利用成熟的測試用例設計方法來指導設計
測試用例的針對性
測試用例的代表性
測試用例的可判定性
測試用例的可重現性足夠詳細、準確和清晰的步驟
測試用例必須符合內部的規范的要求
語句覆蓋:語句覆蓋就是設計若干個測試用例,運行被測試程序,使得每一條可執行語句至少執行一次;
判定覆蓋(也稱為分支覆蓋):設計若干個測試用例運行所測程序使程序中每個判斷的取真分支和取假分支至少執行一次;
條件覆蓋:設計足夠多的測試用例,運行所測程序,使程序中每個判斷的每條件覆蓋設計足夠多的測試用例行所測程序使程序中每個判斷的每個條件的每個可能取值至少執行一次;
判定-條件覆蓋:設計足夠多的測試用例,運行所測程序,使程序中每個判斷的每個條件的所有可能取值至少執行一次,并且每個可能的判斷結果也至少執行一次,換句話說,即是要求各個判斷的所有可能的條件取值組合至少執行一次;
條件組合測試:設計足夠多的測試用例,運行所測程序,使程序中每個判斷的所有可能的條件取值組合至少執行一次;
路徑測試:設計足夠多的測試用例,運行所測程序,要覆蓋程序中所有可能的路徑。
主要測試技術:分支條件覆蓋,基本路徑測試
5、黑盒測試用例設計方法
主要測試技術:等價類劃分(邊界值分析),因果圖法,(正交實驗法)
6、缺陷管理軟件缺陷
軟件缺陷:
是指存在于軟件(程序、數據、文檔)中的那些不符合用戶需求的問題。
軟件缺陷的來源:
需求說明書:需求說明書的錯誤或不清楚引起的錯誤,是缺陷第1大的來源。
設計文檔:設計文檔描述不準確、以及與需求說明書不一致,是缺陷的第二大來源。
編碼:純粹是由編碼的問題引起。
其它:可能是系統集成、測試引起。
軟件缺陷的根源:交流不充分(客戶與開發人員、開發人員與測試人員等)軟件的復雜性(功能復雜、開發復雜、測試復雜)開發人員的錯誤(對需求的理解、開發壓力、能力與經驗)需求的變化(需求說明書設計文檔程序的變更)進度壓力(項目周期比較緊)
軟件缺陷的發現手段:同行評審、測試、管理評審、QA發現、項目組內部發現、客戶反饋為了便于缺陷的定位、跟蹤和修改,要對所發現的缺陷,按照缺陷的嚴重程度、優先級、發現階段、修復階段、缺陷的性質、所屬功能模塊、系統環境等方面進行分類和統計。
二八定理:80%的軟件問題總是發生在大約20%的功能模塊中。
缺陷密度:基本的缺陷測量是以每千行代碼的缺陷數(個/KLOC)來測量的,其測量單位是defects/KLOC。
常見尋找bug的方法:色彩、功能結構布局、、頁面大小、字體、窗體大小、界面文字、容錯處理(也為功能缺陷,所謂容錯,就是容忍錯誤的能力。當用戶在使用軟件過程中發生錯誤后,軟件應該能給出引導信息,指應用戶進行正確的操作)、數據轉換(增刪改查)、性能缺陷(黑盒測試)。
Web測試:
Web測試即測試網站系統在不同客戶端(瀏覽器)的運行情況及兼容性。
Selenium:
Selenium是一個用于Web應用程序測試的工具。Selenium測試直接運行在瀏覽器中,就像真正的用戶在操作一樣。