一、测试与正确性论证
测试是根据所写的程序,在其合理的范围内设计一些测试样例,来判断这一段程序是否存在着问题。
正确性论证则是在逻辑上对所写程序进行判断、论证其正确性与合理性,是否达到了设计要求。
因而测试的优点就是简单快捷,相比于正确性论证的长篇大论,直接测试显然容易的多,但是其缺点也很明显,覆盖率低,通常也只能发现BUG,但BUG出现的原因还需要进一步去判断。而正确性论证由于是在逻辑上进行判断,能够在论证过程中直接发现错误之处,覆盖率很高,但是论证过程非常繁琐复杂,耗费精力。
二、OCL语言和JSF
OCL是对象约束语言(object constraint language)的缩写,它是一种对模型元素进行约束的语言。OCL语言精确,没有二义性,通过一些基本类型和一些集合类型的表达式来表示对元素的约束。形式简单,没有使用过多的数学知识,能够轻松掌握。
而课上使用的JSF与OCL语言的相似之处在于他们都是对某个事物施加一定的约束,不同之处在于JSF所采用的“REQUIRES”和”EFFECTS”都是以布尔表达式的逻辑形式出现的,因此需要一定的数学上的知识。但是JSF仍然可以采用自然语言描述,因此在一定程度上不如OCL严谨。
三、第14次作业
UML图
顺序图
状态图
程序开始后即输入指令,将指令存储好后开始调度,不需要电梯移动的直接输出,需要的就寻找捎带指令再一起运行,直到所有的指令都被运行。
四、学期总结
1. 四个单元
这学期的学习内容被分为四个单元,第一单元主要是用来学习一些基础性的东西,如面向对象思想、继承和接口的使用等,为后面的内容打下基础。第二单元则是多线程编程,涉及各种各样的多线程操作,如同步、多线程安全性。第三单元则是在第二单元的基础上开始接触规格设计,学习规格,同时也在学习对代码的扩展和补充。第四单元则是学习如何去正确的测试代码的正确性,如使用单元测试和正确性论证。这四个单元按照层次,慢慢上升。一开始只是单纯的编码,再后来开始涉及规格以及测试,这样循序渐进,来充分学习面向对象的编程。
2. 个人进步
自然是了解到了面向对象的思想,之前所接触的都是面向过程,只考虑按着顺序要怎么干,而面向对象则是将其作为对象,考虑他要干什么。虽然理解的不是很透彻,但也非常有收获。在OO的压力之下,代码能力以及自己的心态都有了很大程度的提高。同时明白了撰写代码不能只为一时考虑,更要为后来的补充、扩展考虑,写规格,至少也写个注释,这样对于未来所可能的改动就会简单很多。为一次工作所偷懒,在后面的工作可能会付出更多的时间。
3. 工程化的理解
所谓工程化,肯定规模巨大,同时抽象程度非常高,就是单纯告诉你要干什么以及一些需要实现的内容,其余的全部需要自己去确定。工程也通常是一个团队来负责,团队内部肯定也需要共同努力,好好沟通。在代码的撰写中,也必须注意各种接口、扩展性,因为这不是一个人的工作,为了自己的便利很可能对导致其他人遇到麻烦,需要增强程序的可读性。而工程里测试的重要性也是非常高,必须尽全力去测试,去找到可能存在的漏洞,当然首先撰写出正确严谨的代码是更好的。
4. 关于课程
其实OO课程的模式我非常喜欢,但是总有些人去选择钻空子或者是恶意测试。同时由于题目总是或多或少的存在着一些歧义,导致不同的人可能会有不同的理解。而助教们也是很忙的,因此可能ISSUE上的更新也不及时,导致产生了很多问题。如果能够及时的将ISSUE上一些重要的内容都通知一下就会很不错。同时希望将我们这一届在课程中踩到的指导书中的坑告诉给下一届,可别让他们再被坑了。