OO第四次博客作业

[完结撒花]⸜( ⌓̈ )⸝

1.测试与正确性

根据课程的内容,第十三次作业编写测试类对代码覆盖率和分支覆盖率进行了检测;第十四次作业进行了正确性论证。从两次的体会出发论述异同。

对于单元测试,主要满足的是没有冗余的代码,每一句每一个分支都是有用的;也没有欠考虑的情况,因为测试代码需要足够全面。在重构第三次作业的代码编写测试线程后发现一些地方怎么都覆盖不到,最后发现这些部分真的是多余的,第一次写的时候“感觉”这里应该有这么一步,但是仔细地分析一遍发现这种情况在之前已经被涵盖了,因此节省了不少代码行数。

对于正确性论证,主要是保证自始至终repOK为true,编写重点是REQUIRES部分和EFFECTS部分。只有初始状态与任意一步操作都使repOK为true才能确保程序逻辑上验证也符合编写者的预期。

2.OCL与JSF

Object Constraint Language 是一种用于施加在指定的模型元素上约束的语言,作为建模图形的补充、说明建模元素的细节,比如约束、前置条件、后置条件,这一点上与JSF相似。而JSF作为北航独有的格式规范,两者有一些区别:

通过编写JSF,我们知道一段JSF需包含三个部分、涉及线程安全的方法等需要包含五个部分,而OCL的规范却不一样:虽然同样是在说明模型/方法的细节,OCL有自己的变量集合运算符集。除此之外,OCL表达式也有不变量,但是还有分支、蕴含等等。

3.第十四次作业

 

4.总结

4.1

  四个模块我认为是指多项式、电梯、IFTTT、出租车,或者描述为:速成java(基本语法),面向对象基本思想、多线程及线程安全问题、规格四部分。

  若按后者划分来考虑,四者之间是递进与并列的关系:第一周速成了java的基本语法为后面打下基础、接下来两次作业锻炼了面向对象思想、简单休息后又一周填鸭学了多线程、最终在之前所学所写基础上添加规格和论证。

 

4.2

  至于实现的程序,比起“ALS多线程电梯”“出租车调度”(毕竟还有许多bug),还是谈其中一些小的模块吧。 学面向对象思想以前只会面向过程,不能理解面向对象是怎样一种想法;学过之后感觉面向对象是上帝的语言,仿佛世界就是按照一个个类、属性、方法去组织起来的。比如学会了正则表达式模块、把输入搞成一个线程。异常处理也从通篇无脑try catch到开始自己分类。设计上,开始考虑各个类和方法的均衡,尽量减少每个方法的行数,把功能分散开,这样代码重用率高得多;测试上,接触了JUnit5,终于会测试整篇代码了还能看覆盖率美滋滋;质量上,从0开始的怎么都会有进步吧,但是相比优秀的同学们差距好大…

 

4.3

  工程化开发,在我看来不仅是按照标准写一个工程,我觉得应该是一群人用一种通用的思想互相能理解的规范合作完成一个个人力量不可及的任务。也许所谓的“规范”“标准”有很多很多种,但是这样的思想史通用的。

 

4.4

  我的直观感受是前半学期(伴随着OS的压力)速成了各种技能,并在之后的阶梯型作业中这些技能越来越扎实;后半学期轻松了些多是规格的事,但是其繁琐和耗时也不低。我的建议是,增加对“恶意报bug”的判定和惩罚(互相学习没问题,但是以得分为目的报十几个error crash,后期报十几个incomplete的情况对面向对象教学没有任何帮助啊),比如,不只看扣了多少bug多少分,而是考察报的bug质量如何,论证是否严禁,被测者是否心服口服,如果把被测者的感受也加入评分(由助教保证公平和强制实施,杜绝交易),也许周五晚上睡不着觉的情况就会少很多。

posted @ 2018-06-25 14:43  nerdary  阅读(142)  评论(0)    收藏  举报