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)   

                                                            

                                         

  • 相关阅读:
    python中的编码问题
    CVPR2018 Tutorial 之 Visual Recognition and Beyond
    hdu 1376 Octal Fractions
    hdu 1329 Hanoi Tower Troubles Again!
    hdu 1309 Loansome Car Buyer
    hdu 1333 Smith Numbers
    hdu 1288 Hat's Tea
    hdu 1284 钱币兑换问题
    hdu 1275 两车追及或相遇问题
    hdu 1270 小希的数表
  • 原文地址:https://www.cnblogs.com/xlwm/p/4347304.html
Copyright © 2011-2022 走看看