測試?yán)碚摶A(chǔ)三

一 測試用例(Test Case)

測試用例(Test Case)是指對(duì)一項(xiàng)特定的軟件產(chǎn)品進(jìn)行測試任務(wù)的描述,體現(xiàn)測試方案、方法、技術(shù)和策略。其內(nèi)容包括測試目標(biāo)、測試環(huán)境、輸入數(shù)據(jù)、測試步驟、預(yù)期結(jié)果、測試腳本等,最終形成文檔。簡單的認(rèn)為,測試用例是為某個(gè)特殊目標(biāo)而編制的一組測試輸入、執(zhí)行條件以及預(yù)期結(jié)果,用于核實(shí)是否滿足某個(gè)特定軟件需求。

1.1作用

  1. 指導(dǎo)測試的實(shí)施
    測試用例主要適用于集成測試、系統(tǒng)測試和回歸測試。在實(shí)施測試時(shí)測試用例作為測試的標(biāo)準(zhǔn),測試人員一定要按照測試用例嚴(yán)格按用例項(xiàng)目和測試步驟逐一實(shí)施測試,并對(duì)測試情況記錄在測試用例管理軟件中。
  2. 規(guī)劃測試數(shù)據(jù)的準(zhǔn)備
    在我們的實(shí)踐中測試數(shù)據(jù)是與測試用例分離的。按照測試用例配套準(zhǔn)備一組或若干組測試原始數(shù)據(jù),以及標(biāo)準(zhǔn)測試結(jié)果。
  3. 編寫測試腳本的"設(shè)計(jì)規(guī)格說明書"
    為提高測試效率,軟件測試已大力發(fā)展自動(dòng)測試。自動(dòng)測試的中心任務(wù)是編寫測試腳本。如果說軟件工程中軟件編程必須有設(shè)計(jì)規(guī)格說明書,那么測試腳本的設(shè)計(jì)規(guī)格說明書就是測試用例。
  4. 評(píng)估測試結(jié)果的度量基準(zhǔn)
    完成測試實(shí)施后需要對(duì)測試結(jié)果進(jìn)行評(píng)估,并且編制測試報(bào)告。判斷軟件測試是否完成、衡量測試
    質(zhì)量需要一些量化的結(jié)果。例:測試覆蓋率是多少、測試合格率是多少、重要測試合格率是多少,
    等等。
  5. 分析缺陷的標(biāo)準(zhǔn)
    通過收集缺陷,對(duì)比測試用例和缺陷數(shù)據(jù)庫,分析確證是漏測還是缺陷復(fù)現(xiàn)。漏測反映了測試用例
    的不完善,應(yīng)立即補(bǔ)充相應(yīng)測試用例,最終達(dá)到逐步完善軟件質(zhì)量。而已有相應(yīng)測試用例,則反映
    實(shí)施測試或變更處理存在問題。

1.2 重要性

軟件測試的重要性是毋庸置疑的。但如何以最少的人力、資源投入,在最短的時(shí)間內(nèi)完成測試,發(fā)現(xiàn)軟件系統(tǒng)的缺陷,保證軟件的優(yōu)良品質(zhì),則是軟件公司探索和追求的目標(biāo),每個(gè)軟件產(chǎn)品或軟件開發(fā)目的都需要有一套優(yōu)秀的測試方案和測試方法。
影響軟件測試的因素很多,例如軟件本身的復(fù)雜程度、開發(fā)人員(包括分析、設(shè)計(jì)、編程和測試的人員)的素質(zhì)、測試方法和技術(shù)的運(yùn)用等。因?yàn)橛行┮蛩厥强陀^存在、無法避免的;有些因素則是波動(dòng)的。不穩(wěn)定的。例如開發(fā)團(tuán)隊(duì)是流動(dòng),有經(jīng)驗(yàn)的開發(fā)人員走了,新人不斷補(bǔ)充進(jìn)來;每個(gè)開發(fā)人員的工作也會(huì)受情緒影響,等等。有了測試用例,無論是誰來測試,參照測試用例實(shí)施,都能保障測試的質(zhì)量,從而把人為因素的影響最小化。即便最初的測試用例考慮不周全,隨著測試的進(jìn)行和軟件版本更新,也將日趨完善。
因此,測試用例的設(shè)計(jì)和編制是軟件測試活動(dòng)中最重要的。測試用例是測試工作的指導(dǎo),是軟件測試必須遵守的準(zhǔn)則,更是軟件測試質(zhì)量穩(wěn)定的根本保障。

1.3要素(特點(diǎn))

  1. 用例編號(hào)
  2. 測試項(xiàng)
  3. 測試標(biāo)題
  4. 用例屬性
  5. 重要級(jí)別:高中低
  6. 預(yù)置條件
  7. 測試輸入
  8. 操作步驟
  9. 預(yù)期結(jié)果
  10. 實(shí)際結(jié)果

1.4 舉例

  • 手機(jī)開機(jī)
    一臺(tái)新的手機(jī),按開機(jī)鍵,相當(dāng)于輸入了一組數(shù)據(jù)來測試,預(yù)置條件指的是開機(jī)的前提條件,比如 是否有電;預(yù)期結(jié)果就是能順利打開手機(jī),那么測試完畢后,是否達(dá)到了想要的需求(順利開 機(jī))。
    通過上面的描述,我們不難看出,測試用例主要解決的問題是要測什么以及怎么測。
  • 新浪用戶注冊
    輸入正確的手機(jī)號(hào)進(jìn)行測試,即設(shè)計(jì)一個(gè)正例的測試用例


    image.png

    輸入錯(cuò)誤的手機(jī)號(hào)進(jìn)行測試,及設(shè)計(jì)一個(gè)反例的測試用例


    image.png

