OO第四次博客作业
1、比较测试和正确性论证
经过这几次的作业,我认为测试是一种能够有针对性地、很快发现程序存在的一些基本问题的检验方式,它的效果主要取决于构造的测试用例是否充分、全面且典型。尤其是一些边界情况的测试很快就能暴露一般情况下看不出来的bug。测试是从使用者的角度出发的,而相较而言,正确性论证更侧重于系统的、宏观的检测,是从开发者的角度出发的。
正确性论证暴露问题的效果可能不像测试那样立竿见影,但是却是一个全面细致的检测过程,测试始终带着一些随机性,即使所有的测试样例都通过了程序仍有可能存在很大的问题,而正确性论证虽然也不能说明百分之百的正确,但是它对输入输出的划分和挨个讨论确实涵盖了很多一般情况考虑不到的偶然情况。更重要的是,正确性论证不仅能够发现程序运行结果的错误,还能发现其实现上的冗余和潜在威胁,从而提出优化的方案,有利于将来的拓展。如果程序本身框架不够好,对其进行正确性论证也会变得困难,而对于测试来说,只要最终结果是对的,如何实现其实并不关心,这也就造成了隐患。
我认为这两者应该结合起来,用正确性论证来证明程序的完备性和合理性,提出优化的方案,根据正确性论证对输入输出的划分来构造测试用例集,以测试来巩固和落实程序的效果。
2、比较OCL和JSF
OCL是对象约束语言,是一种指示用户建模系统中的限制方式,用来更好地定义对象的行为,并为任何类元指定约束。
OCL与JSF的相同点是,两者都属于形式语言,不能够展示代码的具体实现,都能够以逻辑表达式来指出约束条件,且都具有不变量、前置条件和后置条件。
OCL与JSF的不同点是,OCL包含一系列数据类型和关键字,语法要更加严格和精确,而JSF能够包含自然语言,相较而言要更灵活。另外,JSF具有Modifies属性。
3、第十四次作业图
3.1 UML类图

3.2 时序图

3.3 状态图

4、学期总结
4.1 知识点回顾
本学期第一单元是我刚接触java语言和面向对象编程,这一单元主要让我体会到了面向对象的思想,学习了java的类、对象、继承、接口等一些基本概念,这一单元是入门的内容,也是几个单元的基础;第二单元开始尝试多线程,重点是学习线程之间的交互方式和线程安全问题,当然也包括相关的语法内容,这一单元以后的编程作业基本都是依靠多线程实现的,所以这一单元也属于重要的基础内容;第三单元开始,从单纯的写代码实现功能上升到了模块化、工程化的设计体系,从分析需求开始,到给程序添加规格再到依据规格发现问题,感觉又上升了一个层次;最后一个单元是回归测试,主要是掌握一些工程中常用的测试论证方法,从完备测试的角度发现自己程序中的问题,相应地也学习了Junit等实用工具。
这四个单元的主旨思想是在不断提升的,一方面以之前学过的东西为基础,另一方面完成后面的任务也是对之前所学的不断练习和巩固。
4.2 程序设计梳理
这一学期以来,我写了这么些程序:多项式计算器、单线程电梯、多线程电梯、文件监视器、出租车系统。
从设计上来说,感觉后几次的思路明显比前面要清晰,也有了面向对象的概念,在写代码之前会有意识地规划好各个类,现在回头看最开始的几次作业,都不知道自己当时在想些什么。从测试上来说,头几次几乎没怎么好好测,后面的测试都尽量去构造全面的测试用例,虽然有几次效果还可以,但是后来输入情况变得复杂,特别是多线程的情况下,还是有些不知从何入手。学了规格化的描述之后对输入情况的划分要相对而言清晰一些,但还是很难做出非常全面的测试,可能是时间没有把握好。设计上有进步,质量上就相应地提高了,也积累了一些常用的技巧之类的,能把所有的任务坚持完成我觉得还是很高兴的,但是我也清楚自己还是有很多不足,需要更多地练习。
4.3 对工程化开发的理解
上了一个学期的课,工程化开发给我的感觉就是要清晰、明确、可拓展。
从设计上而言,各种模块层次的划分,对需求的分析,还有程序规格的要求,其实都是为了保证整个程序的框架式清晰明确的。而某个小模块的实现,只要是在满足要求和约束的情况下,具体的实现细节并不重要,也许有优化的空间,但是优化也是在满足约束下的优化,所以对于工程而言,整个框架没有问题是最重要的。另外,设计者总是要为程序留有扩展的空间,要考虑到可能的发展,在构建框架的时候尽量按照可拓展的方向进行,不然加一个需求就要推倒重来是很麻烦的。
4.4 对课程的建议和期望
我觉得OO是一个很有想法的课,考核方式也很新颖。虽然说确实是存在不公平、测试划水等等的问题,但是总的来说在这种情况下大家的积极性还是高的,有种逼着我们学习的感觉。
但是对我这样的水平来说,OO的截止时间有些太近了,在每个星期内都要完成一次代码提交和一次测试还是比较紧张的。虽然完成是能够完成,但是没办法做到自己感觉的最好,而且还有别的课程需要学习,实在有些力不从心、顾此失彼。希望今后能够放松两次作业之间的期限,或者可以把中间的考核改成占比小一些的,比如每一单元都有一次重点的考核和几次小考核,相当于做一个项目的中期汇报和最终评定,这样压力可能会小些,也有机会好好优化每一次的任务。

浙公网安备 33010602011771号