zoukankan      html  css  js  c++  java
  • OO第三单元作业总结

    • (1)梳理JML语言的理论基础、应用工具链情况

    JML(Java Modeling Language)是用于对Java程序进行规格化设计的一种表示语言。JML将注释添加到 Java 代码中,这样我们就可以确定方法所执行的内容,而不必说明它们如何做到这一点。有了 JML,我们就可以描述方法预期的功能,无需考虑实现。JML主要用于开展规格化设计,或者针对已有的代码实现,书写其规格,从而提高代码的可维护性。

    工具:

    SMT solver:使用SMT solver工具可以静态分析代码,检查代码对规格的满足情况。


    JMLUnitNG:基于jml来自动生成测试用例。

    • (3)部署JMLUnitNG/JMLUnit。

    下面是运用JMLUnitNG针对MyPath.java中部分方法自动生成测试用例的运行结果。

    可以看到自动生成的数据主要是null,0,int最大值,int最小值等情况。

    • (4)梳理自己的架构设计

    在第一次作业较为简单,在MyPathContainer中,我使用了两个HashMap来存储Path和id,减小getpathid和getpathbyid方法的复杂度,用了node的Hashset来减小getDistincNode方法的复杂度。

    第二次作业中增加了图结构,我在MyGraph中增加了一个二维数组类型的成员变量存储图结构,新增了Edge类存储边,为下一次做了准备,并增加了求最短路的floyd方法。在调用add等变更图结构的方法时,都调用一次floyd方法,getShortPathLength时,只需要查询二维数组即可。其他地方与第一次作业基本一样。

    第三次作业在图结构的基础上实现了地铁系统,本质上跟第二次作业没有太大差别。新增了最短换乘,最低票价等方法,实际上只是增加了边权的求最短路。我的架构与第二次也没什么区别,只是新增了几个不同的建图方法,不同方法中Edge的权值不同。同样也是在变更图结构是进行重新建图以及计算最短路。

    第三次作业UML图:

    • (5)bug和修复情况

    第一次作业:强测出现bug。原因:不小心将cnt - 1写成了 --cnt;

    第二次作业:强测和互测都没有出现bug。

    第三次作业:强测和互测都没有出现bug。

    • (6)对规格撰写和理解上的心得体会

    规格的初衷是用比自然语言更严谨的方式描述方法的功能,让开发人员的理解更加准确。

    然而在实际撰写和阅读规格时,我发现规格确实有严谨的优点,但也存在着难以表达,难以理解的缺点,在撰写一些较为复杂的方法的规格时,还可能需要引入一些其他的方法。要想更好地利用规格的优势,可能需要大量地阅读以及撰写规格。

  • 相关阅读:
    用powershell启动appfabric报错
    对引用和指针使用以及函数返回引用和指针类型的理解
    数组指针和数组引用做参数的区别(是否能够限定数组大小、数组降价)
    C++静态成员函数基本概念讲解
    函数中变量的生存期和作用域
    如何在Source Insight中配置Pc Lint
    iterator与const_iterator
    周数据转换为天数据的一个Sql数据查询
    如何提高结构对象作为键的哈希表的查找速度
    尽量用iterator代替const_iterator
  • 原文地址:https://www.cnblogs.com/mjmj111/p/10900247.html
Copyright © 2011-2022 走看看