OO第四次作业总结

一、论述测试与正确性论证的效果差异,比较其优缺点

测试:即设计测试用例(测试数据+预期结果)对程序评测。一般而言,如果想要全方面的对一个程序进行评测,则需要较为完善的测试集做支撑,以便能够覆盖所有的可能情况。显然,这对测试集的设计要求很高,需要在了解程序设计思路以及实现的具体功能的基础上,考虑得很全面很细致才行,一般来说都很难设计出一个覆盖所有细节的测试集。不过,对于一个已经成型且较成熟的程序而言,可以借助这个方法设计较为特殊针对性的样例进行相应的bug排查,从这个意义来说还是比较方便的。

 

正确性论证:在了解程序设计思路的基础上,需要对代码的行为进一步的抽象,进而从逻辑上来论证程序的正确性。从这个描述中可以看出,正确性论证的方法基于严密的逻辑验证,覆盖面广且可靠度高。但是使用这个方法的前提是需要将整个代码抽象出来,成本较大且耗时长,并且对代码作了改动之后,整个工程可能需要重新推理论证。

 

 

二、调研OCL语言,比较其与JSF规格之间的异同

OCL是英文Object Constraint Language的缩写,又称对象约束语言。它作为图形符号的补充,是一种形式化的无二义的语言,说明了建模元素的有关细节,如约束、前置条件、后置条件等。

 

OCLJSF

相似之处

(1)二者都是一种形式化的语言,来抽象表达程序运行对系统状态的更改而非具体的算法逻辑流程,且不会改变系统的运行状态;

(2)二者都采用前置条件后置条件等来对方法的运行加以约束;

不同之处

(1)OCL有自己的一套变量,表达式由操作数和运算符按一定规则构成,表达式和特定上下文有关,具有特定的值和类型。JSF的表达式主要是布尔类型,可以视为轻量级的OCL

(2)OCL的语法定义较之JSF更加全面、精准、无二义,可以看作JSF的升级版。

 

三、单电梯系统——针对调度器、电梯、请求队列和请求:

UML类图

 

 

时序图

 

 

四、课程总结

4.1 阐述四个单元模块知识点之间的关系

本课程的4个单元模块分别是Java基础、多线程和线程安全设计、抽象与规格,测试和论证。

第一单元主要接触了Java语言的基本语法和面向对象的设计思维,可以设计出较为简单的单线程程序,是OO课程的基础铺垫。

从第二单元开始,难度明显上升,开始设计多线程交互系统,一方面需要实现线程间的并行,一方面需要着重注意线程安全问题。

第三单元则主要进行对程序抽象与规格的设计,便于养成良好的工程化开发的习惯,同时借助对前面作业的规格设计,来进一步深入理解面向对象的编程思维。

第四单元则是介绍了测试和论证的方法,这个过程是整个程序开发完成过程中必不可少的,并且与程序设计相辅相成,在程序设计的基础上对程序进行评测,在测试论证的过程中对程序进行优化改进。

 

4.2 梳理自己所设计实现的程序,分析自己在设计、测试和质量上的进步

纵观整个OO作业完成过程,从一开始臃肿的代码段到后面较为抽象的设计实现,这主要就是编程思维上的逐步转变:在对功能需求进行分析之后,可以抽离出相应的类来均衡实现相应的功能,并使这些类相互交互来实现整个系统的功能。除此,在测试上,除了会借助分支树来对设计划分相应的测试样例,还学到了基于junit的自动化测试,以及基于JSF规格设计的思路来对程序进行逻辑验证。关于程序质量,代码容错性提高。

 

4.3 阐述自己对工程化开发的理解

工程化开发的一般流程:需求分析—设计编码—测试验收—维护。“需求”是基本问题,既是出发点也是终结点,基于需求进行设计编码,测试验收,最终实现需求。但有时候需求也不是一成不变的,就比如我们的OO作业都有可能写着写着改指导书了,readme(对于程序员来说)是最好的解决办法,但在具体现实问题中可能事与愿违,如果前期设计包容度不够高,可能一个微小需求的变动会对整个工程开发产生很大的影响,所以,前期设计至关重要,个人认为,可能需要考虑的比需求本身更为广泛,多想一些,想长远一点。除此,一般而言,对于大型的工程项目,多是teamwork,这就需要程序员具有良好的编程习惯以及职业素养,并且在团队协作中,可能需要事先设置一些规范要求以便最终能实现高效的任务对接,但如果某个个体违背了一定的原则,且不说对整个工程开发的影响,这种行为本身就该被谴责。

 

 

4.4 对课程的任何期望或建议

     总得来说,课程体制已经较为完善成熟,但个人感觉有以下几点课程组可以酌情考虑一下:

(1)希望前期指导书的设计尽可能完善,发放之后再进行的改动让人很揪心。除此,关于助教答疑问题,希望能够尽可能安排在一个统一的平台上进行,不同客服群的不同助教措辞不同但表达的意思一样,可能偏偏就有些人理解歪了。

(2)纵观整个作业安排,从多项式作业也就是一次较简单作业之后就开始进行大规模的系列作业,个人认为大部分同学都是从0基础开始,应该多一些前期的小作业练习作为铺垫,并且从这些小作业入手就开始进行规格化设计以及测试和正确性论证的训练,毕竟程序的设计和后期的评测是相辅相成互相扶持的,一开始就进行这方面的训练可以逐步体会有关测试方法以及规格化设计的好处所在。并且多几次小作业的体验可以更好的了解实践面向对象的编程思维,可以提供一个良好的过渡阶段,不至于还没太能掌握这种思维就开始进行系列大作业的设计,从而导致设计出的臃肿代码段,直到后面作业才开始改动修正,问题还是早发现早处理好,思维上的误区更是如此。

 

(3)每次作业完成之后,可以推介一些优秀作业进行评讲学习,互测固然能学到一些别人的优点,但还是有些局限。

 

posted on 2018-06-25 20:01  ElleWater  阅读(151)  评论(0编辑  收藏  举报