软件工程网络15结对编程作业

Posted 邹其元

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件工程网络15结对编程作业相关的知识,希望对你有一定的参考价值。

成员

201521123060 邹其元 [个人博客地址:(http://www.cnblogs.com/zq1996/)]

201521123075 江鹭涛 [个人博客地址:(http://www.cnblogs.com/tt1104/)]

[码云地址:(https://gitee.com/gg1104/pair_programming)]

[源代码地址:(https://coding.net/u/Belong033/p/java-third/git)]

题目要求:

1.改进现有代码

分析网络14部分现有程序代码(请选择其中一个)

个人博客地址1:http://www.cnblogs.com/weihui-01 ,源代码:https://coding.net/u/weh/p/software-testing/git
个人博客地址2:http://www.cnblogs.com/belong033 ,源代码:https://coding.net/u/Belong033/p/java-third/git
个人博客地址3:http://www.cnblogs.com/zenglijun ,源代码:https://coding.net/u/wjunren/p/TEST/git
个人博客地址4:http://www.cnblogs.com/shizhuangde ,源代码:https://coding.net/u/lhl1212/p/work2/git
个人博客地址5:http://www.cnblogs.com/NianQiFeng ,源代码:https://git.coding.net/qwx_hh/java-szys.git
原题目要求
http://www.cnblogs.com/happyzm/p/6472120.html
http://www.cnblogs.com/happyzm/p/6509116.html
http://www.cnblogs.com/happyzm/p/6558307.html

需求分析

实现基本的四则运算,尽量避免重复题目的出现,判断出最后结果的计算是否正确。

程序设计

代码展示

1.浏览所有代码考虑代码质量和测试覆盖率


(1)计时器:显示用户完成全部答题的所用时间。

(2).计算多个分数

public String calculate(ArrayList<String> postOrder)throws IOException {
   Stack stack = new Stack();
    //ArrayList<String> stack = postOrder;
    String res = "";
    FileWriter fm = new FileWriter("answer.txt");
    BufferedWriter bufm = new BufferedWriter(fm);
    for (int i = 0; i < postOrder.size(); i++) {            if (res.equals("")) {
            if (Character.isDigit(postOrder.get(i).charAt(0))) {
               stack.push(Integer.parseInt(postOrder.get(i)));
           } else {
               Integer back = (Integer) stack.pop();

                Integer front = (Integer) stack.pop();
                stack.push(back);

                Calculator calculator2 = new Calculator();
                switch (postOrder.get(i).charAt(0)) {
                    case \'+\':

                        res = calculator2.compute(front + "/1", "+", back + "/1");
                       //res = (front + back);
                        bufm.write(res);
                        bufm.flush();
                        bufm.newLine();

                        break;
                    case \'-\':
                        res = calculator2.compute(front + "/1", "-", back + "/1");
                        bufm.write(res);
                        bufm.flush();
                        bufm.newLine();>                            break;
                        case \'*\':
                        res = calculator2.compute(front + "/1", "*", back + "/1");
                        bufm.write(res);
                        bufm.flush();
                        bufm.newLine();
                        break;
                    case \'/\':
                        res = calculator2.compute(front + "/1", "/", back + "/1");
                        bufm.write(res);
                        bufm.flush();
                        bufm.newLine();
                        break;
                }
            }            }
        else {
           if (Character.isDigit(postOrder.get(i).charAt(0))) {
                stack.push(Integer.parseInt(postOrder.get(i)));
            } else {
                Integer back = (Integer) stack.pop();
                Calculator calculator2 = new Calculator();
                switch (postOrder.get(i).charAt(0)) {
                   case \'+\':
                       res = calculator2.compute(res, "+", back + "/1");
                       bufm.write(res);
                        bufm.flush();
                        bufm.newLine();
                        break;
                   case \'-\':
                        res = calculator2.compute(res, "-", back + "/1");
                        bufm.write(res);>                            bufm.flush();
                        bufm.newLine();
                        break;
                    case \'*\':>                            res = calculator2.compute(res, "*", back + "/1");
                        bufm.write(res);
                        bufm.flush();
                        bufm.newLine();
                        break;
                    case \'/\':
                        res = calculator2.compute(res, "/", back + "/1");
                        bufm.write(res);
                        bufm.flush();
                        bufm.newLine();
                        break;
                }
            }
       }
    }
   return res;
}

程序运行


2.功能改进与扩展

增加一个运算符,程序应该有怎样的改变?不得不扔掉全部重写么,还是可以只改部分模块?基于模块化设计的思想,考虑在现有程序中做什么样的修改,才能让程序更好地实现新的需求

增加括号操作符
减少重复题目
程序一次运行生成的题目不能重复,即任何两道题目不能通过有限次交换+和×左右的算术表达式变换为同一道题目。例如,23 + 45 = 和45 + 23 = 是重复的题目,6 × 8 = 和8 × 6 = 也是重复的题目。3+(2+1)和1+2+3这两个题目是重复的,由于+是左结合的,1+2+3等价于(1+2)+3,也就是3+(1+2),也就是3+(2+1)。但是1+2+3和3+2+1是不重复的两道题,因为1+2+3等价于(1+2)+3,而3+2+1等价于(3+2)+1,它们之间不能通过有限次交换变成同一个题目。

小结感受:结对编程真的能够带来1+1>2的效果吗?通过这次结对编程,请谈谈你的感受和体会。

1+1是可以>2的,一个人的想法是有限的,两个人,会有不同的想法,然后两个人不同的想法相互结合,可以产生1+1>2的效果。

PSP 个人开发流程 预估耗费时间 实际耗时
Planning 计划 20 18
Estimate 明确需求和其他相关因素,估计每个阶段的时间成本 10 13
Development 开发 180 240
Analysis 需求分析 50 33
Design Spec 生成设计文档 30 27
Design Review 设计复审 20 10
Coding Standard 代码规范 15 10
Design 具体设计 30 50
Coding 具体编码 60 65
Coding Reivew 代码复审 30 40
Test 测试 30 10
Reporting 报告 30 26
测试报告 20 10
计算工作量 10 10
并提出过程改进计划 10 10

以上是关于软件工程网络15结对编程作业的主要内容,如果未能解决你的问题,请参考以下文章

软件工程网络15结对编程作业

软件工程网络15结对编程作业

软件工程网络15结对编程作业(201521123062)

软件工程网络15专业结对编程

软件工程网络15个人阅读作业2 201521123038 游舒婷

结对编程作业