[BUAA OO]第四次博客作业
一、 测试与正确性论证的区别
在最后一个单元的OO作业中,我们主要进行了代码的测试与正确性论证工作。这俩者在作业中的体现分别是junit单元测试以及jsf论述语言。这两者在java代码开发中分别能够帮助我们检测代码、测试代码,最终起到对工程正确性进行检测的功能。
这二者就好比一个是完成前的完整性检查,一个是完成后的正确性测试。当然了,理论上来说,这两者之一都可以帮助我们避免代码中问题的出现,但是更保险一点又有谁会反对呢?
先说说junit单元测试。这个相比jsf论述语言,应该是我们比较熟悉的一个了。就像我们平时完成代码后的功能测试一样,junit通过编写能够完整覆盖代码逻辑分支、语句分支的测试样例,对每一个功能单元进行测试,并与预期结果进行比对,从而起到辅助程序员规避代码bug的功能。这种方法十分亲民,但是,却有着一定的问题。经过实践发现,由于逻辑本身存在的问题,虽然使用的测试样例达到了代码覆盖率100%,逻辑分支覆盖率100%,但是样例过于简单,没有在数据范围上完整覆盖所有区间,在通过单元测试之后,仍然导致了问题的出现。
这就需要jsf论述语言来帮我们规避问题。jsf论述语言,在刚开始学习的时候让我们感到无比头痛。毫不亲民的语言格式,不直观的展示方式,啰嗦的描述方式,让我对其功效一度产生了怀疑。但这却能让我们规避junit所无法规避的问题,那就是在逻辑上对实际实现的代码与程序员所构思的程序应该具有的功能做比较。在这个单元的学习中,我就通过jsf论述成功发现了我的第三次OO作业中的一处逻辑漏洞,是判断语句中数据覆盖不完整导致的,如果不使用极其特殊的测试样例,使用junit单元测试就很难发现其中的问题。
二、 OCL VS JSF
OCL(Object Constraint Language)语言,即对象约束语言,跟jsf语言一样,是声明式语言,对于方法只关心做什么、效果怎样,而具体如何实现,则不关心。都是使用逻辑表达式来描述具体的约束内容,采取了类似前置条件,后置条件,不变式这样的语法。但是OCL通常会结合uml类图来使用,相比jsf的约束性也更广。
三、 第十四次作业总结


