OO第十五次作业
关于测试和正确性论证两种方法的比较,两者各有其优缺点。首先,测试能够较为直观地显示程序是否出错,只要给定相应的输入,确定相应的正确输出,只要程序的实际输出与预定的正确输出不符是即可判定程序错误,操作起来较为方便。但是,它也存在一些缺点,比如,对于中型或者大型的程序,是很难用输入数据穷尽程序所有的运行情况的,因此,总有测试数据覆盖不到的代码或者分支,所以在经过测试后,程序的正确性仍然无法得到保证。另一方面,如果通过测试数据发现了bug,要想找出bug的发生位置只能通过调试的方法来进行,然而,普通的程序尚且可以复现,而多线程程序是不可复现的,同一组数据,在不同的运行中有可能会得到不同的结果。对于正确性论证而言,其弥补了测试不能完全覆盖的缺点,使用正确性论证理论上可以逻辑清晰地覆盖到程序的所有分支,使程序的正确性得到保障;然而正确性论证的缺点在于它过于繁琐,实际操作起来有一定的难度。
对象约束语言(OCL)作为图形符号的补充,说明建模元素的有关细节,例如:约束,前置条件,后置条件等等。其和JSF语言的相似之处在于二者均不同于自然语言,不存在二义性;二者均为形式化语言,都不会改变模型的内容;此外,二者一个较为重要的相同点在于两种语言都有前置条件和后置条件;另外二者都自定义了一些常用操作符,函数等用于简化描述。对于二者的不同之处,OCL语言引入了context用于表示当前描述作用的范围,而JSF语言没有;而JSF语言用MODIFIED列出了修改的变量而OCL没有;OCL相比于JSF更加接近于伪代码,JSF尽量要求编写者不要将其写成伪代码,而OCL似乎没有这方面的禁忌。
对于第十四次作业中的单电梯系统,针对调度器,电梯,请求队列和请求,整理的UML类图,顺序图如下所示:

UML类图

顺序图
最后,就是关于整个学期OO课程的总结了。这学期的课程分为四个模块,课程内容从最先开始的认识面向对象编程,了解面向对象编程的基本类容,如类的定义,类与类的继承关系等,之后开始涉及到java虚拟机的原理,以及java的多线程的机制,由此OO正式进入多线程的时代。在经过普通面向对象作业和多线程面向对象作业的锤炼之后,再给我们灌输一些形式化的规范内容,比如JSF描述语言来撰写类的规格,SOLID设计模式让程序的设计更加清晰有条理,具有可扩展性。关于自己程序的设计方法,我从最先开始的一个程序两个类,一个类上百行,到后来的懂得合理进行类的划分。测试上从最先开始的随缘测试,到后来的严格按照分支树测试,到后来的结合分支树和自己发现的易错bug进行测试。质量上从最先开始的经常出现冗余代码,到后来的在编程中对代码主动进行重构,分多个类以使逻辑清晰。个人认为,工程化的开发非常重要,现在的软件动辄上万行甚至上十万行,如果没有一个良好的工程习惯,一定会出现非常多的bug,而且在团队合作的时候错误的代码会给你的同事带来很大的麻烦。所以,掌握工程性开发的方法既能提高我们的编程效率,又提高了和别人的合作效率,至关重要。
最后的最后,关于对课程的建议,我觉得我已经没必要说了,相信很多真正感受过这门课的阴暗的同学有比我多的多想说的话,完全可以覆盖我的意见。
浙公网安备 33010602011771号