• 结对编程2——单元测试


    成员:201421123005 谢晓萍  201421123030 陈宇杰

     代码地址:https://coding.net/u/cococok2/p/TeamWork-2/git

    1.需求分析

    (1)通过单元测试代码,测试加法是否能正确工作;

    (2)通过单元测试代码,测试加减乘除功能。

    (3)通过单元测试代码,测试计算类对于各种参数的支持:

    a. 输入是有错误的,例如 “1 ++ 2”,

    b. 在数值范围是 -1000 .. 1000 的时候,传进去 “10000 + 32768”,

    c. 或者是 “ 248 / 0” 怎么办?

    d. 怎么告诉函数的调用者 “你错了”? 把返回的字符串定义为 “-1” 来表示?

    e. 那么如果真的计算结果是 “-1” 又怎么处理呢?

    2.设计测试框架, 模拟测试数据

    加减测试:

     

    乘除测试:

    混合运算测试(带括号):

    括号的嵌套:

    括号输入不完整:

     

    输入错误:(如输入1++2)

    0的情况:(结果定义为无穷)

     

    以下是运算模块的代码:

      1 package package1;
      2 
      3 import java.util.ArrayList;
      4 import java.util.List;
      5 public class autoCalculate {
      6     
      7     
      8     public List<String> list;
      9      public autoCalculate(String input) {
     10             char[] ins = input.toCharArray();
     11             list = new ArrayList<String>();
     12             String str = "";
     13             
     14             for (int i = 0; i < ins.length; i++) {
     15 
     16                 if (ins[i] == '-' && ins[i + 1] >= '0' && ins[i + 1] <= '9'
     17                         && (i == 0 || ins[i - 1] == '(')) {
     18                     str += ins[i];
     19                     continue;
     20                 }
     21                
     22                 if (ins[i] == '-' && ins[i + 1] == '('&&(i==0||ins[i-1]!=')')) {
     23                     list.add("0");
     24                     list.add("-");
     25                     list.add("1");
     26                     list.add("*");
     27                     continue;
     28                 }
     29                 if (!checkFuhao(ins[i])) {
     30                     str += ins[i];
     31                     if (i == ins.length - 1) {
     32                         list.add(str);
     33                     }
     34                 } else {
     35                     if (!"".equals(str)) {
     36                         list.add(str);
     37                         str = "";
     38                     }
     39                     list.add(ins[i] + "");
     40                 }
     41                 
     42                 if (i>0&&ins[i]=='('&&ins[i-1]>='0'&&ins[i-1]<='9') {
     43                     list.add(list.size()-1,"*");
     44                 }
     45             }
     46 
     47         }
     48     
     49     String yunsuan(List<String> list) {
     50         try {
     51             int zuo = haveZuoKuoHao(list);
     52             if (zuo != -1) {
     53                 int you = lastYouKuohao(list, zuo);
     54                 List<String> l = removeKuohao(list, zuo, you);
     55                 addKuohao(list, yunsuan(l), zuo);
     56                 yunsuan(list);
     57             }
     58             int chengchu = haveChengChu(list);
     59             if (chengchu != -1) {
     60                 chengchuYunsuan(list, chengchu);
     61             } else {
     62                 jiajianYunsuan(list);
     63             }
     64             if (list.size() == 1) {
     65                 return list.get(0);
     66             }
     67         } catch (Exception e) {
     68             System.out.println("error");
     69             System.exit(0);
     70         }
     71         return yunsuan(list);
     72     }
     73     
     74     public void jiajianYunsuan(List<String> list) {
     75         for (int i = 0; i < list.size(); i++) {
     76             if (list.get(i).equals("+")) {
     77                 double last = Double.parseDouble(list.remove(i + 1));
     78                 list.remove(i);
     79                 double first = Double.parseDouble(list.get(i - 1));
     80                 list.set(i - 1, last + first + "");
     81                 i--;
     82             }
     83             if (list.get(i).equals("-")) {
     84                 double last = Double.parseDouble(list.remove(i + 1));
     85                 list.remove(i);
     86                 double first = Double.parseDouble(list.get(i - 1));
     87                 list.set(i - 1, first - last + "");
     88                 i--;
     89             }
     90         }
     91 
     92     }
     93     
     94     public void chengchuYunsuan(List<String> list, int chengchu) {
     95         double last = Double.parseDouble(list.remove(chengchu + 1));
     96         String fuhao = list.remove(chengchu);
     97         double first = Double.parseDouble(list.get(chengchu - 1));
     98         if (fuhao.equals("*")) {
     99             list.set(chengchu - 1, first * last + "");
    100         }
    101         if (fuhao.equals("/")) {
    102             list.set(chengchu - 1, first / last + "");
    103         }
    104 
    105     }
    106     public int haveChengChu(List<String> list) {
    107         for (int i = 0; i < list.size(); i++) {
    108             if (list.get(i).equals("*") || list.get(i).equals("/")) {
    109                 return i;
    110             }
    111         }
    112         return -1;
    113     }
    114     
    115     public List<String> removeKuohao(List<String> list, int zuo, int you) {
    116         List<String> l = new ArrayList<String>();
    117         list.remove(you);
    118         list.remove(zuo);
    119         for (int i = zuo; i <= you - 2; i++) {
    120             l.add(list.remove(i));
    121             i--;
    122             you--;
    123         }
    124         return l;
    125     }
    126     
    127     public int haveZuoKuoHao(List<String> list) {
    128         for (int i = 0; i < list.size(); i++) {
    129             if (list.get(i).equals("(")) {
    130                 return i;
    131             }
    132         }
    133         return -1;
    134     }
    135     public int lastYouKuohao(List<String> list, int zuo) {
    136         int zuoIndex = 1;
    137         int youIndex = 0;
    138         for (int i = zuo + 1; i < list.size(); i++) {
    139             if (list.get(i).equals("(")) {
    140                 zuoIndex++;
    141             }
    142             if (list.get(i).equals(")")) {
    143                 youIndex++;
    144             }
    145             if (zuoIndex == youIndex) {
    146                 return i;
    147             }
    148         }
    149         return -1;
    150     }
    151     public boolean checkFuhao(char a) {
    152         if (a == '+' || a == '-' || a == '*' || a == '/' || a == '('
    153                 || a == ')') {
    154             return true;
    155         }
    156         return false;
    157     }
    158 
    159     public void addKuohao(List<String> list, String yunsuan, int zuo) {
    160         list.add(zuo, yunsuan);
    161 
    162     }
    163     
    164 }

    代码覆盖率:

     

    结队照片:

    psp

    PSP2.1

    Personal Software Process Stages

    Estimated timemin

    actual timemin

    Planning

    计划

    11

    6

    · Estimate

    估计这个任务需要多少时间

    120

    125

    Development

    开发

    70

    90

    · Analysis

    需求分析 (包括学习新技术)

    20

    30

    · Design Spec

    生成设计文档

    4

    5

    · Design Review

    设计复审

    10

    5

    · Coding Standard

    代码规范

    4

    5

    · Design

    具体设计

    20

    25

    · Coding

    具体编码

    40

    50

    · Code Review

    代码复审

    10

    15

    · Test

    测试(自我测试,修改代码,提交修改)

    10

    15

    Reporting

    报告

    10

    12

    ·

    测试报告

    5

    5

    ·

    计算工作量

    3

    5

    ·

    并提出过程改进计划

    4

    4

     小结:

    1.谢晓萍同学很耐心,遇到不会的问题会愿意花时间去自己百度并学习(例如,如何在eclipse上安装使用eclemma来测试代码覆盖率)。这点是我所欠缺的,两人结队编程起到了1+1>2的效果。

    2.之前的java规范意识太弱,导致这次花了一些时间在重新模块化上,拖慢了整体进度。不过这也增加了我们的契合度,让我们合作更加顺利。

  • 相关阅读:
    C#中|(位或)和||(逻辑或)
    VS快捷键(转)
    C# 3.0 新特性 学习(二):匿名类型、扩展方法
    Highcharts 如何添加基准线
    怎样用Diskpart进行分区
    命名空间别名限定符 (::)
    NDK下 将Platinum SDK 编译成so库 (android upnp)
    在native线程利用JNI 反射自定义类
    GithubClient(ANDROID)开源之旅(一) 初探GitHub
    基于Platinum库的DMR实现(android)
  • 原文地址:https://www.cnblogs.com/cococok2/p/6640318.html
Copyright © 2020-2023  润新知