zoukankan      html  css  js  c++  java
  • OO第三阶段总结

    规格化设计调研

    发展历史

    20世纪60年代,软件设计出现危机,并且在这时候产生了结构化程序设计方法,随着更大容量,更高速度的计算机的出现,计算机的应用范围也迅速扩大,结构化的程序设计开始无法满足用户的需求,面向对象程序设计应运而生。

    重视原因

    对于具有复杂需求的项目:

    1. 功能的变化与迭代速度快,需要较高的研发效率,
    2. 多人协作研发需要信息的正确传递与理解
    3. 需要良好的可移植性与可扩展性

    规格Bug表格分析

    Bug编号

    Bug类别

    类别名

    方法名

    行数

    1

    不符合JSF规范

    ReqQueue

    add

    28

    2

    不符合JSF规范

    Map

    getMap

    229

    3

    不符合JSF规范

    Map

    changeState

    264

    4

    不符合JSF规范

    Map

    state

    278

    5

    不符合JSF规范

    LightMap

    getLight

    177

    6

    EFFECTS逻辑错误

    UpdateFlow

    run

    12

    7

    EFFECTS逻辑错误

    Light

    getLight

    177

     

     

     

     

     

     

    规格Bug产生原因

    Bug编号

    产生原因

    1

    synchronized方法未加相应的线程控制说明

    2

    线程控制说明理解错误

    3

    线程控制说明理解错误

    4

    线程控制说明理解错误

    5

    synchronized方法未加相应的线程控制说明

    6

    JSF写错位置

    7

    EFFECTS为布尔表达式,” esult==”而非” esult=”

     

     

     

     

     

    Bug在方法上的聚焦关系

    方法名

    功能Bug数

    规格Bug数

    add

    0

    1

    getMap

    0

    1

    changeState

    0

    1

    state

    0

    1

    getLight

    0

    2

    run

    0

    1

    add

    0

    1

     

     

    不好的前置条件写法及改正

    1.使用自然语言:
    /**
    @REQUIRES:gui不为空
    */
    改正:
    /**
    *@REQUIRES:gui!=null;
    */
    2.前置条件不为布尔表达式“
    /**
    *@REQUIRES: 0<=x<=79;
    *           0<=y<=79;
    */ 
    改正:
    /**
    *@REQUIRES: 0<=x<=79 && 0<=y<=79;
    */              
    3.构造方法参数没有约束:
    public LightMap(TaxiGUI gui,Map map) {
    /**
    *@REQUIRES:None;
    */ } 改正: public LightMap(TaxiGUI gui,Map map) { /** *@REQUIRES:map!=null && gui!=null;
    */ }
    4.缺少对数字范围判断:
    public boolean waitpass(int x,int y) {
    /**
    *@REQUIRES:None;
    */
    }
    改正:
    public boolean waitpass(int x,int y) {
    /**
    *@REQUIRES:0<=x<=79 && 0<=y<=79;
    */
    }
    5.参数约束不全:
    public void setflow(int x1,int y1,int value){
    /**
    *@REQUIRES:0<=x1<=79 && 0<=y1<=79;
    */
    }
    改正:
    public void setflow(int x1,int y1,int value){
    /**
    *@REQUIRES:0<=x1<=79 && 0<=y1<=79 && 0<=value<=1000;
    */
    }

    不好的后置条件写法及改正

    1.线程控制未加锁:
    public synchronized int state() {
    /**
    *@EFFECTS:
    *    
    esult==state;
    */     
    }
    改正:
    public synchronized int state() {
    /**
    *@EFFECTS:
    *    
    esult==state;
    * @THREAD_REQUIRES:
    *      locked();
    * @THREAD_EFFECTS:
    *      locked(	his);
    */     
    }
    2.后置条件不为布尔表达式:
    public int demens(int x,int y) {
    /**
    *@EFFECTS:
    *        
    esult=x*80+y;
    */
    }
    改正:
    public int demens(int x,int y) {
    /**
    *@EFFECTS:
    *        
    esult==x*80+y;
    */
    }
    3.后置条件不全面:
    public Map(TaxiGUI gui) throws FileNotFoundException {
    /** 
    *@EFFECTS:
    *    	his.flow==flow;
    *    	his.map==map;
    *    	his.gui==gui;
    */
    }
    改正:
    public Map(TaxiGUI gui) throws FileNotFoundException {
    /** 
    *@EFFECTSS:
    *    	his.flow==flow;
    *    	his.map==map;
    *    	his.gui==gui;
    *    	his.name==name;
    */
    }
            
    4.使用自然语言:
    public int demens(int x,int y) {
    /**
    *@EFFECTS:
    *   返回x*80+y;
    */
        return x*80+y;
    }
    改正:
    public int demens(int x,int y) {
    /**
    *@EFFECTS:
    *   
    esult=x*80+y;
    */
        return x*80+y;
    }
    5.出现如果--否则语句描述:
    public boolean repOK() {
    /** 
    * @EFFECTS:
    *     (map==null)==>
    esult=false;
    *      else ==>
    esult=true;
    */ 
        if(lightmap==null ) return false;
        return true;        
    }
    改正:
    public boolean repOK() {
    /** 
    * @EFFECTS:
    *      
    esult==!(map==null);
    */ 
        if(lightmap==null ) return false;
        return true;        
    }

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

    在撰写规格时主要会根据方法的输入参数以及输出结果出发进行设计,参数的限制作为前置条件,忽略算法的具体实现,关注外部参数的变化和输出结果,EFFECTS书写需要简洁且全面。在书写规格的过程中,对于各类方法的分析不够全面且清晰,对于参数的限制条件书写较为简单,但是某些方法需要凝练为布尔表达式并不容易;后置条件可能需要一些自然语言作为支撑,并且由于方法行数较长,修改的外部参数过多,书写起来比较冗长。由于自己是先完成了方法,才书写相应的规格,所以。。。

     

     

     

  • 相关阅读:
    适用于ASP.NET的留言本(翻译)
    大足石刻一日游
    Zonet 宽带路由器eMule端口映射设置
    在公式编辑器中使用键盘
    TAU G2的错误信息:TSC0134: Transition must end with stop, nextstate or join action
    Sony DV的CCD也是有问题的
    使用UltraEdit实现从UNIX文件到DOS文件的批量转换
    在PowerPoint中改变公式编辑器的颜色
    如何在Visual Studio.NET 2003下编译ANTLR 2.77
    如何修复修复损坏的TAU G2的.u2文件
  • 原文地址:https://www.cnblogs.com/sbs384/p/9112410.html
Copyright © 2011-2022 走看看