程序的测试分为大小不一样的几个阶段,咱们在这个阶段的做业中进行的是基于JUnit测试框架的单元测试。java
单元测试是指对程序中最小的可测试单元进行测试。咱们测试的单元是方法。单元测试的特色使是从结果出发,寻找代码的漏洞。一个全面的单元测试可以对覆盖到方法执行过程当中遇到的全部状况,也就是覆盖全部分支条件。经过单元测试则说明该方法可以彻底符合指望的规格。所以,单元测试的优势是可以确保一个方法的正确性。然而构造一个完美覆盖的单元测试很难,尤为是当原方法的分支条件不少的时候。编写单元测试一般要花费比编写原方法更多的时间。编程
正确性论证也是证实方法是否符合指望规格的手段。与单元测试从结果出发不一样,正确性论证是从代码逻辑出发,论证方法如何完成规格。正确性论证更像是数学中的证实题,须要严谨严密的逻辑思惟。完成正确性论证的前提是对代码逻辑彻底掌握。安全
正确性论证可以对全部分支进行论证,较单元测试来讲更容易达到彻底覆盖,然而正确性论证过程较为复杂,相比单元测试"粗暴"地判断对错来讲更难保证论证结果的正确性。多线程
因为两者具备各有优劣,能够互相补充,两者兼用可以更充分的保证代码的正确性。框架
OCL(object constraint language)语言即对象约束语言。它是一种用于约束指定模型的定义,形式化的没有二义性的语言。模块化
OCL拥有本身的语法体系,有数据类型和运算符,更优高级数据类型例如群、集合、袋和序列。在对象约束方面,OCL表达式包括不变量、前置条件和后置条件等。单元测试
OCL同咱们学习的JSF用途相同,都是用于描述对象的约束规范的形式化语言。用两者描述的约束都是没有二义性的。不一样的是,OCL有一套比JSF更加完备高级的语法结构,而JSF只有二阶逻辑结构,没有高级的分支语句等,也没有对数据类型的描述。学习
UML类图:测试
UML顺序图:优化
UML状态图:
课程分为四个模块。
第一个模块主要熟悉面向对象编程方法以及对象机制。这个模块是对java语言和面向对象的初步接触。
第二个模块是多线程编程,以及线程安全问题。这个模块训练了多线程的思惟。
第三个模块是规格设计。这个模块咱们将代码规范化,使代码更加规格化、模块化。
第四个模块是基于规格的测试与论证。这个模块学习了更加严谨规范的测试方式。
能够说这四个模块之间就是四层积木的关系,层层递进,让咱们从零开始体会面向对象程序从构思、实现到测试的完整过程,并在这个过程当中逐渐强化面向对象的编程思想。
在此以前彻底没有接触过面向对象有关知识,编程还停留在一个程序几个方法的过程式编程中。在第一次多项式的编程中,我仅仅使用了两个对象,且没有作到对象的封装,这两个对象之间相互调用,逻辑十分混乱;第三次ALS电梯在重构以前更是在调度类中一个方法写了两百多行,彻底没有作到方法的抽象,致使程序十分臃肿,不少BUG发现了却没法定位修复;
从多线程电梯开始决定优化代码结构,至此开始,之后的做业中慢慢造成了面向对象的基本思想和思路框架,代码结构也在一次次训练中获得改善。
总的来讲进步很是明显。经过这门课程的高强度训练,如今可以比较完整的从问题中抽象出对象并进行模块化的编程,代码的规范程度也有很大提升。但仍有不少不足之处,例如对接口的理解感受不是很深入。
工程化即系统化、模块化、规范化的过程。指将具备必定规模数量的单个系统或功能部件,按照必定的规范,组合成一个模块鲜明、系统性强的总体。工程化开发的关键是封装,将各类资源封装成一个个模块以后,咱们没必要再关心该封装下的具体细节,只须要将这些模块组装成一个总体就可以造成一个完整的工程。
面向对象的设计原则与工程化开发中模块化的要求不谋而合,然而面向对象设计缺少清晰的层次关系,面对复杂的操做过程时实现效果不佳,涉及多个对象之间共同协做时也会显得不那么灵活,这是面相对象设计的一个不足之处。
规格设计是工程化开发最重要的一环。良好的规格约束可以便于团队合做与相互理解,实现更好的协做关系。