以上是我的时序图和uml图。
四、 学期总结
这学期的面向对象程序设计课程主要进行了四个单元的练习,分别以基础java程序设计,基础多线程程序设计,进阶多线程程序设计、jsf论述入门,以及jsf论述进阶、junit单元测试为主。在整体上来看,逐步深入,每个单元的作业由三次程序作业组成,按照指导书加答疑的方式布置内容,要求我们有非直观信息的理解能力。
这个学期的作业我做起来还是相当认真的,每次都是“谋定而后动”,中间的电梯第二次作业还在周一晚上由于逻辑设计的问题重构过一次,整体上来说应该算是质量不低的。但事实却跟我想的有点区别。第一次单元测试作业,让我们测试第三次作业(也就是第一次电梯作业)。在回顾的时候,简直惨不忍睹。虽然作业整体功能上没有出现问题,但是各种变量名混乱、类功能混乱、对于同一个信息的检测分割在不同类中,羞于承认这是我写的。进而整体重构了一遍。在羞愧之余,我却发现,这何尝不是一种提高呢?在当时我那样设计,虽然已经忘记了当时的初衷,但是现在对于当初的鄙夷不正是表现了我对于清晰的面向对象程序的认识与向往么?这种提高每次一都很小,但是12次作业积累下来,简直让人无法相信这些都是同一个人写的。不可谓提高不小。
[BUAA OO]第四次博客作业的更多相关文章
- OO第四次博客作业!
oo第四次博客作业 一.测试与正确性论证比较 测试只是单方面片面的证明对于当前的输入程序是正确的,测试只能证明程序有错误,不能说明程序是对的. 正确性论证是程序达到预期目的的一般性陈述,是通过规范化的 ...
- OO第四单元博客作业
OO第四单元博客作业 BUAA_1706_HugeGun 目录 第四单元作业架构设计 四个单元架构设计及OO方法理解 四个单元测试理解与实践演进 课程收获 一点建议 第四单元作业架构设计 ### 第十 ...
- [BUAA OO]第三次博客作业
OO第三次博客作业 1. 规格化设计的发展 我认为,规格化设计主要源自于软件设计的两次危机.第一次是由于大量存在的goto语句,让当时被广泛应用的面向过程式的编程语言臃肿不堪,在逻辑性上与工程规模上鱼 ...
- OO第四次博客作业(第四单元作业及期末总结)
(注意:本文写作顺序与作业要求不完全一致,但涵盖了作业的所有要求) 一学期的BUAA特色OO课程结束了. PART 1 我想先写我这一学期的感想 从第一单元满怀期待地写完多项式求值到最后看着60分不 ...
- OO第四次博客作业--第四单元总结及课程总结
一.总结第四单元两次作业的架构设计 1.1 第一次作业 类图如下: 为了突出类.接口.方法.属性.和参数之间的层次结构关系,我为 Class 和 Interface 和 Operation 分别建立了 ...
- oo第四篇博客作业
测试与正确性论证的效果差异及各自的优缺点: 测试针对一些典型的输入情况进行方法验证,可操作性更强,结果直观.但不能完全覆盖所有的输入情况. 正确性论证则是根据代码逻辑从所有的方面对方法进行论证,可操作 ...
- OO第四次博客作业
测试与正确性论证的效果差异及其优缺点 测试是利用测试代码,通过编写测试用例来验证代码是否能正常完成所要求的功能,自动测试相较于正确性论证来说更加的直观,直接测试代码的功能,而正确性论证是在JSF的基础 ...
- OO第三次博客作业——规格
OO第三次博客作业——规格 一.调研结果: 规格的历史: 引自博文链接:http://blog.sina.com.cn/s/blog_473d5bba010001x9.html 传统科学的特点是发现世 ...
- OO第4次博客作业
OO第4次博客作业 一.第4单元设计 第四单元主要围绕UML图的结构进行JAVA代码编写,对JAVA的层次结构进行更多的认识.个人认为编程操作在实质上与上一章的PathContainer有许多的相同之 ...
随机推荐
- HDU 2191(多重背包转换为01背包来做)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 Time Limit: 1000/1000 ...
- ASP.NET Core下载大文件的实现
当我们的ASP.NET Core网站需要支持下载大文件时,如果不做控制可能会导致用户在访问下载页面时发生无响应,使得浏览器崩溃.可以参考如下代码来避免这个问题. 关于此代码的几点说明: 将数据分成较小 ...
- 易语言中锐浪报表绿色发布指南(免COM组件DLL注册)
第一步 打开易语言开发环境(注要求易语言版本 v5.5及以上版本,如果版本太低,请更新到新版本),点击[工具]菜单,进入系统配置界面: 第二步 切换选择夹到[存根]项目,选中"使用用户自定义 ...
- 由Handle转换为控件
Control c = Control.FromHandle(this.textBox1.Handle); TextBox f = c as TextBox;
- 函数内联inline
C++语言支持函数内联,其目的是为了提高函数的执行效率(速度). 宏的优点 在C程序中,可以用宏代码提高执行效率. 编译预处理器用拷贝宏代码的方式取代函数调用,省去了参数压栈,生成汇编语言的CALL调 ...
- Gitlab+Jenkins学习之路(十)之Jenkins按角色授权和Pipeline
一.Jenkins按角色授权 当一个公司的开发分为多个组别,或者是多个项目等等.用于公司内部测试,让开发人员自行构建测试,此时不可能让所有的开发都在公用一个构建,这样变得很混乱,为了解决这一问题,je ...
- 很详细的SpringBoot整合UEditor教程
很详细的SpringBoot整合UEditor教程 2017年04月10日 20:27:21 小宝2333 阅读数:21529 版权声明:本文为博主原创文章,未经博主允许不得转载. https: ...
- luogu1117 [NOI2016]优秀的拆分
luogu1117 [NOI2016]优秀的拆分 https://www.luogu.org/problemnew/show/P1117 后缀数组我忘了. 此题哈希可解决95分(= =) 设\(l_i ...
- [webpack]——loader配置
前言 当我们需要配置 loader 时,都是在 module.rules 中添加新的配置项,在该字段中,每一项被视为一条匹配使用 loader 的规则. 看一下基础实例: module.exports ...
- Linux之linux基础命令2
目录相关: 创建目录: mkdir 目录名 递归创建a/b c/d: mkdir -p a/b c/d 递归创建test/a,b,c,d四个目录: mkdir - p test{a,b,c,d} 递归 ...