oo第四次博客

一.测试与正确性论证


   测试是用通过构造数据, 让程序在某种特定情况下运行, 观察程序的运行结果和预期结果比较, 来判断在这种情况下程序的正确性。 我们每次作业OO的互测, 以及第13次作业中的JUnit测试, 都是测试的例子。 测试像是把程序, 看成一个黑盒, 不关注其内部具体的实现。 测试往往需要大量的数据, 而且需要对输入划分成各种情况, 就像每次作业的错误分支树一样, 通过错误分支树构造测试数据, 能够保证测试的全面性, 更好的覆盖每一种情况, 同时也能避免一味地去构造隶属于同一情况的数据。 通过测试不通过的数据能够方便找到程序的bug, 但及时通过了所有的测试, 也不能一定说程序是正确的。

   正确性论证是深入程序的每个模块, 根据代码的规格, 逐一论证每一部分的实现是满足需求的, 从而得到整个程序的实现是正确的。 第14次作业写的正确性文档就是干的这么一件事。 正确性论证是从理论上证明这个程序是正确的, 通过数理逻辑的推导, 往往需要大量的文字描述, 尤其如果程序的规模越大, 其工作量也成倍增加。 但是, 如果程序能通过正确性论证, 那么一定能够说明程序是正确的。

  以上是对于某位同学所写的引用,接下来是我的一些个人观点:

  我觉得测试相对于论证来说,严谨性有一点缺乏,因为测试是根据已经写出来的代码来进行相关的测试,只能保证写出来的是对的,但是对于一些代码本身就没有覆盖到的点,是很难找出来的,也就是说,只能基于已有的代码来知道写的是不是错的,但是对于另外一些没有get到的点,它是无法去做一个评价的;但是论证来说,是一个非常系统的论证代码正确性的过程,是通过大量的自然语言描述以及相关逻辑,来论证代码实现以及算法方面的正确性,类似于高中时候的证明题,通过证明来切实的说明给大家这个命题对不对,通过这样的论证,就能够保证代码的正确性。

  但是两者相比较,测试是更加简单一点的,虽然对于一些边缘的情况,需要覆盖起来很难寻找相应的测试代码,但是只要根据构思代码的逻辑去寻找,总是能找到的,而且像第13次作业那样,构思一组能够完美覆盖的代码还是比较容易的;但是相比于测试来说,论证就显得有些繁琐了,因为论证需要丝丝入扣的去寻找代码之间的内在联系,之间的逻辑不能断层,比如我写的那个调度类的算法大概是300多行,其实简化之后能够剩余100多行,但是因为以前的代码是我经过长时间的构思才写出来的,所以我不想去简短它,这就导致了我写起来类的正确性论证的时候比较费力了。

二.OCL语言与JSF

   对象约束语言(Object Constraint Language), 简称OCL, 是一种指示用户建模系统中的限制方式。 他是UML可选的附加内容, 可以用来更好地定义对象的行为, 并为任何类元指定约束。
  1. 在OCL中, 对象代表了系统的组件, 他定义了完善的项目, 约束代表限制, 而语言并非指一种正式的计算机语言。

  2.OCL是一种形式语言, 可以应用于任何实现方式的非正规语言。 对象约束语言对UML中的图形或其他组件都没有控制权, 它只是在使用时返回值。 OCL并不能修改对象的状态, 而是用来指示状态的修改何时发生。

  3.OCL表达式以附加在模型元素上的条件和限制来表现对该对象的约束, 其中包括附加在模型元素上的不变量或约束的表达式、 附加在操作和方法上的前置条件和后置条件等。

  与JSF的相同之处:二者都是形式语言,声明式的语言,都没有二义性,都有前置条件和后置条件以及不变式;JSF和OCL的目的是相似的, JSF包括过程规格和类规格, 是对某段代码的规格化描述, 其实也就是对这一段代码的约束, JSF的组成主要是布尔表达式, 可以说JSF是轻量级的OCL。

  与JSF的不同之处: OCL语言虽然是一种形式化语言, 但是它既具有形式化语言无二义性的特点, 又消除了形式化语言的复杂性。  OCL是一种纯表达式语言, 是具有没有任何副作用的声明性语言, 一种类型化语言, OCL中的每个表达式都是具有类型的。 可以说OCL的约束比JSF更精准, 无二义性, 其语言体系更加完善, 至少不能像JSF那样写自然语言了。

三.UML图

 

四.学期总结

  现在我想说的是,这学期的oo课程终于结束了,但是讲真的,没有一种解脱的感觉,反而有一点点不舍,可能是那种oo虐我千百遍,我待oo如初恋的感觉在作祟吧。

  我一直在和我的朋友说,可能是学完了oo,对一些问题的抗压能力会变得更强吧,因为oo让我对于处理复杂事物的能力有所增加,以前写代码,除了计租的硬件代码,就没有写过这么多行的代码,虽然一开始有点迷,但是,后来经过一些相应的努力,对于java以及面向对象的语言更加熟悉之后,应对起来oo作业,也就没有以前那么慌了,对于类似于出租车这种比较有规模的作业,多花时间还是能够考虑个七七八八。

  有关oo这门课的争议也有很多,但是我也不想去说,因为有的方面确实是指导书写的过于敷衍,对于自然语言的拿捏分寸不够;但是另外一方面,是一些同学自身的问题,本来指导书里面是可以get到的,但是还是要死钻牛角尖,搞得助教不胜其扰,接连的水群,水去一些重要的消息,谁也不舒服。

  代码还是有一些存在缺陷,但是我会利用考完试的时间来完善的。16级诸君共勉。

posted @ 2018-06-25 17:37  luyuan521  阅读(147)  评论(0编辑  收藏  举报