1.论述测试与正确性论证的效果差异,比较其优缺点。
测试与正确性论证的差异是,测试是对代码正确性的验证,是对代码实际运行结果与预期运行结果的比较。而正确性论证是检查代码逻辑与规格逻辑的一致性。
相对于测试即使有大量数据也可能无法覆盖各个分支的情况,正确性论证可以完全覆盖代码所有的可能性。只要正确性论证的过程没有错误,也就可以证明程序是正确的。
但是从难度来说,正确性论证的难度是要远远大于测试的。测试因为可以进行黑盒测试,无需了解代码内容。而正确性论证则是需要测试者需要深入代码的实现,去逐个论证代码实现是否严格遵守规格内容。在繁琐的过程中出现了一步错误都不能得出最后正确的结论。二者各有优缺点,在使用时应该是相互辅助的关系。在完整一份正确代码的工作中,二者缺一不可。
2.调研OCL语言,并比较其与课程所介绍的JSF规格之间的相似和不同之处。
OCL: Object Constraint Language.它是UML标准的一部分。OCL是对UML的补足,在去除了自然语言的暧昧性的同时,也避免了复杂的数学记法,是用于基于图的模型的标记语言。
同:二者都是形式化,声明,约束性语言,本质都是前置条件向后置条件的一个导向,对过程规格的关心程度有限。同时,二者都使用了数理化的逻辑,但是出于自然语言的转化困境,二者也都创立了一部分数理逻辑语言之外的,便于规范的新语法。
异:OCL语言有JSF语言所没有的监控条件部分,使得作为一种约束语言的约束真值表达性更为强大,同时,OCL的语法结构相较于JSF更为复杂,这使得他更便于规格的书写,但难于对于规格的验证。JSF语言比较于OCL语言多了Modifies域,更好的能够让书写者完成变量监控,同时JSF语言对布尔表达式的数理逻辑依赖性更强,这对书写者提升了抽象性的难度,但是在验证正确性和进行迁移的时候更为方便。
3.1UML类图:
3.2时序图:
3.3状态图:
4.1四个单元模块知识点之间的关系
这一学期我们学习了四个单元的知识。系统的了解了面向对象程序设计的过程以及工程化的开发过程。第一个单元讲的是OO,第二个单元是多线程,第三个单元是规格,第四个单元是测试&正确性论证。
第一单元作为基础入门单元,介绍了面向对象程序的特点及描述方法等,让我们对面向对象有了初步的了解;第二单元开始,我们开始写多线程程序。这一部分介绍了多线程的实现机制、线程同步、冲突问题等,将多线程这个概念带入到了我的脑海中;第三单元则在多线程程序的基础上添加了规格描述的过程,主要介绍了JSF的规范书写和程序的规格化设计,这一部分重点就开始从写程序转移到设计与规范了;最后,第四单元着重介绍测试,包括JUNIT测试和正确性论证,重点又从规格转移到了测试。
4.2梳理自己所设计实现的程序,分析自己在设计、测试和质量上的进步
从多项式到电梯,从文件监控系统到出租车。渐渐地从C语言的思维中跳出,开始考虑模块的应用。学习Java,了解对象,线程,规格,类图
这一学期,这门学科,给我留下了太多回忆了。我水平很低,只能常常为自己会不会进补给站而挣扎。不过在一次次挣扎中,也确实学到了很多知识。更重要的是,oo教会了我面对各种各样的需求时该如何思考,而不单单是上来就埋头傻干。我认为这才是最宝贵的东西