作业小结4

测试与正确性论证的效果差异

测试

测试,就是通过自己对某个函数或者方法的功能,来自己构造测试数据,自己提前在脑子里想好结果,然后,检查自己脑子里的结果和程序运行的结果是否一样。如果一样且覆盖率达到了足够多的成都,表明程序大概率正确。这种方法我认为有以下几个优点:

  • 历史悠久,大家都认可
  • 结果客观,大概率不会出错
  • 定位bug很快速、准确和直观

正确性论证

正确性论证,也就是分析需求、撰写规格后,通过严密的逻辑论证来验证程序的正确性,这要求我们完全理解需求,正确撰写规格,同时全面细致的分析代码是否实现了需求和规格,理论上说,它可以检查出所有的逻辑bug。

个人看法

正确性论证,检查的是代码逻辑是否正确。

测试,检查的是代码实现是否正确。

二者缺一不可。双剑合璧,才能写出100%正确的代码。

仅仅通过测试,可能某些逻辑还是有错,尤其是边界情况。

仅仅通过正确论证,代码可能写错了。

因此,两个都非常重要!!!OO这门课实在是很严谨!点赞啊!!!

OCL语言与JSF规格

OCL(Object Constraint Language)语言是面向对象设计中对图形符号的补充,能够完善建模元素的相关细节。其与JSF规格有相似之处,也有不同。

对象约束语言是一种形式化语言,它主要用于表示UML模型中施加于模型上的约束。OCL具有如下特点:

  • OCL是一种精确的,无二义性的语言
  • OCL是一种规范说明性语言,所有有关实现的问题都不能用OCL来表达
  • OCL是一种纯表达式语言,它是具有没有任何副作用的申明性语言。
  • OCL是一种类型化语言,即OCL中的每一个表达式都是具有类型的。
  • OCL不是一种程序设计语言,不能用OCL编写程序逻辑和控制流程。

OCL与JSF的相同点在于他们都是形式化的约束语言。OCL包括的不变量、前置、后置条件、监护规则对应着JSF中的repOK、REQUIRES、EFFECTS、MODIFIES。不同点在于OCL相比JSF要复杂的多。

相同之处:

  • 都是一种形式化的语言
  • 具有无二义性
  • 每个变量都有类型
  • 不会改变系统的运行状态
  • 都采用前置条件和后置条件对方法的运行加以约束

不同之处:

  • 变量的类型:
    OCL有自己的一套变量(如Integer, Real, String, Boolean, Set, Bag, Sequence)
    JSF不仅支持Java语言定义的所有类型,还支持用户自定义的类型(比如有一个Request类, 则可以在JSF中用Request修饰变量)
  • 变量的运算:
    OCL对变量规定了可以进行的运算方式(如 Boolean类型的and, or)
    JSF支持Java语言定义的所有运算方式
  • 逻辑分支:
    OCL支持if, else一类的逻辑分支。
    JSF不支持if, else, while等逻辑分支。
  • 上下文
    OCL支持用context表达上下文
    JSF不支持上下文表述。
  • 符号系统
    OCL用pre, post表达前置条件和后置条件
    JSF用REQUIRES, EFFECTS表达前置条件和后置条件

第十四次作业的单电梯系统

UML类图

顺序图

状态图

总结

这个学期真的学会了非常多。对这门课的理解绝不是Java和面向对象那么简单。这门课很牛逼, it's more than java and OO.

还教大学生学会了做人。太牛逼了这门课!!!

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

第一单元,让我们了解面向对象,初步认识它。

第二单元,认识了多线程编程。

第三单元,知道了设计方法和原则。

第四单元,学会了正确性论证。

他们循序渐进,缺一不可!过度很自然,老师讲的非常好!非常喜欢OO老师和助教!

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

工程化开发需要遵循一些特定的规则,不仅方便自己审查代码,也方便代码的交流理解,毕竟程序有不确定性且代码规模日益增大,所以需要提高开发效率,降低维护难度,这是必行之举。

工程化开发的一般流程:

需求分析-->概要设计-->详细设计-->编码-->测试-->验收-->维护

需求设计:深入了解和分析用户的需求,避免设计时不必要的改动。
概要设计:确定设计层次、模块划分、接口规范、数据结构、出错处理等。
详细设计:实现概要设计中各个模块的算法、调用关系、说明每一个程序的设计考虑。
编码:根据详细设计补充代码、完成系统的功能。
测试:对编写好的代码进行初步测试,通过后交给用户,由其确认各项功能得到正确实现。
验收:用户验收软件。
维护:根据用户需求和环境的变化,对程序进行部分或全部的修改。

软件工程化的优势

  • 降低软件系统的复杂性
  • 提高软件可靠性
  • 提高开发、维护、测试的效率
  • 减少系统内部的逻辑耦合
  • 提高人员协作的效率

对课程的任何期望或建议

这门课贼棒!这么好听的课不应该翘掉。应该认真听讲。

对老师的话和对助教的话

谢谢你们!!!辛苦啦!!!继续加油啊!!!

posted @ 2018-06-25 18:27  Hull  阅读(361)  评论(0编辑  收藏  举报