qileilove

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

          探索性測試在軟件產品測試中的應用

           前言

            軟件測試在軟件誕生的那一天就開始了,越來越多的公司和組織獲得了軟件測試的巨大回報,這是提高軟件質量最有效的方法,也是提高公司產品質量的重要手段。

            曾經一個朋友聊天時說過,一個90年代的程序設計師和一個90年代的測試工程師,那么到了我們現代的這個社會,程序設計師可能不知道如何下手,但是測試工程師還是可以按照他的思路來測試這個產品(對于較簡單的非網絡軟件)。

            起初聽到這個事情很不以為然,但是仔細坐下來好好想想,這里面隱藏著一個軟件測試方面的巨大的難題。那就是我們的軟件測試方法一直都沒有改變過,曾經很多人提出過這方面的理論和技術,但是很多都是以失敗告終了。那么為什么軟件測試改進這么難,編程語言在層出不窮的變換著,唯獨測試方面停滯不前。仔細想一想,是因為軟件的多樣性,曾經有學者提出建立像維基百科那樣,建立一個測試百科,由世界各地的測試工程師上傳自己的測試用例,也提出過攜帶環境測試等等一些理論。所以我們對軟件測試新方法迫不及待。

            第一節 軟件失效

            當我們看到這個名詞的時候,我相信很多測試工程師都會有同感,在你們的工作過程中發現過很多軟件失效,“人類本身就是一個麻煩的制造者”,我們不僅捫心自問,“我們是否可以真正以來軟件處理這些重要的全球性任務?對于許多災難“船只拋錨”、“火箭爆炸”、“金錢損失”,甚至于“奪走人類的生命”。人類并不完美,難免會犯錯誤,任何人。

            第二節 商業中的軟件測試

            如今軟件測試已經系統化的應用到了商業軟件測試中,但是在真正的測試中往往是這樣的,當我們測試到一定的程度的時候,bug的數量不在增加了,這個使我們往往很苦惱,從測試用例中一遍一遍的運行,希望發現bug。但是很多的時候我們的測試經理很略了一個很大的方面,那就是測試工程師的心理,我們往往在很苦悶的尋找一個東西,往往變現的很是急躁,但是如果我們有了地圖,或者有了提示,那么我們再尋找的話,往往會輕松很多。我們暫且稱之為測試瓶頸。

            這個時候我們需要轉變測試方法,舉一個例子,農民在噴灑農藥的時候,時間長了,有一些蟲子不但不死,反而對其的藥性有抵抗力,這是時候農民往往回換一種藥。軟件測試亦是如此,這個時候我們就得換一種測試方面。這是軟件測試原理中的第五條:殺蟲劑侼論。

            第三節 探索性軟件測試

            第一次看到這個詞語你可能會感到驚訝,從此以上面我們可以看出,那就是在探索中測試。

            那么我們從這里在分為:局部探索性軟件測試、全局探索性軟件測試以及混合探索性軟件測試。

            局部探索性軟件測試:

            進入這個話題之前,我們先看一個比喻性的招聘廣告:

            急需一名軟件測試人員,該職位要求根據那些亂七八糟且只有半截的規格說明書(如果還能找到的話)來測試一個高度復雜且基本不帶任何文檔的軟件產品。不要指望當初的開發人員,他們基本不愿也不會幫助你。該產品的使用環境廣泛,支持多用戶、多平臺、多語言和其他很多必須支持的環境。我們不清楚如何定義它們,但是安全性和性能是最重要的,而且軟件發布后不允許處任何問題,否則我們就玩完了。

            我們必須承認上面說的都是反話。但是這里提到情況,我敢打賭他們是不會招聘到人的。

            這個廣告告訴我們,測試工程師必須有完整的產品規格說明書,必須清楚產品框架,必須了解產品的使用過程和功能。

            測試就是有所改變,有所不變。

            1)你必須判斷軟件運行的表現是否符合設計的預期?

            2)當用戶為了某個功能購買了軟件,可是該軟件時候實現了這個功能?

            3)軟件運行時,是否足夠快,足夠安全,足夠穩定?

            那么在局部探索性軟件測試我們可以依賴于以下幾種:

            1)合法輸入和非法輸入

            2)輸入篩選器

            3)輸入檢查

            4)異常處理代碼

            5)默認輸入或者用戶提供的輸入?

            6)常規輸入還是非常規輸入?

            7)使用輸出來指導輸入選擇

           全局探索性軟件測試:

            我們暫且把全局探索性軟件測試看著一次旅行,你到了摸一個大城市之后,比如英國倫敦,這個城市中會分為:商業區、歷史區、旅游區、娛樂區、旅館區、破舊區。

            1、商業區測試類型:

            商業區是一個城市的經濟核心,相比軟件,商業區就是軟件中最主要的功能。

            那么我們有以下幾種測試方法,

            1)指南測試法

            要求測試人員通過閱讀用戶手冊并嚴格按照手冊的建議執行。如果手冊描述了摸個特性以及如何使用該特性時,測試人員要特別留心那些指令。其目的是盡量忠實地執行用戶手冊中描述的每個場景。雖然許多幫助系統只描述了軟件的特性,而不涉及場景,但他們一般對于英愛使用那些輸入以及操作用戶界面來執行軟件的特性都會給出具體的建議。因此這個測試法不僅可以驗證軟件確實實現了手冊中所描寫和各種軟件特性,并且還能驗證手冊的準確性。

            2)賣點測試法

            在一個城市中都有這個城市的亮點,我們也通常叫做賣點,比如北京天安門,王府井。香港的購物街。拉斯維加斯的賭城。

            在軟件測試中,我們的賣點往往就是我們廣告上面說的最多的那個功能。那么測試人員可以在這些軟件的賣點上面去測試。

            3)地標測試法

            我們去一個第一個往往首先會看地圖,然后再看指南針。

            在軟件測試中,我們可以把主要的功能標注出來,這就是“地標”,然后按照前后順序,依次運行。

            4)快遞測試法

            在商業去中數據的信息量往往占了很大的比例。

            軟件測試中,我們可以把一個輸入數據作為快遞,標記,跟著這個數據,直到整個生命周期。查看是否符合要求。

            5)深夜測試法

            我們往往在白天和網上會看到商業區的繁華,但是在凌晨以及深夜,那么這個繁華區往往會有另一番風趣。

            軟件測試中,就是在深夜運行這個程序,然后查看軟件在深夜運行的記錄。

            2、歷史區測試法

            1)惡鄰測試法

            在我們旅游的城市,我們往往會根據導游的提示,有目的的去訪問那里,但是,那些往往我們不去訪問的地方往往是骯臟的。

            那么在我們的軟件里面,我們根據軟件說明書,按照編輯給我們設置的路徑去操作,那么這個時候我們假如打破邏輯,就會找出很多未知的缺陷。

            2)博物館測試法

            博物館是戰士古董的地方,在軟件里面,我們把一些老的代碼比作這些代碼,一些程序員在引入這些代碼的過程中,往往沒有修改就運行了,我們的測試目的是在這些老代碼的基礎上,看能不能在新的功能上正確的實現。

            3)上一版測試法

            這點類似于回歸測試,我們在這里不相信闡述。

            3、娛樂區測試類型

            1)配角測試法

            我們在關注某一個產品的時候往往關注了這個產品的主要功能,而忽略的次要功能,例如:我們再測一個數據頁面顯示的功能,當我們輸入相應的數據,頁面很好的顯示出來的,那么我們再其頁面的右下方發現了一個打印按鈕,這就是我們此方法的用武之地了。

           2)深巷測試法

            我們再旅游的時候,有些地方總有一些游客特別想去,但是有些地方游客很是不愿意光顧,比如,垃圾回收站,廢品處理站。

            在軟件里面我們也可以這樣做,假如:我們再跟蹤一個數據的時候,我們往往關注的是這個數據能不能很好的讀取或者被運算,我們都忽略一個很大的誤區,好的設計者會很好的運用變量的生命周期耳朵,即:當這個數據不再使用的時候,那么就應該銷毀,不這么的做的后果就是,數據沒有被及時回收,內存不能釋放,造成內存泄露。嚴重的時候甚至影響系統運行。

            3)通宵測試法

            人假如幾天幾夜不合眼的話,那么工作效率就會變差。

            軟件也是如此,雖然是沒有生命的,但是他的每個變量和元素都是有生命周期,讓軟件長時間工作,同時記錄其運行日志。一旦發生崩潰或者異常,我們就能很快的鎖定。

            旅游區測試類型

            1)收藏家測試法

            測試人員應該確保每一個輸出的結果,編輯一個表格來表示的他,然后從中找出破綻

            2)長路徑測試法

            我們在軟件中假如一個功能到另外一個功能中間要進行很多操作,也許在操作的過程中就能發現bug。

            3)超模測試法

            這個測試法要求測試人員能夠關注UI的每一個細節,輸出顯示字符的大小,按鈕的大小,字符的長短。

            4)測一送一測試法

            “buy one get one free”,很簡單,我們再運行程序的時候,同時運行一個拷貝,那么我們再兩個程序同時去爭搶一個內存的時候,或者時候運行導入,兩個程序就會爭奪一個導入文件,那么這個時候程序往往就會出錯

            旅館區測試類型

            1)取消測試法

            有些程序在軟件運行的過程中是不讓被取消的,那么我們可以做,雖然有點搶人所愛,我們可以在運行的過程中,單機關閉,直接斷掉計算機電源,在進程中殺掉這個進程。

            2)懶漢測試法

            在有一些軟件中,我們往往會碰到系統默認值,那么我們可以更改這些值或者刪除或者使用特殊符號。觀察系統異常。

            破舊區測試類型

            1)逆向測試法

            比如在一個打印程序中,系統會讓用戶選擇打印那一頁,我們輸入字母,觀察系統是不是有這方面的處理能力。

            2)歹徒測試法

            運用非法輸入

            3)錯序輸入法

            比如時間格式,我們不按照提示輸入會怎樣?

            4)強迫癥輸入法

            我們一邊又一邊的輸入數據,強迫軟件運行

          posted on 2013-06-27 10:59 順其自然EVO 閱讀(241) 評論(0)  編輯  收藏 所屬分類: 測試學習專欄

          <2013年6月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 温宿县| 延川县| 连云港市| 锦屏县| 临泉县| 阳泉市| 新郑市| 英德市| 格尔木市| 赤峰市| 缙云县| 扎囊县| 佛学| 句容市| 朝阳县| 长兴县| 靖安县| 皋兰县| 乡宁县| 双鸭山市| 连江县| 陵川县| 扶余县| 西和县| 宾阳县| 嘉祥县| 邮箱| 大田县| 靖州| 新干县| 营口市| 宁河县| 漯河市| 麟游县| 长沙县| 麦盖提县| 保康县| 唐海县| 库尔勒市| 浮山县| 左权县|