二 編寫測試用例方法

2.1 等價(jià)劃分法

  • 定義
    某個(gè)輸入域的集合,在這個(gè)集合中每個(gè)輸入條件都是等效的,如果其中一個(gè)的輸入不能導(dǎo)致問題發(fā)生,那么集合中其它輸入條件進(jìn)行測試也不太可能發(fā)現(xiàn)錯(cuò)誤。
    等價(jià)類劃分是一種重要的、常用的黑盒測試方法,不需要考慮程序的內(nèi)部程序,只需要考慮程序的輸入規(guī)格即可。它將不能窮舉的測試過程進(jìn)行合理分類,從而保證設(shè)計(jì)出來的測試用例具有完整性和代表性

關(guān)于等價(jià)類劃分的兩個(gè)重要概念:

  • 有效等價(jià)類:有效等價(jià)類是程序規(guī)格說明有意義,合理的輸入數(shù)據(jù)。
    比如用正確的用戶名和密碼來登錄系統(tǒng)就是有效等價(jià)類。
  • 無效等價(jià)類:無效等價(jià)類是程序規(guī)格說明無意義,不合理的輸入數(shù)據(jù)。
    比如用不存在的用戶名和密碼來登錄系統(tǒng)就是無效的等價(jià)類。
  • 適用場景
    對(duì)于等價(jià)類這個(gè)方法,一般適用于有無限多種輸入,我們不可能完成窮舉測試,等價(jià)類可以使我們用較少的測試用例盡可能多的將功能覆蓋。
  • 案例
    • 程序規(guī)定
      輸入三個(gè)正整數(shù)作為三邊的邊長構(gòu)成三角形。請用等價(jià)類方法設(shè)計(jì)測試用例分別判斷輸入3個(gè)整數(shù)時(shí)的三角形為一般三角形、等腰三角形、等邊三角形時(shí)情況:
    • 需求提取
      1、 三條邊需求:整數(shù)/3個(gè)數(shù)/非零數(shù)/正數(shù)
      2、一般三角形的要求:二邊之和大于第三邊
      3、等腰三角形:二邊相等且滿足二邊之和大于第三 邊
      4、等邊三角形:三條邊相等
    • 參考答案


      image.png
  • 步驟
  1. 先確定有效和無效等價(jià)類,得到等價(jià)類表
  2. 有效等價(jià)類就是題目條件,設(shè)計(jì)一個(gè)測試用例,使其盡可能多的覆蓋所有尚未覆蓋的有效等價(jià)類。重復(fù)這一步驟,使得有效等價(jià)類均被測試用例所覆蓋。
  3. 無效等價(jià)類先劃分與條件相反的情況,設(shè)計(jì)一個(gè)測試用例,使其只覆蓋一個(gè)無效等價(jià)類。重 復(fù)這一步驟使得所有無效等價(jià)類均被覆蓋,再找到特殊情況(中文、英文、符號(hào)、空格、 空)
  • 其他案例
    • 計(jì)算1--100的整數(shù)之和(包括1和100)


      image.png

      一般是一個(gè)框輸入正確的值,一個(gè)框輸入錯(cuò)誤的值,沒有兩個(gè)框都輸入錯(cuò)誤的值,因?yàn)楦菀状_定到底是那個(gè)框出現(xiàn)錯(cuò)誤的值。

    • TIM登陸
      測試要求是:測試QQ賬號(hào),賬號(hào)的要求是 6---10位正整數(shù)。


      image.png

      image.png
    • 手機(jī)號(hào)碼
      某城市電話號(hào)碼由三部分組成,分別是:地區(qū)碼:空白或是3位數(shù)字;前綴:非‘0’且非‘1’開頭 的三位數(shù)字;后綴:4位數(shù)字。例子:1232341234


      image.png
  • 登錄界面


    image.png

    用戶名(昵稱)長度為 3-19:以字母開頭;登錄名稱:非空;密碼: 非空;確認(rèn)密碼: 值 和密碼相同。


    image.png
  • 總結(jié)
    在測試文本框的程序時(shí)應(yīng)該考慮如下情況:
    1. 文本框要求輸入長度
    2. 輸入的類型
    3. 組成規(guī)則
    4. 是否為空
    5. 是否重復(fù)---區(qū)分大小寫
    6. 是否去除空格

2.2 邊界值分析法

  • 定義
    邊界值分析法的理論基礎(chǔ)是假定大多數(shù)的錯(cuò)誤是發(fā)生在各種輸入條件的邊界上,如果在邊界附近的取值不會(huì)導(dǎo)致程序出錯(cuò),那么其它的取值導(dǎo)致程序錯(cuò)誤的可能性也很小。
    邊界是對(duì)于輸入等價(jià)類和輸出等價(jià)類而言,稍高于其邊界值及稍低于其邊界值的一些特定情況。邊界值分析法也是一種常用的黑盒測試方法。
  • 案例
    依據(jù)使用網(wǎng)站的登錄頁面舉例
    image.png

    用戶名:1—20個(gè)字符,包括1和20,其他不考慮 ; 密碼:6個(gè)數(shù)字,其他不考慮 現(xiàn)要求用邊界值分析法測試用戶名和密碼這兩個(gè)輸入框。
    image.png

    最常見的邊界值BUG是因?yàn)樵诖a中將>寫成≥,將<寫成≤ 有效數(shù)據(jù)和無效數(shù)據(jù)的分界點(diǎn),往往作為程序員編寫程序的判斷點(diǎn),是程序員容易犯錯(cuò)誤的 地方,也是測試人員重點(diǎn)測試的內(nèi)容。
