首页 | 互联网 | IT动态 | Cisco | Windows | Linux | Java | .Net | Oracle | 华为 | 存储世界 | 服务器 | 网络设备 | IDC | 安全 | 求职招聘
IT培训 | 数字网校 | 技术专题 | 电子书下载 | 教学视频 | 网页设计 | 平面设计 | 解决方案 | 直播室 | 虚拟考场 | 搜索 | 博客 | 沙龙 | 论坛
中国IT实验室软件测试频道
IT教育热线
 
首页 资讯动态 测试技术 测试工具 行业软件测试 测试管理 测试下载 经验分享 软件质量 其他技术 RSS订阅 博客 论坛
您现在的位置: 中国IT实验室 >> 软件测试 >> 测试技术 >> 单元测试 >> 文章正文

防御性编码和单元测试“交通规则”

文章来源中国软件测试 作者佚名 更新时间2008-5-9 保存本文保存本文 推荐给好友推荐给好友 收藏本页收藏本页

  • 几乎没有软件在整个使用期间都是由原作者维护的。

  • 编码规范改进了软件的可读性,使工程师可以更快和更充分地理解新代码。

  • 如果您将源代码作为产品交付,那么需要保证它有像您创建的所有其他产品一样的包装和整洁性。
  • 即使不赞成“标准”的想法,至少采用这个简单的建议:对变量名使用“匈牙利命名法”,这会使您的代码更容易阅读和维护(有关匈牙利命名法的说明请参阅 参考资料)。

    保证返回代码的一致性
    在调试时有一种会制造麻烦的情况是:调用程序屏蔽(或者覆盖)一个表示错误的返回代码。一定要想好您要向调用您的代码的例程返回什么值,并保证从您所调用的例程返回的所有错误代码都得到恰当处理。如果返回代码 n 在一个地方意味着一件事,就不要在其他的地方用返回代码 n 表示另一件事。

    对每个例程使用“单点退出”
    这一点怎么强调也不过分:对每个例程使用单点退出 —— 就是说,没有多重返回!这是最容易忽视的、也是您可以采用的最好的习惯。如果例程只从一个地方返回,那么就可以用一种非常容易的方法保证在返回前完成所有必要的清理工作,这也使调试更容易。清单 2 显示了一个包含多重返回的代码示例。注意重复代码、甚至忘记“清理”项目(如红色突出显示的文本所示)是多么容易。

    清单 2. 单点退出示例
    1   public String getName( )
    2     {
    3       //
    4       // local variables
    5       //
    6       String returnString;
    7
    8
    9       //
    10      // beginning of code
    11      //
    12      returnString = textField.getText( );
    13      if ( null == returnstring )
    14        {
    15          badCount++;
    16          totalCount++;
    17          return( null )
    18        }
    19
    20      returnString = returnString.trim( );
    21      if ( returnString.equals( "" ) )
    22        {
    23          badCount++;
    24          totalCount++;
    25          return( null );
    26        }
    27
    28      totalCount++;
    29      return( returnString );
    30
    31    } // end getName
    

    在第 15 行,badCount 增加了,因为 getText( ) 返回 null。在第 23 行,badCount 代码又重复了。现在想像一下如果这个例子需要完成更复杂的“清理”时会有多混乱。

    清单 3 显示了一种更好的方法:

    清单 3. 单点退出示例 —— 修正后
    1   public String getName( )
    2     {
    3       //
    4       // local variables
    5       //
    6       String returnString;
    7
    8
    9       //
    10      // beginning of code
    11      //
    12      returnString = textField.getText( );
    13      if ( null != returnstring )
    14        {
    15          returnString = returnString.trim( );
    16          if ( returnString.equals( "" ) )
    17            returnString = null;
    18        }
    19
    20      //
    21      // "cleanup"
    22      //
    23      if ( null == returnString )
    24        badCount++;
    25      totalCount++;
    26
    27      return( returnString );
    28
    29    } // end getName
    

    这是一个简化的例子,但是请注意遵照这种习惯有多么容易,以及这样做的好处。

    加强警戒(En garde)!
    要记住,您的客户对您的产品有与您不一样的想法。他们会在一个您的小组很可能从来也没想到的 —— 或者至少是没有可能测试的 —— 环境中安装它。他们会以您从来没有想到过的方法使用它,并以您意想不到的方法配置它。下面的列表有助于帮助您保证他们不会发怒:

    • 验证所有收到的参数的完整性(考虑如果您期待一个数组而传递来的是一个 null,但是您在索引数组之前没有检查这种可能性时会发生什么情况)。

    • 考虑所有可能的错误情况并增加处理每种情况的代码(您希望代码得体地处理错误条件而不是堵塞它)。

    • 对于那些未预料到的错误条件,加入一个一般性的“捕获所有”错误处理程序。

    • 在适当的时候和地点使用常量。

    • 在代码各处加入跟踪和日志。

      上一页  [1] [2] [3] [4] [5] 下一页  

      【责编:Luzi】

    中国IT教育

    相关产品和培训
    文章评论
     专题推荐

     ·关于Java框架技术专题
     ·XML全攻略技术专题
     ·企业网管如何部署你的网络监控系统?
     ·2008年软考官方指定教材及辅导书下载专题
     ·负载均衡技术方案攻略
     ·中国IT实验室2007年技术热点盘点
     ·利用路由实现VPN的配置方法
     ·JAVA开源技术介绍专题
     ·让你的局域网网速更上一层楼
     ·Linux Shell编程实用指南
     最近更新
     博客论点
     频道精选
     软件测试频道导航