规格化设计的发展历史

(这一部分并没有找到答案,于是参考了好黄和温莎莎的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不是用来被挂满分支树,那将毫无意义(无奈摊手)

转载于:https://www.cnblogs.com/buaazzw/p/9099526.html

OO Summary Ⅲ相关推荐

  1. OO Summary (Homework 5-7)

    These three weeks we have suffered from projects on Multiple Thread. Here is my summary of these thr ...

  2. R、主成分分析(PCA)、ggplot2

    R.主成分分析(PCA).ggplot2  在生态环境领域中,作为非约束排序的方法之一,主成分分析(PCA)是我们常用的分析方法.本文以R语言vegan包rda函数演示主成分排序及基于ggplot2绘 ...

  3. [OO] Unit3 Summary JML系列

    文章目录 [OO] Unit3 Summary JML系列 JML理论基础 优点 语法基础 常用表达式 方法规格 类型规格 JML工具链 测试工具使用报告 SMT Solver EvoSuite JM ...

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

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

  5. OO生存指.....抱歉无法生存

    还记得前三次的设计策略:星期二之前实现功能,星期三找一下可能出现的小bug. 这三次以及变成了:星期二之前能跑出来就行. 总体来说设计策略是:先让几个线程能够顺利运行,再开始实现功能. 在接触到多线程 ...

  6. OO之美:好代码和坏代码

    本节将介绍以下内容: 编码的规范 面向对象指导 引言 好的代码,是练出来的.坏的代码,是惯出来的. 那么,代码是写给计算机的吗?不是,代码其实是写给人的.Martin Fowler说:任何一个傻瓜都可 ...

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

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

  8. Python科学计算summary

    correlative coefficient 相关系数 covariation 协方差 krutosis 峰度 skruness 偏度 虽然我现在未必记得这些函数的用法,但是我曾经知道过,这就够了~ ...

  9. 面向对象基础:OO的五大原则是指SRP、OCP、LSP、DIP、ISP

    OO的五大原则是指SRP.OCP.LSP.DIP.ISP. 1. SRP(Single Responsibility Principle单一职责原则)  单一职责很容易理解,也很容易实现.所谓单一职责 ...

最新文章

  1. Centos6.4建立本地yum源
  2. es中的ResourceWatcherService
  3. iOS crash 崩溃问题的追踪方法
  4. 【算法入门漫画】:什么是字符串匹配算法?
  5. 使用Excel和TF实现Transformer!
  6. Android 弹出有确认按键的对话
  7. Linux创建sqlite数据库文件,SQLite数据库的创建与附加
  8. 让犀牛基于点云数据来完成逆向建模
  9. 电子工程师常用的单位转换
  10. 去除CSDN 博客页广告的历程
  11. 运行3项目显示Module ‘“vue“‘ has no exported member ‘xxxx‘. Did you mean ‘Xxxx‘? TS2305: Module ‘“…/…/node_
  12. jsf中 binging的用法
  13. 机电信息杂志机电信息杂志社机电信息编辑部2022年第24期目录
  14. Python生成中文词云图(二):不可指定词云特定的形状和颜色。
  15. 如何将dataframe数据类型某两列合并成一列
  16. Android调用miui给权限,Android 11+MIUI12,APP任意获取用户隐私的路子被封死
  17. java聊天室代码实训总结_java实训聊天系统报告总结
  18. Linux 版本 内核版本 发行版本
  19. 在家用电饼铛自制潮汕美食肠粉过程,想学的赶紧来看
  20. EdgeX Foundry优秀文章视频汇总

热门文章

  1. js中判断变量不为空或null
  2. 浅谈Proxmark3 Easy Gui 4.0 5.0 5.1加强版
  3. VB中用API实现文件拖放
  4. 诺德尔-2011-2003-V1新版 ghost安装版
  5. 不要轻易碰我,不然我就知道你有多软了 | Science Robotics
  6. 你的特斯拉Model 3,只需要一台手机就能偷走它
  7. 微软收购AI创业公司Bonsai,机械臂效率比DeepMind高45倍
  8. IOS开发中遇到的问题
  9. Django_RBAC_demo2 升级版权限控制组件
  10. 一个简单的定时任务的开始和取消