作业十二

规格化设计简介

规格化设计的发展历史

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. Linux中对逻辑卷进行扩容与缩小

    一.在扩容之前,先查看自己逻辑卷,卷组,物理卷的信息:(在上一篇的基础上:Linux中对逻辑卷的建立) 查看物理卷: # pvdisplay /dev/sdc1 查看卷组: vgdisplay /de ...

  2. Linux没有最小只有更小----迷你Linux版本大集合(转)

    [自从去年到现在已经收集了上百种版本的Linux和Unix,至于Unix就不想说了,没有Linux的功底是很难驾驭Unix的,我在这里只把小于360M的Linux以及一些非Linux但是很像Linux ...

  3. List泛型与DataTable相互转换

    public static class ExtensionMethods{/// <summary>/// 将List转换成DataTable/// </summary>/// ...

  4. Postgresql的隐藏系统列

    转自 https://www.2cto.com/database/201206/137301.html   Postgresql的隐藏系统列   和oracle数据库一样,postgresql也有自身 ...

  5. JavaScript获取IE版本号与HTML设置ie文档模式

    JavaScript获取IE版本代码: var gIE = getIE(); alert(gIE.version) function getIE() { var rmsie = /(msie) ([\ ...

  6. js中图片上传,多次上传同一张不生效

    在做图片上传的功能时, 使用删除功能删除了一张图片, 然后想重新上传原来删除的图片, 结果预览不显示, 也不能上传成功 解决办法, 在删除方法里置空input $("#id").f ...

  7. UDP Health Checks

    This chapter describes how to configure different types of health checks for UDP servers in a load-b ...

  8. FastJSON、Gson和Jackson性能对比

    Java处理JSON数据有三个比较流行的类库FastJSON.Gson和Jackson.本文将测试这三个类库在JSON序列化和反序列化的方面表现,主要测试JSON序列化和反序列化的速度.为了防止由于内 ...

  9. n阶方阵的最值问题和对角线的和问题

    如题! package 矩阵2; public class JuZheng { public static void main(String args[]) { int array[][] = { { ...

  10. js模块化规范—概念和模块化进化史以及模块化的问题

    模块的概念 一个复杂的项目开发中,会写很多js文件,一个js文件执行某些特定的功能,那么每个js都可以称为一个模块,这就是模块的概念 每个js模块内部数据/实现是私有的, 只是向外部暴露一些接口(方法 ...