OO最后一次总结
测试与正确性论证
Dijkstra说过:“程序测试只能证明程序有错,不能证明程序正确。”所谓程序测试,实际上是测试者特意挑出一批检查数据,通过运行程序,检查每个输入数据所对应的运行结果是否符合预期要求。正确性证明是论证程序达到预期目的的一般性陈述,该论证不与程序输入的特定值有关,但能够代表穷举性测试。
测试相比于正确性论证来说,实际像是将程序看作一个黑盒,并不关注程序内部的实现。测试不仅能快速地发现程序的bug,也能测试程序的效率,复杂度等属性。但是缺点在于需要大量的数据,想要做到全覆盖测试并不容易,甚至在很多情况下根本无法实现。
而正确性论证则不一样,如果说测试是从实践方面来检测程序的正确性,那么正确性论证则是从理论上来证明程序的正确性。正确性论证在理论上来说可以覆盖整个程序,从而证明整个程序的正确性。比起测试来说,由于是从理论上来证明程序的正确性,因此所需要的资源相对较少。但是其缺点也比较明显,首先,正确性论证是从实现的角度去论证程序的正确性,只能证明程序实现的正确与否,如果程序一开始的设计就是错的,那么正确性论证不能发现这个问题。其次,当一个方法的实现过于复杂时(比如一个方法的代码超过了50行),正确性论证难以进行。
OCL与JSF
对象约束语言(简称OCL)是一种指示用户建模系统中的限制方式。UML图通常不够精细,无法提供与规范有关的所有相关部分。这其中就缺少描述模型中关于对象的附加约束。OCL便是为了解决这类问题应运而生的形式语言。
与JSF相比,虽然两者都是一种约束语言,但OSL语言是一种无二义性规范语言,并且每一个表达式都有自己的类型。JSF的主要服务对象是方法,而OSL的主要服务对象是每一个类。
第十四次作业


