结对作业——web四则运算

目录:

一、Coding.net项目地址

二、PSP

三、接口设计

四、接口实现

五、性能分析

六、单元测试

七、异常处理

八、模块设计

九、模块对接

十、结对

十一、思考

十二、PSP

 

网站:http://ali.hellowood.com.cn:8089/ 出题做题都能实现,如果生成题目太多,可能会有延迟

Coding仓库地址: https://git.coding.net/librarian1/Operation_Generation_Validate.git

二、十二、PSP

PSP

任务内容

计划时间(min)

完成时间(min)

Planning

计划

30

60

     Estimate

    估计这个任务需要多少时间,并规划大致工作步骤

30

60

Development

开发

60*36

60*60

    Analysis

    需求分析

60

60

    Design Spec

    生成文档

0

0

    Design Review

    设计复审

2*60

4*60

    Coding Standard

    代码规范

10

15

    Design

    具体设计

12*60

18*60

    Coding

    具体编码

16*60

30*60

    Code Review

    代码复审

4*60

6*60

    Test

    测试

15

60

Reporting

报告

5.5*60

9*60

    Test Report

    测试报告

60

0

    Size Measurement

    计算工作量

30

60

   Postmortem& ProcessImprovement Plan

    事后总结, 并提出过程改进计划

4*60

8*60

 

三、接口设计

1、Information Hiding

信息隐藏是指在设计和确定模块时,使得一个模块内包含的特定信息(过程或数据),对于不需要这些信息的其他模块来说,是不可访问的。

信息隐藏原理框图:

2、Interface Design、Loose Coupling

接口设计和低耦合是相辅相成的,接口化设计能大大降低程序的耦合度,低耦合一定离不开接口化设计。

我们将出题功能与做题功能设计成了2个类:为每一个具体的出题参数设计一个接口,在生成题目的generation类中实现这些接口,并且对这个类进行封装;实现松耦合接口可以由具体类generation和validate直接实现,而不需要改变依赖类interface,使得软件设计具有可扩展性。

四、接口实现

本次界面程序的调用关系如下图:

我们一共设计了5个类,分别为interface、Generate、Validate、Node、strOperating。

六、单元测试

 用Junit4对generation类和validate类中每一个方法进行单元测试,后来决定用简单的assert断言来编写测试,并且遵照了一部分单元测试的原则。

七、异常处理

对于题目数量,数值范围,运算符数量和题目要求输入等四个接口分别设计了异常。
异常写在了枚举类enum里面,然后在页面输入那些题目要求的时候会对每个输入框进行判断,如果有异常会走后台的方法输出异常

-    EXCEPTION_TITEL_NUMBER  
未设置题目数量或题目数量不符合规定
-    EXCEPTION_NUMBER_RANGE
未设置数值范围或数值范围不符合规定
-    EXCEPTION_SIGN_NUMBER
未设置运算符数量或运算符数量不符合规定
-    EXCEPTION_SIGN_NUMBER
题目要求未提交
 

八、模块设计

<head
        <meta charset="UTF-8">
        <title>四则运算题目</title>
        <link href="css/main.css" rel="stylesheet" />    
        <script src="js/jquery-3.2.1.min.js" type="text/javascript"></script>
        <script type="text/javascript">
        /*计时器*/    
        function two_char(n) {
            return n >= 10 ? n : "0" + n;
        }
        function time_fun() {
            var sec=0;
            setInterval(function () {
                sec++;
                var date = new Date(0, 0)
                date.setSeconds(sec);
                var h = date.getHours(), m = date.getMinutes(), s = date.getSeconds();
                document.getElementById("mytime").innerText = two_char(h) + ":" + two_char(m) + ":" + two_char(s);
            }, 1000);
        }
        /*弹窗*/
        $(function() {
            $(".button").click(function(){
                var $p=$("<p>3</p>");
                var p_txt=$p.text();
                var $h2=$("h2")
                var h2_txt=$h2.text();
                $(".mainone").remove();
                $("h1").after(p_txt)
                $("h1").after("<h3>正确题目数:</h3>")
                $("h1").after(h2_txt)
                $("h1").after("<h3>此次所用时间:</h3>")
            });
        });
         
        </script>
    </head>

十、结对

在结对的过程中,我和我的伙伴,也就是我的舍友,我们之间有很多愉快和不愉快的事情,意见不统一,项目也存在很多问题,但经过两个人的磨合,我们也算收获到很多东西,很感谢我的伙伴这段时间以来给予我的帮助和配合,感谢她帮了我很多东西,也很感谢我朋友给予我的帮助。

说一说我的小伙伴吧,她是一个南方女孩,在这么多天,包括这两年的接触中,我总结一下她的优点和缺点吧。

优点:很自律,很有时间观念,喜欢钻研一个东西,喜欢思考比较有挑战的问题,不畏惧难题,

缺点:太钻牛角尖,不懂得变通,在完成一个任务的过程中不喜欢接收别人的帮助,喜欢单打独斗,不注重团队合作。

最后说说自己的优缺点:

优点:做事果断,有主见,有领导能力,行动力强。

缺点:缺乏耐心,不够细心,比较浮躁,无法集中注意力。

十一、思考

总之很感谢这段时间的合作,我们在这次结对作业中都收获了很多东西,学会了处理问题的办法,独立思考,互相帮助。

结对编程的缺点:

1、对于有不同习惯的编程人员,可以在起工作会产生麻烦,甚至矛盾。

2、有时候,程序员们会对一个问题各执己见(代码风格可能会是引发技术人员口水战的地方),争吵不休,反而产生重大内耗。

3、两个人在一起工作可能会出现工作精力不能集中的情况。程序员可能会交谈一些与工作无关的事情,反而分散注意力,导致效率比单人更为低下。

4、结对编程可能让程序员们相互学习得更快。有些时候,学习对方的长外,可能会和程序员们在起滋生不良气氛一样快。比如,合伙应付工作,敷衍项目

5、面对新手,有经验的老手可能会觉得非常的烦躁。不合适的沟通会导到团队的不和谐。

6、新手在面对有经验的老手时会显得非常的紧张和不安,甚至出现害怕焦虑的的精神状态,从而总是出现低级错误,而老手站在他们后面不停地指责他们导致他们更加紧张,出现恶性循环。最终导致项目进展效率低下,并且团队貌合神离。

7、有经验的人更喜欢单兵作战,找个人来站在他背后看着他可能会让他感到非常的不爽,最终导致编程时受到情绪影响,反而出现反作用。 

结对编程的优点:

1、程序员互相帮助,互相教对方,可以得到能力上的互补。

2、可以让编程环境有效地贯彻Design。

3、增强代码和产品质量,并有效的减少BUG。

4、降低学习成本。一边编程,一边共享知识和经验,有效地在实践中进行学习。

5、在编程中,相互讨论,可能更快更有效地解决问题。