oo第四次暨最后一次博客作业

一、测试与正确性论证比较

  第十三次作业的JUnit测试与第十四次作业的正确性论证都是检测代码是否能严格地实现最初构建工程时的要求。

  第十三次的JUnit测试能够让测试者在检测方法功能的时候跳出写代码时的思路,能跳出整个工程背景下思考这个函数的正确性。在编写每个方法的测试方法是时候,能考虑到所有情况的覆盖:虽然在实际跑的过程中某些情况在正常情况下不会发生,但也正因为如此才会产生bug。所以测试能帮助debug。这种方法的好处在于能清晰直接地支持问题的所在,缺点在于某些情况在程序运行中永远不会出现,但在测试的时候还是要考虑到。

  第十四次作业的正确性论证让编程人员在工程完成时,以工程为整体的角度针对程序执行过程中可能出现的所有情况一一进行讨论,一个方法一个方法地证明工程时可靠、正确的。个人感觉这种方法更适用于“自检”:即程序员在工程编程结束后写正确性论证来确定是否有疏漏或者错误,但其对于别人来说阅读很费劲,所以更适合自己检测时候出现问题。有点在于逻辑严谨,缺点在于太长,而且不适用于转交他人做说明书。

  两者各有优缺点,所以最保险的还是都做一份,而且一个是从细微处检查,积少成多;一个是以整体的角度看待问题,自顶向下。

二、OCL语言

  感觉和JSF很相似,但比JSF的规范更详细。

  OCL作为形式化语言,基本语言要素包括:操作类型 、操作、表达式、语句。它和JSF一样都有前置条件等,但OCL的要求更多,约束更多。OCL给我的感觉介于JSF描述类语言与编程语言之间,有点像伪代码,感觉用了更多的自然语言。

  感觉JSF是OCL的简化版。

三、图

 类图

顺序图

状态图

四、学期总结

 1、单元知识点

  第一单元将Java怎么写,即将最基础的Java语言;第二单元讲的是Java的多线程编程,是Java的特色之一;第三单元讲的是Java的设计,抽象与层次性;第四单元讲的是测试,包括通过编写测试代码与进行正确性论证。

  第一周解决从c语言到Java的转换,第二周进一步深入,介绍Java的特色也是最重要的一部分,第三周讲设计相关内容,第四周用测试结尾。除了第三周的内容不得不放在Java的学习之后,整个课程的流程感觉像是构建工程的过程。

  这种授课方式可以保证不会有哪一周会由于客观原因导致作业无法进行。但这么做有个坏处,那就是第三单元的内容不值得独占一个单元,而且配套的作业也不合适。将层次性的时候,最好是从头开个系列工程,而不是在以前作业基础上添加功能。这样做能更清晰理解层次化设计是什么东西,有什么意义,就像我们后来重构电梯调度一样,重构的时候感觉逻辑清晰很多,写的时候层次感也增强了不少,不再像刚接触Java时那样一个类寥寥几个方法,一个方法好几百行。其次的JSF这个东西在oo作业里的意义不大,毕竟这个东西感觉不是给编程人员看的,或者说对于作业中这样的小工程,JSF对于编程人员没必要,完全就是负担。JSF更像是多个人各自负责工程的一部分的时候在交流时用的“接口”,它的意义在作业里根本没体现出来。

2、进步

  经过一个学期的“洗礼”,进步肯定是有的。最突出的是第十三次重构代码的时候,因为这两次的代码就是在学期初与学期末在设计与编写程序上的直观对比。

  在面对同一个问题的时候,两次作业的表现迥然不同。感觉经过了一个学期,设计也更加合理了(至少有宏观设计了)。

  测试上,至少不会仅仅知道通过控制台输出来debug。(JUnit)

  在结果上,显而易见:第十三次的结果因编程问题导致的bug较第三次的明显减少了。

3、工程化开发

  工程化开发在我的理解中就是将开发的过程按照工程化的思路分成流水线的形式,每个人各司其职,完成一个部分后再将工作转交下一个部分,就像工厂的流水线与计组的流水线一样。这样做的好处是各司其职,每个人在各自的领域能做的很好很快,而且出了问题能快速地定位到问题出在哪里,而且就像真的流水线一样,在有多个编程组的时候,这种流水线能保证每个组都有工作,综合的开发效率高;缺点就是在规模较小或者像oo课这样根本就是“小作坊”的时候,工程化开发仅仅只剩它的教育意义了。

4、期望与建议

  或许OO课可以整个大作业,几个人一组,进行工程化开发,比如要求有专人负责设计(构建框架、写JSF,花UML)和测试,有人负责写代码(可以多个人,每个人负责其中的一部分)。这样可以让学生更加直接地体会到设计构架、JSF、测试等让我们这一届好多同学吐槽“没用”的内容的用处。

猜你喜欢

转载自www.cnblogs.com/liaowang99/p/9224315.html