zoukankan      html  css  js  c++  java
  • Pair Project: Elevator Scheduler [电梯调度算法的实现和测试]

    队员:

    11061187  高小洲

    11061189  陈睿翊

    一、结对编程初体验

    1.结对编程的优点:

    (1)最明显的一点是,结对编程可以大大提高project的完成效率,合理地分配任务可以减少每个人的工作量,从而可以节省时间对project本身进行优化;

    (2)两个人在一起编程时,可以相互激发对方的思维,有利于想出更加巧妙的算法,提高项目的质量;

    (3)结对编程时两人可以相互监督,遇到困难时可以相互鼓励,及时的交流心得,这样可以确保项目的进度;

    (4)从精神层面来说,两人在一起相互合作到最终完成一个项目,这期间学到的不仅仅是编程方面的知识、经验,更重要的是团队意识、合作意识的建立,为以后走上工作岗位积攒经验。

    2.结对编程的缺点:

    (1)两个人在一起编程可能造成工作精力不能集中的情况,两人可能经常谈论与项目无关的内容,分散了注意力,导致效率比单人更为低下;

    (2)编程能力相差较大的两个人在一起合作时,会因为个人工作量的差距产生不良的气氛,团队凝聚力低下,导致项目进展效率低下;

    (3)有着不同习惯的两个人在一起编程可能会产生麻烦甚至是矛盾,两人可能会对一个问题各执己见,争吵不休,反而产生重大内耗。

    总之,是否采用结对编程的方式,需要具体问题具体分析,因为人本身就是一个复杂的工程。

    3.结对编程剪影:

    4.队员情况:

    高小洲:擅长编写代码以及算法优化,有一定的c#等语言基础,有较强的代码分析能力,在这次项目中负责scheduler部分的算法优化以及整个项目的测试,不足之处在于有时考虑算法较为简单,能够完成任务但是不够效率;

    陈睿翊:擅长论文(博客)的排版编写,能够提出较为新奇的想法,熟悉根据代码绘制相应的UML类图,在这次项目中负责博客的撰写以及项目中各类的UML图制作,不足之处在于代码编写能力及分析能力不足,难于根据需求编写相应的代码。

    二、设计方法

    1.information hiding:信息隐蔽,信息隐蔽的目的是将数据结构和处理过程的细节隐蔽在模块接口之后,在这一原则下,模块应该规定并设计成为在模块中包含的信息(算法和数据)不被不需要这些信息的其他模块访问,信息隐蔽意味着通过定义一系列独立的模块可以得到有效的模块化,独立模块相互之间只交流实现软件功能所必需的那些信息。将信息隐蔽作为模块化系统的一个设计标准,在测试和随后的软件维护过程中需要进行修改时,可提供最大的益处。由于大多数数据和过程对软件的其他部分是隐蔽的,因此,在修改过程中不小心引入的错误不太可能传播到软件的其他地方。

    2.interface design:接口设计,软件接口设计元素描述了信息如何流入和流出系统以及被定义为体系结构一部分的构件之间是如何通信的。接口设计包含三个重要的元素:(1)用户界面(UI);(2)和其他系统、设备、网络或其他信息生成者或使用者的外部接口;(3)各种设计构件之间的内部接口。这些接口设计元素能够使软件进行外部通信,还能使软件体系结构中的构件之间进行内部通信和协作,简单地说,接口是一组描述类的部分行为的操作,并提供了那些操作的访问方法。

    3.loose coupling:耦合性,通信和协作式面向对象系统中的基本要素,随着通信和协作数量的增长,系统的复杂性也随之增长了,同时随着系统复杂性的增长,软件实现、测试和维护的困难也随之增大。耦合是类之间彼此联系程度的一种定性度量,随着类相互依赖越来越多,类之间的耦合程度亦会增加,因此在构件级设计中,一个重要的目标就是尽可能保持低耦合

    4.Design by Contract:契约式设计,契约式设计的提出,主要基于软件可靠性方面的考虑。可靠性包括正确性和健壮性,正确性指软件按照需求规格执行的能力,健壮性指软件对需求规格中未声明状况的处理能力。健壮性主要与异常处理机制相关,正确性一方面包括对象元素内部运行的正确性,另一个重要方面是与其它对象元素交互时的正确性。DbC有三个关键之处:(1)Post-conditions,后置条件postcondition,表示调用一个方法一定会得到的结果;(2)Pre-conditions,前置条件precondition,预先保证后置条件必须满足前置条件;(3)类不变量class invariant,表示对象状态的断言,执行完任何操作后都都应该被满足,不变量还是对聚合体进行完整性严格定义。

    5.Code Contract:代码契约,优势在于编译前执行检查,契约的种类分为前置条件、后置条件、固定条件、断言和假设、旧式契约几种,拥有改进测试、自动测试工具、静态验证、引用文档等许多优点。所有.NET Framework语言都可以立即使用契约,不必编写特殊的分析器或编译器。 利用Visual Studio外接程序,可以指定要执行的代码契约分析的级别。 分析器可以确认契约的格式正确(执行类型检查和名称解析),并且可以使用 Microsoft 中间语言 (MSIL) 格式生成编译格式的契约。 通过在Visual Studio中创作契约,你可以利用该工具提供的标准 IntelliSense。

     三、Unit Test单元测试

    代码覆盖率结果如下:

    从运行结果可以看出,该算法不是很理想,但是要比BUS算法优化许多,目前在进一步的改进中。

    四、UML类图

    利用VS2012中的class view功能找出所有的类及其属性和方法,然后在StarUML中画出了完整的类图,最后导出图片如下:

    五、算法实现

    算法实现的主要部分是PickInTheWay()函数以及RunNewReq()函数。

    PickInTheWay()对应的情况是执行指令的过程中遇到新的指令,顺道带人;RunNewReq()对应的情况是将乘客全部送到目标楼层后响应新的乘客需求楼层。

    部分框架如下

    PickInTheWay():

    RunNewReq():

     六、总结

    通过这一次的结队编程,我们重新回顾了面向对象编程的相关知识,加深了对类图的理解和使用,掌握了一定的代码优化方法以及各种测试的途径,确实是受益匪浅,当然了,最实际的就是,VS2012用的更熟练了。

  • 相关阅读:
    JSP具体条款——response对象
    智课雅思词汇---三、aud和auto和bene是什么意思
    如何实现无刷新图片上传
    智课雅思词汇---二、词根acu和acr
    FormData是什么
    ajax如何上传文件(整理)
    js插件---评分插件Rating如何使用
    js插件---Amaze UI dialog如何使用
    js插件---layer.js使用体验是怎样
    算法答疑---06:月度开销
  • 原文地址:https://www.cnblogs.com/chenruiyi/p/3358356.html
Copyright © 2011-2022 走看看