OO第四次博客作业
1. 论述测试与正确性论证的效果差异,比较其优缺点
测试是对代码在特定的现实情境中进行模拟,你可以根据实际情况来判断输出是否正确,即时发现问题,可能找不到出问题的根源,通过自己不断分析才能找到需要改到的代码片段。
优点:符合现实场景,让人容易接受。
缺点:不能直接发现哪块代码有问题。
正确性论证是一个偏向于公式化的体系,通过这些“公式”可以精准严谨的判断代码是否有问题。
优点:能够直接发现问题。
缺点:略微抽象、繁琐。
2.调研OCL语言,并比较其与课程所介绍的JSF规格之间的相似和不同之处
对象约束语言简称OCL(Object Constraint Language),它是一种用于施加在指定的模型元素上约束的语言。OCL表达式以附加在模型元素上的条件和限制来表现对该对象的约束,其中包括附加在模型元素上的不变量或约束的表达式,附加在操作和方法上的前置条件和后置条件等。
OCL预定义的标准类型定义了一组基本类型和集合类型。OCL的基本类型有"Boolean"、"Integer"、"Real"、"String"等。集合类型包括"Collection"、"Set"、"Bag"、"Sequence"等。这些标准型是OCL表达式的组成部分。
OCL具有如下特点:
1、OCL是一种精确的,无二义性的语言。 2、OCL是一种规范说明性语言,所有有关实现的问题都不能用OCL来表达。 3、OCL是一种纯表达式语言,它是具有没有任何副作用的申明性语言。 4、OCL是一种类型化语言,即OCL中的每一个表达式都是具有类型的。 5、OCL不是一种程序设计语言,不能用OCL编写程序逻辑和控制流程。OCL表达式对于一个OCL类型求值。OCL表达式有以下特点:
1、OCL表达式可以附加在模型元素上,模型元素的所有实例都应该满足表达式的条件。 2、OCL表达式可以附加在操作上。 3、OCL表达式可以指定附加在模型元素上的监护条件。 4、OCL表达式的计算顺序是从左到右。 5、OCL表达式既可以使用基本类型又可以使用集合类型。相似之处:
- 目的相同,都想通过数学的方式验证正确性
- 结构相同:都有前置条件和后置条件
不同之处:
- OCL相比于JSF来说更加完善
- OCL的基本类型更多
- OCL和JSF符号系统不一样
3.根据第十四次作业的单电梯系统,针对调度器、电梯、请求队列和 请求,至少整理出 一幅UML类图、一幅顺序图和一幅状态图,并使用 图(graph)来表示出模型
UML
时序图
状态图
4. 整理总结一个学期所学所练
4.1阐述四个单元模块知识点之间的关系
第一单元——基础。我们从基础了解“面向对象”,正则表达式,各种内置函数的应用,各种算法的实现。
第二单元——进阶。开始接触线程,多线程的应用,线程安全。
第三单元——完善。对程序进行规格化整理,确保正确性。
第四单元——总结。用覆盖率去检验自己是否已经检测了自己代码的每一个细节,正确性论证。
4.2梳理自己所设计实现的程序,分析自己在设计、测试和质量上的进步
我觉得自己的进步可以说是很大了,因为在这个学期之前完全不会JAVA,一学期速成,然后从各个方面补缺自己的不足,再到后面学会了多线程,学会了线程安全,学会了规格方法,学会了正确性论证,学会了覆盖率测试等等。以前的我只会局限于面向过程,现在可以更加精准的面向对象了。而且相比于开始,更会仔细思考怎么写代码才好,怎么写才能避免更多问题,怎么写才能用最少的行数完成功能。
4.3阐述自己对工程化开发的理解
虽然自己对工程化开发并没有过多的接触,但是一学期的任务下来,也有了一些基本的体会。
首先,工程化开发在了解了需求之后,首先一定要对需求进行分析,而不是基于开始开发写代码,在花大量的时间对需求进行了分析后,再开始规划思维模式与代码的框架,接着才来编写代码,有了预先的规划工作,写起代码来自然得心应手,同时要注意的是,工程化开发中写代码一定要严格按照规格来,一来有便于过后的优化与更改,二来工程化开发有可能经常需要与别人合作,要使得自己代码有较强的可读性。
在代码编写完成后,要对代码进行有效且覆盖性尽量强的测试,找出代码中存在哪些遗漏的问题,这一步即相当于与开发的代码进行验证与优化
4.4对课程的任何期望或建议
还是希望能够将指导书弄得更加全面一些,避免好多好多issue上的问题你不得不看,因为可能会存在指导书之外的要求。虽然觉得助教老师说的:“在以后的工作客户给你的指导书会更加不完整。”有一些道理,但是,毕竟我们现在还不是真正的工程人员不是么?而且我也觉得不把指导书写完善我们从中学到了什么,只觉得...助教的工作压力还挺大的。
希望OO越来越好。