学期总结
不知不觉间已经度过了一个学期的漫长而痛苦的OO旅途。虽说痛苦,但是收获满满。
第一个单元,我们的主要目标是形成面向对象编程的思想。以前所学过的编程语言C语言是典型的面向过程的编程语言,而新接触的Java语言则是一款面向对象的编程语言,这一单元主要是让我们熟悉面向对象的编程思想,并且以典型的电梯程序来辅助练习。这一过程中,主要的问题是对Java语言的不熟悉,难以理解面向对象的编程思想。
第二个单元是针对多线程编程的训练。用一句通俗的话说,这一个单元是最折磨人的。首先在于我们对线程丝毫没有概念,也不懂得并发等术语的含义,因此在多线程编程中处处碰壁。其次,线程安全也是一个让我非常头疼的问题。在这一个单元中,主要出现的问题是如何设计,比如在出租车系列作业中,究竟是一个线程管理一百个出租车还是一百个线程管理一百个出租车方便实现?如何去保证出租车运行过程中线程始终安全?这些问题是当时一直困扰着我的。
第三个单元着重于规格化的设计。这一个单元的主要目的是让我们意识到规格的重要性。尽管JSF一直在被吐槽,尽管大家对测试时测试者对JSF的扣分十分厌恶,但是,这一个过程确确实实让我们了解了规格的重要性。规格不仅仅方便了程序的使用,它还能够让其他人更容易弄懂你的程序,这对于开发者来说十分重要。
第四个单元的重要任务便是测试和正确性论证了。到了这个单元,大家都已经能够理解面向对象的编程思想,也能写出相应的代码。但是如何保证自己写的代码是正确的呢?这一单元针对代码的测试和正确性论证帮我们解决了这个问题。也让我们能够写出完善健全的代码。
回看自己写过的历次作业,我发现自己的提高还是很明显的。最初的我写的代码,完全是面条式的,如今的代码,具有了相当程度的可移植性。针对测试,已经学会了将输入输出划分,以形成分类树来对程序进行测试。
至于工程化开发,我的理解是首先开发者在设计方面要遵循一定的原则,其次要写出可移植性高,可修改性强的代码,便于修改和完善。再次对每个类每个方法的实现要规格化,方便测试。最后的测试阶段中,要尽量按照测试的分类树进行测试,尽量实现全覆盖的测试。
我们经常说的一句话是OO不易,和谐6系。其实我觉得这和课程组有很大的关系。很大的原因是互相测试导致的。有一句网络语是这么说的:“我就这样了,有本事你顺着网线来打我啊?”的确,匿名的互相测试确实让某些同学过于“为所欲为”,周五测试结果出来之后,看到被报的BUG又要与测试者争论许久,最终还得靠课程组的仲裁。既破坏了同学间的关系又加大了同学和课程组的压力。
我认为一个很好的解决方法是加大公测力度,减少互测在分数中所占的比例。实话说,互测有很强的主观性,公测才是真正公平的。但很多次作业公测,弱的惊人,把分数完全交给测试者,难怪同学们都说这是面向运气编程。
虽然怨言不少,但始终还是希望OO课程能越来越好吧,也希望这门课能成为北航计院的特色课程(虽然已经是特色课程了)。
OO最后一次总结的更多相关文章
- GLUT的简洁OO封装
毕业设计用到了OpenGL,由于不会用MFC和Win32API做窗口程序:自然选用了GLUT.GLUT很好用,就是每次写一堆Init,注册callback,觉得有点恶心,于是对他做了简单的OO封装.记 ...
- Atitit 基于sql编程语言的oo面向对象大规模应用解决方案attilax总结
Atitit 基于sql编程语言的oo面向对象大规模应用解决方案attilax总结 1. Sql语言应该得到更大的范围的应用,1 1.1. 在小型系统项目中,很适合存储过程写业务逻辑2 1.2. 大型 ...
- OO中,先有对象还是先有类?
就是问,在面向对象思想里,先有对象还是先有类,乍一看和先有鸡蛋还是先有鸡是一类问题,其实不然!这个问题,在lz考研复试的时候被面试官问过,一模一样,如今又在一个笔试题里看到了类似的题目,眨一下,有人会 ...
- OO方式下,ALV TREE和ALV GRID的不同之处
作为大部分报表程序的基础,ALV GRID差不多是每个ABAP开发者必须了解和掌握的内容,因此网上也不乏相关资料,而ALV TREE的应用相对较少,中文资料也就比较少见了.实际上,ALV TREE和A ...
- 从人类社会的角度看OO(独家视角)
引言 在OO的工作中,我们一定会涉及到类,抽象类和接口.那么类和抽象类以及接口到底扮演的什么角色? 本文主要是从人类社会的角度阐述类与抽象类以及接口的"社会"关系,从而让我们抛弃书 ...
- HDU5288 OO’s Sequence
Problem Description OO has got a array A of size n ,defined a function f(l,r) represent the number o ...
- lua下的简单OO实现
笔者学习了当前(文末各文献)lua下的各种OO实现方法.略作笔记. 也提出了一些自己的想法.主要还是记录供将来着之参考. 1.概述 首先[2]PIL第二版中给出了OO的基于table的实现方式 ...
- OO的五大原则是指SRP、OCP、LSP、DIP、ISP。
OO的高层原则,面向对象设计的基本原则 设计模式之六大原则--开闭原则(OCP) 设计模式之六大原则--迪米特法则(LoD,LKP) 设计模式之六大原则--接口隔离原则(ISP) 设计模式之六大原则- ...
- OO.A.D.P
OO/A/D/P 对象和类 三大特征 对象: 对象是面向对象语言的一个极为重要的特点,所有的面向对象语言都有对象的共性. 1. 职责(单一) 2. 属性(数据.可改变的) 3. 函数(行为.方法.业务 ...
- Atitit usbQb212 oo 面向对象封装的标准化与规范解决方案java c# php js
Atitit usbQb212 oo 面向对象封装的标准化与规范解决方案java c# php js 1.1. 封装性是面象对象编程中的三大特性之一 三个基本的特性:封装.继承与多态1 1.2. 魔 ...
随机推荐
- HDU 1257 最少拦截系统(贪心 or LIS)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1257 最少拦截系统 Time Limit: 2000/1000 MS (Java/Others) ...
- 视频直播时的QoS策略
一.如何判断当前的网络状况 可以以发送一帧视频数据的时间为依据,判断当前网络拥塞情况. 网络中出现丢包和抖动,导致接收端接收数据超时,会激发发送端数据重传,重传机制本身挤占网络带宽,导致send ...
- mysql sqlite3 postgresql 简明操作
安装 mysql $ sudo apt-get install mysql-server sqlite3 $ sudo apt-get install sqlite3 postgresql $ sud ...
- DBlink的创建与删除
创建方式一: create [public] database link link名称 connect to 对方数据库用户identified by 对方数据库用户密码 using '对方数据库i ...
- 旧贴-在 win7 / win8 下安装苹果系统 (懒人版)
前言 该文转载自远景论坛,发布时间2012年,仅供学习参考 这篇安装教程的素材在国庆就准备好了,但那时学习任务比较重,没有时间发帖,一直拖到现在.趁这个周末有空,赶紧写完它,希望能帮助一些景友. 论坛 ...
- Redis之Redis安装(Mac OS版本)
各版本下载地址:http://download.redis.io/releases,本教程使用版本为redis-5.0.4. ##进入应用安装目录 cd /usr/local ##下载安装包 wget ...
- kettle安装部署及远程执行
一.windows环境 1.安装jdk 随意选择目录 只需把默认安装目录 \java 之前的目录修改即可 2.安装jre→更改→ \java 之前目录和安装 jdk 目录相同即可 注:若无安装目录要求 ...
- JavaWeb基础—JS学习小结
JavaScript是一种运行在浏览器中的解释型的编程语言 推荐:菜鸟教程一.简介js:javascript是基于对象[哪些基本对象呢]和和事件驱动[哪些主要事件呢]的语言,应用在客户端(注意与面向对 ...
- windowbuilder
windowbuilder,也就是原来的SWT Designer.Google收购了Instantiations,把它的工具也重新免费发布了.用过swt designer的人都知它是非常好用的swin ...
- 小白日记53:kali渗透测试之Web渗透-SSL、TLS中间人攻击(SSLsplit,Mitmproxy,SSLstrip),拒绝服务攻击
SSL.TLS中间人攻击 SSL中间人攻击 攻击者位于客户端和服务器通信链路中 利用方法: ARP地址欺骗 修改DHCP服务器 (存在就近原则) 手动修改网关 修改DNS设置 修改HOSTS文件[高于 ...