# 當(dāng)用戶輸入大于0且小于100的數(shù)時(shí)打印“我愛你” 
num = int(input('請輸入大于0且小于100的數(shù)'))
# 邊界值條件判斷設(shè)置錯(cuò)誤    
if num >= 0 and num <= 100:   
print('我愛你')  
  • 如何解決這類問題
    找到測試數(shù)據(jù)的邊界點(diǎn),也就是有效等價(jià)類和無效等價(jià)類的邊界點(diǎn),對(duì)邊界點(diǎn)數(shù)據(jù)專門進(jìn)行測試。一般情況下,需要對(duì)邊界值(0和100)以及邊界值兩邊的數(shù)(-1和1以及101和99)分別進(jìn)行測試。
    對(duì)剛才等價(jià)劃分法最后一個(gè)案例的測試用例進(jìn)行補(bǔ)充和調(diào)整:
    image.png
  • 步驟
    1. 確定邊界情況(輸入或輸出等價(jià)類的邊界)
    2. 選取正好等于、剛剛好大于或剛剛好小于邊界值作為測試依據(jù)
    3. 邊界值的取值依據(jù)輸入范圍區(qū)間不同而有所不同,但是都需要把上點(diǎn)值、離點(diǎn)值和內(nèi)點(diǎn)值取到
    • 上點(diǎn):是指邊界上的點(diǎn),無論此時(shí)的域是開區(qū)間還是閉區(qū)間,開區(qū)間的話,上點(diǎn)就是在域外,閉區(qū)間的話,上點(diǎn)就是在域內(nèi)。
    • 離點(diǎn):是指離上點(diǎn)最近的點(diǎn),這里就跟是閉區(qū)間還是開區(qū)間就有關(guān)系了,如果是開區(qū)間,那么離點(diǎn)就在域內(nèi),如果是閉區(qū)間,那么離點(diǎn)就在域外
    • 內(nèi)點(diǎn):域內(nèi)的任意點(diǎn)都是內(nèi)點(diǎn)。
      image.png
  • 其他案例
    • 輸入的參數(shù)值必須大于等于0同時(shí)小于100的整數(shù)
# 正確代碼 
num>-1或num=0   num<101或num<=100 
# 錯(cuò)誤代碼 第一個(gè)條件選中了-1,后面的條件忽略了0
num>=-1或num>0或num>=1 
# 錯(cuò)誤代碼 第一個(gè)條件選中了101,后面的條件忽略了100
 num<=101或num<100或num<=99 
image.png
  • 使用邊界值的方法設(shè)計(jì)添加標(biāo)題的測試用例
    標(biāo)題長度>0 標(biāo)題長度<=30


    image.png
  • 學(xué)生成績
    輸入一個(gè)成績n,判斷是否及格(0到100整數(shù))
    • 確定有效區(qū)間和無效區(qū)間
    • 臨界點(diǎn):0、60、100
    • 取值:-1、0、1、59、60、61、99、100、101;
    • 具體測試用例


      image.png

      image.png
  • 修改手機(jī)銀行登錄密碼


    image.png
  • 修改手機(jī)銀行登錄密碼
    密碼必須由字母與數(shù)字組合;密碼長度在8~24之間(包含8和24)


    image.png
  • 總結(jié)
    1. 如果輸入條件規(guī)定了值得范圍,則應(yīng)取剛好到這個(gè)范圍的邊界值,以及剛好超越這個(gè)范圍邊界的值和剛好小于這個(gè)范圍邊界的值作為輸入數(shù)據(jù);
    • 兩位整數(shù)加法器數(shù)的范圍為-99—99,則應(yīng)測試-98,-99,-100和98,99,100.
    1. 輸入條件規(guī)定了值的個(gè)數(shù)
      • 姓名姓名要求1—20個(gè)字符,需要測試0、1、2個(gè)字符和19、20、21個(gè)字符;
      • 某商品信息查詢系統(tǒng),每頁最多顯示10條商品信息,我們就應(yīng)該準(zhǔn)備商品信息,使能夠
        查詢出9、10條、11條、1條、0條商品記錄

邊界值和等價(jià)類區(qū)別:邊界值分析不是從某等價(jià)類中隨便挑一個(gè)作為代表,而是這個(gè)等價(jià)類的每個(gè)邊界都要作為測試條件
常見的邊界值:

  • 文本框接收字符個(gè)數(shù),比如用戶名長度,密碼長度等;
  • 報(bào)表的第1行和最后1行;
  • 數(shù)值元素的第1行和最后1行
  • 循環(huán)的第1次、2次和倒數(shù)第1次、2次。

