目錄javascript
不少時候:css
一款軟件的誕生經歷不少個階段,每一個階段都有不一樣的人員參與,因此最終產品會或多或少的問題,所以爲了保證軟件的可用性,因此,咱們必須通過測試環節,減小軟件的問題。html
哪一個程序員也不敢說寫的程序沒有bug!可是咱們使用的軟件,基本上不多見到bug,這和軟件測試是分不開的。前端
so,一個提供業務訪問的軟件,必須在嚴格測試,經過層層測試環境才能夠正式的上線。就像遊戲同樣,也基本是先提出內測版,最後纔是公測版,就是公司在驗證程序的正確性!!java
發展前景python
就目前而言,相對於國外的軟件測試行業來講,國內的測試行業稍顯落後,因此國內的軟件測試行業對於專業的測試人員需求慢慢變大。mysql
裝逼語錄linux
有人喜歡創造世界,因此,他們作了程序員。ios
有人喜歡拯救世界,因此,他們作了測試員。程序員
其餘
知乎上已經有了優秀的答案。
首先,開發不是不能作測試,甚至有的測試人員以前都作過開發。
而是說,軟件測試和軟件開發分屬軟件行業中兩個不一樣的技術方向。因此,一個半吊子開發不如一個專業的測試!這就是專業度的問題了。
從邏輯角度來講,開發人員大多數時間都在思考如何實現具體的功能。而做爲測試人員,大多數時間都站在用戶的角度思考如何挑出軟件的問題。
從測試力度來講,軟件對於開發人員來講,那就是本身的孩子,我家孩子怎麼可能有毛病?你家孩子纔有毛病!這就會致使本身測試本身寫的軟件,下手可能不夠狠!
Glenford J. Myers
在《軟件測試的藝術》一書中有這樣的一個定義:測試是爲了發現錯誤而執行程序的過程。
另外,軟件專家溫伯格和Cem Kaner
也提出了本身對軟件測試的理解,在溫伯格的《完美軟件》一書中提到:測試是一個獲取信息的過程,用來下降決策風險。Cem Kaner教授
也提出:軟件測試是一種技術調查,其目的是向關係人提供有關產品(軟件、系統或服務)質量的實驗信息。
除此以外,IEEE(電氣和電子工程師協會,全稱是Institute of Electrical and Electronics Engineers)和ISO(國際標準化組織,全稱是International Organization for Standardization)也不甘落後的發表了本身的見解。1983年IEEE曾這樣定義軟件測試:軟件測試是使用人工或者自動化手段來運行或者測試定某個系統的過程,檢驗它是否知足規定的需求或是弄清楚預期結果與實際結果之間的差異,從這個定義中咱們能夠看出,軟件測試不只爲了發現錯誤,並且須要驗證軟件是否知足了規定的需求。ISO 29119標準也嘗試標準化軟件測試。提到: Software testing should focus on providing information about a software product and finding as many defects as possible, as early as possible in development process, under given constraints of costs and schedule,其中有兩個重要的觀點:一個是儘量的早(early),一個是成本(cost)受限。測試發現bug應儘量的早,這樣形成的影響越小,修復成本越低。而測試活動每每是在時間和人力成本受限的狀況下進行,在有限的資源下,測試人員應該有的放矢,對測試對象的進行選擇排序,測試技術進行選擇組合使用,這也是測試策略方面的東西。
說點人能聽懂的。當你寫的代碼越多,你就越認同測試,曾經聽過一個很貼切的比喻:寫程序的人就像在造沒有護欄的橋,本身去走那確定安全無虞,那怕摸黑也不至於掉河裏去;測試則像給橋修護欄的,讓橋的普通使用者也能像開發那樣來去自如。從這一點上說,測試遠比開發重要。
總結,軟件測試的定義:經過手工或者相關工具,對被測對象進行測試操做。從而驗證明際與預期結果是否存在差別。
經過測試工做能夠發現並修復軟件中存在的缺陷,從而提升用戶對產品的使用信心。
測試能夠經過記錄軟件運行過程當中產生的一些數據,從而爲決策提供數據支持。
測試能夠下降同類型產品開發遇到的問題風險。
這個標題讓我想起了我喜歡的一首歌Shallow,學什麼習,這個天氣不適合學習,只適合Move your body,是否是很happy。OK,讓咱們隨着音樂的節奏回到.......
在20世紀50年代,英國計算機科學家圖靈已提出了程序測試的定義,測試是驗證程序正確性的一種實驗形式。
直到60-70年代,軟件危機出現後,人們意識到測試的意義。軟件測試慢慢的發展起來......
軟件複雜度
程序代碼的複雜度,軟件產品的併發性,複雜性愈來愈高,對程序的正確性檢測也愈來愈高
行業競爭大
因爲用戶審美提高與需求愈來愈高,如今一個新聞類app,就有百度新聞,網易新聞,趣頭條,今日頭條,各家公司都想作到完美,用戶喜歡本身的產品,那就得從易用性,美觀性,趣味性,快速性,等等等等方面超過其餘的產品,那麼大公司都會配備專門的功能測試崗位,性能測試崗位,乃至於更強大的測試開發崗位。
國內處於起步和迅猛發展的階段。
大公司很是重視測試,初創型小公司對測試關注較少。
主要仍是手工測試爲主,自動化測試爲輔。
國外的軟件測試基本成熟,軟件企業很是重視軟件測試部門。
測試流程化體系嚴謹。
一線大公司還會成立軟件測試中心,服務於子公司的軟件開發。
經過軟件測試暴露軟件中隱藏的錯誤和問題,便於考慮是否使用該產品。
例如咱們去買手機,總得反反覆覆的觀察,這個手機的CPU性能怎麼樣?內存是多大的?拍照怎麼樣?可是,反覆觀察有xx用?領導不換iPhone X,你能用的上iPhone 8?
軟件開發者的角度
經過軟件測試證實軟件中不存在錯誤和問題,給與本身產品質量足夠的信心。
一個成功的測試,是不懈的挖掘軟件的錯誤,不斷的完善產品。
知足用戶需求是產品成功的關鍵點。
確保交付的產品符合用戶的需求。
在產品上線前儘量的發現和修復bug。
用戶角度
快看,搖了半天,終於有人加我微信了!
軟件中的Bug很是使人討厭。但同時有缺陷的軟件還有可能形成重大甚至致命的事故。下面是一些很是有名的軟件事故:
所以公司中進行軟件測試,是必須的!
測試原則是指在執行測試工做時必需要遵照的一些規則:
二八理論
,即對於軟件的功能來講,核心功能佔20%,非核心功能佔80%(固然,不是絕對的)。那麼在測試中,咱們會集中測試20%的核心功能。因此,這部分發現缺陷的機率會遠高於80%非核心部分。也所以咱們遇到的缺陷就都會集中在20%的核心功能這塊。3 * 3
測試出代碼不等於9
,把這個缺陷提交給開發,開發隨後解決了這個bug,那咱們再測試的時候,就不要用3 * 3
來測試了,由於開發在改bug的時候,想法設法的讓3 * 3 = 9
,因此,一樣的用例,軟件會對它產生免疫
。對於當前的測試行業來講,咱們最常測試的主體就是軟件(主體功能),但須要咱們測試的也不只僅是功能需求測試。咱們能夠將軟件分爲三個部分組成:
一款軟件的誕生會經歷不一樣的過程,咱們將整個過程分爲不一樣的階段,而後每一個階段都會有相應的測試對象。那麼每一個階段咱們能進行什麼測試呢?
所謂的軟件架構,簡單理解爲是用來指導軟件開發的一種思想,目前來講,最多見的兩種架構模式:
B/S
,瀏覽器和服務端。C/S
,客戶端和服務端。兩種架構的比較:
B/S
架構的數據都是由服務器端處理,瀏覽器只負責展現結果,因此對於服務端壓力相對較大,而C/S
架構的客戶端能夠承擔一些數據處理,因此執行效率高。B/S
架構的數據都根據HTTP協議進行的,因此安全性相對於C/S
架構來講,安全性相對低一些。B/S
架構的升級只需升級服務端便可,而C/S
架構則須要兩端都須要升級更新。B/S
架構來講,C/S
架構的客戶端也須要本身開發,因此成本會高一些。再來補充兩個知識點:
瀏覽器
瀏覽器本質上是一款軟件,安裝在操做系統之上,爲用戶提供網頁瀏覽服務,目前,世界主流的五大生產廠商:
國內的瀏覽器及內核:
對於瀏覽器來講,最核心的技術,就是瀏覽器內核,固然,僅作了解便可。
圖片
常見的圖片類型有:
項目組通常由項目經理領導並負責指定項目計劃,分配任務。
參與人員:
生活中,處處都是測試案例,好比你買個手機,買個顯示器,都要測試一下,開關機、屏幕是否有漏光,按鍵是否好使、這些都是測試用例。
咱們須要知道測什麼和怎麼測這兩個問題。
測試用例的定義
測試用例(Test Case)是爲特定的目的而設計的一組測試輸入、執行條件和預期的結果,以便測試是否知足某個特定需求,經過大量的測試用例來檢驗軟件的運行效果,它是指導測試工做進行的重要依據。
舉個例子
好比咱們買個電腦,要進行測試。
測試的前提條件
按下開機鍵,至關於輸入一組測試數據,執行的條件是,是否達到開機的前提條件,好比電池是否有電,或者外接電源是否接入。
測試過程
按下開機鍵。
預期結果
當咱們按下開機鍵,順利的啓動成功,那麼在有電的前提下,啓動成功就是咱們的預期結果。
經過上面的測試過程,就會發現,測試用例主要解決的就是測什麼?怎麼測?
測試用例的優點在於:
測試環境(TE)
測試環境內容包括
測試環境設計原則
測試環境所需的知識
測試用例的八大要素
輸出測試用例
最後,上圖:
測試用例力度
測試用例能夠寫的很簡單,固然也能夠寫的很是複雜。
測試用例寫得過於複雜或詳細,會帶來兩個問題:一個是效率問題,另外一個是維護成本問題。另外,測試用例設計的過於詳細,留給測試執行人員的思考空間就比較少,容易限制測試人員的思惟。
ps:大多數的測試團隊編寫的測試用例的力度介於二者之間。
測試用例的本質
測試用例的設計本質(測什麼?怎麼測?)應該是在設計的過程當中理解需求,檢驗需求,並把對軟件系統的測試方法的思路記錄下來,以便指導未來的測試。
基於需求的測試用例設計:
及時響應變動比遵循計劃更有價值
這一原則體現出來。不要認爲測試用例設計是一個階段,測試用例的設計也須要迭代,在軟件開發的不一樣階段都要回來從新評審和完善測試用例。
計劃書是什麼
測試計劃是一個敘述了預約的測試活動的範圍、途徑、資源以及進度安排的文檔,咱們親切地稱爲測試計劃書。
此文檔確認了測試項、被測特徵、測試任務、人員安排,以及任何偶發事件的風險。
爲何要指定測試計劃書
定製測試計劃使得軟件測試是有計劃,有組織的軟件質量保證活動。若是沒有計劃,工做就會很鬆散,隨意。
測試計劃
測試流程規範
參考:http://www.testclass.net/post/test_level
測試計劃書內容包含哪些內容
產品的質量目標
測試活動的質量目標
人力資源
測試環境資源配置
硬件資源:服務器,計算機,手機,打印機
軟件資源:不一樣平臺的操做系統,數據庫軟件,多種瀏覽器
網絡環境:在什麼網絡環境下測試,是內網仍是外網
測試工具:都是使用哪些工具
風險指:不可預料的後果,如事件,危險,威脅等特殊狀況的發生。
客觀性風險:
1.任務送達
2.分析測試任務
3.資源規劃
4.制定測試計劃
5.評審測試計劃
what 對象
when 時間
why 緣由
who 有誰參與
where 場所
how 方法
計劃是死的,人是活的....
這年頭,沒有圖過不了啊,雖然朕不看!
最後,來看軟件計劃報告。
軟件測試基礎流程:通常是測試主管編寫測試計劃,測試計劃是指在作完需求分析後,在開始整個測試工做以前的準備計劃工做。
遵循5W + 1H
原則進行測試:
測試報告範圍:
5W1H思想很流行啊!由於咱們將基於這個思想來闡述軟件的兼容性測試!
軟件兼容性測試既是測試被測試軟件可以與操做系統、網絡環境、瀏覽器、相關其餘軟件(包括數據庫)、外接設備等可以友好合做,不出現UI界面顯示異常、同等分辨率下顯示異常、改變顏色及顯示大小改變、排版出錯、CSS格式及顏色錯誤、滾動條相關問題、內容或者標籤重疊、表格或者框架不完整等等兼容性軟件缺陷。兼容性測試包括向前兼容性測試和向後兼容性測試。
向前兼容性測試(forward compatibility testing):測試的應用程序或軟件在新的或即將到來的版本,而且應用程序的早期版本可以打開較新版本中的文件並忽略早期版本中未實現的功能。好比USB1.0可以兼容USB3.0,或者是MS office2003可以使用轉換器打開MS office2007的文件,並忽略MS office2007 的新功能。
向後兼容性測試(backward compatibility testing):測試的應用程序或者軟件處於舊版本,而且應用程序的新版本可以順利處理舊版本的程序數據。好比說USB3.0兼容USB1.0,或者MS office 2007可以打開MS office 2003的文件。
從兼容性測試的概念中得知,軟件的運行與操做系統類型及版本(windows、linux、mac等)、瀏覽器種類及版本(IE、火狐、谷歌等)、網絡環境的帶寬、數據庫種類和版本(SQL、DB二、MySQL、Oracle等)、外接設備(打印機、傳真機等)、其餘相關軟件(MS office、SharePoint等)等因素有關,那麼最終用戶使用的環境咱們不得而知,但在資源和時間有限的狀況下,咱們要儘量的模擬用戶使用的環境去確保咱們的開發軟件可以正確使用。因此兼容性測試是檢查的是全部平臺的應用程序的工做方式。一般開發團隊和測試團隊的測試是在單一平臺中進行展開。可是,一旦發佈應用程序,客戶能夠在不一樣的平臺測試咱們的產品,他們可能會發如今應用程序中的錯誤,要減小這些問題,在全部平臺上測試應用程序是很重要的。換句話說,當最終的用戶發現了應用程序的缺陷,這須要花費不少時間去開發補丁包去彌補錯誤的後果,可是常常發佈產品補丁包會使用戶感受不安,因此產品的兼容性測試是無可避免的。
當build已經相對穩定的時候就進行兼容性測試。
以瀏覽器兼容性測試實例展開,討論在軟件兼容性測試中要測試什麼:
綜上所述,對於瀏覽器的兼容性測試,咱們要驗證的是頁面、字體大小和樣式、特殊字符的編碼、圖像對齊與否、頁面的頭尾、頁面對齊與否、文本對齊與否、控件的對齊狀況、頁面的放大放小測試、數據庫提交信息驗證、HTML視頻播放格式驗證、外部網站開發的插件驗證、關閉cookies和javascript後的頁面驗證等。還有其餘的驗證內容,能夠經過探索性測試中提到的一些方法,進行測試。如破壞測試法,懶漢測試法,一送一測試法,配角測試法,賣點測試法,指南測試法,超模測試法等等,能夠將探索性測試用於軟件的兼容性測試,更加有方向的進行兼容性測試。
測試人員和最終用戶。測試人員只能模擬出大部分用戶使用的環境進行軟件的兼容性測試,儘量的使大多數的用戶在使用中出現較少的問題,因爲時間和資源的有限性,不可以模擬出全部用戶的環境,因此兼容性測試前期是測試人員進行的大範圍的掃除盲點,加上後期用戶的共同努力,來提高軟件質量。
在執行兼容性測試以前要理解,在什麼平臺,怎樣的環境,去驗證哪一個軟件的兼容性,去根據對軟件以及環境的認識,去制定有測試計劃和測試策略的test plan (Test plan中包括了Test Scope, Test Strategy, Hardware, Test Schedule ),引入一些經常使用的測試方法,如探索性測試,手工測試,自動化測試,冒煙測試等方法,將軟件的兼容性測試作活,不那麼生硬,儘量的找到更多以前沒有發現的bug。 指定完test plan,就是執行這一輪的兼容性測試,配置相應的環境,採用局部自動化測試 + 手工測試的原則,去檢測軟件是否存在兼容性問題,完成這一輪CT,後signoff。
轉載:軟件兼容性測試
錯誤觀念:軟件測試不須要版本控制
測試人員在測試過程當中發現的bug提交給開發人員,開發人員在對提交的bug進行修改,bug修改後開發人員會將修改後的代碼放入當前的軟件版本之中,這樣一來二去,會致使軟件測試版本發佈過於頻繁,測試版本不穩定,致使修改過的bug再次出現,測試重複、失效和混亂。測試進度沒法保證,同時不便於追溯跟蹤問題。
緣由是:對於修改過的代碼,不可以保證他們必定是正確的,極可能在開發人員修改過以後,仍然是錯誤的,或者在修改過以後仍然會給軟件帶來別的問題,測試人員對新提交的代碼以及以前的代碼都要再次進行驗證,進行排錯,來確保不會所以而帶來新的隱患,新的漏洞,致使大量重複測試。
引入版本控制的好處:提升開發和測試的效率,提升軟件版本穩定性,便於追溯問題。
版本控制對象
開發提交給測試的產品版本。
測試人員提交的bug到了開發人員手中以後,開發人員針對這些bug進行修復工做,而且將修改後的代碼放入程序中,做爲新的軟件版本,而不能直接替換到現有的測試版本中去。
版本控制定義
測試版本的交付在專人控制之下,對每次測試的版本有明確的標識(新增長的功能、修復的bug等),不一樣版本能夠看到穩定度趨勢,每一個版本的測試狀態。
制定合理版本發佈計劃,增強版本控制管理
協商測試版本發佈及發佈頻率:制定版本進度計劃,該計劃中包括開發團隊提交不一樣版本的計劃時間、每一個版本中新增功能模塊列表、提交版本的要求、修復的bug列表等。
測試版本發佈基礎:代碼評估(代碼review),版本控制的文檔(標識新增或修改的功能、修復的bug、可以很方便的跟蹤和監控測試版本的執行)
測試啓動條件:功能是否開發完成、有沒有進行自測(避免出現版本質量太差)、軟件版本說明。
提測後注意事項:非錯誤修正(Bug fix)的修改,必須說明(如代碼重構);錯誤修正涉及的代碼,明確迴歸範圍和影響範圍(避免修復bug是修改共同文件,引發全局問題)。
強化測試准入條件
測試啓動條件:功能是否開發完成、有沒有進行自測(自測報告,避免出現版本質量太差)、軟件版本說明(清楚每一次版本更新都修改了什麼,會對哪些功能形成影響)。
開展冒煙測試:保證系統能跑的起來,不至於讓測試工做作到一半忽然出現錯誤致使業務中斷,若是最基本的測試都有問題則直接打回。
(開發人員在試圖解決一個問題的時候,形成了其它功能模塊一系列的連鎖反應,緣由多是隻集中考慮了一開始的那個問題,而忽略其它的問題,這就可能引發了新的Bug。)
冒煙測試的經過標準:基本的功能和流程經過就能夠。(測試場景/點能夠提供)
軟件提測後注意事項:非bug fix的修改,必須周知(如重構),Bug fix涉及的代碼,代碼review,明確迴歸範圍,減小質量隱患。
強化bug管理
bug內容(發現版本,對應人員,發現模塊,迴歸次數,bug關閉的版本號),能夠分析不一樣版本和不一樣模塊bug走勢。
發現這次迭代範圍外的以前遺留的bug,測試記錄後,和開發及項目管理人員商討是否解決,解決方式(代碼限制OR操做說明中限制),是否佔用這次迭代的開發時間。
版本控制文檔管理工做
版本信息、測試記錄、測試結果(開發和測試活動的追溯)
最後,就是要作到及時溝通
這個沒的說,效率和質量。
測版本最多不超過4輪測試
通常控制在3輪。通常在2到3個版本時,就很難發現缺陷。版本越多,質量隱患越大。
保證開發和測試的獨立性
打的包,部署的環境。測試環境和開發環境分開,儘可能作到測試數據不會被開發人員修改。
明確測試需求
需求功能點所有實現,若是有需求不能在規定時間完成,須要在需求階段提出,而不是在測試階段完善需求,從而加長了開發和測試時間,影響效率。
細化提測標準
開發到什麼程度能夠接受測試。
預測試
達到送測標準,在服務器上取下測試的版本,編譯、部署後,對部分主要的功能進行預測試,若是預測試經過了,就能夠開始測試。若是預測試不經過,就打回開發部門修改好後再預測試,直到預測試經過爲止。
控制需求的變動
變動了軟件需求必定要有記錄和說明,相應的測試用例及時追加和維護。
進行bug分級
界面和易用性的bug等到開發完成和重要bug解決完畢再改。
加強質量意識
上線前臨時改代碼修復問題或者臨時口頭追加的變更要有記錄,要通知一下。
開發文檔和產品需求文檔生成或者變更後請周知一下,保證測試用戶及時編寫和維護。
測試環境最好是專人維護(開發、運維、測試),頻繁和擅自發布新功能或者修改是不可取的。保證版本的統一性很重要。
測試人員提交的bug到了開發人員手中以後,開發人員針對這些bug進行修復工做,而且將修改後的代碼放入程序中,做爲新的軟件版本,而不能直接替換到現有的測試版本中去。
代碼提交 ,review後再部署,直接打包部署的代碼不能保證完整 (提交衝突,合代碼後發佈失敗等)
扯了半天淡,咱們用什麼來作測試呢?
測試管理工具(項目流程管理)
功能測試工具(自動化腳本測試)(黑盒)
性能測試工具(黑盒)
代碼測試工具(白盒測試)
開源測試管理工具:
開源功能自動化測試工具:
Web Application Testing in Ruby
,發音相似water
。它是一種基於網頁模式的自動化功能測試工具。開源性能自動化測試工具:
情商素養
專業技能
軟件基礎知識
業務能力
互聯網行業的薪資水準相對較高,入行一年超過其餘行業薪資很正常。
互聯網行業究竟有哪些職位呢,又分別適合哪些傳統行業轉型?