oo第四阶段总结

oo第四阶段总结

一、关于测试与正确性论证

  测试是根据代码功能构造相应的数据,通过结果的正确性来判断代码中是否有bug。

  正确性论证是根据代码的规格,以自然语言的形式对代码是否能够实现相应功能、是否能够对相应异常进行处理进行论证。

  总的来看,正确性论证更为宏观,适合于大型系统的宏观正确性控制,即对大型系统进行错误的检查,由于其使用的是自然语言,因此也更加直观,便于检查过程中的交流理解,但正确性论证难以保证规格内代码是否能够准确实现规格所说明的功能,即无法从实际论证代码的正确性。而通过数据进行测试则更加微观,尤其在课程后期,引入了运用junit进行检查的方法后,如果数据构造足够充分,能够实现分支和代码的百分之一百的覆盖,从而验证代码功能的正确性,但是,随着代码量的增加,要想做到百分之一百的代码覆盖率和分支覆盖率,构造的数据量将会十分庞大,同时构造难度也会提升,因而数据测试更适合局部代码的正确性检查。

  在实际的应用中,两种方法可以实现局部与宏观的互补,同时运用两种方法,有利于增强测试的准确性,同时提高测试的效率。

二、关于OCL和JSF

  OCL语言全名为对象约束语言(Object Constraint Language),是一种用于施加在指定的模型元素上约束的语言。OCL的基础是数学中的集合论和谓词逻辑,并且它有一个形式化的数学语义,但是它并没有使用某种数学符号。因为虽然数学符号能够清晰的、无歧义的表达事物,但是只有极少的专家可以看懂。所以数学符号并不适合用于一个广泛应用的标准语言。

 

  自然语言是最易懂的,但是它是含混不清晰的。OCL取了自然语言和数学符号的折中方案,使用普通的ASCII字符来表达数学中同样的概念。如果你不喜欢当前的OCL表达方法,OCL规范还允许你定义自己的OCL符号集,这点是可以理解的,因为OCL有一个清晰的数学语义。

  两种语言的相同点:两者都是预先对程序设计的约束,是对程序设计预期功能和效果的标准化定义,两者都不具有二义性,且都有前置条件,后置条件和不变式。

  两种语言的不通点:首先OCL每个表达式都是具有类型的,融入了一定的自然语言的特性,且具有许多的基本数据类型等,而JSF只是单纯的数学逻辑表达式。其次JSF围绕类和方法进行约束,而OCL则对对象及对象内、对象间所包含的数据进行约束。

三、关于第十四次作业

UML类图:

 

UML状态图:

 

 

UML时序图:

  

 

 

四、学期总结  

  1.四个单元模块中,第一单元主要是熟悉面向对象的编程方法,了解面向对象的对象、类、方法、接口、继承等基本概念。第二单元主要知识集中在多线程以及多线程的数据保护,整体上是逐步熟练掌握多线程  编程方法的过程。第三单元引入了规格化设计方法,让我们了解了一些工程上编程的解决方案。第四单元是测试和正确性论证,让我们能够通过两种方法对自己写的代码进行更好的检查,确保代码的正确性,

  2.本学期的课程中,我依次完成了多项式处理、单个傻瓜电梯、单个可捎带电梯、多线程可捎带电梯、IEEE处理器以及出租车调度这六大程序。在多项式处理的作业中,我了解了对输入进行约束的设计思想;在三次电梯作业中,我逐步理解了面向对象的设计思想,学会了将实际问题模拟成程序中的相应类,从而实现作业要求,而不是之前简单的数据抽象处理的编程思想;在IEEE作业中,我进一步熟练了多线程的使用,成功实现了多线程的数据保护;之后的四次出租车,则是对之前学到的设计、编程方法的综合运用,进一步提高编程能力;最后两次作业,提供了测试和正确性论证的方法,让我学会了除了自己构造数据进行测试以外的新的程序检测方法。减少代码中的bug。

  3.工程化开发更加强调格式的标准化与统一,这样虽然会导致一些繁琐要求的产生,但是从整体上看,这样的要求更利于大型系统的开发。同时工程化开发削弱了一些算法和数据抽象的运用,其更注重代码的可读性,这也对提高多人合作开发的效率具有积极的意义。最后,工程化开发的错误处理很重要,错误处理也是影响这个系统稳定性的关键。

  4.虽然本课程有一些存在争议的地方,但相比于其带给我的收获,也就无伤大雅了,也希望课程能越办越好。

  

 

posted @ 2018-06-25 16:48  qys1711  阅读(304)  评论(0编辑  收藏  举报