1、测试与正确性论证编程
测试主要是对产品进行检查和测试,及时地发现程序中的故障和逻辑错误,以保障程序的可靠性。测试能够分为许多种类。测试能够为黑盒,也能够经过程序的逻辑结构进行白盒测试。经过测试用例来构造的测试,只能证实程序有错,不能证实程序无错。设计模式
正确性论证是从理论上对程序的正确性进行论证,经过证实能够得出程序逻辑上是否正确。在许多状况下,一个彻底的形式证实多是没必要要的。在某些状况下,若不能实现彻底测试,则也不可能实现彻底的形式证实。然而,咱们经常用程序正确性证实所开发的推理风格来指导测试过程,以加强对程序的信任,有时能够把某些性质的程序证实和其余性质的测试结合起来。安全
测试的门槛相较于正确性论证是比较低的。若是是进行黑盒测试,你能够经过划分等价类等手段覆盖化测试,若是是白盒测试,则能够经过对程序结构分析构造相应的测试数据。测试自己是一种很是直观的判断正确性的方法。而正确性论证自己难度比较高,不少时候难以论证。对比较大的程序,正确性论证也会很是复杂。当测试没法覆盖一些部分时,能够考虑使用正确性论证做为辅助与补充。多线程
2、OCL语言单元测试
OCL(对象约束语言)语言是一种形式化,无二义性语言,它主要用于表示UML模型中施加于模型上的约束。一个约束就是对一个(或部分)面向对象模型或者系统的一个或者一些值的限制。UML类图中的全部值均可以被约束,而表达这些约束的方法就是 OCL。OCL起源于1997年BIM公司为响应OMG的"面向对象分析和设计标准"征求稿所提交的"对象时间限制提议",OCL是该提议的部份内容。 用OCL能够描述四类约束,分别是不变量、前置条件、后置条件和监护条件。学习
与JSF的异同测试
类似之处:都用于表示面向对象中对模型的约束,都具备不变式,前置条件与后置条件。spa
不一样之处:(1)OCL语言是基于数学基础的,没有二义性,不会像JSF同样容易产生歧义线程
(2)OCL语言没有JSF中的MODIFIES,相应的,有一个监护规则,是对象可以从一种状态转变为另外一种状态前其值必须为真的约束。设计
3、UML图
4、顺序图
5、UML状态图
6、总结
一、四个单元模块知识点之间的联系
四个学习单元相互联系。第一个单元主要介绍面向对象的基本知识,如继承、多态、接口等面向对象基本知识与概念。第二单元学习了面向对象的一个重要应用,多线程编程,学习了多线程的基本模型,更加熟练了类的交互。第三单元介绍了程序的规格,学习如何先设计程序之处尽可能保证程序的正确性与规格化。第四单元主要着眼于测试与论证,经过单元测试与形式化论证来证实程序的正确性。
第三个单元所介绍的规格化设计与第一二单元是相互关联的,在进行设计之初,咱们就要着眼于线程安全,继承接口等设计,固定好规格。第四单元的测试与论证也是基于类和方法的规格来的。
二、本身设计、测试和质量的进步
这一个学期经过OO课程的学习,我对程序的设计能力确定是有显著提升。最开始我不能很好地理解面向对象思想,设计的程序也比较乱。在进行多线程编程后,我真正认真学习了必定的设计模式,本身在写做业以前也对程序进行了设计,代码质量有了显著提升。
测试方面,本身第一次进行了单元测试与正确性论证。虽然在以前也知道相关知识,但几乎一直在采用覆盖化测试。对测试程序有了系统化的理解,会对一些薄弱单元进行分析以后构造相应的测试用例进行测试。
三、工程化开发的理解
(1)工程化开发意味着程序体量很大,程序人员或许比较多。不进行系统化设计,规定好规格,可能致使程序各个部分的交互出现错误。
(2)工程化开发要求程序有容错率与报错机制。设计好程序的错误处理对后序的检查十分有帮助。
(3)程序要有可移植性与可维护性。代码要尽可能简单易懂,设计上须要考虑代码是否具备广泛性,是否是容易更新换代。
(4)工程化开发的程序要进行动态测试,静态测试,正确性论证等各类测试,来保证正确性。
四、对课程组的建议
(1)面向对象基本知识介绍的太少。咱们只有三节课的时间来介绍继承,抽象,接口和多态等面向对象最重要的概念。这些概念的熟练运用也须要经过读代码,写代码来实现。课程对面向对象的介绍实在太少了。
(2)最后对于规格介绍和测试彻底能够从新写一份代码,从头开始。我认为补充前面写过的程序的规格是十分不对的,先写代码再写规格彻底是本末致使。并且,刚开始学习时,写出的代码质量也不高,对这样的代码写规格,作测试很是痛苦。我认为能够考虑从设计,写规格,写代码,测试,论证的流程再从新完成一份做业,这样或许更能体现规格设计的优点。