OO学期总结

一、测试与正确性论证

程序测试(program testing)是指对一个完成了全部或部分功能、模块的计算机程序在正式使用前的检测,以确保该程序能按预定的方式正确地运行。软件的正确性尚未得到根本的解决,软件测试仍是发现软件错误和缺陷的主要手段。为了发现系统中的错误,应竭力设计能暴露错误的测试用例。测试用例是有测试数据和预期结果构成的。一个好的测试用例是极有可能发现至今为止尚未发现的错误的测试用例。

程序正确性理论 [1]  (theory of program correctness)程序设计理论的一个重要组成部分.研究如何使用程序设计语言编制程序,以正确实现预定的目标.程序正确性理论提出编制正确程序的两种途径一种称为程序验证,研究如何使用数学推理来严格论证程序是否符合其目标.另一种称为程序综合,研究如何由给定目标出发,逐步构造一个在计算机系统上可运行的程序,而且要求构造过程的每一步都是严格保持正确无误的.在保证正确性的前提下,为提高程序运算效率而实现的程序之间的转换,称为程序变形,也是程序正确性理论的一个重要内容.程序综合和程序变形是自动程序设计的理论基础.

其中正确性论证的抽象程度更高,可靠性更好,覆盖路更高,但是相对成本也会更高,软件测试和正确性论证需要在不同的场景中灵活运用,结合两者的优点,才会发挥更大的作用,收获更好的效果。

二、OCL(Object Constrain Language)

OCL,是一种指示用户建模系统中的限制方式。它是UML可选的附加内容,可以用来更好的定义对象的行为,并为任何类元指定约束。

特点:

  1.是一种精确的、无二义性的语言,易于使用和掌握。

  2.是一种规范说明性语言,它是具有没有任何副作用的声明性语言。对OCL表达式的计算将返回一个值,计算不会改变系统的状态。

  3.是一种类型化语言,即OCL中的每个表达式都是具有类型的。

  4.不是一种程序设计语言,,不能用OCL变现程序逻辑和控制流程。

JSF和OCL具有很多相似点,但是JSF的规范性不够强,并且OCL具有很多类型,而JSF的类型较为单一。

三、 捎带电梯

1. 类图

2. 时序图

3. 状态图

四、学期总结

4.1单元模块

四个单元模块分别为Java基础、多线程和线程安全设计、抽象与规格、测试与论证。这四个单元模块是循序渐进的,又有所交叉的。首先Java基础是认识面向对象,从对类的划分,再到Java多线程,难度逐渐上升,至少类的划分不能再是问题。在此基础上,提出类对规格和抽象,逐渐上升到代码质量的层次,最后是论证程序的正确性,工程化要求。

4.2 设计、测试、代码质量分析

最初是完全不会设计的,但一学期的训练,至少懂得了该如何分析与设计,且不说设计的好坏,懂得了程序的设计对于程序实现的重要性,不同的设计在代码实现上难度是不同的,并且在后期测试,论证等方面都能很明显的体现出来,磨刀不费砍柴工,设计很重要。第二,测试是软件工程中十分重要的一个流程了。程序是完成用户的需求,而测试就是检测相关功能是否实现,以及其他边界情况。好的测试,会增加代码的鲁棒性,健壮性,以及可靠性,通过测试,能够更快的对整个程序的功能实现有所了解,为后续的交付提供依据。第三,代码质量,是设计,测试,代码风格的综合体现。想起自己以前的面条式代码,可以说非常惭愧了。首先,在设计上了解了Java的相关设计模式,在测试上,懂得了鲁棒性测试,以及分支树测试,在代码风格上,良好的缩进,合适的方法职责等。总的来说自己这一学期是从无到有的过程,确实是学到了很多东西。

4.3 工程化开发

一个工程,需要设计、实现、测试、论证等一系列工作的完成。工程是严谨的,是面向需求的,在实现需求的基础上,减少实现成本,提高实现的可移植性。工程化开发具有多人合作性,即需要规范化实现,提高团队的效率,减少错误的出现。我认为大概步骤如下:

  1. 需求分析;
  2. 架构设计;
  3. 具体类的设计;
  4. 规格实现(JSF);
  5. 代码实现;
  6. 工程测试;
  7. 正确性论证;
  8. 交付客户;
  9. 客户反馈;
  10. 更新设计,实现改动;

上面的过程并不仅仅是次序关系,在整个工程的过程中是有所交叉的。总的来说,工程化开发首先是面向需求,其次是规格化,提高团队效率,减少错误。

4.4 对课程的期望与建议

当我置身事外来看OO时,其实感觉OO这门课所教授的也不过是工业界的一角。我们训练的内容不过也是很简单的东西,但对于我来说已经是比较难了(当时觉得,现在活过来了,觉得还好)。对这门课的期望,也许就是更加公平化的测试了吧。我觉得是分数限制了这门课的良好效果。如果没有那么多的分数利益(通过非正当方式),也许就会更加关注提高自身,从而获得更高的分数,但有的时候这个制度确实是伤了勤勤恳恳的同学的心。不管这门课有多少槽点,我还是要感谢这门课,因为我也确实是学到了很多知识(从小白做起),希望OO越办越好,加油!

[引用]

https://wenku.baidu.com/view/aa4124c70408763231126edb6f1aff00bed570ae.html

原文地址:https://www.cnblogs.com/notstandalone/p/9222781.html

时间: 2024-08-08 17:31:22

OO学期总结的相关文章

如何从普通程序员晋升为架构师 面向过程编程OP和面向编程OO

