【结对项目】6. 测试阶段(对项目第1阶段和第2阶段)

6. 测试阶段

一、单元测试

(1)QuestionCalculator类(计算算式模块的单元测试)

测试用例设计思路:路径测试法

因为计算表达式的值分为了两个函数:中缀转后缀、和对后缀表达式求值。而如果对这两个函数一块做测试的话路径测试法会十分复杂。。所以这里分成了两个部分,分别进行路径测试:

① 中缀转后缀的路径测试:

首先画出流图

【结对项目】6. 测试阶段(对项目第1阶段和第2阶段)_第1张图片

所以有7条线性独立路径:

1-2

1-3-8-1-。。。

1-3-4-9-1-。。。

1-3-4-5-10-1-。。。

1-3-4-5-6-11-1-。。。

1-3-4-5-6-7-12-7-。。。

1-3-4-5-6-7-1-。。。

对应的测试用例

1-2   : 空字符串,不符合要求,无用例

1-3-8-1-。。。: 1, 期望输出为1

1-3-4-9-1-。。。: 1 + 2, 期望输出为1 2 +

1-3-4-5-10-1-。。。 :1 + (1 + 2),期望输出为1 1 2 + +

1-3-4-5-6-11-1-。。。: 1 + (1 + 2),期望输出为1 1 2 + +

1-3-4-5-6-7-12-7-。。。  1 + 2 * 3,期望输出为 1 2 3 * +

1-3-4-5-6-7-1-。。。  1 * 2 + 3,  期望输出为 1 2 * 3 +

 

②后缀表达式计算的路径测试

流图:

【结对项目】6. 测试阶段(对项目第1阶段和第2阶段)_第2张图片

3条线性独立路径,和对应的测试用例

1-2  :无用例

1-3-4-5-1-。。。  : 1 2 + (其中的运算符要替换成所有种类的运算符)

1-3-4-6-1-。。。  : 1 2 +

 

在此基础上,还对整个模块进行了黑盒测试,部分用例如下:

Test1: 1 + (2 + 3)                        预计输出:6
Test2: 2 * (3 * 4 * (1 + 1))                预计输出:48
Test3: (13 / 20) + 8 * 2 / 24 - 2/3 + 2 ** 2    预计输出: 93/20

以及对随机生成的表达式进行求值

 

(2)Fraction类

单元测试设计思路:同上,白盒测试,路径覆盖法

测试用例:

化简函数Simplify():
      (1, 100);           预计输出:1, 100, false
      (10, 100);          预计输出:1, 10, false  
      (100, 28);           预计输出:25, 7, false 
     (100, 2);            预计输出:50, 1, true
       (0, 100);           预计输出:0, 1, true
 加法函数:        
   

 TEST_METHOD(Add)
        {
      Fraction a, b, c;
      a.Set(1, 1);  b.Set(1, 1);
            Assert::AreEqual(a.Add(b).GetNumerator(), 2);
      Assert::AreEqual(a.Add(b).GetDenominator(), 1);
      Assert::AreEqual(a.Add(b).IsInteger(), true);
      
      a.Set(1, 2);  b.Set(1, 2);
            Assert::AreEqual(a.Add(b).GetNumerator(), 1);
      Assert::AreEqual(a.Add(b).GetDenominator(), 1);
      Assert::AreEqual(a.Add(b).IsInteger(), true);
      
      a.Set(1, 2);  b.Set(1, 3);
            Assert::AreEqual(a.Add(b).GetNumerator(), 5);
      Assert::AreEqual(a.Add(b).GetDenominator(), 6);
      Assert::AreEqual(a.Add(b).IsInteger(), false);
      
      a.Set(1, 4);  b.Set(1, 6);
            Assert::AreEqual(a.Add(b).GetNumerator(), 5);
      Assert::AreEqual(a.Add(b).GetDenominator(), 12);
      Assert::AreEqual(a.Add(b).IsInteger(), false);
        }

减法
   

