规格化设计的发展史

下面部分来源: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. 关于table动态添加数据 单元格合并 数组合并

    var newArr = [ {"BranchID":1,"BranchName":"城二","BranchFullName&qu ...

  2. python - selenium 2 升级到最新版本

    python - selenium 2 升级到最新版本 之前一直用的是selenium 2.48 .firefox36 而实际用户的浏览器可能都有自动更新功能,所以版本基本上是最新的.所以这次专门做了 ...

  3. 原生dom事件注册和移除事件的封装

    var addEvent = (function() { var setListener; setListener = false; return function(el, ev, fn) { if ...

  4. Very Good Article on How Git Commands Work

    http://stackoverflow.com/questions/30038999/differences-between-commit-commit-and-push-commit-and-sy ...

  5. webpack添加热更新

    之前的wbepack一直没有加上热更新,这是一种遗憾,今天终于加上去了,看不懂我博客的可以看这篇文章:http://blog.csdn.net/hyy1115/article/details/5302 ...

  6. caffe-ssd

    1.安装依赖 1 sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-ser ...

  7. [LintCode] Serialize and Deserialize Binary Tree(二叉树的序列化和反序列化)

    描述 设计一个算法,并编写代码来序列化和反序列化二叉树.将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称为“反序列化”. 如何反序列化或序列化二叉树是没有限制的,你只需要确保可以将二叉 ...

  8. drf 认证、权限、限流、过滤、排序、分页器

    认证Authentication 准备工作:(需要结合权限用) 1. 需要使用到登陆功能,所以我们使用django内置admin站点并创建一个管理员. python manage.py creates ...

  9. appium自动化测试(四)

    一. 获取webview的html页面 方法一: 1. 获取webview中对应的html页面 谷歌浏览器中输入地址:chrome://inspect(第一次使用要FQ) 前提:手机开启USB调试模式 ...

  10. C#操作MSMQ

    C#操作MSMQ using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...