技术开发 频道

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

    清单 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,但是您在索引数组之前没有检查这种可能性时会发生什么情况)。


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


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


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


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


    如果您的产品将翻译为另一种语言,那么保证您的代码可以“支持”它。即使出现这种情况的机会很小,但是提前计划总是好一些。修改代码以使它提供支持是最容易产生缺陷的。下面是几个您要考虑的与支持相关的问题:
    您是否有任何硬编码的字符串?
    您是否正确地处理不同的日期/时间?
    不同的货币表示呢?

 

    还有,在代码中使用大量断言。有关在 Java 代码中使用断言的细节信息请参阅 参考资料。


    给您的代码加上充分的 注释。总之,您还记得在六个月前编写那个方法时的想法吗?一年后要修改您的代码的某个人又会怎么想呢?在我们提出的所有建议中,这一条可能是最重要的。
    跟踪和日志


    日志是必不可少的,而现有的最好工具是 alphaWorks 的 Logging Toolkit for Java (更多信息请参阅 参考资料)。

0
相关文章