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

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

测试:

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. Ubuntu 14.04设置开机启动脚本的方法

    rc.local脚本 rc.local脚本是一个ubuntu开机后会自动执行的脚本,我们可以在该脚本内添加命令行指令.该脚本位于/etc/路径下,需要root权限才能修改. 该脚本具体格式如下: #! ...

  2. Linux 常用的压缩命令有 gzip 和 zip

    Linux 常用的压缩命令有 gzip 和 zip,两种压缩包的结尾不同:zip 压缩的后文件是 *.zip ,而 gzip 压缩后的文件 *.gz 相应的解压缩命令则是 gunzip 和 unzip ...

  3. Admin管理后台

    Django奉行Python的内置电池哲学.它自带了一系列在Web开发中用于解决常见问题或需求的额外的.可选工具.这些工具和插件,例如django.contrib.redirects都必须在setti ...

  4. 爬虫框架pyspider的使用

    j概要:了解了爬虫的基础知识后,接下来我们来使用框架来写爬虫,用框架会使我们写爬虫更加简单,接下来我们来了解一下,pyspider框架的使用,了解了该框架,妈妈再也不用担心我们的学习了. 前期准备: ...

  5. Android TableLayout中的使用说明

    TableLayout特点: 1)TableLayout和我们平时在网页上见到的Table有所不同,TableLayout没有边框的 2)它是由多个TableRow对象组成,每个TableRow可以有 ...

  6. fragment 小结

    1:注意事项   3.0以前的Android 版本要使用FragmentActivity 来装载Fragment ,使用到support v4包.   3.0以后的版本可以直接在Activity里面添 ...

  7. 【转】cs231n学习笔记-CNN-目标检测、定位、分割

    原文链接:http://blog.csdn.net/myarrow/article/details/51878004 1. 基本概念 1)CNN:Convolutional Neural Networ ...

  8. Python BeautifulSoup的使用

    2017-07-24 22:39:14 Python3 中的beautifulsoup引入的包是bs4 import requests from bs4 import * r = requests.g ...

  9. php file_get_contents计时读取一个文件/页面 防止读取不到内容

    php file_get_contents计时读取一个文件/页面 防止读取不到内容 $url = 'http://www.baidu.com/index.php'; $opts = array( 'h ...

  10. boruvka算法

    算法正确性证明: 1.最优性:最小边一定包含在生成树中. 2.合法性:一定不会构成环.如果存在环说明一个点的最小连边有两个,显然矛盾. 算法时间复杂度证明: 每执行一次算法,所有联通块的大小都至少为2 ...