TEST_METHOD(Subtract)
        {
      Fraction a, b, c;
      a.Set(1, 1);  b.Set(1, 1);
            Assert::AreEqual(a.Subtract(b).GetNumerator(), 0);
      Assert::AreEqual(a.Subtract(b).GetDenominator(), 1);
      Assert::AreEqual(a.Subtract(b).IsInteger(), true);
      a.Set(5, 6);  b.Set(1, 6);
            Assert::AreEqual(a.Subtract(b).GetNumerator(), 2);
      Assert::AreEqual(a.Subtract(b).GetDenominator(), 3);
      Assert::AreEqual(a.Subtract(b).IsInteger(), false);
      a.Set(5, 6);  b.Set(0, 1);
            Assert::AreEqual(a.Subtract(b).GetNumerator(), 5);
      Assert::AreEqual(a.Subtract(b).GetDenominator(), 6);
      Assert::AreEqual(a.Subtract(b).IsInteger(), false);
        }

乘法
   

TEST_METHOD(Multiply)
        {
      Fraction a, b, c;
      a.Set(1, 1);  b.Set(1, 1);
            Assert::AreEqual(a.Multiply(b).GetNumerator(), 1);
      Assert::AreEqual(a.Multiply(b).GetDenominator(), 1);
      Assert::AreEqual(a.Multiply(b).IsInteger(), true);
      a.Set(1, 2);  b.Set(2, 3);
            Assert::AreEqual(a.Multiply(b).GetNumerator(), 1);
      Assert::AreEqual(a.Multiply(b).GetDenominator(), 3);
      Assert::AreEqual(a.Multiply(b).IsInteger(), false);
      a.Set(1, 2);  b.Set(4, 1);
            Assert::AreEqual(a.Multiply(b).GetNumerator(), 2);
      Assert::AreEqual(a.Multiply(b).GetDenominator(), 1);
      Assert::AreEqual(a.Multiply(b).IsInteger(), true);
        }

除法
   

TEST_METHOD(DividedBy)
        {
      Fraction a, b, c;
      a.Set(1, 1);  b.Set(1, 1);
            Assert::AreEqual(a.DividedBy(b).GetNumerator(), 1);
      Assert::AreEqual(a.DividedBy(b).GetDenominator(), 1);
      Assert::AreEqual(a.DividedBy(b).IsInteger(), true);
      a.Set(1, 2);  b.Set(3, 2);
            Assert::AreEqual(a.DividedBy(b).GetNumerator(), 1);
      Assert::AreEqual(a.DividedBy(b).GetDenominator(), 3);
      Assert::AreEqual(a.DividedBy(b).IsInteger(), false);
      a.Set(1, 2);  b.Set(1, 4);
            Assert::AreEqual(a.DividedBy(b).GetNumerator(), 2);
      Assert::AreEqual(a.DividedBy(b).GetDenominator(), 1);
      Assert::AreEqual(a.DividedBy(b).IsInteger(), true);
        }

乘方
   

 TEST_METHOD(Power)
        {
      Fraction a, b, c;
      a.Set(1, 1); 
            Assert::AreEqual(a.Power(3).GetNumerator(), 1);
      Assert::AreEqual(a.Power(3).GetDenominator(), 1);
      Assert::AreEqual(a.Power(3).IsInteger(), true);
      a.Set(1, 2); 
            Assert::AreEqual(a.Power(3).GetNumerator(), 1);
      Assert::AreEqual(a.Power(3).GetDenominator(), 8);
      Assert::AreEqual(a.Power(3).IsInteger(), false);
      a.Set(2, 1); 
            Assert::AreEqual(a.Power(3).GetNumerator(), 8);
      Assert::AreEqual(a.Power(3).GetDenominator(), 1);
      Assert::AreEqual(a.Power(3).IsInteger(), true);
      a.Set(2, 1); 
            Assert::AreEqual(a.Power(0).GetNumerator(), 1);
      Assert::AreEqual(a.Power(0).GetDenominator(), 1);
      Assert::AreEqual(a.Power(0).IsInteger(), true);
        }

    };

 

你可能感兴趣的:(软工结对项目)