OO学期总结
一、测试与正确性论证差异对比
测试,顾名思义,就是用一些有意义或无意义的输入去检测程序的正确性或鲁棒性,因其直观明了所以在写简单的程序时我们能迅速找出bug并加以解决。并且,这种方式是绝对客观的,只要和正确结果不匹配那么程序就一定存在一些问题。测试最大的缺点便是无法完全覆盖所有情况,即使很大的测试数据也可能跑不出来某些细微的bug,但这种bug有可能是致命的。
正确性论证则是从代码逻辑角度去分析代码,它的好处便是可以完全覆盖程序的所有情况并加以分析,只要分析不出错就能保证程序不出错,但这种方法的缺点也比较明显,需要耗费大量时间和精力去完成这一工作,并且这种方法的正确性是建立在规格正确的基础之上的,一旦规格不完善也将导致该方法出现纰漏。
总之,两种方法各有利弊,在面对复杂程序时两种方法都显得比较吃力,但若只考虑正确性,那正确性论证无疑要比测试来的可靠。但如果程序本身实现的功能不多,那么靠测试用例轰炸一番基本就不会遗留bug了。
二、OCL与JSF的异同
OCL(对象约束语言)是一种形式化语言,它用于对设计对象进行约束,主要是在UML模型中施加于模型上的约束。OCL是一种精确的,无二义性的语言。其只是一种规范说明性语言,所有有关实现的问题都不能通过OCL来进行表达。另外,它是一种类型化语言,OCL中的每一个表达式都是具有类的。但是,不能用OCL编写程序逻辑和控制流程。
与JSF的对比
相似的点:
(1) 都是一种约束语言,用于对程序的设计进行约束。
(2) 都具有统一的标准。
不同点:
(1) OCL语言是精确的,没有二义性,而对于同一个程序不同人可能会写出不同的JSF。即JSF具有更大的开放性。
(2) OCL主要是对对象进行约束,JSF的则是对类和方法进行约束。
同样的,两者各有优缺点,没有明显的优劣之分。
三、 类图、顺序图、状态图
类图
时序图
状态图:
四.学期总结
(1).
第一章介绍了一些JAVA语言的基本知识和简单的面向对象思想,相对后面的课程来说可以算作一个小小的过渡(虽然相比计组的初始阶段还是难上不少)。
第二章开始了噩梦一样的多线程程序设计,从第五次作业的三电梯开始,生活对话中充斥着以“你三电梯会写吗”,“synchronized咋用”等开始的对话。正是在这一章的学习和多线程作业的编写中让我理解了多线程程序编写的困难之处(我不会再骂那些多核优化差的游戏了),但也正是这一阶段的训练加深了我对多线程和并行的理解,在程序的设计上有了很大的提高。
第三章则在多线程程序的基础上添加了规格描述的过程,主要介绍了JSF的规范书写和程序的规格化设计,这一部分重点就开始从写程序转移到设计与规范了;
最后,第四章着重介绍测试,包括JUNIT测试和正确性论证,重点又从规格转移到了测试。
(2).
总体上是从0学习了一门全新的语音,刚开始的时候,是很困难,因为一点java的写法都不明白,所以第一次很吃力,但是后面慢慢适应了,感觉有些好转,多线程可以说是又一场灾难,又是一次从0开始的起步,所以第一次的多线程电梯写的很烂漏洞百出,但是后面多线程的出租车慢慢的不断优化,也算是有了一个很不错的结果,总体上是学习了一些新产品。后面就是在代码风格,规范性等等各方面的学习,了解了这些规范化的写法。
(3)
首先是开发上的问题。开发者一定要对程序进行规格化描述,这样方便测试者对于代码的测试。另外,需要遵循一定的设计原则,使得代码的可移植性高,方便重构,否则会对之后的更新完善带来不小的麻烦。然后是测试的问题。如何对软件进行合理有效的测试也是工程化开发的重要问题。因为,一个软件的测试所需要花费的时间往往是开发的数倍。进行高效的测试便可以大大缩短工程的时间。
(4)
oo总体上来说难度是很高的,尤其是第一次java作业和第一次多线程的作业,但是也很人性允许有几次的无效。所以若是肯花一些时间的话还是能够保证不被挂科的。若是能够在入门的时候讲的更加的详细,更加的平滑的提升难度可能会好一些吧。互测的话,可以加入一个类似隐藏分的东西吧,把那些乱胡扯的人的隐藏分降低(根据被申诉的次数判断或者别的什么)。可能现在的骂声会少一点吧。
最新文章
- C#/PHP调用有SoapHeader的WebService
- 实验12:Problem G: 强悍的矩阵运算来了
- Windows Azure上搭建SSTP VPN
- Java中如何防止内存泄漏的发生
- jQuery訪问属性,绝对定位
- Netbeans IDE配置
- 使用getGenericSuperclass()和getActualTypeArguments()将DAO做成泛型
- [LeetCode107]Binary Tree Level Order Traversal II 二叉树层次遍历
- vlan内部与外部某终端之间的通信
- Asp.net MVC在Razor中输出Html的两种方式
- hdu 2047递推
- cw2vec理论及其实现
- 机器学习用Pandas实现数据库的读取
- redis知识汇总
- 【python】异步IO
- Spring 通过Java代码装配bean
- 如何修改电脑的本地网卡(非笔记本无限网卡)的mac地址
- 如何上传代码到github?
- xp中使用grubdos安装ubuntu13.04
- nginx负载