测试遗漏与管理——硬编码之伤

发表于:2010-9-15 11:18

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:tangyu.jc    来源:TaoBao QA Team

  首先举个硬编码的例子

  对象SomeObject的是这样的:

class SomeObject{
    public SomeObject(String name,String value){
       this.name=name;
       this.value=value;
    }
        public String name;
        public String value;
}

  注意,我只是为了节省篇幅所以才这么定义SomeObject的name和value!!

  我们有这样一个需求,某个方法的需求是,让result等于对象的name的值,如下:

public String printResult(SomeObject object){
        String result;
        result = object.name;
        return result;
}

  后来,由于业务需求的增加,某个name等于”A”的对象,在该方法中result等于value,于是,将上面的这段代码改成了:

public String printResult(SomeObject object){
       String result;
       if(object.name.equals(“A”)){
           result = object.value;
       }else{
           result = object.name;
       }
       return result;
}

  后来,在一个很偶然的机会,我们又出现了另一个name等于“A”的对象,对这个对象,我们需求是result等于name。当换了一个开发人员进行更改这段代码时,很可能出现下面的情况:

public String printResult(SomeObject object){
       String result;
//     if(object.name.equals(“A”)){
//     result = object.value;
//     }else{
       result = object.name;
//         }
       return result;
}

  于是,这个修改测试也成功了,发布上线,线上测试后,很正常,但是,悲剧发生了,这个不解释。

  这是硬编码带来的硬伤。

  而且硬编码一旦产生,在硬编码上再次硬编码也是不一定不可能。或许上面的程序很可能在一系列的硬编码之后变成下面的情形。

public String printResult(SomeObject object){
       String result;
       if(object.value.equals(“X”)){
           if(object.name.equals(“A”)  ||  object.name.equals(“B”))
              result = object .value;
           else
              result = object .name;
       }else{
           result = object .name;
       }
       return result;
}

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号