zoukankan      html  css  js  c++  java
  • 软件测试技术(四)——闰年判断器+ int.Parse错误如何解决

    目标程序

    本次所测试的目标程序是一个闰年判断器,我们知道,一般情况下年份被4整除就可以了,但是如果遇到百年的时候还需要被400整除,于是有了如下的逻辑判断:

     

    测试方法介绍—Syntax-Based Testing 

    BFF范式——巴科斯范式,是一种用于表示上下文无关文法的语言,上下文无关文法描述了一类形式语言。它是由约翰·巴科斯(John Backus)和彼得·诺尔(Peter Naur)首先引入的用来描述计算机语言语法的符号集。(来源于维基百科)

    它有些类似于我们学过的正则文法,不过正则文法对应于乔姆斯基层级的3型文法,也叫正规文法,对应于有限状态自动机。而BFF范式是2型文法,也叫上下文无关文法。我们知道,0-3型文法每下一层多一个限制条件,更加简单。我也搜索一下资料,BFF范式更多的应用于研究,正则文法则是各种语言都做了库函数,可以方便地调用进行文法的编写,字符串的匹配。

    有了文法之后,我们就可以进行输入字符串的判断了。正如书中所说的“One of the interesting things that grammars do is describe what an input is not. ”作者提出了3种覆盖标准:MC、MOC、MPC

      (1)Mutation Coverage (MC): For each mutant m ∈ M, T R contains exactly one requirement, to kill m. 

      (2)Mutation Operator Coverage (MOC): For each mutation operator, TR contains exactly one requirement, to create a mutated string m that is derived using the mutation operator. 

      (3)Mutation Production Coverage (MPC): For each mutation operator, and each production that the operator can be applied to, T R contains the requirement to create a mutated string from that production. 

      P.S 这里mutant operator的意思是一种可以应用于本语法能够产生的的字符串来进行一定变化的规则。mutant是应用mutant operator产生的字符串。kill的意思原文是given a mutant m M for a derivation D and a test t, t is said to kill m if and only if the output of t on D is different from the output of t on m. 我的理解是对于test t和mutant m,两者产生的输出不同那么这一测试用例t就kill了原来的mutant m。

    在本程序中,如果不预先进行处理,直接假定输入合法,那么在使用int.Parse的时候就很容易发生错误,比如,输入ab400,就会出现: 

    于是,我使用了正则表达式来进行输入的判断,代码如下:

    功能是在输入不合法时进行一定的纠正。来确保int.Parse()不会出错。比如在输入abc的时候,会出现: 

     

    那么形如3、2015、300都是合法的输入,形如0、abc是非法的输入,稍微应用发散式的思维以及MPC规则想出一些invalid mutation形成的测试用例如下。

    测试用例

    编号

    输入

    预期输出

    实际输出

    0

    4

    4年是闰年

    4年是闰年

    1

    -1

    公元前1年是闰年

    公元前1年是闰年

    2

    5

    5年不是闰年

    5年不是闰年

    3

    400

    400年不是闰年

    400年不是闰年

    4

    ab400

    请输入合法的年份,如-1或2015

    请输入合法的年份,如-1或2015

    5

    #%$

    请输入合法的年份,如-1或2015

    请输入合法的年份,如-1或2015

    6

    0

    请输入合法的年份,如-1或2015

    请输入合法的年份,如-1或2015

  • 相关阅读:
    驰骋工作流引擎-系统变量的引用
    驰骋工作流引擎-表单样本展示
    驰骋工作流引擎CCFLOW下载代码
    初识CSS
    初识HTML标签
    初识JDBC
    通过锁对象解决哲学家就餐问题
    MySQL基本用法
    LRU算法实现,HashMap与LinkedHashMap源码的部分总结
    Java简易实现记事本的打开与保存
  • 原文地址:https://www.cnblogs.com/ocDx01jin/p/4397178.html
Copyright © 2011-2022 走看看