1、测试与正确性论证的比较java
从方法上看,测试是使用大量测试样例来覆盖测试代码,从而可以检测代码的实现是否正确,功能是否完善。而正确性论证是使用代码的规格和逻辑进行严密的推论和证实,从而验证代码的实现正确性。从优缺点来看,测试的优势在于可以直观地看出测试的结果是否正确,而缺点在于难以构造覆盖完整的测试集;正确性论证的优势在于可以保证正确性和覆盖率,可是不够直观,并且论证错误不易察觉,也就是不易二次检查。程序员
所以,在对一个程序进行设计测试检查的时候,须要两者同时使用,相互补充,使用测试集测试程序功能的完备性,使用正确性论证验证代码的逻辑正确性和严密的覆盖全部代码,这样才能对程序进行充分的测试验证。编程
2、OCL与JSF的比较多线程
OCL,即Object Constraint Language, 中文译为对象约束语言。OCL是一种用来在指定的模型单元上施加约束的语言。同时OCL也不只用来写约束,还可以对UML图中的任何元素写表达式。OCL是约束和查询语言,有一个形式化的数学语义,而且容许用户定义本身的OCL符号集。学习
与JSF的相同之处:OCL和JSF都是形式化的语言,都有一样的规格即前置、后置条件以及不变式。测试
与JSF的不一样之处:JSF基本上使用的是逻辑表达式,少许使用天然语言。而OCL的表达式具备类型,且数据也有基本类型,这点和JSF有较大区别。spa
3、UML图线程
类图:debug
时序图:
设计
状态图:
4、学期总结
1. 知识点总结:
第一阶段:从多项式加减到ALS电梯,一个入门的阶段,主要的知识是面向对象编程的思想,以及java语言一些基础的语法,好比正则匹配等等,较为简单,属于经验怪,前期给玩家升级用的。
第二阶段:从多线程电梯、IFTTT到第一次出租车做业,一个逐渐熟悉的阶段。主要讲解了多线程的机制,竞争和同步机制、文件监测和操做等等知识,同时对规格有了必定的要求,代码质量也更高了。这属于精英怪,对于在第一阶段没有花时间认真打怪升级的玩家来讲,可能就会被这个阶段的精英怪秒杀了,而后消耗一次复活(无效做业)的机会来从头打怪升级,苦肝到深夜。
第三阶段:对出租车进行功能上的完善,添加了许多功能。这个阶段主要是对程序有了规格化要求的设计,包括JSF规格的书写,和程序的规格化设计,在整体的代码量上也有显著提高。属于boss级别的怪物,须要苦战几日,熬夜连战,才能最后干掉boss。
第四阶段:这个阶段的主要做业是对以往的代码进行验证和测试,以及正确性论证。虽然整体做业量小了不少,不用写大量代码,也不用构造复杂的结构。可是这个阶段的知识是很重要的,放在课程的最后,重要性也不言而喻。
2. 我的总结:
从一开始的多项式加减,到最后的功能强大的出租车,总共9次编程做业,说多很少,说少很多,总而言之,对于个人编程能力仍是有较大提高的。最开始的做业,对于面向对象的思想仍是不够理解,写出来的程序只是有面向对象的外壳,可是实际上仍是一个面向过程的程序,一个方法占了100多行,质量也不高,debug还十分困难。到最后几回做业时,对面向对象已经有了比较深刻的看法,对类和方法的区分比较严格,方法的代码量也很少,嵌套深度也少了,把各个模块和功能安排得比较明白,质量有了明显的提高,debug也容易多了。尽管如此,但仍是有一些不足的地方,须要更深刻的学习。
3. 工程化开发:
我认为工程化开发就是,首先须要规范设计好每一个功能的规格。而后将各个功能的实现分发给不一样的程序员实现,团队的各个成员负责本身的模块,同时又能够相互协调合做,提升整体效率,下降成本。在此基础上,良好的规格化设计和封装是必要的,大部分程序须要实现大量的功能,这对于工程化开发是必不可少的条件。
4. 对课程的建议:
其实要说平时的吐槽倒挺多的,真要给实际建议的时候,还找不到几条。首先就是指导书的问题,我相信绝大部分的同窗都会提到这个,指导书写的实在是很粗糙,对于一些细节上的问题,还有几回做业的扣分点都交代得不清楚。有不少次状况就是,一些摸棱两可的问题,一开始说readme自行定义,而后发现这些条件又是必要的,在提交做业前忽然通知说要改指导书的内容,这让不少同窗心态会崩的。还有就是在issue里提到要更改的地方,没有正式的通知,最后询问获得的结果是本身没看issues。虽然有各类吐槽,但确实找不到更好的替代方法,包括互测的面向运气得分机制。但愿学弟学妹们能存活吧。。