欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

作业小结4

程序员文章站 2022-03-10 18:27:08
测试与正确性论证的效果差异 测试 测试,就是通过自己对某个函数或者方法的功能,来自己构造测试数据,自己提前在脑子里想好结果,然后,检查自己脑子里的结果和程序运行的结果是否一样。如果一样且覆盖率达到了足够多的成都,表明程序大概率正确。这种方法我认为有以下几个优点: 历史悠久,大家都认可 结果客观,大概 ......

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

测试

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

  • 历史悠久,大家都认可
  • 结果客观,大概率不会出错
  • 定位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类图

作业小结4

顺序图

作业小结4

状态图

作业小结4

总结

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

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

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

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

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

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

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

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

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

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

工程化开发的一般流程:

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

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

软件工程化的优势

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

对课程的任何期望或建议

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

对老师的话和对助教的话

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