OO Summary Ⅳ
测试与正确性论证的效果差异
测试,或者说用断言进行黑箱测试,用大量的数据进行“覆盖性测试”,目的是当分支覆盖率达到100%也就是理论上来说所有可能的输入都已经测试过了,而输出结果均是正确的,那么我们理论上可以说这部分程序是没有问题的。这种测试方法的好处就是,问题暴露得十分明显,某一组数据错了,就知道问题发生的情况是什么了,复现性也很强。其实平时我们自己debug的时候用的就是这种方法,只不过那时我们测试量比较小,并没有做到全覆盖,而是向着我们感觉可能会出错的方向进行测试,导致测试以后仍然感到不安,害怕仍然存在着某些bug自己没有发现。现在有了全覆盖的测试,这种方法比较好实现,效率也比较高,只是不可以完全验证程序逻辑的正确性。
正确性验证,就是通过分析需求写出正确的规格,然后论证程序在规格的任意划分下,都符合规格所要求的过程。这种验证方法偏向于验证程序的思路、逻辑是否正确。严格按照这种方法执行,可以验证程序是否有按照我们所希望的那样执行,但由于是理论上的分析,所以需要严谨细致的推论,因此可能会比较耗费时间。
无论是这两种哪一种测试方法,都让我学会了如何准确性较高的测试自己的程序(发现更多的bug),都使我受益匪浅。
OCL语言和JSF规格的对比
对象约束语言,即OCL语言是一种形式化语言,它主要用于表示UML模型中施加于模型上的约束。OCL具有如下特点:
1、OCL是一种精确的,无二义性的语言。
2、OCL是一种规范说明性语言,所有有关实现的问题都不能用OCL来表达。
3、OCL是一种纯表达式语言,它是具有没有任何副作用的申明性语言。
4、OCL是一种类型化语言,即OCL中的每一个表达式都是具有类的。
5、OCL不是一种程序设计语言,不能用OCL编写程序逻辑和控制流程。
它和JSF规格的相同点在于它们都是形式化的约束语言,在程序中唔二义性,结构上也具有相似性,OCL主要包括的不变量,前置条件,后置条件,监护规则分别对应JSF对应着repOK(),REQUIRES,EFFECTS和MODIFIES。
他们的不同点在于作用的时间不同,OCL主要是在编写程序前,理论建模时刻对每个类进行明确的约束,而JSF主要在功能实现前进行约束以确保程序逻辑实现正确。
第十四次作业模型图
1. 类图

2. UML时序图

3. 状态图

