OO第四次总结
一、论述测试与正确性论证的效果差异
1.测试
测试:基于前置条件和后置条件对输入划分并抽样产生测试数据,检查方法执行输出是否满足后置条件
优点:易于实施,工程广为采用
缺点:无法确保正确性
2.正确性论证
优点:折衷,形式验证与自然语言层次逻辑推理相结合
缺点:无法确保自然语言层次逻辑推理的严谨性
二、调研OCL语言
1.概念
OCL(object constraint language),对象约束语言,是用来进行约束定义的、形式化的无二义的语言。它作为图形符号的补充,说明建模元素的有关细节。
2.OCL vs JSF
相似点:
(1).都有不变式、前置条件、后置条件
(2).都采用形式化的逻辑语言,对程序设计进行约束
不同点:
(1).OCL支持上下文,但是JSF不支持
(2).JSF约束的是类和方法,OCL约束的是对象
(3).OCL有着丰富性和完备的可计算性,允许自然语言的表述
三、图
1.UML类图
2.时序图
3.状态图
四、学期总结
1.阐述四个单元模块知识点之间的关系
第一单元:对象与类、OO程序构造、层次化设计
第二单元:对象运行机制、线程交互、线程安全设计
第三单元:过程规格设计、类规格设计、设计原则
第四单元:自动化测试、基于规格的程序正确性证明、程序的模型化表示
关系:前两个单元是训练代码能力,后两个单元是基于规格基于测试提高代码的质量。
2.梳理自己所设计实现的程序,分析自己在设计、测试和质量上的进步
这个学期设计实现了多项式加减、电梯系列、IFTTT、出租车系列的作业,从一开始的面向过程程序、一个方法几百行到现在写的程序有了面向对象的影子,方法也只有几十行的规模。在接触了规格和测试之后,再回过头去看自己之前写的ALS电梯,真的会有一种惨不忍睹的感觉。现在再写程序,在设计之前我会好好构思,测试的时候会尽可能的全覆盖,代码质量也比之前的好多了。
3.阐述自己对工程化开发的理解
对于工程化开发,要求代码有统一的规格,必须要规范、可扩展、可移植,且易于理解,对每个类都要进行很好的封装,对外提供接口,使其具有良好的移植性。在代码完成之后,要进行充分的测试或者正确性的论证,力求自己的代码能最大程度的满足需求。
4.对课程的任何期望或建议
这门课是从第一周就开始很紧张的一门课,尤其是对于我这种没有java基础的小白。虽然一直在吐槽,但是在经过这么多次训练之后,也能理解课程组这么设计的原因。最大的槽点就是互测制度吧,希望课程组能修改一下互测的制度,减少疯狂扣分和随意无效的情况。想法是好的,程序有bug也应该吃到教训,但是不应该让学生觉得努力没有意义,也不应该成为某些人达到某些目的的工具:)