zoukankan      html  css  js  c++  java
  • 软件工程(2019)结对编程第二次作业

    结对编程第二次作业

    利用普普通通的游戏引擎实现普普通通的电梯调度算法

    这是我的结对伙伴张斯豪同学的排版异常诡异的博客(狗头)。

    • 单元测试

      对关键Elevator类中的WhetherAccept进行单元测试,测试代码如下:

    using Microsoft.VisualStudio.TestTools.UnitTesting;
    using ElevatorProj;
    using System;
    using System.Collections;
    using System.Collections.Generic;
    
    namespace Test2
    {
        [TestClass]
        public class UnitTest1
        {
            [TestMethod]
    
            public void Test0employeeCapacity()
            {
                int floor = 10;
                Elevator elevator = new Elevator();
    
                elevator.employeeCapacity = 0;
                elevator.type = Elevator.even;
                Console.Write(elevator.WhetherAccept(floor));
            }
    
            [TestMethod]
    
            public void Test22Floor()
            {
                int floor = 22;
                Elevator elevator = new Elevator();
                elevator.type = Elevator.even;
                Console.Write(elevator.WhetherAccept(floor));
            }
    
            [TestMethod]
    
            public void TestNgaFloor()
            {
                int floor = -1;
                Elevator elevator = new Elevator();
                elevator.type = Elevator.odd;
                Console.Write(elevator.WhetherAccept(floor));
            }
    
            [TestMethod]
    
            public void Test0Floor()
            {
                int floor = 0;
                Elevator elevator = new Elevator();
                elevator.type = Elevator.even;
                Console.Write(elevator.WhetherAccept(floor));
            }
    
            [TestMethod]
            public void Test9Floor()
            {
                int floor = 10;
                Elevator elevator = new Elevator();
    
                elevator.type = Elevator.even;
    
                /*if(!elevator.WhetherAccept(floor))
                {
                    Console.Write("true");
                }*/
                Console.Write(elevator.WhetherAccept(floor));
            }
    
            [TestMethod]
            public void Test9Floor2()
            {
                int floor = 10;
                Elevator elevator = new Elevator();
                elevator.type = Elevator.odd;
                Console.Write(elevator.WhetherAccept(floor));
            }
    
            [TestMethod]
    
            public void Test10Floor1()
            {
                int floor = 10;
                Elevator elevator = new Elevator();
                elevator.type = Elevator.even;
                Console.Write(elevator.WhetherAccept(floor));
            }
    
            [TestMethod]
    
            public void Test9Floor3()
            {
                int floor = 9;
                Elevator elevator = new Elevator();
                elevator.type = Elevator.even;
                Console.Write(elevator.WhetherAccept(floor));
            }
    
    
        }
    }
    
    

      实际结果通过对比Standard Output中的输出结果得到的结论是一致的,本测试代码实现了条件组合覆盖。例如Test10Floor1中的结果:

    • 对队友的评价

      很高兴能够与我的结对伙伴张斯豪共同完成这次结对编程第二次作业。首先要感谢张斯豪,因为我并不熟悉C#,也从来没有使用过C#,如果不是他很耐心的为我讲解单元测试方法以及VScode和VS中C#的使用,恐怕我并不能完全理解这次由C#实现的电梯调度算法(也多亏了语言的共通性)。作业的全程,我们都能互相交流自己的最新想法,每次代码的更新我都能从coding项目中第一时间了解到,为了贯彻结对编程的理念,我与我的Partner经常在一起讨论算法的生成与优化。其中为了使用户平均等待时间更小,我们也决定采用四部电梯分开但双层停靠;然而我们也很快发现了其中的问题,因为电梯的统一按钮控制原则,不人性化的一点出现了,需要上偶数层数的乘客需要自己步行楼梯上一层。如果想要修改的话,提议四个按钮分别控制每部电梯,然而并不能符合题目总体要求,所以只能作罢。而这其中,包括电梯算法的Debug:电梯响应优先级问题,包括选电梯问题等。特别值得一提的一点是,Partner加入了AI小人(虽然看起来更像是一根棍子,rua~),使得整个大楼如同一个真正的公司。经过双方的讨论,一个基本成型的电梯调度算法,哦不,应该说是公司大楼就基本成型了。

      代码方面,我的Partner完成了代码的编写工作,作为领航员的我在此对代码进行一个简单的审查(实话是,我对C#代码审查不甚了解)。首先,代码确保了没有任何警告,而且保证了所有的using都是有用的——无关代码实在是很讨厌,但是这个代码做到了没有无关代码。第二点,代码命名十分规范,在保证命名简洁的基础上,整个代码让人一读也能懂大概,特别是我这个C#乃至Unity的外行人来说,这实在是太棒了。第三点,代码保持了一致性和可重用性,不多赘述,int和int32肯定不能只写成其中一个,那很业余。第三点,代码可读性,这个在第二点命名上已经做了很多说明,在基础上,补充说明代码的注释也很好,哪个类实现什么功能不仅体现在命名而且体现在注释。最后,在其他方面,诸如代码作者版权提示等,我的Partner都做得十分到位,代码格式也十分清晰易懂。

    • 总结

      终于迎来了总结,说实话,尽管C#和C++,Java有诸多相似让我真实的上手编写单元测试也实在是一个很大的难题(好吧,我应该承认我很弱)。但是,经过这次结对编程我确确实实确确实实体会到了交流的重要性,对没错,交流。因为如果没有和Partner的交流我就不可能去读懂我没有接触过的C#和Unity,如果我不能了解项目的最新进展我也就不可能写出这篇文章(我说我是硬着头皮写)。总之,是驾驶员与领航员的交流,让我们整个团队能够在一个比较短的时间内完成电梯算法的框架,并且有足够的时间对算法进行简单的优化,也让我们有余力去完成AI的拓展。同时,通过这次作业,我也增长了见识,是的,因为接触了新知识嘛,怎么能不增长见识呢。同时在交流的过程中也意识到了我与Partner之间的差距,我应该向他学习才是。毕竟写一个项目不是一个人的任务,现代软件工程告诉我们,一个项目的完成应该靠整个团队每个人的努力,而且在团队工作的过程中基础薄弱者也会通过项目的进展来提升自己的能力。这就是这次作业给我带来的收获。

  • 相关阅读:
    UVa 11181
    UVa 10491
    UVa 1636
    UVa 1262
    UVa 10820
    UVa 1635
    UVa 12716
    [2019杭电多校第六场][hdu6635]Nonsense Time
    [2019杭电多校第五场][hdu6630]permutation 2
    [2019杭电多校第五场][hdu6629]string matching(扩展kmp)
  • 原文地址:https://www.cnblogs.com/ulyssesgao/p/10817701.html
Copyright © 2011-2022 走看看