测试与正确性论证的效果差异
关于方法的测试,是针对规格设计相关测试样例,验证该方法在执行测试样例后能否能获得与预期相符的结果,是实验层面的验证。
而正确性论证则是在方法规格的基础上,从理论上论证该方法的代码能否做到与规格相同的EFFECTS效果,是逻辑层面的验证。
二者互有优劣。
测试:需要尽可能穷尽所有情况并构造测试样例,但是实验更直观,不易出错。
论证:在逻辑层面论证,比较抽象,但是更全面,但是不直观。
OCL语言与JSF规格
对象约束语言简称OCL(Object Constraint Language),它是一种用于施加在指定的模型元素上约束的语言。OCL表达式以附加在模型元素上的条件和
限制来表现对该对象的约束,其中包括附加在模型元素上的不变量或约束的表达式,附加在操作和方法上的前置条件和后置条件等。
对象约束语言是一种形式化语言,它主要用于表示UML模型中施加于模型上的约束。
OCL表达式可以附加在模型元素或模型元素的属性和操作上表达一个约束条件。
与JSF相同:
1.都有前置条件和后置条件。
2.都是没有副作用的申明性形式性语言。
3.都是精确无二义的语言。
与JSF不同:
1.JSF注重于类的数据规格和方法规格。强调使用数学语言。
2.OCL注重于对类的约束,OCL取了自然语言和数学符号的折中方案,使用普通的ASCII字符来表达数学中同样的概念。
UML类图
UML顺序图
UML状态图
学期总结
1.四个模块间关系
第一个模块注重基础练习,刚刚接触Java,练习使用Java思想和基本工程化能力。
第二个模块开始多线程,练习数据共享处理,增强工程化能力,需要第一模块基础支持。
第三个模块是规格化设计,规范好的风格,在正确功能基础上设计好规格。
第四个模块则是正确性检查,验证前面的设计。
2.程序的进步
从第一次作业开始,完全不会Java的c式写法,没有封装,单个类贼长,设计无头绪,测试简便,代码风格垃圾,到了终于不再是那么菜。
半年的作业,学会了封装,学会了好的设计成功一半,而不再是所有功能堆在一起。
学会了构造大的尽可能覆盖的数据集进行测试,以及压力边界测试等等。
学会了写出一手不那么难看垃圾的代码。
3.工程化开发的理解
大概就是对于不断改需求增加需求的应对吧。
这就需要一个好的设计,还有就是封装。代码风格一定要好,不要有过长的方法。具有良好的功能扩展性。这大概就是我得到的教训。
4.对课程的期望
希望得到对等的信息,解决每个答疑群以及issue上回答不同的结果。
希望互测树在测试阶段开放,自己以为无所谓的点,也没扣自己测试的作业,到最后自己被扣了十几个。
加大对于恶意扣分处罚力度,避免乱扣分现象。
希望在一开始就告诉大家要怎样写好的风格,不然后期写JSF和正确性论证改来改去。