第四次总结
测试与正确性论证
正确性论证:基于理论的,通过逻辑上证明程序的正确性.
好处:
测试不能包括无限的全集,但是通过正确性论证可以取到所有的数据情况,来从理论上证明程序的正确性
缺点:
不能严格保证程序的正确性,完全可能出现理论正确但实际上却有实现错误的情况出现,正确性论证不能保证程序的实际正确性.理论论证过程较麻烦,其中可能出现逻辑错误而不自知,正确性论证较复杂,论证过程的正确性也难保证.
测试:通过给定,自己构造的数据集对程序进行测试,要求各种数据下都能输出对应的正确结果.
好处:
能够直观的判断程序的好坏,能够通过测试直接来发现bug修改,测试能够保证在大多数据情况下的正确性.
缺点:
测试不能包括所有的数据,所以测试并不能保证程序的完全正确性,完全可能存在边界情况,特殊情况的错误.同时测试数据的来源不定,对于任一组测试数据,其对应的正确输出也需要考量.
总结:
两者各有千秋,在对于判断程序的正确性上,一个处于理论另一个处于实际,两者的功能有互补的地方.
OCL和JSF
ocl的作用在于对设计的对象进行约束,且保证不存在二义性。
jsf的作用是对目标类和方法的功能进行约束,要求变量满足不变式,程序依照需求,改变,结果.
两者约束的"力度",条件各不相同.可以把jsf认作为轻量级的ocl.
第十四次作业
作业类图:
时序图:
状态图:
学期总结
四个单元模块知识点之间的关系
第一个单元是基本的java程序编写,从零开始认识java,编写一些单线程的程序,加强对于面向对象的编程习惯,掌握类属性方法等元素以及继承、多态等OO的基本思想.
第二次单元是基本的多线程,引入并行的概念,编程时候要做好同步.
第三个单元注重的是jsf,关于代码规格的问题,
第四个单元是代码的正确性论证和测试.
个人收获与小结
个人以前没有接触过java,以前写过的代码也仅限于c/c++/python等,但都只是单线程的,面向过程的编程方式.
我觉得最大的收获是学会了,熟悉了面向对象的编程思维方式,把结构作为对象,同时,还学习到了多线程的编程方式,
对于代码注释,规格的编写,还有完成后的测试.从写代码的思想和方法到编写完成后的测试和交互都有所成长.
对工程化开发的理解
感到工程化的主要目的是,把一份大的作业(工程)分成多个小块,让不同的人去完成自己的这一块,所以良好的封装和规格的书写,很利于
同事之间的交互.特别是在代码比较复杂,功能强大,代码量大的时候,很难让一个人去把这些代码全都融会贯通,只是把这些当做一个个对象进而统一规划.
要做好的话,首先要保证自己代码的可靠性,在此之上,要保证代码的可阅读性(规格和注释等)
对课程的期望和建议
这门课收获很多但也有让人不大舒服的地方,很突出的特色就是互测吧,其实互测能给人带来的进步确实不小,独立的代码测试能力,对于"客户""测试者"之间角色的沟通交流问题,
但是个人感觉机制并不够完善,如果你互测的成绩能够保证百分之七十由你的实际代码好坏决定,那我觉得是十分不错的.但是实际上,你的分数往往掌握在你的对手和你的测试对象上,
好的代码可能不一定能有好的分数,也确实存在部分很恶心人的现象,为了拿分不择手段,公测全挂互测,私下交易,认定的错误该报一个的情况报了许多个.同时有些同学交流的时候说话
方式十分不礼貌,对别人的代码表示鄙视,看低别人的能力,可能会引起争吵.
但不否认,遇到不错的测试对象,也是十分舒适的交流习惯,大家帮忙测试对方的bug并且交流,自己有得有失,互相帮助完善自己的代码能力和思维能力,最后大家互相道谢也是很好的情况.
给出的具体建议:
公测的比重建议加重,有许多作业公测点太少,全看互测来决定.希望起码公测能起到判定一个代码基本好坏的程度.