OO第十五次作业

测试与正确性论证

效果差异

测试是通过构造可能的数据集输入然后对程序的运行结果进行比较,而正确性论证是通过对代码的逻辑分析来判断是否存在异常。

优缺点

测试

优点:

  • 自由度高
  • 能通过测试很好的定位bug
  • 结果客观
  • 操作相对简单

缺点:

  • 难以对应所有的情况,数据集的构造代价很大
  • 测试难以保证整个程序的正确性,只能说明程序的一部分情况没有bug

正确性论证

优点:

  • 覆盖情况完整

缺点:

  • 操作实践较为繁琐
  • 抽象时可能会出现论证和实现所需代价相当的情况

比较

测试是黑盒而正确性论证是白盒。测试的自由度高但覆盖的情况相对较少,而正确性论证覆盖的情况全面但自由度较差。

测试和正确性论证的选择主要还是和代码的规模有关,代码量小,测试比较好,代码量大,正确性论证比较好。

OCL(Object Constraint Language)

与 JSF规格 的异同

相同

  • 均是一种约束语言。均包含不变量(不变式),前置条件(Requires),后置条件(Effects)
  • 均可与具体实现无关

不同

  • JSF中多了一个Modifies,OCL中没有对应的部分
  • JSF和OCL具体的语法(例如一些具体的符号、单词等)不同
  • OCL比JSF更完备,标准更容易实现解析

第十四次作业

类图

 

顺序图

 

 

状态图

总结

四个单元模块

首先从多项式计算到傻瓜电梯,让编程从面向过程改变为面向对象。然后扩展电梯功能,引入了多线程。这一部分除了线程的操作外,还有线程的安全。除了完成规定的任务,还要考虑数据的安全。之后引入规格化设计,在程序功能逐渐完善同时,也要考虑到我们的代码能否被他人看懂,能否便于移植,所以我们更要考虑程序实现中规格的规范,通过前置条件,后置条件对调用方法进行规范,对正确性进行统一的验证。最后引入了很多自动化测试,在代码规模提升后引入程序来进行自动化的覆盖全面的测试,抽象全面的论证程序的正确性。

梳理

从第一次的面向对象的尝试开始,能够准确地设计每个模块,区分各个模块的功能。后面的自动化测试也让我了解到之前的代码有太多冗余的地方,能够进行精简。同时工程化能力也得到了提升。

工程化开发

工程化开发在一个程序代码量较大时是有必要的,对个人或是团队都有所助力。保证了统一性,能更好的维护和管理。

课程

在学习代码规格时需填写自己之前的代码这一点个人认为不太好,最好是一开始就能了解到,再按规格去编写代码。

posted @ 2018-06-24 18:50  rasalghul  Views(150)  Comments(0)    收藏  举报