軟件缺陷:
1)軟件未實現產品說明書要求的功能
2)軟件出現了產品說明書指明不應該出現的錯誤
3)軟件實現了產品說明書未提到的功能
4)軟件未實現產品說明書雖未明確提及但應該實現的目標
5)軟件難以理解、不易使用、運行緩慢或者從測試員的角度看最終用戶會認為不好
軟件測試:為了發現軟件產品中的各種缺陷,而對軟件產品進行驗證和確認的活動過程,此過程貫穿整個軟件開發生命周期。 簡單的說,軟件測試是以發現錯誤為目的而執行的一個程序或系統的過程。
軟件測試的目的:
- 驗證軟件需求和功能是否得到完整實現
- 驗證軟件是否可以發布
- 盡可能多的發現軟件中的bug
- 盡可能早的發現軟件中的bug
- 對軟件質量做出合理評估
- 預防下個版本可能出現的問題
- 預防用戶使用可能出現的問題
- 發現開發過程中的問題和風險
軟件測試的原則:
- 所有測試的標准都是建立在用戶需求之上 。
- 合理控制測試深度與廣度,完全測試不可能,測試的投入與產出要均衡。
- 80-20原則,軟件中80%的bug可以在分析、設計與評審階段就能被發現與修正,16%的缺陷在系統的軟件測試中發現,最后剩下的4%是用戶長期使用的過程中才能暴露出來。
- 盡可能早的開展測試,越早發現錯誤,修改的代價越小。
- 發現錯誤較多的程序段,應進行更深入的測試。
- 軟件項目一啟動,軟件測試也就是開始,而不是等程序寫完,才開始進行測試 。
- 軟件開發人員即程序員應當避免測試自己的程序
- 嚴格執行測試計划,排除測試的隨意性,以避免發生疏漏或者重復無效的工作
優秀測試人員應具備的素質:1)溝通能力與表達能力 2)好奇心與懷疑精神 3)責任感與抗壓能力 4)自信心,堅持自己的觀點
5)耐心與細心 6)逆向思維的能力 7)善於學習與總結 8)團隊協作精神 9)文檔編寫能力
優秀測試人員應具備的技能:1)精通業務知識 2)具備軟件編程能力,比如C,C++,JAVA等。 3)可以用腳本語言編寫小測試工具
4)主流操作系統應用與網絡知識,可以搭建測試環境 5)熟練掌握各種數據庫知識 6)精通軟件測試理論與方法 7)掌握常用測試與開發工具的使用 8)優秀的文檔編寫能力
軟件測試的組織架構:
1)項目型的測試組織:測試人員作為項目組的固定成員,從頭到尾的跟着項目走
2)智能型的測試組織:測試人員參與到項目中,是以獨立的測試部門委派的方式進入
3)綜合型的測試組織:項目型與職能型的結構組合並加以改造而產生的。測試部門把測試人員,分為常規項目測試人員與專項測試人員。 測試部門會把常規測試人員長期委派到項目組中,成為項目中的一員。專項測試人員,一般由性能測試工程師、自動化測試工程師、安全性測試工程師等組成。只有當項目發生專門需求測試時,測試部門才靈活把專項測試人員委派到各個項目組進行專項測試。
軟件測試的分類:
1)按照是否執行被測試軟件來分:
靜態測試:是指不運行軟件,測試包括代碼檢查、靜態結構分析、代碼質量度量等,主要對軟件需求說明書、設計說明書、軟件源代碼進行檢查與分析。
動態測試:指通過運行被測程序,檢查運行結果與預期結果的差異,分析差異原因,並分析軟件運行效率、健壯性等性能。 動態測試是目前公司主要的測試方式
2)按照測試技術分為黑盒測試和白盒測試:
黑盒測試:黑盒測試又叫功能測試或數據驅動測試,在完全不考慮程序內部結構和內部特性的情況下,通過軟件的外部表現來發現其缺陷和錯誤。
白盒測試:白盒測試也稱結構測試或邏輯驅動測試,它是按照程序內部的結構進行測試程序,通過測試來檢測產品內部邏輯是否按照設計規格說明書的規定正常進行,檢驗程序中的每條通路是否都能按預定要求正確工作。
3)按照測試手段來分,可以分為手工測試和自動化測試
4)按照過程階段來分,可以分為單元測試、集成測試、系統測試和驗收測試
單元測試:通過模塊(類/方法/函數)測試,使代碼達到設計要求 主要目的是針對編碼過程中可能存在的各種錯誤,例如用戶輸入驗證過程中的邊界值的錯誤。
集成測試:將經過單元測試的模塊逐步組裝成完整的程序。 主要目的是檢查各單元與其它程序部分之間的接口是否存在問題,各模塊功能之間是否有影響。
系統測試:是將已經確認的軟件、計算機硬件、外設、網絡等其他元素結合在一起進行測試。 系統測試是針對整個產品系統進行的測試,目的是驗證系統是否滿足了需求規格的定義,找出與需求規格不符或與之矛盾的地方 ,進行改正。
驗收測試:驗收測試是在軟件產品完成了單元測試、集成測試和系統測試之后,產品發布之前所進行的最后一次軟件測試活動,也稱為交付測試。 通常由業務專家或用戶進行,以確認產品能真正符合用戶業務上的需要。
軟件開發流程(軟件生命周期):
計划-》需求分析-》設計-》程序編寫-》測試-》運行/維護
軟件測試流程:
測試計划-》需求分析-》測試用例-》測試用例執行-》提交bug-》回歸測試
軟件開發模型:
- 瀑布模型:適用於需求很明確的項目,分階段向下進行,無法回溯
- 迭代模型:需求不明確,迭代版本系統
- 敏捷開發模型:
敏捷開發是一種以人為核心、迭代、循序漸進的開發方法。 在敏捷開發中,軟件項目被切分成多個子項目,各個子項目的成果都經過測試,具備集成和可運行的特征。換言之,就是把一個大項目分為多個相互聯系,但也可獨立運行的小項目,並分別完成,在此過程中軟件一直處於可使用狀態。
- 測試驅動開發模型:先編寫測試代碼,再寫開發代碼
軟件測試模型:
V模型:反映了測試與開發階段之間一一對應的特點,測試在開發之后,出錯后回歸測試量大
W模型:測試伴隨整個開發周期,測試與開發同步進行,有利於盡早發現問題
H模型:軟件測試活動完全獨立,與其他流程並行