一. 论述测试与正确性论证的效果差异,比较其优缺点。
测试:测试在于从效果上证明程序的正确性,是最直观的判断程序正确性的方法,通过测试程序观察结果即可验证正确性。这样优点在于易于实施,直观,出现问题就代表一定有bug。缺点是很难全面测试完成,不确定是否一定没bug。
正确性论证是针对格式化的规格和代码实现,人工方式对代码逻辑进行分析,确认是否所有满足前置条件的输入都能产生满足后置条件的结果。这样在代码层面上的测试能有效弥补直接测试的缺陷,不过也不够直观。
二. 调研OCL语言,并比较其与课程所介绍的JSF规格之间的相似和不同之处
OCL(object constraint language)对象约束语言,一种用来进行约束定义的,形式化的无二义的语言。它是是面向对象设计中对图形符号的补充,能够完善建模元素的相关细节。
(1)两者的相似之处
1)思想类似,都是基于数学中的谓词逻辑,都采用了形式化的数学语言
2)目标相同,都是希望通过数学化的语言达到理想情况下的无二义性。
(2)两者的不同之处:
1)OCL书写的自由度更低,规范性更加强。
2)二者的符号系统不太相同
三. 根据第十四次作业的单电梯系统,针对调度器、电梯、请求队列和 请求,至少整理出 一幅UML类图、一幅顺序图和一幅状态图,并使用 图(graph)来表示出模型
由于第十四次作业并未能在规定时间内完成,最后没来得及交,,所以这里列出第十三次作业的类图。
四. 整理总结一个学期所学所练
终于oo课也在自己的努力下结束了,虽然自己成绩一直都不怎么样,开学的时候也被前几次作业一度劝退,几乎不抱着能过的念头努力,最后却也一次次作业走了过来,只有最后一次作业是因为其他课闭卷考试我必须花大量时间背书的原因不得不放弃之外其他每次作业都没有被无效,每次作业bug或多或少,但是的确每周任务都基本完成了,我是光荣的oo开服玩到关服玩家!
4.1阐述四个单元模块知识点之间的关系
四个单元,我认为第一个单元是单纯的java基础编程,是让我们认识到“面向对象编程”究竟为何物,使我们从以往的编程习惯中走出来,开始更加工程化的编程的开始;第二单元则全是多线程作业,程序不再简单的根据输入算结果,而是随着时间和需求时时在变化的程序,更加完整的模拟了一个生活中用到的程序,每时每刻都可能要和用户产生互动,也是在这一阶段,我对面向对象有了更加深的认识;第三单元则主要是一些针对方法,类之类的补充,比如书写JSF,工程的维护是永不可能永远有一个人来做,当其他人拿到我们的工程代码时,需要让他们能更加简单的读懂我们代码的意思,这就是第三单元的训练,希望我们的代码可读性更高;第四单元则是针对代码的程序性测试,包括覆盖率等各种元素,是除了程序直接测试之外的另外的针对代码的测试。
四个单元我认为是递进的过程,从认识面向对象编程,到写越来越真实的面向对象的工程,前两个单元是代码层面上的训练。第三个单元侧重于程序的可读性和可改性,便于在工程上更加方便而正确的维护代码工程。第四单元则是针对代码的测试,使得程序更加简单的能够发现问题,一个没有覆盖的语句可能就会出现问题,正是如此能够更加方便的维护代码。
4.2梳理自己所设计实现的程序,分析自己在设计、测试和质量上的进步
自己的进步不得不说是很明显的,大一的时候面对一个几十行就能搞定的数据结构作业题束手无策,大二时也疲于计组的学习而落下了编程,这学期的代码量我感觉真的让我进步了很多,也让我从中得到了更多的信心。
4.3阐述自己对工程化开发的理解
我的对工程化最大的理解就是知道了先设定需求,再开始动手,第一次尝试先写JSF的时候感觉真的是方便了很多,编写方法的思路的时候把JSF完成,之后顺着思路补完方法代码,让我感觉到工程化的代码习惯的确很值得学习;此外还有代码习惯和测试等,工程化开发远远不止步于实现需求,而是要确认工程几乎不会在各种情况下出现各种bug。
4.4对课程的任何期望或建议
个人对课程最大的意见就是在互测环节,希望能够在对方测试完程序之后可以公布测试人与被测试人的身份。总是有人借着匿名的便利下意识的多扣分,使劲的去抠代码的各种小细节问题,一旦发现就欣喜若狂,开心的扣掉对方一整个节点的分,于是一个个慢慢抠啊抠,最后挂满人家的树,可以说是很开心了。所以希望能够在申诉环节坦白双方身份,这种行为肯定会少很多。