zoukankan      html  css  js  c++  java
  • 实例分析等价类划分(一)

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

                                                            

                                         

  • 相关阅读:
    一周随笔--15.10.06
    KVC/KVO总结
    一周随笔--15.9.28
    一周随笔--15.9.21
    CocoaPods使用中的invalid byte sequence in US-ASCII错误
    自定义TabBar
    FMDB配合sqlite使用
    常用第三方库
    LLDB编译器命令
    coreData
  • 原文地址:https://www.cnblogs.com/xlwm/p/4347304.html
Copyright © 2011-2022 走看看