首页 > 其他 > 详细

OO第三次博客作业

时间:2018-05-28 19:40:55      阅读:218      评论:0      收藏:0      [点我收藏+]

调研规格化设计

  规格化设计的历史和发展进程网络上实在没有相关的资料.........

  下面分析一下问什么得到人们的重视:

  •      规格化将运行细节(即模块如何实现)抽象为用户所需求的行为(即模块做什么),是从具体实现中抽象出模块,需要的仅仅是模块的实现能够匹配我们所依赖的表述形式。每当将一个过程与一个注释(这个注释提供了充分的信息,是其他人不用看过程主体就能使用该过程)关系起来;
  •      从别的领域我们已经得到启示,规格化的设计有助于提高生产效率,这个道理在我们计算机领域也是如此,在开发一个大型程序时,往往需要分给多个人合作,为了防止每个人的理解是不同的而造成无法满足具体需求,人们会提供一个规格来解决这个问题;
  •      同时这个规格也可以提示程序员来减少bug的产生

规格bug分析

规格bug 对应方法的行数
Effecets内容为实现算法 331

  bug产生的原因:在EFFECTS中对于该方法的后置条件讨论不够充分,在不同情况下对于MODIFIES中的属性的改变情况说明过于模糊。这个方法中实现的是出租车带等待接单时车行走的方式,因为实现复杂无法通过形式化语言实现,所以后置条件讨论的不充分;对应的modifies属性的改变也是模糊的。

不好写法和改进写法

  我的jsf写的确实不太好,因为有的方法实现的东西有很多,所以用的自然语言没有形式化语言;  

  1.我的出租车判断方向时:

 返回值为-1不应该放入exception中

/** 
         * @ REQUIRES: None;
         * @ MODIFIES: None;
         * @ EFFECTS:
         *             normal_behavior:
         *                 (x==n_x&&n_y>y)==>\result == 4;
         *                 (x==n_x&&n_y<y)==>\result == 3;
         *                 (y==n_y&&n_x>x)==>\result == 2;
         *                 (y==n_y&&n_x<x)==>\result == 1;
         *             exception_behavior(Exception e):
         *                 \result == -1;
         */
if(x==n_x&&n_y>y) return 4; else if(x==n_x&&n_y<y) return 3; else if(y==n_y&&n_x>x) return 2; else if(y==n_y&&n_x<x) return 1; return -1;

 改进后

/**    * @ REQUIRES: None;
         * @ MODIFIES: None;
         * @ EFFECTS:
         *             normal_behavior:
         *                 (x==n_x&&n_y>y)==>\result == 4;
         *                 (x==n_x&&n_y<y)==>\result == 3;
         *                 (y==n_y&&n_x>x)==>\result == 2;
         *                 (y==n_y&&n_x<x)==>\result == 1;
         *               (!(x==n_x&&n_y>y)&&!(x==n_x&&n_y<y)&&!(y==n_y&&n_x>x)&&!(y==n_y&&n_x<x)) ==> \result == -1;
*/

   2.查询出租车信息时:

用自然语言写的很简略

/** 
         * @ REQUIRES: None;
         * @ MODIFIES: None;
         * @ EFFECTS:
         *             normal_behavior:
         *                 输出i号出租车的具体信息;
         *             exception_behavior(Exception e):
         *                 do nothing;
         */

改进后

/** 
         * @ REQUIRES: None;
         * @ MODIFIES: None;
         * @ EFFECTS:
         *             normal_behavior:
         *                 \result == "Time:\t"+System.currentTimeMillis()+"Station:\t("+t[i].x+","+t[i].y+")"+"Statics\t"+t[i].statics;
         *             exception_behavior(Exception e):
         *                 do nothing;
         */

  3.求处于某一状态的出租车的编号

用自然语言写的很简略

/** 
         * @ REQUIRES: None;
         * @ MODIFIES: None;
         * @ EFFECTS:
         *             normal_behavior:
         *                 输出处于statics状态的出租车编号;
         *             exception_behavior(Exception e):
         *                 do nothing;
         */

改进后

/** 
         * @ REQUIRES: None;
         * @ MODIFIES: None;
         * @ EFFECTS:
         *             normal_behavior:
         *                (\all int i; 0<=i<100; (t[i].statics == statics) ==> /result == i;
         *             exception_behavior(Exception e):
         *                 do nothing;
         */

  4.判断是否还有路径的下一个结点

写法上还是不太好

/**
     * @ Effects: \result == (cnt+1>=0 && cnt+1<=len-1) ==> true;
                          (cnt+1 <0 || cnt+1>len-1) ==> false;
     */    

改进后   

/**
     * @ REQUIRES: None;
     * @ MODIFIES: None;
     * @ Effects:    (cnt+1>=0 && cnt+1<=len-1) ==> \result == true;
     *                  (cnt+1 <0 || cnt+1>len-1) ==> \result == false;
     */    

  5.返回路径的上一个节点时

写法上还是有自然语言

/**
     * @ Requires: None;
     * @ Modifies: None;
     * @ Effects: \result == (cnt-1 >= A.arraylist.size() || cnt < 1) ? null :  String of previous position
     */

改进后

/**
     * @ Requires: None;
     * @ Modifies: None;
     * @ Effects: (cnt-1 >= A.arraylist.size() || cnt < 1) ==> \result == null;
   *       !
(cnt-1 >= A.arraylist.size() || cnt < 1) ==> \result == A.arraylist.get(cnt);
   */

功能bug和规格bug在方法上的聚集关系

  方法名 功能bug数 规格bug数
第9次作业 request 1 0
第10次作业 1 0
第11次作业 dispath 2 1

  在我的程序中,功能bug和规格bug没有体现出具体的聚集关系,但实际上他们是密切相关的,如果规格写不好的话很容易产生功能上的bug,相反规格写的易于理解,更加正规化的是可以大大降低产生功能bug的可能的;

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

  这个jsf写起来确实非常的讨厌,消耗了大量的时间,可能会比写代码的时间用的还要多,但这个时间肯定是有所回报的,jsf是一个非常重要的东西。现在可能看不出来这个东西的重要性,但是当很多人在一起合作时,这个东西的重要性就体现出来了,为了和其他人进行交互你必须要别人看懂你的代码,而jsf就是一个非常好的让人看懂你代码的东西。同时jsf还能有助于你理清思路,让你减少功能性bug的出现。

  总的来说,jsf是很枯燥,很无聊,但它是非常有用的,所以得好好写啊,不好好写就被扣分了(.jpg)!

OO第三次博客作业

原文:https://www.cnblogs.com/yangfenghaha/p/9095882.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!