自動化測試首先是一種工作文化

{"type":"doc","content":[{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"自古以來,人類就有創造自動裝置以減輕或代替人勞動的想法。自動化技術的產生和發展經歷了漫長的歷史過程。古代中國的銅壺滴漏(簡稱漏壺)、指南車以及17世紀歐洲出現的鐘表和風磨控制裝置,雖然都是毫無聯繫的發明,但對自動化技術的形成卻起到了先導作用。"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"自動化測試之痛"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"最近在幫助一個團隊梳理團隊測試效率的問題,其目標是提升該團隊的測試效率。在整個梳理的過程中,我發現一件非常有意思的事情:這個團隊基本上沒有自動化測試,大部分的測試手段還是手工測試加CR。更爲有意思的事情是:團隊成員大都對自動化測試比較牴觸,認爲自動化測試的成本較大,且看不到收益。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"回想過去幾年的測試工作,我發現,幾乎所有的測試團隊在面對自動化測試時都會存在類似的問題:"},{"type":"text","marks":[{"type":"strong"}],"text":"希望自動化測試提升效率,但是執行時卻發現自動化測試反而沒有提升效率,因此慢慢廢棄自動化測試,直至牴觸自動化測試,到最後自動化測試變成一種“形而上”般的存在"},{"type":"text","text":"。我姑且稱這種現象爲——"},{"type":"text","marks":[{"type":"strong"}],"text":"自動化測試之痛"},{"type":"text","text":"。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"自動化測試之痛的問題根源究竟是什麼呢?事情真的如有些團隊所說:自動化case的成本太大,又沒有收益嗎?"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"俠客島的故事"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"自從三十年前開始,每過十年,就會有大批的武林高手被請去俠客島喝臘八粥,不但這些武林高手從此都一去不復返,而且俠客島還演變成爲了賞善罰惡的行動。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"爲此,江湖中人人自危,每到十年之期,各大門派的掌門就紛紛尋找替身,來躲避俠客島的賞善罰惡。但是,當這些武林高手到了俠客島之後才終於揭開了俠客島的祕密。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"原來島上刻有武林祕籍,由於島主人蔘不透祕籍,所以纔會請武林高手到島上共同參悟。並且由於島上的‘斷腸蝕骨腐心草’十年一開花,此草若再配以其他佐使之藥,熬成熱粥,服後於練武之士大有補益,因此纔有了每十年邀請一次的慣例。被邀上島的人也並不是遇害,而是癡迷於武學,都不想回去罷了。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"——《俠客行》"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"有多少時候,我們對自動化測試的認識和江湖人士對俠客島的認識是類似的呢?有多少時候,明明是俠客島盛情所邀,江湖之上卻人人躲而避之呢?有多少時候,明明是對自己大有補益的臘八粥,所有被邀的武林人士卻不敢喝下呢?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"或許你會反駁,但凡有上島的武林人士擴散一下事實真相,那整個江湖也不至於如此?但是,正如本文開篇所述,整個人類社會都是證明自動化的歷史,爲什麼還有那麼多的團隊在質疑自動化測試呢?爲什麼有那麼多的測試實踐已經證明了自動化測試的成效——例如谷歌的"},{"type":"link","attrs":{"href":"https://mike-bland.com/2012/07/10/test-mercenaries.html","title":null},"content":[{"type":"text","text":"Test Mercenaries"}]},{"type":"text","text":"計劃,還是有那麼多的團隊對自動化測試心存質疑呢?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"正如Sam NewMan在"},{"type":"link","attrs":{"href":"https://samnewman.io/books/monolith-to-microservices/","title":null},"content":[{"type":"text","text":"Monolith To Microservices"}]},{"type":"text","text":"一書中說的那樣:"},{"type":"link","attrs":{"href":"https://wangwei1237.gitee.io/monolith-to-microservices/docs/The_Monolith.html#ref_denigrating_monolith","title":null},"content":[{"type":"text","text":"一旦我們陷入系統性抹黑單體的陷阱,我們就會面臨很大的麻煩"}]},{"type":"text","text":"。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"自動化測試的定位"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"接下來,我從3個方面來闡述自動化測試的定位。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"測試的4大活動"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"根據喬梁老師的"},{"type":"link","attrs":{"href":"https://item.jd.com/12512514.html","title":null},"content":[{"type":"text","text":"《持續集成2.0》"}]},{"type":"text","text":"一書中所述,測試領域有4大基本活動,如圖1所示。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/03/0397f75957b10a1f559f08a6e6717f65.png","alt":null,"title":"","style":[{"key":"width","value":"100%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"圖1. 測試的4大基本活動"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"其中,各活動的基本含義如下:"}]},{"type":"bulletedlist","content":[{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"問題認知"},{"type":"text","text":":對業務問題本身的理解和認知,包括需求理解,技術設計理解……"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"分析"},{"type":"text","text":":測試分析和測試設計,根據對問題的認知,設計測試方案和用例,保證業務質量"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"執行"},{"type":"text","text":":執行分析階段的測試用例,產出測試結論"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"決策"},{"type":"text","text":":根據測試結論進行相關決策,包括是否存在風險,是否達到上線標準……"}]}]}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"敏捷測試4象限"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"根據測試所支持的對象,測試可以分爲:"},{"type":"link","attrs":{"href":"https://www.tutorialspoint.com/agile_testing/agile_testing_quadrants.htm","title":null},"content":[{"type":"text","text":"面向業務業務的測試和麪向研發的測試"}]},{"type":"text","text":"。"},{"type":"link","attrs":{"href":"http://www.exampler.com/old-blog/2003/08/22/#agile-testing-project-2","title":null},"content":[{"type":"text","text":"Brian Marick"}]},{"type":"text","text":"根據這兩種測試類型提出了"},{"type":"text","marks":[{"type":"strong"}],"text":"敏捷測試4象限"},{"type":"text","text":"的概念,如圖2所示。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/b6/b6789b91470cad9fc9838f755e66e448.png","alt":null,"title":"","style":[{"key":"width","value":"100%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"圖2. 敏捷測試4象限"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在圖2中:"}]},{"type":"bulletedlist","content":[{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"功能驗收測試"},{"type":"text","text":":從用戶的角度來驗收功能"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"第三象限的自動化測試"},{"type":"text","text":":研發團隊對自我軟件技術實現的驗證"}]}]}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"自動化測試的4要素"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在測試的4大活動中,“執行”環節會存在大量的重複工作,而其中的大部分工作都可以由機器來承擔。此時就可以發揮自動化測試的優勢,釋放人的重複勞動。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"而在Brian Marick的敏捷測試4象限中,第2、第3象限的測試類型也可以發揮自動化測試的優勢,提升整個測試執行的效率。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"對於自動化測試而言,我總結了自動化測試的4要素:自動部署、自動執行、自動校驗、自動報告,如圖3所示。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/ab/abf013095ff04abe0d6f0633b2ca86ba.gif","alt":null,"title":"","style":[{"key":"width","value":"100%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"圖3. 自動化測試的4要素"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"自動化測試的誤區"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"接下來,着重來說一下我所見到、聽到的一些關於自動化測試的誤區。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"誤區1:只看短期效率收益"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"有的團隊希望自動化case來提升測試效率,當然,這是自動化case可以獲取的收益之一。這些團隊還會針對自動化對效率的提升制定定量的指標,然後每週,每月,每季度(當然,有些人還沒有堅持到季度末就不做了)來跟進。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但是,正如Sam Newman在"},{"type":"link","attrs":{"href":"https://wangwei1237.gitee.io/monolith-to-microservices/docs/How_Will_You_Know_if_the_Transition_Is_Working.html#%E5%AE%9A%E9%87%8F%E6%8C%87%E6%A0%87","title":null},"content":[{"type":"text","marks":[{"type":"italic"}],"text":"Monolith To Microservices"}]},{"type":"text","text":"一書中所說:"}]},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"有的指標可能很難在短時間內有量的變化。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果在微服務遷移的前幾個月就看到cycle time的大幅改善,我會感到驚訝。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"實際上,我更希望看到cycle time會在遷移的初期變得更糟。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"因爲團隊需要不斷適應新的工作方式,因此短期內對工作方式的變革通常會對生產效率產生負面影響。"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"自動化測試也是一個很難在很短的時間內就能看到收益的工具,並且還需要付出一些成本:需要學習自動化測試的配套工具,編寫自動化case的框架,調度自動化執行的相關工具……"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"因此,最開始的一段時間內,自動化測試有可能會降低測試效率。但是,一旦掌握這些技巧,我們就會發現汽車確實比馬車跑的快,難道不是嗎?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"短期收益不明顯還有另外一個因素:短期內適合自動化測試的項目分佈並不均勻。如圖3所示,自動化測試在測試4大活動中的執行階段以及敏捷測試4象限中的第2、第3象限才能發揮其作用。但是對於周、月維度的項目而言,能有多少項目會讓自動化測試有用武之地呢?接下來發生的事情就是對自動化測試的定量指標而言,沒有數據上的變化,然後壞的事情就會發生了,團隊慢慢就失去了耐心……"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"誤區2:只看個人效率收益"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在進行自動化測試之前,大多數團隊都會選擇一些業務來試點,然後根據試點業務的反饋來確定是否要大範圍推廣。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但是,在實際試點的時候,會出現很多影響因素:例如測試人員前期沒有接入測試瞭解,測試人員沒有提前和研發人員確定接口定義,測試人員前期在跟進其他項目……"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如上的因素會導致當一個測試項目到來時,測試人員沒有足夠的時間來消化那些需要在前期所付出的學習成本。在面對一個個緊急的項目和需要付出一定的成本時,這些試點的測試人員會自然而然的繼續使用舊有的手工測試的方式來保證項目的快速跟進。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"試點項目的測試人員會從自身的利益出發來選擇測試方案。然後這些試點的測試人員就會彙報說:自動化測試太浪費時間了,沒法提高效率。如果管理者不仔細繼續和這些一線的同學深入探討,那麼最終就會根據試點同學的結論得出一個偏離事實的結論:自動化測試確實無法提升效率。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"然而,上述的一些試點人員遇到的問題從本質上講,並不是自動化測試本身的問題,這裏涉及到更多的流程、溝通、協作的問題。不是自動化測試不能提升效率,而是當前的環境不允許自動化測試發揮作用。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"泥濘的道路上,是馬車快呢還是跑車快呢?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在所有人只從自身利益來考慮問題,而忽略其所處的環境時,就會出現這種:馬車比跑車快的滑稽結論。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"誤區3:成本覈算標準不一致"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如前所述,自動化測試是需要學習成本的,不經歷風雨怎麼見彩虹?自動化測試和手工測試的ROI權衡如圖4所示。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/ed/ed03f5723abed0542ed6c927ffe66f71.png","alt":null,"title":"","style":[{"key":"width","value":"100%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"圖4: 自動化測試和手工測試的收益對比"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但是在我的觀察中,我發現大多數團隊在覈算手工測試和自動化測試的成本時採用的標準並不一致。他們會忽略:手工測試重複測試的成本,會忽略手工測試重複書寫測試報告的成本……但是他們會給自動化測試追加上:上下游環境依賴成本,環境部署成本,接口定義不完備的成本,自動化用例的維護成本太大了……"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"點一下最簡單,成本最低,點點吧。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當夜深人靜的時候,你再細想這些話術、你細想……就會發現這些成本和自動化測試什麼關係,手工測試不也需要這些成本嗎?要是一個項目要測多輪,難不成每次都點點?OH,當然不是了,下一次只點那些上一次失敗的用例就好了……OMG……"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"手工用例就不需要維護成本?不過從我的觀察發現,確實不需要。因爲有些團隊壓根就不寫手工用例,當然就談不上成本了。還有的團隊即便有手工用例也從來不會維護,下一個同學測試類似的項目的時候,參考一下之前的用例,然後自己重新寫用例。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"誤區4:不關注團隊收益"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在誤區2中,試點項目的測試人員只根據自己的個人收益來做測試方案的選擇。但是團隊中的個人是相互聯繫的,團隊內部的項目也會是連續的,而不是離散的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"某個人測試的某個項目,下一次可能就換其他人來測試了。某個短期來看不會變化的項目,可能數月之後就會修改了。項目每次都修改一點點,可能半年之後就會有上百個修改點了……"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果站在團隊的角度考慮,我們團隊內每個人編寫的自動化用例有時候雖然對個人而言ROI很低,但是對團隊的ROI卻可能非常大。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果每一個變更很小的項目都不編寫自動化用例,那麼當項目做大的時候怎麼辦?如果每個項目都是上線後就不修改了,那當這個項目的代碼要下線的時候怎麼辦?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當然,這些對於個人而言是無需關注的事情,因爲誰知道接下來的測試還是不是你負責?但是,最終卻還是這個團隊來負責的,不是嗎?當所有這些都沒有仔細執行的時候,在遇到大的項目,在遇到團隊技術重構的項目時,對於團隊而言,就需要藉助其他的手段了。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"誤區5:自動化用例是萬年不變的"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"因爲自動化用例需要隨着業務代碼的迭代而迭代,而很多團隊又認爲這樣的成本太大了。因此自動化用例就成了一堆萬年不變的功能的測試用例,最終自動化就成了“形而上”般的存在。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"業務代碼都在不斷變化,不斷升級,不斷迭代,憑什麼自動化的用例就得萬年不變,自動化的用例就不用維護?實在是想不通這裏面的道理。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"自動化用例的落後,會導致自動化用例無法成爲業務代碼的試刀石,當他變成一件附屬品時,他所帶來的一切就只有成本了。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"誤區6:項目迭代太快了,等穩定了再用自動化測試"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這一點是我聽到過的所有的謬誤中最沒有道理的一個了。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"從圖4中可以看出,越是大的項目,越是迭代次數多的項目,越是變化快的項目,自動化測試的收益越大。大多數團隊,此時想到的更多的是快速的變化帶來的是更多的自動化用例的維護成本。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但是,即便是創業公司,誰也不會在項目啓動的時候就朝着把項目做爛的目標行進吧?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"等項目穩定的時候,估計就是這個產品要下線的時候了。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"自動化測試是一種文化"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在考慮自動化測試的時候,需要認真的思考自動化測試的定位和目標,需要認識到自動化測試需要付出一定的成本,自動化測試還需要修改既有的研發流程,需要認識到團隊的累計收益……"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在考慮自動化測試的時候,還需要意識到,自動化測試一種項目文檔化的手段,正所謂“測試即文檔”,自動化測試還是團隊內部不同測試人員有效溝通的一種手段,自動化測試更是團隊積累的一種有效載體……"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"自我看來,自動化測試首先應該是一種工作文化,而不單純是一種測試手段。工作文化意味着當出現問題的時候,我們的反應是我們沒會使用這個工具,或者我們的使用方法不對,而不是說這個工具是有問題的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章