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

在最后一个单元的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. SSL证书更换(具体路径可参考iRedMail.tips文件)及邮件服务器架构

    由于Google的chrome不认可赛门铁克的证书,因此要更换新证书 0.8.6版本                                         0.9.4版本 - /etc/pk ...

  2. 第一章 Linux内核简介

    1. 操作系统和内核 操作系统是指在整个系统中负责完成最基本功能和系统管理的那些部分.包括内核.设备驱动程序.启动引导程序.命令行shell或者其他种类的用户界面.基本的文件管理工具和系统工具. 用户 ...

  3. Ubuntu 18.04安装MongoDB 4.0

    首先,导入包管理的公钥. Ubuntu包管理工具(即dpkg和apt)要求发行商使用GPG密钥签署包,从而确保包的一致性和真实性. sudo apt-key adv --keyserver hkp:/ ...

  4. layedit富文本编辑器获取纯文字内容和全部内容

  5. 简单利用Clover四叶草安装U盘安装黑苹果

    配置是I5-7600K+技嘉Z270X-UD3+GTX 1050+简单利用Clover四叶草安装U盘安装黑苹果 <ignore_js_op><ignore_js_op> 成功黑 ...

  6. windbg调试虚拟机win7系统

    调试机:win10 1809 虚拟机: win7 windbg属性设置,在目标后面加上紫色字体参数:  "D:\Program Files\Debugging Tools for Windo ...

  7. 20145234黄斐《Java程序设计》实验五—网络安全与编程

    1: 两人一组结对编程: 0. 参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA 1. 结对实现中缀表达式转后缀表达式的功能 MyBC.jav ...

  8. WPF RichTextBox自动调整高度

    原文:WPF RichTextBox自动调整高度 大概两年前的这个时间段,当时做项目遇到了一个问题:环境VS2005.WinForm,需要RichTextBox根据内容自动调整高度.当时用了各种方法都 ...

  9. python基础学习1-类相关内置函数

    #!/usr/bin/env python # -*- coding:utf-8 -*- #===issubclass(class,classinfo) 检查class是否是classinfo类的子类 ...

  10. getopt例子

    (本例基于win7 + python3.4) import getopt, sys ''' getopt 模块专门用来处理命令行参数 函数 getopt(args, shortopts, longop ...