一、      测试与正确性论证的区别

在最后一个单元的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]第四次博客作业的更多相关文章

  1. OO第四次博客作业!

    oo第四次博客作业 一.测试与正确性论证比较 测试只是单方面片面的证明对于当前的输入程序是正确的,测试只能证明程序有错误,不能说明程序是对的. 正确性论证是程序达到预期目的的一般性陈述,是通过规范化的 ...

  2. OO第四单元博客作业

    OO第四单元博客作业 BUAA_1706_HugeGun 目录 第四单元作业架构设计 四个单元架构设计及OO方法理解 四个单元测试理解与实践演进 课程收获 一点建议 第四单元作业架构设计 ### 第十 ...

  3. [BUAA OO]第三次博客作业

    OO第三次博客作业 1. 规格化设计的发展 我认为,规格化设计主要源自于软件设计的两次危机.第一次是由于大量存在的goto语句,让当时被广泛应用的面向过程式的编程语言臃肿不堪,在逻辑性上与工程规模上鱼 ...

  4. OO第四次博客作业(第四单元作业及期末总结)

    (注意:本文写作顺序与作业要求不完全一致,但涵盖了作业的所有要求) 一学期的BUAA特色OO课程结束了. PART 1  我想先写我这一学期的感想 从第一单元满怀期待地写完多项式求值到最后看着60分不 ...

  5. OO第四次博客作业--第四单元总结及课程总结

    一.总结第四单元两次作业的架构设计 1.1 第一次作业 类图如下: 为了突出类.接口.方法.属性.和参数之间的层次结构关系,我为 Class 和 Interface 和 Operation 分别建立了 ...

  6. oo第四篇博客作业

    测试与正确性论证的效果差异及各自的优缺点: 测试针对一些典型的输入情况进行方法验证,可操作性更强,结果直观.但不能完全覆盖所有的输入情况. 正确性论证则是根据代码逻辑从所有的方面对方法进行论证,可操作 ...

  7. OO第四次博客作业

    测试与正确性论证的效果差异及其优缺点 测试是利用测试代码,通过编写测试用例来验证代码是否能正常完成所要求的功能,自动测试相较于正确性论证来说更加的直观,直接测试代码的功能,而正确性论证是在JSF的基础 ...

  8. OO第三次博客作业——规格

    OO第三次博客作业——规格 一.调研结果: 规格的历史: 引自博文链接:http://blog.sina.com.cn/s/blog_473d5bba010001x9.html 传统科学的特点是发现世 ...

  9. OO第4次博客作业

    OO第4次博客作业 一.第4单元设计 第四单元主要围绕UML图的结构进行JAVA代码编写,对JAVA的层次结构进行更多的认识.个人认为编程操作在实质上与上一章的PathContainer有许多的相同之 ...

随机推荐

  1. shadowssock+openvpn 2.2.2 成功*** -- 好文档 - 原理理解+架构

    [root@iZrj9j4lxhjopzii4vhw0lZ 2.0]# grep -v '^#' vars |grep -v '^$'export EASY_RSA="`pwd`" ...

  2. FFMpeg笔记(三) 音频处理基本概念及音频重采样

    Android放音的采样率固定为44.1KHz,录音的采样率固定为8KHz,因此底层的音频设备驱动需要设置好这两个固定的采样率.如果上层传过来的采样率不符的话,需要进行resample重采样处理. 几 ...

  3. block本质探寻七之内存管理

    说明: <1>阅读本问,请参照block前述文章加以理解: <2>环境:ARC: <3>变量类型:基本数据类型或者对象类型的auto局部变量: 一.三种情形 //代 ...

  4. GoogleTest初探(1)

    此篇主要了解一下GoogleTest中的断言. 总的来说,GoogleTest中的断言分为两大类:EXPECT_*和ASSERT_*,这两者在测试成功或失败后均会给出测试报告,区别是前者在测试失败后会 ...

  5. win7-x64上MySql的初次安装

    1.官网:https://dev.mysql.com/downloads/mysql/下载对应的zip包 2.将包解压缩到本地,如:F:\mysql\mysql-8.0.15-winx64 3.配置环 ...

  6. 4.Operators-操作符(Dart中文文档)

    Dart有如下操作符: Description Operator unary postfix expr++ expr-- () [] . ?. unary prefix -expr !expr ~ex ...

  7. 使用maven构建scala项目

    eclipse安装scala插件和m2e-scala并不是支持的很好,因此使用maven创建scala工程的时候,IDEA可谓是最好的开发利器. 1. 创建工程之前的准备 2. IDEA界面创建Sca ...

  8. [2016北京集训试题15]项链-[FFT]

    Description Solution 设y[i+k]=y[i]+n. 由于我们要最优解,则假如将x[i]和y[σ[i]]连线的话,线是一定不会交叉的. 所以,$ans=\sum (x_{i}-y_ ...

  9. 2991:2011 求2011^n的后四位。

    2991:2011 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 已知长度最大为200位的正整数n,请求出2011^n的后四位. 输入 第一行为一个正整数k ...

  10. 微信小程序中的分享事件

    小程序的分享 onShareAppMessage(options)   在页面的js文件中定义了 onShareAppMessage 函数时,页面可以表示改页面可以转发.可以在函数中设置页面转发的信息 ...