一、 论述测试与正确性论证的效果差异,比较其优缺点
二者是对代码正确性论证不同策略。
(1)测试
测试是基于前置条件和后置条件对输入划分并抽样产生测试数据,检查方法执行输出
是否满足后置条件。
• 优点:易于实施,工程广为采用。通过第十四次作业书写正确性论证可以看出来测试相比正确性论证更容易实施,周期更短,对于有时间限制的工程开发来说是非常高效的。
• 缺点:无法确保正确性,只能通过的测试发现bug,而不能证明没有bug。
(2)正确性论证
论证是针对格式化的规格和代码实现,人工方式对代码逻辑进行分析,确认是否所有
满足前置条件的输入都能产生满足后置条件的结果
• 优点:折衷,形式验证与自然语言层次逻辑推理相结合。保留了形式化论证的相对按严格验证,同时又保证了相对高效性。
• 缺点:无法确保自然语言层次逻辑推理的严谨性。
二、 调研OCL语言,并比较其与课程所介绍的JSF规格之间的相似和不同 之处
OCL(object constraint language)对象约束语言,一种用来进行约束定义的,形式化的无二义的语言。它是是面向对象设计中对图形符号的补充,能够完善建模元素的相关细节。
(1)两者的相似之处
1)思想类似,都是基于数学中的谓词逻辑,都采用了形式化的数学语言
2)目标相同,都是希望通过数学化的语言达到理想情况下的无二义性。
3)结构类似,都有前置后置条件
(2)两者的不同之处:
1)个人理解JSF更加偏向行为描述,而OCL更加偏向于建模过程。
2)因为OCL本身定义了基本数据类型和一些高级数据类型,还有运算符和表达式中的一些书写规范,几乎算得上是一种编程语言,这也正对应OCL的实际含义。所以但从表达能力上来说OCL更强,书写复杂度比JSF低一些。
3)OCL支持上下文(使用context),但是JSF不支持
4)二者的符号系统不太相同
三、 根据第十四次作业的单电梯系统,针对调度器、电梯、请求队列和 请求,至少整理出 一幅UML类图、一幅顺序图和一幅状态图,并使用 图(graph)来表示出模型
UML类图:
时序图:
状态图:
四、 整理总结一个学期所学所练
4.1阐述四个单元模块知识点之间的关系
第一单元是面向对象的基础层次,主要通过三个简单的单线程作业训练我们对java语言的使用以及继承、接口、多态等面向对象基本特征的熟悉与掌握,是整个课程的基础。第二单元进一步贴近真实,强调交互性与多线程,主要训练了我们的线程安全设计与对象管理能力。在第二单元的最后提出了SOLID原则,这是接下来课程要求设计需要实现的根本准则,为3 4单元打好了基础。第三单元是在代码训练的基础上追求规格化测试,第四单元是测试实践(包括Junit单元测试以及类实现正确性推理)。前两个单元强调在代码层面的练习,后两个单元是更高的层面—设计和测试层面。
4.2梳理自己所设计实现的程序,分析自己在设计、测试和质量上的进步
很幸运的是去年暑假上了面向对象先导课,让我在一开始第一单元的时候不至于赶不上。这学期有很多东西都是自己从头开始学的:多线程、正则表达式。
设计上自己的设计思想更加向面向对象思想上靠近,从最初第一单元的伪面向过程代码以及强行为了满足需求进行继承和接口的划分到后来自己可以根据问题抽象自然拆分不同的类,组织类之间的继承关系,慢慢适应了面向对象编程思想。
熟悉了多线程编程,掌握了实时交互式程序的编写。
设计上比以前做的好多了,最初几次作业都是一边写一边改,到中期是简单做了设计写代码发现后期改了需求之后总是要大换血,到后来自己也积累出一定经验,在开始设计的时候就会思考如何提高自己设计的可拓展性来应对各种可能的变更。
锻炼了自学能力,跟上学期计组课最大的区别就在于这门课的自学只是2要求比较多。没有人再会教你设计的思路和工程化开发的方法,具体的知识点只靠老师上课讲的是远远不能满足作业需要的。这学期自学了不少知识,在写博客写作业的过程中也自己学会了许多eclipse的插件的使用。
4.3阐述自己对工程化开发的理解
说起工程化开发我觉得第一次接触到这种思想的还是在上学期计组课的时候,对于清晰的需求,按照老师讲的工程化设计开发方法当时感觉做工程原来没有那么费劲。这学期让我体验到了另外一种风格的工程化,体会到了如何在需求不断变更的过程中实现代码开发。
4.4对课程的任何期望或建议
在学习过程中,自己稍微有点体会,以下纯属个人看法。感觉设计和编码整个的顺序稍微有点反置了,前两单元重点在训练基本面向对象思想和线程安全设计,第三单元才第一次提出设计,提出规格化的思想。但是其实因为第三单元的作业复杂度其实是本学期相对比较高的,前两单元大部分同学并没有形成先设计后编码的习惯,导致第三单元上来面对如此复杂的作业通过完整设计和规格写代码大家都有点不是很习惯而且有点困难。就导致了很多人出现了先写代码再补规格的情况。
个人建议:课程可以考虑一下将设计和规格JSF放在课程开始的比较靠前的位置进行,前3次作业比较简单,可以利用简单作业让大家先熟悉一下怎么按照设计写规格,按照规格写代码的流程,为第三单元复杂作业的设计与规格做好铺垫。
其他对课程组的期望就是有关需求问题和测试问题,只能说自己不才,这方面只能看到问题,也想不出什么太好的解决方法,在此就不再说明了。