测试和正确性论证都是对程序进行可靠性的验证。java
IEEE提出了对软件测试的定义:使用人工或者自动的手段来运行或测定某个系统的过程,其目的在于检验它是否知足规定的需求或者弄清预期结果和实际结果之间的差异。它是从对程序的实际操做来对运行结果和指望的结果进行比对,实质上只是一种抽样检查,只是一种查错的手段,它能够帮助人们去发现程序中的错误,但不能证实程序中没有错误,即:测试不能证实程序是正确的。测试又分为黑盒测试和白盒测试:正则表达式
相对于测试,正确性论证是经过严格的数学和逻辑推导证实程序是否符合规格说明。程序正确性理论提出编制正确程序的两种途径:一种称为程序验证,研究如何使用数学推理来严格论证程序是否符合其目标.另外一种称为程序综合:研究如何由给定目标出发,逐步构造一个在计算机系统上可运行的程序,并且要求构造过程的每一步都是严格保持正确无误的。正确性论证过程当中经过严密的逻辑和布尔表达式来对全部的状况进行分析论证,缺点是步骤繁琐篇幅较长,可是更加全面和有力。express
对象约束语言简称OCL(Object Constraint Language),是一种用于施加在指定的模型元素上约束的语言。OCL表达式以附加在模型元素上的条件和限制来表现对该对象的约束,其中包括附加在模型元素上的不变量或约束的表达式、附加在操做和方法上的前置条件和后置条件等。编程
相同点:设计模式
二者都是对象约束语言,都对附加在模型元素上的条件和限制来表示对该对象的约束,包括了不变式,附加在操做和方法的前置条件和后置条件等。安全
都是规范的,精确的,无二义性的说明性语言。多线程
都不是程序设计语言,不能编辑和控制流程。并发
不一样点:框架
OCL语言更加完备和严谨。学习
一、它在预约义的标准类型定义了一组基本类型和集合类型,集合包括了抽象数据类型Collection,Set,Bag,Sequence等。JSF没有作具体的定义和约束,更多的是跟着java的语法来定义。
二、同时OCL也是一种查询语言,它的表达式可以求出系统中任何值或者值的集合,具备了和SQL相同的能力。JSF没有这种功能。
三、它描述了四类约束,分别是不变量,前置条件,后置条件,监护条件。而JSF描述了不变量,前置条件,后置条件,修改域。
四、OCL中有些特殊操做能够做用于整个集合,集合的操做语法是源对象集合加->操做,还有限定关联,关联类,泛化,过滤器等复杂的高级操做。
如下是OCL的一些基本语法:
PrimaryExpression:=literalCollection | literal | pathName time Expression ? FeatureCallparameters? | "(" expression ")" | ifExpression Literal:=<string> | <number> | "#" <name> timeExpression:="@"<name> featrueCallParameters:="((declarator)?(actualParameterList)?")" ifExpression :="if" expression "then" expression "else" expression "endif"
四个单元分别为: Java和面向对象基础、面向对象与多线程开发、规格与文档、测试与正确性论证。
前两个单元以实践为主,第一个单元让咱们了解了面向对象的基本理念和思想,学习开发JAVA程序,从面向过程的编程思想转移到面向对象的开发。第二个单元是多线程和面向对象的开发,这个单元写了电梯和出租车调度程序,文件管理系统,对多线程有更加深刻的理解。
后两个单元以理论论证为主。规范化了文档和规格的书写,这在之后的大型程序设计当中是十分重要的能力。同时学习了对程序进行正确性的判断,测试方面学习了Junit,用Jsf语言对程序的不变式、前置条件、后置条件等进行书写,同时论证程序每一步的逻辑正确性。
四个单元也是按部就班的,首先对面向对象的基础知识进行了解,接着注重多线程安全与并发,设计方面的规格,最终的测试和正确性论证,造成了对整个面向对象程序开发体系。不过对于规格的书写和文档的书写实际上是要先于程序的,这个老师在上课也强调了,先设计出程序的框架和规格,再进行程序的书写。
面向对象从0开始,在此以前几乎没怎么写过程序,这学期能够算是写程序最多的一个学期了。
从一开始把面向对象写成面向过程,正则表达式瞎用,到后面学会了多线程编程,面向对象的思想,熟悉Java语言的使用,这一路下来也收获了不少。
每次做业的代码都会进行屡次修改,直到逻辑框架清晰,每一个类和方法都十分简洁为止,也会参考一些大佬的框架,本身翻书学习设计模式,应用到了程序上面,好比单例模式,工厂模式等。
要作出一个成功的软件绝非易事,大体要经历业务交涉,需求调研,技术调查,设计实现,测试以及后期的维护,工程化开发是讲究效率的提高,成本的下降的开发。
良好的工程化开发须要部署一个好的开发环境,严格遵循开发流程,制做合理的工程表。
从团队层面,每一个团队的每一个成员都有义务和必要一块儿推动工程化,找到符合团队的工做习惯和规范。
从我的层面,良好的工程化,能下降沟通成本,实现更好的协同,节省开发和测试人员的重复劳动,下降发布的常见问题等等,通过有效实践,工程化的推广还能极大地缩短开发周期。
但愿指导书更加清晰,每次在issue上的问题没有看清楚就十分坑了。