一.测试与正确性论证的效果差异
(1)测试
测试,也就是通过实例输入得出的结果,并与正确结果相对比来寻找bug的过程,这种方法个人认为有以下几个优点:
(1)操作简便
(2)结果真实可靠
(3)能够快速、准确和直观的定位bug
但其也以下缺点:
(1)对于复杂程序,个人构造的数据集难以判断是否正确
(2)难以构造全面的数据集
(2)正确性论证
正确性论证,也就是分析需求、撰写规格后,通过严密的逻辑论证来验证程序的正确性,这要求我们完全理解需求,正确撰写规格,同时全面细致的分析代码是否实现了需求和规格,理论上来讲,这种方法应该可以做到全面覆盖bug。
但是个人认为这也只是理论上,因为按道理来说,我们写程序的时候就应该是按照需求和规格去写的,那么为什么还是会出现bug呢,大多数情况存在bug是因为我们连需求和规格都没有完全理清,那么论证也只会是重复我们错误的逻辑,这也是我对正确性论证存在疑问的地方。
二.OCL语言调研与比较
对象约束语言它是一种用于施加在指定的模型元素上约束的语言。OCL表达式以附加在模型元素上的条件和限制来表现对该对象的约束,其中包括附加在模型元素上的不变量或约束的表达式,附加在操作和方法上的前置条件和后置条件等。
对象约束语言是一种形式化语言,它主要用于表示UML模型中施加于模型上的约束。OCL具有如下特点:
1、OCL是一种精确的,无二义性的语言
2、OCL是一种规范说明性语言,所有有关实现的问题都不能用OCL来表达 3、OCL是一种纯表达式语言,它是具有没有任何副作用的申明性语言。 4、OCL是一种类型化语言,即OCL中的每一个表达式都是具有类型的。 5、OCL不是一种程序设计语言,不能用OCL编写程序逻辑和控制流程。OCL与JSF的相同点在于他们都是形式化的约束语言。OCL包括的不变量、前置、后置条件、监护规则对应着JSF中的repOK、REQUIRES、EFFECTS、MODIFIES。不同点在于OCL相比JSF要复杂的多。
三.图
(1)UML图
(2)时序图
(3)状态图
四.学期总结
(1)单元模块知识点关系
第一单元是基础,让我们初学JAVA,了解面向对象编程,入门OO课程,为之后的单元做铺垫。
第二单元是进阶,也是整个课程的重心所在,让我们了解多线程,开始对写代码有新的认识,掌握一些完成工程的技巧。
第三单元是巩固,开始考虑代码的规格、规范和正确性,让我们在锻炼写代码能力的同时也考虑代码的规范性。
第四单元是总结,引入自动化测试、正确性论证,通过多方面的完善使代码更加全面正确,也是对之前的三个单元做个总结。
(2)进步
首先在设计上再也不是盲目的开始直接写代码,而是先构思先布局,在开始动手。
其次在测试上,掌握了多种测试方法,自己构造测试集,通过调试debug,JUnit自动化测试,正确性论证。
最后是质量,可以说写完最后一次作业后,往前翻翻之前作业的代码自己都不愿意看了,也不是说bug少了多少,当然是少了,但是还有在代码风格,规范性等等各方面的进步。不得不说其实规范性,至少在代码的观感来说,还是有很大提升作用的。
(3)理解
工程化开发,它是一个完整的体系,它包括了需求、实现、完善一整个过程,它也是一种方法,是对一个问题的理解,把问题转化为工程,就有了一个程序化的解答方法,是循规蹈矩的褒义,它也是一个需求,是对程序的更高要求,因为工程是合作的体现,要求程序具有很高的易读性。
(4)建议
虽然大家都对OO怨声载道,但是回过头来看,这么14次作业也就一晃而过了,好像也没那么难,甚至总结起来发现原来自己竟然提升了那么多,还挺开心的。而且真的说不上什么建议,最多也就是希望课程能够拉长一些,因为作业的负担实在太重了,很大程度上影响了其他课程的学习。对于平时抱怨最多的互评、规格,想来想去其实也没什么改进的方法。
最后,希望OO课程能够越来越好吧,也很感谢助教和老师们的辛苦付出!