BUAA_OO_Unit3_Review

OO_Unit2_Review

一.JML语言的理论基础、应用工具链

1.JML语言的理论基础

Java Modeling Language(JML)是一种规范的注释语言,用于规定类的行为和接口。

JML的优点:

1、其规范性不仅使得注释更加准确。

2、同时凭此我们也可以借助JML的工具链来对某个类进行自动测试

2.jml工具链

openJML:检查JML注释的完整性。

JMLUnitNG:对有JML注释的类或者方法进行自动测例。

二. 部署JMLUnitNG

以第三次作业的addRelation函数举例,实现过程参考https://www.cnblogs.com/nbao01/p/12935615.html。

C:\Users\HooFee\Desktop\Work\OO\Unit3\HW3>java -cp jmlunitng.jar test.MyGroup_JML_Test
[TestNG] Running:
  Command line suite

Passed: <>.addRelationn(-2147483648, -2147483648, -2147483648)
Passed: <>.addRelationn(-2147483648, -2147483648, -2147483648)
Passed: <>.addRelationn(-2147483648, -2147483648, -2147483648)
Passed: <>.addRelationn(0, -2147483648, -2147483648)
Passed: <>.addRelationn(0, -2147483648, -2147483648)
Passed: <>.addRelationn(0, -2147483648, -2147483648)
Passed: <>.addRelationn(2147483647, -2147483648, -2147483648)
Passed: <>.addRelationn(2147483647, -2147483648, -2147483648)
Passed: <>.addRelationn(2147483647, 0, -2147483648)
Passed: <>.addRelationn(2147483647, 0, -2147483648)
Passed: <>.addRelationn(2147483647, 0, -2147483648)
Passed: <>.addRelationn(-2147483648, 2147483647, -2147483648)
Passed: <>.addRelationn(-2147483648, 2147483647, -2147483648)
Passed: <>.addRelationn(-2147483648, 2147483647, -2147483648)
Passed: <>.addRelationn(0, 2147483647, -2147483648)
Passed: <>.addRelationn(0, 2147483647, -2147483648)
Passed: <>.addRelationn(0, 2147483647, -2147483648)
Passed: <>.addRelationn(2147483647, 2147483647, -2147483648)
Passed: <>.addRelationn(2147483647, 2147483647, -2147483648)
Passed: <>.addRelationn(2147483647, 2147483647, -2147483648)
Passed: <>.addRelationn(-2147483648, -2147483648, 0)
Passed: <>.addRelationn(-2147483648, -2147483648, 0)
Passed: <>.addRelationn(-2147483648, -2147483648, 0)
Passed: <>.addRelationn(0, -2147483648, 0)
Passed: <>.addRelationn(0, -2147483648, 0)
Passed: <>.addRelationn(0, -2147483648, 0)
Passed: <>.addRelationn(2147483647, -2147483648, 0)
Passed: <>.addRelationn(2147483647, -2147483648, 0)
Passed: <>.addRelationn(2147483647, -2147483648, 0)
Passed: <>.addRelationn(-2147483648, 0, 0)
Passed: <>.addRelationn(-2147483648, 0, 0)
Passed: <>.addRelationn(-2147483648, 0, 0)
Passed: <>.addRelationn(0, 0, 0)
Passed: <>.addRelationn(0, 0, 0)
Passed: <>.addRelationn(0, 0, 0)
Passed: <>.addRelationn(2147483647, 0, 0)
Passed: <>.addRelationn(2147483647, 0, 0)
Passed: <>.addRelationn(2147483647, 0, 0)
Passed: <>.addRelationn(-2147483648, 2147483647, 0)
Passed: <>.addRelationn(-2147483648, 2147483647, 0)
Passed: <>.addRelationn(-2147483648, 2147483647, 0)
Passed: <>.addRelationn(0, 2147483647, 0)
Passed: <>.addRelationn(0, 2147483647, 0)
Passed: <>.addRelationn(0, 2147483647, 0)
Passed: <>.addRelationn(2147483647, 2147483647, 0)
Passed: <>.addRelationn(2147483647, 2147483647, 0)
Passed: <>.addRelationn(2147483647, 2147483647, 0)
Passed: <>.addRelationn(-2147483648, -2147483648, 2147483647)
Passed: <>.addRelationn(-2147483648, -2147483648, 2147483647)
Passed: <>.addRelationn(-2147483648, -2147483648, 2147483647)
Passed: <>.addRelationn(0, -2147483648, 2147483647)
Passed: <>.addRelationn(0, -2147483648, 2147483647)
Passed: <>.addRelationn(0, -2147483648, 2147483647)
Passed: <>.addRelationn(2147483647, -2147483648, 2147483647)
Passed: <>.addRelationn(2147483647, -2147483648, 2147483647)
Passed: <>.addRelationn(2147483647, -2147483648, 2147483647)
Passed: <>.addRelationn(-2147483648, 0, 2147483647)
Passed: <>.addRelationn(-2147483648, 0, 2147483647)
Passed: <>.addRelationn(-2147483648, 0, 2147483647)

===============================================
Command line suite
Total tests run: 59, Failures: 0, Skips: 0
===============================================

三.作业结构的结构度量、策略分析及BUG分析

1.WORK1

BUAA_OO_Unit3_Review_第1张图片

UML

 

BUAA_OO_Unit3_Review_第2张图片

 

 方法复杂度(1)BUAA_OO_Unit3_Review_第3张图片

 

 方法复杂度(2)

BUAA_OO_Unit3_Review_第4张图片

 

 类复杂度

 

2.WORK2

BUAA_OO_Unit3_Review_第5张图片

UML

BUAA_OO_Unit3_Review_第6张图片

 

 方法复杂度(1)

BUAA_OO_Unit3_Review_第7张图片

 

 方法复杂度(2)

BUAA_OO_Unit3_Review_第8张图片

类复杂度

 

3.WORK3

BUAA_OO_Unit3_Review_第9张图片

UML

BUAA_OO_Unit3_Review_第10张图片

 方法复杂度(1)

 BUAA_OO_Unit3_Review_第11张图片

 

 方法复杂度(2)

BUAA_OO_Unit3_Review_第12张图片

类复杂度

 

4.BUG分析

本单元的问题主要集中于CPU用时的优化问题,也即算法的优化问题。解决CTLE,我主要的方向有两个。

  1.对容器种类的优化:由于本单元作业频繁用到查询contain操作,所以我用了contain操作效率更高的HashMap结构来优化这个环节。

  2.对多重循环的优化:本单元作业在强测阶段的数据量相当庞大,造成Group类元素个数过多,从而如果某个函数出现多重循环,将造成复杂度爆炸性增长。对此,我对每层循环的次数进行优化,将Xn循环转换成X*Y*Z*....(X>=Y>=Z>=...)。

 四.心得体会

  本次作业实现难度较低,但是对算法的优化要求较高,由于我在前两个单元习惯了能过中测就算胜利的思维,导致我在本单元前两次作业强测爆炸。但是总体上,难度还是相较前两单元低。在此我也建议课程组可以调整一下OO单元作业的次序,我认为第三单元完全可以作为第一单元来指导学生对JAVA进行入门学习,反而是第一单元难度过高,过于劝退。

 

你可能感兴趣的:(BUAA_OO_Unit3_Review)