OO第十五次作业
测试与正确性论证
效果差异
测试是通过构造可能的数据集输入然后对程序的运行结果进行比较,而正确性论证是通过对代码的逻辑分析来判断是否存在异常。
优缺点
测试
优点:
- 自由度高
- 能通过测试很好的定位bug
- 结果客观
- 操作相对简单
缺点:
- 难以对应所有的情况,数据集的构造代价很大
- 测试难以保证整个程序的正确性,只能说明程序的一部分情况没有bug
正确性论证
优点:
- 覆盖情况完整
缺点:
- 操作实践较为繁琐
- 抽象时可能会出现论证和实现所需代价相当的情况
比较
测试是黑盒而正确性论证是白盒。测试的自由度高但覆盖的情况相对较少,而正确性论证覆盖的情况全面但自由度较差。
测试和正确性论证的选择主要还是和代码的规模有关,代码量小,测试比较好,代码量大,正确性论证比较好。
OCL(Object Constraint Language)
与 JSF规格 的异同
相同
- 均是一种约束语言。均包含不变量(不变式),前置条件(Requires),后置条件(Effects)
- 均可与具体实现无关
不同
- JSF中多了一个Modifies,OCL中没有对应的部分
- JSF和OCL具体的语法(例如一些具体的符号、单词等)不同
- OCL比JSF更完备,标准更容易实现解析
第十四次作业
类图


顺序图

状态图

总结
四个单元模块
首先从多项式计算到傻瓜电梯,让编程从面向过程改变为面向对象。然后扩展电梯功能,引入了多线程。这一部分除了线程的操作外,还有线程的安全。除了完成规定的任务,还要考虑数据的安全。之后引入规格化设计,在程序功能逐渐完善同时,也要考虑到我们的代码能否被他人看懂,能否便于移植,所以我们更要考虑程序实现中规格的规范,通过前置条件,后置条件对调用方法进行规范,对正确性进行统一的验证。最后引入了很多自动化测试,在代码规模提升后引入程序来进行自动化的覆盖全面的测试,抽象全面的论证程序的正确性。
梳理
从第一次的面向对象的尝试开始,能够准确地设计每个模块,区分各个模块的功能。后面的自动化测试也让我了解到之前的代码有太多冗余的地方,能够进行精简。同时工程化能力也得到了提升。
工程化开发
工程化开发在一个程序代码量较大时是有必要的,对个人或是团队都有所助力。保证了统一性,能更好的维护和管理。
课程
在学习代码规格时需填写自己之前的代码这一点个人认为不太好,最好是一开始就能了解到,再按规格去编写代码。

浙公网安备 33010602011771号