OO13-14总结

1.论述测试与正确性论证的效果差异,比较其优缺点

  测试是过去我们常用来测试代码正确性的方法。而第十三次作业编写的junit代码,是对于每个函数,事先写好规格,再基于前置条件和后置条件对输入划分,利用多组测试数据,检查方法输出是否满足后置条件。

  • 优点:

    • 易于找出不符合前置条件后置条件的BUG。
    • 测试有针对性,编写起来方便快速。
  • 缺点:

    • 能够找出BUG,但不能保证程序没有BUG。
    • 覆盖一个函数所有可能需要构造的样例数目并不少。 
    • (由于规格写的不够全面严谨,许多方法的执行效果需要自己事先预估)

  正确性论证通过代码及代码规格进行逻辑分析,以论证代码是否符合设计。

  • 优点:

    • 全面覆盖。
  • 缺点:

    • 有些方法论证起来难度大,很难保证正确论证。
    • 进行整体的论证需要大量时间。
    • 建立在已有代码上,此时不太方便大改代码。

2. 调研OCL语言,并比较其与课程所介绍的JSF规格之间的相似和不同之处

  OCL(Object Constraint Language)即对象约束语言,是一种指示用户建模系统中的限制方式。它可以用来更好地定义对象的行为,并为任何的类元指定约束。利用OCL表达式附加在模型元素上的条件和限制来表现对该对象的约束,其中包括加在模型元素上的不变量或约束的表达式、附加在操作和方法上的前置条件和后置条件等。

相同:

  • 均有不变量、前置条件、后置条件这些用于限制行为的概念
  • 均有一个清晰、形式化的数学语义,希望能藉此达到无二义性

不同:

  OCL有上下文、定义的基本类型和基本数据结构,还提供多种有语法表达式。因此更偏向于建模的OCL比JSF表达能力更强,且更加严密。


3. 根据第十四次作业的单电梯系统,针对调度器、电梯、请求队列和请求,至少整理出 一幅UML类图、一幅顺序图和一幅状态图,并使用 图(graph)来表示出模型

   类图:

时序图:

状态图:

 

 

 4. 整理总结一个学期所学所练

   4.1阐述四个单元模块知识点之间的关系

  第一个单元是接触Java,接触面向对象语言。因此主要的任务量在于学习Java语法以来实现功能。

  第二个单元接触多线程。通过电梯、文件、出租车三连让我们了解线程安全控制。

  第三个单元开始集中设计,描述代码规格、抽象。让我们接触到工程软件设计。

  第四个单元开始对设计好的程序进行测试、正确性论证。

  因此大致是先做到能写出一个程序,然后了解怎样在程序中运用多线程设计,之后已有写程序的基础时让我们更注重设计抽象,使得设计程序更有规章。最后在交付程序前完成程序正确性的验证。

  4.2梳理自己所设计实现的程序,分析自己在设计、测试和质量上的进步

  设计上:当遇到要新写的功能时,会想到是否是一个类,怎样抽象状态功能。

  测试上:当时IFTTT的测试是整个程序一起测,因此找Bug需要依靠各种中间输出以及肉眼查错。而到后来的程序能够对每个方法进行测试,也因此找到了一些小Bug。

  质量上:不会出现第一次作业的一个方法100行。方法都能控制在30行。并且在变量命名上进步了,愿意写全一个单词了。

   4.3阐述自己对工程化开发的理解

  工程化开发需要多个人合作开发一个程序。因此更强调一个规则,使得大家能够高效率的合作。

  就OO作业而言,大概就是认真读懂指导书,分析需求,在纸上认真画一下类和功能,最后细化。再根据issue(用户反馈?)对自己的程序进行修正。

   4.4对课程的任何期望或建议

  第一个建议是统一答疑群。因为有些问题助教们的意见并不相同,这样可以更好地统一标准。可以要求除问问题外禁水。

  第一个期望是适当减小作业量。在本学期的大半时间,我的一周都是OO。周六日读指导书,周一周二周三写,周四周五互测。(可能是我太菜的原因)

  第二个建议是统一issue、指导书、答疑。这样标准更统一。(建议追加助教工资使得助教们更加热情回答issue)

posted @ 2018-06-25 19:54  AAO  阅读(160)  评论(0编辑  收藏  举报