作业十二

规格化设计简介

规格化设计的发展历史

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

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

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

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

一方面,规格化设计可以帮助开发者理清思路,构建一个写程序的框架,这样一来开发者可以按照既定的套路来完成自己的任务,从而能够摒弃杂念,提高效率。

另一方面,一个程序中很多代码会以一块一块的形式被反复使用,这些重复的代码块有可能被封装为函数反复使用,也有可能被放入库中供他人使用。如果能按照一定的规格去完成他们,那么调用者不必大费周折的去理解代码,可以通过已有的对于格式的学习以及清晰明了的格式来快速完成对代码的理解,从而提高学习工作的效率。

bug分析

第九次

BUG内容 BUG类型 BUG代码行数 BUG原因 方法名
程序无法运行 error 10 在main方法中未将所有线程start public static void main()

无JSF错误

###第十次

BUG内容 BUG类型 BUG代码行数 BUG原因 方法名
规格检查->没有写Overview imcomplete 1 将Overview写在了每个方法前,而没有写在类前
是否选择流量最短的路径 error 1 忘记将上一次有车经过的边的流量加一 public void drive(int des)

聚集关系:无

###第十一次

BUG内容 BUG类型 BUG代码行数 BUG原因 方法名
方法规格检查->JSF不符合规范 imcomplete 1 有的JSF中将==写为了=
缺程序设计文档 imcomplete 1 误解了指导书的要求,没有写程序设计文档
行驶一条边的时间不为500ms error 10 因为程序采用系统时间,而且不能进行化整,故每过几秒程序会有几毫秒的误差

聚集关系:无

##不好的写法
未按照要求格式书写

//错误
/**
* @REQUIRES:None
* @MODIFIES:None
* @EFFECTS :return flow;
*/ //改进
/**
* @REQUIRES:None
* @MODIFIES:None
* @EFFECTS :\result == flow;
*/

误将==写为=

//错误
/**
* @REQUIRES:None
* @MODIFIES:None
* @EFFECTS :\result = errorInfo;
*/ //改进
/**
* @REQUIRES:None
* @MODIFIES:None
* @EFFECTS :\result == errorInfo;
*/

使用自然语言

// 错误
/*
* @REQUIRES:None
* @MODIFIES:None
* @EFFECTS: 初始化出租车;
*/
// 改进
/*
* @REQUIRES:None
* @MODIFIES:None
* @EFFECTS: \this.id == id;
*/

语句结束未加;

//错误
/**
* @REQUIRES:this.repOK == true && edge.repOK == true
* @MODIFIES:this.edgeNearBy
* @EFFECTS :(edge.isLegal) ==> edgeNearBy.add(edge)
*/
//改进
/**
* @REQUIRES:this.repOK == true && edge.repOK == true
* @MODIFIES:this.edgeNearBy
* @EFFECTS :(edge.isLegal) ==> edgeNearBy.add(edge);
*/

部分语句不够简洁

//错误
/**
* @REQUIRES:this.repOK == true && taxiNumber >= 0 && taxiNumber <= 99
* @MODIFIES:taxiCanTake
* @EFFECTS :taxiCanTake.add(taxiNumber);
*/
//改进
/**
* @REQUIRES:this.repOK == true && 0 <= taxiNumber <= 99
* @MODIFIES:taxiCanTake
* @EFFECTS :taxiCanTake.add(taxiNumber);
*/

思路和体会

这几次作业,我们的主要着重点在于程序的JSF规范,类规范上,这些虽然对于代码质量没有直接的提高,但是在我们以后开发大型程序,需要一个团队协作时,一个好的JSF规范,类规范,能够极大地提高团队协作的效率,能够从另外一方面提高代码,乃至整个团队的质量。

在我们以后的学习中,我们也可以保持书写规范的习惯,这能够极方便的与他人进行交流学习,降低学习与合作的成本。同时我们最好也在写代码前先进行规划,比如写JSF优先于代码实现,这样能够通过抽象出某一段代码的功能,提前考虑好程序各部分之间的关系,提高后续编写代码时的效率,提高代码整体的可读性。

