作业十二

规格化设计简介

规格化设计的发展历史

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 因为程序采用系统时间,而且不能进行化整,故每过几秒程序会有几毫秒的误差

聚集关系:无

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

  1. //错误
  2. /**
  3. * @REQUIRES:None
  4. * @MODIFIES:None
  5. * @EFFECTS :return flow;
  6. */
  7. //改进
  8. /**
  9. * @REQUIRES:None
  10. * @MODIFIES:None
  11. * @EFFECTS :\result == flow;
  12. */

误将==写为=

  1. //错误
  2. /**
  3. * @REQUIRES:None
  4. * @MODIFIES:None
  5. * @EFFECTS :\result = errorInfo;
  6. */
  7. //改进
  8. /**
  9. * @REQUIRES:None
  10. * @MODIFIES:None
  11. * @EFFECTS :\result == errorInfo;
  12. */

使用自然语言

  1. // 错误
  2. /*
  3. * @REQUIRES:None
  4. * @MODIFIES:None
  5. * @EFFECTS: 初始化出租车;
  6. */
  7. // 改进
  8. /*
  9. * @REQUIRES:None
  10. * @MODIFIES:None
  11. * @EFFECTS: \this.id == id;
  12. */

语句结束未加;

  1. //错误
  2. /**
  3. * @REQUIRES:this.repOK == true && edge.repOK == true
  4. * @MODIFIES:this.edgeNearBy
  5. * @EFFECTS :(edge.isLegal) ==> edgeNearBy.add(edge)
  6. */
  7. //改进
  8. /**
  9. * @REQUIRES:this.repOK == true && edge.repOK == true
  10. * @MODIFIES:this.edgeNearBy
  11. * @EFFECTS :(edge.isLegal) ==> edgeNearBy.add(edge);
  12. */

部分语句不够简洁

  1. //错误
  2. /**
  3. * @REQUIRES:this.repOK == true && taxiNumber >= 0 && taxiNumber <= 99
  4. * @MODIFIES:taxiCanTake
  5. * @EFFECTS :taxiCanTake.add(taxiNumber);
  6. */
  7. //改进
  8. /**
  9. * @REQUIRES:this.repOK == true && 0 <= taxiNumber <= 99
  10. * @MODIFIES:taxiCanTake
  11. * @EFFECTS :taxiCanTake.add(taxiNumber);
  12. */

思路和体会

这几次作业,我们的主要着重点在于程序的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. java笔记----常见的异常

    常见的可控异常 运行时的异常 异常信息的获取

  2. 关于hightcharts如何在同一HTML画两个及以上图形问题

    ---恢复内容开始--- 写这篇博文也是因为做图表展示时被在同一网页上展示两个饼图难住,关键点在于views,py文件里面的render()函数,对于这个函数有三个参数: request----默认参 ...

  3. Eclipse JVM terminated.exit code=13

    今天,在安装Nomad PIM时碰到这个问题,因为这个应用是基于32位的Eclipse平台开发的,而我的电脑是64位的Windows 7,当然安装的JDK也是64位的,于是报错. 搜索了网上,给了许多 ...

  4. Ubuntu开启或重启ssh服务

    开启ssh服务首先需要安装打开ssh服务的库: sudo apt-get install openssh-server 检查当前的ssh开启情况: ps -e |grep ssh 如果有sshd,则s ...

  5. 安装 Kivy

    Kivy 是基于Python编程语言的一种用于开发跨平台GUI客户端程序的框架.可以打包成iOS.Android.Windows.OSX等多种平台.目前已经实现一次编码,到处运行的目的. Kivy框架 ...

  6. Python写代码的用法建议

    1.Mutable and immutable types Python有两种内置或用户定义的类型 可变类型是允许就地修改内容的类型.典型的可变列表是列表和词典:所有列表都有变异方法,如 list.a ...

  7. Android 6.0以后的版本报错:open failed: EACCES (Permission denied)

    Android 6.0以后的版本报错:open failed: EACCES (Permission denied) 在开发项目中,遇见要进行文件操作,遇见Caused by: android.sys ...

  8. 【vue】vue +element 搭建项目,将js函数变成vue的函数

    demo:时间转换 1.目录 <1>在src文件夹下新建文件夹prototypefns--------在此文件夹创建util.js, <2>在prototypefns下新建文件 ...

  9. 【angularjs】使用angular搭建项目,获取dom元素

    方法一:需要引入jq,否则会报angularJS1 Error: [jqLite:nosel](不建议使用) <div id="testID" class="tes ...

  10. ubuntu 在 Windows 下的安装

    1. ubuntu 下载官网:https://www.ubuntu.com/index_kylin