测试与正确性论证的效果差差异
测试和正确性论证都是对程序进行可靠性的验证。
测试:
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面向对象 课程总结的更多相关文章
-
OO面向对象课程作业1-3总结
作业一.多项式的加减运算 1.设计要点与自我分析 我设计的类图 老师建议类图 我设计了两个类来进行多项式的计算,类Polynomial进行多项式的存储和输入输出,第二个类进行多项式加减运算.而加减运算 ...
-
【作业4.0】HansBug的第四次面向对象课程思考
嘛..不知不觉这门课程要结束了,那么就再说点啥以示庆祝呗. 测试vs正确性论证 说到这个,相比很多人对此其实很有疑惑,请让我慢慢分析. 逻辑概览 首先我们来看看两种方式各自的做法和流程是什么样的: 单 ...
-
OO面向对象第一单元总结
OO面向对象第一单元总结(表达式求导) 写在前面: 魔鬼课程oo第一单元终于结束,当终究要落笔总结,竟不知从何写起…… 回首再去看第一次的作业,你会满足于那时的幸福,或许,这就是成长吧! 千言万语,一 ...
-
oo面向对象--规格化设计
oo面向对象--规格化设计 规格化设计与抽象 要了解规格化设计首先要了解抽象化的程序设计,两者是密不可分的. 抽象化(Abstraction) 抽象化是将数据与程序,用语义呈现他们的外观,但是隐藏起它 ...
-
Atitit 基于sql编程语言的oo面向对象大规模应用解决方案attilax总结
Atitit 基于sql编程语言的oo面向对象大规模应用解决方案attilax总结 1. Sql语言应该得到更大的范围的应用,1 1.1. 在小型系统项目中,很适合存储过程写业务逻辑2 1.2. 大型 ...
-
Atitit usbQb212 oo 面向对象封装的标准化与规范解决方案java c# php js
Atitit usbQb212 oo 面向对象封装的标准化与规范解决方案java c# php js 1.1. 封装性是面象对象编程中的三大特性之一 三个基本的特性:封装.继承与多态1 1.2. 魔 ...
-
【设计模式系列】之OO面向对象设计七大原则
1 概述 本章叙述面向向对象设计的七大原则,七大原则分为:单一职责原则.开闭原则.里氏替换原则.依赖倒置原则.接口隔离原则.合成/聚合复用原则.迪米特法则. 2 七大OO面向对象设计 2.1 单一 ...
-
Java面向对象课程设计——购物车
Java面向对象课程设计——购物车 小组成员:余景胜.刘格铭.陈国雄.达瓦次仁 一.前期调查 流程 客人(Buyer)先在商城(Mall)中浏览商品(Commidity),将浏览的商品加入购物车(Sh ...
-
从结构和数字看OO——面向对象设计与构造第一章总结
不知不觉中,我已经接触OO五周了,顺利地完成了第一章节的学习,回顾三次编程作业,惊喜于自身在设计思路和编程习惯已有了一定的改变,下面我将从度量分析.自身Bug.互测和设计模式四个方向对自己第一章的学习 ...
随机推荐
-
HDU 5015
http://acm.hdu.edu.cn/showproblem.php?pid=5015 矩阵是表示状态转移的利器 这题m很大,n非常小,所以开始的思考角度是能否从当前列推出下一列.有了这个角度, ...
-
ADF_Starting系列9_使用EJB/JPA/JSF通过ADF构建Web应用程序之测试J2EE Container
2013-05-01 Created By BaoXinjian
-
20150618_Andriod _KSOAP2_多线程
参考地址:http://blog.csdn.net/long704480904/article/details/8636734 webService:基于SOAP协议的远程调用标准,通过webServ ...
-
Java [Leetcode 319]Bulb Switcher
题目描述: There are n bulbs that are initially off. You first turn on all the bulbs. Then, you turn off ...
-
UVA 1324 The Largest Clique 最大团(强连通分量,变形)
题意:给一个有向图,要求找出一些点,使得这些点中的任意点对,要么可以互通,要么单向可达. 思路:最低只要求单向可达即可,即a->b都可以算进去. 强连通分量内的点肯定是满足要求的,可以全选,但是 ...
-
Red Gate系列之四 SQL Data Compare 10.2.0.885 Edition 数据比较同步工具 完全破解+使用教程
原文:Red Gate系列之四 SQL Data Compare 10.2.0.885 Edition 数据比较同步工具 完全破解+使用教程 Red Gate系列之四 SQL Data Compare ...
-
numpy C语言源代码调试(三)
鉴于ddd过于简陋,希望找一个新一些的调试工具,看到有很多人推荐gdbgui,这是一个非常新的调试工具,前端使用浏览器,现在采用这一架构的软件越来越多,可以完全不必依赖庞大的gui类库,安装使用比较方 ...
-
docker-elk装IK自定义分词库
本人的elasticsearch是docker环境下运行 运行elasticsearch的容器,通过docker命令:docker exec -it 955e8d32d4a9 /bin/bash 进入 ...
-
jquery正则表达式验证(手机号、身份证号、中文名称)
这篇文章主要介绍了jquery正则表达式验证,实现手机号.身份证号.中文名称验证,感兴趣的小伙伴们可以参考一下 本文实例需要验证的内容:中文姓名.手机号.身份证和地址,验证方法分享给大家供大家参考,具 ...
-
亿级用户百TB级数据的AIOps 技术实践之路
关于面临的挑战 "因为专业性强,我认为反而让交互方式变简单了,打个点餐的比方,软件1.0阶段是,我要吃鱼香肉丝,我要吃辣的或是素一点的,根据清晰的接口上菜.而软件2.0阶段就是,我今天想吃开 ...