规格设计的发展历史

  随着计算机软硬件的发展,代码的复杂程度也在不短增加,随着计算机软件规模日渐庞大,结构化程序设计方法开始无法满足用户的需求,面向对象程序设计产生。面向对象程序设计是一场重大的革命,提高了开发人员的效率,有效的控制了软件开发的复杂度,提高了软件的可维护性和可拓展性。一个复杂,功能强大的程序,往往不只是由单个人员设计而成,需要多人的合作,各司其职,再把多人的工作整合起来,而要达到多人为一份作业服务,就需要要求代码的规格化,提高程序的规范性以及程序的模块化划分. 这样使得程序设计的数据更加安全, 软件的可维护性得到有效的提高.

bug分析:

  功能性bug:

  第九次作业:出租车不能初始化信用值

  产生原因:把指导书里面的NO和status看到了一起,所以在设置初值的时候忘记还有个信用值了,自己的测试不够准确.

    代码:

public void set(int mode,int honesty,int x,int y){
/**@ REQUIRES:0<=x,y<=79,1<=mode<=4
@ MODIFIES:customer dest mode
@ EFFECTS:mode = input(mode) pos = input(pos)
@ */
pos = new Point(x,y);
if(mode == 0)
this.mode = 4;
if(mode == 1)
this.mode = 3;
if(mode == 2)
this.mode = 1;
if(mode == 3)
this.mode = 2;
this.honest = honesty;
if(mode == 3 || mode == 4){
customer = new Point(1,1);
dest = new Point(1,2);
}
}

  第十次作业:没有按照最短流量规则行走.

  产生原因:因为功能改变导致流量计算规则更新,重写了流量相关的代码,结果最后增加流量的一个语句写掉了,主要还是自己的测试有点简单,不充分.

规格 bug:

  第九次作业有需要写得不合规范,第十次作业和第十一次作业有关于jsf格式问题被扣很多,比如空格还有'\result的格式等等.

规格 bug 产生的原因

  自己并没有充分理解格式,对于jsf的规范写法不够了解,仅仅当做注释一类的作用

  有的测试者比较过分.按照自己的理解而又不给出依据.

分别列举 5 个前置条件和 5 个后置条件的不好写法, 并给出改进

前置条件

鉴于自己的做修改

  • @ REQUIRES:中间@不要加空格,@REQUIRES
  • 对于对象数组, 应判断数组中每个对象也不为空 @REQUIRES: (arr != null) && (\all i in arr; i != null)
  • 要对传进的所有有对象进行描述,不要忽略 null的情况@REQUIRES: * != null
  • 少用自然语言
  • 约束对象范围,如坐标值需要大于0等

后置条件

  • 要写完整,对于满足requires和不满足的都要填写
  • 不能用纯代码的格式,要用规范格式书写,比如==需要用两个=,只能是判断
  • 描述规范,/all /exsit要分清.
  • 对常量单独定义, 否则失去意义 @EFFECTS: (0 <= x < max_limit) ==> (\result == true)
  • 少用自然语言

 

功能 bug 与规格 bug 在方法上的聚类关系

功能 bug 与规格 bug 在我的程序中没有同时出现.无法描述

设计规格和撰写规格的基本思路和体会

说实话这个规格有点让人难受,描写规格本来是很好的,很规范,让人对于代码的理解更轻松的一件事情.但是由于不够准确的规格指导,规范化完全不够的jsf写法,就我个人很言,写起来让我很烦恼,很难写,甚至比我写那些代码都更麻烦,而且,按照写法写完的jsf也并不利于阅读,对于这个规格同学们都有各自的理解,往往有很多人能找出很多无理的错误,对于作业来说,公测现在已经够弱了,基本上已经快变成想拿分就能拿分的情况,你要做到jsf能符合完全的"规范"(我现在也没有了解完全的规范),比你写出一个合适的程序更加困难.

希望以后能让jsf达成他应有的效果,是提供方便,提高效率,消除分歧,而不是现在这样的麻烦,降低了效率,引发了争端.

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

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

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

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

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

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

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

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

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

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

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

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

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

  7. 【西北师大-2108Java】第十二次作业成绩汇总

    [西北师大-2108Java]第十二次作业成绩汇总 作业题目 面向对象程序设计(JAVA) 第14周学习指导及要求 实验目的与要求 (1)掌握GUI布局管理器用法: (2)掌握Java Swing文本 ...

  8. 2019-2020-1 20199329《Linux内核原理与分析》第十二周作业

    <Linux内核原理与分析>第十二周作业 一.本周内容概述: 通过编程理解 Set-UID 的运行机制与安全问题 完成实验楼上的<SET-UID程序漏洞实验> 二.本周学习内容 ...

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

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

随机推荐

  1. Django 中使用 Celery

    起步 在 <分布式任务队列Celery使用说明> 中介绍了在 Python 中使用 Celery 来实验异步任务和定时任务功能.本文介绍如何在 Django 中使用 Celery. 安装 ...

  2. HTML5滚动加载

    @using YoSoft.DSM.YoDSMModel;@using YoSoft.DSM.YoDSMBLL;@{ Layout = "~/Views/Shared/_LayoutComp ...

  3. Office DCOM 组件交互权限设置

    这里以 WORD 为例: 运行 mmc -32 打开控制台. 点击 文件 -> 添加/删除管理单元 ,在 可用的管理单元 中选择 组件服务 ,然后点击 添加 , 确定 . 展开 组件服务节 点直 ...

  4. 好玩图像pil处理

    pil库的学习总结 #__author:'lwq'#date: 2018/11/15 from PIL import Image,ImageFilter,ImageDraw,ImageFont ### ...

  5. C语言 Struct 结构体在 Java 中的体现

    大一整个学期完成了 C 语言的学习,大二就进入了Java 的学习. 和C语言一样,我们都会尝试写一个小小的学生管理系统什么的,学习过 C 语言同学知道,在管理系统中 Struct 结构体是个很好用的东 ...

  6. JavaScript 随意记

    js 志异: <script> // ----- 1 --------- alert(new Date()) alert(+new Date()) </script>

  7. pyhon-request之repsonse的常用方法reponse.text和reponse.content的区别

    1. requests在python2 和 python3中通用,方法完全一样 2. request简单易用 requests的作用 作用:发送网络请求,返回响应数据 用法 response = re ...

  8. 【python 3】 函数 进阶

    函数进阶 1.函数命名空间和作用域 命名空间一共分为三种: 全局命名空间 局部命名空间 内置命名空间 *内置命名空间中存放了python解释器为我们提供的名字:input , print , str ...

  9. xls到xml

      protected void btn_ok_Click(object sender, EventArgs e)     {         string x = txtpath.Text;     ...

  10. mysql将查询结果导出

    一.首先确认当前数据库设置导出是允许的 show variables like '%secure%'; 如果是null则代表不允许,这时可以用命令修改,或者直接修改数据库配置文件my.ini,在其中添 ...