OO第三单元总结

  1. 梳理JML语言的理论基础、应用工具链情况

 

 

首先我们说一下契约式设计,契约式设计(Design by Contract)是一种开发软件的新思路。不妨通过商业活动的中真实的Contract(契约)来理解这个例子:

供应商必须提供某种产品(这是供应商的义务),并且有权期望客户付费(这是供应商的权利)。

客户必须支付费用(这是客户的义务),并且有权得到产品(这是客户的权利)。

双方必须满足应用于合约的某些义务,如法律和规定。

 

从程序设计的角度看需要哪些契约呢:

可接受和不可接受的输入的值或类型,以及它们的含义

返回的值或类型,以及它们的含义

错误和异常的值或类型,以及它们的含义

副作用

先验条件

后验条件

不变性

(不太常见)性能保证,例如所需的时间和空间。我在后文中建立了性能相关的规格约定模式。

 

从JML的原生语法来看,它非常符合契约设计的理念:

requires 描述先验条件

ensures 描述后验条件

old 描述和消除副作用

exceptional_behavior 描述错误和异常

 

所以说JML是教学和学术研究中对于DBC理论探索的一个利器。

 

(2) (选做,能较为完善完成的酌情加分) 部署SMT Solver,至少选择3个主要方法来尝试进行验证,报告结果 有可能要补充JML规格

(3)部署JMLUnitNG/JMLUnit,针对Group接口的实现自动生成测试用例,并结合规格对生成的测试用例和数据进行简要分析

(4)按照作业梳理自己的架构设计,特别分析自己的模型构建策略

本单元的作业一共进行了三次迭代:

    第一次:

 

    第二次:

 

    第三次

 

 

(5)按照作业分析代码实现的bug和修复情况

本单元三次作业全都没进测试。。。。。主要有以下两类问题:

  1. 在第一次作业中,将 ArrayList 结构替换成 HashMap 时没有删除干净访问 ArrayList 的语句,导致直接报空指针异常,而且没有删除干净的方法没有在样例里测试到,导致提交以后。
  2. 在第二三次作业中,算法的正确性未能保证。。。。。
  3. (在改了在改了。。。

 

(6)阐述对规格撰写和理解上的心得体会

本单元可以说是系统地对代码的效率进行了一次考验。

posted on 2020-05-23 20:55  dzcq  阅读(166)  评论(0编辑  收藏  举报