课程总结
1. 四个单元模块知识点之间的关系
第一章的多项式计算和傻瓜电梯,主要是为了使我们从面向过程编程转变到面向对象编程,在写代码的过程中体会面向对象的思想。
第二章主要是线程安全的学习,引入线程的概念,运用多线程来提高工作效率,同时也就引入了线程安全的问题,如何保证进程互斥和资源共享是我们本章需要思考的问题。
第三章主要是抽象和规格化设计,通过写规格来增强代码的可读性、可移植性,让我们写的代码可以为他人所用。
第四章是测试与论证,随着程序规模的逐渐增大,人工测试难以保证程序的正确性(其实哪怕程序规模小人工测试也很难完全覆盖),所以无论是自动化测试还是正确性论证,都是为了通过理论层面论证程序的正确性。
2. 梳理与进步
程序肯定是写得比以前好很多,无论是在程序结构还是可读性上,从一开始的数量少但功能贼多的类(GOD类)到一点点每个类的功能相对均衡,各个类可扩展的空间也多了不少。可读性上,命名风格向大佬们学习基本也能做到精简且明晰,同时也按照课程要求写了详细的JSF(虽然有些还是很长很长很长很长),可读性改观了许多。
测试方面,从一开始的只能靠乱想例子,寝室共享一波数据,到现在的覆盖性测试,还有正确性论证,使得测试的过程更加有条理,结果更加可信。
3. 对工程化开发的理解
emmmm工程化开发就是很多很多很多人一起写代码,所以自己写的代码就会被自己的队友所使用,因此本着“以人为本”的思想,我们就要让自己的程序可以很方便的被别人使用,就像一个很标准的、契合的齿轮,可以帮助整台机器运转,与其它部件共同合作完成各项功能,而不是因为自己的不契合而导致整个团队延缓开发速度甚至项目失败。
4. 期望与建议
首先感谢老师与助教这一学期以来的辛勤付出,使我在编程能力和思想上都有了很大的提升。期望的话,希望可以明确一下教学目标,感觉有些要求本身就相悖,比如说,一方面指导书并为对所有情况进行详细的要求说明,是为了锻炼大家理解自行设计的能力;而另一方面,由于互测这种竞争机制,同学又会在issue或是助教群中对每一种详细的情况应该如何处理进行询问,希望得到官方的回答,以此来规范自己或是挑别人的bug。窃以为,如果真的为了提升自行设计的能力,不如就不要在指导书已经发出以后,再进行各种要求,否则这和一开始就规定好有什么区别?还大大增加了学生与助教、助教与老师之间交流的时间成本。如果说需要进行某些硬性要求,就在一开始的时候将指导书写清楚,毕竟指导书永流传,一次修改福泽学弟学妹。
OO Summary Ⅳ的更多相关文章
- OO Summary Ⅲ
规格化设计的发展历史 (这一部分并没有找到答案,于是参考了好黄和温莎莎的blogs) 1950年代,第一次分离,主程序和子程序的分离程序结构模型是树状模型,子程序可先于主程序编写.通过使用库函数来简化 ...
- OO Summary Ⅱ
[第五次作业——多线程电梯] 类图 度量 协作图 设计分析: 多线程电梯是我第一次接触多线程,因此真的是无(瞎)从(g)下(2)手(写),感觉仿佛只是用一个调度器来调度3部电梯但又总觉得好像哪里不太对 ...
- OO unit1 summary
Unit 1 summary 一.前言 三周左右的学习,OO第一单元顺利结束了,个人认为有必要写个blog来反思总结一下自己第一单元的学习情况,以便更好地进行后面的学习. 之前从来没有写blog的习惯 ...
- OO unit4 summary
Unit4 一.第四单元作业的架构设计 第四单元个人认为主要是考察对于层次结构的理解,即如何理解并处理好UML图的树状结构组织,在理好层次之间以及层次内部的相互关系之后,就只剩下代码实现的问题了.但是 ...
- OO unit3 summary
Unit3 JML(Java Modeling Language) 是用于对 Java 程序进行规格化设计的一种表示语言,它对于方法内部具体是如何实现的并无要求,只是对方法的接口以及行为进行限制, ...
- OO unit2 summary
Unit2 一.第一次作业 1.UML 2.Sequence Diagram 3.同步块设置与锁处理 采用了生产者-消费者模式,用共享对象来连接不同的线程. 第一次作业中,我有三个线程:Receive ...
- ABAP OO的八大理由
原贴地址:http://scnblogs.techweb.com.cn/abaplv/archives/127.html 几年前SAP BASIS 4.6为ABAP扩展了OO功能,这是很多传统的ABA ...
- 【作业2.0】HansBug的5-7次OO作业分析与小结,以及一些个人体会
不知不觉又做了三次作业,容我在本文胡言乱语几句2333. 第五次作业 第五次作业是前面的电梯作业的多线程版本,难度也有了一些提升.(点击就送指导书) 类图 程序的类图结构如下: UML时序图 程序的逻 ...
- 第一节:从面向对象思想(oo)开发、接口、抽象类以及二者比较
一. 面向对象思想 1. 面向过程(OP)和面向对象(OO)的区别: (1):面向过程就是排着用最简单的代码一步一步写下去,没有封装,当业务复杂的时候,改动就很麻烦了 (2):面向对象将复杂的业务分离 ...
随机推荐
- C#获取路径中最后一个文件夹的名字
using System; using System.IO; namespace ConsoleApplication1 { class Program { static void Main(stri ...
- MATLAB 矩阵处理基础
- 7.2内存管理-ARC
@0-简介 1编译器会自动在适当的地方插入适当的retain.release.autorelease语句 @1-ARC的判断原则 1只要还有一个强指针变量指向对象,对象就会保持在内存中 2强指针 ...
- springmvc如何进行热部署开发
1.场景还原 在工程量大的情况下,tomcat运行部署一次会花费相当多的时间,这样太 浪费人力以及时间了:今天笔者将 讲解一下如何配置springmvc工程的热部署 2.实现方案 其实很简单! ①在t ...
- Hypergeometric distribution
How TermFinder calculates P-values Readme: MGI GO Term Finder The GoTermFinder attempts to determine ...
- induced pluripotent stem cell (iPSC) 诱导性多能干细胞
参考: 诱导性多能干细胞 Induced pluripotent stem cell Induced Pluripotent Stem Cells: Problems and Advantages w ...
- H.264开源解码器评测
转自:http://wmnmtm.blog.163.com/blog/static/38245714201142883032575/ 要播放HDTV,就首先要正确地解开封装,然后进行视频音频解码.所以 ...
- Mac 上搭建基于 Hexo + GitHub 个人博客
环境配置 本人电脑系统:macOS Node.js 生成静态页面.安装Node.js Git 用于将本地 Hexo 内容提交到 Github.Xcode自带Git(前提:macOS已经安装了Xcode ...
- 【消息队列】kafka是如何保证消息不被重复消费的
一.kafka自带的消费机制 kafka有个offset的概念,当每个消息被写进去后,都有一个offset,代表他的序号,然后consumer消费该数据之后,隔一段时间,会把自己消费过的消息的offs ...
- android -------- 常用依赖库
// bannercompile 'com.youth.banner:banner:1.4.9' // recyclecompile 'com.android.support:recyclervie ...