引言 计算机科学是一门应用科学,它的知识体系是典型的倒三角结构,所用的基础知识并不多,只是随着应用领域和方向的不同,产生了很多的分支,所以说编程并不是一件很困难的事情,一个高中生经过特定的训练就可以做得到.但是,会编程和编好程绝对是两码事,同样的程序员,有的人几年之后成为了架构师,有的人却还在不停地coding,只不过ctrl-c.ctrl-v用得更加纯熟了.在中国,编程人员最终的归途无外乎两条:一是转向技术管理,它的终点是CTO:二是继续深入,它的终点是首席架构师,成为CEO的人毕竟是少数.如

OO第一阶段纪实

$ 0 写在前面 在DDL一次次的推动下,历经三个周期的更迭,一个月的时光匆匆而过.谨撰此博文,以记录这一段见证成长的心路历程. $ 0-0 JAVA"一天速成"没有修习过传说中的"OO先导课",在学期开始之前也从未接触过JAVA编程,真正的从零开始学JAVA.有了先前课程的基础,经过了一年的积累,在短时间内学会使用一门语言并不困难,在加上JAVA天然的与C语言之间的某种相似性,也使得"JAVA一天速成"并非遥不可及. $ 0-1 "过

小菜鸡儿的第三次OO博客

规格化设计历史 规格化设计的历史目前网上的资料并不多,百度谷歌必应也表示无能为力...... 在这里结合现实情况讲一讲自己对程序规格化的理解,首先代码规格化对代码的影响是间接的,或许它不能让你代码里面的bug直接消失,或许它也不能让电梯之间不相互阻塞,但是它能让OO实验拿到更多分啊//笑.玩笑归玩笑,下面具体分析一下规格化设计(JSF为例)的作用: 在代码实现过程中,人们往往不能从一开始对整个项目的每个细节都面面俱到地思考一遍,规格化设计在开发初期可以将项目中的细节隐去,工程师只需要考虑类or包

OO第三次博客

一.规格化设计相关 编程语言的规格化使用历史在网上的资料真的很少,我查阅了维基百科和谷歌学术的相关论文,关于这部分的讨论非常少.但可以确定的是,规格化的使用和工业上规范规格是有很大关系的,程序语言的发展和工业制造的发展有着一定的相似性.诸如国际化标准组织ISO,其宗旨是促进时间范围内的标准化工作的发展,推动国际间知识.科学.技术和经济方面的合作.具体来讲,它需要协调世界范围内的标准化工作,与其他国际性组织合作研究有关标准化问题.我们课上所讲和课下所用的规格化是为了规范方法使用的.工业产品和程序一

oo第四次博客总结

一.测试与正确性论证差异对比 测试,顾名思义,就是用一些有意义或无意义的输入去检测程序的正确性或鲁棒性,因其直观明了所以在写简单的程序时我们能迅速找出bug并加以解决.并且,这种方式是绝对客观的,只要和正确结果不匹配那么程序就一定存在一些问题.测试最大的缺点便是无法完全覆盖所有情况,即使很大的测试数据也可能跑不出来某些细微的bug,但这种bug有可能是致命的. 正确性论证则是从代码逻辑角度去分析代码,它的好处便是可以完全覆盖程序的所有情况并加以分析,只要分析不出错就能保证程序不出错,但这种方法的

接着继续(OO博客第四弹)

.测试与JSF正确性论证 测试和JSF正确性论证是对一个程序进行检验的两种方式.测试是来的最直接的,输入合法的输入给出正确的提示,输入非法的输入给出错误信息反馈,直接就能很容易的了解程序的运行情况.但是,每次测试只是在程序涉及的整个问题空间取一个元素进行测试,一次测试只能确保程序对于测试中的样例和同类样例是正确的,并不能确保全局正确性.而为了追求全局覆盖性,就需要大规模的测试样例轰炸了,但是这时测试的最致命缺陷就出现了,一是如何构造如此大量且属于不同类别的测试样例,二是如何确保构造的测试样例能够

OO第四阶段总结

一.测试与正确性论证的区别 从哲学的角度来说,正确性论证与测试的关系就像理论与实践的关系一样. 使用测试的方法检验程序正确性确实是一个非常方便可行且广泛运用的方法.可以通过几个简单或复杂的测试样例,迅速地校验程序主要逻辑是否正确,运行结果是否符合预期.但是对于较为复杂的问题来说,测试样例很可能并不能覆盖所有的情况,因此我们曾经引入代码覆盖率和分支覆盖率的概念.但是在操作过程中我发现,即使某个不完全的测试样例代码覆盖率达到100%,分支覆盖率高于95%,它仍然并不一定完全检验程序的逻辑是否正确,即

【完结】OO第四阶段总结,内涵大量对测试者的批判

1.测试与正确性论证的比较 测试: 效果直观,便于调试,可操作性强,但是覆盖率不如正确性论证. 正确性论证: 覆盖率高,可靠性高,但是可能会忽略代码实现的错误细节,不够直观,篇幅过长,不易于阅读. 比较: 测试和正确性论证都是测试工程的好方法,但是面向对象本身就是一种极为具体化的简单设计思路,正确性论证的必要性很小,大多数情况使用单元测试就能很好的应付测试需求. 2.OCL和JSF的比较 OCL是一种对象约束语言,没有二义性,能够完善建模元素的相关细节. 相似之处:思想类似,目标相同,框架相仿.

OO总结

一.测试与正确性论证 测试:从需求出发,构造测试集,给出期望输出,可以证明程序存在bug,但是无法证明程序是正确的 正确性论证:从程序最终实现出发,基于程序逻辑,通过假设.推理.论证,证明程序的正确性. 两相比较下,正确性论证具有更高的严谨性,但是也需要投入更大的时间精力.故两种方法难分高下,有不同的应用场景,需要针对性使用. 二.OCL & JSF OCL(Object Constraint Language),即对象约束语言,是一种用于施加在指定的模型(UML)元素上约束的语言. 其特点为: