- 軟件測試技術實戰:設計、工具及管理
- 顧翔
- 3393字
- 2019-03-07 14:05:35
前言
軟件測試是軟件研發過程中的一個重要環節,作為一個獨立的工作是在我國20世紀末和21世紀初逐漸形成的。隨著軟件行業的發展,至今已有一支十分龐大的專門從事軟件測試工作的隊伍活躍在軟件企業中。
我是國內最早一批從事軟件測試的工程師,先后在北京炎黃新星互聯網絡有限公司(公司產品:中國家庭網和800buy電子商務網站)、中興通訊(南京)有限公司、意法半導體(中國)有限公司(公司產品:數字電視機頂盒)以及愛立信(中國)通信有限公司等單位工作過。十幾年來,軟件測試從無到有,我經歷了整個過程,所以對軟件測試有比較深入的了解和體會,也積累了一些經驗。我把在工作中遇到的一些問題和案例寫成數十篇文章,在51Testing等各大網站上發表,得到廣大軟件開發和測試人員的認可和支持,遵照一些朋友的建議,我把網上的這些文章重新整理修改,并增加了一些新的內容,集結成一本書。在這本書中,我主要以案例為驅動,介紹軟件測試工作中一些常用的方法、思路、遇到的問題以及解決這些問題的方法。
1997年,我畢業于北京工業大學計算機學院軟件工程專業,在學校里,軟件測試僅僅作為《軟件工程》的一個章節進行介紹。畢業后,我進入一家互聯網公司從事網站的開發工作。當時軟件測試在許多單位都不是一個獨立的部門,軟件測試一般都由開發人員自己來完成。由于沒有專職的軟件測試人員,所以軟件的安全性、穩定性、可靠性等都很難得到保證。實際工作中遇到過不少案例,下面幾個例子就可以得到證實。
2000年我所在的公司與CCTV“開心辭典”欄目組合作開發網上答題的項目,這是一個智力娛樂性節目,我編寫了前端的答題代碼,考慮到可能有人用計算機程序來答題,如編寫一個死循環,一直選擇B(或A、C、D),這可以使答題的速度很快,命中率也非常高,為此,我選用JavaScript過濾了使用死循環的答題者??墒?,到了“開心辭典”正式使用這個軟件時,發現仍然有人使用死循環來答題,可我的程序是正確的。后來,在一次聊天模塊中,通過登錄賬號我找到了這位“達人”,他說我們前端的確沒有漏洞,他是通過自己編寫的程序繞過我們前端進入到系統后端的,而我們的后端并沒有進行校驗。當初如果有專業的測試人員,這個Bug是有可能避免的。
眾所周知,軟件產品的安全性是很重要的問題,而軟件測試是保證產品安全的關鍵所在。下面的例子說明如果沒有做好軟件測試,就可能造成嚴重的后果。有一次我所在的公司開發了一個產品,用戶曾經投訴,采用我們公司的這個產品后,經常發現一些沒有登錄的用戶也會進入系統,損毀了公司的形象,造成很大的損失。后來經過數個月的排查才發現,這是開發人員沒有對SQL語句進行專門處理,由于SQL注入造成的。像這樣的問題,如果在正式上線前,經過嚴格的測試,這個Bug是可以事先找到和解決的,這樣就不會造成那么大的損失。當然,要能夠測試出上面出現的Bug,是需要有一定工作經驗的,只有具有豐富軟件開發經驗的人才能勝任,所以我一直強調從事軟件測試工作前最好進行3年以上的軟件開發工作。為此,在本書的有關章節中我將會進行詳細闡述。
本書還將介紹一些功能測試和性能測試相互依存的例子,這源于我在某家公司做BBS系統的測試工作,系統在前4個月運行一直非常好,可后來系統顯示的速度明顯降低了,原來幾秒鐘顯示一個頁面,現在變成要兩分鐘才能顯示頁面。以前好評如潮,現在投訴不斷。經過查找,發現這是由于當時只做了功能測試,而沒有進行規范的性能測試造成的?!爸毓δ?,輕性能”,這是在軟件測試工作中經常犯的一個毛病,值得引起重視。
軟件測試必須對相應的業務有所了解。記得我剛到意法半導體有限公司時,從事數字電視機頂盒測試工作。這是一種嵌入式軟件產品,這種類型的測試工作往往比較復雜,因為這種軟件在開發初期是看不見、摸不著的,只有到后期才可以在仿真器、模擬器,甚至移植到真機中才能測試,再加上我對數字電視業務知識的缺乏,在測試中不太容易發現Bug。記得在2005年12月31日,開發人員當天下午5點才把一份軟件測試版本交給我們測試人員,為了交給客戶作元旦的獻禮,我們必須在當天下午6點半做完測試,時間緊迫,我們只能對一些最重要的功能進行測試,又加上我對業務不太熟悉,選擇重點時沒有把握好,產品交付給用戶在2006年元旦使用時,開始系統運行得非常好,但一個多小時后,數字電視的音量達到最大,更糟的是,根本無法用遙控器來進行操控。后來究其原因是嵌入式軟件的內存空間很小,而程序中存在著野指針,所以發生了內存溢出,導致音量失控。
開發與測試之間經常是一對矛盾,這往往需要開發與測試之間進行有效溝通來解決。記得2008年上半年,我所在公司的產品進入一個開發的關鍵時期,開始大規模地招聘開發人員,公司40%多的開發人員都是新員工。這段時間,測試人員總能發現許多Bug,使得大部分開發人員要疲于修改這些Bug,根本沒有時間去開發產品的新功能,這就導致開發人員對測試人員的意見很大,甚至有些開發人員認為測試人員是故意給他們找麻煩。當時我作為測試經理認識到測試人員與開發人員之間的矛盾必須解決,必須協調雙方的關系,于是我一方面要求測試人員不但要能發現問題,還要逐步學會從Log日志中定位到問題,盡可能協助開發人員解決問題。同時我又主動和開發部門經理協商,要求開發人員在提交測試版本之前必須認真做好自測。之后,開發人員與測試人員之間關系得到改善,產品的質量也得到提高。
由于新興的敏捷開發模式便于在相對短的迭代周期內發布一個新版本,往往幾個月就可以發表一個新的版本。這就給回歸測試帶來很大的挑戰,也促使自動化測試得到不斷發展。在回歸測試中,自動化測試扮演了非常重要的角色,特別是后來采用持續集成(CI)技術,自動化測試的優勢得到了更好體現。當然,自動化測試也不是萬能的,由于自動化測試工具本身也是軟件,它也會有Bug,特別是剛開發出的自動化測試腳本,用它驗證產品代碼,當發現一個測試用例沒有通過時,就很難判定是產品的問題還是自動化測試腳本本身的問題。另外,隨著需求的變更,自動化測試腳本的更新也要隨時跟進。這會使得測試人員的大部分精力都集中在調試和維護自動化測試腳本上,而不能更好地做好測試分析與設計工作。自動化測試在軟件基本功能驗證以及性能測試等不能用手工方法來完成的測試工作中,取得了很好的效果。但是,在一些基于經驗的測試方法,如“探索式測試”“缺陷攻擊法”中,大部分還是需要通過手工方法來實現。
有了一定的測試經驗如果沒有理論的結合,也是不完美的。例如,進行兼容性測試時,組合的對象往往很多,窮舉測試是不太可能的,隨機抽樣測試也不靠譜。根據一種叫“正交測試法”的測試理論,可以把測試用例減少很多。另外,它有統計學的理論作為保證,其測試的可靠性也得到提高。這說明,由于IT行業發展十分迅速,從事軟件測試的工作者也要與時俱進,不斷學習新的理論和方法。
以上只是本書中的一小部分,我把十幾年在軟件測試中的實踐、體會和思考總結成書,希望為讀者打開一扇通往軟件測試之路的大門,使讀者尋找到解決測試問題的技術和方法,體驗到測試工作中“逮”Bug猶如“尋寶”的樂趣。本書可供軟件測試同仁借鑒。由于現在許多大學里,計算機專業都開設了軟件測試課程,所以本書也可作為大專院校計算機軟件專業學生的參考書。
全書分為“設計”“工具”和“管理”3篇,共14章,每個章節之間雖有一定的聯系,但也可各自獨立成章,讀者可以根據自己的需求,按照書的內容順序閱讀,也可以根據自己的興趣選取相關章節閱讀。
最后,感謝人民郵電出版社張濤先生及其編輯團隊、51Testing編輯嚴代麗對本書的出版做出的辛勤勞動,沒有你們的大力支持,出版本書的愿望是不可能實現的;感謝微信平臺,它將我與全國的軟件測試愛好者連接起來,共同分享軟件測試給大家帶來的喜怒哀樂,讓大家能夠利用這個平臺分享軟件測試的經驗、思想和方法,進一步豐富本書的內容;在這里特別感謝楊艷艷、葉微、劉琛梅、趙明、劉莎莎、萬巧、張曉麗、陳佳麗、詹露、張子繁、金鑫、馮昌、帥敏、沈曉靜、趙院嬌和蹇輝在出版后期對本書進行了仔細的校對。另外,我還要感謝我的家人對我這次出書工作在精神、物質及生活上的支持。祝愿軟件測試行業能夠在中國得到更好發展,有更多的測試專家能夠在中國出現。本書的全部附錄、代碼以及探索式測試課程均可掃描下面的二維碼從網站上下載。

由于本人水平以及時間有限,書中難免存在錯誤或者不足之處,請廣大讀者不吝指正。我的E-mail:xianggu625@126.com,微信號:xianggu0625。個人網站:www.3testing.com。編輯聯系與投稿郵箱為zhangtao@ptpress.com.cn。
- Boost C++ Application Development Cookbook(Second Edition)
- Rust編程:入門、實戰與進階
- C語言程序設計教程(第2版)
- PHP+MySQL網站開發項目式教程
- 深入淺出Serverless:技術原理與應用實踐
- 速學Python:程序設計從入門到進階
- 案例式C語言程序設計實驗指導
- C++ Application Development with Code:Blocks
- Mockito Essentials
- Mobile Forensics:Advanced Investigative Strategies
- Mastering OAuth 2.0
- Mastering XenApp?
- 優化驅動的設計方法
- Splunk Developer's Guide(Second Edition)
- Kotlin入門與實戰