2.3 因果圖法

  • 定義
    因果圖法是一種利用圖解法分析輸入的各種組合情況,從而設(shè)計(jì)測試用例的方法,它適用于檢查程序輸入條件的各種組合情況
    特點(diǎn):
    • 考慮輸入條件的相互制約及組合關(guān)系
    • 考慮輸出條件對(duì)輸入條件的依賴關(guān)系
      核心:
    • 因果圖法比較適合輸入條件比較多的情況,測試所有的輸入條件的排列組合。所謂的因就是輸入,所謂的果就是輸出。
  • 背景
    等價(jià)類劃分法和邊界值分析方法都是著重考慮輸入條件,但沒有考慮輸入條件的各種組合、輸入條件之間的相互制約關(guān)系。這樣雖然各種輸入條件可能出錯(cuò)的情況已經(jīng)測試到了,但多個(gè)輸入條件組合起來可能出錯(cuò)的情況被忽視了。
    如果在測試時(shí)必須考慮輸入條件的各種組合,則可能的組合數(shù)目將是天文數(shù)字,因此必須考慮采用一種適合于描述多種條件的組合、相應(yīng)產(chǎn)生多個(gè)動(dòng)作的形式來進(jìn)行測試用例的設(shè)計(jì),這就需要利用因果圖(邏輯模型)。
  • 因果圖的基本圖形符號(hào)
    通常在因果圖中,用C表示原因,用E表示結(jié)果
    • 恒等
      若原因出現(xiàn),則結(jié)果出現(xiàn);若原因不出現(xiàn),則結(jié)果不出現(xiàn)
      若c=1,則e=1
      若c=0,則e=0
      比如:取錢、打印憑條
      image.png

    • 所有條件都為1(true)時(shí)結(jié)果才為1,如果有任何一個(gè)條件為0(false)(或者所有條件均為0)那么結(jié)果為0。(簡化:全1為1,有0為0)
      若幾個(gè)原因都出現(xiàn),則結(jié)果才出現(xiàn);若其中一個(gè)原因不出現(xiàn),則結(jié)果不出現(xiàn)。
      若c1 = 1 并且 c2 = 1,則e1 = 1
      若c1 = 0 或 c2 = 0,則e1 = 0
      比如:在班級(jí)里面戴眼鏡、男的、帥的、老師==>我
      image.png

    • 若幾個(gè)原因中有一個(gè)出現(xiàn),則結(jié)果出現(xiàn);若幾個(gè)原因都不出現(xiàn),則結(jié)果不出現(xiàn)
      若 c1 = 1 或 c2 = 1 或 c3 = 1,則e1 = 1
      若 c1=c2=c3=0,則e1 = 0
      比如:努力、認(rèn)真、聽話==>成績好
      image.png

  • 取反,若原因出現(xiàn),則結(jié)果不出現(xiàn);若原因不出現(xiàn),則結(jié)果出現(xiàn)
    若c1=1,則e1=0
    若c1=0,則e1=1
    比如:搜索聯(lián)系人,如果有就不提示錯(cuò)誤,如果沒就提示錯(cuò)誤
    image.png
  • 因果圖中的約束條件
    • 互斥


      互斥

      E表示a,b,c三個(gè)原因不能同時(shí)成立;

      • 包含


        包含

        I 表示a,b,c中至少有一個(gè)條件成立

      • 屏蔽


        屏蔽

        M 表示結(jié)果a是1,則結(jié)果b強(qiáng)制為0

      • 唯一


        唯一

        O 表示a、b條件中有且僅有一個(gè)成立

      • 要求


        要求

        R 表示當(dāng)a出現(xiàn)時(shí)b也必須出現(xiàn)

  • 因果圖法步驟
    1. 找出所有的原因,原因即輸入條件或輸出條件的等價(jià)類
    2. 找出所有的結(jié)果,結(jié)果即輸出條件
    3. 明確所有輸入條件之間的制約關(guān)系以及組合關(guān)系,即哪些條件不能組合到一起,哪些條件可以組合到一起
    4. 明確所有輸入條件之間的制約關(guān)系以及組合關(guān)系,那些輸出結(jié)果不能同時(shí)輸出,哪些輸出結(jié)果可以同時(shí)輸出
    5. 找到什么樣的輸入條件組合會(huì)產(chǎn)生哪種輸出結(jié)果
    6. 把因果圖轉(zhuǎn)換成判定表/決策表
    7. 為判定表/決策表中的每一列表示的情況設(shè)計(jì)測試用例
  • 案例
    交通一卡通自動(dòng)充值軟件系統(tǒng)需求
    image.png

    步驟1:了解需求,找出所有的輸入條件(因)
  1. 投幣50元
  2. 投幣100元
  3. 充值50元
  4. 充值100元
    輸入條件1、2互斥輸入條件3 、4互斥
    根據(jù)輸入條件得到的結(jié)論:
    1. 不能組合的輸入條件
    • 條件1和條件2不能組合
    • 條件3和條件4不能組合
    1. 可以組合的輸入條件
    • 條件1和條件3可以組合
    • 條件1和條件4可以組合
    • 條件2和條件3可以組合
    • 條件2和條件3可以組合
    • 123可以單獨(dú)出現(xiàn)

步驟2:找出所以的輸出結(jié)果(果)
a.成功充值并退卡
b.提示充值成功
c.找零
d.錯(cuò)誤提示并退卡
輸出結(jié)果a、d互斥,b、d互斥
根據(jù)輸出結(jié)果得到的結(jié)論:

  1. 不能組合的輸出
    • 輸出a和輸出d不能組合
    • 輸出b和d不能組合
  2. 能組合的輸出
    • 輸出a和b必須組合
    • 輸出a、b、c組合
    • 輸出c、d可以組合
    • 輸出d單獨(dú)存在

情況一:輸入條件1和條件3組合,輸出a和b組合


image.png

根據(jù)因果圖在制作出對(duì)應(yīng)的決策表/判定表


image.png

情況二:輸入條件1和條件4組合,輸出c、d組合
image.png

根據(jù)因果圖再制作出對(duì)應(yīng)的決策表/判定表


image.png

情況三:條件2和條件3組合,輸出a、b、c組合
image.png

根據(jù)因果圖在制作出對(duì)應(yīng)的決策表/判定表
image.png

情況四:條件2和條件4組合,輸出a和b組合
image.png

根據(jù)因果圖再制作出對(duì)應(yīng)的決策表/判定表
image.png

情況五:條件1單獨(dú)出現(xiàn),輸出c、d組合


image.png

