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

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

  测试:测试首先是构造一组测试样例,之后将程序用这组样例运行,将得到的结果与预期的结果进行对比,来进行程序的正误判断,若程序得到的结果与预期不符,就查找测试程序所覆盖处的代码,对每个地方进行勘察以找出错误之处,找到之后即刻进行修改,这样重复进行,直至将代码部分全部覆盖,反复多次去查找存在的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. HDU 1542 Atlantis(扫描线)题解

    题意:给n个可能相交的矩形,问你不重复的总面积 思路:扫描线,一边扫一边加. 扫描线:图片来源:理解扫描线 假设我们要算以下四个矩形面积,显然中间深色的是重复的.我们按照x的大小,从左往右扫,然后用线 ...

  2. APIO 2014 回文串(Manacher+后缀自动机+倍增)

    题意 https://www.lydsy.com/JudgeOnline/problem.php?id=3676 思路 好像还是回文自动机裸体,但是 \(\text{Manacher}\) +后缀自动 ...

  3. JQuery-FullCalendar 多数据源实现日程展示

    背景 本次需求:实现在一个以月为界面的日历上展示每天发生的事件. 1.每天的事件有多个类型,不同类型的事件使用不同背景色标注,展示为某个类型事件的统计,比如: 会议(6) 2.点击某一天可以查询改天所 ...

  4. Linux常用命令——文本编辑器Vim

    Linux常用命令--文本编辑器Vim Linux  Vim常用操作 插入命令 a 在光标所在字符后插入 A 在光标所在行尾插入 i 在光标所在字符前插入 I 在光标所在行首插入 o 在光标下插入新行 ...

  5. idea使用的小技巧总结

    1.需要一个快捷清爽的控制台? 下面这段配置是你需要的,在workspace.xml里面添加 <component name="RunDashboard"> <o ...

  6. Nginx 常用配置

    Nginx的负载均衡方式 1.轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除. 2.weight 指定轮询几率,weight和访问比率成正比,用于后端 ...

  7. warning C4828问题的处理

    在QT的一些项目中,有时候会出现如下警告 warning C4828: 文件包含在偏移 0x215 处开始的字符,该字符在当前源字符集中无效(代码页 65001). (编译源文件 XXXXXXcpp) ...

  8. random froest 调参

    https://blog.csdn.net/wf592523813/article/details/86382037 https://blog.csdn.net/xiayto/article/deta ...

  9. 2 Class类

     在程序运行期间,Java运行时系统始终为所有的对象维护一个被称为运行时地类型标识.这个信息跟踪着每个对象所属地类.虚拟机 利用运行时类型信息选择相应地方法执行. 然而,可以通过专门地Java类访问这 ...

  10. Vue-devtools 安装浏览器调试

    工欲善其事,必先利其器. 本文主要讲解Vue-devtools的安装和使用 安装方法有两个: 方法一:(前提条件需要FQ,省事省力省心方便快速) FQ =>谷歌商店 =>搜索 =>V ...