一:测试与正确性论证的效果差异

  首先,测试和正确性论证都是对程序的可靠与否,是否有误进行测试,从整体上来看,测试多偏向于实践,而正确性论证则大多偏向于理论。

  测试:测试首先是构造一组测试样例,之后将程序用这组样例运行,将得到的结果与预期的结果进行对比,来进行程序的正误判断,若程序得到的结果与预期不符,就查找测试程序所覆盖处的代码,对每个地方进行勘察以找出错误之处,找到之后即刻进行修改,这样重复进行,直至将代码部分全部覆盖,反复多次去查找存在的bug,复现它并解决它。测试的好处在于实现起来十分简单,只要找到一组输入数据就能对应一种情况的测试,再者,它不仅可以测试程序的正确性,还能运行程序,从而能在程序的性能方面进行研究,更偏向于实践,在现实中使用较广。但测试也存在一定的缺点,对于输入情况较少的程序,测试起来较为简单,但对各种各样输入情况复杂的程序,能够完全覆盖程序运行时的每一点实在太难了,往往会耗费大量的精力去进行测试。

  正确性论证:正确性论证是从程序的规格出发,基于规格对代码进行逻辑上的论证,从而确认某一类或某个方法是否正确。正确性论证的有点在与:对于规格化实现的程序,能很好地对代码进行彻底地复查,能很好地覆盖到所需要论证程序的每个类每个方法,这是测试无法保障的,此外正确性论证是从原理出发,从根本上确保了论证方法的正确性。正确性论证的缺点在于,它是针对已实现的程序进行论证的,只能证明程序的实现过程不具有问题,但若程序的设计从根本上是存在问题的,这就不是正确性论证能解决的,并且对于程序代码量过大(如一个方法超过50行)则很难进行正确性论证。

二:OCL和JSF的比较

  OCF语言是一种对象约束语言,他是一种施加在指定模型元素上的语言。OCL表达式以附加在模型元素上的条件和限制来表现对该对象的约束,其中包括附加在模型元素上的不变式和约束的表达式,附加在操作和方法上的前置条件和后置条件等。对象约束语言是一种形式化的语言,它主要用于表示UML模型中施加于模型上的约束。OCL特点如下:

  (1)OCL是一种精确的,无二义性的语言

  (2)OCL是一种规范说明性的语言,所有有关实现的问题都不能用OCF来表达

  (3)OCL是一种纯表达性语言,它是具有没有任何副作用的申明性语言

  (4)OCL是一种类型化语言,即OCL的每一个表达式都是具有类型的

  (5)OCL不是一种程序设计语言,不能用OCL编写程序逻辑和控制流程

  与JSF的对比如下

  (1)JSF是针对类和方法而产生进行约束,而OCL是对对象进行约束而产生的

  (2)OCL的语言是精确的,没有二义性,而JSF相对较为开放,同一段程序可以有不同的写法。

三、类图 时序图和状态图

                                                                       类图

                              时序图

                              状态图

四、课程总结

  1.四个单元模块之间的联系

     第一个模块:学习了面向对象语言java中的基本思想,知道了java面向对象的几个基本概念:继承、重载与重写、多态、抽象类、封装、接口等等,这一章让我们从之前学c语言时的基本的面向过程的思想转为面向对象思想,是将之前一长段的代码逐渐分割成较为简单的每个类的过程,也是在这里也开始会用java语言写一些简单的程序。

      第二个模块:在第一模块的基础上,去学习更复杂的多线程编程,将各个进程之间用共享资源进行限制,更有效的提高了程序的运行效率。

      第三个模块:类和方法上规格的实现,要求我们要依据规格去写程序,好的规格能让我们写代码的思路更为清晰简介。

      第四个模块:对程序的正确性进行判断,用了两种方法:测试与理论的正确性论证,两种方法各有优劣,能在不同方面去测试程序的正确性。

     2.自己的进步

    在一开始学习这门课的时候,我是崩溃的,因为自身对于java语言这方面完全不了解,但在不断学习中,逐渐会写一些java语言的程序,明白了将一个程序的各个部分划分为多个抽象对象,这些抽象对象含有一定的属性和各类方法对对象的 属性进行改变和判断,简洁有效地对一个程序各个需求部分进行分析处理。原本以为写一个程序最麻烦的是写的阶段,在不断地做测试的过程中明白了测试才是写一个程序的大部分,在不断的测试中,不断发现程序存在的bug,并不断修复它,而这个修复过程是尤为繁琐的,不仅要找到错误的地方,还要分析是什么情况导致了错误,修改时会不会造成其他情况的错误等等,在后面写程序的过程中,测试几乎成了最烦的问题,分类划分各种情况,然后一块块测试,这是在测试中养成的良好习惯。

    3.对工程化的理解

    在我看来,工程化程序开发它不同于简单的编写程序,个人编写程序只需考虑自己能看懂即可,而工程化开发则要求自己的程序能让别人读懂,并且自己的程序绝对不能有错误,工程化开发往往需要大量的时间,由每个人负责一部分,这就很要求代码的可读性,因此规格化的设计就显得尤为重要,在测试方面,要充分覆盖程序存在的每个输入输出,使自己撰写的部分不能有一点错误,一点错误的存在就会导致整个程序出现故障进而导致崩溃。

    4.对课程的建议

    我的建议在于以下几方面:

      (1)在课程中能增加一些具体例子,如一开始的面向对象编程,希望能有两个程序分别是面向对象编程的和面向过程编程,而不是简单的一段代码,这样能加深对面向对象的理解;在多线程中,能加入具体的多线程的代码,结合具体的一个多线程代码才能让我们开始从会写开始,减少过多的课外研究时间。

      (2)对于互测和公测,希望能增加公测的比例,多加一些例子,因为公测具有绝对的公正性,让公测集覆盖多个方面才能使程序发现多个问题,仅仅依赖互测找到问题或许不可行,在互测方面,对于规格等这一些的判断希望能加一个上限,不让滥报、多报等行为产生。

      最后,感谢各位老师和助教们一学期的陪伴,希望OO课程能越来越好。