根據(jù)因果圖再制作出對(duì)應(yīng)的決策表/判定表
image.png

情況六:條件2單獨(dú)出現(xiàn),輸出c、d組合
image.png

根據(jù)因果圖再制作出對(duì)應(yīng)的決策表/判定表
image.png

情況七:條件3單獨(dú)出現(xiàn),輸出d組合
image.png

根據(jù)因果圖再制作出對(duì)應(yīng)的決策表/判定表
image.png

情況八:條件4單獨(dú)出現(xiàn),輸出d組合
image.png

根據(jù)因果圖再制作出對(duì)應(yīng)的決策表/判定表
image.png

2.4 判定表法

  • 定義
    因果圖只是一種輔助工具,通過分析最終得到判定表,再通過判定表編寫測試用例。但有時(shí)畫因果圖非常麻煩,影響測試效率,可以直接寫判定表,進(jìn)而編寫測試用例。
  • 組成
    • 條件樁:所有條件
    • 動(dòng)作樁:所有輸出(結(jié)果)
    • 條件項(xiàng):針對(duì)條件樁的取值
    • 動(dòng)作項(xiàng):條件項(xiàng)的各種取值情況下的輸出結(jié)果
image.png
  • 判定表流程
    1. 列出所有的條件樁和動(dòng)作樁
    2. 填入條件項(xiàng)
    3. 填入動(dòng)作項(xiàng)、得到初始判定表
    4. 簡化判定表(合并相似規(guī)則(相同動(dòng)作))
  • 案例
    怎樣成為一個(gè)好學(xué)生?遵紀(jì)守法的前提下,學(xué)習(xí)成績好是一個(gè)好學(xué)生、品德高尚也是一個(gè)好學(xué)生;(只要違法亂紀(jì)就絕對(duì)不是一個(gè)好學(xué)生;成績和品德有一項(xiàng),再加遵紀(jì)守法也是好學(xué)生)
    image.png

2.5 場景設(shè)計(jì)法(流程分析法)

  • 定義
    場景法就是模擬用戶操作軟件時(shí)的場景,主要用于測試系統(tǒng)的業(yè)務(wù)流程。當(dāng)拿到一個(gè)測試任務(wù)時(shí),我們并不是先關(guān)注某個(gè)控件的邊界值、等價(jià)類是否滿足要求,而是要先關(guān)注它的主要功能和物業(yè)流程是否正確實(shí)現(xiàn),這就需要使用場景法來完成測試。
    當(dāng)業(yè)務(wù)流程測試沒有問題,也就是該軟件的主要功能沒有問題時(shí),我們在重點(diǎn)從邊界值、等價(jià)類方面對(duì)控件進(jìn)行測試。
    在冒煙測試時(shí)也主要采用場景法進(jìn)行測試
  • 重要概念
    • 基本流
      通過業(yè)務(wù)流程輸入都為正確的,能夠最后達(dá)到目標(biāo)的流程
    • 備選流
      按照通過實(shí)現(xiàn)業(yè)務(wù)流程時(shí),因錯(cuò)誤操作或異常輸入,導(dǎo)致流程存在反復(fù),但最終能夠完成期望業(yè)務(wù)流程
    • 異常流
      通過實(shí)現(xiàn)業(yè)務(wù)流程時(shí)
      通過實(shí)現(xiàn)業(yè)務(wù)流程時(shí),因錯(cuò)誤操作或異常輸入,導(dǎo)致業(yè)務(wù)沒有正確完成
  • 背景
    現(xiàn)在的軟件幾乎都是由事件觸發(fā)來控制流程的,事情觸發(fā)時(shí)的情景便形成了場景,而同一事件不同的觸發(fā)順序和處理結(jié)果形成時(shí)間流。
    將這種在軟件設(shè)計(jì)方面的思想引入到軟件測試中,生動(dòng)的描述出事件觸發(fā)時(shí)的情景,有利于測試設(shè)計(jì)者測試用例,同時(shí)測試用例也更容易的得到理解和執(zhí)行。
    在使用場景法設(shè)計(jì)測試用例時(shí),需要覆蓋系統(tǒng)用例中的主成功場景和擴(kuò)展場景,并且需要適當(dāng)補(bǔ)充各種正反的測試用例和考慮出異常場景的情形。
    當(dāng)使用場景法測試程序沒有問題時(shí),可以再使用邊界值、等價(jià)類方法對(duì)賬號(hào)、密碼進(jìn)行更改細(xì)致、完整的測試。
  • 案例
    TIM登錄,使用場景法測試 qq登錄功能
  1. 輸入正確的賬號(hào)和密碼后點(diǎn)擊“登錄”按鈕,程序能正常登錄
  2. 輸入正確的賬號(hào),錯(cuò)誤的密碼后點(diǎn)擊“登錄”按鈕,程序應(yīng)給出錯(cuò)誤提示
  3. 輸入正確的賬號(hào),不輸入密碼,點(diǎn)擊“登錄”按鈕,程序應(yīng)給出錯(cuò)誤提示
  4. 不輸入賬號(hào)和密碼,直接點(diǎn)擊“登錄”按鈕,程序給出錯(cuò)誤提示“請您輸入賬號(hào)后登錄”
  5. 不輸入賬號(hào),輸入正確的密碼,點(diǎn)擊“登錄”,程序應(yīng)給出錯(cuò)提示
  6. 輸入錯(cuò)誤的賬號(hào),正確的密碼,點(diǎn)擊“登錄”按鈕,程序應(yīng)給出錯(cuò)誤提示
image.png

