代码改变世界

OO第四次博客

2018-06-25 18:11  小削  阅读(242)  评论(0编辑  收藏  举报

一、测试与正确性论证的效果差异

  从效果上来说,测试的直接结果在于了解了一个程序的测试集,可以知道哪些样例程序能过,哪些不能,从而明白程序哪些功能是正确的,哪些功能还存在不完备或未成功实现的情况。正确性论证的结果则是从规格出发,获得了一篇论证文档,论证的基本单位是类,分别论证了对象的有效实现、对象有效性以及方法实现正确性。效果是多方面的,我的体会是论证文档按类分相当于将整个程序按功能单元划分,每个类中的论证是对将程序功能单元抽象化、确保其合理性以及功能单元的行为与设计预期相符的论证,从而确保这三方面的程序设计工作是符合预期和功能要求的,在各个功能单元符合预期要求的基础上,完成了对整个程序的正确性论证。

  优缺点的话,测试的优点主要在于直观而且偏于准确,可以直接从样例得知程序是否有BUG,而且对于测试者来说更有趣味一些,缺点是它将整个程序模块化了,多数情况下我们只会根据错误样例修补程序中不合理的地方,对程序的设计思路和架构帮助不大,另外,构造完备的测试集也可以说是一个挑战。正确性论证的优点则在于它帮助我们分析整个程序中各部分间的联系,做好的话可以捋顺这个程序的设计思路,对以后设计程序也有帮助。缺点则在于正确性论证建立在规格的基础上,不易确保规格是正确的并且论证过程是严谨的,另外,个人感觉测试的话通过输入输出直观体现需求文档对程序的功能要求,而在正确性论证中,程序与需求文档(指导书)是有点割裂的,不能明确地感觉到它们之间的联系。

二、OCL语言与JSF规格

  对象约束语言简称OCL(Object Constraint Language),是一种用于施加在指定的模型元素上约束,形式化的无二义的语言,作为图形符号的补充,说明建模元素的有关细节,例如:约束,前置条件,后置条件等。OCL于1995年由Warmer等人,在IBM设计成功,并开始使用,1997年UML的1.1版本正式采用OCL,2003年1月推出OCL1.4版本。作为形式化语言,OCL基本语言要素包括类型、操作、表达式、语句。

  OCL的原则包括:

  声明性语言,不会改变模型中的内容。

  形式化语言。

  无二义规范语言。

  类型性语言,每一个表达式都有类型。

  易学好用。

  与JSF相比,二者的相似处在于都是形式化的约束语言,具有无二义性,在结构上,OCL主要包括的不变量,前置条件,后置条件和监护规则分别可以对应JSF中的repOK()、REQUIRES、EFFECTS和MODIFIES。

  二者的不同点在于作用时,OCL主要是在编写程序前进行理论建模时基于类图对类进行约束,而JSF则是在功能实现前针对代码的实现进行约束,以确保程序逻辑实现正确。

三、单电梯系统

1.类图

 

 2.时序图

3.状态图

四、学期总结

<1>

1.第一个单元模块是一些简单的java程序设计,主要是让我们熟悉(了解)面向对象的编程思维。

2.第二个单元模块开始接触多线程电梯,IFTTT等较为棘手的编程问题,对整个程序架构与实现的把握有较高要求,让我们的编程能力得到提高与巩固,至此感觉训练的都是我们编程解决问题的能力。

3.第三个单元模块出租车的学习让我们开始接触GUI、JSF等程序设计本身之外的东西,如果说前两个模块是以程序开发者与设计者的视角在思考与完,那么第三个单元模块让我开始更多地从测试者与用户的角度出发考虑问题,学习着规格化的思维。

4.第四个单元模块主要接触了代码的重构与正确性论证,能感受到自己课程前后在设计上的提高,同时论证像一个锦上添花的工作,让我们的编程能力与对程序的处理更加完备。

<2>

从一个单电梯系统上,一开始各个类拎不清,互相依赖,程序存在bug,到重构后基本形成了思维,用调度器类处理队列与电梯,不管是测试或是思路梳理都很通顺,应该说在设计上的进步是巨大的,无论是编程解决问题本身,或是在出租车里编写测试线程等,代码质量提高了,但在如何测试上还很需进步。

<3>

说到工程化开发,会想到OS小内核上纷繁的头文件。工程化开发应该是很多人分工完成一个项目的不同模块,彼此之间用模块化的思维传递输入输出从而最终实现功能,此外工程规格、文档等也是工程化开发的重要部分。

<4>

期望或建议最大还是集中在指导书上吧,也许可以做一个改动集合,枚举一下issue里重要的部分?由衷感谢助教和老师的辛勤,整个课程让人学到了很多,互测等环节有槽点但我感觉瑕不掩瑜吧。