OO面向对象 课程总结

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

测试正确性论证都是对程序进行可靠性的验证。

测试:

IEEE提出了对软件测试的定义:使用人工或者自动的手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或者弄清预期结果和实际结果之间的差别。它是从对程序的实际操作来对运行结果和期望的结果进行比对,实质上只是一种抽样检查,只是一种查错的手段,它可以帮助人们去发现程序中的错误,但不能证明程序中没有错误,即:测试不能证明程序是正确的。测试又分为黑盒测试和白盒测试:

  • 黑盒测试把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。黑盒测试又叫做功能测试或数据驱动测试。
  • 白盒测试把测试对象看成一个透明的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。

正确性论证:

相对于测试,正确性论证是通过严格的数学和逻辑推导证明程序是否符合规格说明。程序正确性理论提出编制正确程序的两种途径:一种称为程序验证,研究如何使用数学推理来严格论证程序是否符合其目标.另一种称为程序综合:研究如何由给定目标出发,逐步构造一个在计算机系统上可运行的程序,而且要求构造过程的每一步都是严格保持正确无误的。正确性论证过程中通过严密的逻辑和布尔表达式来对所有的情况进行分析论证,缺点是步骤繁琐篇幅较长,但是更加全面和有力。

OCL(Object Constraint Language)和JSF的比较

对象约束语言简称OCL(Object Constraint Language),是一种用于施加在指定的模型元素上约束的语言。OCL表达式以附加在模型元素上的条件和限制来表现对该对象的约束,其中包括附加在模型元素上的不变量或约束的表达式、附加在操作和方法上的前置条件和后置条件等。

相同点

两者都是对象约束语言,都对附加在模型元素上的条件和限制来表示对该对象的约束,包括了不变式,附加在操作和方法的前置条件和后置条件等。

都是规范的,精确的,无二义性的说明性语言。

都不是程序设计语言,不能编辑和控制流程。

不同点

OCL语言更加完备和严谨。

1、它在预定义的标准类型定义了一组基本类型和集合类型,集合包括了抽象数据类型Collection,Set,Bag,Sequence等。JSF没有做具体的定义和约束,更多的是跟着java的语法来定义。

2、同时OCL也是一种查询语言,它的表达式能够求出系统中任何值或者值的集合,具有了和SQL相同的能力。JSF没有这种功能。

3、它描述了四类约束,分别是不变量,前置条件,后置条件,监护条件。而JSF描述了不变量,前置条件,后置条件,修改域。

4、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上的问题没有看清楚就十分坑了。

posted @ 2018-06-25 14:27  ZACKERrr  阅读(364)  评论(0编辑  收藏  举报