OO第三次博客作业

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

1.理论

  1.1 简介:

    JML是用于对Java程序进行规格化设计的一种表示语言,是一种行为接口规格语言。

  1.2  用法:

    (1)开展规格化设计。这样交给代码实现人员的将不是可能带有内在模糊性的自然语言描述,而是逻辑严格的规

    格。
    (2)针对已有的代码实现,书写其对应的规格,从而提高代码的可维护性。这在遗留代码的维护方面具有特别重要
    的意义。
  1.3 组成部分:
    1.3.1 表达式
       1.3.1.1 原子表达式
         包括 : \result , \old , \not_assigned , \not_modified , \nonnullelments 等。
       1.3.1.2 量化表达式
         包括 : \forall , \exists , \sum , \product , \max等等。
       1.3.1.3 集合表达式
         可以在JML中构造一个局部的集合,明确集合中可以包含的元素。
      1.3.2 规格·
       1.3.2.1 方法规格
         前置条件 : 通过requires字句来表示。
         后置条件 :通过ensures字句来表示。
         副作用范围限定 :通过assignable字句来表示。
       1.3.2.2 类型规格
         不变式 (invariant) {静态不变式,实例不变式}
        状态变化约束 (constraint)。
2.工具链使用情况
  JMLUnitNG/JMLUnit:自动生成测试用例进行测试。
 
 
二:部署JMLUnitNG/JMLUnit,针对Graph接口的实现自动生成测试用例,并结合规格对生成的测试用例和数据进行简要分析
 
下面通过如图所示方法进行检测
 

 写好程序后,src目录下执行命令行

 

结果如下

 

从结果可以看出:测试数据进行了边缘测试,并且结果符合预期,但是貌似测试的重点在于数据溢出以及对象为空等方面,程序逻辑似乎并没有很注重检测(Maybe this test case is too simple!)

 
三:按照作业梳理自己的架构设计,并特别分析迭代中对架构的重构
 
1.第九次作业
1.1类图:
 

1.2度量

   本次作业共三个类,除了主类,剩下的两个类均为作业要实现继承的类,并无多余方法,只实现了要求的方法。

  复杂度:各类复杂度均比较低。

2.第十次作业
 2.1类图:

 2.2度量

   本次作业共6个类,这次作业主要求最短路径,于是我建立了一个Minpath类,用来接受图,并进行最短路的计算,Graph里增加了建图的方法,采用邻接表数据结构。

  复杂度:由度量图可得各种复杂度都较低。

  重构:本次作业只增加了一个专门接受图并提供求最短路方法的类,并没有重构。

3.第十一次作业
3.1类图:
 

3.2度量

  本次作业共6个类,这次作业新增了查询不满意度,最小票价等功能,实际上这些查询都能通过拆点转化为求最短路问。

  复杂度:由度量图可得除了ev(G)稍稍比上次升高一些,其他复杂度依旧保持较低。

  重构:本次作业依旧采用Minpath这个类接受图并计算最短路,而新增的查询方法都能通过把原来的图进行拆点转化为求最短路问题,因此只需要在Minpath里面新增一个把图进行   拆点得到新的图的方法即可,所以本次作业依然没有重构。

 

四:按照作业分析代码实现的bug和修复情况

  前两次作业均没有bug,第三次作业由于那段时间别的课作业很多,因此写完了代码后交上去把中测过了就去完成别的科目的DDL去了,没有时间进行单元化测试,结果导致强测成绩火葬场,一片wrong answer,心里一阵凉凉,回去分析bug发现,是remove path的时候,某个图忘了更新了,其他图都进行了更新。虽然这个伤心的结局是因为没有时间测试导致的,但通过这里也可以看出测试对于程序的极其重要性!

 

五:心得体会

  这三次作业的难度以及复杂度是逐渐递增的,观察容易发现,三次作业的规格代码越来越长,越来越复杂,尽管如此,一个可靠的工程代码少不了规格的帮助,有了JML,可以从逻辑上对每一个方法进行检测,例如检查repok等,使得找出bug变得容易。

  最后,感谢助教和老师们的辛勤付出!

转载于:https://www.cnblogs.com/bug2017/p/10908135.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值