本文是BUAA OO课程Unit3在课程讲授.三次作业完成.自测和互测时发现的问题,以及倾听别人的思路分享所引起个人的一些思考的总结性博客.主要包含JML相关梳理.SMT Solver验证.JML单元测试.设计策略.代码度量.BUG测试和心得体会等内容. 目录 一.JML简单梳理 二.SMT Solver的部署和验证 三.JML单元测试 四.架构设计梳理 五.测试与BUG分析 六.心得体会 一.JML简单梳理 1.1 JML语言理论基础 The Java Modeling Language (J…
一.本单元的架构设计 1.类图 第一次 第二次 2.关键方法和架构简述 总体而言是读取图的时候就完成大部分计算(完成缓存),调用查询方法时只是展示计算的结果,少部分直接计算.主要是设计了各种自己定义的类,处理输入数据时完成各种类的创造和放入容器.第二次作业中,使用预处理器对输入的UML元素进行了多次遍历,先创建具体的对象,再创建次级的从属对象,再读取关系而调用之前创造的对象的特定方法,从而实现把输入的信息重新组合,以便于符合要求地查询.因而各功能是单元化的,对开发和测试比较有利. 二.架构设计和…
一.摘要 本文是BUAA OO课程Unit2在课程讲授.三次作业完成.自测和互测时发现的问题,以及倾听别人的思路分享所引起个人的一些思考的总结性博客.主要包含设计策略.代码度量.BUG测试和心得体会等内容. 二.设计策略分析 2.1 第一次作业 第一次作业较为简单,主要由Elevator线程和InputHandler线程互相合作完成,是消费者.生产者模式,InputHandler生产AllRequest类中的Request对象存在ArrayList中,电梯从中取出Request对象并完成送乘服务…
一.摘要 本文是BUAA OO课程Unit1在课程讲授.三次作业完成.自测和互测时发现的问题,以及倾听别人的思路分享所引起个人的一些思考的总结性博客.本文第二部分介绍三次作业的设计思路,主要以类图的形式展现,并有简单的优劣分析:第三部分为程序代码复杂度的分析(二.三两部分为基于度量的对自己程序结构的分析):第四部分为对自己.对他人程序的测试.DEBUG.Hack的思考:第五部分是分析作业中可以应用对象创建模式的可能性,和重构的思考. 二.开发设计思路 1.程序类图展示 第一次作业 第二次作业 第…
一.JML简介 1.1 JML与契约式设计 说起JML,就不得不提到契约式设计(Design by Contract).这种设计模式的始祖是1986年的Eiffel语言.它是一种限定了软件中每个元素所必需的责任与义务的开发模式,程序设计中的每个元素都需要用规范的语言精准地限定其前置条件(Preconditions).后置条件(Postconditions)和不变式(Invariants).通过这三项限定,我们可以清晰地获得对一个函数功能的刻画,从而达成设计与实现的分离,便于优化.测试和生成文档.…
• 1.JML语言的理论基础.应用工具链情况 JML(Java Modeling Language)—— java建模语言,是一种行为接口规范语言( behavioral interface specification language, BISL).同时,JML也是一种进行详细设计的符号语言,它鼓励你用一种全新的方式来看待Java的类和方法,既规定了方法或抽象数据类型的接口,也规定了它们的行为. 面向对象的分析和设计(OOAD)的一个重要原则就是过程性的思考应该尽可能地推迟,先以一定的规范建立…
一.JML简介 1.JML语言的理论基础 JML(Java Modeling Language)是用于对Java程序进行规格化设计的一种表示语言.JML是一种行为接口规格语言 (Behavior Interface Specification Language,BISL),基于Larch方法构建.BISL提供了对方法和类型的规格定义手段. 一般而言,JML有两种主要的用法: (1)开展规格化设计.这样交给代码实现人员的将不是可能带有内在模糊性的自然语言描述,而是逻辑严格的规格. (2)针对已有的…
OO Unit3 总结 OO课Unit3人际关系网JML应用技术回顾 BUAA.1823.邓新宇 2020/5/23 梳理JML语言的理论基础.应用工具链情况 方法规格 JML中,同一个方法在不同的条件下会产生不同的行为,这种行为分为正常行为和异常行为,分别用单成一行的public normal_behavior和public exceptional_behavior作为该行为的描述的声明放在行为描述的最开始,不同的行为之间用also连接.一个方法的描述中可以有多个不同的行为类,而不同的行为类的…
Unit3 ​ JML(Java Modeling Language) 是用于对 Java 程序进行规格化设计的一种表示语言,它对于方法内部具体是如何实现的并无要求,只是对方法的接口以及行为进行限制,具体来说就是对方法里面允许接受的数据,可以做出的改动,必须返回的数据,异常表现等进行限制,最终保证方法的无二义性. ​ 本单元的作业背景是一个简单的社交系统,允许对数据进行有序存储,建立数据之间的关系,以及精确查询,由于已经给出了JML规格,所以并不需要自己从零开始设计架构,只用把需要实现的方法按照…
注:本文内容较长且细节较多,建议先收藏再阅读,原文将在 Github 上维护与更新. 在 HTTP 接口开发与调试过程中,我们经常遇到以下类似的问题: 为什么本地环境接口可以调用成功,但放到手机上就跑不起来? 这个接口很复杂,内部调用了好几个其他接口,如何定位问题究竟出在哪一步? 后端开发还没有把接口提供好,前端开发任务无法推进…… 「猫哥网络编程系列」最核心的任务便是向各位分享一个我从多年的前后端项目中总结而来的「万能」HTTP 调试法,掌握并从网络编程原理上理解它,能让我们顺利定位并解决所有…