1、测试与正确性论证的效果差别java
测试,顾名思义就是咱们暴力用大量数据轰炸编写的程序的过程。平常的OO过程当中,咱们常常互相寻求“测试集”,正是由于测试使用特定数据对咱们的功能进行针对性测试,好处在于能够很直观很明显的找到bug所在,而且复现性也很强。可是偏向于穷举,也就是咱们日常对于本身的数据集太小,而担忧本身有没有彻底覆盖全部的可能,即便本身测试的过程当中没有发现问题,也内心惴惴不安,从而寻求更大测试集。这种方式便于实现与分析,可是不能彻底验证程序正确性。编程
正确性论证,就是经过分析需求,撰写规格后,论证程序符合规格的过程,偏向于验证程序的思路走向,逻辑判断等问题,即程序有没有按照咱们设想的执行。能够从根本上保证其实现正确,总体剖析了执行过程,但并不经过具体数据,而是理论分析,因为判断多为布尔型语言等,编写过程和阅读会比较费时间,可是验证上很是简单。安全
就我我的来说,从测试中受益不浅,由于大量的测试数据集的确为我de了很多bug,而正确性论证虽然理论上讲不须要付出那么多精力就能够确保本身程序正确,可是我实际并无那次做业真正使用它完成检查过程,但愿能有一个机会完全让我了解正确性论证的优越之处。多线程
2、OCL语言与JSF规格框架
OCL是对象约束语言,用来进行对象的约束及定义,主要用于在建模时做为图形符号的补充,含有约束,前置条件,后置条件等。不变量是在属性的生命周期内保持为真的规则,前置条件是一个操做被调用时须要知足的约束,即知足规格要求。后置条件是操做结束后必定为真的约束,即完成了什么操做。监护规则是对象从一种状态转变为另外一种状态前值必须为真的约束。测试
他们的相同点在于他们都是形式化的约束语言,在程序中进行无二义的逻辑约束。结构上也具备类似性,OCL主要包括的不变量,前置条件,后置条件,监护规则分别对应JSF对应着repOK(),REQUIRES,EFFECTS和MODIFIES。spa
他们的不一样点在于做用的时间不一样,OCL主要是在编写程序前,理论建模时刻对每一个类进行明确的约束,而JSF主要在功能实现前进行约束以确保程序逻辑实现正确。线程
3、第十四次做业模型图设计
UML类图3d
UML时序图
状态图
4、学期总结
一、四个单元模块知识点之间的关系
第一单元从多项式计算到傻瓜电梯,主要创建了从面向过程到面向对象编程的思想转变,在代码的编写中体会java面向对象的思想,把一个程序的执行分散到对象中,去符合高内聚低耦合的规则,便于修改和理解。
第二单元扩展电梯功能,引入线程的概念,同时处理多个任务是咱们本次的要求,多线程在带来高工做效率的同时,也引入了线程安全的概念,如何保证进程的互斥和资源的共享成为了咱们最须要注意的问题。
第三单元引入规格化设计,在程序功能逐渐完善同时,也要考虑到咱们的代码可否被他人看懂,可否便于移植,因此咱们更要考虑程序实现中规格的规范,经过前置条件,后置条件对调用方法进行规范,对正确性进行统一的验证。
第四单元主要引入了不少自动化测试,咱们在保证程序功能正确的同时,程序规模也会日渐增长,此时经过人工处理,判断成为难事,一是基于输入借助软件生成自动化覆盖测试,而是经过理论层面论证程序正确性。
二、梳理与进步
程序功能上,明确了类的分工,经过抽象,继承对每次做业的功能进行划分,防止出现功能太多或太少的类,尽可能均衡,而且便于各个类的扩展,精简代码的逻辑和行数,命名的精简和见名知意性,加强其可读性和可维护性。
测试方面,对于测试的进行了从无脑的覆盖,到针对分支树的测试数据设计,到数据与正确性论证的结合,更加工程化,更加合理。
三、对工程化开发的理解
工程化开发,在我看来是在写代码的漫漫长路上转阶段的一步,是从做业到项目的转变,由于做业能够是一我的完成的,你写的逻辑,你测试的方法你本身知道就能够工做,可是项目中,咱们须要考虑到不少事情达成共识,例如变量的命名规则,类的设计,接口的统一,只有明确了这些,才可以保证代码能够互相开发,互相阅读,互相协做,一个明确的规范就是工程化开发的第一要义。
四、指望与建议
指望把规格撰写的要求从第一次做业开始布置,这样的好处在于咱们能够在一开始就对本身的程序使用框架来安排好各个部分和方法是实现,以防出现须要重构的状况,而且取消JSF的扣分,以便于同窗们压力过大,增强对于面向对象思想的检查,再考虑功能的实现,能够先留几回规格框架的检查。同时也要感谢老师和助教一学期以来的付出!