OO第四次作业总结的更多相关文章

  1. 【OO学习】OO第四单元作业总结及OO课程总结

    [OO学习]OO第四单元作业总结及OO课程总结 第四单元作业架构设计 第十三次作业 第十四次作业 总结 这两次作业架构思路上是一样的. 通过将需要使用的UmlElement,封装成Element的子类 ...

  2. oo第四单元作业总结暨课程总结

    oo第四单元作业总结暨课程总结 一.本单元作业架构设计 本单元需要构建一个UML解析器,通过对输入的UML类图/顺序图/状态图的相关信息进行解析以供查询,其中课程组已提供输入整体架构及输入解析部分,仅 ...

  3. OO第四单元作业总结以及课程总结

    第四单元总结--UML 第四单元作业架构分析 第一次作业其实是本单元三次作业中最难的一次.由于第一次是第一次作业,要考虑到搭建框架和设计架构,这次作业的思维性很强.在了解了各个类型元素(Element ...

  4. OO第四次作业

    一.论述测试与正确性论证的差异 我认为论述测试代表从理论的角度来进行运行正确性的判断,而正确性测试则是从实践的角度来看待程序的正确性问题.两者之间有着明显的差异. 正确性论证是仅仅从代码的逻辑结构方面 ...

  5. UML结构与解析——BUAA OO第四单元作业总结

    UML与解析架构 UML是什么 统一建模语言(英语:Unified Modeling Language,缩写 UML)是非专利的第三代建模和规约语言.UML是一种开放的方法,用于说明.可视化.构建和编 ...

  6. OO第四单元作业小结

    一.本单元两次作业的架构设计 1.第一次作业 整体思路:以class为核心,建立MyInterface.MyAttribute.MyOperation.MyAssociation四个类分别储存每个类的 ...

  7. 北航OO第四单元作业总结(4.1~4.3)及课程总结

    前言 在学习过JML规格描述语言之后,本单元进行了UML(Unified Modeling Language)的学习.和JML单纯用语言描述的形式不同,UML通过可视化的图形形式,对一系列有关类的元素 ...

  8. OO第四单元作业总结及课程总结

    一.本单元作业架构设计 1.第一次作业 本单元首次接触到UML以及相关概念,在面对第一次作业时首先花了很大功夫去阅读官方接口中各种UmlElement的代码,才理解了输入的模型元素中各属性的含义.总的 ...

  9. oo第四单元作业总结

    一.本单元两次作业的架构: 本单元两次作业的架构基本是一致的,所以两次作业的架构就一起说了. 为了避免查询时出现同一个结果反复计算的情况(连续两次查询一个类的顶级父类,如果我们在查询的指令中来计算其父 ...

随机推荐

  1. android开发_ViewGroup(组视图)-- 五大布局

    view组--ViewGroup(组视图) ViewGroup的作用:在view中添加子控件.ViewGroup的5个子类,就是五大布局: (1) LinearLayout  线性布局(常用) (2) ...

  2. freopen()函数在ACM中的使用

    #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); #endif https://blog.csdn.net/c ...

  3. week1总结

    week1总结 1. 开发上线工具流程以及规范类 规范: css注释:/* Comment Text*/ Css嵌套选择器:请不要让嵌套选择器的深度超过 3 层! 再说一遍: 永远不要嵌套 ID 选择 ...

  4. vue-cli 最强指南

    今天在这篇文章里,会对 vue-cli 的功能做个详细的整理,把 vue-cli 所有的功能都列出来.注:这个是官网连接:https://cli.vuejs.org/zh/guide/ ,建议多看细看 ...

  5. RFS常见问题

    一.DatabaseLibrary 库遇到的问题:1,连接mysql库,查询语句带有中文,报FAIL UnicodeEncodeError: 'latin-1' codec can't encode ...

  6. day3——两数之和

    // 小白一名,0算法基础,艰难尝试算法题中,若您发现本文中错误, 或有其他见解,往不吝赐教,感激不尽,拜谢. 领扣 第2题 今日算法 题干 //给定一个整数数组和一个目标值,找出数组中和为目标值的两 ...

  7. 给web请求加遮罩动画

    效果预览: css: /*#fountainG{ position:relative; margin:10% auto; width:240px; height:29px }*/ #fountainG ...

  8. Axure文本框验证和外部url的调用

    文本框的验证和外部url的调用: 场景: 当输入文本框中的内容是满足下面条件时:输入4-10的数字,页面会跳转到QQ注册(https://ssl.zc.qq.com/v3/index-chs.html ...

  9. 基于百度通用翻译API的一个翻译小工具

    前几天写了一个简单的翻译小工具,是基于有道翻译的,不过那个翻译接口有访问限制,超过一定次数后会提示访问过于频繁,偶然发现百度翻译API如果月翻译字符少于200万是不收取费用的,所以就注册了一个百度开发 ...

  10. 第二章 Java 基本语法1

    2.1关键字 1.定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词). 2.特点:关键字中所有字母都是小写字母. 3.分类: 用于定义数据类型的关键字:byte.short.int.lo ...