作业十二

规格化设计简介

规格化设计的发展历史

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. Cannot obtain the required interface ("IID_IDBCreateCommand") from OLE DB provider "OraOLEDB.Oracle" for linked server xxxx

      今天遇到了一个关于LINKED SERVER查询报错的案例,链接服务器链接ORACLE数据库,测试没有错误,但是执行脚本的时候,报如下错误: Msg 7399, Level 16, State 1 ...

  2. (转)Debian 安装与卸载包命令

    1.APT主要命令apt-cache search  ------package 搜索包sudo apt-get install ------package 安装包sudo apt-get remov ...

  3. shell编程—简介(一)

    1.shell概念 shell是一个用C语音编写的程序,他是用户使用Linux的桥梁 shell既是一种命令语音,又是一种程序设计语音 shell是指一种应用程序,这个应用程序提供一个界面,用户通过这 ...

  4. MySQL 5.7安装指南

    1.下载 1)进入官网下载5.7.23压缩包 下载地址:https://dev.mysql.com/downloads/mysql/5.7.html#downloads 2.安装与配置 1)将下载的压 ...

  5. c/c++ 多态的实现原理分析

    多态的实现原理分析 当类里有一个函数被声明成虚函数后,创建这个类的对象的时候,就会自动加入一个__vfptr的指针, __vfptr维护虚函数列表.如果有三个虚函数,则__vfptr指向的是第一个虚函 ...

  6. Windows 在命令行中将输出内容放到文件中

    1.将命令行中输出的内容存储到文件中. 使用重定向符号 “>” 就可以了. 通过 > 可以创建新文件并将内容放到文件中,如果文件存在,则会覆盖. 2.通过 >> 可以向已有的文 ...

  7. ASP.NET -- WebForm -- HttpResponse 类的方法和属性

    ASP.NET -- WebForm -- HttpResponse 类的方法和属性 1. HttpResponse 类的方法 (1) AddCacheDependency: 将一组缓存依赖项与响应关 ...

  8. JavaScript数据类型之文本类型

    引言 字符串(string)是一组由16位值组成的不可变的有序序列,每个字符通常来自于Unicode字符集.JavaScript通过字符串类型来表示文本.字符串的长度(length)是其所含16位值的 ...

  9. Java多线程(三)如何创建线程

    点我跳过黑哥的卑鄙广告行为,进入正文. Java多线程系列更新中~ 正式篇: Java多线程(一) 什么是线程 Java多线程(二)关于多线程的CPU密集型和IO密集型这件事 Java多线程(三)如何 ...

  10. Java面试知识点之线程篇(二)

    前言:接上篇,这里继续对java线程相关知识点进行总结. 1.notify和notifyall的区别 notify()方法能够唤醒一个正在等待该对象的monitor的线程,当有多个线程都在等待该对象的 ...