测试与正确性论证
我认为第十三次作业的测试是基于规格通过测试用例对实现方法正确性的检查。与平时测试时直接用数据输入输出判断不同,本次测试针对每一个具体方法的实现,使用junit,能够快速地定位到自己的bug。但是一旦代码规模增大,测试很难做到覆盖性的检查。
正确性论证可以做到全面的覆盖,我在论证过程中也找到了不少写的不正确的规格。但是,它的工作量实在是太大了,除了单纯论证还要重构代码,好多方法的论证感觉并没有什么用。
这两者配合使用,可以快速又全面地完成代码正确性的检查。
OCL与JSF
一个约束就是对一个(或部分)面向对象模型或者系统的一个或者一些值的限制。UML类图中的所有值都可以被约束,而表达这些约束的方法就是 OCL。在UML2标准中,OCL不仅用来写约束,还能够用来对UML图中的任何元素写表达式。每个OCL表达式都能指出系统中的一个值或者对象。因为 OCL表达式能够求出一个系统中的任何值或者值的集合,因此它具有了和SQL同样的能力,也就是说OCL也是一种查询语言。
OCL取了自然语言和数学符号的折中方案,使用普通的ASCII字符来表达数学中同样的概念。
OCL是一个类型语言,任何表达式的值都是属于一个类型的。这个类型可以是预定义的标准类型例如Boolean或者Integer,也可以是UML图中的元素例如对象。也可以是这些元素组成的集合,例如对象的集合、包、有序集合等等。
OCL是声明式语言,所以UML中的表达式被提升到了纯建模的领域,而不必理会实现的细节和实现的语言。
相似:
- 都有清晰的数学语义。
- 都包含前置条件,后置条件和不变式。
不同:
- OCL有监护条件而JSF没有,JSF有Modifies而OCL没有。
- OCL更加复杂精细
UML类图
UML时序图
UML状态图
总结
1.单元模块知识点之间的关系
第一单元是对基础的java语言的训练以及面向对象编程思想的熟悉,为后面的三个单元做了铺垫;第二单元是集中的多线程训练,是任务最重的一个单元;第三单元是对出租车的完善设计以及规格训练,比第二单元稍微轻松;第四单元是测试的训练,是对前三个单元的总结。
2.程序设计相关
第一单元我都是直接写代码,一个类方法几百行,写到一半发现不行又重新开始。从第二单元开始我先花时间把指导书看懂,明确需求。然后根据这个需求列出一个框架,根据框架进行细节扩充,不仅缩短了编写代码的时间,也减少了bug的数量,同时debug的过程也相比原来更加简单,代码质量有了明显的提升。
在测试上,我觉得我这学期没有多少进步,前三次作业用printf测试,觉得不太好,准备学学调试,结果就到了多线程没法用调试工具了,所以我打算再学学调试。最后一单元学会了JUnit来测试代码,还是比较方便的。
在设计上,除了第五次作业的觉得我的架构有点问题以外,其他的作业基本上都是中规中矩,按照指导书的要求设计的。有一次互测拿到一个8个包20个类的作业,研究了一下,觉得比自己的设计好太多了,以后要多学习学习。
3.工程化开发
我认为工程化开发不应该是一个人的事情,应该是许多人按照某种约定的规则去开发同一个东西。在实际的工作和产品研发中,我不觉得还有什么事情比降低成本,提高效率更迫切的事情。我更不认同工程化只是项目经理,技术 Leader 去研究和推广的事情。每个团队都是不一样,技术栈不一样,产品不一样,工作环境背景不一样。大公司有大团队,多部门合作。小公司有小团队,各种职能配合更密切,或者你身兼数职,但是并不妨碍工程化的推进,作为团队的一员,非常有义务和必要一起推进工程化,找到符合团队的工作习惯和规范。
关于课程的工程化开发思想,说实话我并没有体会到,也并没有实践。以我对工程化开发的浅薄的认识,我只能判断出那个20个类的大佬的工程化开发思想应该是比我好太多了。
4.期望或建议
抱怨可能很多,但是建议好像没有,毕竟我也想不出什么好办法改变这门课的制度让同学们都很满意。
完结撒花~~~