2.6 正交試驗(yàn)法

  • 定義
    正交排列法能夠使用最小的測試過程集合獲得最大的測試覆蓋率。當(dāng)可能的輸入數(shù)據(jù)或者輸入數(shù)據(jù)的組合數(shù)量很大時(shí),由于不可能為每個(gè)輸入組合都創(chuàng)建測試用例,可以采用這種方法。
  • 案例
    某所大學(xué)通信系共2個(gè)班級(jí),剛考完某一門課程,想通過“性別”、“班級(jí)”和“成績”這三個(gè)查詢條件對(duì)通信系這門課程的成績分布,男女比例或班級(jí)比例進(jìn)行人員查詢:
    根據(jù)“性別”=“男,女”進(jìn)行查詢
    根據(jù)“班級(jí)”=“1班,2班”查詢
    根據(jù)“成績”=“及格,不及格”查詢
    分析上述測試需求,有3個(gè)被測元素,被測元素我們稱為因素,每個(gè)因素有兩個(gè)取值,我們稱之為水平值,所以全部測試用例個(gè)數(shù)是2 * 2 * 2 = 8
    image.png

    由于組合量太大,不可能為每一種組合都創(chuàng)建測試用例。如何采用最少的測試用例集合獲得最大的測試覆蓋率——采用正交排列法
    • 正交排列法
      • 正交試驗(yàn)設(shè)計(jì)(科普)
        是研究多因子多水平的一種設(shè)計(jì)方法,它是根據(jù)正交性從全面實(shí)驗(yàn)中挑選出部分有代表性的點(diǎn)進(jìn)行試驗(yàn),這些有代表性的點(diǎn)具備了“均勻分散,齊整可比”的特點(diǎn),正交試驗(yàn)設(shè)計(jì)是一種基于正交表的、高效率、快遞、經(jīng)濟(jì)的實(shí)驗(yàn)設(shè)計(jì)方法。
        因子:所有參與實(shí)驗(yàn)的影響實(shí)驗(yàn)結(jié)果的條件稱為因子
        水平:影響實(shí)驗(yàn)因子的取值或輸入稱為水平
      • 正交表的概念
        一種特制的表,一般的正交表為:Ln(m^k)
        n是表的行數(shù),也就是需要測試組合的次數(shù);k是表的列數(shù),表示控件的個(gè)數(shù)(因素的個(gè)數(shù),或因子個(gè)數(shù));m是每個(gè)控件包含的取值個(gè)數(shù)(各因素的水平數(shù),幾個(gè)因素的狀態(tài)數(shù))
        如L9(3^4):4個(gè)控件,每個(gè)控件三個(gè)取值,9為需要測試的組合個(gè)數(shù)。稱為4因素3水平


        image.png

        利用正交表設(shè)計(jì)測試用例,我們得到的測試用例個(gè)數(shù)是n=3*(2-1)+1=4,對(duì)于三因素兩水平的剛好有L4(2^3)的正交表可以套用,于是用正交表試驗(yàn)法得出4個(gè)測試用例如下:


        image.png

        4個(gè)測試用例與8個(gè)測試用例相比測試用例個(gè)數(shù)是減少了。因素?cái)?shù)和水平數(shù)越大越能體現(xiàn)用正交表的好處。例如:對(duì)于一個(gè)四因素且每個(gè)因素均為三水平的試驗(yàn),如果按照全面試驗(yàn)需要進(jìn)行 3 * 3 * 3 = 81 次。但是如果用正交試驗(yàn)法選擇L9(3^4)正交表,n = 4 * (3-1)+1 = 9次試驗(yàn)就可以覆蓋。從這點(diǎn)可以說明用正交實(shí)驗(yàn)法能有效地、合理地減少測試測試用例和工時(shí),節(jié)約測試成本。
        優(yōu)點(diǎn):
        • 根據(jù)正交性從全面試驗(yàn)中挑選出部分有代表性的點(diǎn)進(jìn)行試驗(yàn),這些有代表性的特點(diǎn)具備了“均勻分散,整齊可比”的特點(diǎn)。通過使用正交試驗(yàn)法減少了測試用例,合理地減少測試的工時(shí)與費(fèi)用,提高測試用例的有效性。是一種高效率、快速、經(jīng)濟(jì)的試驗(yàn)設(shè)計(jì)方法。
          缺點(diǎn):
        • 對(duì)每個(gè)狀態(tài)點(diǎn)同等對(duì)待,重點(diǎn)不突出,容易造成在用戶不常用的功能或場景中,花費(fèi)不少時(shí)間進(jìn)行測試設(shè)計(jì)與執(zhí)行,而在重要路徑的使用上反而沒有重點(diǎn)測試。
  • 正交表生成工具allpairs
    有時(shí)候會(huì)碰到因子的水平數(shù)不同的情況,如下:
    image.png

    這時(shí)候就需要借助工具來實(shí)現(xiàn)。
    鏈接:https://pan.baidu.com/share/init?surl=fFR8iH62vwOeEHlLmK9hgw
    提取碼:fm9q
  1. 制作取值表(只列出數(shù)據(jù)即可,不用編號(hào))


    image.png
  2. 復(fù)制取值表的數(shù)據(jù),放到文本文檔中保存(注意不要更改任何格式,例如文件叫test.txt)


    image.png
  3. 把文本文檔放在allpairs文件中


    image.png
  4. win + r 后輸入cmd進(jìn)入控制臺(tái)
  5. 使用控制臺(tái)代碼進(jìn)入allpairs文件夾(cd目錄名稱)
  6. 在控制臺(tái)中輸入allpairs.exe test.txt > chenggong.txt (chenggong是自己起的名稱,用來存放生成的組合用例,可以自動(dòng)生成,不必提前建好)


    image.png
  7. 最終得出測試用例


    image.png

