OO第四次博客作业

测试与正确性论证的效果差异/优缺点

关于方法的测试,是针对规格设计相关测试样例,判断该方法在执行该样例后能否能获得与预期相符的结果。而正确性论证则是在方法规格的基础上,从理论上论证该方法的代码能否做到与规格相同的EFFECTS效果。测试更倾向于具体情况,正确性论证更倾向于论证整体所有情况。

测试:可能需要提供众多的测试样例,很难覆盖完整个代码的所有分支情况,费时费力,但是十分直观,出错了也能通过具体的样例来展示。

论证:由于是通过理论层面的论证,所以更加抽象。但是覆盖范围十分全面,涉及到了所有的情况,相较于测试而言更加简便,但不直观。


 OCL语言与JSF的比较


OCL语言全名为对象约束语言(Object Constraint Language),是一种用于施加在指定的模型元素上约束的语言。UML类图中的所有值都可以被约束,而表达这些约束的方法就是 OCL。在UML2标准中,OCL不仅用来写约束,还能够用来对UML图中的任何元素写表达式。

OCL是约束(Constraint)语言和查询(Query)语言。OCL基于数学中的集合论和谓词逻辑,有一个形式化的数学语义,但是却没有使用数学符号。它采取了自然语言和数学符号的折中方案,使用普通的ASCII码来表达数学中同样的概念,同时OCL规范也允许用户定义属于自己的OCL符号集。

相较于JSF:

相同

1. 都有前置条件、后置条件和不变量(invariants)

2. 都是声明(declare),仅仅表示应该去做"什么",而非"怎样"去做

3. 都是对对象/方法的约束

不同:

1. JSF仅算一种规格(在java中以javadoc的形式呈现),而OCL是一种语言

2. OCL大部分表达式执行后会返回一个布尔值,但有的也会用来选择一个单一值或一个对象/值的集合。而JSF的表达式都返回布尔值


 UML类图

UML顺序图

UML状态图


学期总结

1.四个单元知识点总结

第一单元主要在将我们引入OO设计的大门,主要训练了单周期OO继承和类的抽象,以及强调了属性private的重要性。第二单元开始,我们开始写多线程程序。训练了线程安全这一重点。为了线程安全,属性私有化十分重要,这也是第一单元所强调的。第三单元我们开始了出租车(规格设计),出租车设计难度不大,主要重点在于JSF程序规格。这一步是在向工业界靠拢,强调程序规格的重要性。第四单元我们进行了单元测试和正确性论证。二者各有优势,都能够论证代码/方法的正确性。

2.进步

从第一次作业到现在,我完成了以下程序:

1) 多项式运算

2) 傻瓜电梯

3) ALS带捎带的电梯

4) 带捎带多线程(3个)电梯

5) IFTT(文件管控/处理)

6) 普通出租车调度

7) 增加了开关道路的出租车调度

8) 又新增了红绿灯的出租车调度

9) 之前基础上新增可追踪的特殊出租车的出租车调度

  这一学期走来,自己在程序设计上取得了很大的进步。

  刚刚开始写OO程序的时候,代码风格和面向过程语言设计无异,方法代码行数长,功能单一性差。

  慢慢地再进入多线程后,情况得到好转,开始进行类的抽象,独立每个方法的功能,降低了每个方法的代码行数,便于更改维护。这样子自己写起来,或者debug的时候也感觉到确实更加轻松。

  因为第三次作业写的很烂,所以在14次作业中重写了ALS电梯。这次用时大概3个小时,算上后面debug的时间,也比之前写短了太多太多,而且确实方法功能明细,每个类功能明确,方法的代码行数最多也就3,40行,相较之前,有了许多的进步。

3. 自己对于工程化开发的理解

  我并没有接触过什么工程设计,自己对于工程化开发的理解也全凭脑洞。

  我认为工程化开发应该不是一个人的工作,至少应该是一个team一起的工作。每个人分工合作,各自完成一部分代码。这个时候就也许会有最终汇总能不能对的上的问题。所以规格化设计十分重要。每个人先明确自己代码的规格,再根据规格写代码,只要写的代码对的上规格,最终汇总起来,应该就不会有太大问题。再后期维护环节,也能较好地进行维护,降低工作难度。

4. 对课程的期望和建议

  我没太多建议,主要就是指导书希望能够更加明确详细一点。很多细节问题指导书都没有,不同的助教也可能有不同的看法,有时候就改来改去。而且写代码的时候也很忙,issue上的每个帖子也不可能全部仔细看一遍,不免就有些疏漏。而且第三次ALS电梯的指导书真的太复杂了。我在14次作业中重写代码之前,读了几遍指导书,还是没咋读懂= = ,看的我头晕眼花。

  另一个建议,就是还是查一下一些乱扣分的同学,做出点惩罚。全系的人都在抱怨有同学靠JSF乱扣分,一次扣几十个,甚至有人一个方法报3个JSF。我觉得这不是这门课想要的结果。希望以后这样的情况能少出现点。

猜你喜欢

转载自www.cnblogs.com/feiyue666/p/9196594.html