OO第四次博客作业

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

测试优点:方便快捷,只需要手动构造想到的各种可能的输入样例,然后根据代码的实际运行状况和结果来debug就OK了,比较简单,而且往往可以通过“愚蠢”地构造尽可能多的样例来覆盖大部分可能的出现错误的地方。在代码逻辑比较复杂时,不必费神去考虑构造出来的某些表面上不同的样例可能最后走的分支是一样的情况。测试中得到的反馈信息也十分直接明了,大部分情况下可以通过追根溯源很快定位到出错的地方。

测试缺点:这是一种“从后往前”的debug方式,即先由测试结果知道是否出现bug,然后再去找出bug的原因。虽然能及时地得到反馈信息,但是当代码量巨大,代码逻辑复杂的时候,往往不能覆盖所有可能出现bug的地方。

正确性论证优点:通过一套具体的规范来约束程序中各个类及方法的行为,只需要保证设计的规格正确并且类和方法的行为也与规格相符就行,这样对所有的代码逻辑都能全面检查,不会出现漏查的情况。

正确性论证缺点:正确性论证看起来似乎很轻松,实际并不如此。最关键的地方在于确认方法体是不是真的和规格描述相符合,这在代码逻辑及分支都比较简单的时候还好,一旦过于复杂,就有可能在论证过程中把自己搅糊涂了,难以保证不出现分析错误的情况。

二、OCL与JSF比较

OCL: Object Constraint Language,对象约束语言,是一种用于施加在指定的模型元素上约束的语言。

与JSF的相似点:都有一些基本的数据类型,如整型,布尔型。都规定有关于基本数据类型的运算,如整型的加减乘除,布尔型的与或非。

不同之处:JSF更强调仅仅通过数学语言和简单的逻辑表达式来描述对象以及各种操作,而OCL为了便于理解应用,将数学语言与自然语言相结合,而且制定了更加精细的规则,就好比一种编程语言一样系统且完整。

三、单电梯系统整理

(一)UML图

(二)时序图

(三)状态图

四、总结整理

(一)第一单元熟悉java语言,初步接触面向对象的思想;第二单元开始接触java的多线程编程,极大地提高了编程能力,更进一步理解面向对象的思想;第三单元开始进行规格化设计,通过一些设计规范来保证程序的健壮性并使得设计者和实现者有了更好的交互;第四单元按照要求进行规范的论证和测试,测试时如何构造样例保证足够的覆盖率和论证时如何保证类和方法的行为契合规格所述是关键所在。这几个单元层层递进,从基础入门到困难实战再到把视线放高到更抽象的层次来看程序设计,环环相扣。

(二)写多项式时还是一个小白,一个简单的正则也学了半天,然后几乎是以面向过程的思维写了一个面向对象的程序;到了单部电梯,开始在设计程序时首先考虑应该使用几个大类来完成功能,每个类拥有怎样的属性和方法,类与类之间如何进行交互合作来完成要求;然后多线程来了,开始不理解它的机制,花了挺多的时间去网上看各种解释和实例:何为并发、何为同步、如何实现同步、如何保护共享资源、如何理解java的锁机制,每一个问题都需要好好思考;到了最后的规格设计和测试论证,编程能力有了质的飞跃,开始学习和理解抽象在程序设计中的重要作用。

(三)个人理解的工程化开发,首先从需求开始入手,即首先一定要读懂需求,理解需求,不懂的地方一定要事先搞明白,然后才开始高层次的设计。高层次的设计即先忽略实现的细节,简单地根据需求整理出大体的框架,类的大致功能,类之间的交互。然后,在明确类的功能后才开始通过代码来实现它。最后,也是很重要的部分,就是一定要在完成后进行各种功能的测试,特别是同需求中明确指出的部分相关的功能的测试。

(四)建议取消互测制度,感觉这学期身边的许多同学的情绪都受到了互测的影响,程度或重或轻。

posted @ 2018-06-25 18:20  inevitable  阅读(133)  评论(0编辑  收藏  举报