2.7錯(cuò)誤推斷法

  • 定義
    錯(cuò)誤推測法是指利用直覺和經(jīng)驗(yàn)猜測出出錯(cuò)的可能類型,有針對(duì)性列舉出程序中所有可能的錯(cuò)誤和容易發(fā)生錯(cuò)誤的情況,它是測試經(jīng)驗(yàn)豐富的測試人員喜歡使用的一種測試用例設(shè)計(jì)方法。
  • 基本思想
    基本思想是列舉出肯能犯的錯(cuò)誤或錯(cuò)誤易發(fā)生的清單,然后根據(jù)清單編寫測試用例;這種方法很大程度上是憑經(jīng)驗(yàn)進(jìn)行的,即憑人們對(duì)過去所作測試結(jié)果的分析,對(duì)所揭示缺陷的規(guī)律性作直覺的推測來發(fā)現(xiàn)缺陷。
    采用錯(cuò)誤推測法,最重要的是要思考和分析測試對(duì)象的各個(gè)方面,多參考以前發(fā)現(xiàn)的Bug的相關(guān)數(shù)據(jù)、總結(jié)的經(jīng)驗(yàn),個(gè)人多考慮異常的情況、反面的情況。特殊的輸入,以一個(gè)攻擊者的態(tài)度對(duì)待程序,才能夠設(shè)計(jì)出比較完善的測試用例

總結(jié)

通常,在確定測試方法時(shí),應(yīng)遵循以下原則:

  • 根據(jù)程序的重要性和一旦發(fā)生故障將造成的損失來確定測試等級(jí)和測試重點(diǎn)。
  • 認(rèn)真選擇測試策略,以便能盡可能少的使用測試用例,發(fā)現(xiàn)盡可能多的程序錯(cuò)誤
    因?yàn)橐淮瓮暾能浖y試過后,如果程序中遺留的錯(cuò)誤過多并且嚴(yán)重,則表明該次測試是不足的,而測試不足則意味著讓用戶承擔(dān)隱藏錯(cuò)誤帶來的危險(xiǎn),但測試過度又會(huì)帶來資源的浪費(fèi)。因此測試需要找到一個(gè)平衡點(diǎn)。

3.1 測試方法選擇

  1. 拿到一個(gè)測試任務(wù)時(shí),先關(guān)注它的主要功能和業(yè)務(wù)流程、業(yè)務(wù)邏輯是否正確實(shí)現(xiàn),考慮使用場景法。
  2. 需要輸入數(shù)據(jù)的地點(diǎn),考慮采用等價(jià)類等類劃分法,包括輸入和輸出條件的等價(jià)劃分,將無線測試變成有限測試。
  3. 在任何情況下都必須采用邊界值分析法。這種方法設(shè)計(jì)出的測試用例發(fā)現(xiàn)程序錯(cuò)誤的能力最強(qiáng)。
  4. 如果程序的功能說明中含有輸入條件的組合情況,則一開始就應(yīng)考慮選用因果圖和判定表法。
  5. 對(duì)參數(shù)配置類的軟件,需要考慮參數(shù)之間的組合情況,考慮使用正交排列法選擇較少的組合方式(最少的測試用例獲得最大的測試覆蓋率)
  6. 對(duì)照程序邏輯,檢查已設(shè)計(jì)出的測試用例的覆蓋程度。如果沒有達(dá)到要求的覆蓋標(biāo)準(zhǔn),則應(yīng)當(dāng)再補(bǔ)充更多的測試用例
  7. 采用錯(cuò)誤推斷法再追加測試用例--依靠測試工程師的經(jīng)驗(yàn)和智慧。

3.2 測試用例力度

測試用例可以寫的很簡單,也可以寫的很復(fù)雜。

  • 簡單的測試用例
    最簡單的測試用例時(shí)測試的綱要,僅僅指出要測試的內(nèi)容。
    測試用例寫的過于簡單,則可能失去了測試用例的意義。過于簡單的測試用例設(shè)計(jì)其實(shí)并沒有進(jìn)行“設(shè)計(jì)”,只是需要把測試的功能模塊記錄下來而已,它的作用僅僅是在測試過程中作為一個(gè)簡單的測試計(jì)劃,提醒測試人員測試的主要功能包括哪些而已。
  • 復(fù)雜的測試用例
    最復(fù)雜的測試用例則會(huì)指定輸入的每項(xiàng)數(shù)據(jù),期待的結(jié)果即檢驗(yàn)方法,具體到界面元素的操作步驟,指定測試的方法和工具等。
    測試用例寫得過于詳細(xì),留給測試執(zhí)行人員的思考空間就比較少,容易限制測試人員的思維。

大多數(shù)的測試團(tuán)隊(duì)編寫的測試用例的力度介于兩者之間

3.3 測試用例本質(zhì)

測試用例的設(shè)計(jì)本質(zhì)應(yīng)該是在設(shè)計(jì)的過程中理解需求,檢查需求,并把軟件系統(tǒng)的測試方法的思想記錄下來,以便指導(dǎo)將來的測試

  • 基于需求的測試用例設(shè)計(jì):
    基于需求的用例場景來設(shè)計(jì)測試用例是最直接有效的方法,因?yàn)樗苯痈采w了需求,而需求是軟件的根本,驗(yàn)證對(duì)需求的覆蓋是軟件測試的根本目的
    要把測試用例當(dāng)成活的文檔,因?yàn)樾枨笫腔畹?,善變的。因此在設(shè)計(jì)測試用例方面應(yīng)該把敏捷方法的“及時(shí)響應(yīng)變更比遵循計(jì)劃更有價(jià)值”這一原則體現(xiàn)出來。

