规格化设计的发展史

下面部分来源:https://www.cnblogs.com/eggert/p/9098446.html

  随着计算机硬件的飞速发展,以及应用复杂度越来越高,软件规模越来越大,原有的程序开发方式已经越 来越不能满足需求了。1960 年代中期开始爆发了第一次软件危机,典型表现有软件质量低下、项目无法 如期完成、项目严重超支等,因为软件而导致的重大事故时有发生。

1975年,Liskov等人发表了论文Specification Techniques for Data Abstractions,从数据抽象的角度论述了规格的优点、特性及重要性。

1976年,在第二届国际软件工程会议上,Belford等人在Specifications a key to effective software development一文中从开发复杂系统的角度论证了完整的、一致的规格的重要性。在系统研发周期中,规格提供了在概念和定义阶段的过渡。一个清楚、无歧义的规格是取得成功的关键,同时能减少开发过程中的开销。软件需求本身具有模糊的特点,所以需要一个定义明确的规格来开发出可靠的软件。

1993年,Liskov等人发表了Specifications and their use in defining subtypes,从类型层次的角度进一步论证了规格的重要性。

如今,北航的OO课程组也十分重视规格化的设计,提出了JSF规格设计,并且将其应用到计算机学院的面向对象课程中,让同学们更加深刻的理解到程序规格化设计的重要性。

可见,程序的规格化设计在计算机长期的发展中不断的完善和受到重视。

BUG分析

1.bug记录表

类型                            方法代码行数                    产生原因                       
EFFECTS内容为实现算法           15 内容表达的有些多
不符合JSF规范 23 线程规格写错误
REQUIRES逻辑错误 21 没写requires
不符合JSF规范 10 没写requires

2.功能性bug

  出租车会回头,原因是GUI的流量刷新有延迟,出现线程不安全的问题,所以访问的数据不是最新的数据,导致车会回头;

  出租车在去接单时没有模拟乘客上车,原因是没有搞清楚具体要求;

  出租车输出的信息是抢单时刻的状态信息,测试者说是抢单窗口结束时的出租车状态,指导书中只说了输出抢单出租车信息,但是issue中有提到,,认栽,,没有勤刷issue.

 功能性bug和jsf在我这个水平的来看,,好像并没有什么较大的联系,但是个人觉得设计规格还是十分重要的,如果有较好的规格的话,提供了从理论推理上来发现和避免bug的方法。

规格不好的写法

1.缺少REQUIRES

改进后:

2.后置条件格式错误

改进后:

3.前置条件书写不规范

改进后:

4.this使用未添加“\”

改进后:

总结与体会

  从这门课里,与其说是学到了很多技能,不如说是懂得了何为重要。面向对象的编程思想很重要,规格化的程序设计很重要,设计原则很重要,工程化的思维方式很重要。一学期的训练中,我们可以看到老师们训练的重点在哪里,也得到了较好的锻炼,但是由于制度的不健全,可能在实施训练计划的时候往往会出现偏差。同学中有部分遭到恶意扣分,当然这不是仅仅我们这一届有,指导书不够明确,模棱两可,助教很辛苦,同学们的体验不够好,在这里,我是十分赞同昂神(大佬)所说的关于工程的看法,但是OO这门课的相关测试有时候却又让人不得不去纠结一些细节,其实很多地方是可以readme的。

  有的时候说提出问题,发现问题是最重要的,但有的时候又说提出问题很简单,真正解决问题才是最难的,所以到底是如何,不知。就这门课,同学们在实践中提出了很多问题,但我发现能想到一个真正完美的解决方案还是挺难的。听说课程组最后会有一个最多BUG奖项,但是不知道有没有最具建设性意见奖项,如果有,说不定哪位同学就真的会提出非常不错的意见呢,也许当同学们知道解决问题难的时候,就会少一些抱怨吧。

  学习是自己的,分数是别人的,最后还是希望所有努力认真的同学都能够取得不错的分数。

  

  

