OO第三单元总结
梳理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和修复情况
本单元三次作业全都没进测试。。。。。主要有以下两类问题:
- 在第一次作业中,将 ArrayList 结构替换成 HashMap 时没有删除干净访问 ArrayList 的语句,导致直接报空指针异常,而且没有删除干净的方法没有在样例里测试到,导致提交以后。
- 在第二三次作业中,算法的正确性未能保证。。。。。
- (在改了在改了。。。
(6)阐述对规格撰写和理解上的心得体会
本单元可以说是系统地对代码的效率进行了一次考验。