ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

OO第三单元JML规格

2020-05-23 12:51:48  阅读:176  来源: 互联网

标签:OO 代码 作业 查询 规格 JML BUG


一、JML情况

JML是对Java程序进行规格化设计的一种表示语言,为逻辑性的程序设计和代码的严格要求提供了有效方法。通过JML及其支持工具,不仅可以自动构造测试用例,还可以用静态方法检查代码对规格的满足情况。一千个人心中有一千个哈姆雷特,那么JML规格就是产生千变万化代码的原书。

JML的功能定义:

(1)对一个方法/类/程序的外部可感知行为进行抽象表示

(2)把程序的设计与实现有效分离

JML有两种主要的用法:

(1)开展规格化设计。这样其他人员面对的将不是模糊语言描述,而是逻辑严格的规格。

(2)针对代码设计其规格,这对于他人代码的维护提供了便利方法。

二、作业架构分析

第一次作业:

  基本上是照着规格写代码,没什么架构可言。每个类和方法不需要了解逻辑关系,只需要根据所给规格进行完善即可。唯一的区别则是数据存储方式,这会影响到数据查找的效率。

第二次作业:

第二次作业增加了Group这个类,并进行了一系列查询工作。对于容器的选择,选择了方便遍历arrarlist。

相应的ConflictSum、getAgeMean、getAgeVar没有采用更利于数据更新的缓存法,没有在增加人的时候进行更新,而是只在调用时进行查询操作。

需要注意的是getRelationSum、getValueSum等对于isLink的调用实际是查询一个人际关系图,对每个人的关系图进行更新会减少查找时间。

第三次作业

第三次作业,在上次基础上增加了删除group元素并,增加了最短路径的查询,这也是导致TLE的根本问题。

大体架构没有改变,自上而下遍历树结构,找到Value最小的路径。

类图结构如下:

代码复杂度分析:

 

三、BUG分析

(1)第一次作业BUG在于数据存储方式,在强测时CTLE爆炸

(2)第二次作业吸取第一次的教训,采取了更合理的存储结构,但是出现了在求平均值时没有考虑到分母为0的致命BUG

(3)第三次作业的最小路径查询算法不优,导致强测很多测试点时间超时

四、在规格作业中的心得体会

(1)数据存储方式的选取和算法优化很重要,本单元的作业完成难度不大,但是表面看不到的时间复杂度会埋下很多坑。

(2)Junit测试是很有效的一种测试方式,可以帮助我们快速检测一些漏洞

(3)由规格到代码的实现不是照猫画虎,对于所写程序的理解更重要

标签:OO,代码,作业,查询,规格,JML,BUG
来源: https://www.cnblogs.com/wdd00/p/12938649.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有