實例分析等價類划分(一)


      這周的《軟件測試技術》,我們系統地學習到了等價類划分、邊界值分析、因果圖法和決策表法。等價類划分法和邊界值分析方法都是着重考慮輸入條件,下面我先通過一個實際問題更為透徹地介紹下等價類划分,至於其定義和原理詳見我的上一篇博客http://www.cnblogs.com/xlwm/p/4343612.html

1.問題描述                                                        

EditBox:
允許1到6個英文字符或數字,按OK結束

(通過輸入字符串,返回信息)

2.等價類划分                                                    

  有效等價類 編號 無效等價類 編號
長度 1-6 1 0,6以上 3
字符 a-z,A-Z,0-9 2 英文/數字以外字符,控制字符,標點符號 4

3.測試用例                                                       

針對等價類的划分,我們可以選取以下作為測試用例:

編號 輸入 覆蓋等價類 預期輸出
Test1 1  1,2 It's OK.
Test2 a  1,2 It's OK.
Test3 Z  1,2 It's OK.
Test4 123456  1,2 It's OK.
Test5 1a9T0z  1,2 It's OK.
Test6 123  1,2 It's OK.
Test7    3
Please input reasonable string.
Test8 1234568  3
Please input reasonable string.
Test9 2;  4
Please input reasonable string.
Test10 \n¥&  4
Please input reasonable string.
Test11 ;@keoffad  3,4
Please input reasonable string.
Test12 ^afafaf3v  3,4
Please input reasonable string.

 4.代碼實現及結果樣例:                                   

      我們都知道正則表達式是一種用來匹配字符串的強有力的武器。它的設計思想是用一種描述性的語言來給字符串定義一個規則,凡是符合規則的字符串,我們就認為它“匹配”了,否則,該字符串就是不合法的。

所以我們判斷一個字符串是否是合法的方法是:

  1. 創建一個匹配該字符串的正則表達式;

  2. 用該正則表達式去匹配用戶的輸入來判斷是否合法。

因為正則表達式也是用字符串表示的,所以,我們要首先了解如何用字符來描述字符。

      這幾天我一直在研究python,發現用python是種清晰划一 、功能強大、用途廣泛的語言。而python提供re模塊,則包含所有正則表達式的功能,其中match()方法判斷是否匹配,如果匹配成功,返回一個Match對象,否則返回None。常見的判斷方法就是:

1 test = '用戶輸入的字符串'
2 if re.match(r'正則表達式', test):
3     print 'ok'
4 else:
5     print 'failed'

      而在正則表達式中,如果直接給出字符,就是精確匹配。用\d可以匹配一個數字,\w可以匹配一個字母或數字

      要做更精確地匹配,可以用[]表示范圍,比如:

  • [0-9a-zA-Z\_]可以匹配一個數字、字母或者下划線;

  • [0-9a-zA-Z\_]+可以匹配至少由一個數字、字母或者下划線組成的字符串,比如'a100''0_Z''Py3000'等等;

  • [a-zA-Z\_][0-9a-zA-Z\_]*可以匹配由字母或下划線開頭,后接任意個由一個數字、字母或者下划線組成的字符串,也就是Python合法的變量;

  • [a-zA-Z\_][0-9a-zA-Z\_]{0, 19}更精確地限制了變量的長度是1-20個字符(前面1個字符+后面最多19個字符)。

    另外A|B可以匹配A或B,所以[P|p]ython可以匹配'Python'或者'python'^表示行的開頭,^\d表示必須以數字開頭。$表示行的結束,\d$表示必須以數字結束。

      綜上所述,通過這些准備知識,我們可以得知問題所對應的正則表達式便是'^\w{1,6}$',看起來是不是立馬高大上,十分簡單呢?

最終代碼實現如下:

 1 __author__ = 'xinlan'
 2 # -*- coding: utf-8 -*
 3 
 4 from Tkinter import *
 5 import tkMessageBox
 6 import re
 7 
 8 def judge(str):
 9     if re.match(r'^\w{1,6}$', str):
10         return True
11     else:
12         return False
13 
14 class Application(Frame):
15     def __init__(self, master=None):
16         Frame.__init__(self, master)
17         self.pack()
18         self.createWidgets()
19 
20     def createWidgets(self):
21         self.nameInput = Entry(self)
22         self.nameInput.pack()
23         self.alertButton = Button(self, text='OK', command=self.ok)
24         self.alertButton.pack()
25 
26     def ok(self):
27         name = self.nameInput.get()
28         #print(judge(name))
29         if(judge(name)):
30             tkMessageBox.showinfo('Message', 'It\'s OK')
31         else:
32              tkMessageBox.showinfo('Message','Please input reasonable string')
33 
34 app = Application()
35 # 設置窗口標題:
36 app.master.title('Test')
37 # 主消息循環:
38 app.mainloop()

這是部分測試用例的結果圖:

(點擊OK出現結果,點擊OK返回主界面)

(1)

                        

(2)

                                           

(3)   

                                                        

                                     

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM