规格化设计的发展历史

(这一部分并没有找到答案,于是参考了好黄和温莎莎的blogs)

1950年代,第一次分离,主程序和子程序的分离程序结构模型是树状模型,子程序可先于主程序编写。通过使用库函数来简化编程,实现最初的代码重用。产生基本的软件开发过程:分析—设计—编码—测试,使大型软件系统的开发成为可能

1975—1980年代,第二次分离,规格说明(Spec)和体(body)的分离说明是类型定义和操作描述,体是操作的具体实现。(具体的例子就是C++,Java等面向对象语言的类说明与类实现的分离。)解决方案设计只关注说明,实现时引用或者设计体。体的更改、置换不影响规格说明,保证了可移植性。支持多机系统,但要同样环境。此时产生了划时代的面向对象技术。

1995—2000年代,第三次分离,对象使用和对象实现的分离基于构件开发:标准化的软件构件如同硬件IC,可插拔,使用者只用外特性,不计内部实现。Web Services:软件就是服务。分布式,跨平台,松耦合。


规格化设计为何得到大家的重视

大概就是有些方法(函数)代码段会被多次使用,而使用这些方法(函数)的人并不一定就是编写的人,因此就需要用规格来告诉使用者这个方法(函数)需要保证的条件是哪些,以及会产生什么影响,如果不对这些进行说明,调用者并不知道这个方法(函数)有哪些限制,调用就变得十分危险了。

除了为了保证调用者能够安全使用方法(函数)外,规格也是帮助编写方法(函数)者理清思路的利器(虽然我都是先写的方法后补JSF),写好规格理清了逻辑,就能够避免出现问题。


被报告的规格bug

树上开花了解一下~

出现这么多规格类bug根本原因还是自己没有体会到规格的重要性,觉得其实是一种可有可无的东西,所以也就没认真写也没有很认真的看Guideline,也遇到了一个狠人r,被人挑了这么多也没话说……


JSF不好的写法

(1) 使用自然语言

(2) 对于一些模糊的问题不严格按照一种标准处理

(3) 过于简略

(4) 没有异常处理

(5) 各种笔误

改进措施

(1) 尽量不要写太长的方法,否则逻辑太复杂真的没法用布尔表达式来表示

(2) 这……只能自己注意了吧……毕竟看了别的代码自己也没有细究所以确实有些地方MODIFIES就写了gui或者System.out,但有的方法就没写,人家给的理由就是:你到底觉得该不该写呢?为啥有的地方写有的地方不写?因为我菜啊QAQ…

(3) 尽量用布尔表达式把所有的情况都列举出来吧。

(4) 补上补上。

(5) 自己菜不会用JSFtool嘤嘤嘤……结果就出现了“==”写成“=”、\lock()写成了\lock(s)这种……


功能bug

(因为确实没感觉功能bug和规格bug有什么关系所以就不混为一谈写了……)

第九次:

PointBFS太慢了导致当输入巨多请求的时候,哪怕开了额外的计算线程也算不完……

第十次:

加了红绿灯以后出租车不再同步导致流量不知道出了什么问题,时不时回头走一走……

第十一次:

(我觉得这不是功能性bug只是笔误!!)

Main.java中在TAXI和VIP_TAXI转化之间脑抽写错了条件,导致有的时候LOAD会出现问题,个人觉得这不是功能性bug不过既然被报了ERROR就先挂在这……


心得体会

从实用性的角度来说:

还是应该先写好规格,把各个因素都考虑全面了,再开始写代码,而不是先写程序回头补规格。

从课程的角度来说:

(1) 你永远叫不醒一个装睡的人。

(2) 如果被测试者(我)的JSF不是用来被挂满分支树,那将毫无意义(无奈摊手)

OO Summary Ⅲ的更多相关文章

  1. OO Summary Ⅳ

    测试与正确性论证的效果差异 测试,或者说用断言进行黑箱测试,用大量的数据进行“覆盖性测试”,目的是当分支覆盖率达到100%也就是理论上来说所有可能的输入都已经测试过了,而输出结果均是正确的,那么我们理 ...

  2. OO Summary Ⅱ

    [第五次作业——多线程电梯] 类图 度量 协作图 设计分析: 多线程电梯是我第一次接触多线程,因此真的是无(瞎)从(g)下(2)手(写),感觉仿佛只是用一个调度器来调度3部电梯但又总觉得好像哪里不太对 ...

  3. OO unit1 summary

    Unit 1 summary 一.前言 三周左右的学习,OO第一单元顺利结束了,个人认为有必要写个blog来反思总结一下自己第一单元的学习情况,以便更好地进行后面的学习. 之前从来没有写blog的习惯 ...

  4. OO unit4 summary

    Unit4 一.第四单元作业的架构设计 第四单元个人认为主要是考察对于层次结构的理解,即如何理解并处理好UML图的树状结构组织,在理好层次之间以及层次内部的相互关系之后,就只剩下代码实现的问题了.但是 ...

  5. OO unit3 summary

    Unit3 ​ JML(Java Modeling Language) 是用于对 Java 程序进行规格化设计的一种表示语言,它对于方法内部具体是如何实现的并无要求,只是对方法的接口以及行为进行限制, ...

  6. OO unit2 summary

    Unit2 一.第一次作业 1.UML 2.Sequence Diagram 3.同步块设置与锁处理 采用了生产者-消费者模式,用共享对象来连接不同的线程. 第一次作业中,我有三个线程:Receive ...

  7. ABAP OO的八大理由

    原贴地址:http://scnblogs.techweb.com.cn/abaplv/archives/127.html 几年前SAP BASIS 4.6为ABAP扩展了OO功能,这是很多传统的ABA ...

  8. 【作业2.0】HansBug的5-7次OO作业分析与小结,以及一些个人体会

    不知不觉又做了三次作业,容我在本文胡言乱语几句2333. 第五次作业 第五次作业是前面的电梯作业的多线程版本,难度也有了一些提升.(点击就送指导书) 类图 程序的类图结构如下: UML时序图 程序的逻 ...

  9. 第一节:从面向对象思想(oo)开发、接口、抽象类以及二者比较

    一. 面向对象思想 1. 面向过程(OP)和面向对象(OO)的区别: (1):面向过程就是排着用最简单的代码一步一步写下去,没有封装,当业务复杂的时候,改动就很麻烦了 (2):面向对象将复杂的业务分离 ...

随机推荐

  1. MySQL学习(十五)

    索引的概念 索引是数据的目录,能快速定位数据的位置.索引提高了查询速度,降低了增删改的速度.并非加的越多越好. 一般在查询频率高的列上加,而且在重复度低的列上加效果更好.如在性别列上不用加索引,但是身 ...

  2. Python Selenium 文件下载

    Python Selenium 进UI自动化测试时都会遇到文件上传和下载的操作,下面介绍一下文件下载的操作 这里介绍使用FireFox浏览器进行文件下载的操作. 1.设置文件默认下载地址 如下图,fi ...

  3. Ruby 基础教程 第二部分 Ruby 的基础 第4章

    第二部分 Ruby 的基础 第4章~第6章 这一部分是 Ruby 编程需要遵守的规则. 第四章 对象,变量与常量 对象 & 类 对象的常见种类: 数值对象 字符串对象 数组.散列对象 正则表达 ...

  4. 4步win7下简单FTP服务器搭建(试验成功)

    本文介绍通过win7自带的IIS来搭建一个只能实现基本功能的FTP服务器,第一次装好WIN7后我愣是没整出来,后来查了一下网上资料经过试验后搭建成功,其实原理和步骤与windows前期的版本差不多,主 ...

  5. PCM数据格式

    PCM数据格式          1. 音频简介 经常见到这样的描述: 44100HZ 16bit stereo 或者 22050HZ 8bit mono 等等. 44100HZ 16bit ster ...

  6. Lab 1-2

    Analyze the file Lab01-02.exe. Questions and Short Answers Upload the Lab01-02.exe file to http://ww ...

  7. linux文件管理之管道与重定向

    ============================================================== 内容提要: 输入输出重定向.管道: 重定向的作用: 文件描述符 0 1 2 ...

  8. Android ------ 美团的Lint代码检查实践

    概述 Lint是Google提供的Android静态代码检查工具,可以扫描并发现代码中潜在的问题,提醒开发人员及早修正,提高代码质量.除了Android原生提供的几百个Lint规则,还可以开发自定义L ...

  9. 第二阶段——个人工作总结DAY06

    1.昨天做了什么:昨天做完了修改密码的界面.(有点丑) 2.今天打算做什么:今天制作时间轴. 3.遇到的困难:无.

  10. python-day76--django-中间件

    什么是中间件?中间件应用场景?和装饰器区别? 中间件 对于所有批量的请求用中间件合适,而对于某些请求个数少用装饰器合适 - 中间件是什么? - 是一个类 - 方法名必须是process_request ...