qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          軟件測試的三十六計(1)

           第一計-瞞天過海

            【釋義】

            防備得周全時,更容易麻痹大意;習以為常的事,也常會失去警戒。秘密常潛藏在公開的事物里,并非存在于公開暴露的事物之外。公開暴露的事物發展到極端,就形成了最隱秘的潛藏狀態。

            在我們測試過程中,漫天過海是很常用的一種計謀。

            很多錯誤,往往都是隱含在我們已經習慣了正確的區域,這也是為什么,我們在不停的在做讓人覺得很枯燥無味和產出比很低的回歸測試的原因。

            很多測試團隊,都是習慣了使用已經存在的功能測試用例來進行回歸測試,導致很多bug在被僵化的測試過程所遺漏。所以,進行更加有效的回歸測試必須要去探索那些我們遺漏的陰影區域。而如何去探索這些區域呢,一般可以考慮的方法有如下幾個:

            1、在功能測試完畢后,對bug進行分析,得出bug的分布圖和原因。然后在沒有發現bug,但是被主要bug趨勢范圍影響到的功能區域,加強回歸測試的深度。

            2、在回歸測試完畢后,對功能區域進行評價,對于發現問題較多的功能區域進行更加寬泛的廣度優先的二次回歸。

            3、定期的評審回歸測試用例,對測試集合進行調整,不要只針對新功能直接影響的,而是那些在底層更迭模塊所影響的應用層進行更多的關注。

            另外一個大范圍使用瞞天過海的測試范疇就是安全性測試。

            在安全性測試中,我們大部分的方法就是設置一個虛假的信息,企圖訪問系統,從而給系統帶來損害。

            比如我們使用jmeter去獲得一個特定角色的訪問過程,該角色的權限為低級。我們在測試時,人為的修改該角色的權限,通過jmeter發起請求,看是否能夠成功的騙過登錄策略進入系統。

            還有就是我們認為的修改數據庫中的某條數據,然后進行下束流程,看系統是否在流程進行過程中對數據完整性進行有效的校驗。

            總之,瞞天過海在測試領域里,就是要驗證那些隱藏的流程和數據處理過程。這些流程和過程在我們用戶前端是被屏蔽或者隱藏掉的。雖然正向的和反向的操作都不會出現問題。但是,除了正向和反向的操作這些已經被開發刻意處理過的范圍之外,仍然會潛藏一些常規方法無法探知的缺陷。這些缺陷只有通過非常規的測試手段,主動的攻擊才會被表露出來,從而獲得更深層次的質量保障。

            第二計-圍魏救趙

            【釋義】

            進攻兵力集中、實力強大的敵軍,不如使強大的敵軍分散減弱了再攻擊。攻擊敵軍的強盛部位,不如攻擊敵軍的薄弱部份來得有效。

            圍魏救趙其實說起來很簡單,大部分人也都試用過。那就是把要測試的對象不斷的拆分,一直到最simple的程度。從而避免因為測試一個過于復雜的對象導致bug的遺漏。

            這個過程其實就是一個break down的過程。簡而言之,就是對一個對象的測試用例進行分層的過程。

            我們在測試用例開發過程中,一定要引入分層的概念,這樣的好處不但利于我們在各個測試階段simple的工作從而準確定位bug,而且有利于我們在需求更新時,更加快捷有效的更新我們的測試用例。

            一般測試用例分層的策略就是:

            1、UI層,只考慮GUI的范疇。

            2、Field層,考慮的是各個element本身自有的屬性邏輯。

            3、Functional層,考慮的是單個或者多個element的實現的業務邏輯流和或者功能。

            4、Business Rule,考慮的是上下文,和直接間接被影響的功能區域。

            5、安全測試,考慮的是相關的安全策略。

            總之,所謂的圍魏救趙,目的就是通過將測試對象細化,降低測試的復雜度,有利于我們通過一點來擊破整個屏蔽,減少測試的成本。

           第三計-借刀殺人

            【釋義】

            敵人的情況已經明了,友方的態度尚未確定。利用友方的力量去消滅敵人,自己不需要付出什么力量

            如何才能降低測試成本呢,這是每個測試管理者最大的問題。在傳統測試過程中,一般是開發將代碼開發完畢后,移交給測試人員進行測試。一般開發人員會進行單元測試和集成測試。

            然而,在現在敏捷開發的過程中,開發人員也必須進行一些功能測試,尤其是自動化測試的大量引入,很多人都覺得開發人員必將取代測試人員的角色,從而使得測試人員這個角色逐漸的消亡。

            其實這是一個很片面的想法。在敏捷開發過程中,測試角色不是被削弱或者是被取代,而是更加的被強化,測試驅動開發測試敏捷開發的真髓。

            在測試驅動開發的敏捷開發過程中,測試人員和開發人員同時對user story進行分析,開發人員根據其進行代碼實現,而測試人員是通過書寫相關的測試場景來驗證開發人員實現的質量。

            也就是說,測試人員不再是去根據需求和設計文檔在后期進行代碼實現度的驗證,而是轉變為依據或者是貼合最終用戶來控制開發的方向和質量。

            驗證標準也從了是否完成了預期的設計變成了是否滿足了用戶的需求。

            所以,借刀殺人已經成為普遍的開發策略。核心的想法就是,開發人員在做完常規的單元測試和模塊測試之后,必須依據測試用例對代碼進行功能測試,只有那些完成了p1&p2測試用例的代碼,才會提交給測試人員進行測試。

            這樣的好處是:

            1、在開發階段就能評審代碼是否符合用戶需求,這是敏捷的靈魂。

            2、在測試階段減少大量因為P1&P2導致的等待時間和重復測試率。

            3、開發測試的用例可以是手工測試用例或者自動化測試腳本,這樣的話加強了測試人員和開發人員的交互,不再是單純的質量保證,而是主動質量控制。

            所以,借刀殺人的最大核心就是,那些測試用例需要開發人員來執行。這就是測試用例要分層的原因所在,只有分層的測試用例,才能很簡單的提取一個測試集合用來執行借刀殺人這個計謀。

            第四計-以逸待勞

            【釋義】

            意謂困敵可用積極防御,逐漸消耗敵人的有生力量,使之由強變弱,而我因勢利導又可使自己變被動為主動,不一定要用直接進攻的方法,同樣可以制勝。

            在測試過程中,以逸待勞是對測試計劃的一個有力的支撐。

            我們在指定測試計劃時,就需要根據具體的測試范圍,測試資源,測試進度表等進行高效率的設定。

            那些需要重點測試, 那些需要回歸,那些需要特殊的工具,那些需要特殊的數據集,那些需要特殊的測試環境,測試對象的前后依賴性,開發的進度等等都是影響我們制定測試計劃的各種重要因素。

            通過測試計劃的制定,我們能夠在開發階段有條不紊的進行測試的準備,從而達到并發的執行效率,而不是傳統測試中,只有一個簡單的時間線,所有的測試都是在要執行之前,才進行更詳細的分析。

            而以逸待勞就是敏捷測試的另一個優點,在你根據user story進行測試場景的設計時,就已經按照執行時如何更加有效的利用資源進行設計了,而不是傳統的那種只是針對use case中包含的單一功能區域進行場景設計。

            以逸待勞的核心就是提前準備而不是需要時才動手。基本上減去了測試人員在測試用例開發完畢后等待代碼前這段無所事事的idle time。

           第五計-趁火打劫

            【釋義】

            本指趁人家失火的時候去搶東西。現比喻乘人之危,撈一把。

            趁火打劫基本上大家都已經或多或少的用過了。

            在測試過程時,我們經常能發現一個bug之后,然后在周圍發現很多bug。這些bug有些是因為原生bug引起的,有些是因為修復bug導致的新bug。

            所以趁火打劫的測試思想就是,一旦你發現了一個bug,就要著重的在bug的直接影響功能區域,間接影響功能區域進行更deep的挖掘性測試,從而能夠更加有效的獲得產品的缺陷。

            只有通過趁火打劫,我們才能更加深層次的挖掘出真正的缺陷,如果僅僅是發現一個bug,根據其表象提交之后就置之不理,反正會在后期的過程中出現更大的隱藏缺陷,從而導致整體進度的延遲。

            所以,趁火打劫是手段,目的是那些中間過程,臨時數據集,被間接調用,或者底層代碼的缺陷。

            第六計-聲東擊西

            【釋義】

            此計是運用“坤下兌上”之卦象的象理,喻“敵志亂萃”而造成了錯失叢雜、危機四伏的處境,我則要抓住敵人這不能自控的混亂之勢,機動靈活地運用時東時西,似打似離,不攻而示它以攻,欲攻而又示之以不攻等戰術,進一步造成敵人的錯覺,出其不意地一舉奪勝。

            一般常規的測試數據設計,都是從黑盒角度進行考慮,也就是正向數據集和反向數據集。這樣的話,正向數據集是保證的正確的流程和功能。反向數據集是保證了數據驗證策略的完整性。

            但是,如果僅僅這樣,只能說我們還是從正面的效應去考慮產品的特性。

            而聲東擊西,就是要我們不僅僅從應用層去設計測試數據,還要從邏輯層甚至驅動層去設計測試數據。我們不是單單的驗證一頭一尾的數據完整性,我們還要去主動驗證中間數據的有效性。通過直接修改數據來實現這一個效果。

            另外,聲東擊西在性能測試里面也是一個廣泛的應用,我們在無法直接測試一個性能點時,通過對他直接影響或者間接影響的功能點進行測試,從而側面了解該功能點的性能。

            最常見的一個示例就是我們無法驗證一個用戶密碼驗證過程的性能,但是我們通過大量的有效登錄和無效請求的混合用戶登錄集合,我們能間接的獲得驗證的效率和瓶頸。

            第七計-無中生有

            【釋義】

            運用假象欺騙對方,但并非一假到底,而是讓對方把受騙的假象當成真象。

            在自動化測試過程中,有時候我們需要測試的模塊需要一些未開發完畢的模塊的支持,所以需要我們static的提供一些方法或者數據。這種書寫測試用的假模塊是開發常用的方法。很典型的無中生有的計策應用。

            實際上,我們在手工測試中,也可以使用這種計謀,最常見的就是是我們需要一個測試數據時,無法直接獲得,那么我們就可以在數據庫中直接添加我們的需要的數據。

            擴展來看,這種方法在build tesing中最有效。我們現在都是自動code build 然后自動部署,自動測試,并發送一份報告,包含的是一些major path的測試用例的測試結果。從而使得我們對該版本的code有個直接的印象,從而判斷是否引入我們的測試環境中。

            在這個過程中使用無中生有的方法就是我們會有一個測試數據集存在于一個數據庫備份中。當新的build部署完畢后,restore這個backup的db,能夠迅速有效的進行測試,而不浪費時間在數據準備上。

            總之,這是個應用很廣泛的計謀。

          第八計-暗度陳倉

            【釋義】

            此計是利用敵人被我“示之以動”的迷惑手段所蒙蔽,而我即乘虛而入,以達軍事上的出奇制勝。

            在測試過程中,如何使用奇襲呢。在性能測試和安全測試中,經常會使用一些欺騙系統的手段來進行測試。

            實際上在功能測試時,也可以。那些寫偽代碼的方法都很通俗了。改數據庫也是很老套的使用了。那么在手工測試中,能否使用呢?

            答案是肯定的,我們來舉一個示例:

            我們在開發測試用例時,每個人都負責自己的功能區域,往往在這些測試用例中,有很多overlap的場景,如果都在各自的測試中包含,很容易造成資源的浪費,而且很容易出現miss scenario的情況。

            這時候利用暗渡陳倉的方法就是我們對那些數據依賴比較高的測試用例集中在初始功能模塊的測試用例中書寫。對于邏輯依賴比較高的測試用例,集中在結束功能模塊用例中書寫。

            第九計-隔岸觀火

            【釋義】

            此指敵方內部矛盾激化,以致公開地表現出多方面秩序混亂、傾軋。

            隔岸觀火的應用也是很典型的。

            一種就是我們在手工測試過程中,直接修改數據庫,植入一批錯誤的數據,從而判斷系統的處理能力。

            另外一種就是在性能測試中,不斷的對某些沖突的資源占用過程進行增量,從而獲得性能評價。

            甚至從廣義的說,stress test 就是一個隔岸觀火的最大用處。我們通過壓垮系統之后,從而使得系統出現錯誤頻出的狀態,然后我們分析這些混亂的原因,從而進行性能的調優。

            第十計-笑里藏刀

            【釋義】

            比喻外表和氣而內心陰險。

            在測試過程中,使用笑里藏刀的主要有以下幾種情況:

            1、在穩定性測試時,進行一些破壞穩定性的操作

            2、在壓力測試時,定期的定量的發送一些錯誤的請求,來衡量系統的處理能力

            3、安全測試中,發送一些帶殼的請求,殺毒軟件的測試,這是一個重點。

            一般來說,笑里藏刀的主要作用就是對系統進行一些在預先設定的錯誤處理之外的錯誤請求。或者主動攻擊。

          版權聲明:本文出自 gigobin 的51Testing軟件測試博客:http://www.51testing.com/?26810

          原創作品,轉載時請務必以超鏈接形式標明本文原始出處、作者信息和本聲明,否則將追究法律責任。



          posted on 2013-05-29 10:26 順其自然EVO 閱讀(185) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2013年5月>
          2829301234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 通化市| 长海县| 渭南市| 东阳市| 德保县| 四子王旗| 新平| 太仓市| 高州市| 南充市| 丹巴县| 江华| 喀什市| 西贡区| 曲水县| 琼结县| 翁源县| 巫溪县| 平果县| 贵州省| 石城县| 司法| 安岳县| 正阳县| 长丰县| 武山县| 海丰县| 盐山县| 平江县| 临夏市| 营口市| 英山县| 普兰县| 阿克| 闵行区| 六安市| 诏安县| 泰兴市| 博兴县| 利津县| 通城县|