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

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

测试:

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

OO面向对象 课程总结的更多相关文章

  1. OO面向对象课程作业1-3总结

    作业一.多项式的加减运算 1.设计要点与自我分析 我设计的类图 老师建议类图 我设计了两个类来进行多项式的计算,类Polynomial进行多项式的存储和输入输出,第二个类进行多项式加减运算.而加减运算 ...

  2. 【作业4.0】HansBug的第四次面向对象课程思考

    嘛..不知不觉这门课程要结束了,那么就再说点啥以示庆祝呗. 测试vs正确性论证 说到这个,相比很多人对此其实很有疑惑,请让我慢慢分析. 逻辑概览 首先我们来看看两种方式各自的做法和流程是什么样的: 单 ...

  3. OO面向对象第一单元总结

    OO面向对象第一单元总结(表达式求导) 写在前面: 魔鬼课程oo第一单元终于结束,当终究要落笔总结,竟不知从何写起…… 回首再去看第一次的作业,你会满足于那时的幸福,或许,这就是成长吧! 千言万语,一 ...

  4. oo面向对象--规格化设计

    oo面向对象--规格化设计 规格化设计与抽象 要了解规格化设计首先要了解抽象化的程序设计,两者是密不可分的. 抽象化(Abstraction) 抽象化是将数据与程序,用语义呈现他们的外观,但是隐藏起它 ...

  5. Atitit 基于sql编程语言的oo面向对象大规模应用解决方案attilax总结

    Atitit 基于sql编程语言的oo面向对象大规模应用解决方案attilax总结 1. Sql语言应该得到更大的范围的应用,1 1.1. 在小型系统项目中,很适合存储过程写业务逻辑2 1.2. 大型 ...

  6. Atitit usbQb212 oo 面向对象封装的标准化与规范解决方案java c# php js

    Atitit usbQb212 oo 面向对象封装的标准化与规范解决方案java c# php js 1.1. 封装性是面象对象编程中的三大特性之一  三个基本的特性:封装.继承与多态1 1.2. 魔 ...

  7. 【设计模式系列】之OO面向对象设计七大原则

    1  概述 本章叙述面向向对象设计的七大原则,七大原则分为:单一职责原则.开闭原则.里氏替换原则.依赖倒置原则.接口隔离原则.合成/聚合复用原则.迪米特法则. 2  七大OO面向对象设计 2.1 单一 ...

  8. Java面向对象课程设计——购物车

    Java面向对象课程设计——购物车 小组成员:余景胜.刘格铭.陈国雄.达瓦次仁 一.前期调查 流程 客人(Buyer)先在商城(Mall)中浏览商品(Commidity),将浏览的商品加入购物车(Sh ...

  9. 从结构和数字看OO——面向对象设计与构造第一章总结

    不知不觉中,我已经接触OO五周了,顺利地完成了第一章节的学习,回顾三次编程作业,惊喜于自身在设计思路和编程习惯已有了一定的改变,下面我将从度量分析.自身Bug.互测和设计模式四个方向对自己第一章的学习 ...

随机推荐

  1. 机器学习-数据可视化神器matplotlib学习之路(三)

    之前学习了一些通用的画图方法和技巧,这次就学一下其它各种不同类型的图.好了先从散点图开始,上代码: from matplotlib import pyplot as plt import numpy ...

  2. go 变量声明

    第一种,指定变量类型,声明后若不赋值,使用默认值. var v_name v_type v_name = value 第二种,根据值自行判定变量类型. var v_name = value 第三种,省 ...

  3. JVM内存管理的机制

    Eclipse崩溃,错误提示:MyEclipse has detected that less than 5% of the 64MB of Perm Gen (Non-heap memory) sp ...

  4. [原][JSBSim]基于qt代码实现:TCP|UDP与飞行模拟软件JSBSim的通信,现实模型飞行!

    废话没有,上关键代码 头文件 #include <QUdpSocket> #include <qtcpsocket.h> #ifndef vrUDP #define vrUDP ...

  5. 顶点与UV

    1.顶点坐标和UV坐标是三维模型重要的两个坐标系统. 2.什么是UV?UV分别是图像在显示器水平和垂直方向上坐标,值在 0 - 1 之间 ,即水平方向的第 U 个做像素/图片宽度,垂直方向的第 V 个 ...

  6. c# 获取方法所在的命名空间 类名 方法名

    平时我们在记录日志的时候难免会需要直接记录当前方法的路径,以便查找,但是每次都输入方法名称非常的繁琐,同时如果修改了方法名称也要去手动修改日志内容,真的是劳命伤财啊,所以有了如下方法则可解决我们的大难 ...

  7. win10 WiFi 密码查询 命令

    如果你笔记本有WiFi,正好你系统又是Win10 那么... netsh wlan show profile * key=clear

  8. LeetCode--205--同构字符串

    问题描述: 给定两个字符串 s 和 t,判断它们是否是同构的. 如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的. 所有出现的字符都必须用另一个字符替换,同时保留字符的顺序.两个字符不 ...

  9. 20170621xlVBA跨表转换数据

    Sub 跨表转置() Dim Wb As Workbook Dim Sht As Worksheet Dim oSht As Worksheet Dim Rng As Range Dim Index ...

  10. php--------删除一个路径下的所有文件夹和文件

    php遍历一个文件夹内的所有文件和文件夹,并删除所有文件夹和子文件夹下的所有文件的代码,通过递归方式实现达到清空一个目录的效果,代码简单实用. 也适合在thinkphp中清理缓存,在thinkphp中 ...