軟件測試的目的是通過發(fā)現(xiàn)程序中的錯誤來提高軟件產(chǎn)品的質(zhì)量,一個成功的測試是發(fā)現(xiàn)了至今未發(fā)現(xiàn)的錯誤的測試,通過不斷測試、修改、再測試、再修改,不斷持續(xù)循環(huán)的過程來提高軟件產(chǎn)品的質(zhì)量,規(guī)避軟件系統(tǒng)上線后由于潛在的缺陷造成的風(fēng)險(xiǎn)隱患所帶來的商業(yè)風(fēng)險(xiǎn)。可以說軟件測試只能證明軟件存在缺陷的過程。
軟件測試的誤區(qū)
軟件測試很容易讓人產(chǎn)生一種誤解,特別是一些不懂軟件測試的項(xiàng)目管理人員、開發(fā)人員、DBA、運(yùn)營等人認(rèn)為軟件測試工作就是為了找bug,不就是在軟件程序上點(diǎn)點(diǎn)點(diǎn)嗎?把軟件測試工作看得一文不值,導(dǎo)致軟件測試人員的在公司的地位比較低,同時給剛畢業(yè)的大學(xué)生也造成了一些誤解,認(rèn)為軟件測試工作簡單好做,門檻低,沒有技術(shù)含量,只要是人就能做。每一項(xiàng)工作的目的都是有價(jià)值的,就像我們軟件測試,它的主要價(jià)值就在于發(fā)現(xiàn)程序中的錯誤提高軟件的質(zhì)量,如果沒有軟件測試,用戶誰敢用我們企業(yè)的軟件,我們的質(zhì)量怎么能夠保證?
作為一名合格的軟件測試工程師,除了找到缺陷,還需要跟蹤缺陷,直至問題完全修復(fù),然后對缺陷進(jìn)行回歸確認(rèn),最后關(guān)閉缺陷。除此之外,測試人員還需要分析這個問題,找到這個問題發(fā)生了根本原因,避免類似問題在其他產(chǎn)品或模塊再次發(fā)生。
軟件測試的定義
大家都知道軟件是由文檔、數(shù)據(jù)、源代碼等配置項(xiàng)組成,所以軟件測試針對的也就不僅僅是軟件本身,而是包括軟件形成過程的文檔、數(shù)據(jù)以及源代碼。軟件測試是指在規(guī)定的條件下對軟件進(jìn)行功能驗(yàn)證、性能效率、安全性、可靠性等軟件特性驗(yàn)證的過程,以發(fā)現(xiàn)軟件運(yùn)行中的錯誤來度量軟件質(zhì)量。也就是說軟件測試是一種實(shí)際輸出與預(yù)期輸出之間的審核或者比較過程。
軟件測試分類
按測試技術(shù)劃分
1.白盒測試:注重程序內(nèi)部邏輯處理,能看見程序源代碼是基于代碼層面的測試,分為代碼走查和代碼審查。
2.黑盒測試:相對于白盒測試而言的一種測試方法,把程序理解成一種黑盒子,關(guān)注程序的輸入與輸出,看不到代碼。
3.灰盒測試:介于白盒和黑盒之間的一種測試方法
按測試內(nèi)容劃分
1.功能測試:屬于黑盒測試方法,通過測試人員設(shè)計(jì)具體的測試用例來驗(yàn)證軟件的功能是否符合需求。
2.界面測試:即UI測試,驗(yàn)證軟件界面布局是否符合客戶的風(fēng)格,不同的軟件具有不同的界面。
3.性能測試:通過對被測件施加并發(fā)壓力,獲取系統(tǒng)最大并發(fā)數(shù),響應(yīng)時間,吞吐量,為系統(tǒng)上線提供參考依據(jù)。
4.兼容性測試:主要分為瀏覽器兼容性、APP終端兼容性,通過兼容性測試來驗(yàn)證軟件系統(tǒng)是否具備最佳運(yùn)行表現(xiàn)。
5.安全測試:通過安全測試驗(yàn)證系統(tǒng)是否存在安全漏洞,是否具備防止非法請求入侵的能力,分為漏洞掃描、滲透測試、源代碼安全審計(jì)
6.易用性測試:驗(yàn)證軟件是否簡單易用
按測試對象是否運(yùn)行劃分
1.動態(tài)測試:通過運(yùn)行軟件程序才能驗(yàn)證軟件特性是否符合要求的測試
2.靜態(tài)測試:不運(yùn)行軟件程序,常用于文檔檢查,代碼走查
按測試手段劃分
1.手工測試:就是人工測試,執(zhí)行“點(diǎn)點(diǎn)點(diǎn)”的過程
2.自動化測試:通過相應(yīng)的測試工具(自研、采購)進(jìn)行的一種自動化測試,需要測試人員具有一定的編程能力
軟件測試模型
軟件測試模型常被用來指導(dǎo)整個軟件測試過程,常見的模型包括:V模型、W模型、H模型、X模型,其中V模型是最具代表性。主要說一下V模型吧,該模型呈現(xiàn)“V”字型,如下圖:
1.用戶需求與需求分析:收集用戶需求,并對用戶需求進(jìn)行分析的過程,也是軟件進(jìn)行系統(tǒng)測試、驗(yàn)收測試的依據(jù)。
2.概要設(shè)計(jì):建立系統(tǒng)的邏輯模型,主要任務(wù)是將一個復(fù)雜系統(tǒng)按功能進(jìn)行模塊劃分、建立模塊的層次結(jié)構(gòu)及調(diào)用關(guān)系、確定模塊間的接口及人機(jī)界面。
3.詳細(xì)設(shè)計(jì):對概要設(shè)計(jì)進(jìn)一步分析,屬于軟件開發(fā)的一部分,設(shè)計(jì)符合用戶需求的軟件產(chǎn)品。
4.編碼:對詳細(xì)設(shè)計(jì)中部分實(shí)現(xiàn)的過程。
5.單元測試:主要是測試程序代碼,為的是確保各單元模塊被正確的編譯,單元的具體劃分按不同的單位與不同的軟件有不同。
6.集成測試:驗(yàn)證各單元模塊間的功能實(shí)現(xiàn)情況,以及模塊接口連接的成功與否,數(shù)據(jù)傳遞的正確性等,主要目的是檢查軟件單位之間的接口是否正確。
7.系統(tǒng)測試:把軟件系統(tǒng)搭建起來,驗(yàn)證軟件其功能、性能等是否符合用戶需求,在系統(tǒng)中運(yùn)行是否存在漏洞等。
8. 驗(yàn)收測試:項(xiàng)目交付驗(yàn)收。
軟件測試的發(fā)展前景
最近幾年,隨著“互聯(lián)網(wǎng)+”浪潮的興起,軟件測試技術(shù)也在不斷進(jìn)步,如:非功能測試、接口測試、自動化測試、滲透測試、源代碼測試等,對測試人員的要求越來越高,普通的功能測試工作逐漸被自動化的測試工作所替代。另一方面,企業(yè)項(xiàng)目管理者也越來越重視軟件測試工作,不惜花重金聘請測試專家來公司指導(dǎo)測試工作,測試人員的地位和待遇也在不斷提升。