一、测试与正确性论证差异对比
测试,顾名思义,就是用一些有意义或无意义的输入去检测程序的正确性或鲁棒性,因其直观明了所以在写简单的程序时我们能迅速找出bug并加以解决。并且,这种方式是绝对客观的,只要和正确结果不匹配那么程序就一定存在一些问题。测试最大的缺点便是无法完全覆盖所有情况,即使很大的测试数据也可能跑不出来某些细微的bug,但这种bug有可能是致命的。
正确性论证则是从代码逻辑角度去分析代码,它的好处便是可以完全覆盖程序的所有情况并加以分析,只要分析不出错就能保证程序不出错,但这种方法的缺点也比较明显,需要耗费大量时间和精力去完成这一工作,并且这种方法的正确性是建立在规格正确的基础之上的,一旦规格不完善也将导致该方法出现纰漏。
总之,两种方法各有利弊,在面对复杂程序时两种方法都显得比较吃力,但若只考虑正确性,那正确性论证无疑要比测试来的可靠。但如果程序本身实现的功能不多,那么靠测试用例轰炸一番基本就不会遗留bug了。
二、OCL与JSF对比
OCL语言(对象约束语言)是一种用来进行约束定义的、形式化的、无二义性的语言,用来阐明建模元素的某些细节。
相同点:
二者均是声明型语言,不会改变描述对象的内容,并且二者都是形式化的、规范的无二义性语言,都有前置条件、后置条件和不变式。
不同点是OCL语言具有高级数据类型,并且它基于上下文给出,而JSF则是针对方法用布尔表达式描述相关条件,并且没有新的语言元素的参与。此外,二者的语法差异较大,OCL中有许多既定名词和JSF中不同。
三、第十四次作业的uml图
1、uml类图
2、uml时序图
3、uml状态图
四、学期总结
1、知识点总结
这一学期我们学习了四个单元的知识。系统的了解了面向对象程序设计的过程以及工程化的开发过程。
第一单元作为基础入门单元,介绍了面向对象程序的特点及描述方法等,让我们对面向对象有了初步的了解;
第二单元开始,我们的程序设计就有了质的飞跃——开始写多线程程序。这一部分介绍了多线程的实现机制、线程同步、冲突问题等,让我们对多线程程序有了一定的认识;
第三单元则在多线程程序的基础上添加了规格描述的过程,主要介绍了JSF的规范书写和程序的规格化设计,这一部分重点就开始从写程序转移到设计与规范了;
最后,第四单元着重介绍测试,包括JUNIT测试和正确性论证,重点又从规格转移到了测试。
总的来说,这是一个循序渐进的过程,但不足点我觉得在于规格应该提前一些,因为它是一个整体的构造策略,而不是写完再去根据程序补充规格。
2、个人程序总结
经过这一学期的学习和磨练,我在写代码上的功夫又上涨了,的确比以前更加熟练。但从设计方面来讲,我觉得我的提升并不大,因为我本身代码基础比较薄弱,每次写程序之前都要绞尽脑汁去想这个程序到底要干嘛,也把每一部分的功能大致想好了,这里就有些思维定式的东西在里面,所以之后介绍的设计思路我并没有借鉴太多,还是根据自己的想法去设计这个程序(完美的自己的节奏-_-||);
谈到测试上的改变,我觉得Junit算是一个比较不错的工具,并且我在构造测试样例时也会从程序的逻辑出发去找一些尽量刁钻的数据,而不是像最开始的多项式直接开始轰炸。但是关于正确性论证我还是觉得比直观的测试来的复杂,这一块因为也没有后继作业我也就没有过多探究,也从未采用这种方式去验证我的程序;
最后,谈谈最关键的写代码环节。这一学期的作业写下来我写代码更加熟练了,这点是毋庸置疑的,并且也开始向大佬们学习分好多方法,也逐步有了自己的代码风格。面对一个复杂的需求也不太发怵了,也能循序渐进地去试着完成它。我觉得这一点上我收获很大。同时,互评阶段了解其他同学的设计思路对我也有一定帮助。
3、关于工程化开发
首先,我个人觉得工程化开发不应该是一个人的事情,应该是许多人按照某种约定的规则去开发同一个东西,并且相互之间了解彼此的想法、看懂代码都不是问题,oo这门课虽然有工程化开发中的规格设计、验证等环节,但终究是自己做给自己看,互评的同学只会把它当做一个扣分点,总的来说,还是因为没有合作关系的产生,才让工程化开发的理念和方法在这门课上显得如此鸡肋(JSF除了能被扣分还能干吗?我相信这应该是很多同学的想法),但是如果这门课设计一个合作环节,并规定几个合作者之间的工作范围,这样工程化开发的价值有可能就会被同学们发掘出来。
4、期望和建议
就如同我刚才分析的,希望这门课能开发一个合理的合作环节,以此来体现工程化设计的价值,同时减轻同学们的负担。并且,希望这个互评机制能更合理一些(虽然具体怎么做我不太清楚,但目前这个机制一定是存在问题的,不然不会导致几乎所有同学都对这个机制有意见)。最后,希望指导书能再完善一些,并且发布的时候就是最终的版本,不要再改来改去了。
总的来说,这门课锻炼了我写程序的能力,我也能写出以千行为单位的程序了,而且还能正确运行。我觉得就已经够了。
原文地址:https://www.cnblogs.com/xyt1606/p/9216812.html