OO作业总结报告3的更多相关文章

  1. oo作业总结报告

    oo第一次博客 以前从未真正的写过Java代码,接触Java也只是寒假的时候简单的看了看语法,不懂该如何面向对象,但没事,心里不惧,想着什么都是可以学的(直到真正开始写工程的时候,才发现自己还是太天真 ...

  2. oo作业总结报告2

    第五次作业 多线程电梯 多线程同步和控制的设计策略 明确类和对象,以及是否区分对象实例.具体类可以从类图中看出: 明确线程的类型和数量.输入作为一个线程,调度作为一个线程,三个电梯独立工作,互不影响, ...

  3. oo作业总结(二)

    概述 和前三次作业相比,这几次作业最大的不同是难度的飞跃.遗憾的是在这难度的变化面前,我自己却没有做好充分的准备,错误的低估了作业难度导致给自己带来了很多不必要麻烦和损失.接下来我将对它们进行说明(度 ...

  4. oo作业总结(四)

    测试与正确性论证 测试是通过构造一系列测试数据,通过对比程序的实际运行结果和预期输出结果来判断程序是否有bug的一种手段.同时,在测试的时候是默认看不到程序的具体实现的,即进行黑盒测试,例如每次OO作 ...

  5. oo作业总结(一)

    概述 经历了三次oo作业的洗礼,让我对java语言的强大以及面向对象编程有了初步的理解(当然,我是小白).本文接下来就将对自己这三次作业的代码进行分析以及分享自己的心路历程. 基础知识点考核 针对前三 ...

  6. 北航oo作业第一单元小结

    前言 在经过了三次艰辛的oo作业后,oo课程的第一单元告一段落,这一单元,我作为一个oo小白,开始了解oo的编程思想,也有了自己的一点心得体会.把笔粗成字,不当之处,还请各位大佬多多指教. 一.分析程 ...

  7. 北航oo作业第四单元小结

    1.总结本单元两次作业的架构设计 在我动手开始总结我的设计之前,我看了其他同学已经提交在班级群里的博客,不禁汗颜,我是真的偷懒.其他同学大多使用了新建一个类,用以储存每一个UMLelemet元素的具体 ...

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

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

  9. 【作业】HansBug的前三次OO作业分析与小结

    OO课程目前已经进行了三次的作业,容我在本文中做一点微小的工作. 第一次作业 第一次作业由于难度不大,所以笔者程序实际上写的也比较随意一些.(点击就送指导书~) 类图 程序的大致结构如下: 代码分析 ...

随机推荐

  1. d3.select(this)不能用箭头函数

    d3中典型的数据绑定片段 const items = svg.selectAll('g') .data(gdfs,(d)=> d.name); const enter = items.enter ...

  2. nRF52832-PPI部分学习

    PPI部分学习思维导图 PPI原理 1.1PPI简介 PPI实现的就是通过初始化配置,将不同外设的事件和任务连接起来,让事件自动去触发任务的功能,PPI有多个通道, 每个通道包含一个EEP和TEP,使 ...

  3. Python全栈开发-Day3-Python基础3

    本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3.递归 4.函数式编程介绍 5.高阶函数 1.函数基本语法及特性 三种编程范式: 1.面向过程:过程——> def 2.面向对象:类— ...

  4. Java 动态图片压缩

    今天收到领导的一个任务,说是图片太大导致服务器那边无法解析,要求图片大小大于102*126就压缩大小为102*126.同时文件是以Base64字符串的形式传过来的.具体压缩方法如下: /** * 图片 ...

  5. 日常英语---六、Maplestory Illium

    日常英语---六.Maplestory Illium 一.总结 一句话总结: maplestory-['meiplstɔri]  illium-镍铬合金 ['meiplstɔri]  n. 枫之谷(网 ...

  6. JFinal3.0 sql管理与动态生成

    原文: 本节学习目标主要是使用JFinal中自带的Template Engin来实现对sql的管理.JFinal中为sql管理提供了3个指令#sql.#para.#namespace,来增强sql功能 ...

  7. learn the python the hard way习题26~30总结

    考试试题26错误总结: 漏写字母,括号 写错字母 write(),read()的使用:只能打开使用了 open() 后返回的文件对象(file object),而不能直接使用文件名 if 语句中,条件 ...

  8. 当实体类中entity/DTO/VO等类中,有枚举值,应该怎么输出?

    当实体类中entity/DTO/VO等类中,有枚举值,应该怎么输出? 问题: orderStatus 和 payStatus都是枚举类,并且枚举的个数达地10来个,我们不可能在模板页面(jsp/ftl ...

  9. centos7:mysql-5.7.23安装(二进制安装)

    mysql有二进制码安装,和源码编译安装(mysql5.5使用cmake安装,mysql5.7需要安装boost依赖安装),因为boost依赖安装麻烦,所以用二进制码安装 MySql 5.7.23安装 ...

  10. 内核开启VF小结

    2017-8-29 16:33:40 内核开启VF小结: 1. eth2上创建4个VFecho 4 > /sys/class/net/eth2/device/sriov_numvfs2. 关闭e ...