实例分析等价类划分(一)

      这周的《软件测试技术》,我们系统地学习到了等价类划分、边界值分析、因果图法和决策表法。等价类划分法和边界值分析方法都是着重考虑输入条件,下面我先通过一个实际问题更为透彻地介绍下等价类划分,至于其定义和原理详见我的上一篇博客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)   

                                                        

                                     

 

posted on 2015-03-21 09:48  华语  阅读(10967)  评论(4编辑  收藏  举报

导航