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的主要内容,如果未能解决你的问题,请参考以下文章