作业小结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老师和助教!
阐述自己对工程化开发的理解
工程化开发需要遵循一些特定的规则,不仅方便自己审查代码,也方便代码的交流理解,毕竟程序有不确定性且代码规模日益增大,所以需要提高开发效率,降低维护难度,这是必行之举。
工程化开发的一般流程:
需求分析-->概要设计-->详细设计-->编码-->测试-->验收-->维护
需求设计:深入了解和分析用户的需求,避免设计时不必要的改动。
概要设计:确定设计层次、模块划分、接口规范、数据结构、出错处理等。
详细设计:实现概要设计中各个模块的算法、调用关系、说明每一个程序的设计考虑。
编码:根据详细设计补充代码、完成系统的功能。
测试:对编写好的代码进行初步测试,通过后交给用户,由其确认各项功能得到正确实现。
验收:用户验收软件。
维护:根据用户需求和环境的变化,对程序进行部分或全部的修改。
软件工程化的优势
- 降低软件系统的复杂性
- 提高软件可靠性
- 提高开发、维护、测试的效率
- 减少系统内部的逻辑耦合
- 提高人员协作的效率
对课程的任何期望或建议
这门课贼棒!这么好听的课不应该翘掉。应该认真听讲。