规格化设计的发展史

下面部分来源: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. python获取子进程的返回值

    用subprocess popen 的communicate   比如,用gdalinfo命令查看一个tiff文件的信息 x = subprocess.Popen(["gdalinfo&qu ...

  2. 修改linux镜像

    修改镜像的常用命令有: guestfish,guestmount等. ●修改静态文件. 命令:guestfish 安装包:yum install -y guestfish ①mount镜像:guest ...

  3. (转).Net中自定义类作为Dictionary的key详解

    在定义数据结构时,Dictionary提供了快速查找数据的功能,另外Dictionary< TKey, TValue >属于key-value键值对数据结构,提供了泛型的灵活性,是数据结构 ...

  4. 网络cmd命令

    1.ping ip; 检测IP地址是否相通 ping命令的常用参数选项 ping IP -t:连续对IP地址执行ping命令,直到被用户以Ctrl+C中断. ping IP -l 2000:指定pin ...

  5. Centos6.5 升级Openssl + Openssh

    xu言: 平时很懒,都不想写blog.今天(2018.05.15)开始尝试每天写一篇吧,看我自己能坚持多久! 准备工作: 为了防止在操作过程中导致ssh远程中断,首先安装一个telnet-server ...

  6. 廖雪峰网站:学习python基础知识—循环(四)

    一.循环 1.for names = ['Michal', 'Bob', 'tracy'] for name in names: print(name) sum = 0 for x in [1, 2, ...

  7. 『计算机视觉』Mask-RCNN_项目文档翻译

    基础介绍 项目地址:Mask_RCNN 语言框架:Python 3, Keras, and TensorFlow Python 3.4, TensorFlow 1.3, Keras 2.0.8 其他依 ...

  8. leetcode-algorithms-21 Merge Two Sorted Lists

    leetcode-algorithms-21 Merge Two Sorted Lists Merge two sorted linked lists and return it as a new l ...

  9. js动态检测加载 JQ

    var jqcdnurl = 'https://cdn.bootcss.com/jquery/3.2.1/jquery.js'; //控制台输出 function log() { for (var i ...

  10. 2.两数相加(Add Two Numbers) C++

    第一想法是顺着题目的原因,将两链表分别转化为一个数字,再将数字相加,然后把结果转化为字符串,存到答案链表中.但是数据太大会溢出! 所以,要在计算一对数字的过程当中直接存储一个结果,注意结果大于9时进位 ...