结对作业2.0之电梯控制程序的设计和实现

  • 设计要求
    • 现有一新建办公大厦,共有21层,共有四部电梯,所有电梯基本参数如下表所示,其使用规定如下:
      • 楼层号为0~20,其中0号为地下一层
      • 有楼层限制的电梯不在相应楼层停靠,如单双层
      • 所有电梯采用统一按钮控制
      • 请根据上述要求设计并实现一个电梯控制程序,如果有图形显示就更好了。
      • 电梯编号可服务楼层最大乘客数量最大载重量
        1全部楼层10800 kg
        2单层10800 kg
        3双层10800 kg
        4全部楼层20200 kg
  • Java代码审查表
    代码审查表参考了这篇博客
    我的结对作业同伴是4班张洁,张洁担任“驾驶员”的角色,我担任“领航员”的角色。
    以下是代码审查表的内容,在Markdown编辑器中使用HTML方式录入。
    • 重要性激活级别检查项
      总计
      命名
      重要Y20命名规则是否与所采用的规范保持一致?
      Y20是否遵循了最小长度最多信息原则?
      重要Y50has/can/is前缀的函数是否返回布尔型?
      注释
      重要Y10注释是否较清晰且必要?
      重要Y10复杂的分支流程是否已经被注释?
      N10距离较远的}是否已经被注释?
      Y10非通用变量是否全部被注释?
      重要Y50函数是否已经有文档注释?(功能、输入、返回及其他可选)
      Y10特殊用法是否被注释?
      声明、空白、缩进
      Y20每行是否只声明了一个变量?(特别是那些可能出错的类型)
      重要Y40变量是否已经在定义的同时初始化?
      重要Y40类属性是否都执行了初始化?
      Y20代码段落是否被合适地以空行分隔?
      Y20是否合理地使用了空格使程序更清晰?
      Y20代码行长度是否在要求之内?
      Y20折行是否恰当?
      语句/功能分布/规模
      Y20包含复合语句的{}是否成对出现并符合规范?
      Y20是否给单个的循环、条件语句也加了{}?
      Y20if/if-else/if-else if-else/do-while/switch-case语句的格式是否符合规范?
      Y40单个变量是否只做单个用途?
      重要Y20单行是否只有单个功能?(不要使用;进行多行合并)
      重要Y40单个函数是否执行了单个功能并与其命名相符?
      Y20操作符++和— —操作符的应用是否复合规范?
      规模
      重要未规定规定行数20单个函数不超过规定行数?
      重要Y100缩进层数是否不超过规定?
      重要Y100是否已经消除了所有警告?
      重要Y40常数变量是否声明为final?
      重要N80对象使用前是否进行了检查?
      重要N80局部对象变量使用后是否被复位为NULL?
      重要Y70对数组的访问是否是安全的?(合法的index取值为[0, MAX_SIZE-1])。
      重要Y20是否确认没有同名变量局部重复定义问题?
      Y20程序中是否只使用了简单的表达式?
      重要Y20是否已经用()使操作符优先级明确化?
      重要Y20所有判断是否都使用了(常量==变量)的形式?
      Y80是否消除了流程悬挂?
      重要Y80是否每个if-else if-else语句都有最后一个else以确保处理了全集?
      重要Y80是否每个switch-case语句都有最后一个default以确保处理了全集?
      Y80for循环是否都使用了包含下限不包含上限的形式?(k=0; k
      重要Y40XML标记书写是否完整,字符串的拼写是否正确?
      Y40对于流操作代码的异常捕获是否有finally操作以关闭流对象?
      Y20退出代码段时是否对临时对象做了释放处理?
      重要Y40对浮点数值的相等判断是否是恰当的?(严禁使用==直接判断)
      可靠性(函数)
      重要Y60入口对象是否都被进行了判断不为空?
      重要Y60入口数据的合法范围是否都被进行了判断?(尤其是数组)
      重要Y20是否对有异常抛出的方法都执行了try...catch保护?
      重要Y80是否函数的所有分支都有返回值?
      重要Y50int的返回值是否合理?(负值为失败,非负值成功)
      20对于反复进行了int返回值判断是否定义了函数来处理?
      Y60关键代码是否做了捕获异常处理?
      重要Y60是否确保函数返回CORBA对象的任何一个属性都不能为null?
      重要Y60是否对方法返回值对象做了null检查,该返回值定义时是否被初始化?
      重要Y60是否对同步对象的遍历访问做了代码同步?
      重要Y80是否确认在对Map对象使用迭代遍历过程中没有做增减元素操作?
      重要Y60线程处理函数循环内部是否有异常捕获处理,防止线程抛出异常而退出?
      Y20原子操作代码异常中断,使用的相关外部变量是否恢复先前状态?
      重要Y100函数对错误的处理是恰当的?
      可维护性
      重要Y100实现代码中是否消除了直接常量?(用于计数起点的简单常数例外)
      Y20是否消除了导致结构模糊的连续赋值?(如a= (b=d+c ))
      Y20是否每个return前都要有日志记录?
      Y20是否有冗余判断语句?(如:if (b) return true; else return false;)
      Y20是否把方法中的重复代码抽象成私有函数?
  • 单元自动测试
    由于本程序的特殊性,无法编写JUnit自动单元测试,因此在这里贴上测试样例运行截图。
    - 图一首先是运行初始界面
    925370-20180415115419849-1219980227.png
    四部电梯的总控视图已经在图中给出,此时四部电梯已经预设定好可以服务的楼层信息,用户需要输入的是想要去的楼层、载客数以及载重量,输入数据之后点击“完成输入”按钮录入信息。
    - 图二是对服务楼层=10,最大载客数=100,最大载重量=10的数据进行测试
    925370-20180415120053851-1344044332.png
    由题意可知,我们的四部电梯都不可能承载最大载客数为100,因此没有电梯可以运行,此时下方的状态栏会显示“无法乘坐该电梯!”的提示字样。
    - 图三服务楼层=10,最大载客数=100,最大载重量=1000的数据进行测试
    925370-20180415120248968-1852714455.png
    同理图二,我们的四部电梯也没有一部可以承重最大载重量=1000的人/物品,所以状态栏同样会显示“无法乘坐该电梯!”的提示字样。
    - 图四中,我们测试服务楼层=100,最大载客数=100,最大载重量=1000的数据
    925370-20180415120659831-1779809986.png
    同理图二图三,我们的楼层最高也只有21层,所以无法实现去100层的要求,因此电梯同样无法运行,状态栏显示“无法乘坐该电梯!”的提示字样。
    - 图五中,我们测试服务楼层=10,最大载客数=10,最大载重量=10的测试数据
    925370-20180415120857015-1299448099.png
    这次数据可以实现了,根据题目要求的表格,我们可以确定能够运行的电梯有编号1,3,4的电梯,根据就近原则,我们的程序实现了1号电梯承载10位客人载重10去10层的要求,状态栏显示“电梯已到达该楼层!”的提示语句。
    - 图六中,我们在图五的基础上更改测试数据:服务楼层=3,最大载客数=10,最大载重量=10
    925370-20180415121223254-1259773777.png
    根据题目要求的表格,我们可以确定能够运行的电梯有编号1,2,4的电梯,在图五的基础上,此时电梯1号位于10层,我们要求的服务楼层是3层,1号与服务楼层的差距有7层,而2号电梯距离服务楼层的差距有3层,因此根据就近原则,我们选择让2号电梯运行,实现承载10位客人,载重10去3层的要求,状态栏显示“电梯已到达该楼层!”的提示语句。
    - 图七中,我们在图六的基础上更改测试数据:服务楼层=8,最大载客数=10,最大载重量=10
    925370-20180415121818887-1311691765.png
    根据题目要求的表格,我们可以确定能够运行的电梯有编号1,3,4的电梯,在图六的基础上,此时电梯1号位于10层,我们要求的服务楼层是8层,1号与服务楼层的差距有2层,而3号电梯距离服务楼层的差距有8层,因此根据就近原则,我们选择让1号电梯运行,实现承载10位客人,载重10去8层的要求,状态栏显示“电梯已到达该楼层!”的提示语句。

  • 小结
    在老师的建议下,第一次实践了结对编程的这种编程形式,上次作业虽说也是结对编程,但是基本是自己一个人进行的,只是互评了队友的代码,并没有像这次这样两个人进行探讨和研究,最后对要求做出解答的过程。在这个过程中,我受益良多。
    首先,张洁同学编写代码的时候我也在看,偶尔可以发现一些小错误,比如格式错误等,毕竟java这门语言不比c语言熟悉,C语言毕竟已经接触了三年,只能找到一些明显的小错误。张洁同学的代码结构严谨,思路清晰,注释明确,没有冗余定义和没用的语句,跟他搭档我可以学到很多。
    经历了大约一周时间的结对编程,我感觉这种编程形式对代码的改良和代码编写效率有很大的提升。在编程的过程中,我们两个可以互相学习,以前可能一个人想不出的解决方案,现在两个人一起想说不定问题就会迎刃而解,大大提高了编写代码的效率。在本次作业进行测试的过程中,张洁同学也对我进行了指导,我因此成功的完成了对代码的测试,他也会在编写过程中听取我的意见,不会只坚持自己的想法。
    总体来说这次结对编程是一次特别愉快的经历,我和张洁同学的时间安排上也比较一致,分工也非常明确,在编写过程中虽然会有一些意见不统一,但是还是愉快的解决了,最后在两个人的合作之下题目顺利地完成了。
    925370-20180417145221183-925496021.png

转载于:https://www.cnblogs.com/lzb1234/p/8846549.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值