OO第四次博客作业
一、测试与正确性论证的效果差异
在本学期的OO课程学习中,我们不光编写了许多次代码,同时也花了许多时间在测试与正确性论证上。
在我看来,测试与正确性论证一个偏向于实践,一个偏向于理论。
测试:测试能够构造尽量多的测试样例,是从外部出发,虽然要求测试者对代码本身有一定的了解,但是类似黑盒测试最终的结果对性能的判定起决定性作用,优点是能够从实践的角度来检验代码是否真的能满足所求。但同时不可避免的缺点是,测试样例只能尽量多的构造,总是难以覆盖所有的情况,在代码分支的复杂组合下,难免会有遗漏,很多时候不能达到对功能100%的检验。
正确性论证:正确性论证偏向于从原理的角度出发,一步步通过严谨的逻辑推理证明代码的实现在理论上完全正确。优点是如果正确性论证的逻辑推理能够成立,则能满足对于代码所覆盖的部分能够100%正确地实现功能,但是缺点是方法的长度决定了正确性论证的难度,50行以上的代码往往就非常难以证明,难以保证其正确性。
二、OCL语言
OCL语言是一种对象约束语言,是用来约束定义的,形式化的无二义的语言。
OCL语言与JSF语言的异同:
同:都是用来对程序进行约束的语言
异:1、OCL语言没有二义性,但是JSF语言却可能由于各人的理解不同而有差异。
2、OCL主要是对对象进行约束,JSF的则是对类和方法进行约束。
三、UML类图、顺序图、状态图
UML类图:
顺序图:
状态图:
四、学期总结
1、知识点
本学期的课程中一共有4个模块的知识点
第一个模块主要是一些基础知识。学习类与对象的基本概念、继承等知识是为了让我们打好基础。
第二个模块主要内容是多线程。在有关多线程的代码编写中,我们逐渐了解了线程的概念以及线程安全的重要性
第三个模块是规格的编写,对规格的严格要求使我们意识到设计比编写代码本身更重要。原本能够完成功能的正常代码如果规格很乱,那么如果出现什么问题回过头来可能连代码的主人都认不清自己的思路。
第四个模块是测试与正确性论证,让我们从实践与理论两方面学习了如何保证代码的正确性以及功能的完备性。
2、自己的进步
其实在学习本课程前,我完全没有过java的基础,寒假因为自己懒的原因也没有自学,对面向对象的思想更是不了解。这一学期的作业完成下来,不仅了解了面向对象式的java代码该如何编写,也了解了多线程、规格、测试与正确性论证等以前自己从来没有接触过的知识。由于互测模式,自己学会了如何让自己的代码写的更具有可读性。同时因为公测和互测的同时存在,自己势必要预先进行大量的测试,所以渐渐学会了如何进行有效且有针对性的测试。
3、对工程化开发的理解
虽然自己对工程化开发并没有过多的接触,但是一学期的任务下来,也有了一些基本的体会。
首先,工程化开发在了解了需求之后,首先一定要对需求进行分析,而不是基于开始开发写代码,在花大量的时间对需求进行了分析后,再开始规划思维模式与代码的框架,接着才来编写代码,有了预先的规划工作,写起代码来自然得心应手,同时要注意的是,工程化开发中写代码一定要严格按照规格来,一来有便于过后的优化与更改,二来工程化开发有可能经常需要与别人合作,要使得自己代码有较强的可读性。
在代码编写完成后,要对代码进行有效且覆盖性尽量强的测试,找出代码中存在哪些遗漏的问题,这一步即相当于与开发的代码进行验证与优化。
4、对课程的建议
其实这个学期我的OO课程过的并不顺畅。
由于没有基础而且自己最初总是不想去克服困难,在最初的几次作业中就常遭无效。从学期中段开始才又成功地完成一次作业,从那个时候开始才重新跟上了同学们的脚步每周完成作业。完成作业使我感觉的确收获很大,一学期下来,从不同的角度了解了java语言与面向对象这种思想,收获也颇为丰富。
而对课程也有一点自己的建议。
一是在课程的设置上,虽然预先也有听说过OO这门课的难度,但是没有想到节奏如此之快。大二上的计组课程虽然难度也很大但是在学期初给了一个多月的时间让我们自学,并且配了视频和文字教程让我们一步步按图索骥。而OO这门课从第一周开始就需要完成一次作业,完全需要靠我们短时速学,希望以后课程能先预留给我们一点时间进行自学。同时对于作业的需求我们也经常会遇到疑惑,对指导书理解而造成的不同这个大家都能理解,但是建议以后的助教能够在一个规定的地方对指导书的疑惑进行答复。每次完成作业的时候在gitlab上、微信群里甚至前期在和助教的私聊中都有对指导书的解释,这样其实有一点麻烦,如何统一在一个地方解答疑问这样大家查看起来也比较方便。
二是在互测制度上,其实互测制度本身的制定并没有问题,但是在多线程及之后规格与测试等环节的互测我觉得交给学生不太合适。就拿规格那几次作业来说,每次互测结果出来之后都有许多人说自己的规格被无故扣了不少分,但是大家都是第一次做这种规格作业,都凭自己的理解努力去完成了,所以觉得很不甘心。虽然我那几次并没有碰到很严格的互测者,但我也想为那些被扣了很多分的同学提一下建议。对于规格的编写我们这学期也是第一次接触,连完成的时候都尚且有许多标准拿不准,怎么具有测试别人规格的资格呢,所以我觉得以后的规格类似的作业可以交由课程组来测试。
最后,很感谢这一学期遇到的互测者们,都非常友好,一学期中没有感受到过“面向人心互测”的残忍,每一次互测出分时都很满意。另外,OO课程这一学期带给我体验其实也非常特别,衷心希望OO以后能越办越好!