面向对象第三单元博客

王雅智-24231217 2026-05-28 14:07:18

JML和规格驱动开发

JML 是针对Java设计的形式化规格语言,用于为Java代码编写严格、可读的契约式规范,衔接自然语言描述与形式化逻辑。其逻辑严谨,能明确给出每个方法要去做什么,它能把模糊的需求转化为可校验的逻辑规则,既能作为开发文档,也支持自动化静态检查、单元测试、形式化验证,提前发现逻辑缺陷

规格驱动开发其实就是先规定要求,再去写代码,基本流程为需求分析 → 编写正式规格(JML 为主)→ 依据规格编码 → 对照规格测试 / 验证 → 迭代修正

JML其实就是规格驱动开发的一种。它可以消除需求上的理解歧义,提升代码质量,同时还方便后续的测试与维护;不过JML有一定学习成本,用时存在简单基础方法用不上、复杂逻辑方法写起来太冗长的问题

JUNIT测试

测试就是要全面、关键。充分能使用的类给出的对外接口,只要不怕麻烦充分对比即可;同时做到独立、干净、覆盖全、可重复、用断言。

一个测试方法只测一个功能点 / 一个场景,不把多个逻辑混在一起;测试结果必须稳定,不依赖外部环境、时间、顺序,每次运行结果一致;测试方法之间互不依赖,不共享数据,不按顺序执行也能正常运行;正常情况、边界情况、异常情况都要测。

作业迭代

这个单元作业迭代基本上没有什么对上次作业的更改,只有新加的的方法的实现,所以比较简单。当然,有时候新作业会对之前已有方法增加新的JML描述,所以还是要往回检查一下的。

程序的性能瓶颈一般都是算法或数据存储方式导致的。这种可以通过自己目测或者问AI很容易就可以找到

BUG

第一次作业时Integer比较用的==导致出错;存储类型用的List导致查询开销过大。这种BUG就纯个人手滑或者思考不到位导致了的

关于研讨课的“小游戏”

确实难免会有bug。在传递过程中,少写漏写前置、边界是很常见的情况,不过这也可以理解:毕竟时间有限,况且纸张就那么多空白的地方可以写,所以大家有时就会写一些关键的语句,一些大家默认的意思就省略了;在JML翻译成文字描述时,很多同学也只是单纯将JML翻译一遍,这样虽不能告诉下一位同学这个函数是要做什么,不过也确实降低了传递中出错的可能

以后多人组队编程时,应在一开始就商讨确定好规范,列出清单,让每个人知道自己要做什么,并且命名、接口、调用等应在一开始就统一规定,这样才不会产生你我写的程序间互相重合或不兼容的问题。总的来说,一个大家都遵守并且良好的统一规范是团队合作编程成功的开始。

...全文
7 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

305

社区成员

发帖
与我相关
我的任务
社区描述
2026年北航面向对象设计与构造
java 高校
社区管理员
  • 孙琦航
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