第十二次oo作业的更多相关文章

  1. 20155213 第十二周课堂作业MySort

    20155213 第十二周课堂作业MySort 作业要求 模拟实现Linux下Sort -t : -k 2的功能 参考 Sort的实现 提交码云链接和代码运行截图 初始代码 1 import java ...

  2. 第十五次oo作业

    作业十五 测试与正确性论证的效果差异 程序的测试需要通过输入特定数据等方式,检查程序是否和预期相同,因为测试不可能穷举,导致了不穷举的测试不可能验证程序是完全正确的,只能验证程序在测试时没有发生错误, ...

  3. java第十二周课后作业0523

    1.编写一个程序,实现字符串大小写的转换并倒序输出.要求如下(1)使用for循环将字符串“ Hello world”从最后一个字符开始遍历(2)遍历的当前字符如果是大写字符,就使用 toLower C ...

  4. 第十二周作业_PSP总结报告

    回顾1 (1)回想一下你曾经对计算机专业的畅想 当初你是如何做出选择计算机专业的决定的?经过一个学期,你的看法改变了么,为什么? 你认为过去接触到的课程是否符合你对计算机专业的期待,为什么?经过一个学 ...

  5. 软工 · 第十二次作业 - Beta答辩总结

    福大软工 · 第十二次作业 - Beta答辩总结 写第十二次的时候操作失误直接在Beta版本的博客里改了...第七次冲刺的作业链接补在这里 Beta(7/7) 组长本次博客作业链接 项目宣传视频链接 ...

  6. 201621123005《Java程序设计》第十二次作业

    <Java程序设计>第十二次作业 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 面向系统综合设计-图书馆管理系统或购物车 使用流与文件改造 ...

  7. 2017-2018-1 《Linux内核原理与设计》第十二周作业

    <linux内核原理与设计>第十二周作业 Sql注入基础原理介绍 分组: 和20179215袁琳完成实验 一.实验说明   SQL注入攻击通过构建特殊的输入作为参数传入Web应用程序,而这 ...

  8. 实验十二 团队作业8:软件测试与Alpha冲刺

    实验十二 团队作业8:软件测试与Alpha冲刺 实验时间 2018-6-13 Deadline: [6.13-6.19]之间任选连续5天的23:00,以团队随笔博文提交时间为准. 评分标准: 按时交 ...

  9. 实验十二 团队作业8:软件测试与Alpha冲刺 第四天

    项目 内容 这个作业属于哪个课程 老师链接 这个作业的要求在哪里 实验十二 团队作业8:软件测试与Alpha冲刺 团队名称 Always Run! 作业学习目标 (1)掌握软件测试基础技术 (2)学习 ...

随机推荐

  1. mssql sqlerver 脚本 计算数据表的结余数的方法分享

    转自:http://www.maomao365.com/?p=5710 摘要:今天接到一个需求,有一张数据表,记录的是消费明细数据,现在需要做一个累计结余,记录每次的数据结余合计,下文将展示一种sql ...

  2. MongoDB添加仲裁节点报错replica set IDs do not match办法

    背景:由于历史原因,某个MongoDB副本集只有一主一从双节点,无法满足自动故障转移要求,需要配置一个仲裁节点. 原有节点192.168.10.20:27017,192.168.10.21:27017 ...

  3. SQL Server最大内存设为0后的处置办法

    故障说明: 远程调整实例内存时疏忽,将实例最大内存调整为了0,因此最大内存变成了128MB的最小值. 解决方式: 1.正常关闭SQL Server服务,如果是集群,需要先关停止集群角色防止故障转移,然 ...

  4. SQL Server Browser探究

    一.官网关于SQL SERVER Browser服务的解释(谷歌翻译后稍作修改的): https://docs.microsoft.com/en-us/sql/tools/configuration- ...

  5. element-ui 2.4.8 BUG 标签页的最后一个Tab标题没法移除,更新后发现最新版本不存在该问题了 记录下

  6. windows chocolatey 修改默认安装软件默认安装路径

    管网解释 https://chocolatey.org/docs/features-install-directory-override 1.--install-directory=value    ...

  7. c/c++ 标准库 set 自定义关键字类型与比较函数

    标准库 set 自定义关键字类型与比较函数 问题:哪些类型可以作为标准库set的关键字类型呢??? 答案: 1,任意类型,但是需要额外提供能够比较这种类型的比较函数. 2,这种类型实现了 < 操 ...

  8. c/c++ 数组的智能指针 使用

    数组的智能指针 使用 数组的智能指针的限制: 1,unique_ptr的数组智能指针,没有*和->操作,但支持下标操作[] 2,shared_ptr的数组智能指针,有*和->操作,但不支持 ...

  9. 使用Jenkins遇到的问题

    前言 本文记录我在使用jenkins过程中遇到的一些问题. 无法执行bat 如果出现bat执行出错,解决办法如下: 1. 打开 服务,找到 jenkins的服务 2. 修改jenkins的属性如下:( ...

  10. 对于coursera上三门北大网课的评测

    今年暑假开始就选了coursera上三门北大的网课——C++程序设计.算法基础.数据结构基础,它们属于一个项目的,上的话每个月249块钱,项目里包括这三门一共有七门课.因为一开始是三门课同时上的,数据 ...