OO第四次博客作业

一、 论述测试与正确性论证

  测试是利用测试代码,通过编写测试用例来验证代码是否能正常完成所要求的功能,自动测试相较于正确性论证来说更加的直观,直接测试代码的功能。

  • 优点:易于实施,工程广为采用。通过第十四次作业书写正确性论证可以看出来测试相比正确性论证更容易实施,周期更短,对于有时间限制的工程开发来说是非常高效的。

  • 缺点:无法确保正确性,只能通过的测试发现bug,而不能证明没有bug。

  正确性论证是在JSF的基础上用表达式和语言梳理代码的结构并论证其功能的正确实现。

  程序正确性论证是个偏公式化的体系,步骤严格精细,可靠性与稳定性更强,但操作起来具有一定的困难,尤其是面对代码规模稍大的方法,论证很难做到完整清晰,由此效果可能削弱。

  论证是针对格式化的规格和代码实现,人工方式对代码逻辑进行分析,确认是否所有满足前置条件的输入都能产生满足后置条件的结果。

  • 优点:折衷,形式验证与自然语言层次逻辑推理相结合。保留了形式化论证的相对按严格验证,同时又保证了相对高效性。

  • 缺点:无法确保自然语言层次逻辑推理的严谨性。

二、 调研OCL语言

  OCL(object constraint language)对象约束语言,一种用来进行约束定义的,形式化的无二义的语言。它是是面向对象设计中对图形符号的补充,能够完善建模元素的相关细节。

  特点:

  1. 精确,无二义性,易于使用和掌握;

  2. 规范说明性语言,无法表达有关实现的问题;

  3. 纯表达式语言,没有任何副作用;

  4. 类型化语言,每个表达式都具有类型;

  5. 不属于程序设计语言,不能编写程序逻辑和控制流程。

  OCL与JSF的相似处:

  1. 两者都有所谓的“前置条件”、“后置条件”、“变量”、“不变量”等;

  2. 表达相对静态的运行结果,而非具体的过程;

  3. 都不能直接用于编写程序。

  不同点:

  1. JSF是规格化表达,OCL已是独立的一种语言;

  2. OCL的表达式有具体的类型分别,且有专门的类型层次结构。

  3.JSF更加偏向行为描述,而OCL更加偏向于建模过程。

  4.OCL支持上下文(使用context),但是JSF不支持

  5.二者的符号系统不太相同

三、 根据第十四次作业作图

类图

时序图

 

状态图

 

四、 总结

 1.阐述四个单元模块知识点之间的关系

第一单元是面向对象的基础层次,主要通过三个简单的单线程作业训练我们对java语言的使用以及继承、接口、多态等面向对象基本特征的熟悉与掌握,是整个课程的基础。

第二单元进一步贴近真实,强调交互性与多线程,主要训练了我们的线程安全设计与对象管理能力。让我们理解多线程的死锁和安全问题。

第三单元是在代码训练的基础上追求规格化测试,一个程序不仅要实现功能还需要方便测试者进行测试。

第四单元是测试实践(包括Junit单元测试以及类实现正确性推理)。是在程序正确的基础性上追求更好的程序风格和测试能力。

 

2.梳理自己所设计实现的程序,分析自己在设计、测试和质量上的进步

        第一单元的时候自己从零开始学习java,写出了java版本的C语言程序。之后了解正则表达式,多线程,慢慢的语言风格在改变。慢慢适应了面向对象编程思想。熟悉了多线程编程,掌握了实时交互式程序的编写。积累出一定经验,在开始设计的时候就会思考如何提高自己设计的可拓展性来应对各种可能的变更。

  测试方面,主要掌握了基于bug树建立大规模的测试数据、单步调试、通过测试线程进行Junit测试和覆盖率检查等技能。互测阶段,通过阅读陌生的代码了解结构后有针对性地设计样例也是不小的收获,对以后的工程开发有重要的意义。最后的正确性论证算是对以上所有工作的一个总结和梳理,让整个工程更加完整规范。

3.阐述自己对工程化开发的理解

        工程化开发需要保证自己的程序足够方便的进行修改,不要为了实现一个功能加上特定的变量或方法,不然在需求更改的时候就会十分的麻烦。其次工程化开发的JSF确实十分有用,如果有完整的JSF完全可以进行代码的还原。

4.对课程的任何期望或建议

  我认为应该先进行与JSF有关的作业再进行代码作业,后面的作业根据代码写规格,根据已经测试正确的程序论证正确性都十分奇怪。

posted on 2018-06-25 13:22  yyf小僵尸  阅读(124)  评论(0)    收藏  举报

导航