分析本单元的测试过程

谈谈你对黑箱测试和白箱测试的理解
白盒测试

简单来说就是看代码,分析可能的输入会有哪种执行路径,分析程序中每条通路是否按照预定要求正确工作。

黑盒测试

从用户角度分析,简单来说就是输入数据,并检测输出是否符合要求。

单元测试、功能测试、集成测试、压力测试、回归测试的理解
单元测试

颗粒度最小,测试单元设计是否符合,一般使用白盒测试对单元进行测试。具体到操作,即分析各函数是否符合其要求。

集成测试

介于单元测试和系统测试之间,黑盒加白盒的形式进行测试,验证设计验证需求,可以用junit来测试

功能测试

颗粒度最大,测试某个功能是否正确,表现为,测试具体的指令是否能正常完成,一般是黑盒测试。

压力测试

为了评价所设计的程序的时间空间复杂度是否能达到要求,要进行大数据量的测试,生成的数据要有针对性,不同的测试样例应侧重不同,具体为数据生成时某些指令所占的比例。正确的输出由交简单的程序生成,只保证正确性,不要求性能。或者可以进行对拍。

回归测试

当发现某些bug后,进行debug,debug后的代码除了要通过出现bug的样例,还要通过以前其他样例。

梳理本单元的架构设计,分析自己的图模型构建和维护策略

和图有关的指令

加人、加边、改边、查询连通性、查询连通块数量、查询三元环、查询最强连接、查询“对”数量、查询含某节点的最小环

分析

在第一次作业中,没有删边的操作,使用并查集可以维护连通性、连通块数量

三元环的维护,发现,只有在增加边时,三元环发生改变,只需遍历两点的邻节点,若有相同的点即三元环数量增加。

最强连接,发现只有在加边或删边时会造成最强连接的改变,在加边和删边时维护即可。

“对”即互为最强连接,由于上方已经维护了最强链接,直接查询即可。

在第二次作业中,多出了删边的操作,仍采用并查集维护连通性。但对于删边操作,在动态维护时,可以先分别dfs寻找所有和当前两节点联通的节点,得到两个节点集,分析发现,若这两个节点集没有交集,则这两个节点集成为两个新的连通块,注意更新两个节点集各节点的父节点,以及更新祖先节点集。

在第三次作业中,增加了查询某节点最小环的指令,对于该指令,考虑以下算法:

先以该节点为源节点进行迪杰斯特拉算法,找到最小生成树,然后分析,最小环一定从以下两种情况中产生:

1.某节点是源节点的邻节点,且有一条更短的到源节点的最短路径,则该最短路径,加上该节点到源节点的边即可能的最小环。

2.某两个节点相邻,且各自有一条到源节点的最短路径,则两条最短路径加上两节点之间的边,为可能的最小环。

遍历所有可能的最小环,找到最小的即可。

具体实现,可以先遍历最小生成树上所有节点,并查看是否符合情况1

情况2实现,先把最小生成树的根去掉,得到若干子树,只有不同子树之间的节点才可以实现情况2,否则会出现路径重复,不符合最小环定义。

分析作业中出现的性能问题及其修复情况,谈谈自己对规格与实现分离的理解

性能问题及其修复情况

按照上述维护方式,性能较好没有出现性能问题。

对规格与实现分离的理解

对于编写程序来说,阅读懂规格,并明白其要求,然后直接编写代码,编写好后,在对照规格看是否符合要求,最后应严格按照规格进行测试,其中,要读懂大量规格很费时间,可以使用chatgpt,把规格给gpt并让其使用自然语言解释,

这并不是完全抛弃规格,只是用自然语言解释,方便理解,代码运行的要求还是严格符合规格。

本单元中同学们实现了OK测试方法,请同学们思考OK测试对于检验代码实现与规格的一致性的作用,有何改进何建议

OKtest即拿到某个接口方法执行前后的数据,并分析方法执行结果是否符合规格要求。OKtest即照着规格对方法进行检查,OKtest方法只检查正确性,并不要求性能,但严格要求数据前后的改变符合规格。

学习体会

JML并不太好用,对于程序编写者来说,JML并不如自然语言容易理解,但是对于测试人员来说,JML是评判一个方法是否符合要求的好方法,按照JML逐条检查方法是否符合设计要求。

同时发现JML有很多操作可以总结为原语,例如对增删改查数组元素,增加一些操作原语可能会遍历JML的使用。

