zoukankan      html  css  js  c++  java
  • 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进行入门学习,反而是第一单元难度过高,过于劝退。

  • 相关阅读:
    Android架构详解
    wince下实现GPRS上网,程序控制拨号 .
    wince串口蓝牙
    添加蓝牙通讯功能
    c# 注册表.代码示例.(迭代遍历注册表)[Demo]
    Vim Tips
    北京大学与苏州大学学生社会来源研究(1952年2002年) (zz)
    ES6的循环和可迭代对象
    JavaScript之this
    js数组去重的方法
  • 原文地址:https://www.cnblogs.com/Hofie/p/12943596.html
Copyright © 2011-2022 走看看