不要認(rèn)為測試用例設(shè)計(jì)是一個(gè)階段,測試用例的設(shè)計(jì)也需要迭代,在軟件開發(fā)的不同階段都要回來重新評(píng)審和完善測試用例。

3.4 測試用例評(píng)審

  • 同行評(píng)審
    測試用例的檢查方式有很多,同行評(píng)審是其中最敏捷的一種。
    “個(gè)體和交互比過程和工具更有價(jià)值”,這強(qiáng)調(diào)了測試用例設(shè)計(jì)者之間的思想碰撞,通過探討、協(xié)作來完成測試用例的設(shè)計(jì)。
  • 用戶評(píng)審
    “顧客的協(xié)作比合同談判更有價(jià)值”。
    如果測試是對(duì)產(chǎn)品的批判,則顧客應(yīng)該指最終用戶或顧客代表(在內(nèi)部可以是市場調(diào)查人員或相關(guān)領(lǐng)域?qū)<遥?/li>

四 企業(yè)面試題

  1. 正交表測試用例設(shè)計(jì)方法的特點(diǎn)是什么?
    參考答案
    用最少的實(shí)驗(yàn)覆蓋最多的操作,測試用例設(shè)計(jì)很少,效率高,但是很復(fù)雜;對(duì)于基本的驗(yàn)證功能,以及二次集成引起的缺陷,一般都能找出來;但是更深的缺陷,更復(fù)雜的缺陷,還是無能為力的;具體的環(huán)境下,正交表一般都很難做的。大多數(shù),只在系統(tǒng)測試的時(shí)候使用此方法。
  2. 描述測試用例設(shè)計(jì)的完整過程?
    參考答案
    需求分析+需求變更的維護(hù)工作;
    根據(jù)需求得出測試需求;
    設(shè)計(jì)測試方案,評(píng)審測試方案;
    方案評(píng)審?fù)ㄟ^后,設(shè)計(jì)測試用例,在對(duì)測試用例進(jìn)行評(píng)審
  3. 你認(rèn)為做好測試用例工作的關(guān)鍵是什么?
    參考答案
    需求和設(shè)計(jì)文檔的理解程度,對(duì)系統(tǒng)的熟悉程度
  4. 完成測試程序是可能的嗎?
    軟件測試初學(xué)者可能認(rèn)為拿到軟件后需要進(jìn)行完全測試,找到全部的軟件缺陷,使軟件“零缺陷”發(fā)布。
    實(shí)際上完全測試是不可能的。主要有以下幾個(gè)原因:
  • 完全測試比較耗時(shí),時(shí)間不允許;
  • 完全測試通常意味著較多資源投入,這在現(xiàn)實(shí)中往往實(shí)行不通的;
  • 輸入量太大,不能一一進(jìn)行測試;
  • 輸出結(jié)果太多,只能分類進(jìn)行驗(yàn)證;
  • 軟件實(shí)現(xiàn)途徑太多;
  • 軟件產(chǎn)品說明書沒有客觀標(biāo)準(zhǔn),從不同的角度看,軟件缺陷的標(biāo)準(zhǔn)不同;因此測試的程度要根據(jù)實(shí)際情況確定。
  1. 為什么要在一個(gè)團(tuán)隊(duì)中開展軟件測試工作?
    參考答案
    因?yàn)闆]有經(jīng)過測試的軟件很難在發(fā)布之前知道該軟件的質(zhì)量,就好比ISO質(zhì)量認(rèn)證一樣,測試同樣也需要質(zhì)量的保證,這個(gè)時(shí)候就需要在團(tuán)隊(duì)開展軟件測試的工作。在測試的過程發(fā)現(xiàn)軟件中存在的問題,及時(shí)讓開發(fā)人員得知并修改問題,在即將發(fā)布時(shí),從測試報(bào)告中得出軟件的質(zhì)量情況。
  2. 一個(gè)成功的測試是(B)
    A. 發(fā)現(xiàn)錯(cuò)誤 B.發(fā)現(xiàn)了至今尚未發(fā)現(xiàn)的錯(cuò)誤
    C. 沒有發(fā)現(xiàn)錯(cuò)誤 D. 證明發(fā)現(xiàn)不了錯(cuò)誤
  3. 測試過程的活動(dòng)幾乎貫穿整個(gè)開發(fā)過程,他大體分為 (D) 和系統(tǒng)測試階段。
    A. 模塊測試、集成測試、有效性測試
    B. 模塊測試、功能測試、回歸測試
    C. 單元測試、功能測試、產(chǎn)品測試計(jì)劃
    D. 單元測試、集成測試、確認(rèn)測試
  4. 編碼階段產(chǎn)生的錯(cuò)誤有(A) 檢查出來。
    A. 單元測試 B. 集成測試
    C. 有效性測試 D. 系統(tǒng)測試
  5. 軟件是包括 \underline{\text{ 數(shù)據(jù)、程序、文檔 }} 的完整集合。
  6. 瀑布模型表達(dá)了一種系統(tǒng)的、順序的軟件開發(fā)方式。以下關(guān)于瀑布模式敘述正確的是(D)
    A. 瀑布模型能夠非??焖俚拈_發(fā)大規(guī)模軟件項(xiàng)目
    B. 只有很大的開發(fā)團(tuán)隊(duì)才使用瀑布模型
    C. 瀑布模型已不再適合于現(xiàn)今的軟件開發(fā)環(huán)境
    D. 瀑布模型適用于軟件需求確定,開發(fā)過程能夠采用線性方式完成的項(xiàng)目
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容