在IT行業(yè)括荡,特別是那些并不真正從事軟件測試行業(yè)的業(yè)者厦瓢,對軟件測試往往有一些常見的誤解提揍,對測試行業(yè)的發(fā)展和健康都有不利的影響。本文總結(jié)了10大常見誤解煮仇,希望能起到一些正本清源的作用
一劳跃、測試工程師的工作是破壞軟件
“測試工程師的工作就是破壞軟件”是一個常見的誤解。作為程序員十大金句之首的“在我機器上是好的”往往來源于這一誤解浙垫。測試人員好像有什么魔力售碳,能夠把正確運行的程序在測試環(huán)境上搞得不能工作。
但是這不是測試工程師破壞了軟件,測試工程師并不能在軟件中創(chuàng)造某些bug贸人。他們只是做了些程序員沒有考慮到的某些操作,比如在測試環(huán)境上佃声,沒有執(zhí)行相關的依賴操作艺智。程序員在自測時很多情況下會默認某些場景,或者是開發(fā)的新功能而沒有考慮到對原有功能的影響圾亏。這也是為什么我們不推薦完全由開發(fā)者本人完成功能的測試十拣。
真相
軟件bug只會來源于產(chǎn)生它們的代碼,測試工程師不實現(xiàn)代碼志鹃,所以他們并不能破壞軟件夭问,他們只是發(fā)現(xiàn)了軟件不工作的觸發(fā)條件并且報告了出來。
“測試工程師對軟件進行破壞”往往會導致團隊開發(fā)和測試的對立情緒曹铃,甚至將軟件沒有滿足客戶要求和大量因解決問題的額外工作量歸咎于測試工程師的勞動缰趋。這是非常不利于團隊和產(chǎn)品成功的。
二陕见、測試工作不需要什么專業(yè)技能
很多人認為軟件測試是個簡單的工作秘血,不需要會編寫程序,也不需要很深厚的專業(yè)技術能力评甜。這也是一個很常見的誤解灰粮。誠然,很多優(yōu)秀的測試工程師都不會編寫專業(yè)的程序忍坷,也不具備軟件開發(fā)領域的一些專業(yè)技能如架構(gòu)粘舟、抽象等。但是這并不是說測試就是一個簡單的工作佩研。James Bach在《測試與檢查》一文中對測試和檢查的區(qū)別進行了詳細的闡述柑肴。測試是一系列創(chuàng)造性活動的集合,包括提問韧骗、研究嘉抒、建模、觀察袍暴、推理些侍、試驗等多方面的技巧。
開發(fā)和測試是兩個不同的技術領域政模,我們不能以同樣的技術標準來衡量兩種不同的工作
真相
測試工作不同于開發(fā)工作岗宣,兩者會有一些技能重疊,但是也存在很大的區(qū)別淋样。開發(fā)工作的重點是高效耗式、高質(zhì)量地實現(xiàn)功能,而測試工作的重點是盡可能多地將軟件失效在交付用戶前暴露出來。測試工程師擅長開發(fā)技能可以幫助測試工程師更加深入地理解軟件或幫助自己提供輔助手段來測試軟件刊咳,但是這不能作為測試工作是否專業(yè)的評判標準彪见。
三、測試就是寫測試用例娱挨,然后執(zhí)行
測試就是把需求轉(zhuǎn)換成測試用例余指,然后在軟件中執(zhí)行這些用例。這是一個在瀑布研發(fā)模式時代非常廣泛的一個錯誤看法跷坝,然而在如今敏捷研發(fā)模式時代酵镜,也換了個模樣,但是依然存在類似的認知柴钻。
在瀑布研發(fā)模式下淮韭,很多測試工作被嚴格地要求有非常完備地測試設計文檔,然后依照這些文檔進行覆蓋式地執(zhí)行驗證贴届】糠啵可能高級測試工程師負責編寫,然后初級工程師來執(zhí)行粱腻。這更多是工廠式的質(zhì)量管理經(jīng)驗在軟件行業(yè)的錯誤應用庇配。
即使在敏捷研發(fā)模式得到大量應用的今天,我們還是可以看到類似認知的變種绍些,比如測試由開發(fā)人員做好單元測試的充分覆蓋就可以了捞慌。這其實依然是把測試工作文檔化,只是這個文檔變成了單元測試代碼柬批,執(zhí)行變成了計算機啸澡。本質(zhì)依然是測試=測試設計+執(zhí)行
真相
輸出測試設計文檔,并不是真的那么重要氮帐。測試中嗅虏,更重要的永遠是那些創(chuàng)造性的東西。提問上沐、研究皮服、建模、觀察参咙、推理龄广、試驗等。文檔是這些活動的一個輸出形式蕴侧,我們不應該把測試簡單看作是這些文檔的機械生成和執(zhí)行
四择同、產(chǎn)品出現(xiàn)問題,說明沒有很好地進行測試
軟件發(fā)布后净宵,如果出現(xiàn)問題敲才,很多人會首先歸咎于測試的失職裹纳。認為測試沒有做好份內(nèi)的工作。軟件測試的七大原則中紧武,重要的一條就是窮盡測試是不可能的剃氧,何況測試并沒有直接編寫產(chǎn)生bug的代碼。所以產(chǎn)品出現(xiàn)bug阻星,是整個研發(fā)過程中整體流程的作用后果她我,不能也不應該據(jù)此作為評判測試工作好壞的標準。
真相
任何軟件都不可能被詳盡地完全測試迫横。測試工作和開發(fā)工作、需求分析工作密不可分酝碳,產(chǎn)品的總體質(zhì)量是整個研發(fā)團隊共同作用的結(jié)果矾踱。軟件發(fā)布后的bug產(chǎn)生是評估產(chǎn)品研發(fā)整體質(zhì)量的一個重要標準,但僅以此來評判測試工作好壞有失偏頗疏哗。
五呛讲、通過測試可以發(fā)現(xiàn)所有的bug
這個誤解和上一條原因比較類似,都是因為認為測試應該保證產(chǎn)品發(fā)布的質(zhì)量并提前發(fā)現(xiàn)所有未知的問題返奉。這是不可能辦到的贝搁。產(chǎn)品是否能有效工作和很多因素有關。不同的測試環(huán)境芽偏、測試場景雷逆,不同用戶操作使用軟件的操作習慣、使用路徑都有可能引起軟件不同的表現(xiàn)污尉。測試人員會盡量站在用戶角度來考慮軟件的使用場景膀哲,但是他并不能預測所有的用戶行為,也不可能提前預知所有的運行環(huán)境和場景被碗。所以在測試工作中某宪,限定測試范圍并告知用戶經(jīng)過驗證的場景是相對嚴謹?shù)刈龇ā?/p>
真相
測試人員不可能估計到所有的可能性,也不可能預測到所有的用戶行為锐朴。而軟件會因為不同的用戶行為和不同的運行場景產(chǎn)生超出預期的問題或bug兴喂。所以不可能要求測試人員提前發(fā)現(xiàn)所有的潛在bug。一個優(yōu)秀的團隊焚志,會盡可能多地考慮到不同的用戶場景衣迷,并根據(jù)發(fā)布目標調(diào)整覆蓋場景的優(yōu)先級。簡單要求所有bug都能提前檢測是不可能辦到的任務娩嚼。
六蘑险、自動化測試可以代替測試
這個誤解在現(xiàn)如今幾乎已經(jīng)成為信條了。確實岳悟,理論上佃迄,所有的測試用例都可以通過技術手段來實現(xiàn)并自動執(zhí)行泼差,但是正如我們在前面提過的,測試并不是測試用例+測試執(zhí)行的疊加呵俏。測試還包括大量的創(chuàng)造性的活動堆缘。所以自動化測試代替測試是個偽命題(除非有朝一日,人工智能發(fā)展到能夠打敗人類的創(chuàng)造性普碎。那時可能整個IT行業(yè)都不需要人力勞動了)
除此之外吼肥,即使自動化測試能把所有的測試用例都實現(xiàn)通過機器執(zhí)行,也不意味著應該這么做麻车。因為自動化測試本身也是一項投資缀皱,有大量的投入在其中。很多測試場景通過自動化測試可以產(chǎn)生很大的價值动猬,比如大量重復性地驗證啤斗。但是也有很多場景,不需要通過自動化的投入來實現(xiàn)赁咙,比如很多一次性的功能驗證钮莲,還有依賴人進行主觀判斷的功能等。
真相
測試中的檢查工作彼水,很大一部分可以通過自動化測試代替崔拥,但是測試工作不會被自動化測試代替。即使可以實現(xiàn)自動化測試的場景凤覆,我們也要通過ROI的衡量(如測試金字塔)來確定實施自動化測試的必要性
七链瓦、測試應放在開發(fā)環(huán)節(jié)后期進行
傳統(tǒng)的瀑布研發(fā)模式中,在研發(fā)后期會有專門的測試階段叛赚,包括集成測試澡绩、系統(tǒng)測試、驗收測試等俺附。所以長期形成一個誤解肥卡,測試是在開發(fā)階段后發(fā)生的。
可是這是一個錯誤的認識事镣,這依然是傳統(tǒng)工廠流水線思想的產(chǎn)物步鉴,并不適用于軟件研發(fā)。即使在瀑布研發(fā)模式下璃哟,前期的開發(fā)階段和需求設計階段也都明確了測試人員參與的必要性氛琢。在現(xiàn)代敏捷研發(fā)模式下,更加強調(diào)測試工作的遷移随闪,測試在需求澄清阳似、系統(tǒng)設計、代碼走查铐伴、結(jié)對編程等等階段都扮演著重要的角色撮奏。
真相
測試是貫穿在研發(fā)生命周期全流程的一項活動俏讹,并不是某一個割裂開的獨立階段。測試越早介入對產(chǎn)品最終質(zhì)量就更能產(chǎn)生積極的效果畜吊。
八泽疆、任何人都可以做好測試
這句話就好像《21天精通X語言》,《你也能做CEO》玲献,《XXX三天速成》等故事一樣殉疼,任何事情,懂得些雞毛蒜皮都很容易捌年,并不一定是測試瓢娜,任何行當其實都是這樣。10000小時定律對任何行業(yè)都適用礼预。
真相
做一個好的測試工程師恋腕,一定是需要專業(yè)的技能訓練以及經(jīng)驗積累。測試是一個廣泛的范疇逆瑞,各種各樣不同的測試概念(參見本人免費課 軟件測試基礎-概念篇)以及對應的測試方法、測試工具都需要大量的實踐和學習才能在需要的時候應對自如伙单。
九获高、測試工程師是質(zhì)量守門員
這個誤解幾乎在所有IT企業(yè)都存在。測試工程師被當做質(zhì)量守門員(背鍋俠)吻育,測試人員需要為所測試的軟件質(zhì)量背書念秧。測試人員被當做產(chǎn)品質(zhì)量的最后一道防線,測試結(jié)果似乎決定了軟件產(chǎn)品最終的交付質(zhì)量布疼。
真相
實際情況下摊趾,測試無法決定產(chǎn)品質(zhì)量,只能將產(chǎn)品中當前發(fā)現(xiàn)的問題暴露出來游两,并據(jù)此進行質(zhì)量評估砾层。而且無論是因為研發(fā)周期還是問題修復成本等問題,測試人員并不能左右產(chǎn)品是否能夠交付給用戶贱案。測試人員針對測試過程的總結(jié)和報告肛炮,更多是體現(xiàn)當前測試場景和測試范圍下,軟件產(chǎn)品的質(zhì)量評估情況宝踪,測試工程師其實無法充當守門員角色侨糟。
十、測試即QA(質(zhì)量保證)
在很多企業(yè)瘩燥,往往會混淆QA和Testing兩種角色秕重,認為Testing就是QA(Quality Assurence)。應該說兩者有相關性厉膀,或者說QA > testing溶耘。
前面說過二拐,質(zhì)量不會由測試來決定,質(zhì)量更多是從需求汰具、設計卓鹿、開發(fā)環(huán)節(jié)就確定的。所以QA工作除了包含測試外留荔,更主要的是流程改進吟孙,通過流程關鍵節(jié)點的管控來保證質(zhì)量水準。
真相
QA涵蓋的范圍比測試更大聚蝶,二者側(cè)重點也不同杰妓。QA更關注軟件研發(fā)全流程的質(zhì)量管控,測試則更關注將當前軟件中的缺陷暴露出來碘勉。二者的關注點不同巷挥,所需要的技能也不相同。不能簡單地把測試和QA工作劃等號验靡。
總結(jié)
測試是一門涵蓋范圍廣泛的專業(yè)倍宾,但是業(yè)界對測試工作卻普遍存在或多或少的誤解。本文參考了一些國內(nèi)外相關總結(jié)并結(jié)合個人的經(jīng)歷胜嗓,希望能或多或少有清源之效高职,并和大伙共勉。