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

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

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

    总述: 所有的增删改查都需要通过greendao通过实体对象类生成的Dao来实现, 具体实现如下图 1.初始化数据库操作对象(GreenDao自动生成的操作对象) 2.通过数据库操作对象,进行增删改查 ...

  2. python学习之——习题一

    习题一:使用while循环输入1 2 3 4 5 6   8 9 10 (不含7) 首先想到,先使用while循环打印出1-10数字,然后再将数字“7”剔除. # 先打印出1-10 n = 1 whi ...

  3. swift 有道 翻译文档(1 定义变量常量,数组字典)

    使用let来创建常量,使用var来创建变量.一个常量的值在编译时不需要知道,但是您必须为它指定一个值一次.这意味着您可以使用常量来命名一个您确定一次的值,但是在许多地方使用它.var myVariab ...

  4. mysql分库 分页查询

    Mysql海量数据分表分库如何列表分页? 1.现在使用ElasticSearch了.基于Lucene的解决方案 2.必须将mysql里的数据写入到类似hbase这样的分布式数据库,查询快.但分页.查询 ...

  5. kafka可视化客户端工具Kafka Tool

    1.下载 下载地址:http://www.kafkatool.com/download.html 2.安装 根据不同的系统下载对应的版本,我这里kafka版本是1.1.0,下载kafka tool 2 ...

  6. Keras + LSTM 做回归demo

    学习神经网络 想拿lstm 做回归, 网上找demo 基本三种: sin拟合cos 那个, 比特币价格预测(我用相同的代码和数据没有跑成功, 我太菜了)和keras 的一个例子 我基于keras 那个 ...

  7. object的wait()、notify()、notifyAll()、方法和Condition的await()、signal()方法

    wait().notify()和notifyAll()是 Object类 中的方法 从这三个方法的文字描述可以知道以下几点信息: 1)wait().notify()和notifyAll()方法是本地方 ...

  8. Python 入门小实例笔记

    实例1:打印用户输入的姓名与手机号码知识点:编码,获取输入,变量,标准输出 #encoding=utf-8 import time #1.提示用户输入信息 name = input ("请输 ...

  9. SQLServer2008 查询分析器内容未保存,查找分析器内容

    位置:C:\Users\Administrator\Documents\SQL Server Management Studio\Backup Files\Solution1

  10. Rails6新增rails db:system:change更换数据库

    rails db:system:change --to=postgresql rails db:system:change --to=mysql rails db:system:change --to ...