第四次博客
第四次博客
测试与正确性论证
测试是通过构造样例运行程序比较结果对代码功能的正确性进行验证,而正确性论证是在规格的基础上进行逻辑上的论证,以确保类和方法的实现符合规格中要求的逻辑。
测试直接比较程序的输出和期望结果,比较直观,但需要全面考虑代码要实现的功能,考虑各种可能的情况,进行的测试不一定能够完全覆盖所有可能出现的情况,测试结果不能保证正确。
正确性论证根据规格检查程序逻辑,能够较好地保证代码逻辑符合规格,但论证比较麻烦。
OCL语言及其与JSF规格相似点与不同点
OCL语言,即对象约束语言,是用来进行约束定义的,形式化的无二义的语言。它是图形符号的补充,说明建模元素的有关细节,例如:约束,前置条件 ,后置条件等。
1)相似点:
1.二者都是形式化的语言
2.都具有无二义性
3.不会改变模型中的内容
4.都通过前置条件、后置条件、不变式等对代码进行限制约束
5.都是类型语言,变量的类型可以是标准类型,也可以是自定义的类型
2)不同点:
1.OCL语言使用ASCII字符表示数学中的逻辑等,而不是数学符号。JSF语言使用数学符号表示逻辑
2.OCL支持if、else、endif类型的条件分支。JSF语言不支持条件分支
3.OCL通过context确定表达式的上下文,来表示这个表达式所作用的范围,可以通过上下文导航到与它有关系的其他类。JSF不支持上下文
4.OCL定义了群等高级数据类型。JSF没有。
第14次作业中的图
UML类图
顺序图
状态图
整理所学
1)四个单元模块知识点之间联系
第一个单元是面向对象入门,学习面向对象思想,理解其与面向过程的不同,熟悉面向对象编程方式。
第二个单元是多线程的练习,学习线程的并发、互斥。
第三个单元是JSF规格的练习,学习用JSF规格对程序的类和方法进行抽象和限制。
第四个单元是对程序正确性和测试的练习,学习进行程序正确性论证的方法、程序的覆盖性测试方法。
四个单元的内容是逐渐递进的,前两个单元侧重编程技能的练习,后两个单元则锻炼测试程序、保证程序良好正确性的能力。
2)自己程序梳理
设计上,对类的抽象越来越好,现在的程序相比于最开始的半面向过程程序,已经有了很大的进步。类的属性越来越少,方法越来越多,每个方法的行数越来越少,习惯使用各种Java库中的标准类,程序基本可以算是面向对象的程序。
测试上,学会了除构造方法运行程序直接测试之外的其他测试方法,比如Junit覆盖性测试、程序正确性论证等。
质量上,代码可读性变高,冗余代码减少,方法更简洁,类的抽象更明确。
3)对工程化开发的理解
由于工程化开发中,不是自己一个人进行,而是与团队进行合作进行一个大的项目,每个人负责各自的模块。这就要求每个人的程序都要有很高的可读性,和测试的易于实现性,规格就是保证这两点的一个有效方法。规格可以便于不同的人对同一段代码的正确性验证,有利于明确模块的接口、前置条件、后置条件等,有利于模块的集成。
4)对课程的期望和建议
规范互测