BUAA_OO_Unit3_Review

Posted hofie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:UsersHooFeeDesktopWorkOOUnit3HW3>java -cp jmlunitng.jar test.MyGroup_JML_Test
[TestNG] Running:
  Command line suite

Passed: <<test.MyGroup@6c68566e>>.addRelationn(-2147483648, -2147483648, -2147483648)
Passed: <<test.MyGroup@5easddf8f>>.addRelationn(-2147483648, -2147483648, -2147483648)
Passed: <<test.MyGroup@5f102e87>>.addRelationn(-2147483648, -2147483648, -2147483648)
Passed: <<test.MyGroup@27ab69cd>>.addRelationn(0, -2147483648, -2147483648)
Passed: <<test.MyGroup@5f7892bb>>.addRelationn(0, -2147483648, -2147483648)
Passed: <<test.MyGroup@6fdb1f78>>.addRelationn(0, -2147483648, -2147483648)
Passed: <<test.MyGroup@51016012>>.addRelationn(2147483647, -2147483648, -2147483648)
Passed: <<test.MyGroup@29444d75>>.addRelationn(2147483647, -2147483648, -2147483648)
Passed: <<test.MyGroup@768debd>>.addRelationn(2147483647, 0, -2147483648)
Passed: <<test.MyGroup@490d6c15>>.addRelationn(2147483647, 0, -2147483648)
Passed: <<test.MyGroup@7d4793a8>>.addRelationn(2147483647, 0, -2147483648)
Passed: <<test.MyGroup@449b2d27>>.addRelationn(-2147483648, 2147483647, -2147483648)
Passed: <<test.MyGroup@5479e3f>>.addRelationn(-2147483648, 2147483647, -2147483648)
Passed: <<test.MyGroup@27082746>>.addRelationn(-2147483648, 2147483647, -2147483648)
Passed: <<test.MyGroup@66133adc>>.addRelationn(0, 2147483647, -2147483648)
Passed: <<test.MyGroup@7bfcd12c>>.addRelationn(0, 2147483647, -2147483648)
Passed: <<test.MyGroup@42f30e0a>>.addRelationn(0, 2147483647, -2147483648)
Passed: <<test.MyGroup@24273305>>.addRelationn(2147483647, 2147483647, -2147483648)
Passed: <<test.MyGroup@5b1d2887>>.addRelationn(2147483647, 2147483647, -2147483648)
Passed: <<test.MyGroup@46f5f779>>.addRelationn(2147483647, 2147483647, -2147483648)
Passed: <<test.MyGroup@1c2c22f3>>.addRelationn(-2147483648, -2147483648, 0)
Passed: <<test.MyGroup@18e8568>>.addRelationn(-2147483648, -2147483648, 0)
Passed: <<test.MyGroup@33e5ccce>>.addRelationn(-2147483648, -2147483648, 0)
Passed: <<test.MyGroup@5a42bbf4>>.addRelationn(0, -2147483648, 0)
Passed: <<test.MyGroup@270421f5>>.addRelationn(0, -2147483648, 0)
Passed: <<test.MyGroup@52d455b8>>.addRelationn(0, -2147483648, 0)
Passed: <<test.MyGroup@4f4a7090>>.addRelationn(2147483647, -2147483648, 0)
Passed: <<test.MyGroup@18ef96>>.addRelationn(2147483647, -2147483648, 0)
Passed: <<test.MyGroup@6956de9>>.addRelationn(2147483647, -2147483648, 0)
Passed: <<test.MyGroup@769c9116>>.addRelationn(-2147483648, 0, 0)
Passed: <<test.MyGroup@6aceb1a5>>.addRelationn(-2147483648, 0, 0)
Passed: <<test.MyGroup@ba4d54>>.addRelationn(-2147483648, 0, 0)
Passed: <<test.MyGroup@12bc6874>>.addRelationn(0, 0, 0)
Passed: <<test.MyGroup@de0a01f>>.addRelationn(0, 0, 0)
Passed: <<test.MyGroup@4c75cab9>>.addRelationn(0, 0, 0)
Passed: <<test.MyGroup@1ef7fe8e>>.addRelationn(2147483647, 0, 0)
Passed: <<test.MyGroup@6f79caec>>.addRelationn(2147483647, 0, 0)
Passed: <<test.MyGroup@67117f44>>.addRelationn(2147483647, 0, 0)
Passed: <<test.MyGroup@5d3411d>>.addRelationn(-2147483648, 2147483647, 0)
Passed: <<test.MyGroup@2471cca7>>.addRelationn(-2147483648, 2147483647, 0)
Passed: <<test.MyGroup@5fe5c6f>>.addRelationn(-2147483648, 2147483647, 0)
Passed: <<test.MyGroup@6979e8cb>>.addRelationn(0, 2147483647, 0)
Passed: <<test.MyGroup@763d9750>>.addRelationn(0, 2147483647, 0)
Passed: <<test.MyGroup@5c0369c4>>.addRelationn(0, 2147483647, 0)
Passed: <<test.MyGroup@2be94b0f>>.addRelationn(2147483647, 2147483647, 0)
Passed: <<test.MyGroup@d70c109>>.addRelationn(2147483647, 2147483647, 0)
Passed: <<test.MyGroup@17ed40e0>>.addRelationn(2147483647, 2147483647, 0)
Passed: <<test.MyGroup@50675690>>.addRelationn(-2147483648, -2147483648, 2147483647)
Passed: <<test.MyGroup@31b7dea0>>.addRelationn(-2147483648, -2147483648, 2147483647)
Passed: <<test.MyGroup@3ac42916>>.addRelationn(-2147483648, -2147483648, 2147483647)
Passed: <<test.MyGroup@47d384ee>>.addRelationn(0, -2147483648, 2147483647)
Passed: <<test.MyGroup@2d6a9952>>.addRelationn(0, -2147483648, 2147483647)
Passed: <<test.MyGroup@22a71081>>.addRelationn(0, -2147483648, 2147483647)
Passed: <<test.MyGroup@3930015a>>.addRelationn(2147483647, -2147483648, 2147483647)
Passed: <<test.MyGroup@629f0666>>.addRelationn(2147483647, -2147483648, 2147483647)
Passed: <<test.MyGroup@1bc6a36e>>.addRelationn(2147483647, -2147483648, 2147483647)
Passed: <<test.MyGroup@1ff8b8f>>.addRelationn(-2147483648, 0, 2147483647)
Passed: <<test.MyGroup@387c703b>>.addRelationn(-2147483648, 0, 2147483647)
Passed: <<test.MyGroup@224aed64>>.addRelationn(-2147483648, 0, 2147483647)

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

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

1.WORK1

技术图片

UML

 

技术图片

 

 方法复杂度(1)技术图片

 

 方法复杂度(2)

技术图片

 

 类复杂度

 

2.WORK2

技术图片

UML

技术图片

 

 方法复杂度(1)

技术图片

 

 方法复杂度(2)

技术图片

类复杂度

 

3.WORK3

技术图片

UML

技术图片

 方法复杂度(1)

 技术图片

 

 方法复杂度(2)

技术图片

类复杂度

 

4.BUG分析

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

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

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

 四.心得体会

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

 

以上是关于BUAA_OO_Unit3_Review的主要内容,如果未能解决你的问题,请参考以下文章

2016年3月31日_应化所群体Review

代码review_学习笔记_1

C++Review4_代码的组织

BUAA_OS_2020_Lab3_Code_Review

BUAA_OS_2020_Lab3_Code_Review

crucible VS gerrit