BUAA_OO_Unit3(JML编程)相关推荐

  1. JML规格编程——BUAA OO第三单元作业总结

    整体概述 这个单元整体围绕Java Model Language(JML)展开,通过学习JML规格了解契约式编程的过程,课上实验中进行了JML规格的简要编写,课下实验主要通过阅读规格并按照规格的要求正 ...

  2. java契约式编程_第三单元总结——JML契约式编程

    OO第三单元博客作业--JML与契约式编程 OO第三单元的三次作业都是在课程组的JML规格下完成.完成作业的过程是契约式编程的过程:设计者完成规格设计,实现者按照规格具体实现.作业正确性的检查同样围绕 ...

  3. OO——第三单元JML规格编程总结

    一.JML理论基础及应用工具链 JML存在的意义 1. 开展规格化设计,能够实现设计与实现分离,实现进行提前测试. 2. 方便程序代码的阅读和维护. JML方法规格 requires -- pre-c ...

  4. OO Unit 3 JML

    目录 梳理JML语言的理论基础.应用工具链情况 部署JMLUnitNG/JMLUnit 按照作业梳理自己的架构设计,并特别分析迭代中对架构的重构 按照作业分析代码实现的bug和修复情况 阐述对规格撰写 ...

  5. OO_BLOG3_规格化设计(JML学习)

    目录 JML语言学习笔记 理论基础 应用工具链情况 JMLUnit/JMLUnitNG UNIT3 作业分析 作业 3-1 实现两个容器类Path和PathContainer 作业 3-2 实现容器类 ...

  6. 结对编程实况录像-2022北航软工

    项目 内容 这个作业属于哪个课程 2022春季软件工程(罗杰 任健) 这个作业的要求在哪里 结对编程项目-最长英语单词链 我在这个课程的目标是 学习软工的项目合作管理知识,提升软件开发技术 这个作业在 ...

  7. 北航2022软件工程第三次作业——结对编程(最长英语单词链)

    软件工程第三次结对编程作业 项目 内容 这个作业属于哪个课程 北京航空航天大学2022春季软件工程(罗杰 任健) 这个作业的要求在哪里 结对编程项目-最长英语单词链 我在这个课程的目标是 学习软件工程 ...

  8. 2019-北航面向对象-JML作业总结

    本次作业的要求为: 针对第三单元的三次作业和课程内容,撰写技术博客 (1)梳理JML语言的理论基础.应用工具链情况 (2)[改为选做,能较为完善地完成的将酌情加分]部署SMT Solver,至少选择3 ...

  9. OO之旅——JML篇

    目录 OO第三单元总结 1. JML语言理论基础以及应用工具链情况梳理 2. OpenJML的简单使用:部署.验证及结果分析 3. JMLUnit的使用:部署.验证及结果分析 4. 作业架构设计梳理 ...

最新文章

  1. 数据缺失、混乱、重复怎么办?最全数据清洗指南!
  2. html 组件化 编辑器,vue.js组件化使用百度富文本编辑器(一)
  3. 【安卓开发】Layout Inflation不能这么用
  4. 纯JavaScript实现的调用设备摄像头并拍照的功能
  5. P6378-[PA2010]Riddle【2-SAT】
  6. 前端开发小工具SuperApp——Ctrl+S自动刷新浏览器
  7. 读者诉苦:Redis 宕机,数据丢了,老板要辞退我
  8. oracle预备份,oracle自动备份
  9. [转载] pickle:让python对象序列化
  10. html从入门到精通(全)
  11. python爬取谷歌图片_Python 爬取谷歌街景图片
  12. 8086汇编_常用指令
  13. AUTOCAD——多段线命令
  14. VIS2020 长论文摘要机翻
  15. 苍天有眼,我终于搞定了win7使用建行华大智宝U盾的问题了!
  16. 【Unity问题】Int类型除法运算为什么归零
  17. 3. Python脚本学习笔记三字符串
  18. 企业债拟引入大数据强化信用约束
  19. LeetCode 简单算法题
  20. el-table中使用el-popover点击取消按钮时popover框的显示与隐藏问题

热门文章

  1. 配电网正常重构,孤岛划分及故障重构
  2. 小程序开发心得分享:优质小程序制作平台推荐
  3. 《十万个为什么》碎碎念记录
  4. 名画28 赵幹《江行初雪图》
  5. SpringBoot技术实践-SpELEL表达式
  6. 如下字符串,01#张三#20-02#李四#30-03#王五#40。。。。。。,解析每个人分数多少
  7. Apk的编译打包过程
  8. 下一代互联网---IPV6
  9. Shell 一行代码搞定大问题
  10. c语言用判别式求二元一次方程,C语言编写二元一次方程的判别式